[{"content":"계정 생성과 로그인 처리를 실행합니다. 저장소 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Account GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Account/initialize_account_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같이 표시됩니다. 실행해 보면 처음에는 “Not Logged-in\"이 표시됩니다. 잠시 기다리면 “Logged-in\"이라는 표시로 바뀌고, 오른쪽 아래에 로그인 중인 사용자ID가 표시됩니다. 프로젝트 해설 씬의 계층 구조(hierarchy)를 확인하십시오. GS2 로고가 표시된 Game Object에는 UI Kit의 컴포넌트가 할당되어 있습니다. Canvas/View 2개의 컴포넌트가 할당되어 있는 것을 확인할 수 있습니다. Gs2AccountLoggedInEnabler Add Component 메뉴에서는 다음 경로로 추가할 수 있습니다. 로그인 상태에 따라 GameObject를 활성화·비활성화할 수 있는 컴포넌트입니다. Logged In에 체크하지 않고 Target에 GameObject를 지정하면, 미로그인 상태일 때 Target에 지정한 GameObject가 활성화되고, 로그인 시에는 비활성화됩니다. 반대로 Logged In에 체크를 해 두면 로그인 시 Target에 지정한 GameObject가 활성화되고, 미로그인 상태일 때는 비활성화됩니다. 이번 샘플에서는 미로그인 상태일 때 “NotFoggedIn\"이 활성화되고, 로그인 시에는 “LoggedIn\"이 활성화됩니다. Canvas/View/LoggedIn 여기서도 2개의 컴포넌트가 할당되어 있는 것을 확인할 수 있습니다. Gs2AccountOwnAccountContext 이 GameObject보다 하위 요소에서 사용할 컨텍스트를 지정합니다. Gs2AccountOwnAccountContext에서는 GS2-Account의 로그인 중인 계정에 관한 컨텍스트를 지정합니다. “OwnAccount\"라는 ScriptableObject가 지정되어 있습니다. OwnAccount에서 지정한 ScriptableObject를 확인해 보면, game-0001이라는 이름의 네임스페이스 내에서 자기 자신의 계정을 나타내는 ScriptableObject가 지정되어 있습니다. Gs2AccountOwnAccountFetcher Gs2AccountOwnAccountContext에서 지정된 계정의 정보를 취득하여 보유합니다. Canvas/View/LoggedIn/UserId Gs2AccountAccountLabel 부모 노드의 Gs2AccountOwnAccountFetcher가 취득한 계정 정보를 Format에서 지정한 형식으로 출력합니다. 샘플에서는 {userId}를 지정하고 있으므로, 자기 자신의 사용자ID로 치환됩니다. Add Format Parameter 버튼을 누르면 Format에 플레이스홀더를 추가할 수 있습니다. 정형화된 문자열은 OnUpdate(String) 이벤트에 전달됩니다. 이번에는 동일한 GameObject에 설정된 Text에 값을 반영하고 있습니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. 이러한 API를 실행하는 프리팹은 컨텍스트 메뉴에서 추가할 수 있습니다. AutoLogin 계정 생성·로그인에 사용하는 GS2-Account의 네임스페이스와, 로그인 처리에 사용하는 GS2-Key의 암호화 키를 지정하고 있습니다. OnAutoLogin에서 로그인이 성공했을 때 호출되는 이벤트 핸들러를 설정하고 있습니다. 기본값으로는 자신의 GameObject를 비활성화하여, 로그인 처리가 중복으로 실행되지 않도록 설정되어 있습니다. OnError에서 로그인에 실패했을 때 호출되는 이벤트 핸들러를 설정하고 있습니다. 여기서는 오류 내용을 출력하는 함수를 호출하고 있습니다.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity를 사용한 GS2-Account 기능 구현 샘플 소개","title":"Account(GS2 UIKit for Unity)의 샘플","url":"/ko/articles/sample/uikit_project/account/"},{"content":"Amazon EventBridge 는 AWS 가 제공하는 기능 중 하나입니다. 이 기능을 이용하면 GS2 내에서 발생한 이벤트를 트리거로 하여 AWS 상의 Lambda/SQS 와 같은 컴포넌트에 처리를 연결하고, 추가 처리를 수행할 수 있습니다. 이용 방법 GS2 상에서 Amazon EventBridge 를 활성화하기 먼저 AWS 관리 콘솔에 접속하여 Amazon EventBridge 를 엽니다. 이때 리전은 us-east-1 (N.Verginia) 을 사용하도록 해주세요. 사이드 메뉴에서 Partner event sources 를 선택합니다. 검색 상자에 키워드를 입력하여 Game Server Services 를 찾습니다. Set up 을 선택하면 간단한 설정 흐름이 표시됩니다. Your AWS account ID 옆의 「Copy」 버튼을 눌러 계정ID를 저장합니다. GS2 관리 콘솔에 접속하여 사이드 메뉴에서 Project \u003e 설정 갱신 을 선택합니다. AWS EventBridge 를 「활성화」로 설정하고, 알림에 사용할 AWS 계정의 ID에 앞서 복사한 정보를 입력합니다. 알림에 사용할 AWS 리전에는 us-east-1 을 설정합니다. 이것으로 GS2 에서의 EventBridge 설정이 완료되었습니다. AWS 상에서 GS2 로부터 받은 이벤트를 처리하도록 설정하기 Amazon EventBridge 의 Partner event sources 페이지 목록에 생성된 GS2 관련 이벤트 소스가 추가되어 있습니다. 이벤트 소스의 상세 정보를 열면 Associate with event bus 라는 버튼이 있으니, 버튼을 클릭합니다. 설명을 읽은 후 Associate 를 실행해 주세요. 상태가 Active 가 되면 이용할 수 있는 상태가 된 것입니다. 이벤트 규칙 정의하기 사이드 메뉴에서 Rules 를 선택합니다. 규칙 목록이 표시되면 Create rule 을 선택합니다. Event bus 에 앞서 Associate 한 이벤트 소스를 선택하고 Next 를 선택합니다. 다음으로 GS2 로부터 받은 이벤트를 필터링하는 설정을 작성합니다. 자세한 내용은 Amazon EventBridge 문서를 참조해 주세요. 이번에는 All events 를 선택하여 모든 이벤트를 이후 처리에서 이용하도록 하겠습니다. 다음으로 받은 이벤트를 어떻게 이용할지 설정합니다. 이번에는 AWS Lambda 로 받을 것이므로, Function 에 실행하고자 하는 함수를 설정합니다. 구독하고 싶은 이벤트를 EventBridge 로 전달하도록 설정하기 네임스페이스 설정에서 완료 알림 전송 대상으로 EventBridge 를 지정하여 생성합니다. 동작 확인 AWS Lambda 에 등록한 함수는 받은 이벤트를 print 하기만 하는 단순한 것으로 설정합니다. 이번에는 계정 등록 시 EventBridge 로 연계하도록 설정했으므로, 관리 콘솔에서 계정을 등록합니다. 실행 로그를 확인하면 함수가 호출된 것을 알 수 있습니다. 로그 상세 정보를 확인하면 등록된 계정 정보와 생성에 사용된 네임스페이스 정보 등이 전달되고 있는 것을 확인할 수 있습니다. 이제 AWS Lambda 에 등록하는 함수를 수정하여 자유롭게 추가 처리를 작성할 수 있습니다. 이번에는 Python 을 사용한 코드를 작성했지만, AWS Lambda 는 그 외에도 다양한 프로그래밍 언어를 지원합니다. GS2 도 다양한 프로그래밍 언어용 SDK를 제공하고 있으므로, AWS Lambda 에서 GS2 의 기능을 호출하는 것도 가능합니다.","lang":"ko","section":"overview","summary":"Amazon Event Bridge 의 이용 을 이용한 GS2 의 기능 확장에 대해\n","title":"Amazon Event Bridge 의 이용","url":"/ko/overview/workflow/coding/extend/event_bridge/"},{"content":"텍스트 채팅 기능을 구현합니다. 리포지토리 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Chat GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Chat/initialize_chat_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같은 화면이 됩니다. 실행하면 텍스트 입력란과 전송 버튼이 화면 하단에 표시되는 화면만 그려집니다. “test” 라고 입력하고 전송해 봅니다. 그러면 게시한 일시와 메시지가 표시됩니다. 한 번 더, 이번에는 “test2” 라고 입력하고 전송해 봅니다. 목록에도 게시된 메시지가 반영됩니다. 프로젝트 해설 씬의 계층 구조에 주목해 주세요. Canvas/ChatWindow Gs2ChatRoomContext 이 GameObject 이하의 노드에서 다룰 채팅룸을 지정합니다. 이 샘플에서는 chat-0001 이라는 네임스페이스의, room-0001 이라는 이름의 룸을 지정하고 있습니다. Canvas/ChatWindow/Messages/…/Content Gs2ChatMessageListFetcher RoomContext 에서 지정된 룸의 메시지 목록을 취득합니다. Gs2ChatMessageList Gs2ChatMessageListFetcher 로 취득한 메시지를 지정된 프리팹에 할당하여 생성합니다. Maximum Items 에는 프리팹을 생성할 최대 개수를 지정합니다. 이번에는 자식 노드에 있는 Message 를 프리팹으로 지정하고 있습니다. 프리팹으로 지정된 GameObject 가 씬 내에 존재하는 경우, 해당 GameObject 는 비활성화되고, 그 외에 Maximum Items 로 지정된 수만큼 GameObject 가 생성됩니다. Canvas/ChatWindow/Messages/…/Content/Message Gs2ChatMessageContext 이 GameObject 이하의 노드에서 다룰 메시지를 지정합니다. 컨텍스트의 내용은 Gs2ChatMessageList 에 의해 할당됩니다. Gs2ChatMessageFetcher MessageContext 에서 지정된 메시지를 취득합니다. Canvas/ChatWindow/Messages/…/Content/Message/Text Gs2ChatMessageLabel Gs2ChatMessageFetcher 로 취득한 메시지의 내용을 출력합니다. 이번에는 「{메시지 게시 시간}:{메시지 게시 분} {메시지 페이로드}」 로 정형하도록 Format 에 지정하고 있습니다. 정형된 값은 OnUpdate(String) 으로 콜백되어, Text 컴포넌트에 값이 반영됩니다. Canvas/ChatWindow/Input/Send/Gs2ChatMessagePostAction Gs2ChatMessagePostAction 메시지를 게시하는 처리를 실행하는 프리팹입니다. 이 컨텍스트 메뉴에서 추가할 수 있습니다. 게시할 메시지의 내용을 Category 와 Metadata 에 지정하여, 프리팹을 활성화합니다. 그렇기 때문에 이 프리팹은 기본적으로 비활성화되어 있으며, 메시지의 전송 버튼을 클릭했을 때 활성화되도록 설정되어 있습니다. OnPostComplete(EzMessage) 에는 메시지 전송이 정상적으로 완료되었을 때의 콜백을 지정할 수 있습니다. 여기서는 자기 자신을 비활성화하고, 채팅 메시지의 텍스트 입력란을 초기화하는 처리가 설정되어 있습니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으므로, 그쪽을 참조해 주세요. 도전해 봅시다 로그인 처리가 완료될 때까지 “메시지 전송 버튼” 을 비활성화하려면 어떻게 하면 될까요? 로그인 처리가 끝났는지 여부로 분기하는 방법은 Account 샘플 에서 설명하고 있습니다. 어떻게 하면 가능할지 생각해 보세요.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity 를 사용한 GS2-Chat 기능 구현 샘플 소개","title":"Chat(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/chat/"},{"content":"도감 기능을 구현합니다. 리포지토리 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Dictionary GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Dictionary/initialize_dictionary_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같은 화면이 됩니다. 실행하면 A~E 까지 5체의 캐릭터 입수 상황이 표시됩니다. 지금은 어떤 캐릭터도 입수하지 않았기 때문에, 전부 그레이아웃되어 있습니다. 화면 하단에 각 캐릭터를 입수하는 버튼을 배치하고 있습니다. 우선, “A” 버튼을 눌러 봅시다. “A” 캐릭터를 입수함으로써 컬러 표시가 되고, 입수 시간이 표시됩니다. 마찬가지로 “C” 버튼을 눌러 봅시다. “C” 캐릭터도 컬러 표시가 됩니다. 프로젝트 해설 씬의 계층 구조에 주목해 주세요. Canvas/DictionaryWindow Gs2DictionaryNamespaceContext 이 GameObject 이하의 노드에서 다룰 네임스페이스를 지정하고 있습니다. 이번에는 dictionary-0001 을 지정하고 있습니다. Canvas/DictionaryWindow/Dictionary/…/Content Gs2DictionaryEntryModelListFetcher NamespaceContext 에서 지정된 네임스페이스의 엔트리 모델 목록을 취득합니다. Gs2DictionaryEntryModelList Gs2DictionaryEntryModelListFetcher 로 취득한 엔트리 모델을 지정된 프리팹에 할당하여 생성합니다. Maximum Items 에는 프리팹을 생성할 최대 개수를 지정합니다. 이번에는 자식 노드에 있는 Entry 를 프리팹으로 지정하고 있습니다. 프리팹으로 지정된 GameObject 가 씬 내에 있는 경우, 해당 GameObject 는 비활성화되고, 그 외에 Maximum Items 로 지정된 수만큼 GameObject 가 생성됩니다. Canvas/DictionaryWindow/Dictionary/…/Content/Entry Gs2DictionaryEntryModelContext 이 GameObject 이하의 노드에서 다룰 엔트리를 지정하고 있습니다. 컨텍스트의 내용은 Gs2DictionaryEntryModelList 에 의해 할당됩니다. Gs2DictionaryEntryModelFetcher Gs2DictionaryEntryModelContext 에서 지정된 엔트리의 모델을 취득합니다. Gs2DictionaryOwnEntryFetcher Gs2DictionaryEntryModelContext 에서 지정된 엔트리 모델의 자신의 엔트리를 취득합니다. Gs2DictionaryEntryEnabler Entry 의 로드 상태에 따라 입수 일시를 표시하는 GameObject 를 활성화합니다. 엔트리를 입수하지 않은 경우에는 Loaded 상태가 되지 않으므로, 입수한 경우에만 활성화됩니다. Gs2DictionaryEntryModelEnabler EntryModel 의 로드 상황에 따라 엔트리의 이름을 표시하는 GameObject 를 활성화합니다. Canvas/DictionaryWindow/Dictionary/…/Content/Entry/Icon 캐릭터의 아이콘 이미지를 표시합니다. 단, 목록에 표시하는 엔트리에 따라 표시할 이미지의 종류가 달라져야 합니다. Gs2DictionaryEntryModelNameEnabler Gs2DictionaryEntryModelFetcher 로 취득한 엔트리 모델의 이름에 따라 GameObject 를 활성화·비활성화합니다. 샘플에서는 5개를 배치하여 “A”~“E” 중 해당하는 엔트리의 노드만 활성화되도록 설정되어 있습니다. Canvas/DictionaryWindow/Dictionary/…/Content/Entry/Icon/A “A”~“E” 의 GameObject 가 설정되어 있지만, 원칙적으로 동일한 구성을 취하고 있습니다. 입수 일시를 표시하는 부분과 마찬가지로 분기하여, 입수 완료된 경우에는 Active 를 활성화하고, 미입수인 경우에는 Disabled 를 활성화하고 있습니다. Canvas/DictionaryWindow/Dictionary/…/Content/Entry/Icon/A/Active Canvas/DictionaryWindow/Dictionary/…/Content/Entry/Icon/A/Disabled Disabled 에서는 Material 에 GrayScaleMaterial 을 지정함으로써 셰이더를 사용하여 그레이아웃시키고 있습니다. Canvas/DictionaryWindow/Dictionary/…/Content/Entry/Name 엔트리 모델의 이름을 표시합니다. Gs2DictionaryEntryModelLabel 엔트리 모델의 내용을 Format 에서 지정한 형식으로 정형합니다. 정형된 텍스트는 OnUpdate(String) 으로 콜백되어, 거기서 Text 컴포넌트에 값을 반영하고 있습니다. Canvas/DictionaryWindow/Dictionary/…/Content/Entry/AcquiredAt 엔트리의 입수 일시를 표시합니다. Gs2DictionaryOwnEntryLabel 엔트리의 내용을 Format 에서 지정한 형식으로 정형합니다. 정형된 텍스트는 OnUpdate(String) 으로 콜백되어, 거기서 Text 컴포넌트에 값을 반영하고 있습니다. Canvas/DictionaryWindow/Input/Acquire A Gs2ExchangeRateModelContext 엔트리를 입수 완료 상태로 만드는 GS2-Exchange 의 교환 레이트를 설정합니다. 여기서는 GS2-Exchange 의 exchange-0004 네임스페이스에 있는 A 레이트 모델을 교환하도록 설정하고 있습니다. Canvas/DictionaryWindow/Input/Acquire A/Gs2ExchangeExchangeExchangeAction 이 컨텍스트 메뉴에서 프리팹을 추가할 수 있습니다. Count 에 교환 수량을 지정하고, 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext 에서 지정한 교환 레이트의 교환을 실행합니다. OnExchangeComplete(String) 에는 교환 처리가 정상적으로 종료되었을 때의 콜백을 설정할 수 있으며, 자기 자신을 비활성화하고 있습니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으므로, 그쪽을 참조해 주세요.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity 를 사용한 GS2-Dictionary 기능 구현 샘플 소개","title":"Dictionary(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/dictionary/"},{"content":"경험치·레벨 기능을 구현합니다. 저장소 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Experience GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Experience/initialize_experience_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같이 됩니다. 실행하면 이와 같이 현재 레벨과 레벨 캡, 진행률 바가 표시됩니다. 화면 하단에 경험치 조작 버튼이 준비되어 있습니다. “Add Experience(100)“으로 경험치를 100 추가해 봅시다. 경험치가 추가되어 레벨이 1에서 3으로 올랐습니다. 다시 한 번 “Add Experience(100)“으로 경험치를 100 추가해 봅시다. 레벨이 5로 올라 레벨 캡에 도달했습니다. 이 상태를 알기 쉽게 하기 위해, 레벨 값 표기가 검은색에서 빨간색으로 바뀌어 있습니다. “Add Rank Cap\"을 눌러 레벨 캡 인상을 실행해 봅시다. 레벨 캡이 5에서 6으로 인상되었습니다. 그 결과 현재 레벨이 레벨 캡에 도달하지 않은 상태가 되었으므로, 레벨 표기도 빨간색에서 검은색으로 돌아왔습니다. 프로젝트 해설 씬의 계층 구조(Hierarchy)에 주목해 주십시오. Canvas/ExperienceWindow Gs2ExperienceExperienceModelContext 이 GameObject 아래의 노드에서 다루는 경험치 모델을 지정하고 있습니다. 이번에는 GS2-Experience의 experience-0001이라는 네임스페이스의, Experience라는 경험치 모델을 지정하고 있습니다. Gs2ExperienceOwnStatusContext 이 GameObject 아래의 노드에서 다루는 자신의 스테이터스를 지정하고 있습니다. 이번에는 GS2-Experience의 experience-0001이라는 네임스페이스의, Experience라는 경험치 모델, player라는 프로퍼티ID를 지정하고 있습니다. Gs2ExperienceOwnStatusFetcher Gs2ExperienceOwnStatusContext에서 지정한 스테이터스를 취득합니다. Canvas/ExperienceWindow/Experience/…/RankValue Gs2ExperienceStatusEnabler 스테이터스의 로딩 상황에 따라 ValueContainer / Slider를 활성화·비활성화하고 있습니다. Canvas/ExperienceWindow/Experience/…/RankValue/ValueContainer Gs2ExperienceStatusRankValueEnabler 스테이터스의 랭크가 최대값에 도달했는지 여부에 따라 Value / ReachMaxValue를 활성화·비활성화하고 있습니다. Canvas/ExperienceWindow/Experience/…/RankValue/ValueContainer/Value Gs2ExperienceOwnStatusLabel 현재 랭크 값이나 랭크 캡 값을 Format으로 지정한 형식으로 정형하고 있습니다. 정형한 결과는 OnUpdate(String)으로 콜백되므로, Text 컴포넌트에 반영하고 있습니다. 이 Text 컴포넌트는 텍스트 색상으로 검은색을 지정하고 있습니다. Canvas/ExperienceWindow/Experience/…/RankValue/ValueContainer/ReachMaxValue Gs2ExperienceOwnStatusLabel 현재 랭크 값이나 랭크 캡 값을 Format으로 지정한 형식으로 정형하고 있습니다. 정형한 결과는 OnUpdate(String)으로 콜백되므로, Text 컴포넌트에 반영하고 있습니다. 이 Text 컴포넌트는 텍스트 색상으로 빨간색을 지정하고 있습니다. Canvas/ExperienceWindow/Experience/…/Slider Gs2ExperienceStatusProgress 현재 랭크에서 다음 랭크업까지 필요한 경험치에 도달하기까지의 진행률을 0.0~1.0으로 OnUpdate(Single)의 콜백으로 반환합니다. Slider.value에 값으로 반영하고 있습니다. Canvas/ExperienceWindow/Input/AddExperience Gs2ExchangeRateModelContext 경험치를 10 추가하는 GS2-Exchange의 교환 비율을 설정합니다. 여기서는 GS2-Exchange의 exchange-0006이라는 이름의 네임스페이스의 AddExperience라는 이름의 교환 비율을 지정하고 있습니다. Canvas/ExperienceWindow/Input/AddExperience/Gs2ExchangeExchangeExchangeAction 이 컨텍스트 메뉴에서 프리팹을 추가할 수 있습니다. Count에 교환 수량을 지정하고, 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext에서 지정한 교환 비율의 교환을 실행합니다. OnExchangeComplete(String) 에 교환 처리가 정상적으로 종료된 경우의 콜백을 설정할 수 있으며, 자기 자신을 비활성화하고 있습니다. Canvas/ExperienceWindow/Input/AddExperienceX10 Canvas/ExperienceWindow/Input/AddExperience 와 마찬가지로, 경험치를 10 추가하는 GS2-Exchange의 교환 비율을 설정합니다. Canvas/ExperienceWindow/Input/AddExperienceX10/Gs2ExchangeExchangeExchangeAction 교환 수량으로 10이 설정되어 있습니다. Canvas/ExperienceWindow/Input/AddRankCap 랭크 캡을 1 추가하는 GS2-Exchange의 교환 비율을 설정합니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으므로, 그쪽을 참조해 주십시오.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity를 사용한 GS2-Experience 기능 구현 샘플 소개","title":"Experience(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/experience/"},{"content":"SDK 초기화 GS2 이용을 시작하려면 먼저 GS2-SDK의 초기화 처리를 수행합니다. Gs2Client.Create 를 호출함으로써 GS2의 클라이언트 인스턴스인 Gs2Domain 을 얻을 수 있습니다. 초기화에 필요한 파라미터는 다음과 같습니다. 파라미터 인자명 타입 설명 credential BasicGs2Credential 크리덴셜 정보 region Region 접속 대상 GS2 리전 BasicGs2Credential “클라이언트ID\"와 “클라이언트시크릿\"을 지정합니다. 이 값들은 GS2-Identifier에서 관리하고 있습니다. Region GS2의 데이터센터를 지정합니다. 지정 가능한 값에 대해서는 리전 을 참조해 주십시오. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var gs2 = await Gs2 . Unity . Core . Gs2Client . CreateAsync ( new Gs2 . Core . Model . BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Gs2 . Core . Model . Region . ApNortheast1 ); var future = Gs2 . Unity . Core . Gs2Client . CreateFuture ( new Gs2 . Core . Model . BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Gs2 . Core . Model . Region . ApNortheast1 ); yield return future ; if ( future . Error != null ) { throw future . Error ; } var gs2 = future . Result ; const auto future = Gs2 :: UE5 :: Core :: FGs2Client :: Create ( MakeShared Gs2 :: Core :: Model :: FBasicGs2Credential \u003e ( \"your client id\" , \"your client secret\" ), Gs2 :: Core :: Model :: ApNorthEast1 ); future -\u003e StartSynchronousTask (); if ( future -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( future -\u003e GetTask (). Error () -\u003e String ())); return future -\u003e GetTask (). Error (); } const auto Gs2 = future -\u003e GetTask (). Result (); 카오스 모드 카오스 모드를 적용한 SDK 초기화 처리를 호출함으로써 API 요청을 일정한 확률로 실패시킬 수 있습니다. 카오스 모드를 활성화한 클라이언트를 사용하여 개발을 진행함으로써 에러 핸들링을 더욱 견고하게 만들 수 있습니다. Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var gs2 = await Gs2 . Unity . Core . Gs2Client . CreateChaosAsync ( new Gs2 . Core . Model . BasicGs2Credential ( \"your client id\" , \"your client secret\" ), 0.1f , // API 요청 시 10%의 확률로 재시도가 필요한 에러를 발생시킴 Gs2 . Core . Model . Region . ApNortheast1 ); var future = Gs2 . Unity . Core . Gs2Client . CreateChaosFuture ( new Gs2 . Core . Model . BasicGs2Credential ( \"your client id\" , \"your client secret\" ), 0.1f , // API 요청 시 10%의 확률로 재시도가 필요한 에러를 발생시킴 Gs2 . Core . Model . Region . ApNortheast1 ); yield return future ; if ( future . Error != null ) { throw future . Error ; } var gs2 = future . Result ; const auto future = Gs2 :: UE5 :: Core :: FGs2Client :: CreateChaos ( MakeShared Gs2 :: Core :: Model :: FBasicGs2Credential \u003e ( \"your client id\" , \"your client secret\" ), 0.1f , // API 요청 시 10%의 확률로 재시도가 필요한 에러를 발생시킴 Gs2 :: Core :: Model :: ApNorthEast1 ); future -\u003e StartSynchronousTask (); if ( future -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( future -\u003e GetTask (). Error () -\u003e String ())); return future -\u003e GetTask (). Error (); } const auto Gs2 = future -\u003e GetTask (). Result (); 계정 생성 GS2의 많은 기능은 플레이어의 GS2-Account 계정 정보를 지정하여 로그인해야 합니다. 로그인을 하려면 계정 생성이 필요합니다. 계정을 생성하려면 Gs2Domain::Account::Namespace()::Create 를 사용합니다. 파라미터 인자명 타입 설명 namespaceName string GS2-Account의 네임스페이스명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var account = await ( await gs2 . Account . Namespace ( this . accountNamespaceName ). CreateAsync () ). ModelAsync (); var userId = account . UserId ; var password = account . Password ; var future = gs2 . Account . Namespace ( this . accountNamespaceName ). CreateFuture (); yield return future ; if ( future . Error != null ) { throw future . Error ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { throw future2 . Error ; } var account = future2 . Result ; var userId = account . UserId ; var password = account . Password ; const auto CreateFuture = Gs2 -\u003e Account -\u003e Namespace ( AccountNamespaceName ) -\u003e Create (); CreateFuture -\u003e StartSynchronousTask (); if ( CreateFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( CreateFuture -\u003e GetTask (). Error () -\u003e String ())); return CreateFuture -\u003e GetTask (). Error (); } const auto LoadFuture = CreateFuture -\u003e GetTask (). Result () -\u003e Model (); LoadFuture -\u003e StartSynchronousTask (); if ( LoadFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( LoadFuture -\u003e GetTask (). Error () -\u003e String ())); return LoadFuture -\u003e GetTask (). Error (); } const auto Account = LoadFuture -\u003e GetTask (). Result (); auto UserId = Account -\u003e GetUserId (); auto Password = Account -\u003e GetPassword (); 로그인 SDK 초기화와 계정 생성이 끝나면 로그인할 준비가 완료됩니다. Gs2Domain::Login 을 사용함으로써 로그인을 실행할 수 있습니다. 결과적으로 GameSession 객체를 얻을 수 있습니다. 많은 API는 GameSession을 전달해야 하며, 이를 통해 로그인 중인 플레이어의 사용자 데이터에 접근할 수 있습니다. 파라미터 인자명 타입 설명 authenticator IAuthenticator 인증 처리에 사용하는 구현(GS2-Account) userId string 사용자ID password string 비밀번호 IAuthenticator 인증 처리는 인터페이스로 정의되어 있어, GS2-Account를 사용하지 않고 자사의 인증 기반으로 인증을 대체하는 구현도 가능합니다. Gs2AccountAuthenticator Gs2AccountAuthenticator는 일반적인 사용 사례에서 충분한 기능을 갖춘, GS2-Account를 이용한 인증 구현입니다. 인자명 타입 설명 accountSetting AccountSetting GS2-Account로 인증하기 위한 정보 gatewaySetting GatewaySetting GS2-Gateway로 알림을 받기 위한 정보 versionSetting VersionSetting GS2-Version으로 버전 체크를 하기 위한 정보 AccountSetting 인자명 타입 설명 accountNamespaceName string GS2-Account의 네임스페이스명 keyId string 인증 처리에 사용하는 GS2-Key의 암호화 키ID(생략하면 기본 암호화 키가 사용됩니다) GatewaySetting 인자명 타입 설명 gatewayNamespaceName string GS2-Gateway의 네임스페이스명(생략하면 기본 네임스페이스가 사용됩니다) allowConcurrentAccess bool 동일한 사용자ID로의 다중 로그인을 허용할지 여부(기본값: true) VersionSetting VersionSetting을 적용함으로써 로그인 시나 세션 재접속 시에 자동으로 GS2-Version을 사용한 버전 체크를 수행하도록 할 수 있습니다. 버전 체크 결과 에러가 발생하면 Gs2AccountAuthenticator::onDetectVersionUp 에 등록한 이벤트 핸들러가 호출됩니다. 인자명 타입 설명 versionNamespaceName string GS2-Version의 네임스페이스명(생략하면 버전 체크를 하지 않습니다) targetVersions EzTargetVersion[] 게임의 버전 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var gameSession = await gs2 . LoginAsync ( new Gs2AccountAuthenticator ( accountSetting : new AccountSetting { accountNamespaceName = this . accountNamespaceName , } ), account . UserId , account . Password ); var future = gs2 . LoginFuture ( new Gs2AccountAuthenticator ( accountSetting : new AccountSetting { accountNamespaceName = this . accountNamespaceName , } ), account . UserId , account . Password ); yield return future ; if ( future . Error != null ) { throw future . Error ; } var gameSession = future . Result ; const auto LoginFuture = Gs2 -\u003e Login ( MakeShareable Gs2 :: UE5 :: Util :: IAuthenticator \u003e ( new Gs2 :: UE5 :: Util :: FGs2AccountAuthenticator ( MakeShared Gs2 :: UE5 :: Util :: FAccountSetting \u003e ( AccountNamespaceName ) ) ), * Account -\u003e GetUserId (), * Account -\u003e GetPassword () ); LoginFuture -\u003e StartSynchronousTask (); if ( LoginFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( LoginFuture -\u003e GetTask (). Error () -\u003e String ())); return LoginFuture -\u003e GetTask (). Error (); } const auto GameSession = LoginFuture -\u003e GetTask (). Result ();","lang":"ko","section":"api_reference","summary":"GS2-SDK for Game Engine의 초기화 방법에 대해","title":"Game Engine","url":"/ko/api_reference/initialize/game_engine/"},{"content":"트랜잭션이란 GS2에서의 트랜잭션 처리란, “소비 액션\"과 “입수 액션\"으로 정의된 리소스 교환 처리를 실행하는 덩어리를 가리킵니다. 트랜잭션을 발행하는 API에는 GS2-Exchange의 교환 실행 함수(Exchange), GS2-Showcase의 상품 구매 함수(Buy), GS2-Quest의 퀘스트 시작 함수(Start)와 같은 것들이 있습니다. “소비 액션\"은 플레이어에게 불리하게 작용하는 사용자 데이터 조작을, 반대로 “입수 액션\"은 플레이어에게 이득이 되는 사용자 데이터 조작을 가리킵니다. 구체적으로 GS2-Inventory라면 아이템의 소비가 “소비 액션”, 아이템의 입수가 “입수 액션\"이 됩니다. 조금 색다른 예를 들면, GS2-Inbox의 메시지 개봉 플래그를 세우는 조작이 “소비 액션”, 메시지에 첨부된 아이템을 수령하는 것이 “입수 액션\"이 됩니다. GS2에서는 사용자 데이터를 다시 쓰는 트랜잭션을 발행하고 실행하는 것을 반복함으로써 게임 사이클을 실현한다고 이해하십시오. 트랜잭션과 스탬프 시트 GS2에서는 트랜잭션 처리를 “스탬프 시트\"라는 이름으로 부르고 있었습니다. 그 때문에 코드나 문서 곳곳에서 그와 같은 표기를 볼 수 있습니다. 최근에는 이 명칭을 적극적으로 사용하지 않고 “트랜잭션 처리\"라고 부르고 있지만, 같은 것을 가리킨다고 이해하십시오. 유사한 단어로 “스탬프 태스크\"라는 명칭도 있는데, 이는 트랜잭션 내에 포함된 “소비 액션\"을 가리키는 것이었습니다. 트랜잭션 실행 GS2-Exchange의 Exchange나 GS2-Showcase의 Buy를 호출하면, EzTransactionDomain이라는 객체가 반환됩니다. EzTransactionDomain에는 Wait 함수가 마련되어 있으며, 이 함수를 호출함으로써 트랜잭션 처리의 완료를 기다릴 수 있습니다. 다만, 트랜잭션 처리가 완료되기까지의 시간에 보장이 없으므로, 타임아웃을 구현하는 것을 강력히 권장합니다. Wait 함수에는 all이라는 인수가 마련되어 있으며, 여기에 true를 지정함으로써 트랜잭션 처리 내에서 새로운 트랜잭션이 발행된 경우 해당 트랜잭션의 실행 완료도 함께 기다릴 수 있습니다. Wait 함수를 호출하지 않는 경우에는 Gs2Domain::Dispatch를 정기적으로 호출해야 합니다. Deep Dive 여기서부터는 트랜잭션 처리의 상세한 구현에 대해 설명합니다. 대부분의 개발자는 아래에 적힌 내용에 대해 이해할 필요가 없습니다. 소비 액션과 입수 액션의 실행 순서 트랜잭션에 포함된 “소비 액션\"을 모두 실행하면 “입수 액션\"을 실행할 수 있게 되도록 제어되어 있습니다. 그 때문에 실행 순서는 “소비 액션\"이 먼저이고 “입수 액션\"이 나중이 됩니다. 이는 치트 내성을 실현하기 위해 중요한 사양입니다. 이러한 처리 흐름을, 일본 기업이 결재를 진행하는 “품의\"에 비유하여, 여러 직책자(마이크로서비스)에게 허가를 받고(소비 액션을 실행) 품의서에 도장을 받아, 모든 마이크로서비스로부터 허가를 받으면 정말로 하고 싶었던 일(입수 액션)을 실행할 수 있다는 데서 스탬프 시트라고 불렀습니다. 트랜잭션 실행 GS2가 제공하는 마이크로서비스는 트랜잭션에 포함된 “소비 액션\"이나 “입수 액션\"을 전달함으로써 처리를 실행하는 기능을 갖추고 있습니다. 그러나 트랜잭션에 포함된 액션을 어느 마이크로서비스의 어느 API에 전달해야 하는지는 액션의 종류에 따라 정해지며, 실행하는 것도 상당히 번거롭습니다. 여기서 GS2-Distributor 마이크로서비스가 활약합니다. GS2-Distributor는 트랜잭션 액션을 받으면, 액션의 내용에 따라 적절한 마이크로서비스의 API로 전송하는 처리를 갖고 있습니다. 이를 통해 여러분은 아무것도 신경 쓰지 않고 트랜잭션 데이터를 GS2-Distributor에 전달하는 것만으로 트랜잭션을 실행할 수 있습니다. 오류 처리 다음으로 고려해야 할 것은 오류 핸들링입니다. GS2는 다양한 마이크로서비스를 제공하고 있으며, 장애가 발생할 때는 마이크로서비스 단위로 발생할 수 있습니다. 즉, “소비 액션\"의 실행에는 성공했지만 “입수 액션\"의 실행에는 실패한 경우가 있을 수 있습니다. 이 경우 “입수 액션\"이 성공할 때까지 재시도하지 않으면, 플레이어가 손해를 본 상태로 처리가 멈추게 됩니다. 트랜잭션 처리의 자동 실행 과거 GS2는 오류 처리를 게임 개발자에게 맡기고 있었습니다. 그러나 생산성이 높지 않은 오류 처리를 많은 GS2 이용자에게 맡기는 것은 적절하지 않기 때문에, 그 책임을 GS2가 담보하도록 한 것이 “트랜잭션 자동 실행” 기능입니다. 트랜잭션을 발행하는 기능을 가진 마이크로서비스의 네임스페이스 설정에는 반드시 “TransactionSetting\"이라는 항목이 있습니다. 그리고 “TransactionSetting\"에는 “EnableAutoRun\"이라는 자동 실행을 활성화하기 위한 플래그가 존재하며, 현재는 매니지먼트 콘솔을 이용한 설정에서는 기본적으로 활성화됩니다. 트랜잭션의 자동 실행을 활성화하면, GS2-Showcase의 Buy와 같이 트랜잭션을 발행하는 API를 호출할 때, API는 트랜잭션 ID만을 응답하고 트랜잭션의 페이로드는 응답하지 않습니다. 대신 내부적으로 GS2-Distributor에 트랜잭션을 실행하도록 데이터가 전달됩니다. 그 후 GS2-Distributor는 전달받은 트랜잭션을 실행하고, 오류가 발생하면 재시도를 수행합니다. 이러한 메커니즘으로 동작하기 때문에, 일반적으로는 1초 이내에 처리가 완료되지만, 오류가 발생하면 재시도가 발생할 수 있으므로 트랜잭션 처리가 완료되기까지 걸리는 시간에 대한 보장은 없습니다. 자동 실행한 트랜잭션의 완료 대기·결과 취득 트랜잭션의 자동 실행을 활성화하면, 트랜잭션이 완료되었는지 미완료인지가 이대로는 불명확해집니다. 그래서 GS2-Distributor는 트랜잭션의 자동 실행이 완료되면 게임에 통지를 전송하는 구조를 갖고 있습니다. 이 기능을 이용하려면 GS2-Distributor에 통지를 발행할 GS2-Gateway의 네임스페이스를 설정하고, 게임은 GS2-Gateway의 네임스페이스에 대해 통지를 받기 위한 사용자 ID를 설정해야 합니다. 2023년 8월 이후에 생성된 프로젝트에서는 default라는 이름의 GS2-Distributor와 GS2-Gateway가 자동으로 생성되며, SDK에서 특별한 설정을 하지 않는 경우 이 네임스페이스를 사용하여 이러한 처리를 수행합니다. 통지 내용에는 “트랜잭션 ID\"가 포함되어 있으며, “트랜잭션 ID\"를 지정하여 트랜잭션의 실행 결과를 취득하는 API가 GS2-Distributor에 마련되어 있습니다. 여러 입수 액션의 실행 설명한 대로 “소비 액션\"은 여러 개를 설정할 수 있지만 “입수 액션\"은 하나만 설정할 수 있습니다. 이는 트랜잭션의 치트 내성에 대한 뒷받침이 “모든 소비 액션을 실행하면 입수 액션을 실행할 수 있다\"는 구조에서 비롯되기 때문입니다. 이 구조 위에서 입수 액션이 여러 개 있으면 여러모로 복잡해지고 만다는 것입니다. 그러나 게임 내 리소스 증감에는 입수 액션이 여러 개 존재하는 경우가 다양한 케이스에서 발생할 수 있습니다. 그래서 GS2-JobQueue라는 마이크로서비스가 등장합니다. GS2-JobQueue는 “입수 액션\"을 지연 실행하기 위한 구조를 제공하고 있습니다. 그리고 GS2-JobQueue에는 한 번의 API 호출로 최대 10개의 잡을 등록할 수 있습니다. “GS2-JobQueue에 잡을 등록한다\"는 입수 액션이 존재하며, 여러 개의 입수 액션을 설정한 경우에는 트랜잭션 발행 시 이 입수 액션으로 내부적으로 변환됩니다. 입수 액션의 종류가 10개를 초과하는 경우에는 “GS2-JobQueue에 잡을 등록하는 잡을 등록한다\"는 형태로 변환되며, 최대 100개의 입수 액션을 하나의 트랜잭션에 포함시킬 수 있습니다. 2023년 8월 이후에 생성된 프로젝트에서는 default라는 이름의 GS2-JobQueue가 생성되며, 이 네임스페이스를 사용하여 처리하도록 되어 있습니다. “TransactionSetting\"의 JobQueueNamespaceId에 네임스페이스 ID를 지정함으로써 임의의 큐를 이용할 수 있지만, 특별한 이유가 없다면 지정할 필요는 없습니다. GS2-JobQueue의 실행 GS2-JobQueue의 실행에 대해서도, 트랜잭션과 마찬가지로 과거의 경위가 있습니다. GS2-JobQueue에 등록된 잡의 실행도 명시적으로 GS2-JobQueue에 등록된 잡의 실행 API를 호출해야 했습니다. 잡은 실행에 성공하면 잡 큐에서 삭제되며, 잡 실행 API의 반환값에는 잡 큐가 비었는지가 응답값에 포함되어 있기 때문에, 비워질 때까지 처리를 반복하도록 하는 것을 게임 개발자의 책임으로 맡기고 있었습니다. 잡의 실행에 실패하면 잡 큐에서 잡이 삭제되지 않기 때문에, 큐가 비워질 때까지 잡을 반복 실행함으로써 재시도를 손쉽게 구현할 수 있도록 했습니다. GS2-JobQueue의 자동 실행 그러나 이 역시 생산성이 높지 않은 처리를 많은 GS2 이용자에게 맡기는 것은 적절하지 않기 때문에, 그 책임을 GS2가 담보하도록 한 것이 “잡의 자동 실행” 기능입니다. GS2-JobQueue의 네임스페이스 설정에는 잡 큐의 자동 실행 플래그가 마련되어 있으며, 현재는 기본적으로 활성화되어 있습니다. 트랜잭션과 마찬가지로, 자동 실행이 활성화되면 잡을 큐에 등록하는 것만으로 자동으로 처리가 시작되고, 실행이 완료되면 GS2-JobQueue의 네임스페이스에 설정한 GS2-Gateway에 “완료된 잡 ID\"를 통지합니다. GS2-JobQueue는 “잡 ID\"를 지정하여 잡의 실행 결과를 취득할 수 있습니다. 2023년 8월 이후에 생성된 프로젝트에서는 default라는 이름의 GS2-Gateway가 자동으로 생성되며, SDK에서 특별한 설정을 하지 않는 경우 이 네임스페이스를 사용하여 이러한 처리를 수행합니다. EzTransactionDomain::Wait의 정체 자, 지금까지 내부 처리에 대해 길게 설명해 왔습니다. 마지막으로 EzTransactionDomain의 Wait가 무엇을 하고 있는지 다시 한번 생각해 봅시다. GS2-Showcase::Buy를 호출하면 트랜잭션이 발행되며, 자동 실행이 활성화된 경우에는 GS2-Gateway로부터 발행된 트랜잭션 ID의 완료 통지가 도착하기를 기다립니다. 자동 실행이 비활성화된 경우에는 반환된 트랜잭션 데이터를 GS2-Distributor에 전달하여 실행합니다. 자동 실행인 경우에는 트랜잭션의 실행 결과를 GS2-Distributor로부터 취득하고, 자동 실행이 아닌 경우에는 명시적으로 GS2-Distributor를 호출한 결과를 사용하여 트랜잭션의 실행 결과를 취득합니다. 여기에 트랜잭션 발행 처리가 포함되어 있던 경우에는 새로운 EzTransactionDomain을 생성하고, all이 true인 경우에는 해당 EzTransactionDomain::Wait를 호출합니다. 실행한 트랜잭션의 “입수 액션\"이 GS2-JobQueue로의 잡 등록이었던 경우에는 추가 처리가 있습니다. GS2-JobQueue의 자동 실행이 활성화되어 있던 경우에는 GS2-Gateway로부터 등록한 잡 ID의 실행 완료 통지가 도착하기를 기다리고, 자동 실행이 비활성화되어 있던 경우에는 명시적으로 GS2-JobQueue의 잡을 실행합니다. 잡의 실행 결과에 트랜잭션 발행 처리나 GS2-JobQueue로의 잡 등록이 있었던 경우에는 all이 true인 경우 해당 처리들의 완료도 함께 기다립니다. Gs2Domain::Dispatch의 정체 GS2-Gateway로부터 GS2-Distributor의 트랜잭션 실행이나 GS2-JobQueue의 잡 실행 완료 통지를 받으면, 처리 결과에 따라 SDK가 가진 로컬 캐시를 다시 씁니다. 이를 통해 트랜잭션 처리로 인해 아이템 소지 수량이 변동한 결과를, 아이템 소지 수량 취득 API를 호출하지 않고도 최신 값으로 취득할 수 있게 됩니다. EzTransactionDomain::Wait 안에서 GS2-Gateway로부터의 통지를 기다릴 때 Gs2Domain::Dispatch를 호출하고 있으므로, Wait를 사용하는 경우에는 명시적으로 Gs2Domain::Dispatch를 호출할 필요가 없습니다. 그러나 EzTransactionDomain::Wait를 호출하지 않거나, all 인수에 false를 지정하는 경우에는 Gs2Domain::Dispatch를 호출하지 않으면, 트랜잭션이나 잡 큐에 의한 실행 결과가 캐시에 반영되지 않습니다. 트랜잭션의 완료 대기·처리 결과를 취득하는 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) var domain = await _application . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); EzTransactionDomain result = await domain . EndAsync ( isComplete : true , rewards : null , config : null ); await result . WaitAsync ( true ); var domain2 = _application . Distributor . Namespace ( namespaceName : \"distributor-0001\" ). Me ( gameSession : GameSession ). TransactionResult ( transactionId : result . TransactionId ); EzTransactionResult result = await domain . ModelAsync (); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var future = domain . EndFuture ( isComplete : true , rewards : null , config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } EzTransactionDomain domain2 = future2 . Result ; yield return domain2 . WaitFuture ( true ); var future2 = _application . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TransactionResult ( transactionId : domain2 . TransactionId ). Model (); yield return future2 ; EzTransactionResult result = future2 . Result ; EzTransactionDomain 서버사이드에서의 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 정보를 보유합니다. Result 타입 설명 transactionId string 트랜잭션 ID jobName string JobQueue에서 실행된 잡의 이름 TransactionSetting의 상세 트랜잭션 설정의 상세는 다음과 같습니다. 타입 활성화 조건 설명 enableAutoRun bool 발행한 트랜잭션을 서버사이드에서 자동으로 실행할지 여부 　enableAtomicCommit bool enableAutoRun이 활성화되어 있을 때 트랜잭션의 실행을 원자적으로 커밋할지 여부 　　transactionUseDistributor bool enableAtomicCommit이 활성화되어 있을 때 트랜잭션을 GS2-Distributor를 사용하여 비동기 처리로 실행 　　acquireActionUseJobQueue bool enableAtomicCommit이 활성화되어 있을 때 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 동일한 리소스를 조작하는 입수 액션이 여러 개 존재하는 경우에 사용합니다","lang":"ko","section":"api_reference","summary":"GS2-SDK for Game Engine의 트랜잭션 처리에 대해","title":"Game Engine","url":"/ko/api_reference/transaction/game_engine/"},{"content":"Game Server Services란 무엇인가요? 게임 개발은 지난 30년간 계속해서 복잡해져 왔습니다. 이러한 환경에 큰 변화를 가져온 것이 Unity / Unreal Engine과 같은 범용 게임 엔진입니다. 과거에는 게임 개발이 콘텐츠 제작에 들어가기까지 상당한 시간을 들여 그래픽이나 에셋 관리, 사운드 등 게임을 만들기 위한 환경을 구축해야 했습니다. 이러한 환경 구축은 타이틀마다 개별적으로 이루어졌고, 타이틀 간 정보 공유도 불충분한 상태로 개발이 진행되어 왔습니다. 그 결과 여러 회사 간, 혹은 여러 프로젝트 간에 같은 바퀴를 반복해서 재발명하는 일이 계속되었습니다. 범용 게임 엔진은 이러한 문제를 해결하여, 게임 개발자는 바로 콘텐츠 제작에 들어갈 수 있게 되었고 회사 간·프로젝트 간에 동일한 기술 스택을 채택함으로써, 인력의 유동성을 높이더라도 생산성을 해치지 않는 개발 환경을 갖출 수 있게 되었습니다. 하지만 이러한 혁신의 시작점은 10년도 더 전의 일입니다. 지난 10년 동안 게임을 둘러싼 환경은 크게 변화했습니다. 바로 온라인 기능을 전제로 한 게임 개발이 요구되기 시작했다는 점입니다. 범용 게임 엔진의 온라인 게임 지원은 불충분하여, 게임 서버 개발은 예전의 게임 엔진처럼 각 회사·각 프로젝트에서 독자적으로 이루어지고 있습니다. 이러한 낮은 생산성에 대해서는, 범용 게임 엔진으로 개발하는 것이 당연해진 지금은 굳이 설명할 필요도 없을 것입니다. Game Server Services는 이러한 문제를 해결하기 위해, 범용 게임 서버로서 여러분의 개발 효율화를 실현하고자 탄생했습니다. Game Server Services는 다른 서버 솔루션과 무엇이 다른가요? 저희는 장기간에 걸쳐 게임을 수익화하기 위한 서버 솔루션을 제공하고 있습니다. 이는 Game as a Service, 또는 Live Gaming이라 불리는 영역을 지원하기 위한 솔루션이라고 바꾸어 말할 수 있습니다. Game as a Service를 대표하는 게임 장르는 MMORPG일 것입니다. Game as a Service가 게임 중에서도 극히 일부 장르에만 적용된다고 생각하고 있다면, 그것은 큰 오해입니다. Game Server Services는 일본에서 탄생했습니다. 일본에서는 스마트폰이 등장하기 이전, Facebook 게임에서 시작된 흐름인 ‘소셜 게임’에서 싹튼 Game as a Service가 현재 스마트폰 게임 메커니즘을 뒷받침하고 있습니다. 그리고 일본에서는 지금은 예전만큼 가정용 게임기용 게임 개발에 열심이지 않습니다. 최근 몇 년간은 이러한 흐름이 되돌아와 가정용 게임 시장을 재평가하는 움직임도 있지만, 기업의 수익원은 스마트폰에서 전개되는 Game as a Service 스타일의 게임에서 비롯됩니다. 세상의 많은 솔루션이 ‘온라인 대전’에 초점을 맞추고 있는 가운데, ‘소셜 게임’을 뒷받침하는 데 필요한 게임 서버를 제공하고 있다는 점이 가장 큰 특징입니다. Game as a Service를 위해 어떤 기능이 제공되나요? 타사 솔루션은 플레이어 데이터를 바이너리 데이터로 저장하는 것을 기본으로 하는 솔루션을 제공하고 있습니다. 이 방식은 유연성이 있지만 문제를 안고 있습니다. 첫 번째는 데이터 분석이 어렵다는 점입니다. Game as a Service를 실현하려면 게임 내에서 유통되는 자원의 총수나 소비량을 적절히 분석하여, 건전한 환경을 계속 만들어 나가야 합니다. 두 번째는 치트가 가능해진다는 점입니다. Game as a Service를 실현하려면 플레이어의 자원을 적절히 관리하여 게임 세계의 질서를 지켜야 합니다. Game Server Services에서는 게임 내 용도별로 마이크로서비스를 설계하여 제공한다는, 엄청난 노력이 드는 작업을 하고 있습니다. 예를 들어 다음과 같은 기능을 제공하고 있습니다. 스토리 진행 관리 소지품 도감 아바타·장비·파티 편성 경험치·레벨 횟수 제한 이벤트 스케줄 관리 스토리 진행 관리를 적절히 분석 가능한 상태로 유지하는 것은 Game as a Service에 있어 중요합니다. 왜냐하면, 전체의 1%만이 스토리를 끝까지 마쳤는데도 추가 스토리 개발에 많은 노력을 쏟고 있다면 어떨까요? 그것은 낭비입니다. 스토리를 추가하기에 앞서 ‘왜 다들 끝까지 플레이하지 않는가’를 분석하고, 그 부분을 개선하여 더 많은 사람이 기존 스토리를 완주할 수 있도록 게임을 개선해야 할 것입니다. 소지품 관리도 중요합니다. 이는 플레이어가 자산을 잃지 않도록 서버에서 관리하는 것은 물론, 게임 내에서 유통되는 아이템의 총량이나 소비 수량을 개발 측에서 파악하는 것이 중요합니다. 플레이어가 가장 필요로 하는 아이템은 무엇인가? 게임 내 화폐가 지나치게 남아돌아서 이미 존재 의의를 잃은 상태가 되어 있지는 않은가? 그러한 상태를 분석하여, 이벤트 보상에 가장 필요로 하는 자원을 추가함으로써 플레이어의 동기를 높이거나, 남아도는 경향이 있는 자원을 더 많이 소비하도록 하는 콘텐츠를 투입할 수 있습니다. 이처럼 Game as a Service는 게임 내 경제를 더욱 건전한 상태로 만들기 위해 데이터 분석이 반드시 필요합니다. 하지만 바이너리 데이터로 플레이어 데이터를 보관하고 있다면, 그것은 뜻대로 되지 않을 것입니다. 기본 용어 GS2를 이용하는 데 있어 자주 등장하는 중요한 용어를 몇 가지 소개합니다. GS2-Identifier GS2의 리소스에 접근하기 위한 ‘사용자’나 ‘접근 권한(정책)’, API 호출에 필요한 ‘크리덴셜(클라이언트ID/시크릿)‘을 관리하는 서비스입니다. GS2-Deploy AWS CloudFormation처럼 YAML 형식의 템플릿 파일을 이용하여 GS2의 리소스(네임스페이스나 마스터 데이터 등)를 자동으로 구축·관리하는 서비스입니다. 네임스페이스 각 서비스 내에서 생성되는, 데이터와 설정을 분리하기 위한 독립된 공간입니다. 예를 들어 ‘개발용’, ‘운영용’과 같이 용도별로 네임스페이스를 생성하여 구분해 사용합니다. 준비되셨나요? 관심사에 따라 다음에 읽어야 할 콘텐츠가 달라집니다. Game Server Services로 할 수 있는 것에 대해 더 알고 싶다 Game Server Services를 이용한 개발 흐름에 대해 더 알고 싶다 Game Server Services의 이용 요금에 대해 더 알고 싶다 Game Server Services의 기능 확장에 대해 더 알고 싶다 Game Server Services의 SDK를 다운로드하고 싶다 Game Server Services의 API 레퍼런스를 보고 싶다","lang":"ko","section":"overview","summary":"Game Server Services란 무엇인가요?게임 개발은 지난 30년간 계속해서 복잡해져 왔습니다. 이러한 환경에 큰 변화를 가져온 것이 Unity / Unreal Engine과 같은 범용 게임 엔진입니다.\n과거에는 게임 개발이 콘텐츠 제작에 들어가기까지 상당한 시간을 들여 그래픽이나 에셋 관리, 사운드 등 게임을 만들기 위한 환경을 구축해야 했습니다. 이러한 환경 구축은 타이틀마다 개별적으로 이루어졌고, 타이틀 간 정보 공유도 불충분한 상태로 개발이 진행되어 왔습니다. 그 결과 여러 회사 간, 혹은 여러 프로젝트 간에 같은 바퀴를 반복해서 재발명하는 일이 계속되었습니다.\n","title":"Game Server Services에 대하여","url":"/ko/overview/"},{"content":"GS2 UIKit for Unity의 기능 구현 샘플입니다. GS2 UIKit은 노코드로 게임 UI를 구축하기 위한 라이브러리 모음으로, 다양한 화면 구성의 UI를 효율적으로 구축할 수 있습니다. 여기서는 공개되어 있는 샘플 프로젝트를 매우 상세하게 설명합니다. UIKit을 이용해 노코드로 UI를 구축함으로써 프로그래머가 부담하는 구현 비용을 대폭 절감할 수 있을 것입니다. UIKit 전체에 걸친 공통 리소스 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Core/initialize_core_template.yaml 샘플 동작에 필요한 공통 리소스를 생성하는 템플릿입니다. 크리덴셜 설정 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Core/DevEnvironment.asset UI Kit이 사용하는 GS2 크리덴셜을 설정하는 Scriptable Object입니다. 동작 확인이 쉽도록 GS2가 준비한 환경의 크리덴셜이 설정되어 있습니다. 크리덴셜은 비정기적으로 변경되므로, 샘플이 동작하지 않게 되면 리포지토리의 HEAD로 업데이트해 주세요. 세밀한 동작 확인을 할 때는 본인 환경의 크리덴셜을 설정하여 이용하는 것을 권장합니다.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity 구현 샘플 소개","title":"GS2 UIKit for Unity 구현 샘플","url":"/ko/articles/sample/uikit_project/"},{"content":"여기","lang":"ko","section":"get_start","summary":"GS2 UIKit for Unity 구현 샘플 소개","title":"GS2 UIKit for Unity 구현 샘플","url":"/ko/get_start/uikit/sample/"},{"content":"GS2 Sample Project for Unity 다음 기능들이 게임 내에서 동작하는 모습을 상정한 구현 샘플입니다. 크리덴셜(인증 정보) 로그인 앱 버전 체크 이용 약관 확인 계정 연동·계정 인계 공지사항 스태미나/스태미나 스토어 과금 통화/과금 통화 스토어 골드 인벤토리 퀘스트 추첨 기능 채팅 친구 매치메이킹 리얼타임 대전","lang":"ko","section":"articles","summary":"GS2 구현 샘플 소개\n","title":"GS2 구현 샘플","url":"/ko/articles/sample/project/"},{"content":"이 섹션에서는 Unity / Unreal Engine 5 / Godot 프로젝트를 생성하여 GS2의 기능을 이용하기 위해 필요한, GS2 관리 콘솔에서의 설정 절차 를 정리하고 있습니다. GS2 계정 생성하기 먼저 GS2 사이트 에서 GS2 개발자 계정 등록을 진행해 주십시오. 등록 후, 이메일 주소 확인 메일이 도착합니다. 메일에 기재된 URL에 접속하여 이메일 주소를 인증한 후, 등록한 계정 정보로 관리 콘솔 에 로그인해 주십시오. 프로젝트 생성하기 다음으로, 관리 콘솔 에서 프로젝트를 생성해 주십시오. 프로젝트는 개발 중인 게임 타이틀과 짝을 이루는 것입니다. GS2의 리소스(설정한 내용, 마스터 데이터 등)는 프로젝트별로 유지됩니다. 다른 프로젝트의 리소스에는 간섭할 수 없습니다. 프로젝트 생성은 새롭게 게임 타이틀을 만들기 시작할 때뿐만 아니라, 개발 도중부터도 가능합니다. 관리 콘솔 에 로그인합니다. Project \u003e 프로젝트 목록 페이지를 엽니다. 프로젝트 신규 작성 을 클릭합니다. 프로젝트 이름 과 설명문 을 입력하고, 작성 버튼을 클릭합니다. 프로젝트 이름에는 영숫자 대문자·소문자와 하이픈, 언더바만 사용할 수 있습니다. 예: MySuperCool_Stg_Game-001 한자, 히라가나 등은 사용할 수 없습니다.","lang":"ko","section":"get_start","summary":"GS2에 등록하고 프로젝트를 생성합니다\n","title":"GS2 설정","url":"/ko/get_start/tutorial/setup_gs2/"},{"content":"SDK Game Engine Game Server Services는 주요 게임 엔진에서 이용할 수 있는 SDK를 제공합니다. 게임 엔진용 SDK는 게임 내에서 이용하는 것에 초점을 맞춰, 일반 SDK보다 고수준의 API 형태로 제공됩니다. Language : Unity Unreal Engine 5 Godot GS2 SDK for Unity 본 SDK는 Apache License 2.0으로 제공됩니다. 프로그램 어딘가에 Apache License 2.0으로 제공되는 라이브러리를 사용하고 있음을 명시해야 합니다. 본 SDK에는 퍼블릭 도메인인 LitJson(Gs2/Plugin/LitJSON.dll)이 포함되어 있습니다. 이 dll은 GS2 SDK 동작의 근간에 관여하는 기능에 사용되고 있어 삭제할 수 없습니다. 본 SDK에는 MIT License인 websocket-sharp(Gs2/Plugin/websocket-sharp.dll)가 포함되어 있습니다. 표시·표기가 필요한 라이선스 조문은 다음과 같습니다. https://raw.githubusercontent.com/sta/websocket-sharp/master/LICENSE.txt 이 dll은 GS2 SDK 동작의 근간에 관여하는 기능에 사용되고 있어 삭제할 수 없습니다. 본 SDK에는 BSD License인 protobuf(Gs2/Plugin/Google.Protobuf.dll)가 포함되어 있습니다. 표시·표기가 필요한 라이선스 조문은 다음과 같습니다. https://github.com/protocolbuffers/protobuf/blob/master/LICENSE 이 dll은 GS2-Realtime을 사용하지 않는다면 삭제할 수 있습니다. GS2 SDK for Unity 도입 절차 GS2 SDK for Unity Installer Version 2024.4.1 위 링크에서 UnityPackage 형식의 인스톨러를 다운로드합니다. Unity Editor를 실행하고, 메뉴의 Import Package에서 gs2-unity-installer_2024.4.1.unitypackage 파일을 임포트합니다. 그 후 Unity Editor 메뉴에서 『Window \u003e Game Server Services \u003e SDK Installer』를 선택하고, 마법사의 안내에 따라 진행하세요. 설치 완료 후 정상적으로 동작하지 않는 경우, Unity Editor를 한번 재시작해 보세요. SDK 설정 절차 상세 GS2 UIKit for Unity GS2 UIKit for Unity는 코드 작성 없이 Unity Editor의 UI를 사용하여 GS2 기능을 구현할 수 있도록 하는 것을 목적으로 합니다. SDK 인스톨러를 도입한 후, Unity Editor 메뉴에서 『Window \u003e Game Server Services \u003e UIKit for Unity Installer』를 선택하고, 마법사의 안내에 따라 진행하세요. 설치 완료 후 정상적으로 동작하지 않는 경우, Unity Editor를 한번 재시작해 보세요. UIKit 튜토리얼은 여기 를 확인해 주세요. SDK 설정 절차 상세 GS2 SDK for Unreal Engine 5 본 SDK는 Apache License 2.0으로 제공됩니다. 프로그램 어딘가에 Apache License 2.0으로 제공되는 라이브러리를 사용하고 있음을 명시해야 합니다. GS2 SDK for Unreal Engine 5 도입 절차 최신 SDK는 GitHub에서 받으실 수 있습니다. https://github.com/gs2io/gs2-sdk-for-ue5/ 프로젝트 플러그인으로 설치 GitHub에서 소스 코드를 다운로드하여 Unreal Engine 프로젝트 내의 다음 폴더에 배치해 주세요. (Unreal Engine 프로젝트)/Plugins/Gs2Plugin Plugins 폴더가 존재하지 않는 경우 새로 만들어 주세요. UnrealEditor에서 uproject를 실행하고 GS2 플러그인을 활성화한 후, UnrealEditor를 재시작해 주세요. SDK 설정 절차 상세 엔진 플러그인으로 설치 Unreal Engine 소스 코드를 GitHub 또는 Perforce에서 받아 Engine을 빌드하고 있는 환경에 엔진 플러그인으로 설치할 수 있습니다. 다운로드한 GS2 플러그인 소스 코드 일체를 Unreal Engine 소스 코드 내의 다음 폴더에 배치해 주세요. (Unreal Engine 소스 코드)/Engine/Plugins/Gs2Plugin UnrealEditor에서 uproject를 실행하고 GS2 플러그인을 활성화한 후, UnrealEditor를 재시작해 주세요. SDK 설정 절차 상세 GS2 SDK for Godot 본 SDK는 Godot 4(GDScript)를 위해 제공되며, Apache License 2.0으로 공개되어 있습니다. 프로그램 어딘가에 Apache License 2.0으로 제공되는 라이브러리를 사용하고 있음을 명시해야 합니다. GS2 SDK for Godot 도입 절차 최신 SDK는 GitHub에서 ZIP 형식으로 받으실 수 있습니다. https://github.com/gs2io/gs2-sdk-for-godot/ ZIP 파일의 압축을 풀고, 포함되어 있는 addons/gs2 폴더를 Godot 프로젝트의 addons 폴더에 복사해 주세요. 배치 후 경로가 res://addons/gs2/ 가 되면 도입이 완료된 것입니다. SDK 설정 절차 상세 각종 프로그래밍 언어 Go, PHP, Java, C#, TypeScript, Python 등 각종 프로그래밍 언어에서 GS2를 이용할 수 있습니다. GitHub에서 소스 코드를 다운로드하거나, 각 패키지 매니저를 통해 받을 수 있습니다. Language : Go PHP Java C# Typescript Python https://github.com/gs2io/gs2-golang-sdk Go mod를 통한 취득 go install github.com/gs2io/gs2-golang-sdk@latest https://github.com/gs2io/gs2-php-sdk Composer를 통한 취득 gs2-php-sdk composer require gs2/gs2-php-sdk https://github.com/gs2io/gs2-java-sdk Maven을 통한 취득 gs2-java-sdk https://github.com/gs2io/gs2-csharp-sdk NuGet을 통한 취득 GS2.CSharp.Sdk https://github.com/gs2io/gs2-typescript-sdk npm을 통한 취득 gs2 npm i gs2 https://github.com/gs2io/gs2-python-sdk PyPI를 통한 취득 gs2 pip install gs2 CDK CDK란 Cloud Development Kit의 약자로, GS2의 오케스트레이션을 코드로 수행할 수 있게 해주는 개발 키트입니다. 좀 더 구체적으로 기능을 설명하면, CDK로 GS2 리소스에 해당하는 객체를 인스턴스화하는 코드를 작성하고 덤프 API를 호출함으로써 GS2-Deploy의 템플릿을 생성할 수 있습니다. GS2-Deploy의 템플릿은 YAML 형식으로 작성할 수 있지만, YAML 파일은 프로그램 코드가 아니기 때문에 외부 파일을 가져오거나 반복문을 실행할 수 없어, 워크플로우를 최적화하려면 템플릿을 생성하는 코드를 작성해야 했습니다. CDK는 이러한 워크플로우를 최적화하기 위한 솔루션으로, CDK를 사용한 도구 내에서 마스터 데이터의 엑셀 파일을 파싱하거나 이벤트 기간을 반복문으로 정의하면서 GS2-Deploy 템플릿을 생성할 수 있습니다. Language : Go PHP Java C# Typescript Python https://github.com/gs2io/gs2-golang-cdk Go mod를 통한 취득 go install github.com/gs2io/gs2-golang-cdk@latest https://github.com/gs2io/gs2-php-cdk Composer를 통한 취득 gs2-php-cdk composer require gs2/gs2-php-cdk https://github.com/gs2io/gs2-java-cdk Maven을 통한 취득 gs2-java-cdk https://github.com/gs2io/gs2-csharp-cdk NuGet을 통한 취득 GS2.CSharp.Cdk https://github.com/gs2io/gs2-typescript-cdk npm을 통한 취득 gs2-cdk npm i gs2-cdk https://github.com/gs2io/gs2-python-cdk PyPI를 통한 취득 gs2-cdk pip install gs2-cdk SDK 설치는 끝나셨나요? 다음은 GS2를 실제로 이용해 보는 튜토리얼 에 도전해 봅시다.","lang":"ko","section":"get_start","summary":"Game Server Services의 이용을 시작하는 방법에 대해\n","title":"GS2 이용 시작","url":"/ko/get_start/"},{"content":"Game Server Services가 제공하는 계정 시스템은 “익명 계정\"이라는 종류의 계정 시스템입니다. 일본에서는 널리 사용되는 방식이지만, 많은 지역에서는 낯설게 느껴지는 계정 시스템일 수 있습니다. 그러나 이 계정 시스템은 게임에 있어서 매우 이치에 맞는 계정 시스템입니다. 익명 계정이란 무엇인가요? 일반적으로 떠올리는 계정 관리는 로그인ID가 있고 비밀번호가 있는 방식일 것입니다. 익명 계정도 그 점은 다르지 않습니다. 그러나 로그인ID와 비밀번호가 모두 시스템에 의해 무작위로 결정된다는 것이 가장 큰 특징입니다. 시스템에서 발급한 로그인ID·비밀번호를 디바이스의 로컬 스토리지에 저장해 두고, 두 번째 이후에는 그 정보를 이용해 로그인함으로써 게임을 재개할 수 있습니다. graph TD Startup --\u003e LoadSave{\"디바이스 스토리지에서 익명 계정을 불러오기\"} LoadSave -- Not Exists --\u003e CreateAccount[\"익명 계정을 생성\"] CreateAccount --\u003e SaveAccount[\"익명 계정을 저장\"] SaveAccount --\u003e Login[\"로그인\"] LoadSave -- Exists --\u003e Login Login --\u003e InGame 익명 계정의 장점 간단한 등록: 사용자는 번거로운 등록 절차를 거치지 않고도 게임을 바로 시작할 수 있습니다. 특히 무료로 플레이할 수 있는 F2P 스타일의 게임에서는 많은 사용자가 게임을 시도해 보도록 하기 위해 등록의 수고를 줄이는 것이 중요합니다. 플레이어 정보 보호: 로그인ID나 비밀번호를 직접 설정할 필요가 없으므로 개인정보와 프라이버시가 보호됩니다. 또한 비밀번호 재설정이나 변경도 필요하지 않습니다. 이전의 용이성: 이전 정보로 각종 플랫폼의 ID 기반이나 SNS 계정 등을 이용할 수 있어, 서로 다른 디바이스나 앱 간의 이전을 원활하게 수행할 수 있습니다. 익명 플레이 경험: 플레이어는 익명으로 게임을 플레이할 수 있으므로, 실명이나 닉네임을 사용하지 않아도 되어 보다 자유로운 플레이 경험을 즐길 수 있습니다. 이전 디바이스의 로컬 스토리지만큼 신뢰성이 낮은 곳은 없습니다. 디바이스를 떨어뜨릴 수도 있고, 디바이스를 고장 낼 수도 있습니다. 그때 게임 데이터를 모두 잃어버리게 된다면, 그것은 절망적인 상황입니다. 게임 플레이어는 익명 계정으로 게임을 체험하고, 정말로 마음에 든다면 “이전 정보\"를 등록할 수 있습니다. 이전 정보에는 각종 플랫포머의 ID 기반 정보를 이용해도 좋고, SNS 계정을 설정해도 좋습니다. 게임 퍼블리셔의 ID 기반도 좋은 선택일 것입니다. 이전 정보는 슬롯 번호 0~1024 범위에서 관리되며, 최대 1,025종류까지 등록할 수 있습니다. 용도에 따라 각 슬롯에 서로 다른 인증 수단을 연결함으로써 폭넓은 이전 시나리오를 구현할 수 있습니다. 이전 정보에는 각종 ID 기반에서 인증한 결과로 얻은 사용자ID 등을 기록합니다. 그리고 완전히 새로운 디바이스에서 이전을 실행합니다. 각종 ID 기반에 로그인하고, 얻어낸 사용자ID로 이전을 실행하면 과거에 이전 정보를 설정해 둔 익명 계정으로 로그인하기 위한 정보를 얻을 수 있습니다. 이 정보를 다시 디바이스의 로컬 스토리지에 저장하여 이후의 로그인에 이용합니다. graph TD InGame -- 게임이 마음에 들었다 --\u003e AddTakeOverSetting[\"이전 정보를 등록\"] AddTakeOverSetting --\u003e BrokenDevice[\"스마트폰이 고장 남\"] NewDevice[\"새 스마트폰\"] --\u003e DoTakeOver[\"이전 정보를 입력하고 이전을 실행\"] DoTakeOver -- 익명 계정을 복원 --\u003e SaveAccount[\"익명 계정을 저장\"] SaveAccount --\u003e Login[\"로그인\"] OpenID Connect 연동 이전 정보의 등록, 이전 처리의 실행에 OpenID Connect를 준수하는 인증 시스템을 사용하기 위한 지원이 마련되어 있습니다. 인증 서비스 등록 OpenID Connect 연동 기능을 사용하려면 마스터 데이터 설정이 필요합니다. 각 이전 슬롯마다 연동 대상을 지정할 수 있으며, 최대 1,025종류의 인증 수단에 대응할 수 있습니다. 설정 항목은 다음과 같습니다. 인증 서비스의 OpenID Connect Discovery 엔드포인트 URL 인증 서비스의 클라이언트ID 인증 서비스의 클라이언트 시크릿 인증 완료 후 이동할 URL 추가로 요구할 스코프 값 인증 결과로 취득할 추가 반환 값 Sign in with Apple은 클라이언트 시크릿을 동적으로 계산해야 하는데, 이 계산 기능도 갖추고 있습니다. 인증 서비스의 OpenID Connect Discovery 엔드포인트 URL에 Sign in with Apple의 URL을 지정한 경우에는 클라이언트 시크릿 대신 Apple Developer의 팀ID Apple에서 발급한 비밀 키의 ID Apple에서 발급한 비밀 키의 페이로드(PEM) 를 등록할 수 있으며, 클라이언트 시크릿은 GS2가 필요에 따라 계산합니다. 인증 처리 인증 처리에 관한 지원도 제공하고 있습니다. 인증 서비스의 인증 페이지 URL 취득 API와, 인증 서비스에서 인증 후 콜백을 받기 위한 엔드포인트를 제공하고 있습니다. 인증 서비스의 콜백 URL에는 다음 형식을 따르는 값을 설정해 주세요. https://account.{region}.gen2.gs2io.com/{ownerId}/{namespaceName}/type/{type}/callback https://account.ap-northeast-1.gen2.gs2io.com/aAbBcCdD-project/namespace-0001/type/0/callback 인증 콜백을 받으면 다음 URL로 이동합니다. https://account.{region}.gen2.gs2io.com/{ownerId}/{namespaceName}/type/{type}/done?id_token={idToken} URL의 쿼리 문자열에 인증을 통해 얻은 ID 토큰이 전달됩니다. Firebase Authentication과 같은 GS2 이외의 인증 기능 이용 ID 토큰만 얻을 수 있다면 그 수단이 반드시 위의 절차일 필요는 없습니다. 인증 서비스 이외로부터의 등록 거부 마스터 데이터에서 OpenID Connect 연동이 설정된 슬롯은 임의의 사용자 식별자와 비밀번호를 사용한 이전 정보 등록 및 이전 실행을 할 수 없게 됩니다. 구현 예제 익명 계정 생성 GS2-Account는 네임스페이스라는 계층을 가지며, 하나의 프로젝트 내에 여러 계정 풀을 가질 수 있습니다. 네임스페이스의 용도는 특별히 정해져 있지 않으며, 배포 지역별로 네임스페이스를 나누는 등 필요에 따라 활용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). CreateAsync (); var item = await result . ModelAsync (); var userId = item . UserId ; var password = item . Password ; const auto NamespaceName = \"namespace-0001\" ; const auto Future = Gs2 -\u003e Account -\u003e Namespace ( NamespaceName ) -\u003e Create (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); const auto Future2 = Result -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result2 = Future2 -\u003e GetTask (). Result (); const auto UserId = Result2 -\u003e UserId ; const auto Password = Result2 -\u003e Password ; var domain = ez . account . namespace_ ( \"namespace-0001\" ) var async_result = await domain . create ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 익명 계정을 사용한 로그인 GS2-Account의 인증 처리는 일정 기간마다 다시 수행해야 합니다. 이러한 처리를 자동으로 수행해 주는 유틸리티 클래스인 Gs2AccountAuthenticator를 사용한 로그인 예시를 보여드립니다. GS2의 API 클라이언트에 대해 Gs2AccountAuthenticator와 생성한 익명 계정의 사용자ID, 비밀번호를 지정함으로써 로그인 중인 세션 정보를 나타내는 GameSession 인스턴스를 얻을 수 있습니다. 이후, 로그인 중인 플레이어의 정보에 접근하려면 이 GameSession 인스턴스를 사용하게 됩니다. Game Engine: Unity Unreal Engine Godot var gameSession = await gs2 . LoginAsync ( new Gs2AccountAuthenticator ( accountSetting : new AccountSetting { accountNamespaceName = this . accountNamespaceName , } ), account . UserId , account . Password ); const auto NamespaceName = \"namespace-0001\" ; const auto KeyId = \"grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001\" ; const auto Future = Profile -\u003e Login ( MakeShareable Gs2 :: UE5 :: Util :: IAuthenticator \u003e ( new Gs2 :: UE5 :: Util :: FGs2AccountAuthenticator ( NamespaceName , KeyId ) ), UserId , Password ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var authenticator = Gs2AccountAuthenticator . new ( \"namespace-0001\" , \"grn:gs2: {region}:{ownerId} :key:namespace-0001:key:key-0001\" ) var game_session = Gs2GameSession . new ( authenticator , connection , account . user_id , account . password ) var async_result = await game_session . login () if async_result . error != null : push_error ( str ( async_result . error )) return 인증 시 발생하는 특수 예외 인증 처리에서는 다음과 같은 특수 예외가 발생할 수 있습니다. 예외 타입 기반 타입 설명 PasswordIncorrectException UnauthorizedException 비밀번호가 일치하지 않음 BannedInfinityException UnauthorizedException 계정이 이용 정지되어 있음 게임 측에서는 이러한 예외를 적절히 처리하고, 사용자에게 오류 메시지를 표시하는 것을 권장합니다. Gs2AccountAuthenticator / FGs2AccountAuthenticator 를 통한 로그인에서 위 예외가 어떤 형태로 노출되는지는 SDK 래퍼의 구현에 따라 다르므로, 자세한 내용은 API 레퍼런스 를 참조해 주세요. 이전 정보 등록 슬롯 번호에 서로 다른 값을 지정함으로써 하나의 계정에 대해 여러 개의 이전 설정을 유지할 수 있습니다. 슬롯 번호는 0~1024 범위로 지정할 수 있으며, 최대 1,025종류의 이전 방법을 등록할 수 있습니다. 예를 들어, 슬롯 번호:0에 이메일 주소·비밀번호를, 슬롯 번호:1에 소셜 미디어의 ID 정보를 저장하도록 하여 게임 플레이어가 원하는 이전 수단을 선택할 수 있도록 하는 운영이 가능합니다. 이전 설정의 비밀번호 처리 이전 정보에 등록하는 password는 서버 측에서 해시화되어 저장됩니다. 한 번 설정된 비밀번호는 API로 다시 취득할 수 없으며, 분실한 경우에는 새로운 이전 설정을 다시 발급해야 합니다. 이 구조를 통해 플레이어의 인증 정보를 안전하게 유지하면서 부정 이용을 방지합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 ). AddTakeOverSettingAsync ( userIdentifier : \"user-0001@gs2.io\" , password : \"password-0001\" ); const auto NamespaceName = \"namespace-0001\" ; const auto Type = 0 ; const auto UserIdentifier = \"user-0001@gs2.io\" ; const auto Password = \"password-0001\" ; const auto Future = Gs2 -\u003e Account -\u003e Namespace ( NamespaceName ) -\u003e Me ( AccessToken ) -\u003e TakeOver ( Type ) -\u003e AddTakeOverSetting ( UserIdentifier , Password ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . take_over ( 0 ) var async_result = await domain . add_take_over_setting ( \"user-0001@gs2.io\" , \"password-0001\" ) if async_result . error != null : push_error ( str ( async_result . error )) return 등록된 이전 정보 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOversAsync ( ). ToListAsync (); const auto NamespaceName = \"namespace-0001\" ; const auto It = Gs2 -\u003e Account -\u003e Namespace ( NamespaceName ) -\u003e Me ( AccessToken ) -\u003e TakeOvers (); TArray Gs2 :: UE5 :: Account :: Model :: FEzTakeOverPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . take_overs ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 이전 실행 Game Engine: Unity Unreal Engine Godot string userId ; string password ; try { var result = await gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). DoTakeOverAsync ( type : 0 , userIdentifier : \"user-0001@gs2.io\" , password : \"password-0001\" ); var item = await result . ModelAsync (); userId = item . UserId ; password = item . Password ; } catch ( Gs2 . Gs2Account . Exception . PasswordIncorrectException e ) { // Incorrect password specified. } const auto NamespaceName = \"namespace-0001\" ; const auto Type = 0 ; const auto UserIdentifier = \"user-0001@gs2.io\" ; const auto Password = \"password-0001\" ; const auto Future = Gs2 -\u003e Account -\u003e Namespace ( NamespaceName ) -\u003e DoTakeOver ( Type , UserIdentifier , Password ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Account :: Error :: FPasswordIncorrectError :: Class )) { // Incorrect password specified. } return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) var async_result = await domain . do_take_over ( null , # type \"user-0001@gs2.io\" , # user_identifier \"password-0001\" # password ) if async_result . error != null : if async_result . error . type == \"PasswordIncorrectException\" : # 비밀번호 지정이 올바르지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result OpenID Connect 인증 처리 Unity 샘플에서는 인앱 브라우저로 unity-webview 를 사용하고 있습니다. Godot에서는 사용하는 WebView 플러그인의 URL 변경 시그널과 URL 표시 API로 바꿔서 읽어 주세요. Game Engine: Unity Godot public static async UniTask string \u003e OpenAuthentication ( WebViewObject webView , Gs2Domain gs2 , string namespaceName , IGameSession gameSession , int type ) { string idToken = null ; webView . Init ( separated : true , ld : url =\u003e { if ( new Uri ( url ). LocalPath . EndsWith ( \"/done\" )) { var codeField = new Uri ( url ). Query . Replace ( \"?\" , \"\" ). Split ( \"\u0026\" ). Select ( v =\u003e new KeyValuePair string , string \u003e( v [.. v . IndexOf ( \"=\" , StringComparison . Ordinal )], v [( v . IndexOf ( \"=\" , StringComparison . Ordinal )+ 1 )..])). FirstOrDefault ( v =\u003e v . Key == \"id_token\" ); idToken = Uri . UnescapeDataString ( codeField . Value ); webView . SetVisibility ( false ); } } ); webView . LoadURL ( ( await gs2 . Account . Namespace ( namespaceName ). Me ( gameSession ). GetAuthorizationUrlAsync ( type )). AuthorizationUrl ); webView . SetInteractionEnabled ( true ); webView . SetVisibility ( true ); await UniTask . WaitWhile (() =\u003e idToken == null ); return idToken ; } func open_authentication ( web_view , ez , namespace_name : String , type : int ) -\u003e String : var state = { \"id_token\" : \"\" } web_view . url_changed . connect ( func ( url ): var url_text = str ( url ) if not url_text . get_slice ( \"?\" , 0 ) . ends_with ( \"/done\" ): return for field in url_text . get_slice ( \"?\" , 1 ) . split ( \"\u0026\" ): var pair = field . split ( \"=\" , true , 1 ) if pair . size () == 2 and pair [ 0 ] == \"id_token\" : state . id_token = pair [ 1 ] . uri_decode () web_view . hide () ) var async_result = await ez . account . namespace_ ( namespace_name ) . get_authorization_url ( type ) if async_result . error != null : push_error ( str ( async_result . error )) return \"\" # 사용 중인 WebView 플러그인의 URL 표시 API로 교체합니다. web_view . open_url ( async_result . result . authorization_url ) while state . id_token . is_empty (): await Engine . get_main_loop () . process_frame return state . id_token OpenID Connect를 사용한 이전 정보 등록 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 ). AddTakeOverSettingOpenIdConnectAsync ( idToken : \"id-token\" ); const auto NamespaceName = \"namespace-0001\" ; const auto Type = 0 ; const auto Future = Gs2 -\u003e Account -\u003e Namespace ( NamespaceName ) -\u003e Me ( AccessToken ) -\u003e TakeOver ( Type ) -\u003e AddTakeOverSettingOpenIdConnect ( \"id-token\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . take_over ( 0 ) var async_result = await domain . add_take_over_setting_open_id_connect ( \"0123456789\" # id_token ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result OpenID Connect를 사용한 이전 실행 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). DoTakeOverOpenIdConnectAsync ( type : 0 , idToken : \"id-token\" ); var item = await result . ModelAsync (); var userId = item . UserId ; var password = item . Password ; const auto NamespaceName = \"namespace-0001\" ; const auto Type = 0 ; const auto Future = Gs2 -\u003e Account -\u003e Namespace ( NamespaceName ) -\u003e DoTakeOverOpenIdConnect ( Type , \"id-token\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) var async_result = await domain . do_take_over_open_id_connect ( null , # type \"0123456789\" # id_token ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 기타 기능 플랫폼ID 관리 GS2-Account에서는 X나 Instagram 등 각종 플랫폼에서 사용되는 사용자ID를 계정에 연결하여 저장할 수 있습니다. 다른 플레이어는 이러한 ID로 검색하여 SNS상의 친구를 게임 내로 초대하는 등의 연동이 가능합니다. 플랫폼ID도 이전 정보와 마찬가지로 0~1024 슬롯 번호로 관리되며, 하나의 계정에 여러 개를 등록할 수 있습니다. 플랫폼ID 등록 Game Engine: Unity Unreal Engine Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , userIdentifier : \"123456\" ); var result = await domain . AddPlatformIdSettingAsync ( ); var item = await result . ModelAsync (); const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PlatformId ( 0 , // type \"123456\" // userIdentifier ); const auto Future = Domain -\u003e AddPlatformIdSetting ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . platform_id ( 0 ) var async_result = await domain . add_platform_id_setting ( \"123456\" ) if async_result . error != null : push_error ( str ( async_result . error )) return var item = async_result . result 플랫폼ID를 이용한 사용자 검색 Game Engine: Unity Unreal Engine Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , userIdentifier : \"123456\" ); var result = await domain . FindPlatformUserAsync ( ); var item = await result . ModelAsync (); const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PlatformId ( 0 , // type \"123456\" // userIdentifier ); const auto Future = Domain -\u003e FindPlatformUser ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . platform_id ( 0 ) var async_result = await domain . find_platform_user ( \"123456\" ) if async_result . error != null : push_error ( str ( async_result . error )) return var item = async_result . result 등록된 플랫폼ID 목록 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformIdsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PlatformIds (); TArray Gs2 :: UE5 :: Account :: Model :: FEzPlatformIdPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . platform_ids ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 커스텀 스크립트 트리거 계정 생성이나 인증, 이전, BAN/해제 등의 처리 전후에 GS2-Script를 호출하는 이벤트 트리거를 설정할 수 있습니다. 게임 고유의 검증이나 감사를 수행할 때 활용할 수 있습니다. 트리거는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기 처리에서는 GS2-Script나 Amazon EventBridge를 이용한 외부 연동도 가능합니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. createAccountScript (완료 알림: createAccountDone ): 계정 생성 전후 authenticationScript (완료 알림: authenticationDone ): 로그인 처리 전후 createTakeOverScript (완료 알림: createTakeOverDone ): 이전 정보 등록 전후 doTakeOverScript (완료 알림: doTakeOverDone ): 이전 실행 전후 banScript (완료 알림: banDone ): BAN 등록 전후 unBanScript (완료 알림: unBanDone ): BAN 해제 전후 비밀번호 자동 변경 네임스페이스 설정에서 이전 시 비밀번호를 자동으로 변경할 수 있습니다. 이 기능을 사용하면 이전 실행 시 이전 디바이스에서 로그인할 수 없게 만들 수 있습니다. 다만, 이 기능은 여러 디바이스에 의한 동시 로그인을 완전히 억제하는 것은 아닙니다. GS2-Gateway의 기능을 이용하면 동일 사용자가 동시에 로그인하는 것을 거부하는 기능이 있으며, 이쪽이 더 강력하게 동시 로그인에 대응할 수 있습니다. 사용자 데이터 익명화 Namespace 설정에서 differentUserIdForLoginAndDataRetention을 활성화하면, 로그인에 사용하는 사용자ID와 데이터 보관용 데이터 소유자ID가 각각 별도로 발급됩니다. 앱이 인증할 때는 기존과 마찬가지로 사용자ID를 이용하고, 서버 내의 사용자 데이터에는 데이터 소유자ID를 사용함으로써 개인정보와 게임 내 데이터를 분리할 수 있습니다. 이 기능을 이용하면 데이터 분석을 익명화된 사용자 데이터를 대상으로 수행할 수 있게 되어, 프라이버시 보호와 운영에 사용하는 데이터 수집을 양립할 수 있습니다. 마스터 데이터 관리 마스터 데이터를 등록함으로써 마이크로서비스에서 사용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음과 같은 것이 있습니다. TakeOverTypeModel : 슬롯 번호별 이전 설정과 OpenID Connect 정보 다음은 OpenID Connect 연동을 설정하는 마스터 데이터의 JSON 예시입니다. { \"version\": \"2024-07-30\", \"takeOverTypeModels\": [ { \"type\": 0, \"metadata\": \"Google\", \"openIdConnectSetting\": { \"configurationPath\": \"https://accounts.google.com/.well-known/openid-configuration\", \"clientId\": \"your-client-id\", \"clientSecret\": \"your-client-secret\" } } ] } Sign in with Apple의 경우에는 clientSecret 대신 appleTeamId / appleKeyId / applePrivateKeyPem 을 지정합니다. 자세한 내용은 인증 서비스 등록 을 참조해 주세요. 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 등의 워크플로우를 구성할 수 있습니다. 플레이어별 시각 오프셋 설정 Game Server Services의 계정 정보에는 시각 오프셋을 부여할 수 있습니다. 이 오프셋에는 미래를 향해 플레이어가 몇 분 후의 상태로 동작할지를 설정할 수 있습니다. 이 기능을 이용하면 프로덕션 환경에서도 QA 담당자가 1시간 미래의 상태로 게임을 플레이하게 하는 것이 가능합니다. 이렇게 함으로써 이벤트 시작 시각이 되어도 이벤트가 열리지 않는 등의 문제를 미리 발견할 수 있습니다. 계정 이용 정지 게임 내에서 품행이 나쁜 플레이어를 이용 정지시킬 수 있습니다. BAN 상태는 사유나 해제 예정 일시를 포함한 BanStatus 로 여러 건 기록할 수 있으며, 계정에는 BAN 여부를 나타내는 플래그도 유지됩니다. BAN 추가·해제 전후에는 GS2-Script를 호출하는 이벤트 트리거를 설정할 수 있어, 외부 시스템과의 연동을 수반하는 제어가 가능합니다. 상세 레퍼런스 GS2-Account 레퍼런스","lang":"ko","section":"microservices","summary":"계정 관리 기능\n","title":"GS2-Account","url":"/ko/microservices/account/"},{"content":"모바일 게임의 수익화 방법으로 플레이어에게 광고를 시청하게 하고 광고 플랫폼으로부터 보상을 받는 방식도 일반화되었습니다. 광고가 정상적으로 시청되었을 때 광고 플랫폼으로부터 서버 간 연동으로 통지를 받아 GS2에 보상을 지급함으로써 부정행위를 방지할 수 있습니다. 클라이언트 측 콜백만으로 보상을 지급하는 설계에서는 변조된 SDK를 사용한 부정행위가 발생할 위험이 있습니다. GS2-AdReward는 광고 플랫폼에서 GS2로의 직접적인 Server-to-Server(S2S) 통지를 통해 신뢰할 수 있는 시청 완료 이벤트를 계기로 보상을 발행하는 구조를 제공합니다. 시청 포인트 일반적으로 GS2에서는 대가와 보상을 설정하여 리소스 교환을 수행하지만, 서버 간 통신의 사양이 광고 플랫폼마다 다르고 데이터의 세분화 정도도 다르기 때문에 GS2-AdReward에서는 광고 시청이 확인되었을 때 《시청 포인트》를 1포인트 가산하도록 되어 있습니다. 획득한 《시청 포인트》는 GS2-Exchange나 GS2-Showcase 등에서 사용 가능한 소비 액션으로 소비할 수 있습니다. 이를 통해 게임 내 모든 보상과 광고 시청을 느슨하게 결합할 수 있으므로, 새로운 광고 캠페인을 추가할 때도 보상 설계를 재사용할 수 있습니다. 트랜잭션 액션 GS2-AdReward에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 종별 액션 설명 소비 Gs2AdReward:ConsumePointByUserId 시청 포인트 소비 입수 Gs2AdReward:AcquirePointByUserId 시청 포인트 가산 graph TD InGame[\"게임\"] -- 광고를 시청 --\u003e ViewAd[\"광고\"] ViewAd -- 광고 시청 완료 --\u003e AdPlatform2[\"광고 플랫폼\"] ViewAd -- 광고 시청 완료 --\u003e InGame2[\"게임\"] AdPlatform2 -- 광고 시청 완료를 통지 --\u003e AdReward[\"GS2-AdReward\"] AdReward --\u003e AddPoint[\"포인트를 지급\"] AdReward -- 포인트 지급을 통지 --\u003e InGame2 InGame2 -- 시청 포인트와 아이템을 교환 --\u003e Exchange[\"GS2-Exchange\"] 지원하는 광고 플랫폼 현재 GS2-AdReward는 다음 광고 플랫폼을 지원하고 있습니다. 추가 지원을 희망하시는 경우 지원팀으로 문의해 주십시오. 플랫폼 콜백 식별자 AdMob(Google Mobile Ads) admob Unity Ads unityad AppLovin MAX applovinmax AdMob 설정 《광고 단위》 설정에서 《서버 측 검증》을 활성화하고, GS2가 발급한 URL을 설정해야 합니다. 설정 절차는 다음을 확인해 주십시오. https://support.google.com/admob/answer/9603226 네임스페이스 설정에 보상 지급 대상으로 삼을 광고 단위ID( allowAdUnitIds )를 설정해 주십시오. 여기에 등록되지 않은 광고 단위로부터의 콜백은 무시되므로, 예상하지 못한 광고 단위에 의한 부정한 시청 포인트 발행을 방지할 수 있습니다. 콜백 URL 예시 https://ad-reward.{region}.gen2.gs2io.com/callback/{ownerId}/{namespaceName}/admob Unity Ads 설정 Unity Ads 측에서 Game ID와 GS2가 발급한 URL을 설정하고, 서명 검증용 비밀 키를 발급받으십시오. 설정 절차는 다음을 확인해 주십시오. https://docs.unity.com/ads/en-us/manual/ImplementingS2SRedeemCallbacks 네임스페이스 설정에 비밀 키( keys )를 설정해 주십시오. 여러 게임에 대응하는 경우 여러 개의 키를 등록할 수 있습니다. 콜백 URL 예시 https://ad-reward.{region}.gen2.gs2io.com/callback/{ownerId}/{namespaceName}/unityad AppLovin MAX 설정 Namespace에 AppLovin MAX용 설정( appLovinMaxes )을 추가하면, 시청 완료 웹훅으로부터 포인트를 지급할 수 있게 됩니다. 필드 설명 allowAdUnitId 허용할 광고 단위 ID. 콜백에 포함된 adUnitId 를 대조하여 부정한 요청을 차단합니다. eventKey AppLovin MAX 관리 화면에서 발급한 이벤트 키. 웹훅이 정규 발신자로부터 전송되었음을 검증합니다. 콜백 URL 예시: https://ad-reward.{region}.gen2.gs2io.com/callback/{ownerId}/{namespaceName}/applovinmax 푸시 알림 설정할 수 있는 주요 푸시 알림과 설정명은 다음과 같습니다. changePointNotification : 광고 시청으로 포인트가 변동되었을 때 통지 서버 간 연동(S2S)으로 광고 플랫폼으로부터 시청 완료 통지가 도착할 때까지는 클라이언트 측에 직접 결과가 전달되지 않으므로, 푸시 알림을 통해 클라이언트에 “포인트가 지급되었다\"는 사실을 전달하는 것이 중요합니다. 구현 예제 동영상 시청 시작 각 광고 플랫폼의 SDK를 직접 이용하여 동영상을 시청해도 문제없습니다. 여기서의 구현 예제는 GS2-SDK에서 제공하는 유틸리티 클래스를 사용한 구현 예제를 보여줍니다. 유틸리티 클래스를 이용하면 시청 완료부터 changePointNotification 도착까지 자동으로 대기할 수 있으므로, UI 측에서 “포인트 지급 대기” 처리를 단순하게 구현할 수 있습니다. AdMob Game Engine: Unity Godot await AdMobUtil . InitializeAsync ( new RequestConfiguration () { TestDeviceIds = new List string \u003e { \"4cd8a25ecc6250e3c140e365e5a543ff\" , // 테스트 디바이스 ID }, } ); await AdMobUtil . ViewAsync ( \"ca-app-pub-8090851552121537/9708453802\" , // 광고 단위 ID GameSession // 로그인 세션 ); # AdMob에서 제공하는 Godot 플러그인으로 리워드 광고를 초기화·표시합니다. # 서버 측 검증용 커스텀 데이터에 GS2 사용자 ID를 설정합니다. var custom_data = game_session . get_user_id () Unity Ads Game Engine: Unity Godot await UnityAdUtil . InitializeAsync ( \"5416096\" // Unity Ads 게임 ID ); await UnityAdUtil . ViewAsync ( \"test\" , // Placement ID GameSession // 로그인 세션 ); # Unity Ads에서 제공하는 Godot 플러그인으로 리워드 광고를 초기화·표시합니다. # 서버 측 검증용 플레이어 ID에 GS2 사용자 ID를 설정합니다. var player_id = game_session . get_user_id () AppLovin MAX Game Engine: Unity Godot await AppLovinMaxUtil . ViewAsync ( \"your-sdk-key\" , // AppLovin SDK 키 \"your-ad-unit-id\" , // 광고 단위 ID GameSession // 로그인 세션 ); # AppLovin MAX에서 제공하는 Godot 플러그인으로 리워드 광고를 표시합니다. # 서버 측 콜백용 커스텀 데이터에 GS2 사용자 ID를 설정합니다. var custom_data = game_session . get_user_id () 현재 광고 포인트 취득 Game Engine: Unity Unreal Engine Godot var domain = gs2 . AdReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Point ( ); var item = await domain . ModelAsync (); const auto Domain = Gs2 -\u003e AdReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Point ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ad_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . point ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 시청 포인트 가산 콜백 광고 플랫폼으로부터의 S2S 통지에 의해 시청 포인트가 증가했을 때, changePointNotification 을 통해 클라이언트에 통지가 도착합니다. 이 콜백을 구독함으로써 시청 완료 직후의 UI 업데이트나 연출을 구현할 수 있습니다. Game Engine: Unity Unreal Engine Godot gs2 . AdReward . OnChangePointNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; }; Gs2 -\u003e AdReward -\u003e OnChangePointNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; }); ez . gs2 . notification_received . connect ( func ( message ): if message . subject != \"Gs2AdReward:ChangePointNotification\" : return var notification = message . parse () if notification == null : return var namespace_name = notification . namespace_name var user_id = notification . user_id ) 기타 기능 포인트 리셋 관리 화면이나 API를 통해 사용자가 보유한 시청 포인트를 리셋(삭제)할 수 있습니다. 캠페인 전환이나 운영상의 조정이 필요한 상황에서 이용할 수 있습니다. 시청 이력 광고 플랫폼으로부터 받은 시청 완료 통지는 History 로 보관됩니다. 동일한 transactionId 의 통지가 재전송되었을 때 포인트가 이중으로 지급되지 않도록 하는 멱등성 확보에 이용됩니다. 커스텀 스크립트 트리거 포인트 처리 전후에 GS2-Script를 호출하는 이벤트 트리거를 설정할 수 있습니다. 게임 고유의 검증이나 감사를 수행할 때 활용할 수 있습니다. 트리거는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기 처리에서는 GS2-Script나 Amazon EventBridge를 이용한 외부 연동도 가능합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. acquirePointScript (완료 통지: acquirePointDone ): 광고 시청 등으로 포인트를 가산하기 전후 consumePointScript (완료 통지: consumePointDone ): 시청 포인트를 아이템 교환 등으로 소비하기 전후 비동기 트리거에서 Amazon EventBridge를 경유하여 시청 횟수 집계나 BI 도구로의 데이터 연동과 같은 외부 시스템으로의 전송이 가능합니다. 상세 레퍼런스 GS2-AdReward API 레퍼런스","lang":"ko","section":"microservices","summary":"광고 리워드 기능","title":"GS2-AdReward","url":"/ko/microservices/ad_reward/"},{"content":"GS2-Buff는 GS2가 제공하는 마이크로서비스의 대가와 보상, 사용자 데이터 최대값의 보정을 일원화하여 관리하는 기능을 제공합니다. 기간 한정으로 보상을 증가시키는 기능이나, 구독 계약 상태라면 사용자 데이터의 최대값이 증가하는 기능을 구현할 때 활용할 수 있습니다. GS2-Buff는 다른 마이크로서비스를 직접 수정하는 것이 아니라, API 호출 시 전달되는 “컨텍스트 스택\"이라는 메타 정보를 통해 각 마이크로서비스에 보정값을 전파합니다. 따라서 버프의 내용이나 기간을 변경하더라도 각 마이크로서비스의 마스터 데이터나 플레이어 데이터를 전혀 수정하지 않고도 적용·해제가 가능하다는 점이 큰 특징입니다. 사용 사례 GS2-Buff가 상정하는 대표적인 사용 사례는 다음과 같습니다. 기간 한정으로 경험치 획득량을 2배로 만드는 캠페인 특정 쇼케이스에서 판매되는 상품 가격을 일괄 20% 할인 구독 계약 중에는 스태미나 최대값을 상향 특정 장비를 장착 중일 때만 퀘스트 보상을 증가 이벤트 기간 동안에만 강화 소재 소비량을 절반으로 감소 graph LR Player[\"플레이어\"] --\u003e|ApplyBuff| Buff[GS2-Buff] Buff --\u003e|컨텍스트 스택| Player Player --\u003e|API + 컨텍스트 스택| Other[\"다른 마이크로서비스 (GS2-Experience / GS2-Stamina / GS2-Showcase 등)\"] Other -.참조.-\u003e Buff Other --\u003e|보정 후 값| Player 마스터 데이터 관리 마스터 데이터를 등록하면 마이크로서비스에서 이용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. BuffEntryModel : 보정값과 대상을 정의하는 기본 모델 마스터 데이터 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수도 있습니다. BuffEntryModel의 주요 설정 항목 설정 항목 설명 name 버프를 식별하는 고유한 이름 metadata 클라이언트 측에서 이용하는 임의의 메타데이터 expression 보정 계산식의 종류 ( Rate Add / Mul / Value Add ) targetType 보정 대상이 “모델\"인지 “액션\"인지 targetModel / targetAction 보정 대상의 모델명·액션명·조건 GRN·보정 레이트 priority 적용 우선순위. 값이 작은 것부터 순서대로 계산 applyPeriodScheduleEventId GS2-Schedule 이벤트에 의한 유효 기간 버프 엔티티 각 마이크로서비스에 가하는 보정의 단위입니다. 기초값을 1.0으로 하여, 각 파라미터에 대해 어느 정도 증감시킬지를 정의합니다. 이용 가능한 주요 버프 종류와 계산 방법은 다음과 같습니다. Rate Add : 보정 레이트에 가산 Mul : 보정 레이트에 승산 Value Add : 값을 직접 가산 (모델이나 액션의 수치에만 해당) Rate Add 와 Mul 은 보정 레이트에 대한 연산으로, Rate Add 1.5로 설정하면 보정값은 2.5배가 되고, Mul 1.5로 설정하면 보정값은 1.5배가 됩니다. Value Add 는 값을 직접 가산하는 연산으로, Value Add 5로 설정하면 보정값은 +5가 됩니다. 적용 우선순위 보정값에는 적용 우선순위를 설정할 수 있습니다. 우선순위에 설정된 값이 작은 보정값부터 순서대로 보정값 계산이 이루어집니다. 예를 들어, 다음과 같은 보정값이 정의되어 있다고 가정합니다. 보정값 종류 보정값 적용 우선순위 Rate Add 0.2 1 Mul 1.5 2 Rate Add 0.2 3 이 경우, 다음 순서로 보정값 계산이 실행됩니다. 1.0 + 0.2 = 1.2 1.2 * 1.5 = 1.8 1.8 + 0.2 = 2.0 그리고 최종 보정값은 2.0배가 됩니다. Value Add가 포함된 보정 계산 보정값 중에 “Value Add\"가 포함되어 있는 경우, “Value Add\"가 정의된 우선순위의 직전까지 보정 계산을 먼저 수행하고, 계산 후의 값에 대해 값 가산이 이루어집니다. 보정값 종류 보정값 적용 우선순위 Rate Add 0.2 1 Mul 1.5 2 Value Add 2 3 Rate Add 0.2 4 이 경우, 먼저 Value Add가 나타나기 직전까지의 보정값 계산이 실행됩니다. 1.0 + 0.2 = 1.2 1.2 * 1.5 = 1.8 그리고 입력값에 일단 이 보정값을 적용합니다. 예를 들어 입력이 10이라면 1.8배를 하여 보정 후의 값은 18이 됩니다. 보정 후의 값에 “Value Add\"의 +2가 적용되어, 보정 후의 값은 20이 됩니다. 이어서 Value Add가 나타난 직후부터의 보정값 계산이 실행됩니다. 1.0 + 0.2 = 1.2 그리고 입력값에 일단 이 보정값을 적용합니다. 입력이 10이라면 1.2배를 하여 보정 후의 값은 12가 됩니다. “Value Add” 이후의 보정값에 이 값을 가산합니다. 20 + 12 = 32 이렇게 해서 입력이 10인 경우 최종 보정 후의 값은 32가 됩니다. 전체 식을 정리하면 다음과 같습니다. 입력값을 x로 표기합니다. ((x * (1.0 + 0.2) * 1.5) + 2) + x * (1.0 + 0.2) 보정 대상 설정 버프에 의한 보정 대상은 크게 2종류로, “모델\"과 “액션\"이 있습니다. 어떤 모델이나 액션을 설정할 수 있는지는 각 마이크로서비스의 버프 관련 문서를 참조하십시오. 모델 모델의 적용 대상 예시로는 다음과 같은 것이 있습니다. GS2-Experience의 랭크 캡 GS2-Stamina의 스태미나 최대값 GS2-Showcase의 획득 액션 GS2-Showcase의 소비 액션 액션 액션의 적용 대상 예시로는 다음과 같은 것이 있습니다. GS2-Experience의 경험치 가산량 GS2-Stamina의 스태미나 회복량 GS2-Stamina의 스태미나 소비량 보정 적용 조건 설정 GS2-Showcase에 적용한다면 어느 DisplayItem에 보정값을 적용할 것인가? GS2-Experience에 적용한다면 어느 Status에 보정값을 적용할 것인가? 와 같은 적용 조건을 설정하는 것이 이 파라미터입니다. 각 버프에 대해 어떤 적용 조건을 설정할 수 있는지는 각 마이크로서비스의 버프 관련 문서를 참조하십시오. 모델과 GRN 적용 조건에는 모델과 GRN을 지정합니다. 버프에 따라서는 여러 모델을 지정할 수 있는 경우도 있습니다. 예를 들어 GS2-Showcase의 경우, Showcase 내의 모든 DisplayItem에 보정을 적용하기 위해 Showcase의 GRN을 지정하는 패턴과, Showcase 내의 특정 DisplayItem에만 보정을 적용하기 위해 DisplayItem의 GRN을 지정하는 패턴이 있습니다. 버프에는 여러 적용 조건을 설정할 수 있으며, 그중 어느 하나라도 해당되면 보정값이 적용됩니다. 즉, 하나의 버프 엔티티에 여러 DisplayItem을 적용 조건으로 설정함으로써, 하나의 버프 엔티티로 여러 DisplayItem에 대한 보정값을 정의할 수 있습니다. 보정 적용 방법 GS2-Buff의 ApplyBuff API를 호출하면 “컨텍스트 스택\"이 응답으로 반환됩니다. GS2가 제공하는 모든 API에는 컨텍스트 스택을 지정할 수 있는 인터페이스가 마련되어 있습니다. GS2-Buff가 응답한 컨텍스트 스택을 각 API 호출 시 지정함으로써 버프를 적용할 수 있습니다. 게임 엔진용 SDK와 같은 상위 레벨 SDK에서는 컨텍스트 스택 지정이 래핑되어 있어 명시적으로 지정할 필요가 없는 경우가 있습니다. sequenceDiagram participant Player as 플레이어 participant Buff as GS2-Buff participant Other as 다른 마이크로서비스 Player-\u003e\u003eBuff: ApplyBuff Buff--\u003e\u003ePlayer: 컨텍스트 스택 Player-\u003e\u003eOther: API 호출 (컨텍스트 스택 부여) Other--\u003e\u003ePlayer: 버프가 적용된 값 보정 적용 범위 버프의 적용 범위는 광범위하여, 마스터 데이터 취득 API에도 버프가 적용됩니다. 컨텍스트 스택을 지정한 상태로 마스터 데이터 취득 API를 호출하면, 버프가 적용된 상태의 값이 응답됩니다. 게임 내에서 버프가 적용되지 않은 상태의 값을 함께 표시하고 싶은 경우, 컨텍스트 스택을 부여하지 않은 API 접근을 조합하여 표시해야 합니다. 버프 엔티티와 GS2-Schedule의 연계 컨텍스트 스택 내의 버프 정보는 유효 기간을 보유합니다. 즉, 버프 엔티티에 유효 기간으로 GS2-Schedule의 이벤트가 설정되어 있는 경우, 이벤트 기간 밖이 되면 자동으로 버프가 적용되지 않게 됩니다. 단, 새롭게 버프의 적용 조건이 변경되거나 새로운 버프가 추가된 경우에는 다시 ApplyBuff를 호출하여 버프를 반영해야 합니다. 컨텍스트 스택의 유효 기한 컨텍스트 스택에는 유효 기한이 설정되어 있습니다. ApplyBuff를 호출한 시점으로부터 24시간이 경과하면 컨텍스트 스택은 효력을 잃습니다. ApplyBuff는 조건에 변경이 없더라도 24시간 이내에 다시 실행하도록 하십시오. 스크립트에 의한 레이트 오버라이드 applyBuffScript 의 동기 스크립트 반환값으로 OverrideBuffRate ( name 과 rate 의 쌍)를 반환함으로써, 버프 적용 시 해당 버프의 레이트를 동적으로 오버라이드할 수 있습니다. 플레이어의 상태나 시간대, 보유 장비에 따라 버프의 레이트를 세밀하게 변동시키고 싶은 경우에 활용할 수 있습니다. 스크립트 트리거 버프 적용 전후에 GS2-Script를 호출하는 이벤트 트리거를 설정할 수 있습니다. 트리거는 동기·비동기 실행 방식을 선택할 수 있으며, doneTriggerTargetType 을 통해 Amazon EventBridge 등으로의 완료 알림도 가능합니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. applyBuffScript (완료 알림: applyDone ): 버프 적용 전후. 스크립트의 반환값으로 버프의 적용 레이트를 동적으로 오버라이드하는 것도 가능합니다. 구현 예제 버프를 적용 ApplyBuff를 호출하면, Gs2 객체 자체가 버프 적용 후의 컨텍스트를 보유한 새로운 인스턴스로 전환됩니다. 반환된 Gs2 객체를 이후의 접근에서 사용함으로써, 버프가 적용된 상태로 각 마이크로서비스를 이용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Buff (); gs2 = await domain . ApplyBuffAsync (); // 새로운 gs2 오브젝트를 통해 접근하면 버프가 적용된 값으로 처리됩니다 const auto Domain = Gs2 -\u003e Buff -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Buff ( ); const auto Future = Domain -\u003e ApplyBuff ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); // 새로운 Gs2 오브젝트를 통해 접근하면 버프가 적용된 값으로 처리됩니다 var domain = ez . buff . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . buff ( ) var async_result = await domain . apply_buff ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 등록된 버프 엔티티 목록 취득 게임 내 캠페인 목록 표시 등을 위해, 현재 등록되어 있는 버프 엔티티를 취득할 수 있습니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). BuffEntryModelsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Buff -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BuffEntryModels (); TArray Gs2 :: UE5 :: Buff :: Model :: FEzBuffEntryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . buff . namespace_ ( \"namespace-0001\" ) . buff_entry_models ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 특정 버프 엔티티 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). BuffEntryModel ( buffEntryName : \"buff-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Buff -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BuffEntryModel ( \"buff-0001\" // buffEntryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . buff . namespace_ ( \"namespace-0001\" ) . buff_entry_model ( \"character-level\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 다른 마이크로서비스와의 조합 GS2-Buff는 단독으로 사용하는 것이 아니라 다른 마이크로서비스와 조합하여 이용합니다. 주요 연계 대상과 그에 대응하는 보정 대상의 예시는 다음과 같습니다. 연계 대상 보정 대상 예시 GS2-Experience 경험치 획득량, 랭크 캡 GS2-Stamina 스태미나 최대값, 회복량, 소비량 GS2-Showcase DisplayItem의 판매 가격, 획득 수량 GS2-Money2 입금량, 소비량 GS2-Inventory 아이템 획득 수량 GS2-Quest 퀘스트 보상 획득 수량 GS2-Enhance 강화 소재 소비 수 각 마이크로서비스가 어떤 모델명·액션명에 대한 버프를 받아들이는지는 각 마이크로서비스의 문서를 참조하십시오. 상세 레퍼런스 GS2-Buff API 레퍼런스","lang":"ko","section":"microservices","summary":"버프 기능","title":"GS2-Buff","url":"/ko/microservices/buff/"},{"content":"GS2-Chat 을 이용하면 게임 내에 텍스트 채팅을 손쉽게 구현할 수 있습니다. 텍스트 채팅은 새로운 메시지를 감지하기 위해 상시 접속 세션이 필요하며, 서버에 요구되는 요건도 복잡해집니다. Game Server Services 를 이용하면 그러한 번거로운 상시 접속 세션 관리로부터 해방될 수 있습니다. 룸 GS2-Chat 을 이용하려면 먼저 룸을 생성해야 합니다. 룸은 플레이어가 자유롭게 생성할 수 있도록 할 수도 있고, 개발 측에서 준비한 룸을 플레이어가 사용하게 할 수도 있습니다. 또한 게시할 수 있는 사용자ID의 화이트리스트를 설정하여 특정 멤버 전용 룸을 구성하는 것도 가능합니다. 한 가지 주의해야 할 점은, GS2-Chat 은 룸당 1초에 3건까지만 메시지 게시를 보장한다는 것입니다. 이를 초과하는 빈도로 메시지를 게시하면 오류가 발생할 수 있습니다. 따라서 소셜 네트워크의 타임라인처럼 대량의 플레이어를 하나의 룸에 담는 용도로는 적합하지 않습니다. 비밀번호 룸에는 비밀번호를 설정할 수 있습니다. 비밀번호가 설정된 룸의 메시지를 가져오거나 메시지를 게시할 때는 비밀번호 지정이 필요합니다. 룸 설정 갱신 룸을 생성한 후에도 메타데이터, 비밀번호, 화이트리스트(게시 가능한 사용자ID 목록)를 갱신할 수 있습니다. 이를 통해 룸의 접근 권한을 동적으로 변경하거나 룸의 속성 정보를 변경할 수 있습니다. 구독 플레이어는 룸을 구독함으로써 룸에 게시되는 새로운 메시지에 대한 알림을 받을 수 있게 됩니다. 메시지에는 카테고리를 설정할 수 있으며, 룸 내 카테고리별로 구독이 가능합니다. 길드 채팅을 구현할 때 길드 마스터의 메시지에만 특별한 카테고리를 설정하여, 길드 멤버가 길드 마스터의 메시지만은 반드시 구독하도록 만드는 것도 가능합니다. 구독 설정은 이후에도 갱신할 수 있습니다. 수신할 카테고리의 추가·삭제나 오프라인 시 모바일 푸시 알림 전송 설정을 동적으로 변경할 수 있습니다. 구독에 따른 알림 처리는 GS2-Gateway 의 알림 기능이 사용되는데, GS2-Gateway 에는 알림 대상 플레이어가 오프라인인 경우 모바일 푸시 알림 등 게임 외부의 방법으로 알림을 보내는 기능이 마련되어 있습니다. 하나의 룸을 구독할 수 있는 인원수에 명확한 제한은 없지만, 알림을 전송하기 위해 GS2-Gateway 의 API 요청이 발생하므로 GS2 API 이용 요금이 알림 대상 1건마다 발생합니다. 또한 알림 대상이 많아지면 알림이 도착하기까지 걸리는 시간이 길어집니다. 룸 이름을 지정하여 해당 룸을 현재 누가 구독하고 있는지 목록을 가져올 수도 있습니다. actor Player1 actor Player2 participant \"GS2-Chat#Room\" participant \"GS2-Gateway#Namespace\" participant \"Firebase Cloud Messaging\" Player1 -\u003e \"GS2-Chat#Room\" : Subscribe Player2 -\u003e \"GS2-Chat#Room\" : Post Message \"GS2-Chat#Room\" -\u003e \"GS2-Gateway#Namespace\" : Send Notification to Player1 \"GS2-Gateway#Namespace\" -\u003e \"Firebase Cloud Messaging\" : Notification(if player is offline) \"GS2-Gateway#Namespace\" -\u003e Player1 : Notification Player1 -\u003e \"GS2-Chat#Room\" : Load New Message 메시지 룸에 메시지를 전송할 수 있습니다. 메시지 보관 기간은 네임스페이스 설정 messageLifeTimeDays 로 1~30일 범위에서 지정할 수 있으며, 보관 기간을 초과한 메시지는 삭제됩니다. 또한 최신 메시지를 일정 건수만큼 가져오는 기능도 마련되어 있습니다. 이를 통해 룸에 입장한 직후의 과거 로그 표시 등을 효율적으로 처리할 수 있습니다. 금칙어 메시지 페이로드에 부적절한 단어가 포함되어 있을 수 있습니다. GS2-Script 와 연계하면 부적절한 단어가 포함된 메시지의 게시를 거부하거나, 메시지 페이로드를 재작성할 수 있습니다. GS2-Script 는 HTTP 통신을 발행할 수 있으므로, 자체적으로 보유한 금칙어 체크 서버로 포워딩하여 처리하는 것도 가능합니다. actor Player participant \"GS2-Chat#Room\" participant \"GS2-Script#Script\" Player -\u003e \"GS2-Chat#Room\" : Post Message \"GS2-Chat#Room\" -\u003e \"GS2-Script#Script\" : Trigger post message \"GS2-Script#Script\" -\u003e \"GS2-Chat#Room\" : Continue? / Replaced Message 카테고리 모델과 알림 설정 메시지 카테고리는 마스터 데이터로 정의할 수 있으며, 카테고리별로 액세스 토큰을 사용한 게시를 거부할지 여부나 오프라인 시 모바일 푸시 알림으로 전송할지 여부를 설정할 수 있습니다. 트랜잭션 액션 GS2-Chat 에서는 트랜잭션 액션을 제공하지 않습니다. 메시지 게시의 스크립트 트리거에서 다른 마이크로서비스의 API를 호출함으로써, 특정 메시지 게시에 따라 사용자 데이터를 재작성하는 등의 연계는 가능합니다. 스크립트 트리거 룸 생성·삭제, 메시지 게시, 구독 및 구독 해제 각 처리의 전후에 GS2-Script 를 호출할 수 있습니다. 동기 실행으로 검증이나 변조를 수행하거나, 비동기 실행으로 Amazon EventBridge 를 경유한 외부 연계를 구성할 수도 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. createRoomScript (완료 알림: createRoomDone ): 룸 생성의 전후 deleteRoomScript (완료 알림: deleteRoomDone ): 룸 삭제의 전후 postMessageScript (완료 알림: postMessageDone ): 메시지 게시의 전후 subscribeRoomScript (완료 알림: subscribeRoomDone ): 룸 구독의 전후 unsubscribeRoomScript (완료 알림: unsubscribeRoomDone ): 구독 해제의 전후 푸시 알림 설정할 수 있는 주요 푸시 알림과 설정 이름은 다음과 같습니다. postNotification : 구독 중인 룸에 새로운 게시물이 있을 때 알림 알림 카테고리는 notificationTypes 로 제어할 수 있으며, 오프라인 단말에 대한 모바일 푸시 전송 설정도 가능합니다. 구현 예제 룸 생성 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CreateRoomAsync (); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto Future = Domain -\u003e CreateRoom ( \"room-0001\" , // name nullptr , // metadata nullptr , // password nullptr // whiteListUserIds ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . create_room ( \"room-0001\" , # name null , # metadata null , # password null # white_list_user_ids ) if async_result . error != null : if async_result . error . type == \"NoAccessPrivilegesException\" : # 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 룸 구독 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( roomName : \"room-0001\" ). SubscribeAsync ( notificationTypes : new [] { new Gs2 . Unity . Gs2Chat . Model . EzNotificationType { category = 0 , enableTransferMobilePushNotification = false , }, } ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Subscribe ( \"room-0001\" // roomName ); const auto Future = Domain -\u003e Subscribe ( [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Chat :: Model :: FNotificationType \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: Chat :: Model :: FNotificationType \u003e ()); return v ; }() // notificationTypes ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscribe ( \"room-0001\" ) var async_result = await domain . subscribe ( [ ( Gs2ChatEzNotificationType . new ()), ] # notification_types ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 룸 구독 해제 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( roomName : \"room-0001\" ). UnsubscribeAsync ( ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Subscribe ( \"room-0001\" // roomName ); const auto Future = Domain -\u003e Unsubscribe ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscribe ( \"room-0001\" ) var async_result = await domain . unsubscribe ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 메시지 게시 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ). PostAsync ( metadata : \"MESSAGE_0001\" , category : 0 ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); const auto Future = Domain -\u003e Post ( \"MESSAGE_0001\" , // metadata 0 // category ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . room ( \"room-0001\" , null ) var async_result = await domain . post ( \"MESSAGE_0001\" , # metadata null # category ) if async_result . error != null : if async_result . error . type == \"NoAccessPrivilegesException\" : # 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 pass if async_result . error . type == \"PasswordRequiredException\" : # 룸에 접근하려면 비밀번호 지정이 필요합니다 pass if async_result . error . type == \"PasswordIncorrectException\" : # 룸에 설정된 비밀번호와 지정한 비밀번호가 일치하지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 메시지 목록 가져오기 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ). MessagesAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); const auto It = Domain -\u003e Messages ( ); TArray Gs2 :: UE5 :: Chat :: Model :: FEzMessagePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . room ( \"room-0001\" , null ) . messages ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 메시지 수신 알림 핸들링 MessagesAsync 는 캐시가 있는 경우 캐시를 응답하며, 메시지 목록에서 가져올 수 있는 데이터의 캐시는 메시지 수신 알림을 받았을 때 SDK 에 의해 자동으로 갱신됩니다. 따라서 일반적으로는 이 이벤트를 핸들링할 필요가 없으며, 필요한 시점에 MessagesAsync 를 호출하면 보통 캐시를 이용하여 최신 메시지 목록에 접근할 수 있습니다. Game Engine: Unity Unreal Engine Godot gs2 . Chat . OnPostNotification += PostNotification =\u003e { var namespaceName = PostNotification . NamespaceName ; var roomName = PostNotification . RoomName ; }; Gs2 -\u003e Chat -\u003e OnPostNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto RoomName = Notification -\u003e RoomNameValue ; }); ez . gs2 . notification_received . connect ( func ( message ): if message . subject != \"Gs2Chat:PostNotification\" : return var notification = message . parse () if notification == null : return var namespace_name = notification . namespace_name var room_name = notification . room_name var user_id = notification . user_id var category = notification . category var created_at = notification . created_at ) 기타 기능 클라이언트에서 게시할 수 없는 카테고리 마스터 데이터의 CategoryModel 에서 rejectAccessTokenPost 를 true 로 설정하면 해당 카테고리에는 액세스 토큰을 사용한 게시가 불가능해집니다. 이 기능을 활용하면 스크립트 등을 경유해서만 게시할 수 있는 카테고리를 준비하여, 시스템 메시지를 저장하는 용도로 사용할 수 있습니다. 플레이어에 의한 룸 생성 가능 여부 네임스페이스 설정의 allowCreateRoom 을 이용하면 플레이어가 자유롭게 룸을 생성할 수 있는지 여부를 관리 측에서 제어할 수 있습니다. allowCreateRoom=true : 플레이어가 직접 룸을 생성 가능 allowCreateRoom=false : 운영 측이 준비한 룸만 이용 가능 대규모 룸 난립을 방지하고 싶거나 특정 룸만 허용하고 싶은 경우, 이 설정을 적절히 조정하시기 바랍니다. 메시지 카테고리 활용 예 메시지에는 카테고리를 설정할 수 있습니다. 카테고리를 사용하면 클라이언트 측에서 페이로드 파싱 방법을 전환할 수 있습니다. 예를 들어 다음과 같은 사용 방법이 가능합니다. 카테고리 0 : 텍스트가 페이로드에 그대로 포함되는 일반 텍스트 메시지 카테고리 1 : 페이로드에 스탬프 ID가 포함되는 스탬프 메시지 이처럼 카테고리를 메시지의 종류나 중요도별로 구분함으로써 게임 플레이어가 받는 알림의 종류를 스스로 설정할 수 있게 되어 사용자 경험을 향상시킬 수 있습니다. 마스터 데이터 관리 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. CategoryModel : 카테고리 번호별 게시 가능 여부( rejectAccessTokenPost ) 및 오프라인 시 모바일 푸시 알림 전송 설정 마스터 데이터 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub 에서 데이터를 반영하거나 GS2-Deploy 를 사용하여 CI 에서 등록하는 워크플로우를 구성하는 것도 가능합니다. 상세 레퍼런스 GS2-Chat API 레퍼런스","lang":"ko","section":"microservices","summary":"텍스트 채팅 기능\n","title":"GS2-Chat","url":"/ko/microservices/chat/"},{"content":"GS2-Datastore를 이용하면 임의의 바이너리 데이터를 서버에 저장할 수 있습니다. 업로드한 데이터에는 접근 권한을 설정할 수 있으며, public (전체 공개), protected (지정한 사용자ID에게만 공개: 최대 100건), private (본인에게만 공개) 중에서 선택합니다. GS2-Datastore는 UGC나 레이싱 게임의 고스트 데이터와 같은 데이터를 업로드하는 것을 주된 목적으로 하며, 플레이어의 사용자 데이터를 저장하는 데에는 반드시 적합하다고 할 수 없습니다. 왜냐하면 소지품의 소지 수량을 바이너리 데이터로 저장할 경우, 세이브 데이터나 앱 본체의 변조로 아이템을 복제하거나 입수량을 부정하게 늘린 개조 앱으로 플레이하는 것을 허용하게 되기 때문입니다. 소지품의 소지 수량이라면 GS2-Inventory와 같은 전용 마이크로서비스를 이용함으로써 이러한 부정 행위를 막을 수 있습니다. 사용자 데이터 중에서도 설정값 등 변조되더라도 게임 밸런스에 영향을 주지 않는 데이터를 저장하는 것을 부정하는 것은 아닙니다. 유스케이스 GS2-Datastore가 상정하는 대표적인 유스케이스는 다음과 같습니다. 사용자가 게시한 스크린샷이나 리플레이 등 UGC 콘텐츠의 저장 레이싱 게임에서의 고스트 데이터 공유 포토 모드로 촬영한 이미지의 클라우드 공유 게임 설정 등 변조되더라도 게임 밸런스에 영향을 주지 않는 사용자 데이터의 저장 스테이지의 커스텀 맵 데이터 공개·공유 접근 스코프 데이터 오브젝트에는 3가지 접근 스코프가 있으며, 용도에 따라 구분하여 사용합니다. 스코프 설명 주요 용도 public 모든 플레이어가 다운로드 가능 UGC 콘텐츠 공개, 고스트 공유 protected allowUserIds 에 지정한 사용자만 다운로드 가능(최대 100건) 친구에게만 공유 private 업로드한 사용자 본인만 다운로드 가능 개인 세이브 데이터, 설정값 스코프와 허용 사용자는 UpdateDataObject 로 나중에 변경하는 것도 가능합니다. 아키텍처 GS2-Datastore는 바이너리 데이터의 저장 위치 등을 기록한 메타데이터를 관리하며, 실제 바이너리 데이터의 저장에는 외부 클라우드 스토리지를 이용하고 있습니다. 그렇기 때문에 업로드·다운로드 처리는 여러 단계를 필요로 합니다. 이 처리 흐름은 게임 엔진용 SDK에서는 래핑된 고수준 API가 제공되므로 신경 쓸 필요가 없지만, 각종 프로그래밍 언어용 SDK에는 고수준 API가 제공되지 않으므로 이용자가 직접 여러 단계를 처리해야 합니다. 업로드 프로세스 sequenceDiagram actor Player as 플레이어 participant Namespace as GS2-Datastore#Namespace participant Storage as Cloud Storage Player-\u003e\u003eNamespace: PrepareUpload Namespace--\u003e\u003ePlayer: Cloud Storage URL Player-\u003e\u003eStorage: Upload Payload Storage--\u003e\u003ePlayer: OK Player-\u003e\u003eNamespace: DoneUpload Namespace-\u003e\u003eStorage: Check exists Namespace--\u003e\u003ePlayer: OK 다운로드 프로세스 sequenceDiagram actor Player as 플레이어 participant Namespace as GS2-Datastore#Namespace participant Storage as Cloud Storage Player-\u003e\u003eNamespace: PrepareDownload Namespace--\u003e\u003ePlayer: Cloud Storage URL Player-\u003e\u003eStorage: Download Storage--\u003e\u003ePlayer: Payload 업로드 처리 중의 다운로드 GS2-Datastore는 이미 업로드한 데이터를 갱신할 수 있습니다. Prepare ReUpload를 호출한 후부터 Done Upload를 호출할 때까지는 갱신 전의 기존 파일을 다운로드할 수 있는 상태가 유지되며, 어중간한 데이터가 다운로드되는 일은 없습니다. 업로드 데이터의 과거 버전 취득 GS2-Datastore에서는 과거 30일분의 과거 버전에 접근할 수 있도록 되어 있습니다. 데이터 오브젝트의 갱신 이력(DataObjectHistory)을 취득함으로써 과거 각 세대의 ID를 취득할 수 있으며, 그 세대 ID를 지정하여 데이터를 다운로드하는 것이 가능합니다. 이는 삭제된 데이터에도 적용되며, 삭제 요청 후 30일 후에 실제로 삭제됩니다. 단, 법적 요건에 따라 데이터 삭제를 수행한 경우에는 이 조건에 해당하지 않을 수 있습니다. 데이터 크기와 상태 1개의 데이터 오브젝트의 최대 크기는 10MB입니다. 업로드 중에는 UPLOADING , 완료되면 ACTIVE , 삭제 요청 후에는 DELETED 로 전이합니다. DELETED 상태의 데이터는 30일 이내라면 restoreDataObject 로 복원할 수 있습니다. stateDiagram-v2 [*] --\u003e UPLOADING: PrepareUpload UPLOADING --\u003e ACTIVE: DoneUpload ACTIVE --\u003e UPLOADING: PrepareReUpload ACTIVE --\u003e DELETED: DeleteDataObject DELETED --\u003e ACTIVE: RestoreDataObject (30일 이내) DELETED --\u003e [*]: 30일 경과 데이터 오브젝트의 주요 속성 속성 설명 dataObjectId 데이터 오브젝트의 고유 ID(GRN) name 데이터 오브젝트 이름. 사용자마다 고유 userId 업로드한 사용자의 ID scope 접근 스코프 ( public / protected / private ) allowUserIds protected 스코프에서 참조를 허용하는 사용자ID 목록 platform 업로드에 사용된 플랫폼 정보 status 데이터의 상태 ( UPLOADING / ACTIVE / DELETED ) generation 현재 세대의 식별자 previousGeneration 1개 전 세대의 식별자 스크립트 트리거 데이터 오브젝트의 업로드 완료 보고 전후에 GS2-Script를 호출하는 이벤트 트리거를 설정할 수 있습니다. 동기 실행으로 완료 보고를 거부하거나, 비동기 실행으로 Amazon EventBridge를 이용한 외부 연동도 가능합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. doneUploadScript (완료 통지: doneUploadDone ): 업로드 완료 보고 전후 동기 실행 스크립트로 업로드를 거부함으로써, 이미지의 내용을 별도 서비스에서 검사하여 부적절한 콘텐츠라면 등록을 거부하는 운영이 가능합니다. 구현 예제 데이터 업로드 데이터 업로드는 PrepareUpload → 클라우드 스토리지로의 PUT → DoneUpload의 3단계로 구성되지만, 게임 엔진용 SDK에서는 UploadAsync 호출 1회로 완결됩니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). UploadAsync ( name : \"dataObject-0001\" , scope : \"public\" , data : data ); var item = await result . ModelAsync (); var dataObjectId = item . DataObjectId ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto Future = Domain -\u003e Upload ( \"dataObject-0001\" , // name data , // data \"public\" // scope ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var client = Gs2DatastoreClient . new ( connection ) var async_result = await client . upload ( game_session , \"namespace-0001\" , \"public\" , null , data , \"dataObject-0001\" ) if async_result . error != null : push_error ( str ( async_result . error )) return var item = async_result . result 기존 데이터의 재업로드 같은 이름의 데이터 오브젝트에 대해 새로운 바이너리를 기록할 때는 재업로드를 사용합니다. 재업로드 중에도 DoneUpload 가 호출될 때까지는 갱신 전의 기존 데이터를 가져올 수 있습니다. Game Engine: Unity Unreal Engine Godot var domain = await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ). ReUploadAsync ( data : newData ); const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e ReUpload ( NewData ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var client = Gs2DatastoreClient . new ( connection ) var data_object = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) var async_result = await client . re_upload ( game_session , \"namespace-0001\" , data_object . _domain , new_data ) if async_result . error != null : push_error ( str ( async_result . error )) return 데이터 다운로드(데이터 오브젝트 ID 지정) Game Engine: Unity Unreal Engine Godot var binary = await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DownloadAsync ( dataObjectId : dataObjectId ); const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto Future = Domain -\u003e Download ( dataObjectId // dataObjectId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var client = Gs2DatastoreClient . new ( connection ) var async_result = await client . download ( game_session , \"namespace-0001\" , data_object_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var binary = async_result . result 데이터 다운로드(사용자ID와 데이터 오브젝트 이름 지정) Game Engine: Unity Unreal Engine Godot var binary = await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). DataObject ( dataObjectName : \"dataObject-0001\" ). DownloadByUserIdAndDataObjectNameAsync ( ); const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e DownloadByUserIdAndDataObjectName ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . prepare_download_by_user_id_and_data_object_name ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 자신이 업로드한 데이터의 다운로드(데이터 오브젝트 이름 지정) Game Engine: Unity Unreal Engine Godot var binary = await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ). DownloadOwnAsync ( ); const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e DownloadOwn ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var client = Gs2DatastoreClient . new ( connection ) var async_result = await client . download_own_data ( game_session , \"namespace-0001\" , \"dataObject-0001\" ) if async_result . error != null : push_error ( str ( async_result . error )) return var binary = async_result . result 자신이 업로드한 데이터의 목록 취득 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObjectsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e DataObjects (); TArray Gs2 :: UE5 :: Datastore :: Model :: FEzDataObjectPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_objects ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 데이터 오브젝트의 접근 스코프 변경 UpdateDataObject 를 이용하면 접근 스코프나 허용 사용자 목록을 나중에 변경할 수 있습니다. 예를 들어, 처음에는 private 로 생성하고 공유 준비가 완료된 시점에 public 으로 전환하는 운영이 가능합니다. Game Engine: Unity Unreal Engine Godot var domain = await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ). UpdateDataObjectAsync ( scope : \"protected\" , allowUserIds : new [] { \"user-0002\" , \"user-0003\" } ); const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e UpdateDataObject ( \"protected\" , // scope { \"user-0002\" , \"user-0003\" } // allowUserIds ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . update_data_object ( \"public\" , # scope null # allow_user_ids ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 데이터 오브젝트 삭제 삭제 요청 후 30일 이내라면 RestoreDataObject 로 복원할 수 있습니다. Game Engine: Unity Unreal Engine Godot await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ). DeleteDataObjectAsync ( ); const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e DeleteDataObject ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . delete_data_object ( ) if async_result . error != null : if async_result . error . type == \"InvalidStatusException\" : # DataObject가 조작 가능한 상태가 아닙니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 데이터 오브젝트의 갱신 이력 취득 과거 세대를 취득함으로써 롤백이나 과거 리플레이 열람 등을 구현할 수 있습니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ). DataObjectHistoriesAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ) -\u003e DataObjectHistories (); TArray Gs2 :: UE5 :: Datastore :: Model :: FEzDataObjectHistoryPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) . data_object_histories ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 오래된 세대의 데이터에 대한 접근 제한 데이터를 다운로드할 때는 세대ID를 지정하여 구체적인 파일을 특정합니다. 세대ID를 다운로드 요청에 추가함으로써 목록을 조회한 시점의 데이터를 확실히 다운로드하는 것을 보장할 수 있습니다. 단, 언제까지나 오래된 세대의 데이터에 접근할 수 있는 것이 바람직하지 않은 경우도 있습니다. 그렇기 때문에 데이터 소유자 이외에는 갱신 후 60분 이내이면서 1개 전 세대에 한해서만 오래된 세대의 데이터 다운로드를 허용하는 옵션이 존재합니다. 상세 레퍼런스 GS2-Datastore API 레퍼런스","lang":"ko","section":"microservices","summary":"바이너리 데이터 스토리지 기능\n","title":"GS2-Datastore","url":"/ko/microservices/datastore/"},{"content":"GS2-Deploy는 GS2의 각 마이크로서비스의 네임스페이스나 마스터 데이터를 코드로 관리하고, 선언적으로 프로비저닝하기 위한 기능을 제공합니다. AWS의 CloudFormation과 유사한 사상으로 설계되어 있으며, 템플릿 파일에 기술한 리소스 정의를 바탕으로 여러 마이크로서비스에 걸친 환경 구축·갱신·삭제를 하나의 단위(스택)로 다룰 수 있습니다. 게임 개발에서는 마스터 데이터 조정이나 네임스페이스 구성 변경이 빈번하게 발생합니다. GS2-Deploy를 활용함으로써 이러한 변경 사항을 Git으로 관리하고, GitHub 등의 저장소와 연동한 CI/CD 파이프라인에서 자동으로 배포하는 운영이 가능해집니다. 스택 (Stack) 스택은 GS2의 리소스를 묶어서 관리하는 단위입니다. 스택은 YAML 형식으로 기술된 템플릿을 바탕으로 생성되며, 템플릿에 기술된 리소스 정의에 따라 네임스페이스나 마스터 데이터 등을 자동으로 생성·갱신·삭제합니다. 하나의 스택에는 여러 마이크로서비스에 걸친 리소스를 포함할 수 있으며, 게임을 구성하는 일련의 설정을 하나로 묶어서 다룰 수 있습니다. graph LR Template[\"템플릿(YAML)\"] --\u003e Stack[\"스택\"] Stack --\u003e R1[\"GS2-Account 네임스페이스\"] Stack --\u003e R2[\"GS2-Inventory 마스터 데이터\"] Stack --\u003e R3[\"GS2-Mission 마스터 데이터\"] Stack --\u003e R4[\"GS2-Showcase 마스터 데이터\"] 스택은 내부적으로 다음과 같은 상태를 가집니다. CREATE_PROCESSING : 생성 처리 중 CREATE_COMPLETE : 생성이 완료되어 리소스를 이용 가능 UPDATE_PROCESSING : 갱신 처리 중 UPDATE_COMPLETE : 갱신 완료 ROLLBACK_PROCESSING : 실패 시 롤백 처리 중 ROLLBACK_COMPLETE : 롤백 완료 DELETE_PROCESSING : 삭제 처리 중 DELETE_COMPLETE : 삭제 완료 스택 갱신 도중 실패한 경우에는 자동으로 변경 전 상태로 되돌리는 《롤백》 처리가 수행됩니다. 템플릿 템플릿은 YAML 형식으로 기술합니다. 기술하는 섹션은 다음과 같습니다. GS2TemplateFormatVersion : 템플릿의 포맷 버전 Description : 스택 설명 Resources : 생성할 리소스의 정의 Outputs : 스택 생성 후 다른 시스템에서 참조할 수 있는 값의 정의 다음은 템플릿 기술 예시입니다. GS2TemplateFormatVersion: \"2019-05-01\" Description: | GS2-Account namespace Resources: Namespace: Type: GS2::Account::Namespace Properties: Name: namespace-0001 Description: anonymous account ChangePasswordIfTakeOver: true Outputs: NamespaceId: !GetAttr Namespace.Item.NamespaceId Type 에는 생성 대상이 되는 GS2 리소스의 종류를, Properties 에는 각 리소스 고유의 설정값을 지정합니다. !GetAttr 함수를 사용하면 다른 리소스의 출력값을 참조하면서 의존 관계가 있는 리소스를 연쇄적으로 구축할 수 있습니다. 리소스 (Resource) 스택 내에 생성되는 개별 GS2 리소스를 《리소스》라고 부릅니다. 리소스에는 다음과 같은 정보가 보관됩니다. type : 리소스의 종류 ( GS2::Account::Namespace 등) name : 템플릿 내에서 부여된 논리 이름 request : 리소스 생성 시 GS2 API로 전송된 요청 내용 response : GS2 API로부터의 응답 내용 rollbackContext : 롤백 실행 시 사용되는 정보 스택을 참조함으로써 스택에 포함된 모든 리소스의 생성 상황을 목록으로 확인할 수 있습니다. 출력 (Output) 템플릿의 Outputs 섹션에서 선언된 값은 스택 생성 완료 후 다른 곳에서 참조할 수 있는 출력값으로 저장됩니다. 출력은 외부 시스템 연동이나 다른 스택에서의 값 참조, 운영 도구가 GS2 리소스의 GRN을 취득하는 용도 등에 이용할 수 있습니다. 이벤트 (Event) 스택의 생성·갱신·삭제 처리 중에 발생하는 개별 작업은 《이벤트》로 기록됩니다. 스택 처리가 실패한 경우에는 이벤트 이력을 확인함으로써 어떤 리소스의 어느 단계에서 실패했는지 특정할 수 있습니다. GitHub 연동 템플릿 파일은 GS2 관리 콘솔에서 직접 업로드하는 방법 외에, GitHub 저장소와 연동하여 가져오는 것도 가능합니다. GitHub 연동을 이용하면 다음과 같은 운영이 가능해집니다. 마스터 데이터 설정을 Pull Request 기반으로 리뷰·병합하는 워크플로우 main 브랜치로의 병합을 트리거로 CI에서 GS2-Deploy를 호출하여 리소스를 갱신하는 파이프라인 환경별(개발·스테이징·프로덕션)로 서로 다른 브랜치·스택을 할당하는 다중 환경 운영 GitHub에서의 템플릿 취득에는 GitHub API의 액세스 토큰을 사용합니다. 프라이빗 저장소에서도 이용 가능합니다. 마스터 데이터를 코드로 관리하기 GS2-Deploy의 주요 유스케이스 중 하나는 각 마이크로서비스의 마스터 데이터를 GS2-Deploy의 템플릿을 통해 등록하는 것입니다. 네임스페이스 정의와 같은 템플릿 내에 마스터 데이터의 내용을 기술해 두면, 네임스페이스 생성부터 마스터 데이터 등록까지를 하나의 스택으로 일괄 관리할 수 있습니다. 이를 통해 마스터 데이터의 변경 이력을 Git으로 추적할 수 있으며, 과거 버전으로의 롤백이나 리뷰 전 변경 내용의 사전 확인 등도 용이해집니다. 조작 대상에 대하여 GS2-Deploy는 프로젝트 구축을 담당하는 관리 API이므로, 원칙적으로 게임 엔진 측 클라이언트(Unity / Unreal Engine / Godot 등)에서 호출하는 서비스가 아닙니다. 실제 운영에서는 관리 콘솔을 통한 조작과 CI/CD 파이프라인에서 GS2 SDK를 통해 조작하는 워크플로우가 중심이 됩니다. 구현 예제 GS2-Deploy는 관리 API 중심의 마이크로서비스입니다. 게임 엔진용 SDK(Unity / Unreal Engine / Godot)에는 전용 Domain 클래스가 제공되지 않습니다. 따라서 게임 클라이언트에서 직접 호출하는 것이 아니라, 다음 중 하나의 수단으로 조작하는 것을 권장합니다. 관리 콘솔 GS2 CLI 각종 언어용 일반 SDK (C# / Go / Python / TypeScript / PHP / Java) GS2-Deploy 자체의 템플릿에 의한 선언적 관리 각 SDK의 상세 내용은 해당하는 레퍼런스 페이지를 참조해 주십시오. 상세 레퍼런스 GS2-Deploy API 레퍼런스","lang":"ko","section":"microservices","summary":"마스터 데이터 CI/CD 기능\n","title":"GS2-Deploy","url":"/ko/microservices/deploy/"},{"content":"GS2-Deploy에서 스택을 생성할 때 사용하는 템플릿 파일의 서식 사양입니다. JSON 형식 또는 YAML 형식으로 작성할 수 있습니다. 섹션 종류 템플릿은 다음과 같은 섹션으로 구성됩니다. 섹션 필수 설명 GS2TemplateFormatVersion  템플릿의 형식을 지정합니다. 현재는 2019-05-01만 정의할 수 있습니다. Description 템플릿에 관한 설명 등을 기입할 수 있습니다. Globals Alias 속성(문자열 치환 지정)을 정의하는 섹션입니다. Resources  스택에 포함할 GS2 각 서비스의 리소스를 정의합니다. Outputs 관리 콘솔에 표시할 출력값을 정의합니다. 템플릿 예시: YAML GS2TemplateFormatVersion : \"2019-05-01\" Description : GS2-Account initialize template Version 2021-12-03 Globals : Alias : AccountNamespaceName : game-0001 KeyNamespaceAccountAuthentication : account-encryption-key-namespace KeyAccountAuthentication : account-encryption-key GatewayNamespaceName : gateway-0001 Resources : GatewayNamespace : Type : GS2::Gateway::Namespace Properties : Name : ${GatewayNamespaceName} KeyNamespaceAccountAuthentication : Type : GS2::Key::Namespace Properties : Name : ${KeyNamespaceAccountAuthentication} KeyAccountAuthentication : Type : GS2::Key::Key Properties : NamespaceName : ${KeyNamespaceAccountAuthentication} Name : ${KeyAccountAuthentication} DependsOn : - KeyNamespaceAccountAuthentication AccountNamespace : Type : GS2::Account::Namespace Properties : Name : ${AccountNamespaceName} Outputs : AccountNamespaceName : ! GetAttr AccountNamespace.Item.Name KeyAccountAuthenticationKeyId : ! GetAttr KeyAccountAuthentication.Item.KeyId GatewayNamespaceName : ! GetAttr GatewayNamespace.Item.Name Globals Alias 지정한 문자열로 Resources 섹션, Outputs 섹션에 있는 문자열을 치환합니다. 좌변의 문자열을 ${...} 와 같이 ${}로 감싼 부분을, 우변의 문자열로 치환합니다. 치환 지정 예시: ${AccountNamespaceName} YAML Globals : Alias : AccountNamespaceName : game-0001 Resources 생성할 리소스의 정의를 수행합니다. Type 속성, Properties 속성을 가지며, 필요한 경우 DependsOn 속성을 가질 수 있습니다. YAML Resources : KeyNamespaceAccountAuthentication : # 리소스 정의 이름 Type : GS2::Key::Namespace # 리소스 지정 Properties : Name : ${KeyNamespaceAccountAuthentication} KeyAccountAuthentication : # 리소스 정의 이름 Type : GS2::Key::Key # 리소스 지정 Properties : NamespaceName : ${KeyNamespaceAccountAuthentication} Name : ${KeyAccountAuthentication} DependsOn : # 의존하는 리소스 정의 이름 지정 - KeyNamespaceAccountAuthentication # KeyNamespaceAccountAuthentication 생성에 의존 AccountNamespace : # 리소스 정의 이름 Type : GS2::Account::Namespace # 리소스 지정 Properties : Name : ${AccountNamespaceName} Type 서비스에 대해 생성을 수행할 리소스의 지정입니다. 각 서비스의 GS2-Deploy/CDK 레퍼런스 페이지에 있는 엔티티 이름을 지정합니다. 예: Type: GS2::Account::Namespace Properties 리소스를 생성할 때 프로퍼티 값에 부여할 값을 지정합니다. DependsOn 리소스가 다른 리소스에 이어서 생성되도록, 의존하고 있는 리소스의 이름을 지정합니다. Outputs 값을 보유하여, 이후 관리 콘솔 등을 통해 값을 확인할 수 있도록 하는 출력값을 정의합니다. YAML Outputs : AccountNamespaceName : ! GetAttr AccountNamespace.Item.Name KeyAccountAuthenticationKeyId : ! GetAttr KeyAccountAuthentication.Item.KeyId GatewayNamespaceName : ! GetAttr GatewayNamespace.Item.Name 함수 GS2-Deploy 템플릿 내에서는 함수를 사용할 수 있습니다. !GetAttr !GetAttr 태그를 사용하면 각 리소스의 생성 결과 프로퍼티 값을 가져올 수 있습니다. YAML AccountNamespace : Type : GS2::Account::Namespace Properties : Name : ${AccountNamespaceName} Outputs : AccountNamespaceName : ! GetAttr AccountNamespace.Item.Name 이 예시에서는 AccountNamespace 에서 GS2::Account::Namespace 를 지정하고 있으므로, GS2-Account에서 Namespace 가 생성됩니다. 그 결과가 AccountNamespace 에 저장되며, AccountNamespace.Item 에 Namespace 모델이 들어 있습니다. !GetAttr AccountNamespace.Item.Name 으로 네임스페이스 이름을 가져올 수 있습니다. 또한, !GetAttr 태그에는 예약어로 다음이 할당되어 있어, 값을 가져올 수 있습니다. 키 값 타입 설명 Gs2::Region string 리전 종류 Gs2::OwnerId string 오너ID !Join !Join 태그는 뒤에 오는 배열의 문자열을 연결합니다. 구분 기호(딜리미터)를 지정할 수 있습니다. 형식: ！Join [ 구분 기호 지정, [연결할 문자열 목록] ] YAML QueueNamespace : Type : GS2::JobQueue::Namespace Properties : Name : ${QueueNamespaceName} PushNotification : GatewayNamespaceId : ! Join - ':' - - 'grn' - 'gs2' - ! GetAttr Gs2::Region - ! GetAttr Gs2::OwnerId - 'gateway' - ${GatewayNamespaceName}","lang":"ko","section":"articles","summary":"GS2-Deploy의 템플릿 파일 사양에 관한 정보\n","title":"GS2-Deploy 템플릿 파일 사양","url":"/ko/articles/tech/deploy/"},{"content":"GS2-Dictionary 에서는 게임 내에서 입수한 아이템이나 캐릭터의 도감 기능을 구현합니다. 기본적으로 GS2-Inventory 의 단순화된 구현 버전이라고 생각하시면 되며, 입수 완료/미입수라는 2값의 소지 상태를 관리할 수 있습니다. 도감 이외의 용도로도 사용할 수 있습니다. 예를 들어 아바타 파츠의 소지 상태가 좋은 예입니다. 아바타 파츠를 가지고 있는지 여부는 파츠별로 2값으로 상태를 관리할 수 있으면 충분하므로 GS2-Dictionary 에 적합합니다. 그 외에도 완료된 튜토리얼 단계 관리, 해금된 컷신 관리, 해금된 BGM 목록 등 2값 상태로 표현할 수 있는 요소 전반에 활용할 수 있습니다. graph TD Boss[\"보스를 토벌\"] -- 보상으로 엔트리 추가 --\u003e Dictionary[\"GS2-Dictionary 에 기록\"] Shop[\"상점에서 구매\"] -- 보상으로 엔트리 추가 --\u003e Dictionary Dictionary --\u003e Browse[\"플레이어가 도감을 열람\"] Dictionary -- 소지 증명 서명 --\u003e Formation[\"GS2-Formation 등에서 이용\"] GS2-Inventory 와의 차이점 스택 개념의 유무 GS2-Inventory 는 동일한 아이템을 여러 개 소지할 때 스택이라는 개념이 있습니다. 이는 포션을 최대 99개까지 스택할 수 있고, 99개를 초과하면 두 번째 스택을 생성하는 것과 같은 사양입니다. 이 사양이 있기 때문에 GS2-Inventory 에서는 “포션의 소지 수량을 조회한다\"는 API 의 반환값이 리스트 형태입니다. 이는 포션이 여러 스택으로 존재할 가능성이 있기 때문입니다. 이 사양은 포션과 같은 데이터를 관리하는 데는 편리하지만, 도감과 같은 단순한 소지 상태를 관리하기에는 과도한 사양이며, 리스트를 다루면 코드량도 늘어납니다. 입수 처리로 여러 엔트리를 등록 가능 GS2-Inventory 는 포션 입수와 엘릭서 입수를 각각 별도의 API 요청으로 처리해야 합니다. GS2-Dictionary 는 한 번의 API 요청으로 최대 100개의 엔트리를 등록할 수 있습니다. 이를 통해 퀘스트 클리어 보상으로 “쓰러뜨린 몬스터 전종을 한꺼번에 도감에 등록\"과 같은 처리를 한 번의 요청으로 효율적으로 수행할 수 있습니다. 엔트리의 검증과 삭제 GS2-Dictionary 에서는 한 번 기록한 엔트리를 삭제하거나, 특정 엔트리를 입수했는지(또는 미입수인지) 검증할 수 있습니다. 기간 한정 이벤트 아이템의 소지 상태를 초기화하거나, 특정 아이템을 입수한 경우에만 퀘스트를 시작할 수 있도록 제한하는 등의 운영이 가능합니다. 기능 비교 항목 GS2-Dictionary GS2-Inventory 상태 관리 소지/미소지의 2값 수량·스택 관리 1회 요청당 등록 수 최대 100건 1건씩 즐겨찾기 기능 있음 없음 소지 증명 서명 있음 있음(ItemSet 단위) 주요 용도 도감, 아바타 파츠, 해금 상태 일반적인 아이템 소지 마스터 데이터(EntryModel) 도감에 등록 가능한 엔트리를 마스터 데이터로 정의합니다. EntryModel 의 주요 설정 항목은 다음과 같습니다. 항목 설명 name 엔트리 이름(플레이어별 기록 키) metadata 클라이언트에서 이용하는 임의의 메타데이터(표시 이름, 이미지 참조, 희귀도 등) 마스터 데이터의 JSON 예: { \"version\": \"2020-04-30\", \"entryModels\": [ { \"name\": \"monster-0001\", \"metadata\": \"{\\\"displayName\\\":\\\"슬라임\\\",\\\"rarity\\\":1}\" }, { \"name\": \"monster-0002\", \"metadata\": \"{\\\"displayName\\\":\\\"고블린\\\",\\\"rarity\\\":2}\" } ] } 마스터 데이터 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub 에서 데이터를 반영하거나 GS2-Deploy 를 사용하여 CI 에서 등록하는 워크플로우를 구성할 수 있습니다. 즐겨찾기 기능 GS2-Dictionary 에서는 기록된 엔트리에 “즐겨찾기\"를 지정할 수 있습니다. AddLikes 나 DeleteLikes 로 즐겨찾기 목록을 관리하고, Likes API 로 목록 조회나 변경 알림 구독이 가능합니다. 즐겨찾기 정보를 활용하면 도감 화면의 필터링이나 UI 에서의 우선 표시를 구현할 수 있습니다. 즐겨찾기 엔트리는 내부적으로 LikeToc 라는 단위로 정리되어 저장되므로, 한 사용자가 대량의 즐겨찾기를 등록하더라도 효율적으로 조회할 수 있습니다. 소지 증명 서명 GS2-Dictionary 는 엔트리의 소지 상태에 대해 서명된 데이터를 발급할 수 있습니다. 다른 GS2 마이크로서비스와 연동할 때, 서버 간 통신을 거치지 않고도 “실제로 해당 엔트리를 소지하고 있음\"을 보증할 수 있습니다. sequenceDiagram participant Player participant Dictionary as GS2-Dictionary participant Formation as GS2-Formation Player -\u003e\u003e Dictionary: GetEntryWithSignature(entry, keyId) Dictionary --\u003e\u003e Player: Body + Signature Player -\u003e\u003e Formation: SetForm(itemId, body, signature) Formation -\u003e\u003e Formation: 서명 검증 Formation --\u003e\u003e Player: 성공 검증하는 측의 서비스는 body 안에 포함된 정보(엔트리 이름이나 사용자ID)를 signature 를 사용하여 검증할 수 있습니다. 스크립트 트리거 네임스페이스에 entryScript 나 duplicateEntryScript 를 설정하면 엔트리 등록 전후나 중복 등록 시에 커스텀 스크립트를 호출할 수 있습니다. 스크립트는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기에서는 GS2-Script 나 Amazon EventBridge 를 이용한 외부 연동도 가능합니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. entryScript (완료 알림: entryDone ): 엔트리 등록 전후 duplicateEntryScript : 이미 등록된 엔트리를 재등록했을 때 duplicateEntryScript 를 이용하면, 예를 들어 “이미 도감에 등록된 희귀 몬스터를 다시 드롭한 경우에는 대신 다른 통화를 지급한다\"와 같은 전환 처리를 구현할 수 있습니다. 트랜잭션 액션 GS2-Dictionary 에서는 다음과 같은 트랜잭션 액션을 제공합니다. 검증 액션: 엔트리 소지 상황 검증 소비 액션: 엔트리 삭제 입수 액션: 엔트리 추가 “엔트리 소지 상황 검증\"을 검증 액션으로 이용하면, 특정 몬스터를 토벌 완료한(도감에 등록된) 플레이어만 도전할 수 있는 퀘스트나, 특정 아이템을 한 번이라도 입수한 적이 있는 플레이어만 구매할 수 있는 상품과 같은 제한을 설정할 수 있습니다. 도감에 기록하는 방법 도감에 대한 기록( Entry 추가)은 게임 엔진용 SDK 에서 직접 호출할 수 없습니다. GS2 의 보안 모델상, 클라이언트에서 일방적으로 변경하는 것을 금지하고 서버가 신뢰하는 경로에서만 추가되도록 설계되어 있기 때문입니다. 구체적으로는 다음과 같은 형태로 트랜잭션 액션에 포함시켜 사용합니다. GS2-Quest 의 퀘스트 클리어 보상으로 “쓰러뜨린 몬스터를 도감에 등록\"하는 입수 액션을 설정 GS2-Showcase 에서 구매한 아이템의 보상으로 “해당하는 엔트리를 도감에 등록\"하는 입수 액션을 설정 GS2-Mission 의 미션 달성 보상으로 “특정 엔트리를 등록\"하는 입수 액션을 설정 구현 예제 도감에 기록 가능한 마스터 데이터 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). EntryModelsAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e EntryModels ( ); TArray Gs2 :: UE5 :: Dictionary :: Model :: FEzEntryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . dictionary . namespace_ ( \"namespace-0001\" ) . entry_models ( ) var async_result = await iterator . load () if async_result . error != null : # 에러 처리 push_error ( str ( async_result . error )) return var items = async_result . result 도감에 기록된 엔트리 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). EntriesAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Entries ( ); TArray Gs2 :: UE5 :: Dictionary :: Model :: FEzEntryPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . entries ( ) var async_result = await iterator . load () if async_result . error != null : # 에러 처리 push_error ( str ( async_result . error )) return var items = async_result . result 특정 엔트리 조회 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Entry ( entryModelName : \"entry-0001\" ). ModelAsync (); var acquiredAt = item . AcquiredAt ; const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Entry ( \"entry-0001\" // entryModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); const auto AcquiredAt = Result -\u003e GetAcquiredAt (); var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . entry ( \"entry-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 소지 증명 서명 조회 GS2 내의 다른 마이크로서비스와 연동할 때, 실제로 GS2-Dictionary 에 엔트리가 기록되어 있는지 보증된 데이터를 요구받는 경우가 있습니다. 예를 들어, GS2-Dictionary 로 아바타 파츠의 소지 상태를 관리하고, GS2-Formation 으로 아바타 파츠의 편성 상태를 관리한다고 가정해 봅시다. GS2-Formation 에 헤어스타일을 설정할 때 “hair-0001\"이라는 파츠를 설정하도록 API 요청을 보내게 되는데, GS2-Formation 은 소지 증명 서명과 함께 “hair-0001\"을 지정하도록 요구합니다. 이를 통해 GS2-Formation 은 뒤에서 GS2-Dictionary 와 통신하여 실제로 소지하고 있는 파츠인지 판단할 필요가 없어집니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Entry ( entryModelName : \"entry-0001\" ). GetEntryWithSignatureAsync ( keyId : \"grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001\" ); var body = result . Body ; var signature = result . Signature ; const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Entry ( \"entry-0001\" // entryModelName ); const auto Future = Domain -\u003e GetEntryWithSignature ( \"grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . entry ( \"entry-0001\" ) var async_result = await domain . get_entry_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 즐겨찾기 엔트리 등록 Game Engine: Unity Unreal Engine Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . AddLikesAsync ( entryModelNames : new List string \u003e { \"entry-0001\" , } ); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto Future = Domain -\u003e AddLikes ( { \"entry-0001\" , } ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . add_likes ( [ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ] # entry_model_names ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 즐겨찾기 엔트리 목록 조회 Game Engine: Unity Unreal Engine Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . LikesAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Likes ( ); TArray Gs2 :: UE5 :: Dictionary :: Model :: FEzLikePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . likes ( ) var async_result = await iterator . load () if async_result . error != null : # 에러 처리 push_error ( str ( async_result . error )) return var items = async_result . result 즐겨찾기 엔트리 삭제 Game Engine: Unity Unreal Engine Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); await domain . DeleteLikesAsync ( entryModelNames : new List string \u003e { \"entry-0001\" , } ); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto Future = Domain -\u003e DeleteLikes ( { \"entry-0001\" , } ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . delete_likes ( [ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ] # entry_model_names ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-Dictionary API 레퍼런스","lang":"ko","section":"microservices","summary":"도감 기능\n","title":"GS2-Dictionary","url":"/ko/microservices/dictionary/"},{"content":"GS2-Distributor 는 GS2 의 각 마이크로서비스를 넘나드는 트랜잭션 처리를 실현하기 위한 핵심 서비스입니다. 플레이어의 “아이템을 소비하여 보상을 얻는다”, “스태미나를 소비하여 퀘스트를 시작한다” 와 같은, 여러 마이크로서비스를 넘나드는 일련의 처리를 안전하게 실행하기 위한 기반을 제공합니다. GS2 에서는 플레이어에게 불이익이 되는 조작을 《소비 액션》, 이익이 되는 조작을 《입수 액션》이라고 부릅니다. GS2-Distributor 는 이러한 액션들을 모은 《트랜잭션》을 받아, 적절한 마이크로서비스로 전달·실행함으로써 게임 사이클을 구성하는 모든 처리를 일관된 형태로 다룰 수 있게 합니다. 트랜잭션의 구조에 대한 자세한 내용은 트랜잭션 을 참조하세요. 트랜잭션을 구성하는 액션 GS2 의 트랜잭션은 다음의 3가지 종류의 액션으로 구성됩니다. graph LR Issue[\"트랜잭션 발행 (스토어·퀘스트·미션 등)\"] --\u003e Verify[\"검증 액션\"] Verify --\u003e Consume[\"소비 액션\"] Consume --\u003e Acquire[\"입수 액션\"] Acquire --\u003e Done[\"완료\"] 검증 액션 (VerifyAction) 트랜잭션 실행을 시작하기 전에, 소비 액션이나 입수 액션을 실행할 수 있는 상태인지를 사전에 체크하는 액션입니다. 예를 들어 “특정 아이템을 소지하고 있는지”, “랭크가 일정 값 이상인지”, “특정 퀘스트를 클리어했는지” 와 같은 조건을, 소비가 발생하기 전에 확인할 수 있습니다. 검증에 실패한 경우, 소비 액션·입수 액션은 실행되지 않습니다. 소비 액션 (ConsumeAction) 플레이어에게 불이익이 되는 처리를 나타내는 액션입니다. 아이템 소비, 통화 소비, 스태미나 소비, 횟수 제한 카운터 증가 등이 여기에 해당합니다. 소비 액션이 실행되면, 각 마이크로서비스는 “실행 완료” 를 증명하는 서명을 발행합니다. 이 서명은 다음 입수 액션 실행 시에 검증되며, 소비 액션을 모두 통과하지 않으면 입수 액션은 실행할 수 없는 구조입니다. 입수 액션 (AcquireAction) 플레이어에게 이익이 되는 처리를 나타내는 액션입니다. 아이템 입수, 통화 입수, 경험치 입수, 퀘스트 시작 처리 등이 여기에 해당합니다. 입수 액션은 관련된 모든 소비 액션이 정상적으로 종료했음을 나타내는 서명이 갖춰졌을 때에만 실행됩니다. 트랜잭션의 구조 GS2 의 트랜잭션은 “여러 개의 소비 액션 + 1개의 입수 액션” 이라는 구조로 발행됩니다. 트랜잭션은 GS2-Showcase / GS2-Quest / GS2-Mission 등 각 마이크로서비스의 트랜잭션 발행 API 응답으로 받으며, 게임 클라이언트는 취득한 트랜잭션을 GS2-Distributor 를 통해 실행합니다. 또한 GS2 SDK 에는 트랜잭션 실행을 자동화하는 구조가 내장되어 있어, 대부분의 경우 게임 측에서 트랜잭션을 의식적으로 실행할 필요는 없습니다. 발행 API 결과에 포함된 TransactionDomain 의 WaitAsync 를 호출하는 것만으로, 소비 액션·입수 액션이 올바른 순서로 실행되어 결과를 취득할 수 있습니다. DistributorModel DistributorModel 은 네임스페이스 내에 등록하는 리소스 배포 설정 단위입니다. DistributorModel 에는 다음을 설정할 수 있습니다. inboxNamespaceId : 배포물이 오버플로우된 경우의 자동 전송처가 되는 GS2-Inbox 의 네임스페이스 GRN whiteListTargetIds : 트랜잭션을 통해 실행을 허용하는 액션의 화이트리스트 여러 개의 DistributorModel 을 준비함으로써, 스토어용·퀘스트용·미션용 등 용도별로 다른 전송 규칙을 나누어 사용하는 것이 가능합니다. 배포물의 오버플로우 처리 입수 액션을 실행할 때, 플레이어의 보유 수 상한을 초과하는 등의 이유로 “그 자리에서 받을 수 없는” 상태가 되는 경우가 있습니다. 이러한 경우에 대비하여 DistributorModel 의 inboxNamespaceId 를 설정해 두면, 받지 못한 배포물을 GS2-Inbox 에 메시지로 자동 전송하여, 플레이어가 나중에 받을 수 있도록 대피시킬 수 있습니다. 이를 통해 보상을 받지 못하고 소실되는 상황을 방지할 수 있습니다. graph TD Acquire[\"입수 액션 실행\"] --\u003e Check{\"플레이어에게 부여 가능?\"} Check -- Yes --\u003e Granted[\"플레이어에게 부여\"] Check -- No (상한 초과 등) --\u003e Inbox[\"GS2-Inbox 로 전송\"] Inbox --\u003e Receive[\"플레이어는 나중에 수신\"] 배치 리퀘스트 GS2-Distributor 는 여러 개의 GS2 API 호출을 하나의 리퀘스트로 모아 실행하는 《배치 리퀘스트》 기능을 제공합니다. 여러 서비스에 대한 요청을 한 번의 API 호출로 완료할 수 있으므로, 네트워크 왕복 횟수를 줄여 응답 시간을 개선할 수 있습니다. 게임 시작 시 여러 마이크로서비스로부터 초기 데이터를 한꺼번에 취득하는 경우 등에 특히 유용합니다. 배치 리퀘스트에 포함되는 각 리퀘스트는 독립적으로 처리되며, 각각에 대한 응답이 반환됩니다. 마스터 데이터 관리 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. DistributorModel : 트랜잭션의 전송 규칙과 오버플로우 시 전송처 다음은 마스터 데이터의 JSON 예입니다. { \"version\": \"2019-09-09\", \"distributorModels\": [ { \"name\": \"default\", \"metadata\": \"default distributor\", \"inboxNamespaceId\": \"grn:gs2:{region}:{ownerId}:inbox:namespace-0001\" } ] } 마스터 데이터의 등록은 매니지먼트 콘솔에서 등록하는 것 외에도, GitHub 에서 데이터를 반영하거나, GS2-Deploy 를 사용해 CI 에서 등록하는 등의 워크플로우를 구성하는 것이 가능합니다. 트랜잭션 액션 GS2-Distributor 는 다른 서비스에서 발행된 트랜잭션을 실행하는 쪽의 서비스이며, 자신이 소비 액션·입수 액션을 발행하지는 않습니다. 구현 예제 트랜잭션 실행 GS2 SDK 에서는 각 서비스의 트랜잭션 발행 API 응답( TransactionDomain )에 대해 WaitAsync 를 호출함으로써 자동으로 트랜잭션이 GS2-Distributor 를 통해 실행됩니다. 아래는 GS2-Mission 의 보상 수취 처리를 예로 든 트랜잭션 실행 예입니다. Game Engine: Unity Unreal Engine Godot var transaction = await gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"group-0001\" ). ReceiveRewardsAsync ( missionTaskName : \"task-0001\" ); await transaction . WaitAsync (); const auto Future = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Complete ( \"group-0001\" // missionGroupName ) -\u003e ReceiveRewards ( \"task-0001\" // missionTaskName ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var transaction = await ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"missionGroup-0001\" ) . receive_rewards ( \"missionTask-0001\" ) if transaction . error != null : push_error ( str ( transaction . error )) return var async_result = await transaction . result . wait () if async_result . error != null : push_error ( str ( async_result . error )) return 배치 리퀘스트 실행 여러 개의 GS2 API 호출을 한 번의 통신으로 모아서 실행합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). BatchExecuteApiAsync ( requestPayloads : new [] { new Gs2 . Unity . Gs2Distributor . Model . EzBatchRequestPayload { RequestId = \"1\" , Service = \"inventory\" , MethodName = \"describe_inventories\" , Parameter = \"{\\\"namespaceName\\\":\\\"namespace-0001\\\"}\" , }, new Gs2 . Unity . Gs2Distributor . Model . EzBatchRequestPayload { RequestId = \"2\" , Service = \"experience\" , MethodName = \"describe_statuses\" , Parameter = \"{\\\"namespaceName\\\":\\\"namespace-0001\\\"}\" , }, } ); const auto Future = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BatchExecuteApi ( [] { const auto v = MakeShared TArray Gs2 :: UE5 :: Distributor :: Model :: FEzBatchRequestPayloadPtr \u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Distributor :: Model :: FEzBatchRequestPayload \u003e () -\u003e WithRequestId ( TOptional FString \u003e ( \"1\" )) -\u003e WithService ( TOptional FString \u003e ( \"inventory\" )) -\u003e WithMethodName ( TOptional FString \u003e ( \"describe_inventories\" )) -\u003e WithParameter ( TOptional FString \u003e ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" }\" ))); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Distributor :: Model :: FEzBatchRequestPayload \u003e () -\u003e WithRequestId ( TOptional FString \u003e ( \"2\" )) -\u003e WithService ( TOptional FString \u003e ( \"experience\" )) -\u003e WithMethodName ( TOptional FString \u003e ( \"describe_statuses\" )) -\u003e WithParameter ( TOptional FString \u003e ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" }\" ))); return v ; }() ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . distributor . namespace_ ( null ) var async_result = await domain . batch_execute_api ( [ Gs2DistributorEzBatchRequestPayload . new () . with_service ( \"inventory\" ) . with_method_name ( \"describeSimpleItems\" ) . with_parameter ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" accessToken \\\" : \\\" accessToken-0001 \\\" }\" ), Gs2DistributorEzBatchRequestPayload . new () . with_service ( \"exchange\" ) . with_method_name ( \"describeRateModels\" ) . with_parameter ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" }\" ), ] # request_payloads ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 마스터 데이터 고정 (Freeze) 트랜잭션이 발행된 후에 마스터 데이터가 업데이트되면, 발행된 트랜잭션과 현재 마스터 데이터 사이에 모순이 생길 가능성이 있습니다. GS2-Distributor 의 FreezeMasterData 를 호출함으로써, 로그인 중인 플레이어에 대해 사용할 마스터 데이터의 버전을 고정하여, 게임 플레이 중 마스터 데이터 전환으로 인한 불일치를 회피할 수 있습니다. Game Engine: Unity Unreal Engine Godot await gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). FreezeMasterDataAsync ( ); // Unreal Engine 용 SDK 에는 FreezeMasterData 가 제공되지 않습니다. // 매니지먼트 콘솔 / GS2 CLI / 각종 언어용 일반 SDK (C#/Go/Python/TypeScript/PHP/Java) 를 이용해 주세요. var async_result = await Gs2DistributorClient . new ( connection ) . freeze_master_data ( game_session , \"namespace-0001\" ) if async_result . error != null : push_error ( str ( async_result . error )) return 상세 레퍼런스 GS2-Distributor API 레퍼런스","lang":"ko","section":"microservices","summary":"트랜잭션 처리 기능\n","title":"GS2-Distributor","url":"/ko/microservices/distributor/"},{"content":"장비나 캐릭터에 고유한 랜덤 파라미터를 부여하는 기능을 구현합니다. RPG에서의 무기 추가 스탯, 가챠로 입수한 카드에 부여되는 개체값, 핵앤슬래시 계열에서의 장비 추가 효과 등, “같은 아이템이라도 개체마다 성능이 다르다\"는 표현을 구현할 때 활용할 수 있습니다. 랜덤 파라미터에는 2가지 종류를 준비하고 있습니다. 밸런스 파라미터 레어리티 파라미터 graph TD Item[\"장비·캐릭터 등 (propertyId 로 식별)\"] --\u003e Choose{파라미터 종류} Choose -- 총량을 분배 --\u003e Balance[\"밸런스 파라미터 예: 공격력60/방어력40\"] Choose -- 확률로 복수 부여 --\u003e Rarity[\"레어리티 파라미터 예: 크리티컬율+5%, HP+100\"] Balance --\u003e ReDraw1[\"재추첨 / 값 직접 설정\"] Rarity --\u003e ReDraw2[\"재추첨 / 추가 / 값 직접 설정\"] 랜덤 파라미터는 “대상 아이템의 식별자\"가 되는 propertyId 를 키로 하여 관리됩니다. propertyId 에는 GS2-Inventory의 아이템 인스턴스ID나 GS2-Formation의 폼 식별자 등을 지정함으로써, 장비 개체마다 파라미터를 연결할 수 있습니다. 밸런스 파라미터 밸런스 파라미터는 준비된 여러 파라미터에 정해진 총량을 랜덤으로 분배합니다. 예를 들어 공격력과 방어력이라는 2개의 파라미터를 준비하고 총량을 100으로 설정한 경우, 공격력이 60으로 추첨되면 방어력은 40이 됩니다. 마스터 항목 설명 name 밸런스 파라미터 모델명 totalValue 파라미터 값의 합계 총량 initialValueStrategy 초기값 결정 방법( average : 평균값 / random : 랜덤) parameters 분배 대상이 되는 파라미터 목록 재추첨 밸런스 파라미터는 재추첨이 가능합니다. 재추첨을 수행할 때 일부 파라미터의 값을 고정할 수 있습니다. 파라미터를 일부 고정함으로써, 플레이어가 파라미터 최적화를 효율적으로 수행할 수 있는 수단을 제공할 수 있습니다. 초기값 밸런스 파라미터의 초기값은 랜덤 값으로 할지, 평균값으로 할지를 정할 수 있습니다. 값 직접 설정 밸런스 파라미터는 관리 화면이나 API(트랜잭션 액션)를 통해 추첨을 거치지 않고 임의의 값을 직접 설정하는 것도 가능합니다. 이를 통해 특정 이벤트 보상으로 고정된 스탯을 가진 장비를 배포하는 등의 운용이 가능해집니다. 레어리티 파라미터 레어리티 파라미터는 밸런스 파라미터처럼 일정한 파라미터에 값을 분배하는 것이 아니라, 장비나 스킬에 일정 확률로 추가 파라미터를 부여하는 경우에 사용할 수 있습니다. 마스터 데이터에는 먼저 파라미터를 부여할 개수의 추첨 확률을 설정합니다. 다음으로, 부여할 파라미터의 종류와 확률을 설정합니다. 이렇게 하면 확률에 기반하여 추가 파라미터를 부여할 수 있게 됩니다. 마스터 항목 설명 name 레어리티 파라미터 모델명 maximumParameterCount 하나의 propertyId에 부여할 수 있는 최대 파라미터 수 parameterCounts 부여할 개수와 그 가중치(가중치 기반 추첨) parameters 개별 파라미터와 부여 확률이 되는 가중치 각 파라미터( RarityParameterValueModel )에는 resourceName / resourceValue 를 설정할 수 있으며, 부여된 결과로서 어떤 리소스를 얼마나 참조하고 있는지를 표현할 수 있습니다. 재추첨 부여된 파라미터는 재추첨이 가능하며, 재추첨 시에는 부여된 파라미터의 종류만 변동하고 개수는 변하지 않습니다. 밸런스 파라미터와 마찬가지로, 재추첨하는 파라미터 중 일부 파라미터를 고정할 수 있습니다. 추가 레어리티 파라미터는 나중에 추가할 수 있습니다. 추가할 때는 이미 있는 파라미터는 변경하지 않고, 지정된 개수의 파라미터를 추가할 수 있습니다. 값 직접 설정 레어리티 파라미터는 관리 화면이나 API(트랜잭션 액션)를 통해 부여되어 있는 파라미터의 종류나 그 값을 직접 설정하는 것도 가능합니다. 이를 통해 밸런스 파라미터와 마찬가지로, 특정 성능이 보장된 아이템의 배포 등이 가능해집니다. 트랜잭션 액션 GS2-Enchant에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 이를 이용함으로써 퀘스트 보상이나 상점 구매 등을 통해 파라미터 조작을 수행할 수 있습니다. 검증 액션 액션 용도 Gs2Enchant:VerifyRarityParameterStatus 레어리티 파라미터의 소유 상태(보유하고 있음/있지 않음)나 개수를 검증합니다. verifyType 에 havent ／ have ／ count 를 지정하여 동작을 전환합니다. 입수 액션 액션 용도 Gs2Enchant:ReDrawBalanceParameterStatusByUserId 밸런스 파라미터를 재추첨합니다. 고정하고 싶은 파라미터명을 fixedParameterNames 에 지정할 수 있습니다. Gs2Enchant:SetBalanceParameterStatusByUserId 밸런스 파라미터를 추첨을 거치지 않고 직접 재작성합니다. Gs2Enchant:ReDrawRarityParameterStatusByUserId 레어리티 파라미터를 재추첨합니다. 고정하고 싶은 파라미터명을 지정할 수 있습니다. Gs2Enchant:AddRarityParameterStatusByUserId 기존 레어리티 파라미터를 남긴 채, 지정한 개수만큼 추가 추첨을 수행합니다. Gs2Enchant:SetRarityParameterStatusByUserId 레어리티 파라미터를 추첨을 거치지 않고 직접 재작성합니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 사용할 수 있는 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. BalanceParameterModel : 파라미터 분배 설정 RarityParameterModel : 부여 파라미터와 확률 설정 다음은 마스터 데이터 JSON의 예시입니다. { \"version\": \"2023-04-27\", \"balanceParameterModels\": [ { \"name\": \"balance-0001\", \"metadata\": \"weapon\", \"totalValue\": 100, \"initialValueStrategy\": \"average\", \"parameters\": [ { \"name\": \"attack\", \"metadata\": \"ATK\" }, { \"name\": \"defense\", \"metadata\": \"DEF\" } ] } ], \"rarityParameterModels\": [ { \"name\": \"rarity-0001\", \"metadata\": \"weapon\", \"maximumParameterCount\": 4, \"parameterCounts\": [ { \"count\": 1, \"weight\": 70 }, { \"count\": 2, \"weight\": 25 }, { \"count\": 3, \"weight\": 5 } ], \"parameters\": [ { \"name\": \"critical\", \"weight\": 50, \"resourceName\": \"critical\", \"resourceValue\": 5 }, { \"name\": \"hp\", \"weight\": 50, \"resourceName\": \"hp\", \"resourceValue\": 100 } ] } ] } 마스터 데이터 등록은 매니지먼트 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성하는 것도 가능합니다. 구현 예제 밸런스 파라미터 파라미터 초기화/취득 처음으로 파라미터 정보를 취득할 때 파라미터 추첨 처리가 생성됩니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BalanceParameterStatus ( parameterName : \"balance-0001\" , propertyId : \"property-0001\" ). ModelAsync (); const auto item = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BalanceParameterStatus ( \"balance-0001\" , // parameterName \"property-0001\" // propertyId ). Model (); var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . balance_parameter_status ( \"balance-0001\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 파라미터 값 참조 ModelAsync 로 취득한 EzBalanceParameterStatus 의 ParameterValues 에서 각 파라미터명과 현재 값을 취득할 수 있습니다. Game Engine: Unity Unreal Engine Godot foreach ( var parameterValue in item . ParameterValues ) { Debug . Log ( $\"{parameterValue.Name} = {parameterValue.Value}\" ); } for ( auto ParameterValue : * item -\u003e ParameterValues ) { UE_LOG ( LogTemp , Log , TEXT ( \"%s = %lld\" ), * ParameterValue -\u003e Name , ParameterValue -\u003e Value ); } for parameter_value in item . parameter_values : print ( parameter_value . name , \" = \" , parameter_value . value ) 파라미터 재추첨 재추첨은 게임 엔진용 SDK로는 처리할 수 없습니다. 게임 내에서는 GS2-Distributor를 경유하여 Gs2Enchant:ReDrawBalanceParameterStatusByUserId 등의 트랜잭션 액션을 실행함으로써 재추첨을 수행해 주시기 바랍니다. 레어리티 파라미터 파라미터 초기화/취득 처음으로 파라미터 정보를 취득할 때 파라미터 추첨 처리가 생성됩니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RarityParameterStatus ( parameterName : \"rarity-0001\" , propertyId : \"property-0001\" ). ModelAsync (); const auto item = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RarityParameterStatus ( \"rarity-0001\" , // parameterName \"property-0001\" // propertyId ). Model (); var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . rarity_parameter_status ( \"rarity-0001\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 파라미터 검증 레어리티 파라미터가 부여되어 있는지, 혹은 특정 개수가 부여되어 있는지를 서버에서 검증하도록 할 수 있습니다. 가챠나 강화 처리에서 “특정 파라미터를 가진 장비만 허용한다\"와 같은 조건 확인에 사용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var domain = await gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RarityParameterStatus ( parameterName : \"rarity-0001\" , propertyId : \"property-0001\" ). VerifyRarityParameterStatusAsync ( verifyType : \"have\" , parameterValueName : \"critical\" , parameterCount : 1 ); const auto Future = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RarityParameterStatus ( \"rarity-0001\" , // parameterName \"property-0001\" // propertyId ) -\u003e VerifyRarityParameterStatus ( \"have\" , // verifyType \"critical\" , // parameterValueName 1 // parameterCount ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . rarity_parameter_status ( \"rarity-0001\" , \"property-0001\" ) var async_result = await domain . verify_rarity_parameter_status ( \"have\" , # verify_type \"parameter-0001\" , # parameter_value_name null # parameter_count ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 파라미터 재추첨 재추첨은 게임 엔진용 SDK로는 처리할 수 없습니다. 게임 내에서는 GS2-Distributor를 경유하여 Gs2Enchant:ReDrawRarityParameterStatusByUserId 등의 트랜잭션 액션을 실행함으로써 재추첨을 수행해 주시기 바랍니다. 파라미터 추가 파라미터 추가는 게임 엔진용 SDK로는 처리할 수 없습니다. GS2-Distributor를 경유하여 Gs2Enchant:AddRarityParameterStatusByUserId 를 실행함으로써 추가해 주시기 바랍니다. 상세 레퍼런스 GS2-Enchant API 레퍼런스","lang":"ko","section":"microservices","summary":"인챈트·랜덤 파라미터 기능","title":"GS2-Enchant","url":"/ko/microservices/enchant/"},{"content":"이 기능은 개발자에 따라서는 전혀 이해가 안 될 수도 있는 기능일 것입니다. 하지만 일본을 비롯한 모바일 게임의 사실상 표준 게임 시스템에는 반드시 존재하는 기능입니다. 이 게임 메커니즘 자체는 Game as a Service를 실현하는 데 유용한 지식이 될 것이므로, 이해가 어려운 개발자를 위해 게임 메커니즘에 대한 해설을 추가합니다. 강화 기능의 게임 메커니즘에 대해 충분한 지식이 있는 경우에는 이어지는 해설 섹션은 건너뛰어도 무방합니다. 강화 기능의 게임 메커니즘 강화 기능 자체는 매우 단순한 게임 시스템으로, 소재 아이템을 소비함으로써 대상의 경험치를 가산할 수 있는 구조입니다. 배틀에 참가해 경험치를 얻는 방법뿐만 아니라, 다양한 방법으로 캐릭터나 장비를 육성할 수 있게 되어 있습니다. (장비에도 레벨이 있습니다) 그럼 이 게임 시스템이 왜 Game as a Service를 실현하는 데 한몫하고 있는지 설명해 보겠습니다. 한마디로 말하면, 플레이 시간을 늘리는 데 활약하고 있습니다. 개발 속도보다 게임 플레이 속도가 압도적으로 빠르다는 것은 여러분도 충분히 이해하고 계실 것입니다. 우리 게임 개발자가 3년에 걸쳐 개발한 게임을 플레이어는 10시간 만에 끝내버리는 것입니다. 하지만 이 격차를 메우지 않으면 Game as a Service는 성립하지 않습니다. 즉, 플레이어의 콘텐츠 소비 속도에 디버프를 걸 필요가 있습니다. 그 마법이 바로 강화 게임 시스템입니다. 일반적인 Game as a Service 게임은 매달 한 번은 이벤트를 실시합니다. 그 이벤트에는 어떤 형태로든 보스가 존재하며, 플레이어는 그 보스를 이벤트 기간 동안 반복해서 토벌하게 됩니다. 보스는 플레이어의 성장 단계에 맞춰 여러 난이도를 준비해 두고, 토벌함으로써 캐릭터나 장비의 강화 소재를 얻을 수 있습니다. 모은 강화 소재를 사용해 캐릭터나 장비의 경험치로 전환해 성장시킵니다. 캐릭터나 장비를 성장시키면 더 높은 난이도의 보스에 도전할 수 있게 됩니다. 이렇게 함으로써 모든 플레이어가 이벤트에 참여하면서, 자신의 캐릭터 성장 단계에 맞는 강화 소재를 입수하고, 캐릭터나 장비를 성장시키는 재미를 즐길 수 있습니다. 실제로는 강화 소재를 보스가 직접 드롭하는 경우는 적을 수도 있습니다. 대신 이벤트 기간에만 도전할 수 있는 가챠가 있어, 그 가챠를 뽑기 위한 포인트를 모아 가챠를 통해 소재를 얻거나 이벤트 기간에만 개점하는 상점에서 보스를 토벌해 얻을 수 있는 게임 내 통화를 모아 상점에서 강화 소재를 구매하는 등 플레이어의 판단으로 어디를 우선해서 강화할지 결정할 수 있도록 하는 장치는 있지만, 최종적으로는 플레이어가 캐릭터 육성에 필요한 시간을 늘려 플레이 시간을 부풀리게 됩니다. 이벤트를 통해 일관되게 변하지 않는 것은 플레이어의 캐릭터가 강해진다는 점입니다. 이벤트가 끝나면 강해진 캐릭터를 사용해 더 높은 난이도의 상시 콘텐츠를 즐기는 등, 다음 재미로 이어집니다. graph TD BossBattle[\"Boss Battle\"] -- Acquire Event Point --\u003e Shop Shop -- Buy Enhance Materials --\u003e Enhance[\"Enhance Character\"] Enhance -- More Formidable --\u003e BossBattle 아키텍처 강화는 소재가 되는 아이템을 관리하는 GS2-Inventory와, 강화 대상인 캐릭터나 장비를 관리하는 GS2-Inventory 또는 GS2-Dictionary. 그리고 그 캐릭터나 장비의 경험치·레벨을 관리하는 GS2-Experience를 GS2-Enhance를 통해 조작함으로써 실현하고 있습니다. 현재 GS2에서는 1회의 API 요청으로 소비와 경험치 가산을 완결하는 DirectEnhance 를 이용한 강화를 권장하고 있습니다. 이전에는 트랜잭션 자동 실행 기능이 없었기 때문에, 대성공이 나올 때까지 통신을 차단하고 다시 시도하는 행위를 방지할 목적으로, 준비·실행·완료 보고 단계로 나누어진 강화 프로세스( Progress )를 권장했지만, 지금은 트랜잭션 자동 실행이나 원자적 커밋(atomic commit) 구조가 갖추어져 그 우려는 해소되었습니다. actor Player participant \"GS2-Enhance#Namespace\" participant \"GS2-Inventory#ItemSet(Material)\" participant \"GS2-Experience#Status\" Player -\u003e \"GS2-Enhance#Namespace\" : Direct Enhance(Materials/Target Character) \"GS2-Enhance#Namespace\" -\u003e \"GS2-Inventory#ItemSet(Material)\" : Get experience value from metadata \"GS2-Enhance#Namespace\" -\u003e \"GS2-Inventory#ItemSet(Material)\" : Consume \"GS2-Enhance#Namespace\" -\u003e \"GS2-Experience#Status\": Add experience(Key: Target Character/Equipment Id) \"GS2-Enhance#Namespace\" -\u003e Player : Enhance result GS2-Enhance에 “강화 대상”, “강화에 사용할 소재\"를 파라미터로 하여 강화 실행 API( DirectEnhance )를 호출합니다. 그러면 GS2-Enhance는 소재가 되는 아이템의 마스터 데이터를 GS2-Inventory에서 가져와, 메타데이터 내에 기록되어 있는 소재로 사용했을 때의 경험치량을 취득합니다. 경험치량이 확정되면 아이템을 소비하고 경험치 가산 처리를 GS2-Experience에서 실행합니다. 강화 대상을 지정하고는 있지만, GS2-Experience의 경험치를 관리하는 키로 사용될 뿐이며, 강화 대상의 정보를 직접 사용하는 일은 없습니다. DirectEnhance와 Progress의 차이 GS2-Enhance에서는 두 가지 강화 흐름을 제공하고 있습니다. 항목 DirectEnhance Progress (Start / End) API 호출 횟수 1회 2회(시작·종료) 권장 용도 모든 강화 처리 대성공 등 추첨 결과를 연출에 반영하기 위해, 추첨 결과를 먼저 취득해 두고 싶은 경우 원자성 요청 내에서 소비·경험치 가산이 완결 서버에서 추첨한 결과를 유지하고, 이후 End에서 확정 통신 차단에 의한 부정 이용 발생하지 않음 진행 중인 Progress 는 동시에 1건만 유지할 수 있어, DeleteProgress 를 통해서만 재시도 가능 특별한 요건이 없는 한 DirectEnhance 이용을 권장합니다. sequenceDiagram participant Player participant Enhance as GS2-Enhance participant Inventory as GS2-Inventory participant Experience as GS2-Experience Player -\u003e\u003e Enhance: DirectEnhance(rateName, targetItemSetId, materials) Enhance -\u003e\u003e Inventory: 메타데이터에서 경험치량 취득 Enhance -\u003e\u003e Inventory: 소재 아이템 소비 Enhance -\u003e\u003e Experience: 경험치 가산 Enhance --\u003e\u003e Player: 가산 경험치·대성공 배율 강화 레이트 강화에 사용할 수 있는 소재나 강화 대상을 한정하기 위해 강화 레이트를 마스터 데이터로 설정해야 합니다. 마스터 데이터에는 소재로 사용할 수 있는 아이템의 GS2-Inventory 네임스페이스 이름이나 인벤토리 이름, 강화 대상으로 사용할 수 있는 아이템의 GS2-Inventory 네임스페이스 이름이나 인벤토리 이름과 같은 정보를 기록합니다. 마스터 데이터는 JSON 형식으로 관리합니다. 여기서는 ItemModel의 메타데이터에 { “experience”: 50 } 와 같은 JSON 형식으로 설정하는 예를 보여드립니다. RateModel의 acquireExperienceHierarchy에서 JSON의 키(위의 예에서는 experience )를 정의합니다. 또한 acquireExperienceHierarchy에는 계층 구조를 정의할 수 있습니다. 예를 들어 { “aaa”: { “bbb”: { “experienceValue”: 100 } } } 와 같은 구조의 데이터를 메타데이터에 설정하고 싶은 경우에는, acquireExperienceHierarchy에 [ “aaa”, “bbb”, “experienceValue” ] 와 같이 지정합니다. RateModel의 주요 설정 항목 항목 설명 name 강화 레이트 이름 targetInventoryModelId 강화 대상 아이템이 저장되어 있는 GS2-Inventory의 인벤토리 모델 ID materialInventoryModelId 강화 소재 아이템이 저장되어 있는 GS2-Inventory의 인벤토리 모델 ID acquireExperienceHierarchy 소재 아이템의 메타데이터에서 경험치량을 꺼내기 위한 JSON 경로 acquireExperienceSuffix 경험치 모델 이름 키에 부여하는 접미사(예: :level ) experienceModelId 경험치를 가산할 GS2-Experience의 경험치 모델 ID bonusRates 대성공 시의 배율과 추첨 가중치 GS2-Enhance RateModel 마스터 데이터 메타데이터에 경험치를 설정하는 예: { \"version\": \"2020-08-22\", \"rateModels\": [ { \"name\": \"enhanceRate\", \"description\": \"\", \"metadata\": \"\", \"targetInventoryModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:enhance-inventory:model:character\", \"acquireExperienceSuffix\": \":level\", \"materialInventoryModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:enhance-inventory:model:material\", \"acquireExperienceHierarchy\": [ \"experience\" ], \"experienceModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:enhance-experience:model:character\", \"bonusRates\": [ { \"rate\": 2, \"weight\": 1 }, { \"rate\": 1, \"weight\": 1 } ] } ] } bonusRates 에는 여러 엔트리를 설정할 수 있으며, 각 엔트리는 추첨 가중치( weight )와 배율( rate )을 가집니다. 위의 예에서는 “2배 경험치\"와 “등배 경험치\"가 동일한 가중치로 추첨되어, 대략 50%의 확률로 대성공(2배)이 발생합니다. GS2-Experience ExperienceModel 마스터 데이터 예: { \"version\": \"2019-01-11\", \"experienceModels\": [ { \"name\": \"character\", \"metadata\": \"CHARACTER\", \"defaultExperience\": 0, \"defaultRankCap\": 50, \"maxRankCap\": 80, \"rankThreshold\": { \"metadata\": \"RANK_THRESHOLD\", \"values\": [ 100, 300, 500, 1000 ] } } ] } GS2-Inventory ItemModel 마스터 데이터 메타데이터에 경험치를 설정하는 예: { \"version\": \"2019-02-05\", \"inventoryModels\": [ { \"name\": \"character\", \"initialCapacity\": 1, \"maxCapacity\": 1, \"protectReferencedItem\": false, \"itemModels\": [ { \"name\": \"character-0001\", \"stackingLimit\": 1, \"allowMultipleStacks\": false, \"sortValue\": 0 } ] }, { \"name\": \"material\", \"metadata\": \"\", \"initialCapacity\": 10, \"maxCapacity\": 10, \"protectReferencedItem\": false, \"itemModels\": [ { \"name\": \"material-0001\", \"metadata\": \"{\\\"experience\\\":50}\", \"stackingLimit\": 99, \"allowMultipleStacks\": false, \"sortValue\": 0 } ] } ] } 한계 돌파 (Unleash) 같은 종류의 아이템 등을 소재로 소비해, 대상의 레벨 상한을 끌어올리는 “한계 돌파” 기능도 제공하고 있습니다. GS2-Experience가 관리하는 rankCap (랭크 상한)을 한 단계 끌어올리는 구조로, UnleashRateModel 의 마스터 데이터로 다음을 설정합니다. 한계 돌파 대상 인벤토리 모델 연결된 그레이드 모델(GS2-Grade) 각 그레이드에 도달하기 위해 필요한 소재 아이템과 그 수량 이를 통해 “같은 캐릭터를 4명 모으면 한계 돌파를 할 수 있다”, “특정 소재 아이템을 N개 소비하면 레벨 상한이 해제된다” 같은 게임 메커니즘을 구현할 수 있습니다. 스크립트 트리거 네임스페이스에 enhanceScript 를 설정하면 강화 실행 전후로 커스텀 스크립트를 호출할 수 있습니다. 처리의 허가·거부나 입수 경험치의 오버라이드가 가능하며, 실행 방식은 동기·비동기를 선택할 수 있습니다. 비동기에서는 GS2-Script나 Amazon EventBridge를 이용한 외부 연동에도 대응합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. enhanceScript (완료 통지: enhanceDone ): 강화 실행 전후 스크립트 내에서는 강화 대상·소재 아이템·추첨되는 배율을 참조할 수 있어, 게임 밸런스 조정이나 이벤트 기간 중 부스트 배율 변경과 같은 용도로 활용할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. RateModel : 강화 소재나 대상의 정의 UnleashRateModel : 상한 해제용 레이트 정의 마스터 데이터의 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 트랜잭션 액션 GS2-Enhance에서는 다음 트랜잭션 액션을 제공하고 있습니다. 소비 액션: 실행 중인 강화 진행 정보( Progress )의 삭제 입수 액션: 즉시 강화( DirectEnhance )의 실행, 한계 돌파( Unleash )의 실행, 강화( Progress )의 시작 “즉시 강화(DirectEnhance)의 실행\"을 입수 액션으로 이용함으로써, 특정 퀘스트 클리어 보상이나 상점에서의 아이템 구매 시 보상으로, 직접 캐릭터나 장비에 경험치를 부여하는 처리가 가능해집니다. 또한 “한계 돌파(Unleash)“를 보상으로 설정함으로써, 특정 미션 달성 시 자동으로 레벨 상한을 끌어올리는 운용도 가능합니다. 구현 예제 강화 레이트 목록 취득 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). RateModelsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RateModels (); TArray Gs2 :: UE5 :: Enhance :: Model :: FEzRateModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . enhance . namespace_ ( \"namespace-0001\" ) . rate_models ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 강화 실행(DirectEnhance) materials 에는 소비할 소재 아이템의 ItemSetId 와 수량을 지정합니다. 강화 대상으로 targetItemSetId 에 강화하고 싶은 캐릭터·장비의 ItemSetId 를 전달합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Enhance ( ). EnhanceAsync ( rateName : \"rate-0001\" , targetItemSetId : \"item-set-0001\" , materials : new [] { new Gs2 . Unity . Gs2Enhance . Model . EzMaterial { MaterialItemSetId = \"material-0001\" , Count = 1 , }, } ); var transaction = result ; await transaction . WaitAsync (); const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Enhance ( ); const auto Future = Domain -\u003e Enhance ( \"rate-0001\" , \"item-set-0001\" , [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Enhance :: Model :: FMaterial \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: Enhance :: Model :: FMaterial \u003e () -\u003e WithMaterialItemSetId ( TOptional FString \u003e ( \"material-0001\" )) -\u003e WithCount ( TOptional int32 \u003e ( 1 ))); return v ; }() ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . enhance ( ) var async_result = await domain . enhance ( \"rate-0001\" , # rate_name \"item-set-0001\" , # target_item_set_id [ Gs2EnhanceEzMaterial . new () . with_material_item_set_id ( \"material-0001\" ) . with_count ( 1 ), ], # materials null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 강화(Progress)의 시작 추첨 결과를 먼저 취득해 두고 싶은 경우의 흐름입니다. 진행 중인 Progress 는 1명의 사용자당 1건만 유지할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ). StartAsync ( rateName : \"rate-0001\" , targetItemSetId : \"item-set-0001\" , materials : new [] { new Gs2 . Unity . Gs2Enhance . Model . EzMaterial { MaterialItemSetId = \"material-0001\" , Count = 1 , }, } ); const auto Future = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Progress ( ) -\u003e Start ( \"rate-0001\" , // rateName \"item-set-0001\" , // targetItemSetId [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Enhance :: Model :: FMaterial \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: Enhance :: Model :: FMaterial \u003e () -\u003e WithMaterialItemSetId ( TOptional FString \u003e ( \"material-0001\" )) -\u003e WithCount ( TOptional int32 \u003e ( 1 ))); return v ; }() ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . start ( \"character-level\" , # rate_name \"item-set-0001\" , # target_item_set_id [ Gs2EnhanceEzMaterial . new () . with_material_item_set_id ( \"material-0001\" ) . with_count ( 1 ), ], # materials null , # force null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 진행 중인 강화 정보 취득 추첨이 완료된 배율(대성공 플래그)이나 입수 경험치량을 취득해, 강화 연출에 활용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ). ModelAsync (); var experienceValue = item . ExperienceValue ; var rate = item . Rate ; const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Progress ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); const auto ExperienceValue = Result -\u003e GetExperienceValue (); const auto Rate = Result -\u003e GetRate (); var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 강화(Progress)의 완료 Start 로 시작한 강화를 End 로 확정하여, 소비·경험치 가산을 실행합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ). EndAsync (); await result . WaitAsync (); const auto Future = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Progress ( ) -\u003e End (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . end ( null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 진행 중인 강화 정보 파기 통신이 끊겨 완료 보고를 할 수 없게 된 경우 등의 복구에 사용합니다. Game Engine: Unity Unreal Engine Godot await gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ). DeleteProgressAsync (); const auto Future = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Progress ( ) -\u003e DeleteProgress (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . delete_progress ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 기타 기능 강화의 대성공 강화 사양으로서, 일정 확률로 “대성공\"이 발생해 입수할 수 있는 경험치량이 1.5배나 2배가 되는 사양이 있는 경우가 있습니다. GS2-Enhance에서는 강화 레이트로서 대성공이 발생할 확률과 그 경우의 경험치 획득량 배율을 설정할 수 있습니다. bonusRates 의 weight 합계값에 대한 각 엔트리의 weight 비율이 그 배율의 발생 확률이 됩니다. Config를 사용한 스크립트로의 파라미터 전달 EnhanceAsync / StartAsync 에는 config 파라미터를 지정할 수 있어, 스크립트 트리거 실행 시 임의의 키와 값의 쌍을 전달할 수 있습니다. 게임 내 이벤트 부스트 상태나 플레이어가 선택한 강화 모드와 같은 정보를 스크립트에 전달할 수 있습니다. 투기적 실행(Speculative Execute) speculativeExecute 인수(기본값 true )를 활성화하면, API 요청의 응답을 기다리기 전에 클라이언트 측 캐시를 갱신하여, UI 상에서는 즉시 경험치 가산 후의 상태를 표시할 수 있습니다. 통신 지연의 영향을 덜 받는 쾌적한 조작감을 실현할 수 있습니다. 상세 레퍼런스 GS2-Enhance API 레퍼런스","lang":"ko","section":"microservices","summary":"강화 기능\n","title":"GS2-Enhance","url":"/ko/microservices/enhance/"},{"content":"GS2 가 제공하는 마이크로서비스 중에서도 특히 널리 사용되고 있는 기능입니다. 모든 마이크로서비스의 리소스를 전혀 다른 마이크로서비스의 리소스로 변환하는 역할을 담당합니다. 게임 사양에는 리소스 교환에 관한 것이 다수 존재하며, 그때마다 GS2-Exchange 가 활약하게 됩니다. 리소스 교환의 예 강화 소재 변환 GS2-Inventory 로 관리하는 ★1 강화 소재 10개를, 마찬가지로 GS2-Inventory 로 관리하는 ★2 강화 소재 1개와 교환 6시간에 1회 아이템을 입수할 수 있다 GS2-Stamina 로 관리하는 6시간마다 1 회복하는 스태미나 1을, GS2-Inventory 로 관리하는 아이템과 교환 아이템 매각 GS2-Inventory 로 관리하는 아이템을, 마찬가지로 GS2-Inventory 로 관리하는 게임 내 통화와 교환 교환의 종류 GS2-Exchange 는 마스터 데이터에 정의된 교환 비율로 즉시 교환할 수 있는 다이렉트 교환과, 교환을 실행한 후 실제 시간으로 일정 시간이 경과한 뒤 교환 결과를 얻을 수 있는 비동기 교환, 구매할 때마다 비용이 상승하는 비용 상승형 교환의 3가지 모드가 존재합니다. flowchart LR Verify[\"대가 검증 (verifyActions)\"] --\u003e Consume[\"대가 소비 (consumeActions)\"] Consume --\u003e|timingType=direct| Acquire[\"보상 부여 (acquireActions)\"] Consume --\u003e|timingType=await| Await[\"Await 오브젝트 생성\"] Await -. lockTime 경과 .-\u003e Acquire2[\"AcquireAsync 로 보상 수취\"] 교환 동작은 네임스페이스 설정의 enableDirectExchange / enableAwaitExchange 로 모드별로 활성화할 수 있습니다. 레이트 모델의 timingType 을 direct 또는 await 로 전환함으로써 개별 레이트가 즉시 교환과 비동기 교환 중 어느 쪽으로 동작할지를 선택할 수 있습니다. 비동기 교환의 동작 비동기 교환을 사용한 경우, 교환을 실행한 시점에 대가가 소비되고, 보상을 받는 대신 Await 오브젝트가 생성됩니다. Await 오브젝트의 생성 시각으로부터 마스터 데이터에 정의된 교환 대기 시간( lockTime 초)이 경과하면 보상을 수취할 수 있습니다. 상태 필드 교환 실행 시각 exchangedAt 보상 수취 가능 시각 acquirableAt 대가로 소비되는 수량 count 스킵으로 단축된 초수 skipSeconds 거점 강화 마을 건설계 게임에서 거점을 성장시키기 위해 자원을 소비한 후 8시간이 경과하면 실제로 거점의 경험치를 가산한다 원정 파티를 편성하여 모험을 떠난 뒤 3시간 후 모험의 결과로 보상을 수취할 수 있다 비동기 교환의 스킵 비동기 교환의 시간 경과 대기를, 추가 대가를 지불함으로써 스킵할 수 있도록 할 수 있습니다. 일반적으로 이러한 사양을 넣는 경우 수익화를 위한 기능으로 구현되는 경우가 많지만, 현금으로 구매한 GS2-Money 로 관리하는 게임 내 통화를 소비함으로써 대기 시간을 단축할 수 있는 사양을 실현할 수 있습니다. 대기 중 보상의 강제 취득과 삭제 관리 화면이나 API(트랜잭션 액션)를 통해 대기 시간을 무시하고 보상을 강제로 취득하거나, 실행 중인 비동기 교환(Await 오브젝트)을 삭제하여 취소하는 것이 가능합니다. 비용 상승형 교환의 예 강화(인플레 게임) 강화할 때마다 강화에 필요한 골드 소비량이 증가한다 스태미나 회복 비용 증가 스태미나를 구매할 때마다 구매에 필요한 과금 통화 소비량이 상승한다. 구매 횟수는 매일 리셋된다 비용 상승량의 계산 비용 상승량에는 3가지 모드가 존재하며, IncrementalRateModel 의 calculateType 으로 지정합니다. linear baseValue + (coefficientValue * 교환 횟수) 예 baseValue = 100, coefficientValue = 50 교환 횟수 비용 0 100 1 150 2 200 3 250 4 300 power coefficientValue * (교환 횟수 + 1) ^ 2 예 coefficientValue = 50 교환 횟수 비용 0 50 1 200 2 450 3 800 4 1250 gs2_script GS2-Script 의 실행 결과를 바탕으로 산출합니다. 복잡한 조건을 바탕으로 비용을 계산하고 싶은 경우에 사용할 수 있습니다. 예 currentExchangeCount = args.currentExchangeCount quantity = quantity cost = 100 for i = 1 , quantity do cost = cost + (i + currentExchangeCount - 1) * 50 end result = { cost=cost } 교환 횟수 비용 0 100 1 150 2 200 3 250 4 300 교환 횟수 관리 IncrementalRateModel 에서는 exchangeCountId 와 maximumExchangeCount 를 지정하여, GS2-Limit 의 횟수 제한 모델과 연동해 교환 실행 횟수를 추적하거나, 특정 기간 내의 교환 상한을 설정할 수 있습니다. exchangeCountId 에 GS2-Limit 의 Counter 모델을 지정하면 교환 횟수가 GS2-Limit 에서 카운트되어, 일 단위·주 단위 등 GS2-Limit 의 리셋 사양에 따라 교환 횟수를 초기화할 수 있습니다. maximumExchangeCount 를 초과하는 횟수의 교환은 거부되므로, 기간 내 구매 상한을 두는 가챠나, 하루에 N 회까지 구매 가능한 아이템 상점 등을 실현할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. RateModel : 즉시 또는 비동기 교환의 레이트 정의 IncrementalRateModel : 교환 횟수에 따라 비용이 증가하는 레이트 정의 RateModel 의 주요 필드 필드 설명 name 레이트 이름(고유) verifyActions 교환 실행 전에 수행하는 검증 액션 consumeActions 대가로 소비하는 액션 acquireActions 보상으로 부여하는 액션 timingType direct (즉시 교환) / await (비동기 교환) lockTime 비동기 교환의 대기 초수 IncrementalRateModel 의 주요 필드 필드 설명 name 레이트 이름(고유) consumeAction 대가로 소비하는 액션(수량은 비용 계산으로 결정) acquireActions 보상으로 부여하는 액션 calculateType 비용 계산 방식( linear / power / gs2_script ) baseValue / coefficientValue 비용 계산에서 사용하는 계수 calculateScriptId gs2_script 사용 시 호출하는 스크립트 exchangeCountId 교환 횟수를 관리하는 GS2-Limit 의 카운터 maximumExchangeCount 교환 횟수의 상한 마스터 데이터의 JSON 예 { \"version\": \"2019-08-19\", \"rateModels\": [ { \"name\": \"material_n_to_r\", \"metadata\": \"N -\u003e R 강화 소재 교환\", \"consumeActions\": [ { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \"request\": \"{\\\"namespaceName\\\":\\\"inventory-0001\\\",\\\"inventoryName\\\":\\\"material\\\",\\\"itemName\\\":\\\"n-material\\\",\\\"userId\\\":\\\"#{userId}\\\",\\\"consumeCount\\\":10}\" } ], \"timingType\": \"await\", \"lockTime\": 3600, \"acquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \"request\": \"{\\\"namespaceName\\\":\\\"inventory-0001\\\",\\\"inventoryName\\\":\\\"material\\\",\\\"itemName\\\":\\\"r-material\\\",\\\"userId\\\":\\\"#{userId}\\\",\\\"acquireCount\\\":1}\" } ] } ] } 마스터 데이터의 등록은 매니지먼트 콘솔에서 등록하는 것 외에도, GitHub 에서 데이터를 반영하거나, GS2-Deploy 를 사용해 CI 에서 등록하는 등의 워크플로우를 구성하는 것이 가능합니다. 스크립트 트리거 네임스페이스에 다음의 스크립트 설정을 추가하면 교환 처리나 대기 중 보상 수취 전후에 커스텀 스크립트를 실행할 수 있습니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. exchangeScript (완료 알림: exchangeDone ): 교환 처리 전후 incrementalExchangeScript (완료 알림: incrementalExchangeDone ): 비용 상승형 교환 전후 acquireAwaitScript (완료 알림: acquireAwaitDone ): 대기 중 보상 수취 전후 이 스크립트들은 동기·비동기 실행 방식을 선택할 수 있으며, 비동기의 경우 GS2-Script 나 Amazon EventBridge 를 통한 외부 연동에도 대응합니다. 또한 IncrementalRateModel 에서 비용 계산 방식으로 gs2_script 를 선택한 경우, 레이트 단위로 설정한 calculateScriptId 를 호출하여 비용을 산출합니다. 버프에 의한 보정 GS2-Buff 와 연동하면 RateModel 의 lockTime 이나 acquireActions · verifyActions · consumeActions , IncrementalRateModel 의 acquireActions · consumeAction · maximumExchangeCount 를 컨텍스트 스택을 통해 동적으로 오버라이드할 수 있어, 이벤트나 캠페인에 맞게 보상이나 대기 시간, 교환 가능 횟수를 유연하게 조정할 수 있습니다. 예를 들어, 기간 한정으로 “강화 소재 교환의 대기 시간을 절반으로 단축”, “가챠의 1일 구매 상한을 증가” 와 같은 시책을, 마스터 데이터를 수정하지 않고 버프 적용만으로 실현할 수 있습니다. 구현 예제 교환 실행(다이렉트) config 파라미터에는 교환에 연동된 대가·보상 액션의 트랜잭션에서 사용되는 컨텍스트 값을 전달할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Exchange ( ). ExchangeAsync ( rateName : \"rate-0001\" , count : 1 ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Exchange ( ); const auto Future = Domain -\u003e Exchange ( \"rate-0001\" , // rateName 1 , // count nullptr // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . exchange ( ) var async_result = await domain . exchange ( \"rate-0001\" , # rate_name 1 , # count null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 비동기 교환 시작 timingType=await 인 레이트에 대해 ExchangeAsync 를 호출하면, 대가는 즉시 소비되고 보상은 Await 오브젝트에 보류됩니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Exchange ( ). ExchangeAsync ( rateName : \"material_n_to_r\" , count : 1 ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Exchange ( ); const auto Future = Domain -\u003e Exchange ( \"material_n_to_r\" , // rateName 1 , // count nullptr // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . exchange ( ) var async_result = await domain . exchange ( \"rate-0001\" , # rate_name 1 , # count null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Await 목록 취득 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AwaitsAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Awaits ( ); TArray Gs2 :: UE5 :: Exchange :: Model :: FEzAwaitPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . awaits ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result Await 대기 시간 경과 후 보상 수취 대기 시간이 경과한 Await 로부터 보상을 수취합니다. 수취 처리에서는 트랜잭션이 발행되어, acquireActions 에 정의된 보상 부여 처리가 다른 마이크로서비스에 대해 실행됩니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( rateName : \"material_n_to_r\" , awaitName : \"await-0001\" ). AcquireAsync ( ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Await ( \"await-0001\" , // awaitName \"material_n_to_r\" // rateName ); const auto Future = Domain -\u003e Acquire ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . await_ ( \"await-0001\" ) var async_result = await domain . acquire ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Await 삭제(취소) 대기 중인 Await 를 파기하여 교환을 취소합니다. 대가로 소비한 리소스는 반환되지 않는다는 점에 주의하세요. 반환이 필요한 경우에는 트랜잭션 액션을 이용한 서버 측 스크립트로 보완하세요. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( rateName : \"material_n_to_r\" , awaitName : \"await-0001\" ). DeleteAwaitAsync ( ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Await ( \"await-0001\" , // awaitName \"material_n_to_r\" // rateName ); const auto Future = Domain -\u003e DeleteAwait ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . await_ ( \"await-0001\" ) var async_result = await domain . delete_await ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 대기 시간 스킵 대기 시간을 추가 비용 지불로 스킵하려면, skipByConfig 를 이용해 스킵에 필요한 비용을 설정한 다음, 서버 사이드(GS2-JobQueue 나 GS2-Script 경유)의 API 를 호출합니다. 스킵 처리는 트랜잭션 액션으로도 이용할 수 있으므로, 상점의 스킵 아이템이나 스킵 티켓 같은 상품 설계와 조합할 수 있습니다. 비용 상승형 교환의 실행 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Exchange ( ). IncrementalExchangeAsync ( rateName : \"rate-0001\" , count : 1 ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Exchange ( ); const auto Future = Domain -\u003e IncrementalExchange ( \"rate-0001\" , // rateName 1 , // count nullptr // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . exchange ( ) var async_result = await domain . incremental_exchange ( \"rate-0001\" , # rate_name 1 , # count null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 트랜잭션 액션 GS2-Exchange 에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 소비 액션: 실행 중인 교환 대기(Await)의 삭제 입수 액션: 즉시 교환(Exchange) 실행, 비용 상승형 교환(IncrementalExchange) 실행, 교환 대기(Await) 생성, 대기 중 보상의 강제 취득, 대기 시간 스킵 “보상 강제 취득\"을 입수 액션으로 이용함으로써, 특정 아이템을 입수했을 때나 미션 달성 시의 보상으로, 현재 진행 중인 건축이나 원정(비동기 교환)을 즉시 완료시키는 처리가 가능해집니다. 또한 “교환 대기 삭제\"를 소비 액션으로 이용함으로써, 진행 중인 프로세스를 중단(취소)시키는 운용도 가능합니다. 상세 레퍼런스 GS2-Exchange API 레퍼런스","lang":"ko","section":"microservices","summary":"게임 내 리소스 교환 기능\n","title":"GS2-Exchange","url":"/ko/microservices/exchange/"},{"content":"Game as a Service 에서 성장 요소는 필수 불가결합니다. 캐릭터를 성장시키고, 성장한 캐릭터로 더욱 높은 난이도의 콘텐츠에 도전하는 게임 사이클을 구현하기 위한 경험치·랭크 기능을 제공합니다. GS2-Experience 는 단일 캐릭터의 레벨뿐만 아니라, 여러 프로퍼티(캐릭터, 무기, 파티, 길드 등)의 성장을 하나의 마이크로서비스로 일원 관리할 수 있는 유연한 설계로 되어 있습니다. 유스케이스 GS2-Experience 가 상정하는 대표적인 유스케이스는 다음과 같습니다. 플레이어 캐릭터의 레벨 관리 육성 가능한 장비품의 레벨 관리 길드나 팀의 랭크 관리 칭호·배틀 패스의 레벨 관리 스킬 트리의 각 스킬 숙련도 관리 graph LR Player[플레이어] --\u003e|경험치 가산| Exp[GS2-Experience] Exp --\u003e|랭크 계산| Status[Status] Status --\u003e|임계값 초과| RankUp[랭크업] RankUp --\u003e|보상 지급| Inventory[GS2-Inventory] RankUp --\u003e|스태미나 최대값 갱신| Stamina[GS2-Stamina] 랭크 GS2-Experience 는 경험치 값으로부터 자동으로 랭크 값을 계산합니다. 이를 위해서는 마스터 데이터를 이용해 랭크업 임계값이 되는 경험치 테이블을 정의해야 합니다. Experience Model 에서 랭크업 임계값을 관리하며, 그 아래에 임의의 값을 가지는 프로퍼티ID 를 종속시킬 수 있습니다. 프로퍼티ID 별로 경험치 값이 관리되고, 경험치 값에 따라 랭크가 결정됩니다. Experience Model 과 프로퍼티ID 의 관계 graph TD N[Namespace] --\u003e EM1[\"ExperienceModel character_ssr\"] N --\u003e EM2[\"ExperienceModel character_sr\"] N --\u003e EM3[\"ExperienceModel weapon\"] EM1 --\u003e P11[\"프로퍼티ID: character-001\"] EM1 --\u003e P12[\"프로퍼티ID: character-002\"] EM3 --\u003e P31[\"프로퍼티ID: weapon-001\"] EM3 --\u003e P32[\"프로퍼티ID: weapon-002\"] 예를 들어 “캐릭터 종류별로 필요 경험치 테이블을 다르게 하고 싶다”, “캐릭터별로 랭크 캡을 다르게 하고 싶다” 와 같은 경우, ExperienceModel 을 캐릭터 종류별로 준비하고 프로퍼티ID 에 캐릭터의 개별 ID를 할당함으로써 구현할 수 있습니다. 랭크 캡 랭크에는 상한을 설정할 수 있습니다. 랭크의 상한에 도달한 상태에서 경험치를 입수한 경우, 경험치는 파기됩니다. 랭크의 상한은 Experience Model 에서 초기값을 설정하지만, 프로퍼티ID 별로 개별적으로 인상할 수 있습니다. 이를 통해 한계돌파 강화를 실시하면 랭크 캡을 인상하는 것과 같은 사양을 구현할 수 있습니다. 설정 항목 설명 defaultExperience 초기 경험치 defaultRankCap 초기 랭크 캡 maxRankCap 랭크 캡의 상한값(이를 초과하는 SetRankCap 은 거부됨) rankThreshold 랭크업에 필요한 경험치 임계값 배열 스테이터스 정보 Status 는 사용자 × ExperienceModel × 프로퍼티ID 의 조합으로 고유하게 결정되며, 다음 정보를 보유합니다. 속성 설명 experienceValue 현재 경험치 rankValue 현재 랭크 rankCapValue 현재 랭크 캡 nextRankUpExperienceValue 다음 랭크업에 필요한 경험치 nextRankUpExperienceValue 를 클라이언트에서 참조함으로써, 랭크업까지 필요한 경험치 표시나 진행 바 그리기를 간단하게 수행할 수 있습니다. 보상 가산 테이블 Experience Model 에는 랭크에 따라 보상량을 조정하는 acquireActionRates 를 설정할 수 있습니다. 배율에는 일반적인 rates 외에도, int64 를 초과하는 값을 다룰 수 있는 bigRates 도 정의할 수 있어, 인플레이션이 심한 게임에서도 정밀도를 유지한 채 보상량을 제어할 수 있습니다. 예를 들어, “랭크가 높은 플레이어에게는 고난도 퀘스트의 보상을 더 많이 지급한다” 와 같은 조정에 활용할 수 있습니다. 퀘스트 보상으로 랭크에 따른 배율을 입수 액션에 반영하고 싶은 경우, GS2-Quest 의 클리어 보상에 “랭크에 따른 보상 배율 적용” 을 트랜잭션 액션으로 포함시킵니다. 스크립트 트리거 네임스페이스에 각종 스크립트를 설정하면, 경험치 변화·랭크 변화·랭크 캡 변화의 전후에 커스텀 스크립트를 호출할 수 있습니다. 스크립트는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기의 경우 GS2-Script 나 Amazon EventBridge 를 통한 외부 처리에도 대응합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. changeExperienceScript (완료 알림: changeExperienceDone ): 경험치 변화 전후 changeRankScript (완료 알림: changeRankDone ): 랭크 변화 전후 changeRankCapScript (완료 알림: changeRankCapDone ): 랭크 캡 변경 전후 또한 다음 필드에는 스크립트의 GRN 을 직접 지정할 수 있으며, 해당 이벤트가 발생했을 때 스크립트가 호출됩니다. rankCapScriptId : 랭크 캡 취득 시의 처리 overflowExperienceScript : 랭크 캡 도달 후 잉여 경험치(넘친 경험치)의 처리 overflowExperienceScript 를 이용하면, 랭크 캡에 도달한 이후의 잉여 경험치를, 예를 들어 게임 내 통화로 GS2-Inventory 에 변환하는 처리를 자동화할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. ExperienceModel : 랭크 임계값과 보상 가산 테이블 마스터 데이터의 등록은 매니지먼트 콘솔에서 등록하는 것 외에도, GitHub 에서 데이터를 반영하거나, GS2-Deploy 를 사용해 CI 에서 등록하는 등의 워크플로우를 구성하는 것이 가능합니다. ExperienceModel 의 JSON 예 { \"version\": \"2019-09-04\", \"experienceModels\": [ { \"name\": \"character_ssr\", \"metadata\": \"SSR 캐릭터\", \"defaultExperience\": 0, \"defaultRankCap\": 50, \"maxRankCap\": 99, \"rankThreshold\": { \"metadata\": \"SSR 랭크 테이블\", \"values\": [ 100, 300, 600, 1000, 1500 ] }, \"acquireActionRates\": [ { \"name\": \"boost\", \"mode\": \"double\", \"rates\": [1.0, 1.1, 1.2, 1.3, 1.4] } ] } ] } 버프에 의한 보정 GS2-Buff 와 연동하면, 스테이터스의 rankCapValue 나 AddExperienceByUserId · SubExperienceByUserId 등 액션의 experienceValue 를 버프로 보정할 수 있습니다. 이벤트나 캠페인 시에 획득량이나 랭크 상한을 일시적으로 증감시키는 등의 조정을 유연하게 할 수 있습니다. 대표적인 버프 대상은 다음과 같습니다. 종별 대상 보정 가능한 값 모델 Status rankCapValue 액션 AddExperienceByUserId experienceValue 액션 SubExperienceByUserId experienceValue 액션 AddRankCapByUserId rankCapValue 트랜잭션 액션 GS2-Experience 에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 검증 액션: 랭크 검증, 랭크 캡 검증 소비 액션: 경험치 감산, 랭크 캡 감산 입수 액션: 경험치 가산, 경험치 설정, 랭크 캡 가산, 랭크 캡 설정, 랭크에 따른 보상 배율 적용 “경험치 가산” 을 입수 액션으로 이용함으로써, 상점에서 상품 구매 시나 미션 달성 시의 보상으로 직접 캐릭터의 경험치를 늘려 랭크업시키는 처리가 가능해집니다. 또한 “랭크 캡 가산” 을 보상으로 설정함으로써, 특정 조건을 달성했을 때 자동으로 레벨 상한을 해제하는 운용도 가능합니다. “랭크 검증” 을 검증 액션으로 이용함으로써, “랭크 10 이상의 캐릭터만 도전할 수 있는 퀘스트” 나 “랭크 50 이상에서 교환 가능한 강화 소재” 와 같은 게임 사양을 마스터 데이터 설정만으로 구현할 수 있습니다. 구현 예제 경험치 가산 경험치 가산은 게임 엔진용 SDK 로는 처리할 수 없습니다. GS2-Quest 의 퀘스트 클리어 보상이나, GS2-Enhance 의 강화 보상으로 경험치를 가산하도록 해주세요. 랭크 캡 인상 랭크 캡 인상은 게임 엔진용 SDK 로는 처리할 수 없습니다. GS2-Exchange 에서 강화 소재나, 동일 캐릭터와의 교환 보상으로 랭크 캡을 인상하도록 해주세요. 경험치 목록 취득 플레이어가 보유한 모든 Status 를 일괄로 취득합니다. 홈 화면의 스테이터스 표시나 캐릭터 목록 화면에서 활용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StatusesAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Statuses ( ); TArray Gs2 :: UE5 :: Experience :: Model :: FEzStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . experience . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . statuses ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 경험치 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( experienceName : \"character_ssr\" , propertyId : \"property-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( \"character_ssr\" , // experienceName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . experience . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"character_ssr\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result ExperienceModel 목록 취득 클라이언트에서 랭크업에 필요한 경험치 테이블을 참조하고자 할 때 이용합니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). ExperienceModelsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ExperienceModels (); TArray Gs2 :: UE5 :: Experience :: Model :: FEzExperienceModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . experience . namespace_ ( \"namespace-0001\" ) . experience_models ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 특정 ExperienceModel 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). ExperienceModel ( experienceName : \"character_ssr\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ExperienceModel ( \"character_ssr\" // experienceName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . experience . namespace_ ( \"namespace-0001\" ) . experience_model ( \"experience-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 소지 증명 서명 취득 GS2 내의 다른 마이크로서비스와 연동할 때, 실제로 GS2-Experience 에서 랭크나 경험치가 올바른지 보증하는 데이터가 요구되는 경우가 있습니다. 예를 들어, GS2-Experience 에서 플레이어의 랭크를 관리하고 있고, GS2-Stamina 에서 그 랭크에 따라 스태미나의 최대값을 결정한다고 합시다. GS2-Stamina 는 소지 증명 서명과 함께 랭크를 지정하도록 요구합니다. 이를 통해, GS2-Stamina 는 뒤에서 GS2-Experience 와 통신하여 실제로 해당 랭크에 도달했는지를 판단할 필요가 없어집니다. sequenceDiagram participant Player as 플레이어 participant Exp as GS2-Experience participant Other as 다른 마이크로서비스 Player-\u003e\u003eExp: GetStatusWithSignature Exp--\u003e\u003ePlayer: Body + Signature Player-\u003e\u003eOther: API + Body + Signature Other-\u003e\u003eOther: 서명 검증 Other--\u003e\u003ePlayer: 처리 결과 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( experienceName : \"character_ssr\" , propertyId : \"property-0001\" ). GetStatusWithSignatureAsync ( keyId : \"grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001\" ); var body = result . Body ; var signature = result . Signature ; const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( \"character_ssr\" , // experienceName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e GetStatusWithSignature ( \"grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . experience . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"character_ssr\" , \"property-0001\" ) var async_result = await domain . get_status_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-Experience API 레퍼런스","lang":"ko","section":"microservices","summary":"경험치·랭크 기능\n","title":"GS2-Experience","url":"/ko/microservices/experience/"},{"content":"소유하고 있는 리소스를 조합하여 하나의 무언가를 편성한다는 사양은 일반적입니다. 여러 캐릭터를 편성하여 파티를 만들거나, 무기·방어구 같은 아이템을 편성하여 장착하는 것 등이 그 예입니다. GS2-Formation은 “어떤 슬롯이 존재하는지”, “각 슬롯에 무엇을 장착할 수 있는지”, “같은 종류의 편성을 몇 개까지 보유할 수 있는지\"를 마스터 데이터로 정의하고, 플레이어별 편성 내용을 관리하는 마이크로서비스입니다. 용어 graph LR MoldModel --\u003e FormModel FormModel --\u003e SlotModel PropertyFormModel --\u003e SlotModel2[SlotModel] Mold --\u003e Form Form --\u003e Slot PropertyForm --\u003e Slot2[Slot] 용어 설명 MoldModel 같은 종류의 편성(파티·장비 세트 등)을 여러 개 보유하기 위한 타입. 용량(저장 슬롯)의 개념을 가짐 FormModel Mold에 연결된 Form의 구성 정의. 어떤 슬롯을 가지는지를 정의 PropertyFormModel 프로퍼티ID로 참조하는 단독 편성 정의. Mold를 거치지 않고 캐릭터 1개당 편성 1개와 같은 형태로 사용 SlotModel 슬롯의 정의. 슬롯에 장착 가능한 프로퍼티를 정규 표현식으로 제한할 수 있음 Mold 플레이어별 Mold 실체. capacity 를 가지며 최대 용량까지 Form을 생성할 수 있음 Form Mold 내의 편성 인스턴스. index 로 식별됨 PropertyForm 프로퍼티ID 단위의 편성 인스턴스 Slot 플레이어가 실제로 장착하고 있는 리소스를 보유 폼 캐릭터의 장비 기능을 구현할 때 무기·투구·건틀릿·상의·하의·신발 같은 여러 슬롯을 준비하고, 각 슬롯에 적합한 아이템만 장착할 수 있도록 설정할 수 있습니다. Form Model에서는 어떤 슬롯이 존재하는지, 각 슬롯에는 어떤 아이템을 편성할 수 있는지를 마스터 데이터로 정의합니다. Mold와 PropertyForm의 구분 사용 flowchart LR subgraph Mold M1[\"Form #0\"] M2[\"Form #1\"] M3[\"Form #2 (빈 슬롯)\"] end subgraph PropertyForm P1[\"character-001의 편성\"] P2[\"character-002의 편성\"] end Mold 를 사용하는 경우: 파티 편성 1~N처럼, 편성 세트를 번호( index )로 관리하고 최대 보유 수( capacity )를 성장 요소로 확장하고 싶은 경우 PropertyForm 을 사용하는 경우: 캐릭터별·장비 세트별 등, 외부 리소스ID( propertyId )에 1대1로 연결되는 편성 Mold 의 MoldModel 은 initialMaxCapacity (초기 용량)와 maxCapacity (확장 상한)를 가지며, 플레이어의 성장이나 수익화 시책에 따라 용량을 늘리거나 줄일 수 있습니다. 슬롯에 장착 가능한 대상 Form / PropertyForm의 Slot에는 다음 리소스를 장착할 수 있습니다. 장착 시에는 GS2가 발행하는 “소유 증명 서명\"을 SlotWithSignature 로 전달합니다. propertyType 장착 대상 gs2_inventory GS2-Inventory에서 관리하는 ItemSet gs2_simple_inventory GS2-Inventory(Simple)에서 관리하는 SimpleItem gs2_dictionary GS2-Dictionary에서 관리하는 Entry 슬롯 모델( SlotModel )의 propertyRegex 에 정규 표현식을 설정하면 특정 슬롯에 장착 가능한 프로퍼티ID를 제한할 수 있습니다. 예를 들어 “무기 슬롯에는 weapon-* 인 Item만 장착 가능\"과 같은 제한을 구현할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류는 다음과 같습니다. MoldModel : Mold의 저장 슬롯 구성 FormModel : Mold 하위 Form의 슬롯 구성 PropertyFormModel : PropertyForm의 슬롯 구성 마스터 데이터 JSON 예시 { \"version\": \"2019-09-09\", \"moldModels\": [ { \"name\": \"party\", \"metadata\": \"파티 편성\", \"initialMaxCapacity\": 3, \"maxCapacity\": 10, \"formModel\": { \"name\": \"party\", \"slots\": [ { \"name\": \"leader\", \"propertyRegex\": \"character-.*\" }, { \"name\": \"member-1\", \"propertyRegex\": \"character-.*\" }, { \"name\": \"member-2\", \"propertyRegex\": \"character-.*\" } ] } } ], \"propertyFormModels\": [ { \"name\": \"equipment\", \"metadata\": \"캐릭터 장비\", \"slots\": [ { \"name\": \"weapon\", \"propertyRegex\": \"weapon-.*\" }, { \"name\": \"armor\", \"propertyRegex\": \"armor-.*\" } ] } ] } 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 스크립트 트리거 네임스페이스에 updateMoldScript , updateFormScript , updatePropertyFormScript 를 설정하면 편성 데이터의 갱신 전후로 커스텀 스크립트를 실행할 수 있습니다. 스크립트는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기의 경우 GS2-Script나 Amazon EventBridge를 통한 외부 연동에도 대응합니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. updateMoldScript (완료 알림: updateMoldDone ): Mold 갱신 전후 updateFormScript (완료 알림: updateFormDone ): Form 갱신 전후 updatePropertyFormScript (완료 알림: updatePropertyFormDone ): PropertyForm 갱신 전후 트랜잭션 액션 GS2-Formation에서는 다음과 같은 트랜잭션 액션을 제공합니다. 검증 액션: 용량(저장 수량 상한)의 검증 소비 액션: 용량의 감산 입수 액션: 용량의 가산, 용량의 설정, 편성 내용(Form / PropertyForm)의 설정, 편성되어 있는 리소스에 대한 입수 액션의 적용 “편성되어 있는 리소스에 대한 입수 액션의 적용\"을 입수 액션으로 활용하면, 특정 파티 슬롯에 편성되어 있는 캐릭터에 직접 경험치를 가산하는 것과 같은 처리가 가능해집니다. 또한, “용량의 가산\"을 보상으로 설정함으로써 특정 미션을 달성했을 때 편성 슬롯을 자동으로 확장하는 것과 같은 운용도 가능합니다. 구현 예제 Mold에서의 편성 영속화 Form의 Slot에는 GS2-Inventory에서 관리하는 ItemSet / SimpleItem 또는 GS2-Dictionary에서 관리하는 Entry를 등록할 수 있습니다. 각각을 설정하려면 소유 증명 서명을 첨부해야 합니다. 소유 증명 서명의 취득 방법에 대해서는 각 서비스의 설명을 확인해 주세요. propertyType의 종류 gs2_inventory – GS2-Inventory에서 관리하는 ItemSet을 장착 gs2_simple_inventory – GS2-Inventory에서 관리하는 SimpleItem을 장착 gs2_dictionary – GS2-Dictionary에서 관리하는 Entry를 장착 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldName : \"mold-0001\" ). Form ( index : 0 ). SetFormAsync ( slots : new [] { new Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature { Name = \"slot-0001\" , PropertyType = \"gs2_dictionary\" , Body = \"body\" , Signature = \"signature\" , }, }, keyId : \"key-0001\" ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Mold ( \"mold-0001\" // moldName ) -\u003e Form ( 0 // index ); const auto Future = Domain -\u003e SetForm ( [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Formation :: Model :: FSlotWithSignature \u003e\u003e\u003e (); v -\u003e Add ({ ' name ' : ' slot - 0001 ' , ' propertyType ' : ' gs2_dictionary ' , ' body ' : ' body ' , ' signature ' : ' signature ' }); return v ; }(), \"key-0001\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) var async_result = await domain . set_form ( [ Gs2FormationEzSlotWithSignature . new () . with_name ( \"slot-0001\" ) . with_property_type ( \"gs2_dictionary\" ) . with_body ( \"body\" ) . with_signature ( \"signature\" ), ], # slots \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Mold의 용량 인상 용량(저장 수량 상한)의 인상은 게임 엔진용 SDK에서 직접 처리할 수 없습니다. 클라이언트 주도의 용량 조작을 허용하면 부정 조작의 대상이 될 수 있기 때문에, 용량 변경은 트랜잭션 액션을 통해 실시하는 설계로 되어 있습니다. GS2-Exchange에서 과금 통화와의 교환 등의 보상으로 용량을 인상하도록 하십시오. GS2-Exchange의 acquireActions 에 Formation의 용량 가산 액션을 설정함으로써, 과금 아이템이나 미션 보상 지급의 연장선상에서 용량 확장을 구현할 수 있습니다. Mold 정보 취득 Mold 단독 정보(현재 용량)를 취득합니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldName : \"mold-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Mold ( \"mold-0001\" // moldName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Mold에서의 편성 내용 목록 취득 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldName : \"mold-0001\" ). FormsAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Mold ( \"mold-0001\" // moldName ); const auto It = Domain -\u003e Forms ( ); TArray Gs2 :: UE5 :: Formation :: Model :: FEzMoldPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . forms ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result Mold에서의 편성 내용 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldName : \"mold-0001\" ). Form ( index : 0 ). ModelAsync (); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Mold ( \"mold-0001\" // moldName ) -\u003e Form ( 0 // index ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Form 삭제 불필요해진 편성 내용을 삭제합니다. Mold의 용량 자체는 유지되며, index 의 슬롯이 빈 슬롯으로 재사용 가능해집니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldName : \"mold-0001\" ). Form ( index : 0 ). DeleteFormAsync ( ); const auto Future = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Mold ( \"mold-0001\" // moldName ) -\u003e Form ( 0 // index ) -\u003e DeleteForm ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) var async_result = await domain . delete_form ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Property Form에서의 편성 영속화 Form의 Slot에는 GS2-Inventory에서 관리하는 ItemSet 또는 GS2-Dictionary에서 관리하는 Entry를 등록할 수 있습니다. 각각을 설정하려면 소유 증명 서명을 첨부해야 합니다. 소유 증명 서명의 취득 방법에 대해서는 각 서비스의 설명을 확인해 주세요. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( formModelName : \"form-0001\" , propertyId : \"property-0001\" ). SetPropertyFormAsync ( slots : new [] { new Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature { Name = \"slot-0001\" , PropertyType = \"gs2_dictionary\" , Body = \"body\" , Signature = \"signature\" , }, }, keyId : \"key-0001\" ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e PropertyForm ( \"form-0001\" , // formModelName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e SetPropertyForm ( [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Formation :: Model :: FSlotWithSignature \u003e\u003e\u003e (); v -\u003e Add ({ ' name ' : ' slot - 0001 ' , ' propertyType ' : ' gs2_dictionary ' , ' body ' : ' body ' , ' signature ' : ' signature ' }); return v ; }(), \"key-0001\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . property_form ( \"form-0001\" , \"property-0001\" ) var async_result = await domain . set_property_form ( [ Gs2FormationEzSlotWithSignature . new () . with_name ( \"slot-0001\" ) . with_property_type ( \"gs2_dictionary\" ) . with_body ( \"body\" ) . with_signature ( \"signature\" ), ], # slots \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Property Form에서의 편성 내용 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( formModelName : \"form-0001\" , propertyId : \"property-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e PropertyForm ( \"form-0001\" , // formModelName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . property_form ( \"form-0001\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Property Form 삭제 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( formModelName : \"form-0001\" , propertyId : \"property-0001\" ). DeletePropertyFormAsync ( ); const auto Future = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e PropertyForm ( \"form-0001\" , // formModelName \"property-0001\" // propertyId ) -\u003e DeletePropertyForm ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . property_form ( \"form-0001\" , \"property-0001\" ) var async_result = await domain . delete_property_form ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 편성 정보에 대한 서명 취득 Form / PropertyForm의 내용이 변조되지 않았음을 보증한 형태로 다른 시스템에 전달하고 싶은 경우, 서명이 포함된 편성 정보를 취득할 수 있습니다. 배틀 시작 시 서버로 편성 내용을 전송하는 사용 사례 등에서 활용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var domain = await gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldName : \"mold-0001\" ). Form ( index : 0 ). GetFormWithSignatureAsync ( keyId : \"key-0001\" ); const auto Future = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Mold ( \"mold-0001\" // moldName ) -\u003e Form ( 0 // index ) -\u003e GetFormWithSignature ( \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) var async_result = await domain . get_form_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 편성 리소스의 관리와 주의 사항 프로퍼티 지정 방법 폼의 슬롯에 편성하는 프로퍼티는 프로퍼티ID로 지정합니다. 슬롯 모델의 propertyRegex 로 프로퍼티ID의 정규 표현식을 지정함으로써, 해당 슬롯에 편성할 수 있는 값을 한정할 수 있습니다. 소유 증명 서명과 편성 후 주의 사항 GS2-Inventory에서 관리하는 아이템을 슬롯에 설정하는 경우, GS2-Inventory가 발행하는 서명이 포함된 아이템 세트(소유 증명 서명)를 사용해 편성 대상으로 지정할 수 있습니다. 서명이 포함된 아이템 세트가 보증하는 “소유하고 있음\"은 편성 시점에서의 보증이며, 편성 후에 해당 아이템을 매각·소비하더라도 폼의 데이터는 그대로 남아 있습니다. 이 때문에 GS2-Inventory에서 아이템을 소비·매각하는 경우, 사전에 GS2-Formation의 편성에서 사용되고 있지 않은지를 클라이언트 또는 스크립트로 확인할 필요가 있습니다. ItemSet.referenceOf를 이용한 편성 중 아이템 삭제 방지 스탠다드 인벤토리(GS2-Inventory)를 사용하는 경우, ItemSet 의 referenceOf 필드를 이용함으로써 편성 중인 아이템이 실수로 소비·삭제되는 것을 방지할 수 있습니다. 폼의 슬롯에 아이템을 설정할 때, 해당 슬롯을 식별하는 문자열(GRN 등)을 ItemSet.referenceOf 에 설정합니다. 스탠다드 인벤토리의 인벤토리 모델 설정에는 “ referenceOf에 값이 존재하는 경우 소비를 금지한다 “는 옵션이 있습니다. 이 옵션을 활성화하면 ItemSet.referenceOf 가 비어 있지 않은 아이템은 소비·매각할 수 없게 되므로, 편성 중인 아이템에 대해 시스템 레벨에서 삭제 제한을 걸 수 있습니다. 상세 레퍼런스 GS2-Formation API 레퍼런스","lang":"ko","section":"microservices","summary":"파티·장비 편성 기능\n","title":"GS2-Formation","url":"/ko/microservices/formation/"},{"content":"GS2-Freeze 는 게임에서 이용하는 GS2 마이크로서비스의 버전을 임의의 시점에 고정(freeze)하고, 운영 측이 관리하는 시점에 버전을 업데이트할 수 있도록 하기 위한 기능입니다. 일반적으로 GS2 의 마이크로서비스는 지속적으로 버전 업이 이루어지며, 게임은 항상 최신 버전의 API 를 이용하게 됩니다. 대부분의 타이틀에서는 이러한 운용에 문제가 없지만, 출시 직후의 대규모 타이틀이나 장기간에 걸쳐 안정성을 최우선으로 하고 싶은 상황에서는 서비스 측의 업데이트 시점을 게임 운영 측에서 컨트롤하고 싶다는 요구가 존재합니다. GS2-Freeze 는 이러한 요구에 응답하기 위한 엔터프라이즈 대상 기능입니다. 팁 GS2-Freeze 는 엔터프라이즈 대상 기능으로, 모든 고객에게 광범위하게 제공되는 기능은 아닙니다. 이용을 희망하시는 경우 지원팀으로 문의해 주세요. 스테이지 GS2-Freeze 의 핵심이 되는 개념이 “스테이지 (Stage)” 입니다. 스테이지는 “특정 시점에 고정된 GS2 마이크로서비스 버전의 집합” 을 나타냅니다. 각 스테이지에는 다음의 정보가 연결됩니다. 스테이지 이름 (name): 스테이지를 고유하게 식별하는 이름 소스 스테이지 이름 (sourceStageName): 버전 정보를 취득하는 원본이 되는 스테이지의 이름 정렬 순서 (sortNumber): 개발·검증·본번과 같은 스테이지의 정렬 순서를 나타내는 번호 상태 (status): 스테이지의 상태 (프로모트 중, 롤백 중 등) 게임의 클라이언트·서버는 이용하고 싶은 스테이지를 지정하여 GS2 의 API 를 호출함으로써, 해당 스테이지에 고정된 버전의 마이크로서비스를 이용할 수 있습니다. graph LR Latest[\"최신 GS2 마이크로서비스\"] -- Promote --\u003e StageDev[\"Stage: dev\"] StageDev -- Promote --\u003e StageStg[\"Stage: staging\"] StageStg -- Promote --\u003e StageProd[\"Stage: production\"] Game[\"게임 클라이언트\"] -- API 요청 --\u003e StageProd 프로모트 / 롤백 스테이지의 버전을 업데이트하는 조작을 “프로모트 (Promote)” 라고 부릅니다. 프로모트를 실행하면 소스 스테이지에 고정되어 있는 버전이 대상 스테이지로 복사됩니다. 예를 들어 “staging 스테이지의 버전을 production 스테이지로 프로모트한다” 와 같은 방식으로 검증이 완료된 버전을 본번에 반영할 수 있습니다. 프로모트 후에 문제가 발견된 경우에는 “롤백 (Rollback)” 을 실행하여 직전 버전으로 되돌릴 수 있습니다. 프로모트·롤백은 시간이 걸리는 처리일 수 있으며, 내부적으로는 비동기 처리로 실행됩니다. 처리의 중간 경과는 Output 으로 기록되어, 이후에 상태를 확인할 수 있습니다. 스테이지의 정렬 순서 sortNumber 를 이용함으로써, 여러 스테이지를 “개발”, “스테이징”, “본번” 과 같은 계층으로 나열할 수 있습니다. 정렬 순서는 매니지먼트 콘솔 상의 표시 순서나, 프로모트 대상을 선택할 때의 참고 정보로 사용됩니다. 트랜잭션 액션 GS2-Freeze 에서는 트랜잭션 액션을 제공하지 않습니다. 마스터 데이터 관리 GS2-Freeze 는 스테이지 자체가 운용상의 구성 정보이며, 일반적인 마이크로서비스에 있는 “마스터 데이터 임포트 / 익스포트” 는 제공하지 않습니다. 스테이지의 생성·업데이트·삭제는 매니지먼트 콘솔이나 GS2-Deploy 에서 수행합니다. 구현 예제 GS2-Freeze 는 관리 API 중심의 마이크로서비스입니다. 게임 엔진용 SDK (Unity / Unreal Engine / Godot) 에는 전용 Domain 클래스가 제공되지 않습니다. 스테이지의 생성·프로모트·롤백과 같은 조작은 게임 클라이언트에서 직접 호출하는 것이 아니라, 다음 중 하나의 수단으로 조작할 것을 권장합니다. 매니지먼트 콘솔 GS2 CLI 각종 언어용 일반 SDK (C# / Go / Python / TypeScript / PHP / Java) GS2-Deploy 를 통한 템플릿 관리 각 SDK 의 상세 내용은 해당하는 레퍼런스 페이지를 참조하세요. 보다 실전적인 정보 개발·검증·본번 3단계 스테이지 운용 대표적인 이용 패턴은 개발용·검증용·본번용의 3개 스테이지를 준비하여, 왼쪽에서 오른쪽으로 순서대로 프로모트해 가는 운용입니다. 개발 스테이지 (dev): 최신 GS2 마이크로서비스를 이용하여 신규 기능의 동작 확인을 수행 검증 스테이지 (staging): 개발 스테이지에서 검증이 완료된 버전을 프로모트하여 QA 나 리허설을 수행 본번 스테이지 (production): 검증 스테이지에서 품질을 확인한 후 프로모트하여 게임 플레이어에게 제공 이러한 운용을 통해, GS2 측에서 새로운 릴리스가 이루어지더라도 게임 운영 측이 원하는 시점에만 본번 반영을 수행할 수 있습니다. 문제 발생 시의 즉시 롤백 본번 스테이지로 프로모트한 후 결함이 발견된 경우, 롤백을 실행하여 직전 버전으로 즉시 되돌릴 수 있습니다. 게임 측에 변경을 가하지 않고 서비스 측의 버전만 되돌릴 수 있으므로, 긴급 대응의 선택지로 유용합니다. 상세 레퍼런스 GS2-Freeze API 레퍼런스","lang":"ko","section":"microservices","summary":"GS2 마이크로서비스의 버전을 고정하는 엔터프라이즈 대상 기능\n","title":"GS2-Freeze","url":"/ko/microservices/freeze/"},{"content":"게임 전용 소셜 그래프를 형성하기 위한 기능을 제공합니다. 소셜 그래프는 플랫폼 측에서도 제공되는 경우가 있지만, 게임 내에서 독자적으로 형성하는 것에도 가치가 있습니다. 플랫폼 전체에서 사용되는 친구 관계는 등록을 신중하게 하는 경향이 있습니다. 왜냐하면 “지금 함께 플레이하고 있는 이 게임에서는 함께 하고 싶지만, 다른 게임까지 함께 플레이하고 싶지는 않다\"는 케이스가 존재하기 때문입니다. 플랫포머가 제공하는 소셜 그래프는 현실에 가까운 관계성을 반영한 것이고, 게임 고유의 소셜 그래프는 그 게임 내에서의 관계성을 반영한 것으로 취급하면, 플레이어는 더 부담 없이 친구 기능을 이용하게 됩니다. 친구 친구가 되기 위해서는 쌍방향의 동의 관계가 필요합니다. 친구 관계를 구축하고자 하는 플레이어 중 한쪽이 상대방에게 친구 요청을 보내고, 친구 요청을 받은 플레이어가 이를 승낙함으로써 친구 관계가 성립합니다. 팔로우 팔로우는 상대방의 동의 없이 관계를 구축할 수 있습니다. 팔로우당하고 있는 사람은 자신을 누가 팔로우하고 있는지를 목록으로 알 수 있는 방법이 없습니다. 이 사양은 소셜 네트워크의 팔로우 사양을 떠올리면 위화감이 들 수도 있습니다. 그러나 게임 내에서 팔로우 기능을 구현하고 있는 많은 게임의 사양을 살펴본 결과, 그 필요성이 없다고 판단했습니다. 자신을 팔로우하고 있는 플레이어가 자신의 고스트 캐릭터와 함께 모험을 떠난 경우, 모험에서 얻은 보상을 나누어 주기만 하면 충분하며, 누가 함께 모험해 주었는지에는 그다지 관심이 없었기 때문입니다. 목록으로 조회할 수는 없지만, 모험에서 얻은 보상을 나누어 주는 처리로서 GS2-Inbox에 보상이 포함된 메시지를 전달할 때 메시지의 페이로드에 함께 모험을 떠난 플레이어의 사용자ID를 실음으로써, 프로필을 전달하는 것 자체는 가능합니다. 프로필 GS2-Friend는 플레이어의 프로필을 보관하는 영역을 제공합니다. 프로필에는 임의의 값을 보관할 수 있으며, 공간이 3곳 존재합니다. 다른 플레이어가 자유롭게 참조할 수 있는 “퍼블릭 프로필” 해당 플레이어를 팔로우하고 있는 플레이어가 참조할 수 있는 “팔로워 프로필” 친구가 참조할 수 있는 “친구 프로필” 각각 용도에 맞게 구분하여 사용할 수 있습니다. 블랙리스트 게임을 오래 플레이하다 보면 불쾌하게 느껴지는 플레이어가 있을 수 있습니다. 그러한 플레이어를 목록화하여 영속화하는 기능입니다. 어디까지나 영속화하는 기능이 존재할 뿐이며, 여기에 추가하는 것만으로는 아무런 기능도 하지 않습니다. GS2-Matchmaking의 매치메이킹 조건에 목록을 전달하는 등, 별도로 여기에 기록한 목록을 필요에 따라 사용해야 합니다. 스크립트 트리거 네임스페이스에 followScript · unfollowScript · sendRequestScript · cancelRequestScript · acceptRequestScript · rejectRequestScript · deleteFriendScript · updateProfileScript 를 설정하면, 팔로우나 친구 요청, 프로필 갱신 등 각 조작의 전후로 커스텀 스크립트를 실행할 수 있습니다. 스크립트는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기에서는 GS2-Script나 Amazon EventBridge를 통한 외부 연계에도 대응합니다. 이러한 설정은 GS2-Deploy나 각 언어용 CDK로 템플릿화하여 관리할 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. followScript (완료 알림: followDone ): 팔로우 전후 unfollowScript (완료 알림: unfollowDone ): 팔로우 해제 전후 sendRequestScript (완료 알림: sendRequestDone ): 친구 요청 전송 전후 cancelRequestScript (완료 알림: cancelRequestDone ): 친구 요청 취소 전후 acceptRequestScript (완료 알림: acceptRequestDone ): 친구 요청 승낙 전후 rejectRequestScript (완료 알림: rejectRequestDone ): 친구 요청 거부 전후 deleteFriendScript (완료 알림: deleteFriendDone ): 친구 삭제 전후 updateProfileScript (완료 알림: updateProfileDone ): 프로필 갱신 전후 푸시 알림 설정할 수 있는 주요 푸시 알림과 설정명은 다음과 같습니다. followNotification : 팔로우되었을 때 알림 receiveRequestNotification : 친구 요청 수신 시 알림 cancelRequestNotification : 친구 요청이 취소되었을 때 알림 acceptRequestNotification : 친구 요청 승낙 시 알림 rejectRequestNotification : 친구 요청 거부 시 알림 deleteFriendNotification : 친구 삭제 시 알림 모두 GS2-Gateway를 경유하여 리얼타임으로 알림을 보낼 수 있으며, 오프라인 단말로의 모바일 푸시 알림 전송도 활성화할 수 있습니다. 트랜잭션 액션 GS2-Friend에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 획득 액션: 프로필 갱신 “프로필 갱신\"을 획득 액션으로 이용함으로써, 게임 내 화폐를 소비하여 플레이어 이름을 변경하는 등, 일련의 트랜잭션 안에 프로필 갱신을 포함시킬 수 있습니다. 구현 예제 프로필 갱신 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Profile ( ). UpdateProfileAsync ( publicProfile : \"public\" , followerProfile : \"follower\" , friendProfile : \"friend\" ); var item = await result . ModelAsync (); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Profile ( ); const auto Future = Domain -\u003e UpdateProfile ( \"public\" , // publicProfile \"follower\" , // followerProfile \"friend\" // friendProfile ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . profile ( ) var async_result = await domain . update_profile ( \"public\" , # public_profile \"follower\" , # follower_profile \"friend\" # friend_profile ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 자신의 프로필 조회 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Profile ( ). ModelAsync (); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Profile ( ); const auto item = Domain . Model (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . profile ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 다른 사람의 공개 프로필 조회 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). PublicProfile ( ). ModelAsync (); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e PublicProfile ( ); const auto item = Domain . Model (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . public_profile ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 친구 요청 전송 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendRequestAsync ( targetUserId : \"user-0002\" ); const auto Future = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e SendRequest ( \"user-0002\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . send_request ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 전송한 친구 요청 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendRequestsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e SendRequests ( ); TArray Gs2 :: UE5 :: Friend :: Model :: FEzFriendRequestPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . send_requests ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 수신한 친구 요청 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveRequestsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e ReceiveRequests ( ); TArray Gs2 :: UE5 :: Friend :: Model :: FEzFriendRequestPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_requests ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 친구 요청 승낙 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( fromUserId : \"user-0002\" ). AcceptAsync ( ); const auto Future = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e ReceiveFriendRequest ( nullptr , // targetUserId \"user-0002\" // fromUserId ) -\u003e Accept ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_friend_request ( \"user-0002\" ) var async_result = await domain . accept ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 친구 요청 거부 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( fromUserId : \"user-0002\" ). RejectAsync ( ); const auto Future = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e ReceiveFriendRequest ( nullptr , // targetUserId \"user-0002\" // fromUserId ) -\u003e Reject ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_friend_request ( \"user-0002\" ) var async_result = await domain . reject ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 친구 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). FriendsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Friends ( // withProfile ); TArray Gs2 :: UE5 :: Friend :: Model :: FEzFriendUserPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . friends ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 친구 삭제 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Friend ( withProfile : null ). FriendUser ( targetUserId : \"user-0002\" ). DeleteFriendAsync ( ); const auto Future = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Friend ( nullptr // withProfile ) -\u003e FriendUser ( \"user-0002\" // targetUserId ) -\u003e DeleteFriend ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . friend ( null ) var async_result = await domain . delete_friend ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 팔로우 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). FollowUser ( targetUserId : \"user-0002\" , withProfile : true ). FollowAsync ( ); const auto Future = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e FollowUser ( \"user-0002\" , // targetUserId true // withProfile ) -\u003e Follow ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . follow ( true ) . follow_user ( \"user-0002\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 팔로우 중인 플레이어 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). FollowsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Follows ( ); TArray Gs2 :: UE5 :: Friend :: Model :: FEzFollowUserPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . follows ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 언팔로우 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). FollowUser ( targetUserId : \"user-0002\" , withProfile : true ). UnfollowAsync ( ); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e FollowUser ( \"user-0002\" , // targetUserId true // withProfile ); const auto Future = Domain -\u003e Unfollow ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . follow ( null ) . follow_user ( \"user-0002\" ) var async_result = await domain . unfollow ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 블랙리스트에 등록 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BlackList ( ). RegisterBlackListAsync ( targetUserId : \"user-0002\" ); const auto Future = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BlackList ( ) -\u003e RegisterBlackList ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . black_list ( ) var async_result = await domain . register_black_list ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 블랙리스트에서 해제 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BlackList ( ). UnregisterBlackListAsync ( targetUserId : \"user-0002\" ); const auto Future = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BlackList ( ) -\u003e UnregisterBlackList ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . black_list ( ) var async_result = await domain . unregister_black_list ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 블랙리스트 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BlackListUsersAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BlackListUsers ( ); TArray FString \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . black_list_users ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 상한 인원수 친구 수 및 팔로우 수의 상한은 각각 1000명입니다. 단, 연동하는 서비스에 따라서는 각 서비스의 정책에 따라 추가 제한이 붙을 수 있습니다. 상세 레퍼런스 GS2-Friend API 레퍼런스","lang":"ko","section":"microservices","summary":"친구·팔로우 기능\n","title":"GS2-Friend","url":"/ko/microservices/friend/"},{"content":"GS2-Gateway는 게임 클라이언트와 서버 사이에서 WebSocket을 통한 상시 접속을 유지하고, 서버가 임의의 시점에 알림을 보낼 수 있도록 하는 기능을 제공합니다. 일반적인 게임 서버와의 통신은 클라이언트의 요청에 서버가 응답하는 형태이지만, GS2-Gateway를 사용하면 서버가 시작하는 알림(메시지 수신, 친구 신청, 길드로부터의 소집 등)을 실시간으로 클라이언트에 전달할 수 있습니다. sequenceDiagram participant Client participant Gateway as GS2-Gateway participant Service as 각 마이크로서비스 Client-\u003e\u003eGateway: WebSocket 접속 Client-\u003e\u003eGateway: SetUserId(인증) Service-\u003e\u003eGateway: SendNotification Gateway-\u003e\u003eClient: 알림 페이로드 전달 주요 기능 WebSocket 상시 접속 GS2-Gateway는 WebSocket 프로토콜로 클라이언트로부터의 접속을 받아들이고, 사용자별로 접속 정보를 보유합니다. 다른 마이크로서비스로부터 “이 사용자에게 알림을 보내고 싶다\"는 요청이 오면, 접속 중인 클라이언트에 페이로드를 전달합니다. 주요 연계 대상은 다음과 같습니다. GS2-Inbox: 신규 메시지 수신 알림 GS2-Friend: 친구 신청·승인 알림 GS2-Guild: 길드 참가 신청, 길드 내 상황 변화 알림 GS2-Matchmaking: 매칭 완료 알림 GS2-Distributor: 트랜잭션 자동 실행을 위한 알림 GS2-JobQueue: 신규 작업이 쌓였을 때의 알림 동시 접속 제어 네임스페이스 내의 사용자는 원칙적으로 동시에 하나의 세션만 보유할 수 있습니다. SetUserId 실행 시 allowConcurrentAccess 를 false 로 설정하면, 이미 다른 세션이 접속 중인 경우 새로운 세션 측에서 동시 접속 오류로 감지할 수 있습니다. true 로 설정하면, 새로운 세션이 접속된 시점에 기존 세션이 끊어집니다. 이 기능을 이용하면 여러 기기에서의 동시 로그인을 억제할 수 있습니다. GS2-Account의 비밀번호 자동 변경 기능과 조합하면, 계정 공유나 인수인계 후 이전 기기의 접속 차단을 더욱 강력하게 수행할 수 있습니다. Firebase Cloud Messaging 연계 (모바일 푸시 알림) 클라이언트가 실행되지 않은 (WebSocket이 접속되지 않은) 상태에서도 알림을 전달하고 싶은 경우, Firebase Cloud Messaging (FCM)과의 연계 기능을 이용할 수 있습니다. 사전에 네임스페이스의 firebaseSecret 에 FCM의 서버 키(또는 서비스 계정 크리덴셜)를 등록해 두고, 각 사용자의 기기에서 취득한 FCM 토큰을 GS2-Gateway에 등록해 둡니다. GS2-Gateway는 알림 전달 시 WebSocket 세션이 존재하지 않는 사용자에 대해서는, 등록된 FCM 토큰을 사용해 FCM을 통해 푸시 알림을 보냅니다. 이를 통해 앱이 실행되지 않은 상태에서도 사용자에게 알림을 전달할 수 있습니다. 알림 엔트리의 enableTransferMobileNotification 을 활성화하면, 알림별로 모바일 푸시로의 전달 여부를 제어할 수 있습니다. WebSocket API 설정 GS2의 클라이언트 SDK (Unity / Unreal Engine / Godot)에는 GS2-Gateway의 WebSocket 접속을 자동으로 확립·유지하는 유틸리티가 내장되어 있습니다. 로그인 시 GatewaySetting 을 지정하면, 로그인 처리 흐름에 맞추어 WebSocket 접속과 SetUserId 호출을 자동으로 수행할 수 있습니다. 설정 항목은 다음과 같습니다. gatewayNamespaceName : 사용할 GS2-Gateway의 네임스페이스 이름 allowConcurrentAccess : 동시 접속을 허용할지 여부 트랜잭션 액션 GS2-Gateway에서는 트랜잭션 액션을 제공하지 않습니다. 마스터 데이터 관리 GS2-Gateway는 마스터 데이터를 가지지 않습니다. 네임스페이스 설정에서 Firebase 연계 정보나 로그 설정을 구성합니다. 구현 예제 로그인 시 WebSocket 접속을 확립 GatewaySetting 을 지정하여 로그인하면, SDK가 자동으로 WebSocket 세션을 확립하고 SetUserId 를 호출하여 사용자ID를 연결합니다. Game Engine: Unity Unreal Engine Godot var gameSession = await gs2 . LoginAsync ( new Gs2AccountAuthenticator ( accountSetting : new AccountSetting { accountNamespaceName = this . accountNamespaceName , }, gatewaySetting : new GatewaySetting { gatewayNamespaceName = \"namespace-0001\" , allowConcurrentAccess = false , } ), account . UserId , account . Password ); const auto Future = Profile -\u003e Login ( MakeShareable Gs2 :: UE5 :: Util :: IAuthenticator \u003e ( new Gs2 :: UE5 :: Util :: FGs2AccountAuthenticator ( AccountNamespaceName , KeyId , \"namespace-0001\" , // gatewayNamespaceName false // allowConcurrentAccess ) ), UserId , Password ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var authenticator = Gs2AccountAuthenticator . new ( \"account-namespace-0001\" , \"grn:gs2: {region}:{ownerId} :key:namespace-0001:key:key-0001\" , \"gateway-namespace-0001\" , false ) var game_session = Gs2GameSession . new ( authenticator , connection , account . user_id , account . password ) var async_result = await game_session . login () if async_result . error != null : push_error ( str ( async_result . error )) return 명시적으로 사용자ID를 설정 이미 접속되어 있는 WebSocket 세션에 사용자ID를 연결하고 싶은 경우나, 로그인 후에 동시 접속 허용 상태를 변경하고 싶은 경우에는 SetUserId 를 호출합니다. Game Engine: Unity Unreal Engine Godot var domain = await gs2 . Gateway . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). WebSocketSession ( ). SetUserIdAsync ( allowConcurrentAccess : false ); const auto Future = Gs2 -\u003e Gateway -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e WebSocketSession ( ) -\u003e SetUserId ( false // allowConcurrentAccess ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . gateway . namespace_ ( \"$hash\" ) . me ( game_session ) . web_socket_session ( ) var async_result = await domain . set_user_id ( true , # allow_concurrent_access null # session_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 보다 실전적인 정보 동시 접속 끊김 처리 allowConcurrentAccess: false 설정으로 접속 중일 때 다른 단말기에서 동일 사용자가 로그인을 수행하면, 현재의 WebSocket 세션이 끊어집니다. 클라이언트는 접속 끊김 이벤트를 감지하여, 재로그인을 유도하는 화면으로 전환하거나 “다른 단말기에서 로그인되었습니다\"라는 메시지를 표시하는 등의 대응을 해야 합니다. 이를 통해 여러 단말기에서의 동시 플레이를 실질적으로 금지하는 운영이 가능해집니다. 버전 업데이트 시 전체 플레이어 접속 끊기 GS2-Version과 조합하여, 신규 버전 공개 시 모든 플레이어의 WebSocket 세션을 끊음으로써, 재접속 시점에 강제로 버전 체크를 통과시키는 운영이 가능합니다. 자세한 내용은 GS2-Version 의 “버전 업데이트 운영 절차\"를 참조하십시오. 상세 레퍼런스 GS2-Gateway API 레퍼런스","lang":"ko","section":"microservices","summary":"WebSocket 알림 기능\n","title":"GS2-Gateway","url":"/ko/microservices/gateway/"},{"content":"캐릭터나 장비의 육성에는 단기 성장 목표인 레벨업과는 별도로 그레이드업을 마련하는 것이 일반적인 사양입니다. 그레이드업을 하면 레벨 캡을 끌어올릴 수 있어 캐릭터나 장비를 더욱 강력하게 육성할 수 있게 됩니다. 그레이드업 방법에는 여러 가지가 있을 수 있으며, 육성 소재를 소비함으로써 그레이드업할 수 있는 것이나, 같은 종류의 캐릭터나 장비를 합성함으로써 그레이드업할 수 있는 것도 있습니다. GS2-Grade는 방법을 따지지 않고, 그레이드별로 레벨 캡을 설정함으로써 GS2-Experience의 레벨 캡 운용을 더 간단하게 구현할 수 있도록 하는 것을 목적으로 합니다. graph LR Player[\"플레이어의 소지물\"] -- 그레이드업 --\u003e Grade[\"GS2-Grade (그레이드 값 상승)\"] Grade -- ApplyRankCap --\u003e Experience[\"GS2-Experience (랭크 캡이 반영)\"] Experience -- 경험치 획득 --\u003e LevelUp[\"레벨업\"] 그레이드 그레이드별로 GS2-Experience의 랭크 캡에 설정할 값을 정의할 수 있습니다. 그레이드는 캐릭터나 장비 같은 대상을 고유하게 가리키는 propertyId 별로 관리되며, Status 로 개별 보관됩니다. 필드 설명 gradeName 그레이드 모델 이름 propertyId 그레이드를 적용할 리소스를 나타내는 GRN(예: GS2-Inventory의 ItemSet) gradeValue 현재 그레이드 값(0부터 시작하는 정수) 그레이드의 초기값 프로퍼티 ID가 정규 표현식에 일치하는지에 따라 초기 그레이드 값을 설정할 수 있습니다. 예를 들어, GS2-Inventory의 ItemModel 이름이 SSR로 시작하는 경우에는 그레이드 3, SR로 시작하는 경우에는 그레이드 2로 시작하도록 설정함으로써 ItemModel의 종류에 따라 초기 랭크 캡을 다르게 설정할 수 있습니다. 마스터 데이터의 defaultGrades 에 여러 개의 propertyIdRegex 와 defaultGradeValue 쌍을 등록함으로써 초기 그레이드를 선언합니다. 그레이드업 소재 판정 그레이드업 방법 중 “같은 종류의 캐릭터나 장비를 합성하는” 경우에, 소재로 사용하려는 리소스가 “같은 종류의 캐릭터나 장비\"인지를 판정하는 처리를 지원하는 기능이 마련되어 있습니다. 그레이드의 프로퍼티 ID에서 정규 표현식으로 파라미터를 추출해 정규 표현식을 구성하고, 소재로 사용하려는 리소스의 프로퍼티 ID가 이에 일치하는지를 판정함으로써 구현합니다. 예를 들어, GS2-Inventory의 ItemSet이 같은 종류의 ItemModel에 의한 것인지를 판정하는 경우에는 다음과 같이 정규 표현식을 설정합니다. propertyIdRegex: grn:gs2:{region}:{ownerId}:inventory:namespace-0001:user:(.*):inventory:character:item:(.*):.* gradeUpPropertyIdRegex: grn:gs2:{region}:{ownerId}:inventory:namespace-0001:user:$1:inventory:character:item:$2:.* 이를 통해 propertyIdRegex를 사용해 “사용자ID\"와 “ItemModel의 이름\"을 추출합니다. 사용자ID가 “user-0001”, ItemModel의 이름이 “item-0001”, ItemSet의 이름이 “item-set-0001\"이라면, ItemSet의 GRN(프로퍼티 ID)은 grn:gs2:{region}:{ownerId}:inventory:namespace-0001:user:user-0001:inventory:character:item:item-0001:item-set-0001 가 되며, gradeUpPropertyIdRegex 치환 후의 값은 gradeUpPropertyIdRegex: grn:gs2:{region}:{ownerId}:inventory:namespace-0001:user:user-0001:inventory:character:item:item-0001:.* 가 됩니다. 이를 통해 같은 종류의 아이템을 소재로 지정할 수 있는 표현이 가능해집니다. 보상 가산 테이블 그레이드 모델에는 acquireActionRates 를 설정할 수 있으며, 그레이드에 따라 입수 액션의 보상량을 조정할 수 있습니다. 이를 활용하면 “고그레이드 캐릭터는 퀘스트 보상 획득량이 늘어난다”, “그레이드별로 경험치 배율이 달라진다\"와 같은 성장 요소를 구현할 수 있습니다. mode 설명 double rates 에 설정한 배율을 부동소수점으로 곱합니다. 일반적인 아이템 획득량 보정에 사용합니다. big bigRates 에 설정한 배율을 문자열 형식으로 처리하며, int64를 초과하는 수치를 다루는 GS2-Inventory의 BigItem 등 대량 보상을 취급하는 경우에 대응합니다. 트랜잭션의 입수 액션에 Gs2Grade:MultiplyAcquireActionsByUserId 를 포함시키면, 지정한 그레이드의 배율을 적용한 입수 액션 목록으로 변환할 수 있습니다. 스크립트 트리거 네임스페이스에 changeGradeScript 를 설정하면, 그레이드 변화 전후에 커스텀 스크립트를 실행할 수 있습니다. 트리거는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기 처리에서는 GS2-Script나 Amazon EventBridge를 활용한 외부 연동도 가능합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. changeGradeScript (완료 알림: changeGradeDone ): 그레이드 변화 전후 트랜잭션 액션 GS2-Grade에서는 다음과 같은 트랜잭션 액션을 제공합니다. 종류 액션 설명 검증 Gs2Grade:VerifyGradeByUserId 지정한 그레이드 값인지 검증 검증 Gs2Grade:VerifyGradeUpMaterialByUserId 그레이드업 소재로 유효한지( gradeUpPropertyIdRegex 에 일치하는지)를 검증 소비 Gs2Grade:SubGradeByUserId 그레이드 감산 입수 Gs2Grade:AddGradeByUserId 그레이드 가산 입수 Gs2Grade:AddRankCapByUserId 그레이드에 대응하는 랭크 캡을 GS2-Experience에 반영 입수 Gs2Grade:MultiplyAcquireActionsByUserId 그레이드에 따른 acquireActionRates 의 배율을 적용한 입수 액션으로 변환 “그레이드업 소재 검증\"을 검증 액션으로 활용하면, 합성에 사용하려는 소재(다른 아이템이나 캐릭터)를 실제로 보유하고 있는지와 같은 검증을 트랜잭션 내에서 수행할 수 있습니다. 이를 통해 부정한 소재 지정에 의한 그레이드업을 방지할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 사용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. GradeModel : 그레이드별 랭크 캡이나 보상량 이하는 마스터 데이터의 JSON 예시입니다. { \"version\": \"2022-06-01\", \"gradeModels\": [ { \"name\": \"grade-0001\", \"metadata\": \"Character Grade\", \"experienceModelId\": \"grn:gs2:{region}:{ownerId}:experience:namespace-0001:model:experienceModel-0001\", \"defaultGrades\": [ { \"propertyIdRegex\": \".*:item:SSR.*\", \"defaultGradeValue\": 3 }, { \"propertyIdRegex\": \".*:item:SR.*\", \"defaultGradeValue\": 2 } ], \"gradeEntries\": [ { \"metadata\": \"Grade 0\", \"rankCapValue\": 30 }, { \"metadata\": \"Grade 1\", \"rankCapValue\": 40 }, { \"metadata\": \"Grade 2\", \"rankCapValue\": 50 }, { \"metadata\": \"Grade 3\", \"rankCapValue\": 60 } ], \"acquireActionRates\": [ { \"name\": \"experience\", \"mode\": \"double\", \"rates\": [1.0, 1.2, 1.5, 2.0] } ] } ] } 마스터 데이터의 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 구현 예제 그레이드 가산 그레이드 가산은 게임 엔진용 SDK에서는 처리할 수 없습니다. GS2-Exchange에서 강화 소재를 소비할 때나, GS2-Enhance의 강화 보상으로 트랜잭션 액션 Gs2Grade:AddGradeByUserId 를 포함시켜 그레이드를 가산하도록 해 주세요. 이를 통해 부정한 클라이언트 조작에 의한 그레이드업을 방지하면서, 서버 측에서 정합성을 유지한 채 성장 요소를 구현할 수 있습니다. 그레이드 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StatusesAsync ( gradeName : \"grade-0001\" ). ToListAsync (); const auto It = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Statuses ( \"grade-0001\" // gradeName ); TArray Gs2 :: UE5 :: Grade :: Model :: FEzStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . grade . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . statuses ( \"grade-0001\" ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 그레이드 조회 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). GradeModel ( gradeName : \"grade-0001\" ). ModelAsync (); const auto Future = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GradeModel ( \"grade-0001\" // gradeName ) -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . grade . namespace_ ( \"namespace-0001\" ) . grade_model ( \"grade-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 개별 그레이드(Status) 조회 특정 propertyId (캐릭터, 장비 등)에 대한 현재 그레이드 값을 조회합니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( gradeName : \"grade-0001\" , propertyId : \"property-0001\" ). ModelAsync (); const auto Future = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"grade-0001\" , // gradeName \"property-0001\" // propertyId ) -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . grade . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"grade-0001\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result GS2-Experience의 랭크 캡 동기화 그레이드가 변화하면, GS2-Experience의 랭크 캡 반영은 자동으로 이루어집니다. 다만, 그레이드 모델을 갱신해 특정 그레이드의 랭크 캡 값을 갱신한 경우에는 아래의 동기화 API를 명시적으로 호출함으로써 갱신 후의 랭크 캡을 적용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( gradeName : \"grade-0001\" , propertyId : \"property-0001\" ). ApplyRankCapAsync ( ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"grade-0001\" , // gradeName \"property-0001\" // propertyId ) -\u003e ApplyRankCap ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . grade . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"grade-0001\" , \"property-0001\" ) var async_result = await domain . apply_rank_cap ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-Grade API 레퍼런스","lang":"ko","section":"microservices","summary":"그레이드·희귀도 기능","title":"GS2-Grade","url":"/ko/microservices/grade/"},{"content":"GS2-Guard는 GS2의 API 엔드포인트에 대한 접근을 보호하기 위한 기능을 제공합니다. 특정 국가나 지역, IP 주소, 익명화된 IP, 호스팅 사업자의 IP, 평판이 나쁜 IP 등 다양한 조건으로 발신지를 판정하여, API 요청을 허용·거부하는 구조를 구축할 수 있습니다. 부정 이용이나 치트 행위, 공격적인 트래픽으로부터 게임 서버를 지키기 위한, 이른바 게임 전용 경량 WAF(Web Application Firewall)로 기능합니다. GS2-Guard는 게임 클라이언트에서 직접 이용하는 기능이 아니라, 운영 측에서 차단 정책을 정의하고 다른 GS2 마이크로서비스의 API에 적용하기 위한 구조입니다. 차단 정책 GS2-Guard의 네임스페이스에는 BlockingPolicyModel 을 1개 설정할 수 있으며, 여기에 접근 제어 규칙을 기술합니다. GS2의 각 마이크로서비스의 네임스페이스에서 대상 GS2-Guard 네임스페이스를 참조함으로써, 해당 마이크로서비스에 대한 API 요청에 차단 정책이 적용됩니다. 차단 정책에서 설정할 수 있는 주요 항목은 다음과 같습니다. 기본 제한 (defaultRestriction): 기본적으로 API 요청을 허용할지 거부할지 예외적으로 허용할 서비스 (passServices): 제한을 적용하지 않을 GS2 서비스명 목록 지리적 제한 (locationDetection / locations / locationRestriction): 요청 발신지의 국가·지역을 판정하여, 특정 국가·지역만 허용·거부 익명 IP 제한 (anonymousIpDetection / anonymousIpRestriction): Tor 출구 노드나 VPN 등, 익명화 서비스를 경유한 요청을 판정하여 허용·거부 호스팅 사업자 IP 제한 (hostingProviderIpDetection / hostingProviderIpRestriction): 클라우드 사업자 등 호스팅에서 유래한 IP의 요청을 판정하여 허용·거부 평판이 나쁜 IP 제한 (reputationIpDetection / reputationIpRestriction): 공격의 발판으로 알려지는 등 평판이 나쁜 IP의 요청을 판정하여 허용·거부 개별 IP 주소 제한 (ipAddressesDetection / ipAddresses / ipAddressRestriction): 임의의 IP 주소·CIDR 범위를 지정하여 허용·거부 graph LR Client[\"게임 클라이언트\"] -- API 요청 --\u003e Guard[\"GS2-Guard (차단 정책 판정)\"] Guard -- 허용 --\u003e Microservice[\"다른 GS2 마이크로서비스\"] Guard -- 거부 --\u003e Block[\"403 / 접근 거부\"] 검출과 제한의 분리 각 검출 조건(Detection)은 “비활성\"과 “활성” 중 하나를 가지며, 검출 조건이 활성인 경우 “대응하는 제한(Restriction)“이 적용됩니다. 이를 통해 검출만 수행하여 로그에 남겨두고, 한동안 상황을 확인한 후에 본격적으로 거부를 활성화하는 등의 단계적인 운영이 가능합니다. 기본 동작과 화이트리스트 / 블랙리스트의 구분 사용 defaultRestriction 을 “허용\"으로 설정한 후 개별 판정 조건에서 “거부\"를 조합함으로써 블랙리스트형 정책을 구축할 수 있습니다. 반대로 defaultRestriction 을 “거부\"로 설정한 후 passServices 나 ipAddresses 로 예외를 허용함으로써 화이트리스트형 정책을 구축할 수 있습니다. 다른 마이크로서비스에 대한 적용 GS2-Guard는 단독으로 사용하는 서비스가 아니라, 다른 마이크로서비스의 네임스페이스에서 참조되어야 비로소 효과를 발휘합니다. 각 마이크로서비스의 네임스페이스 설정에서 GS2-Guard의 네임스페이스를 지정하면, 해당 네임스페이스로 향하는 API 요청에 설정된 차단 정책이 적용됩니다. 여러 마이크로서비스에서 동일한 GS2-Guard 네임스페이스를 참조함으로써 횡단적으로 접근 제어를 통일할 수 있습니다. 트랜잭션 액션 GS2-Guard에서는 트랜잭션 액션을 제공하지 않습니다. 마스터 데이터 관리 GS2-Guard는 GS2에서 일반적인 “마스터 데이터 임포트/익스포트\"가 아니라, 네임스페이스 자체의 설정으로 차단 정책을 보유합니다. 차단 정책은 관리 콘솔에서 설정하는 것 외에도, GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수도 있습니다. 차단 정책 등록의 YAML 예시는 다음과 같은 형태입니다. blockingPolicy: defaultRestriction: Allow passServices: - account - version locationDetection: Enable locations: - JP locationRestriction: Deny anonymousIpDetection: Enable anonymousIpRestriction: Deny hostingProviderIpDetection: Enable hostingProviderIpRestriction: Deny reputationIpDetection: Enable reputationIpRestriction: Deny ipAddressesDetection: Enable ipAddresses: - 203.0.113.0/24 ipAddressRestriction: Deny 구현 예제 GS2-Guard는 관리 API 중심의 마이크로서비스입니다. 게임 엔진용 SDK(Unity / Unreal Engine / Godot)에는 전용 Domain 클래스가 제공되지 않습니다. 네임스페이스의 생성·취득이나 차단 정책 설정과 같은 조작은 게임 클라이언트에서 직접 호출하는 것이 아니라, 다음 중 하나의 수단으로 조작하는 것을 권장합니다. 관리 콘솔 GS2 CLI 각종 언어용 일반 SDK (C# / Go / Python / TypeScript / PHP / Java) GS2-Deploy를 통한 템플릿 관리 각 SDK의 상세 내용은 해당 레퍼런스 페이지를 참조하십시오. 더 실무적인 정보 단계적인 정책 도입 새롭게 차단 정책을 도입할 때, 처음부터 모든 항목을 거부로 설정하면 예상치 못하게 정상적인 플레이어를 차단해 버릴 우려가 있습니다. 처음에는 검출만 활성화하여 로그로 영향 범위를 확인한 후, 단계적으로 거부 설정으로 전환해 나가는 운영이 권장됩니다. 서비스별 예외 설정 passServices 를 활용하면 특정 GS2 마이크로서비스에 대해서는 차단 정책을 적용하지 않는 등의 예외 설정이 가능합니다. 예를 들어 로그인 처리나 버전 체크는 엄격한 IP 제한을 완화해 두고, 과금이나 랭킹처럼 부정의 영향이 큰 API에만 엄격한 정책을 적용하는 등의 운영이 가능합니다. 상세 레퍼런스 GS2-Guard API 레퍼런스","lang":"ko","section":"microservices","summary":"치트 방지·WAF·차단 정책 기능\n","title":"GS2-Guard","url":"/ko/microservices/guard/"},{"content":"여러 플레이어가 팀을 만들어 함께 어떤 목표를 향해 활동할 수 있도록 하는 기능이 길드 기능입니다. GS2-Guild는 길드 멤버의 관리와, 길드 멤버가 실행할 수 있는 권한 관리를 수행하기 위한 마이크로서비스입니다. GS2-Guild에서 ‘길드’는 한 명의 플레이어로 취급되며, 길드 사용자라고 부릅니다. 길드 멤버는 길드 사용자로서 정보를 조회·갱신할 수 있는 페더레이션을 수행함으로써, 길드 멤버가 공통 프로퍼티를 조작할 수 있는 상태를 실현합니다. 예를 들어 플레이어A 와 플레이어B 가 소속되어 있는 길드A 가 있다고 가정해 봅시다. 플레이어 레벨 이나 스태미나 와 같은 일반적인 정보가 플레이어A 와 플레이어B 에 연결되어 관리된다는 것은 쉽게 상상할 수 있을 것입니다. 이와 마찬가지로 길드A 에 연결하여 길드 레벨 과 같은 프로퍼티를 연결해서 관리하는 것도 쉽게 상상할 수 있을 것입니다. GS2-Guild의 사상에서 특징적인 부분은, 플레이어A , 플레이어B 와 길드A 사이에 명확한 구분이 없으며 모두 동일하게 사용자 로 취급하여 처리한다는 점입니다. 그렇기 때문에 길드가 가지는 프로퍼티는 GS2의 모든 사용자 데이터를 다루는 마이크로서비스를 사용하여 관리할 수 있습니다. 예를 들어 길드에 GS2-Experience의 랭크·경험치를 부여할 수도 있고, GS2-Stamina의 스태미나를 부여할 수도 있으며, GS2-SkillTree의 스킬 트리를 부여할 수도 있습니다. 또한, GS2-Guild는 길드 멤버를 관리함과 동시에, 길드 멤버가 길드 사용자 로서 GS2의 API를 호출할 수 있는 액세스 토큰을 발급하는 기능을 가지고 있습니다. 이때 길드 사용자로서 어떤 API를 호출할 수 있는지를 더욱 세밀하게 제어하기 위한 접근 권한 제어 기능이 있습니다. 이 기능을 이용하면 길드 마스터 직책을 가진 플레이어만이 길드 사용자로서 GS2-Showcase의 상품을 구매할 수 있도록 하는 기능을 구현할 수 있습니다. 길드 모델 길드 단위의 설정은 GuildModel로 관리합니다. defaultMaximumMemberCount 와 maximumMemberCount 로 멤버의 초기값과 상한을 정하고, inactivityPeriodDays 에 길드 마스터의 비활동 기간을 지정하면 자동으로 후계자를 선출할 수 있습니다. rejoinCoolTimeMinutes 로 탈퇴 후 재참가 쿨타임을, maxConcurrentJoinGuilds 나 maxConcurrentGuildMasterCount 로 동시 참가 길드 수나 길드 마스터 인원 제한도 설정할 수 있습니다. 길드 멤버 길드에 소속되어 있는 플레이어를 가리킵니다. 역할 길드에 소속된 플레이어의 직책에 해당하는 엔티티로, 실행 가능한 API의 종류를 정의합니다. 하나의 길드 모델에 최대 10종류의 역할을 정의할 수 있습니다. 권한 설정 역할에는 GS2-Identifier의 정책 문서 를 정의할 수 있습니다. 길드 사용자로 전환하기 전의 권한 \u0026\u0026 역할의 권한 범위 내에서 API를 호출할 수 있습니다. 즉, 역할에 강력한 권한을 설정하더라도, 원래 길드 사용자로 접근하고 있을 때 호출할 수 없었던 API를 호출할 수 있게 되지는 않습니다. 정책 문서 예시 길드 마스터에 해당하는 최소한의 정책 { \"Version\": \"2016-04-01\", \"Statements\": [ { \"Effect\": \"Allow\", \"Actions\": [ \"Gs2Guild:Describe*\", \"Gs2Guild:Get*\", \"Gs2Guild:AcceptRequest\", \"Gs2Guild:RejectRequest\", \"Gs2Guild:DeleteMember\", \"Gs2Guild:DescribeIgnoreUsers\", \"Gs2Guild:AddIgnoreUser\", \"Gs2Guild:GetIgnoreUser\", \"Gs2Guild:DeleteIgnoreUser\", \"Gs2Gateway:SetUserId\" ], \"Resources\": [\"*\"] } ] } 길드 사용자에 해당하는 최소한의 정책 { \"Version\": \"2016-04-01\", \"Statements\": [ { \"Effect\": \"Allow\", \"Actions\": [ \"Gs2Guild:Describe*\", \"Gs2Guild:Get*\", \"Gs2Guild:PromoteSeniorMember\", \"Gs2Gateway:SetUserId\" ], \"Resources\": [\"*\"] } ] } 실전 예시 권한은 GS2-Identifier의 정책 문서 형식을 사용하여 정의합니다. 구체적인 예로, 길드 관리 권한과 길드 사용자의 GS2-Experience API를 호출하는 권한을 부여한다고 가정해 봅시다. { \"Version\": \"2016-04-01\", \"Statements\": [ { \"Effect\": \"Allow\", \"Actions\": [ \"Gs2Guild:Describe*\", \"Gs2Guild:Get*\", \"Gs2Guild:AcceptRequest\", \"Gs2Guild:RejectRequest\", \"Gs2Guild:DeleteMember\", \"Gs2Guild:DescribeIgnoreUsers\", \"Gs2Guild:AddIgnoreUser\", \"Gs2Guild:GetIgnoreUser\", \"Gs2Guild:DeleteIgnoreUser\", \"Gs2Gateway:SetUserId\", \"Gs2Experience:*\" ], \"Resources\": [\"*\"] } ] } 앞부분의 ‘Gs2Guild’로 시작하는 부분이 길드 사용자로서 실행 가능한 API를 선언하는 부분으로, 멤버 관리에 필요한 API가 지정되어 있습니다. ‘Gs2Gateway:SetUserId’는 길드 사용자에 관한 알림을 수신할 수 있도록 하는 권한 설정입니다. 이 선언이 없으면 알림을 받을 수 없어, 길드 참가 신청이 도착한 것이나 길드 사용자에 관한 프로퍼티 변화를 앱이 알 수 없게 됩니다. 마지막의 ‘Gs2Experience:*‘가 GS2-Experience의 모든 API를 호출할 수 있는 권한을 부여하는 부분입니다. 그런데 여기서 ‘Gs2Experience:*‘라고 작성해 버리면, ‘Gs2Experience:AddExperienceByUserId’와 같이 임의의 플레이어에게 임의의 경험치를 부여하는 API도 호출할 수 있게 되는 것은 아닐까 하고 불안하게 느껴질 수도 있습니다. 하지만 사용자 페더레이션을 할 경우, 페더레이션하기 전의 액세스 토큰이 가진 권한보다 더 강한 권한을 얻을 수는 없습니다. 따라서 일반적인 게임 플레이어가 가지고 있을 ‘ApplicationAccess’ 권한으로는 원래 ‘Gs2Experience:AddExperienceByUserId’를 호출할 수 없으므로, 역할의 정책 문서에 모든 API를 호출할 수 있도록 기술하더라도 ‘Gs2Experience:AddExperienceByUserId’를 호출할 수 있게 되지는 않습니다. GS2-Showcase에서 길드 마스터만이 길드 사용자로서 상품을 구매할 수 있도록 하고 싶다면, 길드 마스터의 역할에만 ‘Gs2Showcase:Buy’를 부여하는 방식으로 대응하면 세밀한 권한 관리가 가능합니다. 커스텀 역할 길드 고유의 역할입니다. 플레이어가 권한 조합을 자유롭게 정의하도록 하고 싶은 경우에 사용할 수 있습니다. 참가 인원 길드에는 참가 인원 제한을 설정할 수 있습니다. 참가 인원의 상한은 길드 단위로 인상할 수 있으며, 길드 레벨 상승과 함께 참가 인원 상한을 늘리는 구현도 가능합니다. 참가 방침 길드마다 참가 방침을 설정할 수 있습니다. ‘자유 참가’와 ‘승인제’를 설정할 수 있습니다. 자유 참가 참가 리퀘스트를 보내면, 길드 멤버에 빈자리가 있는 경우 즉시 참가할 수 있습니다. 승인제 참가 리퀘스트를 보내도 곧바로 길드 멤버가 되지는 않습니다. 길드 멤버 중 승인 권한을 가진 플레이어의 승인을 받아야 길드 멤버가 될 수 있습니다. 길드 검색 길드 표시 이름 길드의 표시 이름으로 등록한 문자열의 부분 일치로 검색할 수 있습니다. 속성값 길드에는 최대 5종류의 속성값을 설정할 수 있습니다. 속성값은 정수값만 가능하며, 길드 검색 조건으로 사용할 수 있습니다. 길드를 검색할 때는 검색 조건으로 각 속성값에 대해 최대 10종류의 값으로 좁혀서 검색할 수 있습니다. 속성값을 대소 비교로 좁혀서 검색할 수는 없습니다. 검색 조건에 여러 속성값을 지정한 경우에는 AND 조건으로 검색됩니다. OR로 검색하는 방법은 없습니다. 멤버가 최대치에 도달한 길드를 검색 결과에 포함할지 여부 참/거짓 값으로 지정할 수 있습니다. true를 지정하면 멤버가 최대치에 도달한 길드도 검색 결과에 포함됩니다. 참고로, 멤버가 최대치에 도달한 길드에 대해서도 참가 리퀘스트를 보내는 것은 가능합니다. 검색 대상 검색 대상에는 지난 24시간 이내에 갱신된 길드만 포함됩니다. 이는 활성 상태가 아닌 길드를 대상에서 제외하면서, 검색에 필요한 비용을 최소화하려는 목적으로 이러한 사양으로 되어 있습니다. 길드 마스터는 특별히 변경 사항이 없더라도 하루에 한 번은 길드 정보를 갱신하도록 구현해 주십시오. 참고로, 갱신에는 멤버의 증감이나 역할 할당도 포함됩니다. 길드 참가 쿨다운 길드 참가 쿨다운 파라미터를 설정하면, 어딘가의 길드에서 탈퇴한 후 쿨다운으로 설정한 시간(분 단위)이 경과할 때까지 다른 길드에 참가 리퀘스트를 보낼 수 없습니다. 여러 길드 참가 플레이어는 여러 길드에 동시에 참가할 수 있습니다. 참가 가능한 길드 수에 제약을 두고 싶은 경우에는 애플리케이션에서 제어해 주십시오. 길드 마스터가 은퇴했을 때의 긴급 조치 유일한 길드 마스터가 아무런 예고 없이 은퇴해 버린 경우, 길드 유지가 어려워집니다. 이러한 상황에 빠졌을 때를 위한 긴급 조치를 마련해 두고 있습니다. 길드 마스터의 최종 활동 시간 조회 GetLastGuildMasterActivity 함수를 이용하면, 길드 마스터 역할을 보유한 플레이어가 마지막으로 Assume한 일시를 조회할 수 있습니다. 이 일시를 확인함으로써 길드 마스터 역할을 가진 ‘누가’ ‘언제’ 접근한 것이 마지막 접근인지를 판단할 수 있습니다. 긴급 조치 활성화 대기 일수 GuildModel에는 긴급 조치를 활성화하기 위해 대기해야 하는 일수를 정의할 수 있습니다. 길드 마스터의 최종 활동 시간으로부터 여기서 정한 일수가 경과하면 긴급 조치를 실행할 수 있게 됩니다. 긴급 조치 실행 긴급 조치의 실행은 PromoteSeniorMember를 호출하여 수행할 수 있습니다. 이 API를 호출하면 길드 멤버 중 참가 일시가 가장 오래된 플레이어를 새로운 길드 마스터로 승격시킵니다. 이때 최종 활동 시간도 승격된 플레이어가 활동한 것으로 갱신됩니다. 즉, 이 고참 멤버도 장기간 활동하지 않은 경우에는 추가로 일정 기간을 더 기다려야 합니다. 길드 마스터 교체 알림 GS2-Guild 자체에는 길드 마스터 교체에 관한 알림을 보내는 구조는 없습니다. 다만, 길드 멤버의 역할이 갱신되었을 때 실행되는 스크립트를 정의할 수 있으므로, 스크립트에서 길드 채팅에 메시지를 남기는 등의 추가 처리를 함으로써 길드 멤버가 길드 마스터 교체에 관한 정보를 알 수 있게 할 수 있습니다. 스크립트 트리거 네임스페이스에 createGuildScript · updateGuildScript · joinGuildScript · receiveJoinRequestScript · leaveGuildScript · changeRoleScript · deleteGuildScript 를 설정하면, 길드 생성이나 갱신, 참가·탈퇴, 역할 변경 등 각 처리의 전후에 커스텀 스크립트를 실행할 수 있습니다. 스크립트는 동기 실행뿐만 아니라 Amazon EventBridge를 이용한 비동기 실행도 선택할 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. createGuildScript (완료 알림: createGuildDone ): 길드 생성 전후 updateGuildScript (완료 알림: updateGuildDone ): 길드 정보 갱신 전후 joinGuildScript (완료 알림: joinGuildDone ): 길드 참가 전후 receiveJoinRequestScript (완료 알림: receiveJoinRequestDone ): 참가 리퀘스트 접수 전후 leaveGuildScript (완료 알림: leaveGuildDone ): 길드 탈퇴 전후 changeRoleScript (완료 알림: changeRoleDone ): 역할 변경 전후 deleteGuildScript (완료 알림: deleteGuildDone ): 길드 삭제 전후 푸시 알림 설정할 수 있는 주요 푸시 알림과 설정 이름은 다음과 같습니다. changeNotification : 길드 정보 변경 시 알림 joinNotification : 멤버 참가 시 알림 leaveNotification : 멤버 탈퇴 시 알림 changeMemberNotification : 멤버 정보 변경 시 알림 receiveRequestNotification : 참가 리퀘스트 접수 시 알림 removeRequestNotification : 참가 리퀘스트 삭제 시 알림 모두 GS2-Gateway를 경유하여 리얼타임으로 알릴 수 있으며, 오프라인 단말로의 모바일 푸시 전달도 지정할 수 있습니다. 트랜잭션 액션 GS2-Guild에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 검증 액션: 길드 멤버 포함 여부 확인(특정 사용자가 멤버인지), 최대 참가 가능 인원 검증 소비 액션: 최대 참가 가능 인원 감산 획득 액션: 최대 참가 가능 인원 가산, 최대 참가 가능 인원 설정 ‘길드 멤버 포함 여부 확인’을 검증 액션으로 이용함으로써, 특정 길드에 소속된 멤버만 받을 수 있는 보상이나, 특정 길드 멤버가 아닌 경우에만 실행 가능한 처리와 같은 제한을 트랜잭션 안에 포함시킬 수 있습니다. 이를 통해 길드 대항 이벤트의 보상 배포나, 길드 미소속자 한정 권유 캠페인 등을 안전하게 구현할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음과 같은 것이 있습니다. GuildModel : 멤버 상한이나 재참가 쿨타임 등의 설정 RoleModel : 길드 내 권한을 정의하는 역할 마스터 데이터 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성하는 것도 가능합니다. 구현 예제 길드 생성 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CreateGuildAsync ( guildModelName : \"guild-model-0001\" , displayName : \"My Guild\" , joinPolicy : \"anybody\" , attribute1 : 1 , attribute2 : null , attribute3 : null , attribute4 : null , attribute5 : null , customRoles : null , guildMemberDefaultRole : null ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e CreateGuild ( \"guild-model-0001\" , // guildModelName \"My Guild\" , // displayName \"anybody\" , // joinPolicy 1 , // attribute1 TOptional int32 \u003e (), // attribute2 TOptional int32 \u003e (), // attribute3 TOptional int32 \u003e (), // attribute4 TOptional int32 \u003e (), // attribute5 nullptr , // customRoles TOptional FString \u003e () // guildMemberDefaultRole ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . create_guild ( \"guild-model-0001\" , # guild_model_name \"My Guild\" , # display_name \"anybody\" , # join_policy 1 , # attribute1 null , # attribute2 null , # attribute3 null , # attribute4 null , # attribute5 null , # metadata null , # member_metadata null , # custom_roles null # guild_member_default_role ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 길드 검색 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SearchGuildsAsync ( guildModelName : \"guild-model-0001\" , displayName : \"My Guild\" , attributes1 : new int [] { 0 , 1 }, attributes2 : null , attributes3 : null , attributes4 : null , attributes5 : null , joinPolicies : null , includeFullMembersGuild = null ). ToListAsync (); const auto It = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SearchGuilds ( \"guild-model-0001\" , // guildModelName \"My Guild\" , // displayName MakeShared TArray int32 \u003e\u003e ([]{ TArray int32 \u003e v ; v . Add ( 0 ); v . Add ( 1 ); return v ; }()), // attributes1 TSharedPtr TArray int32 \u003e\u003e (), // attributes2 TSharedPtr TArray int32 \u003e\u003e (), // attributes3 TSharedPtr TArray int32 \u003e\u003e (), // attributes4 TSharedPtr TArray int32 \u003e\u003e (), // attributes5 TSharedPtr TArray FString \u003e\u003e (), // joinPolicies TOptional bool \u003e ( true ) // includeFullMembersGuild ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzGuildPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . search_guilds ( \"guild-model-0001\" , # guild_model_name null , # display_name null , # attributes1 null , # attributes2 null , # attributes3 null , # attributes4 null , # attributes5 null , # join_policies null , # include_full_members_guild null # order_by ) . load () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 길드에 참가 리퀘스트 전송 길드의 참가 방침이 ‘자유 참가’인 경우에는 즉시 길드 멤버가 됩니다 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendRequestAsync ( guildModelName : \"guild-0002\" , targetGuildName : \"guild-0002\" ); const auto Future = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SendRequest ( \"guild-0002\" , // guildModelName \"guild-0002\" // targetGuildName ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . send_request ( \"guild-0002\" , # guild_model_name \"guild-0002\" , # target_guild_name null # metadata ) if async_result . error != null : if async_result . error . type == \"MaximumMembersReachedException\" : # 멤버 수가 상한에 도달했습니다. pass if async_result . error . type == \"MaximumJoinedGuildsReachedException\" : # 동시에 참가할 수 있는 길드 수가 최대값에 도달했습니다. pass if async_result . error . type == \"MaximumReceiveRequestsReachedException\" : # 길드에 대한 참가 리퀘스트 수가 상한에 도달했습니다. pass if async_result . error . type == \"MaximumSendRequestsReachedException\" : # 자신이 보낸 참가 리퀘스트 수가 상한에 도달했습니다. pass if async_result . error . type == \"DotMeetJoinRequirementsException\" : # 길드 참가 조건을 충족하지 않습니다. pass push_error ( str ( async_result . error )) return var result = async_result . result 전송한 참가 리퀘스트 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendRequestsAsync ( guildModelName : \"guild-0002\" ). ToListAsync (); const auto It = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SendRequests ( \"guild-0002\" // guildModelName ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzSendMemberRequestPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . send_requests ( \"guild-0002\" ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 참가 리퀘스트 철회 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CancelRequestAsync ( guildModelName : \"guild-0002\" , targetGuildName : \"guild-0002\" ); const auto Future = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e CancelRequest ( \"guild-0002\" , // guildModelName \"guild-0002\" // targetGuildName ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . cancel_request ( \"guild-0002\" , # guild_model_name \"guild-0002\" # target_guild_name ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 길드 사용자로서 접근하기 위한 게임 세션 취득 Game Engine: Unity Unreal Engine Godot var guildGameSession = await gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AssumeAsync ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); const auto Future = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Assume ( \"guild-model-0001\" , // guildModelName \"guild-0001\" // guildName ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto GuildGameSession = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . assume ( \"gateway-namespace-0001\" , false , \"guild-model-0001\" , \"guild-0001\" ) if async_result . error != null : push_error ( str ( async_result . error )) return var guild_game_session = async_result . result 수신한 참가 리퀘스트 목록 조회 Game Engine: Unity Unreal Engine Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : guildGameSession ); var items = await domain . ReceiveRequestsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // guildGameSession ) -\u003e ReceiveRequests ( ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzReceiveMemberRequestPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-0001\" , guild_game_session ) . receive_requests ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 참가 리퀘스트 승인 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // guildGameSession ). ReceiveMemberRequest ( fromUserId : \"user-0001\" ). AcceptRequestAsync ( ); const auto Future = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // guildGameSession ) -\u003e ReceiveMemberRequest ( \"user-0001\" // fromUserId ) -\u003e AcceptRequest ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-0001\" , guild_game_session ) . receive_member_request ( \"user-0001\" ) var async_result = await domain . accept_request () if async_result . error != null : push_error ( str ( async_result . error )) return 참가 리퀘스트 거부 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // guildGameSession ). ReceiveMemberRequest ( fromUserId : \"user-0001\" ). RejectRequestAsync ( ); const auto Future = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // guildGameSession ) -\u003e ReceiveMemberRequest ( \"user-0001\" // fromUserId ) -\u003e RejectRequest ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-0001\" , guild_game_session ) . receive_member_request ( \"user-0001\" ) var async_result = await domain . reject_request () if async_result . error != null : push_error ( str ( async_result . error )) return 상세 레퍼런스 GS2-Guild API 레퍼런스","lang":"ko","section":"microservices","summary":"길드 기능","title":"GS2-Guild","url":"/ko/microservices/guild/"},{"content":"GS2-Identifier는 GS2 관리 콘솔 및 GS2 API에 접근하기 위한 크리덴셜을 관리하는 서비스입니다. GS2 오너 계정에 연결된 사용자, 각 사용자에게 부여되는 권한(보안 정책), 그리고 실제 API 호출에 사용하는 클라이언트ID/클라이언트시크릿을 발급·관리합니다. GS2-Identifier는 게임 클라이언트에서 직접 호출하는 것을 상정하지 않은 서비스이며, 운영 측의 셋업이나 배포 자동화, CI/CD 파이프라인 등에서 이용됩니다. IAM 적인 설계 GS2-Identifier는 클라우드 서비스의 IAM(Identity and Access Management)에 상당하는 개념을 제공합니다. 주요 요소는 다음과 같습니다. 사용자: GS2 오너 계정 산하에 생성하는 개별 이용 주체 보안 정책: 조작 가능한 리소스와 액션을 기술한 정책 문서 보안 정책의 어태치: 사용자에게 보안 정책을 연결하여 권한을 부여 클라이언트ID/클라이언트시크릿: 사용자별로 발급되는 API 인증 정보 graph TD Owner[\"GS2 오너\"] --\u003e User[\"사용자\"] User --\u003e|어태치| Policy[\"보안 정책\"] User --\u003e|발급| Credential[\"클라이언트ID 클라이언트시크릿\"] Credential --\u003e|인증| API[\"GS2 API\"] Policy --\u003e|권한 제어| API 보안 정책 보안 정책은 JSON 형식으로 기술된 권한 정의입니다. 허용할 리소스 GRN과 허용할 액션( Gs2Account:CreateAccount 와 같은 조작 식별자)을 기술함으로써, 해당 정책이 어태치된 사용자에게 어떤 조작을 허용할지를 표현합니다. 개발·운영의 각 단계에 맞는 적절한 정책을 설계하여, 사용자별로 최소 권한을 부여하는 운영을 권장합니다. 클라이언트ID/클라이언트시크릿 사용자에게 발급되는 클라이언트ID와 클라이언트시크릿은 GS2 API를 호출할 때의 인증 정보로 사용됩니다. 한 명의 사용자에게 여러 개의 크리덴셜을 발급할 수 있으며, 용도나 디바이스에 따라 구분하여 사용할 수 있습니다. 클라이언트시크릿은 발급 시에만 취득할 수 있으며, 그 이후에는 GS2에서 다시 조회할 수 없습니다. 만약 유출된 경우에는 해당 크리덴셜을 삭제하고 재발급해 주십시오. GS2-Version과 연동한 권한의 단계적 부여 GS2-Identifier에서는 사용자에게 연결된 크리덴셜에 “가드\"로서 GS2-Version의 Project Token 발급을 요구할 수 있습니다. 구체적으로는, 애플리케이션에 내장된 클라이언트ID/클라이언트시크릿에는 “로그인과 버전 체크를 실행할 수 있는 정도\"의 약한 권한만 부여해 두고, 버전 체크에 성공한 후 발급되는 강한 권한의 크리덴셜을 사용하여 게임 본편에 접근하는 설계가 가능합니다. graph TD App[\"애플리케이션 내장 크리덴셜 (최소 권한)\"] --\u003e|버전 체크| Version[\"GS2-Version\"] Version --\u003e|Project Token 발급| App App --\u003e|Project Token을 이용한 인증| Strong[\"강한 권한의 크리덴셜\"] Strong --\u003e|게임 본편 API 호출| API[\"GS2 API\"] 이 흐름을 통해 오래된 애플리케이션 바이너리나 지원이 종료된 에셋 버전에서 동작하는 클라이언트가 게임 본편의 API에 계속 접근하는 것을 방지할 수 있습니다. 자세한 내용은 GS2-Version 문서를 참조해 주세요. 2단계 인증 GS2 관리 콘솔에 로그인하는 사용자에 대해 2단계 인증을 활성화할 수 있습니다. GS2-Identifier에서는 2단계 인증 설정 정보를 관리합니다. 트랜잭션 액션 GS2-Identifier에서는 트랜잭션 액션을 제공하지 않습니다. 마스터 데이터 관리 GS2-Identifier에서는 마스터 데이터 등록이 없습니다. 보안 정책이나 사용자, 크리덴셜 등은 관리 콘솔이나 GS2-Deploy, API를 통해 직접 관리합니다. 구현 예제 GS2-Identifier는 관리 API/서버 사이드 API 중심의 마이크로서비스입니다. 게임 엔진용 SDK(Unity/Unreal Engine/Godot)에는 전용 Domain 클래스가 제공되지 않습니다. 사용자·보안 정책·크리덴셜의 관리 조작은 운영 측의 셋업이나 배포 자동화, CI/CD 파이프라인에서 실행하는 것을 상정하고 있으므로, 다음 중 하나의 수단으로 조작하는 것을 권장합니다. GS2 관리 콘솔(GUI로 사용자·정책·크리덴셜을 조작) GS2-Deploy 템플릿에 사용자·정책·크리덴셜의 정의를 작성하여 CI에서 반영 각종 언어용 범용 SDK(C#/Go/Python/TypeScript/PHP/Java)를 이용한 운영 도구에서의 관리 API 호출 GS2 CLI 각종 SDK의 상세 내용은 해당 레퍼런스 페이지를 참조해 주세요. Project Token 취득 예외적으로, 사용자에 대한 로그인(Project Token 발급)을 애플리케이션 측에서 실행하는 경우가 있습니다. 내장된 클라이언트ID/클라이언트시크릿을 사용하여 Login API를 호출하고, 취득한 Project Token을 GS2 API의 인증 정보로 사용함으로써, 사용자에게 연결된 보안 정책의 범위 내에서 API를 호출할 수 있습니다. 로그인 API는 게임 엔진용 SDK의 Domain을 경유하지 않고, 각종 언어용 범용 SDK(C#/Go/Python/TypeScript/PHP/Java)를 사용하여 호출해 주세요. GS2-Version과 조합하는 경우에는 버전 체크 후에 Project Token을 발급함으로써 권한의 단계적 부여를 실현할 수 있습니다. 보다 실전적인 정보 운영 단계별 권한 분리 개발 단계와 프로덕션 단계에서는 필요한 권한의 종류와 강도가 다릅니다. GS2-Identifier에서는 사용자별로 서로 다른 보안 정책을 어태치할 수 있으므로, 다음과 같은 계정 설계를 고려할 수 있습니다. 개발자 사용자: 개발 환경 리소스에 대한 읽기/쓰기 권한만 운용 사용자: 프로덕션 환경 리소스에 대한 읽기와 제한적인 쓰기 권한 CI 사용자: GS2-Deploy 실행에 필요한 권한 게임 클라이언트 내장 사용자: 로그인과 버전 체크만 실행 가능 이용 주체별로 전용 크리덴셜을 발급하고 최소 권한의 원칙에 따라 운영함으로써, 만약 크리덴셜이 유출되더라도 그 영향을 한정할 수 있습니다. 크리덴셜 로테이션 보안을 유지하기 위해 클라이언트ID/클라이언트시크릿은 정기적으로 로테이션할 것을 권장합니다. 새로운 크리덴셜을 발급한 후 기존 크리덴셜을 삭제하는 절차를 밟음으로써, 무중단으로 전환할 수 있습니다. 상세 레퍼런스 GS2-Identifier API 레퍼런스","lang":"ko","section":"microservices","summary":"크리덴셜 관리 기능\n","title":"GS2-Identifier","url":"/ko/microservices/identifier/"},{"content":"게임을 플레이하지 않은 기간에 따라 보상을 지급하는 구조를 구현합니다. 스마트폰 대상 게임에서는 “오랜만에 앱을 실행했더니 대량의 보상을 획득할 수 있었다\"는 디자인이 플레이어의 재방문 촉진에 크게 기여합니다. GS2-Idle은 이러한 방치 보상을 간단하게 도입하기 위한 마이크로서비스입니다. graph LR Start[\"대기 시작\"] --\u003e Idle[\"방치 시간 경과\"] Idle --\u003e Prediction[\"획득 예정 보상 조회\"] Prediction --\u003e Receive[\"보상 수령\"] Receive --\u003e Start 카테고리 방치 보상은 여러 개를 준비할 수 있습니다. 플레이어는 카테고리별로 1개의 대기 시간을 가질 수 있습니다. 카테고리는 “캐릭터의 스태미나 자연 회복”, “채굴장의 자동 채굴”, “소재의 자동 생성” 등, 각각 독립된 방치 보상의 단위로 활용할 수 있습니다. 대기 시간 카테고리에는 대기 시간(몇 분마다 보상을 얻을 수 있는지)과 대기 시간 최댓값의 초깃값을 설정할 수 있습니다. 대기 시간의 최댓값은 플레이어별로 늘릴 수 있습니다. 보상 수령 후에 미소진된 대기 시간을 초기화할지 다음으로 이월할지는 rewardResetMode 로 선택할 수 있습니다. rewardResetMode 동작 Reset 보상 수령 시 경과 시간이 0으로 초기화됩니다. 획득 타이밍의 나머지 시간은 폐기됩니다. CarryOver 보상 수령 시 획득한 인터벌만큼 경과 시간에서 차감됩니다. 나머지 시간은 다음 대기에도 이어집니다. 방치 보상 방치 보상에는 대기 시간이 일정 시간 경과하면 얻을 수 있는 아이템 목록을 정의합니다. 지급하는 보상은 “경험치+아이템\"처럼 여러 개(최대 10개)를 설정할 수 있습니다. 또한, 대기 시간 내에서 보상 내용에 변화를 줄 수 있도록 여러 개의 보상 목록을 설정할 수 있습니다. 예를 들어, 10분 대기할 때마다 “경험치+10\"과 “강화 소재 Lv.1 x 1\"을 얻을 수 있습니다. 단, 60분마다인 타이밍에는 위 보상 대신 “경험치+20\"과 “강화 소재 Lv.2 x 1\"을 얻을 수 있습니다. 위와 같은 예시를 생각해 봅시다. 이 경우, 방치 보상에는 다음과 같은 테이블을 설정합니다. - 보상1 보상2 1 경험치+10 강화 소재 Lv.1 x 1 2 경험치+10 강화 소재 Lv.1 x 1 3 경험치+10 강화 소재 Lv.1 x 1 4 경험치+10 강화 소재 Lv.1 x 1 5 경험치+10 강화 소재 Lv.1 x 1 6 경험치+20 강화 소재 Lv.2 x 1 이렇게 하면 경과 시간에 따라 보상 아이템 내용을 변경할 수 있습니다. 보상 내용은 순환하므로, 2시간 경과 후에는 “1,2,3,4,5,6,1,2,3,4,5,6” 순서의 아이템을 얻게 됩니다. 방치 보상의 랜덤 추첨 보상 내용에 좀 더 무작위성을 부여하고 싶은 경우가 있습니다. 그러한 경우에는 보상에 GS2-Lottery의 추첨 처리를 설정해 주세요. 기존의 GS2-Lottery에서는 추첨을 수행할 때까지 결과가 정해지지 않지만, GS2-Idle을 사용하는 경우에는 대기 시작 시점에 난수 시드를 생성하고 보상 계산 시 그 난수 시드를 이용해 추첨을 수행함으로써, 대기 도중에도 무작위로 추첨된 아이템 내용을 플레이어에게 제시할 수 있으며, 내용은 불변이 됩니다. (GS2-Lottery의 경품 테이블을 변경하면 이 전제는 무너집니다) 대기 시간의 스케줄 관리 이벤트와 연동한 방치 보상을 구현할 수 있도록, 카테고리별로 GS2-Schedule의 이벤트와 연결할 수 있습니다. 이벤트 개최 기간을 2023-01-01 00:00 ~ 2023-02-01 00:00으로 하고, 2023-01-31 23:00부터 대기를 시작했다고 가정합시다. 이 경우, 2023-02-01 00:00이 되는 시점에 방치 시간 카운트가 정지합니다. 따라서 2023-02-01 01:00에 보상을 수령하는 경우도, 2023-02-01 09:00에 보상을 수령하는 경우도 내용은 동일합니다. 이벤트에 반복 설정이 있는 경우, 반복 횟수가 바뀌는 시점에 방치 시간이 초기화됩니다. 예를 들어 매주 월요일 00:00 ~ 화요일 00:00에 반복되는 이벤트의 경우, 다음 주 월요일 00:00이 되는 순간 전주의 보상을 수령하지 않았더라도 대기 시간은 초기화됩니다. 대기 시간의 스케줄과는 별도로, 보상 수령 가능 기간을 설정할 수 있습니다. 수령 가능 기간 외에도 Prediction으로 예정 보상을 가져올 수는 있지만, 수령 API를 호출하면 오류가 발생합니다. 상태 플레이어는 카테고리별로 1개의 Status 를 보유합니다. Status 에는 다음과 같은 정보가 포함됩니다. 필드 설명 idleStartedAt 대기 시작 시각 idleMinutes 누적 방치 시간(분) nextRewardsAt 다음 보상 획득 타이밍 maximumIdleMinutes 이 플레이어에게 적용되는 방치 시간의 상한 randomSeed GS2-Lottery와 결합한 추첨용 고정 시드 구현 예제 대기 시작 처음으로 대기 시간 정보를 가져올 때 대기가 시작됩니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( category : \"category-0001\" ). ModelAsync (); const auto Future = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( \"category-0001\" // categoryName ) -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"category-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 상태(대기 중 정보) 목록 가져오기 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StatusesAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Statuses ( ); TArray Gs2 :: UE5 :: Idle :: Model :: FEzStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . idle . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . statuses ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 보상 내용 확인 획득 예정 보상을 수령 전에 확인하기 위해 Prediction API를 사용합니다. 플레이어에게 “앞으로 N분 기다리면 이만큼의 아이템을 얻을 수 있다\"와 같은 사전 안내를 하고 싶은 경우에 활용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( category : \"category-0001\" ). PredictionAsync (); const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( \"category-0001\" // categoryName ); const auto Future = Domain -\u003e Prediction ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"category-0001\" ) var async_result = await domain . prediction ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 보상 수령 보상을 수령하면 대기 시간이 초기화됩니다. 또한, 대기 시간에 보상 획득 타이밍까지의 나머지가 존재하는 경우도 0으로 초기화됩니다( rewardResetMode 에 CarryOver 를 지정한 경우에는 나머지 시간이 다음으로 이월됩니다). Game Engine: Unity Unreal Engine Godot await gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( category : \"category-0001\" ). ReceiveAsync (); const auto Future = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( \"category-0001\" // categoryName ) -\u003e Receive (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"category-0001\" ) var async_result = await domain . receive ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 스크립트 트리거 네임스페이스에 overrideAcquireActionsScriptId 나 receiveScript 를 설정하면, 보상 산출이나 수령 처리 전후에 커스텀 스크립트를 실행할 수 있습니다. 트리거는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기 처리에서는 GS2-Script나 Amazon EventBridge를 이용한 외부 연계도 가능합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. overrideAcquireActionsScriptId : 보상 산출 시 실행되는 동기 스크립트. 동적으로 보상 목록을 덮어쓸 수 있습니다. 플레이어 상태에 따른 보상 교체 등에 활용할 수 있습니다. receiveScript (완료 통지: receiveDone ): 보상 수령 전후. 동기 실행으로 수령 허가·거부나 배율 보정, 비동기 실행으로 Amazon EventBridge를 통한 외부 연계가 가능합니다. 트랜잭션 액션 GS2-Idle에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 유형 액션 설명 소비 Gs2Idle:DecreaseMaximumIdleMinutesByUserId 최대 방치 시간 감소 입수 Gs2Idle:IncreaseMaximumIdleMinutesByUserId 최대 방치 시간 증가 입수 Gs2Idle:SetMaximumIdleMinutesByUserId 최대 방치 시간 설정 입수 Gs2Idle:ReceiveByUserId 보상 수령 “최대 방치 시간 증가\"를 입수 액션으로 이용하면, 특정 아이템을 입수했을 때나 플레이어 랭크가 상승했을 때 등, 자동으로 방치 보상을 쌓을 수 있는 상한 시간을 확장하는 처리가 가능해집니다. 이를 통해 플레이어의 성장에 맞춰 더 많은 방치 보상을 축적할 수 있게 되어, 플레이 경험 향상으로 이어질 수 있습니다. 버프에 의한 보정 GS2-Buff를 이용하면, 카테고리 모델의 acquireActions 나 플레이어별 maximumIdleMinutes 를 버프로 보정하여, 이벤트나 캠페인에 따라 대기 중 보상 내용이나 상한 시간을 동적으로 조정할 수 있습니다. 예를 들어 “주말에는 방치 보상 1.5배”, “특정 칭호를 가진 플레이어는 최대 방치 시간 +60분\"과 같은 운영이 가능합니다. 마스터 데이터 운용 마스터 데이터를 등록하면 마이크로서비스에서 사용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음과 같은 것이 있습니다. CategoryModel : 대기 시간이나 보상 테이블 설정 다음은 마스터 데이터의 JSON 예시입니다. { \"version\": \"2024-04-25\", \"categoryModels\": [ { \"name\": \"category-0001\", \"metadata\": \"Stamina\", \"rewardIntervalMinutes\": 10, \"defaultMaximumIdleMinutes\": 360, \"rewardResetMode\": \"CarryOver\", \"acquireActions\": [ { \"acquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\", \"request\": \"{\\\"experienceValue\\\": 10}\" } ] } ] } ] } 마스터 데이터 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub에서 데이터를 반영하거나, GS2-Deploy를 사용해 CI에서 등록하는 등의 워크플로우를 구성할 수 있습니다. 상세 레퍼런스 GS2-Idle API 레퍼런스","lang":"ko","section":"microservices","summary":"방치 보상 기능\n","title":"GS2-Idle","url":"/ko/microservices/idle/"},{"content":"시스템이나 운영진이 플레이어에게 메시지나 선물을 전달하는 구조를 구현합니다. 게임에서는 “보상 배포(사과)”, “로그인 보너스”, “과금 특전”, “이벤트 보상” 등 플레이어에게 비동기적으로 보상을 전달해야 하는 상황이 자주 발생합니다. GS2-Inbox는 메시지의 큐잉, 읽음/안읽음 관리, 보상 첨부, 유효기간에 따른 자동 삭제 기능을 제공하며, 게임의 라이프사이클 전반에 걸쳐 프레젠트 박스 기능을 담당합니다. sequenceDiagram participant Ops as 운영 / 서버 participant Inbox as GS2-Inbox participant Player as 플레이어 Ops-\u003e\u003eInbox: 메시지 송신 (보상 첨부) Inbox--\u003e\u003ePlayer: receiveNotification 알림 Player-\u003e\u003eInbox: 메시지 목록 조회 Player-\u003e\u003eInbox: 메시지 개봉 (Read) Inbox-\u003e\u003ePlayer: 첨부 보상 지급 (트랜잭션) Player-\u003e\u003eInbox: 읽은 메시지 삭제 메시지 읽음 관리 메시지는 읽음 상태를 가집니다. 읽음 상태의 메시지를 목록에 남길지, 목록에서 삭제할지 설정할 수 있습니다. 네임스페이스 설정의 isAutomaticDeletingEnabled 를 활성화하면, 읽음 처리되는 시점에 메시지가 자동으로 삭제됩니다. 프레젠트 박스 목록에 아직 수령하지 않은 메시지만 남기는 사양을, 서버 측의 추가 구현 없이 구현할 수 있습니다. 보상 첨부 메시지에는 보상을 첨부할 수 있습니다. 읽음 플래그를 세우는 대신, 메시지에 첨부된 보상을 수령할 수 있습니다. 첨부 가능한 보상은 GS2의 트랜잭션 메커니즘을 통한 획득 액션( readAcquireActions )으로 표현되므로, GS2-Inventory , GS2-Money , GS2-Experience 등 임의의 마이크로서비스 리소스를 보상으로 배포할 수 있습니다. 유효기간 메시지에는 유효기간( expiresAt )을 설정할 수 있습니다. 유효기간이 지난 메시지는 읽지 않은 상태, 개봉 후 읽음 상태와 관계없이 자동으로 삭제됩니다. 첨부된 보상을 수령하지 않았더라도 삭제됩니다. 메시지의 라이프사이클 stateDiagram-v2 [*] --\u003e Unread: 메시지 수신 Unread --\u003e Read: 개봉 (Read) Unread --\u003e Expired: 유효기간 만료 Read --\u003e Deleted: 삭제 (Delete) Read --\u003e AutoDeleted: isAutomaticDeletingEnabled Read --\u003e Expired: 유효기간 만료 Deleted --\u003e [*] AutoDeleted --\u003e [*] Expired --\u003e [*] 글로벌 메시지 특정 플레이어가 아니라 모든 플레이어에게 동일한 메시지를 배포하고 싶을 때는 “글로벌 메시지\"를 사용합니다. 글로벌 메시지는 마스터 데이터로 정의하며, 각 플레이어가 ReceiveGlobalMessageAsync 를 호출했을 때 아직 수신하지 않은 메시지를 해당 플레이어의 수신함에 복사합니다. 기능 설명 expiresAt 절대 시각으로 메시지 유효기간을 지정 expiresTimeSpan 수신 시점부터의 상대 기간으로 유효기간을 결정 (예: 수신 후 3일간) messageReceptionPeriodEventId GS2-Schedule의 이벤트ID를 지정하여, 특정 기간 동안에만 글로벌 메시지를 수신할 수 있도록 함 { \"version\": \"2018-04-20\", \"globalMessages\": [ { \"name\": \"welcome\", \"metadata\": \"신규 사용자용 선물\", \"readAcquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\", \"request\": \"{\\\"namespaceName\\\":\\\"money-0001\\\",\\\"slot\\\":1,\\\"userId\\\":\\\"#{userId}\\\",\\\"price\\\":0,\\\"count\\\":100}\" } ], \"expiresTimeSpan\": { \"days\": 7 } } ] } 마스터 데이터의 종류에는 다음이 있습니다. GlobalMessage : 모든 플레이어에게 배포하는 메시지 정의 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에, GitHub에서 데이터를 반영하거나, GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 스크립트 트리거 네임스페이스에 receiveMessageScript · readMessageScript · deleteMessageScript 를 설정하면, 메시지 수신, 개봉, 삭제 시 전후로 커스텀 스크립트를 실행할 수 있습니다. 스크립트는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기 방식에서는 GS2-Script나 Amazon EventBridge를 이용한 외부 연동도 가능합니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. receiveMessageScript (완료 알림: receiveMessageDone ): 메시지 수신 전후 readMessageScript (완료 알림: readMessageDone ): 메시지 개봉 전후 deleteMessageScript (완료 알림: deleteMessageDone ): 메시지 삭제 전후 푸시 알림 설정 가능한 주요 푸시 알림과 설정명은 다음과 같습니다. receiveNotification : 메시지 수신 시 알림 알림 대상 단말이 오프라인인 경우 모바일 푸시 알림으로 전달하는 설정도 지정할 수 있어, 확실한 전송을 실현할 수 있습니다. GS2-Gateway의 WebSocket 연결을 가진 플레이어에게는 즉시 알림을, 연결되어 있지 않은 플레이어에게는 iOS / Android의 모바일 푸시 알림을 자동으로 전송하는 배포 전략을, 추가 구현 없이 실현할 수 있습니다. 트랜잭션 액션 GS2-Inbox에서는 다음과 같은 트랜잭션 액션을 제공합니다. 소비 액션: 메시지 개봉, 메시지 삭제 획득 액션: 메시지 송신 “메시지 송신\"을 획득 액션으로 사용함으로써, 상점에서 상품 구매 시나 퀘스트 클리어 시의 보상으로 플레이어의 프레젠트 박스에 직접 메시지(아이템 포함)를 전달하는 처리를 트랜잭션 내에서 완결시킬 수 있습니다. 이를 통해 보상 지급 타이밍을 유연하게 제어할 수 있으며, 플레이어의 인벤토리가 가득 찬 경우에도 일단 프레젠트 박스에 보상을 대피시키는 운영이 용이해집니다. 구현 예제 메시지 송신 메시지 송신은 게임 엔진용 SDK에서는 직접 호출할 수 없습니다. 일반적으로 서버 사이드 스크립트나, 위의 “트랜잭션 액션\"을 통해 실행됩니다. 운영진의 일괄 배포인 경우 관리 콘솔이나 GS2-Deploy를 통해 송신할 수 있습니다. 게임 내에서 “메시지 송신\"을 보상이나 연출의 트리거로 사용하고 싶은 경우, GS2-Exchange나 GS2-Quest의 acquireActions 에 “ Gs2Inbox:SendMessageByUserId “를 포함시킵니다. 수신한 메시지 목록 가져오기 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). MessagesAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Messages ( ); TArray Gs2 :: UE5 :: Inbox :: Model :: FEzMessagePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . messages ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 읽지 않은 메시지만 목록 가져오기 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). MessagesAsync ( isRead : false ). ToListAsync (); const auto It = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Messages ( false // isRead ); TArray Gs2 :: UE5 :: Inbox :: Model :: FEzMessagePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . messages ( false ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 읽은 메시지만 목록 가져오기 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). MessagesAsync ( isRead : true ). ToListAsync (); const auto It = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Messages ( true // isRead ); TArray Gs2 :: UE5 :: Inbox :: Model :: FEzMessagePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . messages ( true ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 메시지 개봉 개봉하면 메시지가 Read 상태로 전환됨과 동시에 readAcquireActions 에 정의된 보상 지급 처리가 트랜잭션으로 실행됩니다. 네임스페이스 설정에서 isAutomaticDeletingEnabled 를 활성화한 경우, 개봉과 동시에 메시지가 삭제됩니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ). ReadAsync ( ); const auto Future = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Message ( \"message-0001\" // messageName ) -\u003e Read ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . message ( \"message-0001\" ) var async_result = await domain . read ( ) if async_result . error != null : if async_result . error . type == \"MessageExpiredException\" : # 메시지의 유효기간이 만료되었습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 메시지 일괄 개봉 여러 메시지를 한꺼번에 개봉하여, 각각의 첨부 보상을 하나의 트랜잭션으로 수령합니다. 보상 지급 처리는 내부적으로 순차 실행되므로, 동일한 아이템이 대량으로 첨부된 메시지를 병렬로 개봉했을 때 발생할 수 있는 갱신 레이트 제한 문제를 회피할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BatchReadAsync ( messageNames : new [] { \"message-0001\" , \"message-0002\" , \"message-0003\" , } ); const auto Future = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BatchRead ( [] { const auto v = MakeShared TArray FString \u003e\u003e (); v -\u003e Add ( \"message-0001\" ); v -\u003e Add ( \"message-0002\" ); v -\u003e Add ( \"message-0003\" ); return v ; }() ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . batch_read ( [ \"message-0001\" , \"message-0002\" , ] # message_names ) if async_result . error != null : if async_result . error . type == \"MessageExpiredException\" : # 메시지의 유효기간이 만료되었습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 메시지 삭제 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ). DeleteAsync ( ); const auto Future = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Message ( \"message-0001\" // messageName ) -\u003e Delete ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . message ( \"message-0001\" ) var async_result = await domain . delete ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 글로벌 메시지 수신 글로벌 메시지 중 아직 수신하지 않은 메시지가 있는 경우, 자신의 수신함에 메시지를 복사합니다. 로그인 시점이나 타이틀 화면 로드 완료 시점 등, 타이밍을 게임 측에서 제어할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveGlobalMessageAsync ( ); const auto Future = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e ReceiveGlobalMessage ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . receive_global_message ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 자주 묻는 질문 메시지 일괄 개봉이 가능한가요? 네, BatchReadAsync 를 사용하면 여러 메시지를 하나의 트랜잭션으로 한꺼번에 개봉할 수 있습니다. 자세한 내용은 메시지 일괄 개봉 을 참조하십시오. 또한 개별 ReadAsync 를 병렬로 호출하는 것도 가능하지만, 보상 지급 처리가 각 마이크로서비스에서 정의한 제한에 도달하지 않는지 충분히 고려해야 합니다. 예를 들어, GS2-Inventory에서는 동일한 아이템의 소지 수량 갱신이 1초에 3회까지로 정의되어 있습니다. 동일한 아이템이 첨부된 10개의 메시지를 병렬로 개봉하면 이 제한을 초과할 수 있습니다. 이 제한을 초과하더라도, 원칙적으로 결과가 유실되는 일은 없습니다. 다만, 개봉 API를 호출한 후 비동기로 동작하는 보상 지급 처리가 완료되기까지 시간이 걸릴 수 있습니다. 이런 경우에도 BatchReadAsync 라면 내부에서 순차적으로 실행되므로, 레이트 제한에 걸리지 않고 확실하게 보상을 받을 수 있습니다. 메시지의 읽지 않은 개수 배지를 표시하고 싶습니다 MessagesAsync(isRead: false) 로 가져온 목록의 건수를 읽지 않은 개수로 표시할 수 있습니다. 수신 알림( receiveNotification )을 구독해 두면, 새 메시지가 도착한 시점에 클라이언트 측에서 다시 가져올 수 있습니다. 상세 레퍼런스 GS2-Inbox API 레퍼런스","lang":"ko","section":"microservices","summary":"프레젠트 박스 기능\n","title":"GS2-Inbox","url":"/ko/microservices/inbox/"},{"content":"플레이어가 소지한 아이템 정보를 관리합니다. 아이템 관리에는 3가지 방식이 있습니다. 첫 번째는 스탠다드 인벤토리, 두 번째는 심플 인벤토리, 세 번째는 거대 인벤토리입니다. 스탠다드 인벤토리는 다음과 같은 기능을 제공합니다 인벤토리 용량 제한 동일한 아이템을 일정 수량마다 여러 스택으로 분할 아이템에 유효기간 설정 심플 인벤토리는 스탠다드 인벤토리가 가진 기능을 갖고 있지 않습니다. 그 대신 여러 아이템의 증감 처리를 한 번에 수행할 수 있습니다. 심플 인벤토리를 잘 활용하면 API 호출 횟수를 줄일 수 있습니다. 거대 인벤토리는 심플 인벤토리와 마찬가지로 스탠다드 인벤토리가 가진 기능을 갖고 있지 않습니다. 심플 인벤토리처럼 여러 아이템의 증감 처리를 한 번에 수행할 수도 없습니다. 그 대신 아이템 소지 수량을 64bit 정수 범위를 초과하여 보유할 수 있습니다. 스탠다드 인벤토리 인벤토리 플레이어가 소지하는 가방에 해당하는 엔티티입니다. 가방에는 용량을 설정할 수 있으며, 그 용량을 초과하는 아이템은 저장할 수 없습니다. 아이템 아이템은 소지품의 종류를 정의합니다. 아이템에는 스택 가능한 최대 수량을 지정할 수 있습니다. 예를 들어 포션이라는 아이템 종류가 존재하고 최대 99개까지 스택 가능하도록 설정한 경우, 인벤토리 용량 소비량 1로 최대 99개까지 포션을 소지할 수 있습니다. 또한 아이템에는 여러 스택을 소지할 수 있는지 여부를 지정할 수 있습니다. 여러 스택 소지를 가능하도록 설정하면 100개 이상의 포션을 소지할 수 있게 되며, 예를 들어 150개의 포션을 소지하고 있는 경우 99개 스택된 포션과 51개 스택된 포션이라는 2개의 엔트리가 생성되어 인벤토리 용량이 2 소비됩니다. 여러 스택 소지를 불가능하도록 설정한 경우, 99개를 초과하는 포션은 소지할 수 없게 되며 그 이상 포션을 입수하더라도 폐기됩니다. 아이템의 유효기간 아이템에는 유효기간을 설정할 수 있습니다. 유효기간을 설정한 아이템은 설정 시각이 지나면 자동으로 인벤토리에서 삭제됩니다. 유효기간이 설정된 아이템은 유효기간마다 서로 다른 스택이 생성되며, 각각 인벤토리 용량을 소비합니다. 따라서 여러 스택을 소지할 수 없는 아이템에 유효기간을 붙여 배포하면, 가장 먼저 입수한 유효기간의 아이템(또는 가장 먼저 입수한 유효기간이 없는 아이템)을 제외하고는 폐기됩니다. 아이템을 사용할 때 유효기간(아이템 세트 이름)을 명시적으로 지정하지 않으면 유효기간이 가까운 아이템부터 우선적으로 소비됩니다. 아이템 세트 한 종류의 아이템을 여러 스택으로 관리할 수 있도록, 아이템 종류를 묶은 아이템 세트라는 엔티티가 존재합니다. 이 엔티티는 스택마다 아이템 종류를 나타내는 ID와는 별도로 스택 고유의 ID를 갖습니다. 이 스택 고유 ID를 사용하면 “포션 x 99\"와 “포션 x 51\"이라는 각각의 스택을 명확히 구분할 수 있습니다. 참조원 (Reference Of) 아이템 세트에는 “참조원” 정보를 부여할 수 있습니다. 이는 특정 아이템이 다른 엔티티(예: 캐릭터 장비, 파티 편성, 마켓 출품 등)에서 사용되고 있음을 나타내기 위해 사용됩니다. 참조원이 하나 이상 설정된 아이템 세트는 소지 수량이 충분하더라도 소비하거나 삭제할 수 없게 됩니다. 이를 통해 장비 중인 아이템을 실수로 판매하거나 강화 소재로 사용해 버리는 실수를 시스템 수준에서 방지할 수 있습니다. 포션을 소비할 때 포션을 나타내는 아이템 ID에 더해 스택 고유 ID를 지정함으로써 어느 스택에서 소비할지 명시할 수 있습니다. 스택 고유 ID는 생략 가능하며, 생략한 경우에는 수량이 가장 적은 스택부터 우선적으로 사용됩니다. 심플 인벤토리 심플 인벤토리 플레이어가 소지하는 가방에 해당하는 엔티티입니다. 여러 심플 아이템을 묶는 존재로, 심플 인벤토리는 특별한 프로퍼티를 갖지 않습니다. 심플 아이템 아이템은 소지품의 종류를 정의합니다. 거대 인벤토리 거대 인벤토리 플레이어가 소지하는 가방에 해당하는 엔티티입니다. 여러 거대 아이템을 묶는 존재로, 거대 인벤토리는 특별한 프로퍼티를 갖지 않습니다. 거대 아이템 아이템은 소지품의 종류를 정의합니다. 스크립트 트리거 네임스페이스에 acquireScript , overflowScript , consumeScript , simpleItemAcquireScript , simpleItemConsumeScript , bigItemAcquireScript , bigItemConsumeScript 를 설정하면 아이템 입수·소비 처리 전후에 커스텀 스크립트를 호출할 수 있습니다. 스크립트는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기의 경우 GS2-Script나 Amazon EventBridge를 통한 외부 처리에도 대응합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. acquireScript (완료 통지: acquireDone ): 스탠다드 아이템 입수 전후 overflowScript (완료 통지: overflowDone ): 용량 초과 시 전후 consumeScript (완료 통지: consumeDone ): 스탠다드 아이템 소비 전후 simpleItemAcquireScript (완료 통지: simpleItemAcquireDone ): 심플 아이템 입수 전후 simpleItemConsumeScript (완료 통지: simpleItemConsumeDone ): 심플 아이템 소비 전후 bigItemAcquireScript (완료 통지: bigItemAcquireDone ): 거대 아이템 입수 전후 bigItemConsumeScript (완료 통지: bigItemConsumeDone ): 거대 아이템 소비 전후 마스터 데이터 운용 마스터 데이터를 등록하면 마이크로서비스에서 사용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음과 같은 것들이 있습니다. InventoryModel : 인벤토리 용량이나 종류를 정의 ItemModel : 스택 상한이나 유효기간을 정의 마스터 데이터 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 버프에 의한 보정 GS2-Buff와 연동하면 인벤토리의 currentInventoryMaxCapacity 나 AcquireItemSetByUserId , ConsumeItemSetByUserId , AcquireSimpleItemsByUserId , ConsumeSimpleItemsByUserId , AcquireBigItemByUserId , ConsumeBigItemByUserId 의 입수량·소비량을 버프로 보정할 수 있습니다. 이벤트나 캠페인에 맞춰 용량이나 입수·소비량을 유연하게 조정할 수 있습니다. 트랜잭션 액션 GS2-Inventory에서는 다음과 같은 트랜잭션 액션을 제공합니다. 스탠다드 인벤토리 검증 액션: 인벤토리 최대 용량 검증, 아이템 소지 수량 검증, 참조원 검증 소비 액션: 아이템 세트 소비 입수 액션: 용량 가산·설정, 아이템 세트 입수(등급 지정 포함), 참조원 추가·삭제 “참조원 추가·삭제\"를 입수 액션으로 활용하면 장비 변경이나 편성 갱신을 트랜잭션 내에서 안전하게 수행함과 동시에 아이템의 보호 상태를 전환할 수 있습니다. 심플 인벤토리 검증 액션: 심플 아이템 소지 수량 검증 소비 액션: 심플 아이템 소비 입수 액션: 심플 아이템 입수·설정 거대 인벤토리 검증 액션: 거대 아이템 소지 수량 검증 소비 액션: 거대 아이템 소비 입수 액션: 거대 아이템 입수·설정 구현 예제 아이템 입수 아이템 입수는 게임 엔진용 SDK에서는 처리할 수 없습니다. 아이템 소비 이 API로 아이템 소비 처리를 수행하는 것은 권장하지 않습니다. GS2-Exchange / GS2-Showcase / GS2-Quest와 같은 서비스를 통해 아이템 소비를 수행하는 대신, 어떠한 처리를 실행하는 것을 권장합니다. 스탠다드 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : null ). ConsumeAsync ( consumeCount : 1L ); const auto Future = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Inventory ( \"inventory-0001\" // inventoryName ) -\u003e ItemSet ( \"item-0001\" , // itemName nullptr // itemSetName ) -\u003e Consume ( 1L ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"inventory-0001\" ) . item_set ( \"item-0001\" , null ) var async_result = await domain . consume ( 1 # consume_count ) if async_result . error != null : if async_result . error . type == \"ConflictException\" : # 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다 pass if async_result . error . type == \"InsufficientException\" : # 아이템 소지 수량이 부족합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 심플 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"inventory-0001\" ). SimpleItem ( itemName : \"item-0001\" ). ConsumeAsync ( consumeCount : 1L ); const auto Future = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e SimpleInventory ( \"inventory-0001\" // inventoryName ) -\u003e SimpleItem ( \"item-0001\" // itemName ) -\u003e Consume ( 1L ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . simple_inventory ( \"inventory-0001\" ) var async_result = await domain . consume_simple_items ( [ Gs2InventoryEzConsumeCount . new () . with_item_name ( \"item-0001\" ) . with_count ( 5 ), Gs2InventoryEzConsumeCount . new () . with_item_name ( \"item-0002\" ) . with_count ( 3 ), ] # consume_counts ) if async_result . error != null : if async_result . error . type == \"ConflictException\" : # 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다 pass if async_result . error . type == \"InsufficientException\" : # 아이템 소지 수량이 부족합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 거대 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"inventory-0001\" ). BigItem ( itemName : \"item-0001\" ). ConsumeAsync ( consumeCount : \"1\" ); const auto Future = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BigInventory ( \"inventory-0001\" // inventoryName ) -\u003e BigItem ( \"item-0001\" // itemName ) -\u003e Consume ( \"1\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . big_inventory ( \"inventory-0001\" ) . big_item ( \"item-0001\" ) var async_result = await domain . consume_big_item ( \"1234567890123456789012345678901234567890\" # consume_count ) if async_result . error != null : if async_result . error . type == \"ConflictException\" : # 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다 pass if async_result . error . type == \"InsufficientException\" : # 아이템 소지 수량이 부족합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 인벤토리 정보 취득 스탠다드 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ). ModelAsync (); const auto item = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Inventory ( \"inventory-0001\" // inventoryName ) -\u003e Model (); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"inventory-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 심플 심플 인벤토리에는 이 기능이 없습니다 거대 거대 인벤토리에는 이 기능이 없습니다 인벤토리 내 아이템 목록 취득 스탠다드 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ). ItemSetsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Inventory ( \"item\" // inventoryName ) -\u003e ItemSets ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzItemSetPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"item\" ) . item_sets ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 심플 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ). SimpleItemsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e SimpleInventory ( \"item\" // inventoryName ) -\u003e SimpleItems ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzSimpleItemPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . simple_inventory ( \"item\" ) . simple_items ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 거대 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ). BigItemsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BigInventory ( \"item\" // inventoryName ) -\u003e BigItems ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzBigItemPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . big_inventory ( \"item\" ) . big_items ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 인벤토리 용량 확대 인벤토리 용량 확대는 게임 엔진용 SDK에서는 처리할 수 없습니다. 소지 증명 서명 취득 GS2 내 다른 마이크로서비스와 연동할 때, 실제로 GS2-Inventory에서 아이템을 소유하고 있음을 보증하는 데이터가 요구되는 경우가 있습니다. 예를 들어 GS2-Inventory에서 캐릭터의 소지 상태를 관리하고, GS2-Formation에서 파티 편성 상태를 관리한다고 가정합니다. GS2-Formation에 파티 멤버를 설정할 때 “character-0001\"이라는 캐릭터를 설정하도록 API 요청을 보내게 되는데, GS2-Formation은 소지 증명 서명과 함께 “character-0001\"을 지정하도록 요구합니다. 이를 통해 GS2-Formation은 뒤에서 GS2-Inventory와 통신하여 실제로 소지하고 있는 캐릭터인지 판단할 필요가 없어집니다. 스탠다드 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : \"item-set-0001\" ). GetItemWithSignatureAsync ( keyId : \"grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001\" ); var item = await result . ModelAsync (); var body = result . Body ; var signature = result . Signature ; const auto Future = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Inventory ( \"inventory-0001\" // inventoryName ) -\u003e ItemSet ( \"item-0001\" , // itemName \"item-set-0001\" // itemSetName ) -\u003e GetItemWithSignature ( \"key-0001\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"inventory-0001\" ) . item_set ( \"item-0001\" , null ) var async_result = await domain . get_item_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 심플 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"inventory-0001\" ). SimpleItem ( itemName : \"item-0001\" ). GetSimpleItemWithSignatureAsync ( keyId : \"grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001\" ); var item = await result . ModelAsync (); var body = result . Body ; var signature = result . Signature ; const auto Future = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e SimpleInventory ( \"inventory-0001\" // inventoryName ) -\u003e SimpleItem ( \"item-0001\" // itemName ) -\u003e GetSimpleItemWithSignature ( \"key-0001\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . simple_inventory ( \"inventory-0001\" ) . simple_item ( \"item-0001\" ) var async_result = await domain . get_simple_item_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 거대 거대 인벤토리에는 이 기능이 없습니다. 상세 레퍼런스 GS2-Inventory API 레퍼런스","lang":"ko","section":"microservices","summary":"소지품 관리 기능\n","title":"GS2-Inventory","url":"/ko/microservices/inventory/"},{"content":"GS2-JobQueue는 게임 서버에서 실행하는 처리를 비동기적으로 쌓아두기 위한 잡 큐 기능을 제공합니다. 게임 처리 중에는 즉시 결과를 반환할 필요가 없는 것이나, 서버 측에서 시간을 들여 단계적으로 진행하고 싶은 것이 있습니다. 이러한 처리를 “잡\"으로 큐에 등록해 두고, 이후 플레이어가 접속한 시점이나 명시적인 API 호출을 통해 실행할 수 있습니다. 주요 용도 GS2-Script를 비동기로 실행하기 위한 실행 기반 장시간 처리를 세부 단계로 분할하여, 각 단계를 잡으로 등록해 순차적으로 처리 로그인 중에 발생한 리워드 배포 등을 모아서 서버 측에서 트랜잭션 발행·실행 다른 마이크로서비스의 완료 알림 핸들러로서, 후속 처리를 비동기로 수행 graph LR Producer[\"잡 등록원 (다른 마이크로서비스 / GS2-Script)\"] --\u003e Queue[\"GS2-JobQueue\"] Queue --\u003e Run[\"플레이어가 Run을 실행 또는 자동 실행\"] Run --\u003e Script[\"GS2-Script\"] Script -- 성공 --\u003e Result[\"JobResult로 기록\"] Script -- 실패 --\u003e Retry{\"최대 시도 횟수 도달?\"} Retry -- No --\u003e Queue Retry -- Yes --\u003e DeadLetter[\"DeadLetterJob으로 보관\"] 자동 실행 모드 네임스페이스 설정에서 enableAutoRun 을 활성화하면, 각 마이크로서비스의 API 처리 마지막에 사용자의 큐에 쌓여 있는 잡을 자동으로 실행합니다. 플레이어가 앱을 조작하는 것만으로 서버 측에 쌓인 잡이 순차적으로 소화됩니다. enableAutoRun 을 비활성화하는 경우에는 클라이언트에서 명시적으로 Run API를 호출하여 잡을 실행해야 합니다. 잡 결과 잡의 실행 결과는 시도 횟수( tryNumber )마다 JobResult 로 기록됩니다. JobResult 에는 GS2-Script의 종료 코드·실행 로그·결과 페이로드 등이 포함되어 있어, 나중에 실행 이력을 확인할 수 있습니다. 알림 설정 네임스페이스 설정에서 runNotification · pushNotification 을 구성해 두면, 잡이 실행되었을 때 또는 새로운 잡이 큐에 쌓였을 때 GS2-Gateway를 경유하여 클라이언트에 알림을 보낼 수 있습니다. 이 알림을 계기로 클라이언트 측에서 남은 정보를 다시 취득하는 등의 연계가 가능합니다. 트랜잭션 액션 GS2-JobQueue는 다른 마이크로서비스로부터 완료 알림의 수신처로 호출되는 경우가 많아, 트랜잭션 액션으로서 잡 등록을 제공하고 있습니다. 입수 액션: 잡을 사용자의 큐에 등록 예를 들어 GS2-Mission의 완료 보상으로 GS2-JobQueue에 잡을 쌓아두고, 나중에 한꺼번에 GS2-Script를 실행하는 구성이 가능합니다. 마스터 데이터 관리 GS2-JobQueue는 마스터 데이터를 가지지 않습니다. 동작은 네임스페이스 설정에서만 제어합니다. 구현 예제 자신의 큐에 쌓인 잡 실행 enableAutoRun 을 비활성화한 경우나, 명시적으로 잡 소화를 진행하고 싶은 경우에 호출합니다. Run 을 호출하면 잡을 1건 꺼내어 GS2-Script를 실행하고, 그 결과를 반환합니다. IsLastJob 이 true 이면 더 이상 소화해야 할 잡이 남아있지 않음을 나타냅니다. Game Engine: Unity Unreal Engine Godot var domain = gs2 . JobQueue . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . RunAsync ( ); var isLastJob = domain . IsLastJob ; var needRetry = result . NeedRetry ; const auto Domain = Gs2 -\u003e JobQueue -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e Run ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto IsLastJob = Domain -\u003e IsLastJob ; const auto NeedRetry = Future -\u003e GetTask (). Result () -\u003e NeedRetry ; # SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요가 없습니다 잡 실행 결과 취득 특정 잡의 특정 시도 횟수에 대한 실행 결과를 취득합니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . JobQueue . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Job ( jobName : \"job-0001\" ). JobResult ( tryNumber : 1 ). ModelAsync (); const auto Domain = Gs2 -\u003e JobQueue -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Job ( \"job-0001\" // jobName ) -\u003e JobResult ( 1 // tryNumber ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . job_queue . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . job ( \"job-0001\" ) . job_result ( null ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 잡 상태 취득 큐에 쌓인 잡의 최신 상태를 취득합니다. 잡의 현재 시도 횟수나 등록된 GS2-Script 정보 등을 확인할 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . JobQueue . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Job ( jobName : \"job-0001\" ). ModelAsync (); const auto Future = Gs2 -\u003e JobQueue -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Job ( \"job-0001\" // jobName ) -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . job_queue . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . job ( \"job-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var item = async_result . result 상세 레퍼런스 GS2-JobQueue API 레퍼런스","lang":"ko","section":"microservices","summary":"비동기 잡 큐\n","title":"GS2-JobQueue","url":"/ko/microservices/job_queue/"},{"content":"GS2-Key는 GS2 내에서 사용되는 암호화 키(대칭키)를 관리하고, AES를 이용한 암호화·복호화 API를 제공하는 서비스입니다. 기밀성이 높은 데이터를 서버 측에서 암호화·복호화하는 용도 외에도, GS2 자체가 내부적으로 사용하는 각종 서명·암호화 처리를 위한 키 관리 기반으로도 활용됩니다. 암호화 키 관리 GS2-Key에서는 암호화 키를 네임스페이스 하위에 생성하여 관리합니다. 키에는 다음과 같은 정보를 담을 수 있습니다. 키 이름 설명(description: 용도나 설명 등, 운용상의 식별에 사용) 실제 암호화에 사용되는 비밀키(시크릿)는 키 생성 시 GS2 측에서 안전하게 생성되어 GS2 내부에 보관됩니다. 비밀키 자체를 클라이언트 측에서 꺼내어 사용하는 설계가 아니라, 암호화·복호화 요청을 GS2-Key에 전송하고 결과만 받는 구조로 되어 있습니다. graph TD App[\"애플리케이션\"] --\u003e|\"Encrypt(평문)\"| Key[\"GS2-Key\"] Key --\u003e|\"암호문\"| App App --\u003e|\"서버에 저장 또는 전송\"| Storage[\"데이터 스토어\"] Storage --\u003e|\"암호문\"| App2[\"애플리케이션\"] App2 --\u003e|\"Decrypt(암호문)\"| Key Key --\u003e|\"평문\"| App2 활용 사례 GS2 내부에서의 활용 GS2-Account의 비밀번호 서명이나 GS2-Auth의 토큰 발급 등, GS2 내부에서 기밀 데이터를 다루는 마이크로서비스는 GS2-Key가 관리하는 키를 사용합니다. 각 마이크로서비스의 네임스페이스를 생성할 때 키를 지정함으로써, 해당 네임스페이스 내에서 필요한 암호화 처리에 사용됩니다. 애플리케이션 자체 데이터의 암호화 애플리케이션 자체에서 기밀 정보를 다루는 경우에도, GS2-Key의 Encrypt / Decrypt API를 직접 호출해 암호화·복호화를 수행할 수 있습니다. 비밀키를 애플리케이션 내에 내장하지 않고도 서버 사이드에서의 암호화를 구현할 수 있습니다. 기밀성이 높은 설정값이나 외부 서비스에 대한 인증 정보 등을 GS2 측에서 안전하게 관리하고 싶은 상황에서 활용할 수 있습니다. 트랜잭션 액션 GS2-Key에서는 트랜잭션 액션을 제공하지 않습니다. 마스터 데이터 관리 GS2-Key에는 마스터 데이터 등록이 없습니다. 관리 콘솔, GS2-Deploy, API를 통해 키를 생성·관리합니다. 구현 예제 GS2-Key는 관리 API/서버 사이드 API 중심의 마이크로서비스입니다. 게임 엔진용 SDK(Unity / Unreal Engine / Godot)에는 전용 Domain 클래스가 제공되지 않습니다. 키 생성이나 Encrypt / Decrypt 호출은, 주로 GS2 내부의 각 마이크로서비스에서 참조하는 형태로 사용하거나, GS2-Script에서 서버 사이드로 호출하는 형태로 사용하는 것을 상정하고 있습니다. 직접 API를 호출하는 경우에는 다음 중 하나의 방법으로 조작하는 것을 권장합니다. 관리 콘솔(키의 생성·관리) GS2-Deploy를 통한 템플릿 관리(키를 코드화하여 관리) GS2-Script에서의 호출(Encrypt / Decrypt를 서버 사이드 로직 내에서 사용) 각종 언어용 일반 SDK(C# / Go / Python / TypeScript / PHP / Java)를 통한 백엔드 서버에서의 호출 GS2 CLI 각 SDK의 자세한 내용은 해당 레퍼런스 페이지를 참조해 주세요. 보다 실전적인 정보 키 로테이션 보안 정책에 따라 암호화 키를 정기적으로 교체(로테이션)하고 싶은 경우, 새 키를 생성하고 이후의 암호화 처리를 새 키로 전환하는 운용이 가능합니다. 기존 키는 복호화 용도를 위해 바로 삭제하지 않고, 암호문 이전이 완료될 때까지 보관하는 설계를 권장합니다. GitHub API 키 관리 GS2-Key에서는 암호화 키 외에도, GitHub에서 마스터 데이터를 가져올 때 사용하는 API 키를 보관할 수 있습니다. 마스터 데이터 가져오기에 사용되는 GS2-Deploy나 각종 마이크로서비스는, 여기에 등록한 API 키를 참조함으로써 프라이빗 저장소에 접근할 수 있습니다. 상세 레퍼런스 GS2-Key API 레퍼런스","lang":"ko","section":"microservices","summary":"암호화 키 관리 기능\n","title":"GS2-Key","url":"/ko/microservices/key/"},{"content":"플레이어가 행동할 수 있는 횟수를 제한하기 위한 구조입니다. “하루에 5번까지 가챠를 뽑을 수 있다”, “일주일에 한 번만 받을 수 있는 보상” 등, 게임 내에서 자주 등장하는 횟수 제한을 일괄적으로 관리할 수 있습니다. graph LR Action[\"플레이어의 행동\"] --\u003e CountUp[\"카운트업 (maxValue 지정)\"] CountUp -- 상한에 도달하지 않음 --\u003e Success[\"처리를 허가\"] CountUp -- 상한에 도달함 --\u003e Failure[\"처리를 거부\"] Reset[\"리셋 주기\"] --\u003e Counter[\"카운터를 0으로 되돌림\"] 카운터 플레이어의 행동 횟수를 표현하기 위한 엔티티로, 카운터의 값을 증가시킬 때 허용 가능한 최댓값을 지정하여 카운트업을 시도함으로써, 최댓값을 초과하는 경우에는 카운트업이 실패하고 후속 처리도 실패시킬 수 있는 메커니즘으로 횟수 제한을 실현합니다. 이때, 카운터 자체에 최댓값이 존재하는 것이 아니라 카운트업 액션에 최댓값을 설정할 수 있다는 점이 특징입니다. 예를 들어, 스태미나 회복 처리를 예로 생각해 봅시다. 많은 게임에서는 하루에 스태미나를 회복할 수 있는 횟수에 상한이 설정되어 있습니다. 그리고 회복을 하면 할수록 회복에 필요한 금액이 상승합니다. 이러한 사양은 다음과 같이 표현할 수 있습니다. 티어 회복에 필요한 비용 실행 가능한 횟수 Tier.1 5 10 Tier.2 10 10 Tier.3 20 10 Tier.4 40 10 그리고 이를 횟수 제한 카운트업 액션과 회복에 필요한 비용으로 파악한 것이 다음과 같습니다. 티어 카운터 이름 카운터 상승량 카운터 최댓값 회복에 필요한 비용 Tier.1 RecoveryStaminaCounter 1 10 5 Tier.2 RecoveryStaminaCounter 1 20 10 Tier.3 RecoveryStaminaCounter 1 30 20 Tier.4 RecoveryStaminaCounter 1 40 40 모든 티어에서 동일한 카운터를 사용하며, 회복에 필요한 비용이 저렴할수록 카운터의 최댓값을 낮게 설정합니다. 이렇게 하면 가장 먼저 가장 저렴한 Tier.1 을 구매할 수 없게 되어 Tier.2 를 구매할 수밖에 없게 되고, Tier.2 도 머지않아 구매할 수 없게 되어 Tier.3 을 구매할 수밖에 없게 되도록 설계할 수 있습니다. 카운터 리셋 카운터에는 리셋 주기를 설정할 수 있습니다. 리셋 주기에는 다음과 같은 종류가 있습니다. resetType 설명 notReset 리셋하지 않음(수동으로 리셋하지 않는 한 카운트가 영구적으로 유지됨) daily 매일 resetHour 시에 리셋 weekly 매주 resetDayOfWeek 요일의 resetHour 시에 리셋 monthly 매월 resetDayOfMonth 일의 resetHour 시에 리셋 days 기준일( anchorTimestamp )로부터 days 일마다 리셋 anchorTimestamp 를 활용하면 이벤트 시작일로부터 N일마다 리셋하는 등 유연한 스케줄링이 가능합니다. 버프에 의한 보정 GS2-Buff 와 연동하면 CountUp / CountUpByUserId 의 maxValue 를 버프로 보정하여 상한값을 일시적으로 증감시킬 수 있습니다. “기간 한정으로 하루에 뽑을 수 있는 가챠 횟수를 두 배로 늘린다\"와 같이 이벤트에 맞춘 완화 조치를 구현할 때 유용합니다. 스크립트 트리거 네임스페이스에 countUpScript 를 설정하면 카운트업 처리 전후에 커스텀 스크립트를 실행할 수 있습니다. 트리거는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기 처리에서는 GS2-Script 나 Amazon EventBridge 를 이용한 외부 연동도 가능합니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. countUpScript (완료 알림: countUpDone ): 카운트업 처리 전후. 트랜잭션 액션 GS2-Limit 에서는 다음과 같은 트랜잭션 액션을 제공합니다. 종류 액션 설명 검증 Gs2Limit:VerifyCounterByUserId 카운터 값 검증(일치/미만/초과 등) 소비 Gs2Limit:CountUpByUserId 카운터 값 가산(카운트업) 입수 Gs2Limit:CountDownByUserId 카운터 값 감산(카운트다운) 입수 Gs2Limit:DeleteCounterByUserId 카운터 삭제(리셋) “카운터 값 감산(카운트다운)“을 입수 액션으로 이용하면, 특정 아이템을 입수했을 때나 미션 달성 보상으로 제한 횟수를 회복(실질적으로 소비한 횟수를 되돌림)시키는 처리가 가능해집니다. 이를 통해 플레이어의 지속적인 플레이를 촉진하는 보상 설계를 쉽게 할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. LimitModel : 리셋 주기와 상한값 다음은 마스터 데이터의 JSON 예입니다. { \"version\": \"2023-09-04\", \"limitModels\": [ { \"name\": \"daily\", \"metadata\": \"일일 제한\", \"resetType\": \"daily\", \"resetHour\": 5 }, { \"name\": \"weekly\", \"metadata\": \"주간 제한\", \"resetType\": \"weekly\", \"resetDayOfWeek\": \"monday\", \"resetHour\": 5 } ] } 마스터 데이터 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub 에서 데이터를 반영하거나 GS2-Deploy 를 사용하여 CI 에서 등록하는 워크플로우를 구성할 수 있습니다. 구현 예제 카운터 목록 조회 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CountersAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Counters ( // limitName ); TArray Gs2 :: UE5 :: Limit :: Model :: FEzCounterPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . limit . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counters ( ) var async_result = await iterator . load () if async_result . error != null : # 에러 처리 push_error ( str ( async_result . error )) return var items = async_result . result 카운터 상태 조회 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( limitName : \"daily\" , counterName : \"counter1\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Counter ( \"daily\" , // limitName \"counter1\" // counterName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . limit . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"daily\" , \"counter1\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 카운터 값 증가 이 API 로 카운터의 증가 처리를 수행하는 것은 권장하지 않습니다. GS2-Exchange / GS2-Showcase / GS2-Quest 와 같이 횟수 제한을 걸고자 하는 대상 처리를 실행하기 위한 대가로서 카운터 값 증가를 설정하는 것을 권장합니다. maxValue 를 초과하는 카운트업을 시도하면 OverflowException 이 발생합니다. 클라이언트 측에서 이 예외를 포착하여 “오늘의 상한에 도달했습니다\"와 같은 UI 를 표시함으로써 횟수 제한을 표현할 수 있습니다. Game Engine: Unity Unreal Engine Godot try { var result = await gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( limitName : \"daily\" , counterName : \"counter1\" ). CountUpAsync ( countUpValue : 1 , maxValue : 100 ); } catch ( Gs2 . Gs2Limit . Exception . OverflowException e ) { // The maximum number of times limit has been reached. } const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Counter ( \"daily\" , // limitName \"counter1\" // counterName ); const auto Future = Domain -\u003e CountUp ( 1 , // countUpValue 100 // maxValue ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Limit :: Error :: FOverflowError :: Class )) { // The maximum number of times limit has been reached. } return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . limit . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"daily\" , \"counter1\" ) var async_result = await domain . count_up ( 1 , # count_up_value 100 # max_value ) if async_result . error != null : if async_result . error . type == \"OverflowException\" : # 횟수 제한 상한에 도달했습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 카운터 강제 리셋 카운터의 강제 리셋은 게임 엔진용 SDK 에서는 처리할 수 없습니다. 게임 서버에서 DeleteCounterByUserId 를 호출하거나, 트랜잭션의 입수 액션으로 Gs2Limit:DeleteCounterByUserId 를 실행함으로써 카운터를 리셋할 수 있습니다. 상세 레퍼런스 GS2-Limit API 레퍼런스","lang":"ko","section":"microservices","summary":"횟수 제한 기능\n","title":"GS2-Limit","url":"/ko/microservices/limit/"},{"content":"GS2-Lock 는 리소스 단위로 동작하는 뮤텍스를 제공하여, 여러 서버 프로세스·여러 처리계에서 동일한 리소스에 동시에 접근하는 것을 방지하기 위한 분산 배타 제어 서비스입니다. 게임 운영에서는 “동일한 플레이어에 대해 같은 처리를 이중으로 실행해 버린다”, “서로 다른 백엔드 서버가 동일한 데이터를 동시에 덮어써 버린다” 와 같은 문제가 쉽게 발생합니다. GS2-Lock 을 이용하면, 이러한 문제를 마이크로서비스로 제공되는 공유 뮤텍스를 통해 방지할 수 있습니다. 뮤텍스의 기본 GS2-Lock 의 잠금은 “네임스페이스”, “사용자ID”, “프로퍼티 ID” 의 조합으로 식별되는 “뮤텍스” 라는 리소스에 대해 획득합니다. 프로퍼티 ID 에는 배타 제어를 하고 싶은 리소스를 고유하게 식별하는 임의의 문자열을 지정합니다. 예를 들어 “가챠 추첨 처리”, “아이템 소지 수 갱신”, “외부 연동 알림 전송” 등, 이중 실행을 피하고 싶은 처리마다 서로 다른 프로퍼티 ID 를 할당하는 운용을 생각할 수 있습니다. graph TD Server1[\"백엔드 서버A\"] --\u003e|Lock| Mutex[\"GS2-Lock 뮤텍스\"] Server2[\"백엔드 서버B\"] --\u003e|Lock 대기| Mutex Mutex --\u003e|획득 성공| Server1 Server1 --\u003e|Unlock| Mutex Mutex --\u003e|획득 성공| Server2 트랜잭션 ID 잠금을 획득할 때는 트랜잭션 ID 를 지정합니다. 동일한 트랜잭션 ID 로 같은 뮤텍스에 대해 재귀적으로 잠금을 획득한 경우, 참조 카운트가 증가하는 재진입 락(reentrant lock)으로 동작합니다. 해제할 때는 동일한 횟수만큼 Unlock 을 실행함으로써 잠금이 완전히 해제됩니다. 서로 다른 트랜잭션 ID 에 의한 이중 획득은 경합 상태가 되며, 먼저 획득한 세션이 잠금을 해제할 때까지 대기 상태가 됩니다. TTL에 의한 자동 해제 잠금에는 TTL(Time To Live)을 설정할 수 있으며, TTL이 경과하면 잠금은 자동으로 해제됩니다. 이를 통해, 잠금을 획득한 처리계가 비정상 종료되거나 네트워크 장애로 잠금 해제 처리가 호출되지 않은 경우에도 데드락을 방지할 수 있습니다. TTL은 처리의 최대 예상 실행 시간에 맞춰 적절한 값을 설정해 주세요. 멀티 타이틀·여러 백엔드 간의 배타 제어 GS2-Lock 는 GS2의 마이크로서비스로 제공되기 때문에, 멀티 타이틀 간이나 여러 백엔드 서버, 여러 리전 간에 공통된 배타 제어를 실현할 수 있습니다. GS2-Script 에서 호출함으로써, 서버 사이드 스크립트 내부에서 다른 스크립트 실행이나 외부 처리와의 배타 제어를 수행하는 것도 가능합니다. 트랜잭션 액션 GS2-Lock 에서는 트랜잭션 액션을 제공하지 않습니다. 마스터 데이터 관리 GS2-Lock 에서는 마스터 데이터 등록이 없습니다. 네임스페이스를 생성하는 것만으로 이용을 시작할 수 있습니다. 구현 예제 GS2-Lock 는 관리 API/서버 사이드 API 중심의 마이크로서비스입니다. 게임 엔진용 SDK(Unity / Unreal Engine / Godot)에는 전용 Domain 클래스가 제공되지 않습니다. 주로 GS2-Script 내의 서버 사이드 로직이나, 자사의 백엔드 서버에서 이용하는 것을 상정하고 있으므로, 게임 클라이언트에서 직접 호출하는 것이 아니라 다음 중 하나의 수단으로 조작할 것을 권장합니다. GS2-Script 에서의 호출(서버 사이드 스크립트를 경유한 배타 제어) 각종 언어용 일반 SDK(C# / Go / Python / TypeScript / PHP / Java)를 통한 백엔드 서버에서의 호출 매니지먼트 콘솔(동작 확인·운용 시) GS2 CLI 각종 SDK의 상세 내용은 해당 레퍼런스 페이지를 참조해 주세요. 더 실전적인 정보 이중 실행 방지 패턴 온라인 게임에서는 네트워크가 불안정하여 플레이어가 동일한 리퀘스트를 짧은 시간에 여러 번 전송하는 경우가 있습니다. 이러한 리퀘스트를 서버 측에서 그대로 받아들이면, 아이템의 이중 지급 등으로 이어집니다. 트랜잭션 ID를 리퀘스트마다 발급하고, GS2-Lock 에서 짧은 시간의 TTL을 가진 잠금을 획득함으로써, 동일한 트랜잭션 ID에 의한 중복 처리는 참조 카운트로 취급되고, 서로 다른 리퀘스트로 받은 동종 처리는 경합으로 걸러낼 수 있습니다. 백엔드 간 정합성 확보 여러 백엔드 서버가 공통 리소스에 쓰기를 수행하는 시나리오에서는, GS2-Lock 으로 리소스 단위의 뮤텍스를 획득한 뒤 읽기·갱신·쓰기를 수행하는 설계가 유효합니다. 프로퍼티 ID에 리소스의 식별자를 포함시킴으로써, 리소스별 세밀한 배타 제어를 실현할 수 있습니다. 상세 레퍼런스 GS2-Lock API 레퍼런스","lang":"ko","section":"microservices","summary":"분산 배타 제어 기능\n","title":"GS2-Lock","url":"/ko/microservices/lock/"},{"content":"GS2-Log는 게임에 통합된 모든 Game Server Services 마이크로서비스의 API 액세스 로그를 집약·저장하는 기능을 제공합니다. 게임 운영에 있어 “언제·누가·어떤 API를·어떤 인수로 호출하고·어떤 결과를 반환했는가\"를 나중에 추적할 수 있는 것은 매우 중요합니다. 부정 플레이어 조사, 게임 밸런스 확인, 문의 대응, KPI 집계 등 모든 운영 업무의 기반으로 GS2-Log의 데이터를 활용할 수 있습니다. GS2-Log의 기능은 게임 클라이언트에서 직접 이용하는 것이 아니라, 운영 측 도구나 데이터 분석 기반과 연동하여 활용하기 위한 것입니다. 로그의 종류 GS2-Log는 다음 4가지 종류의 로그를 기록합니다. AccessLog 각 마이크로서비스의 API가 호출될 때마다 기록되는 로그입니다. timestamp : API 호출 시각 requestId : 요청을 고유하게 식별하는 ID service : 호출된 마이크로서비스 이름 method : 호출된 API 메서드 이름 userId : 호출한 사용자ID request : 요청 파라미터 (JSON 문자열) result : 응답 내용 (JSON 문자열) API 단위의 세밀한 동작 추적이 가능하여, 버그 조사나 행동 로그 분석에 이용할 수 있습니다. IssueStampSheetLog 트랜잭션이 발행될 때 기록되는 로그입니다. 트랜잭션은 Game Server Services에서 획득·소비 액션을 일괄 실행하는 단위이며, 발행 시의 소비 액션 목록과 무엇을 계기로 발행되었는지를 기록합니다. timestamp : 발행 시각 transactionId : 트랜잭션ID(트랜잭션 발행 단위의 식별자) service : 발행 원본 마이크로서비스 method : 발행 원본 API userId : 사용자ID action : 획득 액션 args : 액션의 인수 tasks : 트랜잭션에 포함된 소비 액션 목록 ExecuteStampSheetLog / ExecuteStampTaskLog 트랜잭션 전체·소비 액션이 실행될 때 기록되는 로그입니다. IssueStampSheetLog 와 조합함으로써, 언제 발행된 트랜잭션이 언제 어떻게 실행되었는지를 추적할 수 있습니다. 이 정보는 리플레이 공격이나 부정한 다중 실행, 서비스 간 정합성 문제의 감지에 활용할 수 있습니다. sequenceDiagram participant Client participant ServiceA as 마이크로서비스A participant Sheet as 트랜잭션 participant ServiceB as 마이크로서비스B participant Log as GS2-Log Client-\u003e\u003eServiceA: 보상 요청 ServiceA-\u003e\u003eLog: AccessLog ServiceA-\u003e\u003eSheet: 트랜잭션 발행 ServiceA-\u003e\u003eLog: IssueStampSheetLog Sheet-\u003e\u003eServiceB: 소비 액션 실행 ServiceB-\u003e\u003eLog: ExecuteStampTaskLog Sheet-\u003e\u003eLog: ExecuteStampSheetLog 로그 내보내기 대상 GS2-Log에서 기록한 로그는 네임스페이스 설정에서 지정한 내보내기 대상으로 전송할 수 있습니다. type 연동 대상 설명 gs2 GS2 내부 로그 스토리지 내보내지 않고 GS2-Log 내에 보관 bigquery Google Cloud BigQuery gcpCredentialJson 과 bigQueryDatasetName 을 지정 firehose Amazon Kinesis Data Firehose awsRegion / awsAccessKeyId / awsSecretAccessKey / firehoseStreamName 을 지정 내보내기 대상에서 집계 쿼리를 작성함으로써, DAU·과금액·특정 아이템 획득 수 등의 커스텀 KPI를 지속적으로 계측할 수 있습니다. 로그 보존 기간 logExpireDays 를 지정함으로써 GS2-Log 내 로그 보존 일수를 제어할 수 있습니다. 장기 보존이 필요한 로그는, 위의 내보내기 기능을 사용해 자체 데이터 웨어하우스로 전송하는 운영이 권장됩니다. 인게임 로그 클라이언트가 임의의 페이로드를 GS2-Log에 송신할 수 있는 “인게임 로그” 기능도 있습니다. 게임 내에서 발생한 임의의 이벤트(스테이지 클리어, 가챠 결과, UI 조작 등)를 payload 와 tags 의 조합으로 송신하여, AccessLog와 동일한 집계 기반에서 다룰 수 있습니다. 트랜잭션 액션 GS2-Log에서는 트랜잭션 액션을 제공하지 않습니다. 마스터 데이터 관리 GS2-Log는 마스터 데이터를 가지지 않습니다. 로그 집약 대상 등은 네임스페이스 설정으로 구성합니다. 구현 예제 GS2-Log는 집약·분석이 중심이며, 조회 계열 API는 운영 측 도구·대시보드에서 호출하는 것을 상정하고 있습니다. 인게임 로그 송신만 게임 클라이언트에서 이용하므로, Unity SDK와 Godot SDK의 샘플을 제시합니다. 집계 API·내보내기 설정 등은, 관리 콘솔 또는 각 언어용 일반 SDK (C# / Go / Python / TypeScript / PHP / Java)에서 조작해 주십시오. 인게임 로그 송신 임의의 페이로드와 태그를 붙여 인게임 로그를 송신합니다. 태그는 BigQuery 등에서의 필터링에 사용할 수 있으므로, 이벤트 종류나 스테이지ID 등을 저장하면 분석 시 도움이 됩니다. Game Engine: Unity Godot var domain = await gs2 . Log . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendInGameLogAsync ( payload : \"{\\\"event\\\":\\\"stage_clear\\\",\\\"stageId\\\":\\\"stage-0001\\\"}\" , tags : new [] { new Gs2 . Unity . Gs2Log . Model . EzInGameLogTag { Key = \"category\" , Value = \"stage\" , }, } ); var async_result = await ez . log . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . send_in_game_log ( ' {\"event\":\"stage_clear\",\"stageId\":\"stage-0001\"} ' , [ Gs2LogEzInGameLogTag . new () . with_key ( \"category\" ) . with_value ( \"stage\" ), ] ) if async_result . error != null : push_error ( str ( async_result . error )) return Unreal Engine용 SDK에는 게임 클라이언트용 Ez Domain 클래스가 제공되지 않습니다. Unreal Engine에서 인게임 로그를 송신하려면, GS2-Log의 SendInGameLog API를 Source SDK를 통해 직접 호출하십시오. 보다 실전적인 정보 로그를 이용한 부정 감지 IssueStampSheetLog 와 ExecuteStampSheetLog 를 대조함으로써, 발행된 트랜잭션이 예상대로 실행되었는지를 검증할 수 있습니다. 동일한 transactionId 로 실행 로그가 여러 건 기록된 경우나, 발행 로그가 존재하지 않는데 실행 로그가 있는 경우 등은, 리플레이 공격이나 부정한 클라이언트 구현이 의심됩니다. 로그 집계 운영 예시 내보내기 대상인 BigQuery 등에 대해 정기적으로 집계 쿼리를 실행함으로써 다음과 같은 지표를 얻을 수 있습니다. 하루당 활성 사용자 수 ( userId 의 중복 제거) 특정 마이크로서비스·API의 호출 횟수 가챠·구매·경험치 획득 등의 트랜잭션 발행 빈도 오류 응답이 반환된 API의 비율과 추세 상세 레퍼런스 GS2-Log API 레퍼런스","lang":"ko","section":"microservices","summary":"API 액세스 로그·분석 기능\n","title":"GS2-Log","url":"/ko/microservices/log/"},{"content":"게임에 매일 로그인한 플레이어에게 보상을 지급하는 구조입니다. 일별 아이템 지급이나 7일/30일 주기로 반복되는 로그인 보너스, 놓친 날의 보상을 나중에 보전해 주는 기능 등, 운영 현장에서 자주 사용되는 패턴을 범용적으로 제공합니다. 모드 로그인 보너스의 제공 방식에는 《스케줄 모드》와 《스트리밍 모드》 2가지 방식이 있습니다. graph LR Mode{보너스 모드} --\u003e Schedule[\"스케줄 모드 (mode: schedule)\"] Mode --\u003e Streaming[\"스트리밍 모드 (mode: streaming)\"] Schedule -- 날짜에 고정 --\u003e SchEx[\"1일차=금화, 2일차=은화… 놓치면 건너뜀\"] Streaming -- 순서대로 소화 --\u003e StrEx[\"1번째=금화, 2번째=은화… 놓쳐도 다음으로 이월\"] Streaming --\u003e Repeat{\"repeat 설정\"} Repeat -- enabled --\u003e Loop[\"끝에 도달 후 처음부터 재개\"] Repeat -- disabled --\u003e Stop[\"끝에서 정지\"] 스케줄 모드 GS2-Schedule 의 이벤트와 연결하여 이용합니다. 보상으로 지급할 트랜잭션 액션을 각 일정별로 정의합니다. 이벤트 시작 일시부터 24시간마다 보상이 변경되며, 각 보상은 1회씩 받을 수 있습니다. 도중에 놓친 보상이 있을 경우 건너뜁니다. 스트리밍 모드 스트리밍 모드는 스트림에 설정된, 보상으로 지급할 트랜잭션 액션을 앞에서부터 순서대로 지급합니다. 받지 않은 날이 있더라도 건너뛰지 않고 스트림의 다음 보상을 받을 수 있습니다. 스트리밍 모드의 로그인 보너스에 GS2-Schedule 의 이벤트를 연결하면, 이벤트 시작 일시부터 24시간마다 스트림의 다음 보상을 받을 수 있습니다. 설정하지 않는 경우, 보상 종류가 바뀌는 시각을 UTC 타임존 기준 24시간 단위로 지정하여 이용합니다. 반복 스트리밍 모드의 로그인 보너스에는 반복 설정을 할 수 있습니다. 반복 설정( repeat: enabled )을 활성화하면, 스트림의 끝에 도달한 경우 다음 날에는 스트림의 처음부터 보상 수령을 다시 시작할 수 있습니다. 이 기능을 이용하면 상시 로그인 보너스를 7일마다 또는 30일마다 반복시킬 수 있습니다. repeat: disabled 를 선택하면, 스트림의 끝까지 지급한 후에는 해당 보너스로부터의 보상 획득이 중지됩니다. 기간 한정 캠페인 등에 이용할 수 있습니다. 놓친 경우 보전 스케줄 모드에서 보상을 놓친 경우나, 스트리밍 모드에서도 이벤트 개최 기간 중 스트림의 모든 아이템을 획득할 수 없는 상태에 빠졌을 때 사용할 수 있는 기능이 놓친 경우 보전 기능입니다. 설정된 비용을 지불함으로써 놓친 아이템을 획득할 수 있습니다. 놓친 경우 보전을 이용할 수 있는 것은 GS2-Schedule 의 이벤트와 연결된 로그인 보너스뿐이며, 이벤트 시작일로부터 경과한 일수까지의 보상만 받을 수 있습니다. 즉, 미래의 로그인 보너스는 비용을 지불하더라도 받을 수 없습니다. 놓친 경우 보전의 비용으로 missedReceiveReliefConsumeActions 에 GS2-Money2 등의 소비 액션을 설정할 수 있으며, 젬을 소비하여 놓친 날을 되찾는 운영이 가능합니다. 수령 전제 조건으로 missedReceiveReliefVerifyActions 에 검증 액션을 지정할 수도 있습니다. 버프에 의한 보정 GS2-Buff 와 연동하면 보너스 모델의 acquireActions 나 missedReceiveReliefConsumeActions 에 버프를 적용하여, 보상 내용이나 놓친 경우 보전 비용을 이벤트에 맞춰 동적으로 조정할 수 있습니다. 예를 들어 “캠페인 기간 중에는 로그인 보너스를 2배로 한다”, “VIP 플레이어는 놓친 경우 보전 비용을 절반으로 한다\"와 같은 운영이 가능합니다. 스크립트 트리거 네임스페이스에 receiveScript 를 설정하면 로그인 보너스 수령 처리 전후로 receive ／ receiveDone 스크립트 훅을 호출할 수 있습니다. 스크립트는 동기·비동기 실행 방식을 선택할 수 있으며, 비동기에서는 GS2-Script 나 Amazon EventBridge 를 이용한 외부 연동에도 대응합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. receiveScript (완료 알림: receiveDone ): 로그인 보너스 수령 전후 마스터 데이터 운영 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. BonusModel : 일일 또는 스트리밍 방식의 보상 정의 마스터 항목 설명 name 보너스 모델 이름 mode schedule (스케줄) 또는 streaming (스트리밍) periodEventId 연결할 GS2-Schedule 의 이벤트ID(옵션) resetHour 스트리밍 모드에서 이벤트 미연결 시 보상 전환을 수행하는 UTC 시각 repeat 스트리밍 시 반복 동작( enabled / disabled ) rewards 각 단계에서 지급하는 acquireActions 목록 missedReceiveRelief 놓친 경우 보전 활성화( enabled / disabled ) missedReceiveReliefVerifyActions 놓친 경우 보전 실행 전 검증 액션 missedReceiveReliefConsumeActions 놓친 경우 보전 실행 시 소비 액션 다음은 마스터 데이터 JSON 예제입니다. { \"version\": \"2020-10-19\", \"bonusModels\": [ { \"name\": \"bonus-0001\", \"metadata\": \"7days\", \"mode\": \"streaming\", \"resetHour\": 15, \"repeat\": \"enabled\", \"rewards\": [ { \"acquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \"request\": \"...\" } ] }, { \"acquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \"request\": \"...\" } ] } ], \"missedReceiveRelief\": \"disabled\" } ] } 마스터 데이터 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성하는 것도 가능합니다. 트랜잭션 액션 GS2-LoginReward 에서는 다음과 같은 트랜잭션 액션을 제공합니다. 소비 액션 액션 용도 Gs2LoginReward:MarkReceivedByUserId 지정한 단계를 수령 완료로 표시합니다. 획득 액션 액션 용도 Gs2LoginReward:DeleteReceiveStatusByUserId 수령 상태를 초기화합니다. 처음부터 로그인 보너스를 다시 받게 하고 싶은 경우에 이용합니다. Gs2LoginReward:UnmarkReceivedByUserId 지정한 단계를 미수령 상태로 되돌립니다. “수령 상태 초기화\"를 획득 액션으로 이용함으로써, 특정 아이템을 획득했을 때나 이벤트의 전환점 등에서 로그인 보너스 수령 현황을 처음부터 다시 시작하게 하는 처리가 가능해집니다. 이를 통해 정기적인 캠페인 초기화나 특별한 조건 달성에 따른 보너스 재획득 기회를 플레이어에게 제공할 수 있습니다. 구현 예제 로그인 보너스 수령 ReceiveAsync 는 다음에 받을 수 있는 보너스를 자동으로 수령합니다. 지급물은 EzTransactionDomain 으로 반환되므로, 반환값에 대해 WaitAsync 등을 호출하여 결과를 반영합니다. Game Engine: Unity Unreal Engine Godot var transaction = await gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Bonus ( ). ReceiveAsync ( bonusModelName : \"bonus-0001\" , config : null ); await transaction . WaitAsync (); const auto Future = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Bonus ( ) -\u003e Receive ( \"bonus-0001\" , // bonusModelName nullptr // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . bonus ( ) var async_result = await domain . receive ( \"bonus-0001\" , # bonus_model_name null # config ) if async_result . error != null : if async_result . error . type == \"AlreadyReceivedException\" : # 오늘의 로그인 보너스는 이미 받았습니다. pass push_error ( str ( async_result . error )) return var result = async_result . result 놓친 날의 보상 수령(놓친 경우 보전) MissedReceiveAsync 를 호출함으로써, missedReceiveReliefConsumeActions 에 정의된 비용을 지불하고 과거에 놓친 특정 단계를 받을 수 있습니다. Game Engine: Unity Unreal Engine Godot var transaction = await gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Bonus ( ). MissedReceiveAsync ( bonusModelName : \"bonus-0001\" , stepNumber : 2 , config : null ); await transaction . WaitAsync (); const auto Future = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Bonus ( ) -\u003e MissedReceive ( \"bonus-0001\" , // bonusModelName 2 , // stepNumber nullptr // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . bonus ( ) var async_result = await domain . missed_receive ( \"bonus-0001\" , # bonus_model_name 1 , # step_number null # config ) if async_result . error != null : if async_result . error . type == \"AlreadyReceivedException\" : # 오늘의 로그인 보너스는 이미 받았습니다. pass push_error ( str ( async_result . error )) return var result = async_result . result 로그인 보너스 수령 상태 조회 ReceiveStatus 의 ReceivedSteps 에는 각 단계의 수령 완료 여부가 불리언 배열로 저장됩니다. UI 측에서 “○일차 수령 완료\"와 같이 달력으로 표시할 때 등에 이용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveStatus ( bonusModelName : \"bonus-0001\" ). ModelAsync (); for ( var i = 0 ; i item . ReceivedSteps . Count ; i ++) { Debug . Log ( $\"step {i + 1}: {(item.ReceivedSteps[i] ? \" received \" : \" not yet \")}\" ); } const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e ReceiveStatus ( \"bonus-0001\" // bonusModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_status ( \"bonus-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 로그인 보너스 내용 확인 UI에 “내일 받을 수 있는 보상”, “마지막 날에 받을 수 있는 보상\"을 미리보기로 표시할 때는, BonusModel 의 Rewards 에서 각 단계의 AcquireActions 를 가져올 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). BonusModel ( bonusModelName : \"bonus-0001\" ). ModelAsync (); foreach ( var reward in item . Rewards ) { foreach ( var action in reward . AcquireActions ) { Debug . Log ( $\"{action.Action}: {action.Request}\" ); } } const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BonusModel ( \"bonus-0001\" // bonusModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . bonus_model ( \"bonus-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-LoginReward API 레퍼런스","lang":"ko","section":"microservices","summary":"로그인 보너스 기능","title":"GS2-LoginReward","url":"/ko/microservices/login_reward/"},{"content":"가챠를 구현하기 위한 시스템입니다. GS2-Lottery는 일반 가챠와 박스 가챠를 지원합니다. graph TD Trigger[\"추첨 트리거 (GS2-Showcase의 구매 보상 / 퀘스트 클리어 보상 등)\"] --\u003e LotteryModel[\"LotteryModel (추첨 모델)\"] LotteryModel -- \"mode = normal\" --\u003e Normal[\"일반 모드 추첨\"] LotteryModel -- \"mode = box\" --\u003e Box[\"박스 모드 추첨\"] Normal --\u003e PrizeTable[\"경품 테이블 (PrizeTable)\"] Box --\u003e BoxData[\"플레이어 전용 박스\"] PrizeTable --\u003e Prize[\"Prize (acquireActions)\"] BoxData --\u003e Prize Prize --\u003e Acquire[\"GS2-Distributor 보상 배포\"] 일반 가챠 일반 가챠는 지정된 확률로 순수한 추첨을 진행합니다. 경품 테이블 경품 테이블이란 가챠를 실행했을 때 나오는 경품의 배출 확률을 정의한 것입니다. 마스터 데이터로 정의하게 됩니다. 가중치 경품 테이블에서 확률 설정은 경품별 가중치를 설정합니다. 구체적으로는 다음과 같은 테이블을 작성하게 됩니다. 가중치 경품A 1 경품B 2 경품C 4 이를 백분율 확률로 해석하면 다음과 같이 해석할 수 있습니다. 가중치 확률 경품A 1 14.285% 경품B 2 28.571% 경품C 4 57.143% 백분율 기준으로 확률을 설정해야 할 경우 모든 값을 더해서 100%가 되도록 고려해야 하지만 가중치 기준으로 확률을 설정할 경우에는 그런 부담을 질 필요가 없습니다. 경품 테이블의 중첩 경품 테이블은 최대 5단계까지 중첩할 수 있습니다. 구체적인 사용 방법으로는 SSR 캐릭터의 배출 확률을 3% SR 캐릭터의 배출 확률을 7% R 캐릭터의 배출 확률을 90% 라는 기본 방침에 따라 배출 캐릭터를 설정하고 싶을 때 유용합니다. 이 경우 2단계로, 4개의 경품 테이블을 정의하게 됩니다. 레어도 추첨용 경품 테이블 가중치 경품 종류 추첨 테이블 이름 SSR 3 경품 테이블의 중첩 SSR 캐릭터 추첨용 경품 테이블 SR 7 경품 테이블의 중첩 SR 캐릭터 추첨용 경품 테이블 R 90 경품 테이블의 중첩 R 캐릭터 추첨용 경품 테이블 SSR 캐릭터 추첨용 경품 테이블 가중치 경품 종류 추첨 테이블 이름 SSR-0001 1 입수 처리 SSR-0001을 GS2-Dictionary에 기록 SSR-0002 1 입수 처리 SSR-0002를 GS2-Dictionary에 기록 SSR-0003 1 입수 처리 SSR-0003을 GS2-Dictionary에 기록 SR 캐릭터 추첨용 경품 테이블 가중치 경품 종류 추첨 테이블 이름 SR-0001 1 입수 처리 SR-0001을 GS2-Dictionary에 기록 SR-0002 1 입수 처리 SR-0002를 GS2-Dictionary에 기록 SR-0003 1 입수 처리 SR-0003을 GS2-Dictionary에 기록 R 캐릭터 추첨용 경품 테이블 가중치 경품 종류 추첨 테이블 이름 R-0001 1 입수 처리 R-0001을 GS2-Dictionary에 기록 R-0002 1 입수 처리 R-0002를 GS2-Dictionary에 기록 R-0003 1 입수 처리 R-0003을 GS2-Dictionary에 기록 박스 가챠 박스 가챠는 마스터 데이터로 정의된 경품을 지정된 수량만큼 박스에 투입하고 추첨 처리를 진행할 때는 박스에서 경품을 꺼내는 방식으로 경품의 내용을 결정합니다. 즉, 100개의 경품 중 1개의 “당첨\"을 넣은 박스를 준비한 경우, 100회 이내에 반드시 “당첨” 경품이 추첨됩니다. 박스에 경품 투입 박스 내부의 경품 설정에도 경품 테이블을 사용합니다. 일반 추첨 모드에서는 배출 가중치를 설정했지만, 박스 모드에서는 가중치 파라미터에 박스에 경품을 투입하는 수량을 설정합니다. 가중치 경품A 1 경품B 2 경품C 4 이 경우, 박스에는 처음에 7개의 경품이 들어 있으며 “경품A 1개”, “경품B 2개”, “경품C 4개\"가 들어 있는 상태가 됩니다. Warning 박스 모드의 추첨 처리는 최초 추첨 시 박스 내용물을 셔플한 배열을 준비하고, 추첨 처리는 그 배열에서 순서대로 경품을 배출합니다. 따라서 한 번이라도 추첨 처리가 이루어진 박스의 경품 테이블 내용을 변경하면 의도하지 않은 동작을 일으킵니다. 박스 리셋 박스는 “박스 리셋” 액션을 통해 내용물을 초기 상태로 되돌릴 수 있습니다. 플레이어마다 독립된 박스를 가지므로, 컴플리트 보상 지급 후 박스를 다시 뽑고 싶거나, 매달 박스를 갱신하고 싶은 용도로 활용할 수 있습니다. 추첨 모델 추첨 모델에서는 경품 테이블 중 추첨 API에서 사용할 수 있는 경품 테이블을 지정합니다. 마스터 데이터로 정의하게 됩니다. 위 예시로 말하면, 추첨 API를 호출했을 때 갑자기 SSR 캐릭터 추첨용 경품 테이블을 사용해 추첨 처리가 이루어지면 불안합니다. 추첨 모델에 다음과 같은 마스터 데이터를 정의해 두고 추첨 모델 이름 경품 테이블 이름 가챠 레어도 추첨용 경품 테이블 추첨 처리를 호출할 때는 추첨 모델 이름에 “가챠\"를 지정해 추첨하게 됩니다. 추첨 모드(mode)와 추첨 방법(method) 추첨 모델에서는 mode 로 추첨 방식을, method 로 경품 테이블 참조 방법을 지정합니다. mode 설명 normal 일반 모드(지정된 확률로 매번 독립적으로 추첨을 진행) box 박스 모드(플레이어 고유의 박스에서 경품을 꺼냄) method 설명 prize_table 정적으로 지정된 경품 테이블을 사용 script GS2-Script를 사용해 동적으로 경품 테이블을 선택 스크립트를 통한 경품 테이블 선택 method 를 script 로 설정하고 choicePrizeTableScriptId 를 지정하면, 추첨 실행 시 GS2-Script를 호출해 동적으로 사용할 경품 테이블을 선택할 수 있습니다. 플레이어별 확률 변경(천장 시스템)이나, 진행 중인 이벤트에 따른 경품 테이블 전환을 구현할 수 있습니다. 스크립트 트리거 네임스페이스에 lotteryTriggerScriptId 를 설정하면, 추첨 처리 전에 GS2-Script를 동기 실행할 수 있습니다. 스크립트에서는 추첨 허용/거부를 판정하거나 추첨 결과를 덮어쓸 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. lotteryTriggerScriptId : 추첨 처리 전에 동기 실행 추첨 결과 검증이나, 특정 조건에서의 결과 교체 같은 커스텀 처리를 구현할 수 있습니다. 트랜잭션 액션 GS2-Lottery에서는 다음과 같은 트랜잭션 액션을 제공합니다. 입수 액션: 추첨 실행, 박스 리셋 “추첨 실행\"을 입수 액션으로 활용하면, 상점에서 상품을 구매하거나 퀘스트를 클리어했을 때의 보상으로 가챠(추첨)를 직접 실행하는 처리가 가능해집니다. 또한 “박스 리셋\"을 입수 액션에 포함하면, 특정 아이템을 입수한 시점이나 이벤트의 전환점에서 박스 가챠의 내용물을 자동으로 리셋해 처음부터 다시 뽑을 수 있는 상태로 만드는 제어를 트랜잭션 내에서 안전하게 수행할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 사용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. LotteryModel : 추첨 모델. 추첨 방식과 사용할 경품 테이블을 정의합니다. PrizeTable : 경품 테이블. 경품의 가중치와 입수 액션, 또는 중첩된 경품 테이블을 정의합니다. Prize : 경품의 단위. acquireActions 로 얻을 수 있는 보상을 지정하며, drawnLimit 과 limitFailOverPrizeId 로 배출 제한과 실패 시 대체 대상을 설정할 수 있습니다. 마스터 데이터의 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 이하는 마스터 데이터의 JSON 예시입니다. { \"version\": \"2019-02-21\", \"lotteryModels\": [ { \"name\": \"lottery-0001\", \"metadata\": \"일반 가챠\", \"mode\": \"normal\", \"method\": \"prize_table\", \"prizeTableName\": \"rarity\" } ], \"prizeTables\": [ { \"name\": \"rarity\", \"metadata\": \"레어도 추첨\", \"prizes\": [ { \"prizeId\": \"ssr\", \"type\": \"prize_table\", \"prizeTableName\": \"ssr-prizes\", \"weight\": 3 }, { \"prizeId\": \"sr\", \"type\": \"prize_table\", \"prizeTableName\": \"sr-prizes\", \"weight\": 7 }, { \"prizeId\": \"r\", \"type\": \"prize_table\", \"prizeTableName\": \"r-prizes\", \"weight\": 90 } ] } ] } 구현 예제 추첨 실행 추첨 실행은 게임 엔진용 SDK에서는 처리할 수 없습니다. GS2-Showcase의 상품 구매 보상으로 추첨을 실행하는 방식으로 구현해 주세요. GS2-Showcase의 acquireActions 에 GS2-Lottery의 DrawByUserId 를 포함시키면, 구매 처리의 트랜잭션으로 추첨을 실행할 수 있습니다. 배출 확률 조회 경품 표시용으로, 현재 플레이어에 대한 배출 확률을 가져올 수 있습니다. 배출 수량 제한(후술)이 걸려 있는 경우, 그 영향이 반영된 확률이 반환됩니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ProbabilitiesAsync ( lotteryName : \"lottery-0001\" ). ToListAsync (); const auto It = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Probabilities ( \"lottery-0001\" // lotteryName ); TArray Gs2 :: UE5 :: Lottery :: Model :: FEzProbabilityPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . lottery . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . probabilities ( \"lottery-0001\" ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 박스의 내용물 조회 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BoxItems ( prizeTableName : \"prizeTable-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BoxItems ( \"prizeTable-0001\" // prizeTableName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . lottery . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . box_items ( \"prizeTable-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 박스 리셋 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BoxItems ( prizeTableName : \"prizeTable-0001\" ). ResetBoxAsync ( ); const auto Future = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e BoxItems ( \"prizeTable-0001\" // prizeTableName ) -\u003e ResetBox ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . lottery . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . box_items ( \"prizeTable-0001\" ) var async_result = await domain . reset_box ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 추첨 모델 목록 조회 UI에서 가챠 목록을 표시하는 용도로, 네임스페이스 내에 정의된 추첨 모델을 조회할 수 있습니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). LotteryModelsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e LotteryModels (); TArray Gs2 :: UE5 :: Lottery :: Model :: FEzLotteryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . lottery . namespace_ ( \"namespace-0001\" ) . lottery_models ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 기타 기능 경품 배출 수량 제한 일반 모드로 동작시킬 때, 경품별로 배출 수량의 상한을 설정할 수 있습니다. 이 기능을 사용하면 Probabilities 함수가 응답하는 확률과 실제 확률 사이에 차이가 발생합니다. Probabilities를 사용해 배출 확률을 표시할 때는 이 기능을 사용해서는 안 됩니다. 용도로 상정하고 있는 것은 실물 경품을 배포하기 위한 추첨 처리입니다. 확률 1%로 배출되는 상품권이 있다고 할 때, 상품권이 100장밖에 준비되어 있지 않은 경우 이 기능이 도움이 됩니다. 상품권의 배출 수량 상한을 100으로 설정하고, 실패 시 대체 경품에는 꽝이나 다른 당첨 경품을 설정합니다. 이렇게 설정하면, 이미 상품권을 100장 배출한 상태에서 상품권이 당첨된 경우 상품권 대신 실패 시 대체 경품으로 설정한 경품이 배출됩니다. 실패 시 대체 경품에 수량 제한이 설정되어 있는 경우는 동일한 제한이 적용됩니다. 상세 레퍼런스 GS2-Lottery API 레퍼런스","lang":"ko","section":"microservices","summary":"추첨 처리 기능\n","title":"GS2-Lottery","url":"/ko/microservices/lottery/"},{"content":"플레이어를 조건에 따라 그룹화하는 기능입니다. 대전 상대를 찾기 위해 사용할 수 있습니다. 스크립트 트리거 네임스페이스에 createGatheringTriggerScriptId · completeMatchmakingTriggerScriptId · changeRatingScript 를 설정하면, 개더링 생성 완료 시·매칭 완료 시·레이팅 변동 시에 커스텀 스크립트를 실행할 수 있습니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. createGatheringTriggerScriptId : 개더링 생성 완료 시 completeMatchmakingTriggerScriptId : 매칭 완료 시 changeRatingScript : 레이팅 변동 시 푸시 알림 설정 가능한 주요 푸시 알림과 설정명은 다음과 같습니다. joinNotification : 매칭 참가 시 알림 leaveNotification : 매칭 이탈 시 알림 completeNotification : 매칭 완료 시 알림 changeRatingNotification : 레이팅 변동 시 알림 모두 GS2-Gateway 를 통해 알림을 보낼 수 있으며, 오프라인 단말로의 모바일 푸시 전송도 가능합니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 사용할 수 있는 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. RatingModel : 레이팅 계산 설정 SeasonModel : 시즌 기간 설정 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 등의 워크플로우를 구성할 수 있습니다. 추가 설정 enableDisconnectDetection 을 활성화하면 매치메이킹 중 연결 끊김 감지를 수행하며, disconnectDetectionTimeoutSeconds 로 타임아웃을 조정할 수 있습니다. 또한 enableCollaborateSeasonRating 을 설정하면 매치메이킹 완료 시 GS2-SeasonRating과 연계하여 결과를 받는 세션을 생성할 수 있습니다. 트랜잭션 액션 GS2-Matchmaking 에서는 다음의 트랜잭션 액션을 제공합니다. 검증 액션: 영속 개더링 참가 상태 검증 “영속 개더링 참가 상태 검증\"을 검증 액션으로 사용하면, 특정 시즌 개더링(팀이나 클러스터)에 소속된 플레이어만 받을 수 있는 보상 설정 등이 가능해집니다. 이를 통해 시즌별 그룹 대항 이벤트나, 특정 커뮤니티 한정 인센티브 지급과 같은 정책을 트랜잭션 내에서 안전하게 제어할 수 있습니다. 유스케이스별 설계 가이드 파티 토큰을 사용한 매치메이킹 매치메이킹 완료 후 1명이 이탈하여 충원하고 싶은 경우나, 사전에 파티를 편성한 후 매치메이킹을 하고 싶은 경우에는 “파티 토큰\"을 사용합니다. 파티 멤버는 각각 플레이어 토큰(유효기간 3분)을 발급하여 파티 대표자에게 전송합니다. 대표자는 파티 토큰 발급 API에 이를 전송함으로써 파티 토큰(유효기간 10분)을 획득하고, 개더링 생성 또는 개더링 검색을 호출합니다. 이를 통해 파티 멤버 전원이 참가한 상태의 개더링을 생성하거나 참가할 수 있습니다. 파티 간 매치메이킹 예를 들어 4 vs 4 대전에서 사전에 편성한 파티를 분산시키고 싶지 않은 경우, 먼저 4인 매치메이킹을 실행하여 파티 단위의 개더링을 생성하고, 그 후 각 파티의 대표자가 정원 2명의 매치메이킹을 수행함으로써 파티 간 매치메이킹을 구현할 수 있습니다. 매치메이킹 중 플레이어 간 통신 매치메이킹 완료 전에 플레이어 간의 소통이 필요한 경우, 개더링 생성 시 다음 2가지 방법을 사용할 수 있습니다. GS2-Chat 와 연계한 채팅방 생성 : 메타데이터의 저빈도(초당 3회 이내) 교환에 적합합니다 GS2-Realtime 과 연계한 게임 서버 기동 : 고빈도 통신이나, 인원이 부족한 상태에서 게임을 진행시키고 싶은 경우에 적합합니다 매치메이킹 완료 후 처리 매치메이킹이 완료되면 다음 방법으로 플레이어에게 알릴 수 있습니다. GS2-Gateway 를 사용한 게임 내 푸시 알림 GS2-JobQueue 에 의한 작업 등록 또한 GS2-Script 를 사용하여 임의의 스크립트를 실행할 수도 있습니다. GS2-Realtime 을 사용하는 경우, 매치메이킹 완료 후 실행되는 GS2-Script 에서 GS2-Realtime 의 개더링을 생성하고, IP 주소·포트 정보를 푸시 알림 또는 잡 큐를 사용해 통지함으로써 게임 서버로 유도할 수 있습니다. 블랙리스트를 이용한 매칭 제외 개더링 생성 시·검색 시에 사용자ID 블랙리스트를 지정할 수 있습니다. 검색 시 지정한 블랙리스트는 참가한 개더링의 블랙리스트에 추가됩니다. 자신이 블랙리스트에 포함되어 있는 경우 매치메이킹 대상에서 제외됩니다. 스탠다드 매치메이킹 개더링 개더링은 매치메이커에 의해 그룹화된 플레이어의 집합입니다. 개더링의 라이프사이클은 최초에 플레이어에 의해 명시적으로 생성됩니다. 다른 플레이어가 매치메이킹을 실행하여 조건에 부합하면 개더링에 참가하게 됩니다. 개더링 생성 시 지정한 인원수의 플레이어가 모이면, 매치메이킹 결과를 플레이어에게 통지하고 GS2-Matchmaking 상에서 개더링은 삭제됩니다. 속성 플레이어는 최대 5개의 속성값을 가질 수 있습니다. 개더링을 생성할 때는 모집할 플레이어의 각 속성값 범위를 설정하여 개더링을 생성합니다. 예를 들어, 다음과 같은 속성값을 가진 플레이어가 있다고 합시다. 속성명 속성값 GameMode 1 Stage 10 Level 5 GameMode 는 게임 내에서 전 세계 플레이어를 매치메이킹 대상으로 하는지(1) 아니면 각 리전별로 매치메이킹하는지(2=JP, 3=US, 4=EU)를 나타내는, 희망하는 게임 모드를 나타내는 값이라고 합시다. Stage 는 대전에 사용하고 싶은 게임 내 스테이지의 종류를 나타낸다고 합니다. 마지막으로 Level 은 플레이어의 실력 수준입니다. 이 플레이어가 대전 상대를 찾기 위해 개더링을 생성하는 경우, 개더링에 어떤 조건을 설정하는 것이 좋을지 생각해봅시다. 속성명 속성값(최소) 속성값(최대) GameMode 1 1 Stage 10 10 Level 2 8 위와 같은 범위 설정이 좋을 것입니다. GameMode 나 Stage 는 완전히 일치하지 않으면 플레이어가 원하는 조건으로 플레이하게 할 수 없습니다. Level 은 플레이어 레벨의 전후 3에 해당하는 플레이어를 대상으로 합시다. 이렇게 개더링을 생성하면, 조건에 맞는 플레이어가 매치메이킹 리퀘스트를 보낼 때 개더링에 참가하게 됩니다. 역할 개더링을 생성할 때는 모집 인원수를 설정해야 합니다. 모집 인원수를 설정할 때, 역할별로 모집 인원수를 설정할 수 있습니다. 특히 게임 내에 역할이 없는 경우에는 default 라는 이름의 역할 하나만 설정하고, 그 역할의 모집 인원수에 모으고 싶은 인원수를 지정합니다. 역할 지정이 필요해지는 경우는 게임 내에 역할이 존재하는 게임입니다. 예를 들어 MMORPG 에서는 플레이어의 직업에 따라 탱커·힐러·DPS 와 같은 게임 내 역할이 존재합니다. 그리고 매치메이킹을 수행한 결과 힐러 4명이 모이더라도 콘텐츠는 공략할 수 없습니다. 각 역할이 균형있게 매치메이킹되어야 합니다. 이러한 사양에서는 다음과 같은 역할과 모집 인원수를 설정합니다. 역할명 모집 인원수 탱커 1 힐러 1 DPS 2 그리고 플레이어는 매치메이킹 리퀘스트를 보낼 때 속성값뿐만 아니라 자신의 역할도 설정합니다. 이렇게 하면 역할별로 모집 인원수 슬롯이 관리되어 매치메이킹이 실행됩니다. 역할의 별칭 더욱 복잡한 조건 설정을 바탕으로 역할 기반 매치메이킹을 수행하는 예를 소개합니다. DPS 에는 근거리DPS 와 원거리DPS 2종류가 있다고 합시다. 기본적인 매치메이킹 조건은 앞서 설명한 대로면 되지만, 개더링 생성자의 고집으로 근거리DPS 와 원거리DPS 가 한 명씩 들어와 주었으면 한다고 합시다. 이 경우, 조건 설정은 다음과 같이 됩니다. 역할명 모집 인원수 탱커 1 힐러 1 근거리DPS 1 원거리DPS 1 그리고 플레이어는 매치메이킹을 할 때 “DPS” 가 아니라 “근거리DPS” 혹은 “원거리DPS” 를 지정합니다. 하지만 이대로라면 “DPS 가 2명 모이기만 하면 근거리든 원거리든 상관없다” 는 사람과는 매치메이킹할 수 없게 되어버립니다. 이때 사용할 수 있는 기능이 역할의 별칭입니다. 플레이어가 역할에 “근거리DPS” 혹은 “원거리DPS” 중 하나를 설정한다는 부분은 변하지 않지만, 개더링을 생성할 때의 조건 설정이 달라집니다. 역할명 별칭 모집 인원수 탱커 [] 1 힐러 [] 1 DPS [근거리DPS, 원거리DPS] 2 이렇게 하면, DPS 의 모집 슬롯에는 역할이 “근거리DPS” 나 “원거리DPS” 인 플레이어도 들어올 수 있게 됩니다. 레이팅 계산 플레이어의 실력을 나타내는 레이팅 값을 계산하는 기능이 준비되어 있습니다. 레이트 값은 초기값이 1500이며, 게임 결과에 따라 값이 오르내립니다. 레이트 값의 차이가 큰 플레이어끼리 대전하여 레이트 값이 높은 플레이어가 지면, 레이트 값이 높았던 패배한 플레이어의 레이트 값은 크게 하락하고, 레이트 값이 낮았던 승리한 플레이어의 레이트 값은 크게 상승합니다. 이러한 특성에 의해 플레이어의 실력을 반영한 레이트 값을 계산합니다. 투표 레이트 값을 변경하려면 투표 처리가 필요합니다. 대전이 끝나고 순위가 확정되면, 각 플레이어는 게임 결과를 서버에 전송합니다. 서버는 개더링별로 투표를 받아, 모든 플레이어가 투표를 마치거나 최초의 플레이어가 투표한 후 5분이 경과하면 투표를 마감합니다. 서버에서는 투표 내용으로 다수결을 취해 최종 결과를 확정합니다. 이 프로세스에 의해, 거짓 투표를 하는 악의적인 플레이어가 있더라도 결과에 반영되지 않도록 작용합니다. 다수결에 의해 확정된 순위를 바탕으로 새로운 레이트 값이 계산되어 반영됩니다. 투표 결과의 분열 서버가 다수결을 취하려고 할 때 결과가 동수가 되어 최종 결과를 확정할 수 없는 경우에는 레이트 계산이 이루어지지 않습니다. 그렇기 때문에, 1대1 게임에서는 올바른 레이트 값을 구하기가 어렵습니다. 이 문제를 해결하려면, 뒤에서 대전에 직접 관여하지 않는 3번째 플레이어를 매치메이킹하여 그 플레이어가 제3자 관점에서 투표하도록 하는 등의 방법이 필요합니다. 개더링의 유효기간 개더링은 원칙적으로 한번 생성되면, 매치메이킹이 성립하거나 모든 플레이어가 개더링에서 빠질 때까지 삭제되지 않습니다. 특히 플레이어가 적은 게임에서 매치메이킹 중에 플레이어가 취소 API를 호출하지 않고 게임을 종료한 경우 다른 플레이어가 매치메이킹 리퀘스트를 보내 매치메이킹이 성립하더라도 이미 개더링을 생성한 플레이어가 없는 상황이 발생할 수 있습니다. 이러한 문제를 간단히 해결하는 수단으로, 개더링 생성 시 개더링의 유효기간을 설정할 수 있습니다. 지정한 시각 또는 생성 시각으로부터의 경과 시간을 지정하면, 그 시각이 되면 개더링은 삭제됩니다. 이때, 이미 개더링에 참가 중인 플레이어는 자동으로 퇴장 처리가 이루어집니다. 구현 예제 개더링 생성 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CreateGatheringAsync ( player : new Gs2 . Unity . Gs2Matchmaking . Model . EzPlayer { Attributes = new [] { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute { Name = \"stage\" , Value = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute { Name = \"level\" , Value = 10 , }, }, }, attributeRanges : new [] { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"stage\" , Min = 1 , Max = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"level\" , Min = 0 , Max = 10 , }, }, capacityOfRoles : new [] { new Gs2 . Unity . Gs2Matchmaking . Model . EzCapacityOfRole { RoleName = \"default\" , Capacity = 4 , }, }, ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e CreateGathering ( MakeShared Gs2 :: Matchmaking :: Model :: FPlayer \u003e () -\u003e WithAttributes ([] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Matchmaking :: Model :: FAttribute \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: Matchmaking :: Model :: FAttribute \u003e () -\u003e WithName ( TOptional FString \u003e ( \"stage\" )) -\u003e WithValue ( TOptional int32 \u003e ( 1 ))); v -\u003e Add ( MakeShared Gs2 :: Matchmaking :: Model :: FAttribute \u003e () -\u003e WithName ( TOptional FString \u003e ( \"level\" )) -\u003e WithValue ( TOptional int32 \u003e ( 10 ))); return v ; }()), [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Matchmaking :: Model :: FAttributeRange \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: Matchmaking :: Model :: FAttributeRange \u003e () -\u003e WithName ( TOptional FString \u003e ( \"stage\" )) -\u003e WithMin ( TOptional int32 \u003e ( 1 )) -\u003e WithMax ( TOptional int32 \u003e ( 1 ))); v -\u003e Add ( MakeShared Gs2 :: Matchmaking :: Model :: FAttributeRange \u003e () -\u003e WithName ( TOptional FString \u003e ( \"level\" )) -\u003e WithMin ( TOptional int32 \u003e ( 0 )) -\u003e WithMax ( TOptional int32 \u003e ( 10 ))); return v ; }(), // attributeRanges [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Matchmaking :: Model :: FCapacityOfRole \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: Matchmaking :: Model :: FCapacityOfRole \u003e () -\u003e WithRoleName ( TOptional FString \u003e ( \"default\" )) -\u003e WithCapacity ( TOptional int32 \u003e ( 4 ))); return v ; }(), // capacityOfRoles nullptr , // allowUserIds nullptr , // expiresAt nullptr // expiresAtTimeSpan ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . create_gathering ( ( Gs2MatchmakingPlayer . new () . with_attributes ([ ( Gs2MatchmakingEzAttribute . new () . with_name ( \"stage\" ) . with_value ( 1 )), ( Gs2MatchmakingEzAttribute . new () . with_name ( \"level\" ) . with_value ( 10 )), ])), # player [ ( Gs2MatchmakingEzAttributeRange . new () . with_name ( \"stage\" ) . with_min ( 1 ) . with_max ( 1 )), ( Gs2MatchmakingEzAttributeRange . new () . with_name ( \"level\" ) . with_min ( 0 ) . with_max ( 10 )), ], # attribute_ranges [ ( Gs2MatchmakingEzCapacityOfRole . new () . with_role_name ( \"default\" ) . with_capacity ( 4 )), ], # capacity_of_roles null , # allow_user_ids null , # expires_at null # expires_at_time_span ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 매치메이킹 처리 실행 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DoMatchmakingAsync ( player : new Gs2 . Unity . Gs2Matchmaking . Model . EzPlayer { Attributes = new [] { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute { Name = \"stage\" , Value = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute { Name = \"level\" , Value = 10 , }, }, }, ). ToListAsync (); const auto It = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e DoMatchmaking ( // player ); for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . do_matchmaking ( Gs2MatchmakingEzPlayer . new () ) var async_result = await iterator . wait () if async_result . error != null : push_error ( str ( async_result . error )) return var gathering = async_result . result 개더링에서 퇴장 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ). CancelMatchmakingAsync ( ); const auto Future = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Gathering ( \"gathering-0001\" // gatheringName ) -\u003e CancelMatchmaking ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . gathering ( \"gathering-0001\" ) var async_result = await domain . cancel_matchmaking ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 레이트 값 조회 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Rating ( ratingName : \"rating-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Rating ( \"rating-0001\" // ratingName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . rating ( \"rating-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 투표용지 조회 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( ratingName : \"rating-0001\" , gatheringName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001\" ). ModelAsync (); var body = result . Body ; var signature = result . Signature ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Ballot ( \"rating-0001\" , // ratingName \"gathering-0001\" , // gatheringName 4 , // numberOfPlayer \"key-0001\" // keyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ballot ( \"rating-0001\" , \"gathering-0001\" , 4 , \"key-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 투표 실행 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). VoteAsync ( ballotBody : \"ballotBody\" , ballotSignature : \"ballotSignature\" , gameResults : new [] { new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult { Rank = 3 , UserId = \"user-0004\" , }, } ); const auto Future = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Vote ( \"ballotBody\" , \"ballotSignature\" , [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Matchmaking :: Model :: FGameResult \u003e\u003e\u003e (); v -\u003e Add ({ ' rank ' : 1 , ' userId ' : ' user - 0001 ' }); v -\u003e Add ({ ' rank ' : 2 , ' userId ' : ' user - 0002 ' }); v -\u003e Add ({ ' rank ' : 2 , ' userId ' : ' user - 0003 ' }); v -\u003e Add ({ ' rank ' : 3 , ' userId ' : ' user - 0004 ' }); return v ; }() // gameResults ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) var async_result = await domain . vote ( \"ballotBody...\" , # ballot_body \"ballotSignature...\" , # ballot_signature [ Gs2MatchmakingEzGameResult . new () . with_rank ( 1 ) . with_user_id ( \"user-0001\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0002\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0003\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 3 ) . with_user_id ( \"user-0004\" ), ], # game_results \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 자주 묻는 질문 존재하는 개더링을 목록으로 표시하여 플레이어가 선택하게 하고 싶다 GS2-Matchmaking 에서는 그러한 기능을 제공하지 않습니다. 이는 기술적인 이유가 아니라, 게임 개발자의 한 사람으로서 플레이어의 게임 체험을 해치지 않기 위한 정책에 기인합니다. 존재하는 개더링에서 선택하는 방식이라면, 플레이어에게 최선의 개더링에 참가하는 방법을 제시할 수 있습니다. 하지만 개더링 목록을 가져온 후 실제로 참가 조작을 할 때까지 사용자 조작에 의한 지연이 발생합니다. 이 지연으로 인해, 참가하고 싶은 개더링을 선택했을 때 이미 개더링이 정원에 도달해 버린 경우를 피할 수 없습니다. GS2 개발자는 과거에 이러한 게임을 다수 플레이하며 매우 큰 불만을 느껴왔습니다. GS2-Matchmaking 에서는 플레이어 스스로 개더링을 선택하게 하지 않아도, 자동으로 최적의 개더링을 찾아낼 수 있을 만큼의 구조를 제공하고 있다는 자부심이 있습니다. 그렇기 때문에, 이러한 기능은 제공하지 않습니다. 개더링에 비밀번호를 설정하고 싶다 비밀번호를 속성값으로 설정하여 매치메이킹 조건의 일부로 사용해 주세요. 시즌 매치메이킹 시즌 매치메이킹은 특정 기간 동안 영속적인 개더링을 생성합니다. 리얼타임 대전을 위한 매치메이킹이라기보다는, 특정 기간 동안 영속화되는 클러스터를 형성하고 GS2-Ranking2 의 클러스터 랭킹을 조합하여, 개더링 내에서의 랭킹을 구현하는 것이 일반적인 용법입니다. 시즌 시즌 매치메이킹을 이용하려면, GS2-Schedule 의 이벤트를 지정하여 기간을 설정합니다. 이벤트에 반복 설정이 있는 경우, 반복될 때마다 새로운 개더링이 형성됩니다. 티어 시즌 매치메이킹에 GS2-Experience 를 조합하면 특정 랭크끼리 매치메이킹할 수 있습니다. GS2-Ranking2 의 클러스터 랭킹에는 랭킹 보상을 설정하는 기능이 있어, 랭킹 상위 플레이어에게 경험치를 부여함으로써 상위 티어로 올라갈 수 있도록 할 수 있습니다. 최대 인원수 시즌 매치메이킹에서는 최대 1000명의 플레이어를 매치메이킹할 수 있습니다. 매치메이킹 조건 시즌 매치메이킹에서는 스탠다드 매치메이킹과 같은 복잡한 검색 조건을 설정할 수 없습니다. 검색 조건에 사용할 수 있는 파라미터는 단 하나, GS2-Experience 의 랭크뿐이며, 값은 API 인수로 받지 않고 GS2-Matchmaking 이 내부 처리에서 GS2-Experience 로부터 값을 가져옵니다. GS2-Experience 와의 연계 기능을 사용하지 않는 경우에는 모든 플레이어를 대상으로 매치메이킹이 이루어집니다. 영속 개더링에서의 퇴장 스탠다드 매치메이킹에서는 매치메이킹된 개더링에서 퇴장할 수 있었습니다. 하지만 시즌 매치메이킹에서는 퇴장할 수 없으며, 이미 매치메이킹된 적이 있는 상태에서 매치메이킹 리퀘스트를 보내더라도 이미 참가 중인 개더링이 응답됩니다. 즉, 시즌 기간 동안에는 원칙적으로 다른 개더링으로 다시 매치메이킹할 수단이 없습니다. 단 하나의 예외가 있는데, 그것은 영속 개더링을 삭제한 경우로, 영속 개더링을 삭제하면 참가 중이던 플레이어는 다시 매치메이킹할 때 새로운 개더링으로 매치메이킹됩니다. 매치메이킹 처리의 우선순위 시즌 매치메이킹에서는 매치메이킹 시 동일 티어의 영속 개더링 중 규정 인원수에 도달하지 않은 개더링을 찾아 개더링에 참가합니다. 참가 가능한 개더링이 존재하지 않는 경우에는 자동으로 개더링을 생성하고, 참가 처리를 수행한 후 API를 응답합니다. 참가 가능한 개더링이 여러 개 존재하는 경우에는 참가 인원이 더 많은 개더링이 우선됩니다. 매치메이킹 처리가 경합할 때의 동작 매치메이킹 참가 처리는 일반적으로 수 밀리초 이하로 처리되지만, 그럼에도 동시에 같은 개더링이 참가 처리 후보로 선별되는 경우가 있을 수 있습니다. 이러한 경우, 규정 인원수보다 많은 플레이어가 참가해버리는 것을 방지하기 위해 GS2-Matchmaking 은 개더링의 잠금을 획득한 후 플레이어의 참가 처리를 수행합니다. 그렇기 때문에, 참가 가능한 개더링이 있더라도 다른 플레이어의 참가 처리 중인 짧은 기간 동안은 매치메이킹 대상이 되지 않고 다른 후보가 선택됩니다. 이 사양으로 인해, 1000명을 최대 수용 가능한 영속 개더링을 준비하고, 동일 티어의 플레이어 1000명이 완전히 동시에 매치메이킹 리퀘스트를 보낸 경우, 1000명이 참가하는 하나의 영속 개더링이 만들어진다고는 단정할 수 없으며, 여러 영속 개더링으로 나뉘어 매치메이킹될 가능성이 있습니다. 이때, 가능한 한 참가 인원이 많은 개더링에 우선적으로 플레이어를 참가시켜 나가므로, 일반적으로 다음과 같은 결과가 예상됩니다. 개더링A의 참가 인원 개더링B의 참가 인원 개더링C의 참가 인원 1000 - - 999 1 - 998 1 1 997 2 1 995 4 1 995 5 - 990 8 2 이 결과는 어디까지나 하나의 예시이며, 다른 패턴도 발생할 수 있습니다. 상세 레퍼런스 GS2-Matchmaking API 레퍼런스","lang":"ko","section":"microservices","summary":"매치메이킹 기능\n","title":"GS2-Matchmaking","url":"/ko/microservices/matchmaking/"},{"content":"GS2-MegaField는 거대한 3D 공간에 존재하는 대량의 플레이어 위치 정보를, 효율적으로 공유·동기화하기 위한 기능을 제공합니다. MMORPG나 오픈 월드, 메타버스형 서비스 등, 같은 월드에 대량의 플레이어가 동시에 로그인하는 타이틀에서는, 모든 플레이어의 위치 정보를 전체 플레이어에게 배포하면 네트워크 대역도 CPU도 감당할 수 없게 됩니다. GS2-MegaField는 “자신의 근방에 있는 플레이어만\"을 효율적으로 가져올 수 있도록 함으로써 이 문제를 해결합니다. 에어리어와 레이어 GS2-MegaField의 공간은 “에어리어(Area)“와 “레이어(Layer)“라는 두 가지 개념으로 구성됩니다. AreaModel(에어리어 모델): 하나의 커다란 3D 공간을 나타내는 마스터 데이터. 예를 들어 “마을 안”, “던전”, “필드” 등, 월드 내의 논리적인 구획별로 작성합니다. LayerModel(레이어 모델): 하나의 에어리어 안에 존재하는, 용도별 레이어. 예를 들어 “플레이어용”, “NPC용”, “아이템용\"과 같이, 같은 장소를 다른 목적으로 겹쳐서 이용할 수 있습니다. 에어리어 모델은 여러 레이어 모델을 포함하는 형태로 마스터 데이터로서 정의합니다. 플레이어의 위치는 “어느 에어리어의, 어느 레이어의, 어느 좌표에 있는가\"라는 형태로 표현됩니다. graph TD AreaModel[\"AreaModel: town\"] --\u003e LayerPlayer[\"LayerModel: player\"] AreaModel --\u003e LayerNpc[\"LayerModel: npc\"] AreaModel --\u003e LayerItem[\"LayerModel: item\"] Player1[\"Player A\"] -- Spot --\u003e LayerPlayer Player2[\"Player B\"] -- Spot --\u003e LayerPlayer 공간 인덱스 GS2-MegaField는 레이어 내 플레이어의 위치를 공간 인덱스(R-Tree 기반 구조)로 관리합니다. 이를 통해 “자신의 주변 N미터 이내에 있는 플레이어를 모두 가져온다\"와 같은 근방 탐색을, 플레이어 수에 의존하지 않고 효율적으로 처리할 수 있습니다. 레이어 단위로 공간 인덱스가 독립되어 있어, “플레이어끼리의 근방\"과 “NPC와의 근방” 같은 검색을 별도로 취급할 수 있습니다. 플레이어 위치 정보 각 플레이어는 “자신의 현재 위치\"를 MyPosition 으로 GS2-MegaField에 송신합니다. MyPosition 에는 다음 정보가 포함됩니다. position: 3D 좌표 (x, y, z) vector: 방향 벡터 (x, y, z) r: 시야·관심 반경 플레이어는 위치를 송신할 때, 동시에 “자신이 관심 있는 범위\"를 Scope 로 지정할 수 있으며, 그 범위에 있는 다른 플레이어의 정보를 응답으로 받을 수 있습니다. Scope 에는 다음 정보가 포함됩니다. layerName: 검색 대상 레이어 이름 r: 검색 반경 limit: 반환할 최대 건수 여러 Scope 를 지정함으로써 동시에 여러 레이어의 근방 플레이어를 가져오는 것도 가능합니다. 게임 클라이언트 간 위치 동기화 GS2-MegaField는 플레이어의 위치 정보를 “어느 정도 솎아낸 근방 플레이어 목록\"으로 제공합니다. 이 목록에는 각 플레이어의 위치·방향 벡터·최종 동기화 시각 등이 포함되며, 게임 클라이언트는 이 정보를 보간 처리하면서 렌더링함으로써 매끄러운 위치 동기화를 실현할 수 있습니다. 다만, GS2-MegaField 자체는 리얼타임 성능을 보장하는 상시 접속 프로토콜이 아닙니다. 고빈도 액션 동기화나, 입력 기반의 엄밀한 동기화가 필요한 경우에는 GS2-Realtime과 조합하는 것이 효과적입니다. 트랜잭션 액션 GS2-MegaField에서는 트랜잭션 액션을 제공하지 않습니다. 마스터 데이터 관리 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. AreaModel : 월드 내 논리적 구획(에어리어)의 정의 LayerModel : 에어리어 안의 용도별 레이어 정의 (AreaModel의 자식으로 정의) 다음은 AreaModel / LayerModel을 설정하는 마스터 데이터의 JSON 예입니다. { \"version\": \"2019-09-09\", \"areaModels\": [ { \"name\": \"town\", \"metadata\": \"starter town\", \"layerModels\": [ { \"name\": \"player\", \"metadata\": \"players\" }, { \"name\": \"npc\", \"metadata\": \"npcs\" } ] }, { \"name\": \"dungeon\", \"layerModels\": [ { \"name\": \"player\" }, { \"name\": \"enemy\" } ] } ] } 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에, GitHub에서 데이터를 반영하거나, GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 구현 예제 에어리어 모델 목록 조회 월드에 어떤 에어리어가 존재하는지 가져옵니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModelsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e AreaModels ( ); TArray Gs2 :: UE5 :: MegaField :: Model :: FEzAreaModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . mega_field . namespace_ ( \"namespace-0001\" ) . area_models ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 자신의 위치를 갱신하고, 근방 플레이어 조회 자신의 현재 위치를 GS2-MegaField에 등록함과 동시에, 주변에 있는 다른 플레이어의 목록을 가져옵니다. 위치 갱신은 일정 간격으로 반복 호출하는 것이 기본적인 사용 방법입니다. Game Engine: Unity Unreal Engine Godot var spatials = await gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Spatial ( areaModelName : \"town\" , layerModelName : \"player\" ). UpdateAsync ( position : new Gs2 . Unity . Gs2MegaField . Model . EzMyPosition { Position = new Gs2 . Unity . Gs2MegaField . Model . EzPosition { X = 10.0f , Y = 0.0f , Z = 20.0f , }, Vector = new Gs2 . Unity . Gs2MegaField . Model . EzVector { X = 1.0f , Y = 0.0f , Z = 0.0f , }, R = 1.0f , }, scopes : new [] { new Gs2 . Unity . Gs2MegaField . Model . EzScope { LayerName = \"player\" , R = 50.0f , Limit = 100 , }, } ); const auto Future = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Spatial ( \"town\" , // areaModelName \"player\" // layerModelName ) -\u003e Update ( MakeShared Gs2 :: UE5 :: MegaField :: Model :: FEzMyPosition \u003e ( MakeShared Gs2 :: UE5 :: MegaField :: Model :: FEzPosition \u003e ( 10.0f , 0.0f , 20.0f ), MakeShared Gs2 :: UE5 :: MegaField :: Model :: FEzVector \u003e ( 1.0f , 0.0f , 0.0f ), 1.0f ), [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: MegaField :: Model :: FEzScope \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: MegaField :: Model :: FEzScope \u003e ( TEXT ( \"player\" ), 50.0f , 100 )); return v ; }() ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Spatials = Future -\u003e GetTask (). Result (); var domain = ez . mega_field . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . spatial ( \"area-0001\" , \"layer-0001\" ) var async_result = await domain . update ( null , # position null # scopes ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 특정 플레이어의 위치 정보 참조 사용자ID를 알고 있는 플레이어의 위치 정보를 직접 가져올 수도 있습니다. Game Engine: Unity Unreal Engine Godot var spatial = await gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Spatial ( areaModelName : \"town\" , layerModelName : \"player\" ). ModelAsync (); const auto Future = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e Spatial ( \"town\" , // areaModelName \"player\" // layerModelName ) -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Spatial = Future -\u003e GetTask (). Result (); var domain = ez . mega_field . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . spatial ( \"area-0001\" , \"layer-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var item = async_result . result 보다 실전적인 정보 GS2-Realtime과의 조합 GS2-MegaField는 “넓은 월드 내에서의 전체적인 플레이어 배치\"를 다루는 데 적합합니다. 반면, 근접 전투나 친구와의 협력 플레이처럼 밀리초 단위의 동기화가 필요한 장면에는 적합하지 않습니다. 이러한 경우에는, GS2-MegaField로 가져온 근방 플레이어를 트리거로 하여 GS2-Realtime의 룸에 집약하고, 근접한 플레이어끼리만 리얼타임 통신을 수행하는 하이브리드 구성이 효과적입니다. graph LR Player[\"플레이어\"] -- 전체적인 위치 동기화 --\u003e MegaField[\"GS2-MegaField\"] MegaField -- 근방 플레이어 --\u003e Player Player -- 근접 전투 등의 동기화 --\u003e Realtime[\"GS2-Realtime\"] Realtime -- 같은 방 플레이어 --\u003e Player 갱신 빈도 설계 위치 정보 갱신은 호출 빈도가 그대로 서버 부하와 네트워크 대역에 직결됩니다. 일반적으로는 화면 표시의 프레임 레이트보다 낮은 빈도(예를 들어 5~10Hz 정도)로 갱신을 수행하고, 클라이언트 측에서 보간 처리를 하는 설계가 균형을 잡기 쉽습니다. Scope 지정의 최적화 Scope 로 지정하는 반경과 건수 상한은 게임의 시야 범위나 연출에 맞게 조정합니다. 모든 플레이어가 넓은 반경으로 대량으로 검색을 수행하면 부하가 높아지므로, 화면 밖 판정에서는 좁은 반경과 적은 건수로 조회하고, 포커스 시에만 넓게 가져오는 등의 방법이 효과적입니다. 상세 레퍼런스 GS2-MegaField API 레퍼런스","lang":"ko","section":"microservices","summary":"대규모 3D 공간에서 플레이어 위치를 효율적으로 동기화하는 기능\n","title":"GS2-MegaField","url":"/ko/microservices/mega_field/"},{"content":"게임 내에 축적된 행동을 기반으로 플레이어에게 보상을 지급하기 위한 구조입니다. 일반적으로 업적·트로피·미션이라고 불리는 기능을 구현하기 위한 기능입니다. graph TD Action[\"게임 내 행동 (퀘스트 클리어 / 가챠 실행 등)\"] -- \"카운터 상승 (IncreaseCounterByUserId)\" --\u003e Counter[\"미션 카운터 (Counter / Scope)\"] Counter -- \"목표값 도달\" --\u003e Task[\"미션 태스크 (MissionTaskModel)\"] Task -- \"ReceiveRewards\" --\u003e Reward[\"completeAcquireActions\"] Reward --\u003e Distributor[\"GS2-Distributor 보상 배포\"] Task --\u003e Group[\"미션 그룹 (MissionGroupModel)\"] Group -- \"resetType 에 기반해 수령 플래그를 리셋\" --\u003e Task 미션 카운터 플레이어의 행동에 기반한 횟수를 세기 위한 엔티티입니다. “퀘스트를 클리어한 횟수”, “캐릭터를 강화한 횟수”, “가챠를 뽑은 횟수\"와 같은 게임 내 행동 횟수를 카운트하기 위한 카운터를 준비합니다. 카운터에는 스코프를 설정할 수 있습니다. 스코프에는 다음 값을 설정할 수 있습니다. 스코프 종류 스코프 내용 리셋하지 않음 게임 플레이 시작부터의 합계 매일 X시에 리셋 당일 실행한 횟수 매주 X요일 X시에 리셋 이번 주 실행한 횟수 매월 X일 X시에 리셋 이번 달 실행한 횟수 일정 일수마다 리셋 기준 시각부터 지정 일수마다 리셋 검증 액션에 매치했을 때만 카운트업 verifyAction 의 실행 결과에 기반해 카운터를 상승 카운터 값은 각 스코프별로 관리되며, 미션의 달성 조건에는 각 스코프의 값을 사용할 수 있습니다. graph LR Up[\"카운터 상승 요청\"] --\u003e Counter[\"Counter\"] Counter --\u003e Scope1[\"스코프1 리셋하지 않음\"] Counter --\u003e Scope2[\"스코프2 매일 리셋\"] Counter --\u003e Scope3[\"스코프3 매주 리셋\"] Scope1 -- ScopedValue --\u003e Mission1[\"누계 100회 미션\"] Scope2 -- ScopedValue --\u003e Mission2[\"데일리 10회 미션\"] Scope3 -- ScopedValue --\u003e Mission3[\"위클리 50회 미션\"] 검증 액션에 의한 스코프 제어 scopeType=verifyAction 을 사용하면 conditionName 과 condition 으로 임의의 조건을 정의하고, 다른 마이크로서비스의 검증 결과에 따라 카운터를 상승시킬지 제어할 수 있습니다. 이를 통해 특정 이벤트 기간에만 카운터를 상승시키는 스코프나, 특정 캐릭터를 편성한 상태에서만 상승하는 스코프를 만들 수 있습니다. 챌린지 기간 CounterModel 에는 challengePeriodEventId 를 설정할 수 있으며, GS2-Schedule 의 이벤트 GRN 을 지정하여 카운터 조작 기간을 제한할 수 있습니다. 지정된 기간 외에는 카운터를 갱신할 수 없으므로, 기간 한정 이벤트 등에서 사용할 때 유용합니다. 미션 태스크 플레이어에게 제시할 목표를 정의하는 마스터 데이터입니다. “미션 카운터\"와 “스코프\"와 “목표값”, 그리고 그 목표를 달성했을 때 얻을 수 있는 “보상\"을 설정합니다. 예를 들어 다음과 같은 설정이 가능합니다. 미션 카운터 스코프 종류 목표값 보상 퀘스트를 클리어한 횟수 매일 X시에 리셋 10 아이템A 퀘스트를 클리어한 횟수 매주 X요일 X시에 리셋 50 아이템B 캐릭터를 강화한 횟수 매일 X시에 리셋 5 아이템C 태스크 의존 관계 premiseMissionTaskName 을 지정하면 선행 태스크를 달성한 이후에만 수령 가능한 미션을 정의할 수 있습니다. “태스크A를 달성하면 태스크B를 수령할 수 있게 된다\"와 같은 단계적인 달성 흐름을 구축할 수 있습니다. 검증 액션을 사용한 달성 판정 verifyCompleteType 에 verifyActions 를 지정하면 다른 마이크로서비스의 검증 액션을 충족하는지에 따라 태스크의 달성 여부를 판정할 수 있습니다. 이 기능을 사용하는 경우, GS2-Mission 이 제공하는 Complete 오브젝트에 의한 달성 판정(서버 사이드에서의 자동 판정)은 이루어지지 않습니다. 따라서 달성 상태는 클라이언트에서 계산한 뒤 수령 UI를 제어하고, 보상 수령 액션을 실행해야 합니다. 서버 사이드에서 달성 가능 여부를 재평가하고 싶은 경우에는 EvaluateComplete API를 호출하여 Complete 의 상태를 최신화할 수 있습니다. 챌린지 기간 MissionTaskModel 의 challengePeriodEventId 로 달성 가능 기간을 GS2-Schedule 의 이벤트로 제한할 수 있습니다. 달성 완료된 태스크는 기간이 지나도 수령이 가능하지만, 미션 태스크에 리셋 간격이 설정되어 있는 경우에는 리셋 시점을 맞이하면 수령할 수 없게 됩니다. 미션 그룹 여러 미션 태스크를 묶는 엔티티입니다. 미션 그룹에는 보상 수령 플래그의 리셋 주기를 설정할 수 있습니다. 미션 카운터 스코프 종류 목표값 보상 퀘스트를 클리어한 횟수 매일 X시에 리셋 10 아이템A 캐릭터를 강화한 횟수 매일 X시에 리셋 5 아이템C 이러한 미션 태스크를 하나의 미션 그룹에 연결하고, 미션 그룹의 보상 수령 플래그 리셋 주기에도 “매일 X시에 리셋\"을 설정하면 미션 태스크를 매일 달성할 경우 매일 보상을 받을 수 있게 됩니다. 리셋 종류 resetType 에는 다음을 지정할 수 있습니다. resetType 설명 notReset 리셋하지 않음(업적·트로피 용도로 사용) daily 매일 resetHour 시에 리셋 weekly 매주 resetDayOfWeek 의 resetHour 시에 리셋 monthly 매월 resetDayOfMonth 의 resetHour 시에 리셋 days anchorTimestamp 를 기점으로 days 일마다 리셋 임의 일수로 리셋 resetType 에 days 를 지정하면 anchorTimestamp 로 지정한 기점 시각부터 지정한 일수마다 보상 수령 플래그를 리셋할 수 있습니다. 예를 들어 이벤트 시작부터 3일마다 리셋하는 등의 운영이 가능합니다. 스크립트 트리거 네임스페이스에 missionCompleteScript · counterIncrementScript · receiveRewardsScript 를 설정하면 미션 달성·카운터 상승·보상 수령 등의 시점에 커스텀 스크립트를 호출할 수 있습니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. missionCompleteScript : 미션 달성 counterIncrementScript : 카운터 상승 receiveRewardsScript : 보상 수령 이를 활용하면 달성 시 BI 연동, 부정한 카운터 조작 감지, 보상 수령 시의 특수 처리 등을 커스터마이즈할 수 있습니다. 푸시 알림 설정 가능한 주요 푸시 알림과 설정명은 다음과 같습니다. completeNotification : 미션 태스크 달성 시 알림 오프라인 단말에 대한 모바일 푸시 전송에도 대응하며, 보상 수령을 유도할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록하면 마이크로서비스에서 사용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. CounterModel : 카운트 대상과 리셋 주기를 정의하는 CounterScopeModel 목록 MissionGroupModel : 그룹 단위의 리셋 설정과 소속된 태스크 MissionTaskModel : 달성 조건(카운터와 목표값)과 달성 보상 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 다음은 마스터 데이터의 JSON 예입니다. { \"version\": \"2019-04-12\", \"counters\": [ { \"name\": \"quest_complete\", \"metadata\": \"퀘스트 클리어 횟수\", \"scopes\": [ { \"scopeType\": \"resetTimingScope\", \"resetType\": \"daily\", \"resetHour\": 5 }, { \"scopeType\": \"resetTimingScope\", \"resetType\": \"weekly\", \"resetDayOfWeek\": \"monday\", \"resetHour\": 5 } ] } ], \"missionGroups\": [ { \"name\": \"daily-mission\", \"metadata\": \"데일리 미션\", \"resetType\": \"daily\", \"resetHour\": 5, \"tasks\": [ { \"name\": \"mission-task-0001\", \"metadata\": \"퀘스트 10회 클리어\", \"counterName\": \"quest_complete\", \"targetResetType\": \"daily\", \"targetValue\": 10, \"completeAcquireActions\": [] } ] } ] } GS2-Buff 연동 GS2-Buff 와 연동하면 미션 태스크 모델의 completeAcquireActions 를 버프로 보정하여, 이벤트 등에 따라 보상량을 유연하게 조정할 수 있습니다. 트랜잭션 액션 GS2-Mission 에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 검증 액션: 미션 달성 상황 검증, 카운터 값 검증 소비 액션: 보상 수령(일괄 포함), 카운터 감산·리셋 획득 액션: 카운터 가산·설정, 보상 수령 상태 복원(미수령화) “카운터의 가산\"을 획득 액션으로 활용하면, 상점에서 상품을 구매했을 때나 퀘스트를 클리어했을 때의 보상으로 직접 미션의 진행도를 진행시키는 처리가 가능해집니다. 또한 “카운터의 감산\"을 소비 액션으로 활용하면, 특정 특전을 받기 위한 비용(포인트 소비형 미션 등)으로 미션 카운터를 소비하는 운용도 트랜잭션 내에서 안전하게 실현할 수 있습니다. 구현 예제 미션 카운터 상승 미션 카운터의 상승은 게임 엔진용 SDK로는 처리할 수 없습니다. GS2-Quest 의 클리어 보상이나 GS2-Lottery 의 추첨 보상으로 카운터를 상승시키는 방법으로 구현하십시오. 클라이언트에서 직접 카운터를 상승시키고 싶은 경우에는 서버 측에서 트랜잭션을 발행하는 형태로 GS2-Distributor 를 경유한 획득 액션으로 실행합니다. 미션 태스크의 달성 상황·보상 수령 정보 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 미션 달성 보상 수령 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ). ReceiveRewardsAsync ( missionTaskName : \"mission-task-0001\" ); await result . WaitAsync (); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e ReceiveRewards ( \"mission-task-0001\" ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) var async_result = await domain . receive_rewards ( \"mission-task-0001\" , # mission_task_name null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 달성 완료 보상 일괄 수령 달성 완료되었지만 아직 미수령인 태스크를 한 번에 수령하고 싶은 경우, BatchReceiveRewards 를 사용할 수 있습니다. 여러 개의 missionTaskName 을 지정하여 하나의 트랜잭션으로 보상을 수령합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ). BatchReceiveRewardsAsync ( missionTaskNames : new [] { \"mission-task-0001\" , \"mission-task-0002\" , } ); await result . WaitAsync (); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e BatchReceiveRewards ( [] { auto v = MakeShared TArray FString \u003e\u003e (); v -\u003e Add ( \"mission-task-0001\" ); v -\u003e Add ( \"mission-task-0002\" ); return v ; }() ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) var async_result = await domain . batch_receive_rewards ( [ \"mission-task-0001\" , \"mission-task-0002\" , ], # mission_task_names null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 검증 액션을 이용한 태스크 달성 판정 재평가 verifyCompleteType 에 verifyActions 를 지정한 태스크의 달성 상황을 서버 측에서 재평가하고 싶은 경우 호출합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ). EvaluateCompleteAsync ( ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e EvaluateComplete (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) var async_result = await domain . evaluate_complete ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 미션 카운터의 값 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"quest_complete\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Counter ( \"quest_complete\" // counterName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"quest_complete\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 미션 카운터 리셋 특정 스코프의 카운터 값을 수동으로 리셋할 수 있습니다. 이벤트 종료 시 이벤트 관련 카운터를 초기화하는 등의 용도로 사용합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"quest_complete\" ). ResetCounterAsync ( scopes : new [] { new Gs2 . Unity . Gs2Mission . Model . EzScopedValue () { ResetType = \"daily\" , Value = 0 , }, } ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Counter ( \"quest_complete\" // counterName ); const auto Future = Domain -\u003e ResetCounter ( Scopes ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"counter-0001\" ) var async_result = await domain . reset_counter ( [ Gs2MissionEzScopedValue . new () . with_reset_type ( \"daily\" ), Gs2MissionEzScopedValue . new () . with_reset_type ( \"weekly\" ), ] # scopes ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 미션 목표값 취득 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ). MissionTaskModelsAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MissionGroupModel ( \"mission-group-0001\" // missionGroupName ); const auto It = Domain -\u003e MissionTaskModels ( ); TArray Gs2 :: UE5 :: Mission :: Model :: FEzMissionTaskModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . mission . namespace_ ( \"namespace-0001\" ) . mission_group_model ( \"mission-group-0001\" ) . mission_task_models ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 상세 레퍼런스 GS2-Mission API 레퍼런스","lang":"ko","section":"microservices","summary":"미션·업적 기능\n","title":"GS2-Mission","url":"/ko/microservices/mission/"},{"content":"Warning GS2-Money2가 릴리스되었습니다. 특별한 이유가 없는 한 새로 이용할 경우에는 GS2-Money2 를 이용해 주세요. 게임 내 리소스 중, 현금에 상당하는 가치를 가진 리소스를 다루는 기능입니다. 일본의 자금결제법상 선불식 지급수단(자사형)에 해당하는 자산을 취급하는 경우에는 반드시 이 기능을 이용해야 합니다. 잔액 GS2-Money는 플레이어가 보유한 과금 통화의 잔액을 단순한 수량으로 관리하지 않고, 구매 시점의 가치별로 수량을 관리합니다. 예를 들어, 100엔으로 100개의 과금 통화를 구매한 경우 과금 통화 1개의 가치는 1엔 상당이 됩니다. 동시에 1000엔으로 1200개의 과금 통화를 구매할 수 있다고 합시다. 어디까지나 과금 통화의 단가를 1엔으로 하고 200개는 덤으로 무료 처리하는 것도 하나의 방법이고, 1000엔으로 구매한 경우는 단가를 0.8334엔으로 하여 다른 단가로 취급하는 것도 하나의 방법입니다. 후자와 같은 방식을 채택한 경우, GS2-Money는 “단가 1엔인 과금 통화의 잔액”, “단가 0.8334엔인 과금 통화의 잔액\"을 각각 구분하여 관리하는 기능을 가지고 있습니다. graph TD Wallet[\"지갑 (슬롯 번호로 구분)\"] Wallet --\u003e Paid[\"유상 통화 (paid)\"] Wallet --\u003e Free[\"무상 통화 (free)\"] Paid --\u003e Detail1[\"단가 1엔의 잔액\"] Paid --\u003e Detail2[\"단가 0.8334엔의 잔액\"] Paid --\u003e Detail3[\"...구매 가치별\"] 후자를 선택하는 장점은? 분명 후자는 회계 처리가 복잡해져 이점이 없는 것처럼 느껴질 수도 있습니다. 서비스 제공 측 입장에서는 정확히 그렇습니다. 하지만 입장을 바꿔 게임 플레이어의 입장에서 생각해 봅시다. 게임 안에는 운영 측에서 배포한 현금 상당 가치가 0엔인 과금 통화(통칭 무상 통화)가 있습니다. 플레이어가 과금 통화를 구매하도록 유도하기 위해, 유상으로 구매한 과금 통화(통칭 유상 통화)로만 구매할 수 있는 매력적인 상품을 과금 통화 300개로 판매한다고 합시다. 1000엔으로 1200개의 과금 통화를 구매했을 때, 1000개의 유상 통화와 200개의 무상 통화를 부여하도록 처리한 경우 플레이어는 유상 통화 300개로 구매할 수 있는 상품을 3번밖에 구매할 수 없습니다. 반면, 단가를 0.8334엔으로 하여 1200개 전부를 유상 통화로 취급하는 방법이라면 플레이어는 4번 구매할 수 있습니다. 이 차이는 플레이어 심리에 다소나마 영향을 미칩니다. 회계상의 편의를 우선할지, 플레이어의 이익을 우선할지 신중하게 검토해야 할 사양입니다. 슬롯 GS2-Money에서는 여러 개의 지갑을 가질 수 있습니다. 그 여러 지갑을 구별하기 위한 키가 슬롯입니다. 이 기능은 다른 플랫폼에서 구매한 과금 통화를 반입하지 못하도록 하는 플랫포머가 존재하기 때문에, 그 가이드라인을 준수하기 위해 존재하는 기능입니다. 하지만 이러한 가이드라인은 유상 통화에만 적용되므로, 무상 통화에 대해서는 모든 슬롯에서 공유할 수 있는 기능이 있습니다. 네임스페이스의 shareFree 를 true 로 설정하면, 무상 통화는 전체 슬롯 공통 잔액으로 취급됩니다. 소비 우선순위 플레이어가 과금 통화를 소비할 때, 무상 통화를 우선 소비할지, 유상 통화를 우선 소비할지를 선택할 수 있습니다. 일반적으로 무상 통화를 우선 소비하는 사양이 채택되지만, 회계상의 사정이 있는 경우에는 유상 통화를 우선할 수 있습니다. 유상 통화를 소비하는 경우에는 단가가 더 높은 통화부터 우선적으로 소비됩니다. 네임스페이스의 priority 로 다음 중 하나를 지정합니다. priority 설명 free 무상 통화를 우선 소비 paid 유상 통화(단가가 높은 것부터)를 우선 소비 무상·유상을 불문하고, 혹은 유상 통화 안에서 입수한 순서대로 소비하고 싶다는 요구가 있다는 점은 저희도 알고 있습니다. 다만 현재는 그 기능이 구현되어 있지 않습니다. 이 요건이 중요한 프로젝트를 검토 중이시라면 개발팀으로 문의해 주세요. 영수증 검증 게임 배포 플랫폼에서 추가 콘텐츠 구매 시 발급되는 영수증의 검증 기능을 갖추고 있습니다. 영수증을 검증하여 플랫포머가 올바르게 발행한 내용인지 확인함과 동시에, 과거에 게임 내에서 사용한 적이 없는지도 확인합니다. 이 기능을 이용함으로써, 부정한 영수증을 이용해 과금 통화를 입수하려는 공격을 회피할 수 있습니다. 영수증 검증을 활성화하려면 네임스페이스에 다음 인증 정보를 등록합니다. appleKey : Apple App Store의 번들 ID googleKey : Google Play의 공개키 enableFakeReceipt : 개발 시 더미 영수증을 허용할지 여부 트랜잭션 로그 영수증 검증 이력은 물론이고, 과금 통화의 가산·감산 이력도 전부 기록됩니다. 그리고 하루에 여러 번, 현재 게임 내에 미사용 과금 통화가 현금 상당액으로 얼마나 쌓여 있는지를 집계합니다. 집계 결과는 네임스페이스의 balance 필드에 반영됩니다. 상황에 따라 미사용 잔액의 일부를 제3자 기관에 공탁해야 하는 대응이 필요해질 수 있는데, 그럴 때 이 계산 결과를 이용할 수 있습니다. 법적 절차 GS2-Money는 각종 법적 절차를 위해 필요한 데이터를 수집하여 API를 통해 접근 가능한 상태로 보관하지만, 법적 절차 자체는 GS2 이용자인 귀하 또는 귀하가 소속된 조직이 실행해야 합니다. 어떤 절차가 필요한지에 대해서는 GS2가 책임을 질 수 없으므로 조언도 드릴 수 없습니다. 고문 변호사와 상담해 주시기 바랍니다. 스크립트 트리거 네임스페이스에 각종 스크립트 설정을 등록하면, 입출금 처리나 지갑 생성 시점에 커스텀 스크립트를 실행할 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. createWalletScript : 지갑 생성 시 depositScript : 입금 처리 시 withdrawScript : 출금 처리 시 트랜잭션 액션 GS2-Money에서는 다음 트랜잭션 액션을 제공하고 있습니다. 소비 액션: 잔액 소비, 영수증 기록 입수 액션: 잔액 가산, 영수증 기록 삭제 “잔액 가산\"을 입수 액션으로 이용함으로써, 특정 이벤트 클리어 시나 가챠의 “보너스\"로 직접 과금 통화(유상·무상)를 부여하는 처리를, 트랜잭션 내에서 안전하게 실행할 수 있습니다. 이를 통해 과금과 게임 내 보상을 조합한 유연한 시책이 가능해집니다. 구현 예제 잔액 취득 지갑 슬롯을 지정하여, 현재의 유상 통화 잔액( paid ), 무상 통화 잔액( free ), 구매 단가별 내역( detail )을 취득합니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Money . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ). ModelAsync (); const auto Domain = Gs2 -\u003e Money -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Wallet ( 0 // slot ); const auto Item = Domain -\u003e Model (); var domain = ez . money . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 잔액 가산 잔액을 가산하는 처리는 게임 엔진용 SDK에서는 처리할 수 없습니다. GS2-Showcase의 구매 시 보상으로 잔액을 가산하거나, GS2-Money의 영수증 검증 API를 서버 간 통신으로 호출하여 부여하는 방법으로 구현해 주세요. 잔액 소비 이 API로 직접 잔액 소비 처리를 하는 것은 권장하지 않습니다. GS2-Showcase와 같은 서비스를 통해 과금 통화를 소비함으로써, 소비와 맞바꿔 상품을 부여하는 처리를 하나의 트랜잭션으로 안전하게 다룰 수 있습니다. paidOnly 를 true 로 지정하면, 유상 통화만을 소비 대상으로 할 수 있습니다. 플랫포머의 가이드라인을 준수해야 하는 상황에서 이용해 주세요. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Money . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ). WithdrawAsync ( count : 50 , paidOnly : false ); var item = await result . ModelAsync (); var price = result . Price ; const auto Future = Gs2 -\u003e Money -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Wallet ( 0 // slot ) -\u003e Withdraw ( 50 , nullptr // paidOnly ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . money . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) var async_result = await domain . withdraw ( 50 , # count null # paid_only ) if async_result . error != null : if async_result . error . type == \"ConflictException\" : # 지갑 조작 처리가 충돌했습니다. 재시도가 필요합니다 pass if async_result . error . type == \"InsufficientException\" : # 지갑 잔액이 부족합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-Money API 레퍼런스","lang":"ko","section":"microservices","summary":"과금 통화 관리 기능\n","title":"GS2-Money","url":"/ko/microservices/money/"},{"content":"Tip GS2-Money2 는 이름 그대로 버전 2에 해당하는 마이크로서비스입니다. 이전 버전에 관한 문서는 GS2-Money 를 참조하십시오. 게임 내 리소스 중 현금에 상당하는 가치를 가진 리소스를 다루는 기능입니다. 일본의 자금결제법상 선불식 지급수단(자가형)에 해당하는 자산을 취급하는 경우에는 반드시 이 기능을 이용해야 합니다. GS2-Money2 는 단순히 “과금 통화의 잔고\"를 다루는 서비스가 아니라, 다음과 같은 회계·법령 대응상의 요건을 함께 처리하는 마이크로서비스입니다. 입금 일시·단가별 잔고 관리 영수증 검증을 통한 부정 입금 방지 지갑의 가감산 이력 보관 플랫폼 가이드라인에 따른 통화 격리 구독(기간 과금) 계약 상태 관리 미사용 잔고 집계(선불식 지급수단 대응) 잔고 GS2-Money2 는 플레이어가 보유한 과금 통화의 잔고를 단순한 수량으로 관리하지 않고, 구매 시의 가치별로 수량을 관리합니다. 예를 들어 100엔으로 과금 통화 100개를 구매한 경우 과금 통화 1개의 가치는 1엔 상당이 됩니다. 동시에 1000엔으로 1200개의 과금 통화를 구매할 수 있다고 합시다. 어디까지나 과금 통화의 단가를 1엔으로 하고 200개는 덤으로 무료 처리하는 것도 하나의 방법이고, 1000엔으로 구매한 경우 단가를 0.8334엔으로 하여 다른 단가로 취급하는 것도 하나의 방법입니다. 후자와 같은 방식을 채택한 경우, GS2-Money2 는 “단가 1엔인 과금 통화의 잔고\"와 “단가 0.8334엔인 과금 통화의 잔고\"를 각각 나누어 관리하는 기능을 가지고 있습니다. 후자를 선택하는 장점은? 분명히 후자는 회계 처리가 복잡해져 장점이 없는 것처럼 느껴질 수 있습니다. 서비스 제공자 입장에서는 전적으로 그렇습니다. 하지만 입장을 바꿔 게임 플레이어의 입장에서 생각해 봅시다. 게임 안에는 운영진이 나눠준 현금 상당 가치가 0엔인 과금 통화(통칭 무상 통화)가 있습니다. 플레이어가 과금 통화를 구매하도록 유도하기 위해, 유상으로 구매한 과금 통화(통칭 유상 통화)로만 구매할 수 있는 매력적인 상품을 과금 통화 300개에 판매한다고 합시다. 1000엔으로 1200개의 과금 통화를 구매했을 때, 1000개의 유상 통화와 200개의 무상 통화를 부여하도록 처리한 경우 플레이어는 유상 통화 300개로 구매할 수 있는 상품을 3번밖에 구매할 수 없습니다. 반면, 단가를 0.8334엔으로 하여 1200개 전부를 유상 통화로 취급하는 방법이라면 플레이어는 4번 구매할 수 있습니다. 이 차이는 플레이어 심리에 다소나마 영향을 미칩니다. 회계상의 편의를 우선할 것인가, 플레이어의 이익을 우선할 것인가 신중히 검토해야 할 사양입니다. 슬롯 GS2-Money 에서는 지갑을 여러 개 가질 수 있습니다. 이 복수의 지갑을 구분하기 위한 키가 슬롯입니다. 이 기능은 다른 플랫폼에서 구매한 과금 통화를 반입하지 못하도록 하는 플랫포머가 존재하기 때문에, 그 가이드라인을 준수하기 위해 존재하는 기능입니다. 하지만 이러한 가이드라인은 유상 통화에만 적용되므로, 무상 통화에 대해서는 모든 슬롯에서 공유할 수 있는 기능이 있습니다. 네임스페이스의 sharedFreeCurrency 를 활성화하면 무상 통화는 전체 슬롯 공통으로 취급되고, 유상 통화만 슬롯별로 격리됩니다. graph LR subgraph Wallets[Wallets] direction TB S0[\"Slot 0 (iOS) 유상 잔고: 1,000\"] S1[\"Slot 1 (Android) 유상 잔고: 500\"] S2[\"Slot 2 (Steam) 유상 잔고: 800\"] end Shared[\"무상 잔고: 200 (sharedFreeCurrency=true)\"] -.공유.-\u003e S0 Shared -.공유.-\u003e S1 Shared -.공유.-\u003e S2 구매 통화 GS2-Money2 에서는 GS2-Money 에서 변경된 점으로, 하나의 지갑에 여러 통화로 구매한 과금 통화를 보유할 수 있게 되었습니다. 예를 들어, JPY 로 구매한 유상 통화와 USD 로 구매한 유상 통화를 하나의 지갑 안에서 별도의 잔고로 보유할 수 있습니다. 하루 몇 차례의 집계 처리에서는 통화 단위로 DailyTransactionHistory 가 기록되어, 각 통화별 매출·소비를 개별적으로 파악할 수 있습니다. 소비 우선순위 플레이어가 과금 통화를 소비할 때, 무상 통화를 우선적으로 소비할지, 유상 통화를 우선적으로 소비할지 선택할 수 있습니다. 일반적으로 무상 통화를 우선 소비하는 사양이 채택되지만, 회계상의 사정이 있는 경우 유상 통화를 우선할 수 있습니다. 유상 통화를 소비할 때는 입금한 시기가 오래된 것부터 순서대로 소비됩니다. 네임스페이스의 currencyUsagePriority 에서 다음 중 하나를 지정합니다. 설정값 설명 PrioritizeFree 무상 통화를 우선적으로 소비(일반적) PrioritizePaid 유상 통화를 우선적으로 소비 영수증 검증 게임 배포 플랫폼에서 추가 콘텐츠 구매 시 얻어지는 영수증의 검증 기능을 가지고 있습니다. 영수증을 검증하여 플랫포머가 올바르게 발행한 내용인지 확인함과 동시에, 과거에 게임 내에서 사용한 적이 없는지도 확인합니다. 영수증 검증을 위해서는 네임스페이스의 platformSetting 에 Apple App Store 나 Google Play 의 인증 정보를 등록해 두어야 합니다. 이 기능을 이용하면 부정한 영수증을 이용해 과금 통화를 입수하려는 공격을 회피할 수 있습니다. 지원하는 플랫폼 플랫폼 설정 키 설명 Apple App Store appleAppStore iOS / iPadOS / macOS 용 과금 Google Play googlePlay Android 용 과금 Fake fake 개발·QA 용 더미 영수증 발행 개발 시에는 fake 를 이용해 영수증을 의사적으로 발행함으로써, 결제를 실행하지 않고 테스트 흐름을 진행할 수 있습니다. 트랜잭션 로그 영수증 검증 이력은 물론이고, 과금 통화의 가산·감산 이력도 모두 기록됩니다. 그리고 매일 몇 차례씩 현재 게임 내에 미사용 과금 통화가 현금 상당액으로 얼마나 풀(pool)되어 있는지를 집계합니다. 상황에 따라 미사용 잔고의 일부를 제3자 기관에 공탁해야 하는 대응이 필요할 수 있는데, 그때 이 계산 결과를 이용할 수 있습니다. 주요 로그·이력 데이터 데이터 설명 DepositEvent 입금 처리 이력 WithdrawEvent 소비 처리 이력 VerifyReceiptEvent 영수증 검증 이력 RefundEvent 플랫폼으로부터의 환불 통지 이력 RefundHistory 환불 취소 이력 DailyTransactionHistory 1일 단위 통화별 입출금 집계 UnusedBalance 통화별 미사용 잔고의 현재값 법적 절차 GS2-Money2 는 각종 법적 절차를 밟는 데 필요한 데이터를 수집하여 API를 통해 접근 가능한 상태로 보관하지만, 법적 절차 자체는 GS2 이용자인 귀하/귀하가 소속된 조직이 실행해야 합니다. 어떤 절차가 필요한지에 대해서는 GS2가 책임질 수 없으므로 조언도 드릴 수 없습니다. 고문 변호사와 상담하시기 바랍니다. 트랜잭션 액션 GS2-Money2 에서는 다음과 같은 트랜잭션 액션을 제공합니다. 소비 액션: 잔고 소비, 영수증 검증 입수 액션: 잔고 가산 “잔고 가산\"을 입수 액션으로 이용함으로써, 특정 이벤트 클리어 시나 가챠의 “덤\"으로 직접 과금 통화(유상·무상)를 부여하는 처리를, 트랜잭션 내에서 안전하게 실행할 수 있습니다. 이를 통해 과금과 게임 내 보상을 조합한 유연한 시책이 가능해집니다. “영수증 검증\"을 소비 액션으로 이용함으로써, 영수증을 사용한 구매 처리부터 과금 통화를 가산하기까지를 하나의 트랜잭션으로서 안전하게 처리할 수 있습니다. 기간 과금(구독) GS2-Money2 에서는 그때그때 과금하는 과금 통화뿐만 아니라 기간 과금(구독)도 다룰 수 있습니다. 미리 StoreSubscriptionContentModel 의 마스터 데이터를 등록하고, scheduleNamespaceId 와 triggerName 을 사용해 GS2-Schedule 과 연동시킴으로써, 계약 기간의 개시·갱신·종료를 자동으로 반영할 수 있습니다. graph LR Player[\"플레이어\"] --\u003e|구매| Store[\"App Store / Google Play\"] Store --\u003e|영수증| Player Player --\u003e|AllocateSubscriptionStatus| Money2[GS2-Money2] Money2 --\u003e|Trigger| Schedule[GS2-Schedule] Schedule -.기한 관리.-\u003e Money2 Money2 --\u003e|Notification| Player 계약 정보 관리 각 구매는 SubscribeTransaction 에 기록되어, 트랜잭션별 계약 상세나 스토어 정보를 추적할 수 있습니다. 플레이어별 계약 상태는 SubscriptionStatus 에 저장되어, 현재 상태(active / inactive)나 expiresAt 확인이 가능합니다. AllocateSubscriptionStatus 로 영수증을 사용해 계약 상태를 플레이어에게 연결하고, TakeOverSubscriptionStatus 를 사용해 다른 플레이어에게 인계할 수도 있습니다. 이는 가족끼리 계약을 공유하는 경우나, 자녀 계정에서 성인 계정으로 계약을 인계하는 운용에 이용할 수 있습니다. 라이프사이클에 따른 스크립트 트리거 계약 조작 전후에 스크립트를 실행할 수 있습니다. 동기·비동기 중 하나를 선택할 수 있으며, 외부 서비스 연계에도 대응합니다. 트리거 이름 주요 용도 subscribeScript 신규 계약 시(사용자 연결 변경 시는 제외) renewScript 계약 갱신 시 unsubscribeScript 해지 시(사용자 연결 변경 시는 제외) takeOverScript 계약의 사용자 할당을 변경할 때 계약 상황 알림 구독 상태가 변화한 경우, changeSubscriptionStatusNotification 에 설정한 푸시 알림을 전송할 수 있습니다. 플레이 중 만료나 해지 같은 변화를 처리하여 UI에 반영하는 용도로 활용하십시오. 스크립트 트리거 네임스페이스에 depositBalanceScript , withdrawBalanceScript , verifyReceiptScript 를 설정하면, 입출금 처리 전후로 커스텀 스크립트를 실행할 수 있습니다. 트리거는 동기·비동기 실행 방식을 선택할 수 있으며, Amazon EventBridge 를 이용한 외부 연계에도 대응합니다. 설정 가능한 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. depositBalanceScript (완료 알림: depositBalanceDone ): 입금 처리 전후 withdrawBalanceScript (완료 알림: withdrawBalanceDone ): 출금 처리 전후 verifyReceiptScript (완료 알림: verifyReceiptDone ): 영수증 검증 전후 동기 스크립트를 사용해 특정 조건에 해당하는 경우 입출금 처리를 거부하거나, 비동기 스크립트를 이용해 BI 도구에 실시간으로 매출을 전송하는 등의 운용이 가능합니다. 푸시 알림 설정 가능한 주요 푸시 알림과 설정 이름은 다음과 같습니다. changeSubscriptionStatusNotification : 기간 과금 계약 상황이 변화했을 때 알림 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. StoreContentModel : 판매 콘텐츠 정의 StoreSubscriptionContentModel : 정기 구독 콘텐츠 정의 마스터 데이터 등록은 관리 콘솔에서 등록하는 것 외에, GitHub에서 데이터를 반영하거나, GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성하는 것도 가능합니다. StoreContentModel 예시 판매 콘텐츠에 대한 App Store / Google Play 상품ID의 대응 관계를 정의합니다. { \"version\": \"2022-07-13\", \"storeContentModels\": [ { \"name\": \"stone_300\", \"metadata\": \"돌 300개 팩\", \"appleAppStore\": { \"productId\": \"io.gs2.sample.stone_300\" }, \"googlePlay\": { \"productId\": \"io.gs2.sample.stone_300\" } } ] } 버프에 의한 보정 GS2-Buff 와 연동하면 DepositByUserId 의 count 나 Withdraw · WithdrawByUserId 의 withdrawCount 에 버프를 적용하여 입금량이나 소비량을 일시적으로 증감시킬 수 있습니다. 이벤트나 캠페인에 따라 유연하게 조정할 수 있습니다. 예를 들어, 과금 통화 보너스 캠페인으로 “기간 중 구매한 과금 통화를 10% 증량한다\"와 같은 시책을, DepositByUserId 의 count 에 대한 Rate Add 0.1 버프로 구현할 수 있습니다. 구현 예제 잔고를 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ). ModelAsync (); const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Wallet ( 0 // slot ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 지갑 목록을 취득 슬롯별 지갑을 일괄로 취득할 수 있습니다. 여러 플랫폼에서 과금 통화를 분리하고 있는 경우의 잔고 표시에 활용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). WalletsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Wallets (); TArray Gs2 :: UE5 :: Money2 :: Model :: FEzWalletPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallets ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 잔고를 가산 잔고를 가산하는 처리는 게임 엔진용 SDK로는 처리할 수 없습니다. GS2-Showcase 구매 시의 보상으로 잔고를 가산하는 방법 등으로 구현하십시오. 잔고를 소비 이 API로 잔고 소비 처리를 하는 것은 권장하지 않습니다. GS2-Showcase 와 같은 서비스를 통해 과금 통화를 소비하는 대신 어떠한 처리를 실행할 것을 권장합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ). WithdrawAsync ( withdrawCount : 50 , paidOnly : false ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Wallet ( 0 // slot ) -\u003e Withdraw ( 50 , nullptr // paidOnly ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) var async_result = await domain . withdraw ( 50 , # withdraw_count null # paid_only ) if async_result . error != null : if async_result . error . type == \"ConflictException\" : # 지갑 조작 처리가 충돌했습니다. 재시도가 필요합니다 pass if async_result . error . type == \"InsufficientException\" : # 지갑 잔액이 부족합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 구독 계약 상태 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SubscriptionStatus ( contentName : \"premium-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e SubscriptionStatus ( \"premium-0001\" // contentName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscription_status ( \"content-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 구독 계약 할당 App Store / Google Play 에서 취득한 영수증을 사용해, 플레이어에게 구독 계약을 할당합니다. 영수증 검증도 함께 수행되며, 부정한 영수증을 사용한 계약은 거부됩니다. Game Engine: Unity Unreal Engine Godot var domain = await gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AllocateSubscriptionStatusAsync ( receipt : receipt ); const auto Future = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e AllocateSubscriptionStatus ( Receipt ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . allocate_subscription_status ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" # receipt ) if async_result . error != null : if async_result . error . type == \"AlreadyUsedException\" : # 이미 해당 기간 과금 계약은 다른 사용자가 사용하고 있습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 구독 계약 인계 다른 플레이어에서 현재 플레이어로 구독 계약의 연결 대상을 변경합니다. 플랫폼 측의 계약 자체는 변경되지 않으며, 게임 내에서의 적용 대상만 변경됩니다. Game Engine: Unity Unreal Engine Godot var domain = await gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOverSubscriptionStatusAsync ( receipt : receipt ); const auto Future = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e TakeOverSubscriptionStatus ( Receipt ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . take_over_subscription_status ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" # receipt ) if async_result . error != null : if async_result . error . type == \"LockPeriodNotElapsedException\" : # 지난번 사용자 인계 이후 잠금 기간이 경과하지 않았습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-Money2 API 레퍼런스","lang":"ko","section":"microservices","summary":"과금 통화 관리 기능","title":"GS2-Money2","url":"/ko/microservices/money2/"},{"content":"게임 내 공지사항을 HTML 형식으로 배포하기 위한 구조입니다. 배포하는 HTML 콘텐츠는 hugo( https://gohugo.io/ ) 로 생성해야 합니다. GS2-News 는 기사 데이터를 업로드하면 GS2 측에서 hugo를 통한 빌드를 수행하여, 정적 웹 콘텐츠로 호스팅합니다. 게임 클라이언트는 배포된 임시 URL에 접근함으로써 공지사항을 열람할 수 있습니다. graph LR Author[\"운영자\"] -- \"ZIP 업로드\" --\u003e GS2[\"GS2-News\"] GS2 -- \"hugo build (공개/비공개의 모든 패턴을 사전 생성)\" --\u003e CDN[\"CDN (HTML / ZIP)\"] Player[\"플레이어\"] -- \"GetContentsUrl\" --\u003e GS2 GS2 -- \"URL + Cookie (1시간 유효)\" --\u003e Player Player -- \"WebView or ZIP DL\" --\u003e CDN hugo hugo 는 정적 웹페이지를 생성하기 위한 제너레이터입니다. 페이지의 레이아웃과 디자인을 결정하기 위한 템플릿과, 마크다운 형식으로 작성한 기사 데이터를 빌드함으로써 HTML 파일을 생성합니다. hugo의 이용 방법에 대해서는 hugo 공식 사이트 또는 각종 해설 사이트를 확인해 주십시오. GS2에서는 최소한의 hugo 템플릿과 기사 데이터 샘플을 GitHub에서 공개하고 있습니다. https://github.com/gs2io/gs2-news-sample 이벤트와 연동되는 기사 GS2-News 에서는 GS2-Schedule 로 관리하는 이벤트와 연동되는 기사 데이터를 관리할 수 있습니다. 기사 데이터의 마크다운 파일의 Front Matter에 다음과 같이 기재함으로써 연동을 활성화할 수 있습니다. x_gs2_scheduleEventId: ${GS2-Schedule의 이벤트 GRN} 또한, GS2-Schedule 의 Event ID에는 다음 플레이스홀더를 사용할 수 있습니다. 플레이스홀더 치환되는 값 {region} 리전 이름 {ownerId} GS2의 오너ID 작성 예시는 다음과 같습니다. x_gs2_scheduleEventId: grn:gs2:{region}:{ownerId}:schedule:schedule-0001:event:event-0001 이벤트가 개최 중인 경우에만 표시되는 기사나, 특정 이벤트 기간에만 비표시되는 기사 등을, 운영 도구에서 전환 조작을 하지 않고도 자동으로 제어할 수 있습니다. 기사 데이터의 크기 제한 GS2-News 에 업로드하는 기사 데이터는 전체적으로 100MB 이내 에 담아야 합니다. 또한, 기사 데이터의 빌드에는 --buildDrafts 옵션이 포함되지 않습니다. Front Matter에 draft: true 로 기재된 콘텐츠는 배포되지 않습니다. 기사 데이터 빌드 GS2-News 에서 배포하는 기사 데이터는 zip으로 압축한 hugo 템플릿과 기사 파일을 업로드함으로써 갱신합니다. 그 후, GS2-News 는 기사 데이터를 빌드하여 배포합니다. 기사 데이터 안에 x_gs2_scheduleEventId 기재가 있는 경우에는, 각 기사가 공개 상태·비공개 상태의 각 버전을 사전에 빌드하여 웹 서버에 배치합니다. 이후, 플레이어가 기사 데이터에 접근하려 할 때 현재 이벤트의 개최 상황에 따라 가장 적절한 콘텐츠의 URL을 플레이어에게 응답합니다. sequenceDiagram participant U as 운영자 participant N as GS2-News participant CDN as CDN U-\u003e\u003eN: PrepareUpdateCurrentNewsMaster N--\u003e\u003eU: 업로드용 URL U-\u003e\u003eN: HTTP PUT (zip) U-\u003e\u003eN: UpdateCurrentNewsMaster N-\u003e\u003eN: hugo로 모든 패턴 빌드 N-\u003e\u003eCDN: 정적 콘텐츠 배치 진행 상황은 Progress 모델( generated / patternCount )로 확인할 수 있으며, 오래 걸리는 빌드가 완료되었는지 폴링할 수 있습니다. 기사 데이터의 접근 권한 기사 데이터는 사전에 모든 패턴을 빌드하여 배포한다고 설명했습니다. 악의적인 플레이어가 URL을 특정하여, 원래 아직 배포해서는 안 되는 콘텐츠에 접근할 수 있어서는 안 됩니다. 이 문제를 방지하기 위해, GS2-News 는 Cookie를 이용한 접근 제한을 구현하고 있습니다. 현재 유효한 콘텐츠의 URL을 취득함과 동시에, 해당 URL에 접근하기 위한 Cookie 정보를 배포합니다. 브라우저에 해당 Cookie를 설정한 후 콘텐츠 URL에 접근함으로써 콘텐츠 다운로드가 가능해집니다. Cookie의 유효 기간 취득한 Cookie는 유효 기간이 설정되어 있으며, 1시간이 경과하면 해당 Cookie로는 콘텐츠에 접근할 수 없게 됩니다. 장시간 게임을 플레이하는 플레이어에 대해서는 재취득을 수행해 주십시오. Zip 형식으로 웹 콘텐츠 다운로드 GS2-News 가 호스팅한 HTML에 WebView를 사용해 접근하는 방법뿐만 아니라, GS2-News 가 빌드한 HTML 파일 전체를 zip 형식으로 다운로드하는 것도 가능합니다. 이 방법을 이용하면, zip으로 다운로드한 HTML 콘텐츠를 로컬 스토리지에 전개하고 이를 브라우저에서 표시함으로써 더욱 쾌적하게 콘텐츠를 열람할 수 있게 됨과 동시에, 같은 콘텐츠를 여러 번 다운로드하지 않아도 됩니다. zip 파일을 다시 다운로드해야 하는지 판단하기 위해, GS2-News 는 템플릿 파일의 해시값과, GS2-Schedule 에 기반하여 공개 상태가 된 콘텐츠의 해시값을 취득할 수 있도록 하고 있습니다. 이 값들을 사용함으로써 zip 파일을 재다운로드해야 할지 판단하는 것이 가능해집니다. 해시값 설명 TemplateHash 업로드된 템플릿 ZIP의 해시값. 템플릿 자체가 갱신되면 변화합니다. ContentHash 현재의 이벤트 개최 상황에 따라 결정되는, 공개 상태 콘텐츠 집합의 해시값. 이벤트의 시작·종료로 변화합니다. 스크립트 트리거 GS2-News 에서는 스크립트 트리거를 제공하지 않습니다. 마스터 데이터 관리 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. 템플릿 : 뉴스 표시용 Hugo 템플릿 기사 : Markdown 형식의 뉴스 기사 마스터 데이터 등록은 관리 콘솔에서 등록하는 것 외에, GitHub에서 데이터를 반영하거나, GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성하는 것도 가능합니다. 트랜잭션 액션 GS2-News 에서는 트랜잭션 액션을 제공하지 않습니다. 구현 예제 콘텐츠 URL 취득 GetContentsUrl 의 반환값에는 Cookie 목록과, BrowserUrl (WebView 열람용) / ZipUrl (ZIP 다운로드용)이 포함됩니다. 취득한 Cookie를 WebView 또는 HTTP 클라이언트에 등록한 후, 각각의 URL에 접근해 주십시오. Game Engine: Unity Unreal Engine Godot var domain = gs2 . News . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). News ( ); var result = await domain . GetContentsUrlAsync ( ); List EzSetCookieRequestEntry \u003e cookies = new List EzSetCookieRequestEntry \u003e(); var items = result . ToList (); foreach ( var item in items ) { var entry = await item . ModelAsync (); cookies . Add ( entry ); } var browserUrl = domain . BrowserUrl ; var zipUrl = domain . ZipUrl ; const auto Domain = Gs2 -\u003e News -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e News ( ); const auto Future = Domain -\u003e GetContentsUrl ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; TArray EzSetCookieRequestEntryPtr \u003e Cookies ; const auto It = Future -\u003e GetTask (). Result (); foreach ( auto Item in It ) { const auto Future2 = Item . Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; Cookies . Add ( Future2 -\u003e GetTask (). Result ()); } const auto BrowserUrl = Domain -\u003e BrowserUrl ; const auto ZipUrl = Domain -\u003e ZipUrl ; var domain = ez . news . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . news ( ) var async_result = await domain . get_contents_url ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result WebView 표시 예시 Unity 에서는 unity-webview 를 사용하여, 취득한 Cookie를 WebView에 설정한 후 BrowserUrl 을 열어 공지사항을 표시할 수 있습니다. Godot 에서는 이용하는 WebView 플러그인의 Cookie 설정 API에 취득한 Cookie를 전달한 후, 마찬가지로 BrowserUrl 을 엽니다. WebView의 API 이름은 플러그인마다 다릅니다. Game Engine: Unity Godot foreach ( var cookie in cookies ) { webView . SetCookie ( browserUrl , cookie . Key , cookie . Value ); } webView . LoadURL ( browserUrl ); webView . SetVisibility ( true ); # 사용하는 WebView 플러그인의 Cookie 설정·URL 표시 API로 교체합니다. for cookie in cookies : web_view . set_cookie ( browser_url , cookie . key , cookie . value ) web_view . open_url ( browser_url ) web_view . show () 기사 데이터 목록 취득 각 기사는 Section ／ Title ／ Content ／ FrontMatter 등을 보유하고 있습니다. 제목 목록을 자체 UI로 표시하고, 선택된 기사만 WebView로 표시하는 구성도 가능합니다. Game Engine: Unity Unreal Engine Godot var domain = gs2 . News . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . NewsesAsync ( ). ToListAsync (); var templateHash = domain . TemplateHash ; var contentHash = domain . ContentHash ; const auto Domain = Gs2 -\u003e News -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Newses ( ); TArray Gs2 :: UE5 :: News :: Model :: FEzNewsPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . news . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . newses ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 캐시 재다운로드 판정 ZIP 다운로드 방식을 채택하는 경우, TemplateHash 와 ContentHash 를 로컬에 저장해 두고, 시작 시 다시 취득한 값과 비교함으로써 불필요한 ZIP 재다운로드를 피할 수 있습니다. Game Engine: Unity Godot if ( savedTemplateHash != domain . TemplateHash || savedContentHash != domain . ContentHash ) { // 재다운로드를 실행 } if saved_template_hash != domain . template_hash \\ or saved_content_hash != domain . content_hash : # 재다운로드를 실행 download_contents () 상세 레퍼런스 GS2-News API 레퍼런스","lang":"ko","section":"microservices","summary":"공지 배포 기능\n","title":"GS2-News","url":"/ko/microservices/news/"},{"content":"게임의 진행 관리와 퀘스트의 진행 관리를 수행합니다. GS2-Quest는 게임의 인게임(전투나 스테이지)에 도전하기 위한 ‘입구’와 ‘출구’만을 서버에서 관리하는 마이크로서비스입니다. 인게임 내부의 로직에는 관여하지 않으며, 시작 시 비용 소비, 클리어 시 보상 지급, 전제 조건 판정과 같이 서버에서 신뢰해야 할 처리를 담당합니다. graph LR Start[\"퀘스트 시작 StartAsync\"] --\u003e Battle[\"인게임 실행 (클라이언트 / 전용 서버)\"] Battle -- 성공 --\u003e End1[\"퀘스트 종료 보고 EndAsync(isComplete:true)\"] Battle -- 실패 --\u003e End2[\"퀘스트 종료 보고 EndAsync(isComplete:false)\"] End1 --\u003e Reward[\"클리어 보상 지급\"] End2 --\u003e FailedReward[\"실패 보상 지급\"] 퀘스트 퀘스트는 인게임의 기본 단위로, 인게임을 시작할 때 선택하는 엔티티입니다. 퀘스트에는 도전에 필요한 비용과 도전을 통해 얻을 수 있는 보상을 설정할 수 있으며, GS2-Quest는 그 시작과 종료를 API로 받아들입니다. 즉, GS2-Quest는 인게임의 내용에는 관여하지 않습니다. 퀘스트 도전 비용 퀘스트를 시작 상태로 만들기 위해 필요한 비용을 설정합니다. 일반적으로 GS2-Stamina에서 관리하는 스태미나를 소비하거나 GS2-Inventory에서 관리하는 아이템을 소비하는 형태의 비용을 설정합니다. QuestModel 의 consumeActions 에 소비 액션을 설정하면 Start 실행 시 트랜잭션으로 원자적으로 처리됩니다. 퀘스트 검증 조건 QuestModel 의 verifyActions 에 검증 액션을 설정하면 퀘스트 시작 시 추가적인 조건 체크를 수행할 수 있습니다. 예를 들어 “특정 아이템을 소지하고 있을 것”, “GS2-Dictionary에 특정 엔트리가 등록되어 있을 것\"과 같이, 소비하지 않고 상태만 확인하는 조건을 표현할 수 있습니다. 퀘스트 클리어 보상 퀘스트에 도전하여 클리어했을 때 얻을 수 있는 보상을 설정할 수 있습니다. 보상에는 여러 종류( Contents )를 준비할 수 있습니다. 각 Contents 에는 추첨용 weight 를 설정할 수 있으며, 확률에 따라 어느 보상 패턴이 적용될지가 결정됩니다. 이 기능을 이용하면 일정 확률로 레어 몬스터가 출현하는 버전의 퀘스트가 시작되어 보상이 평소보다 화려해지는 설정도 가능합니다. 첫 클리어 보상 퀘스트를 처음 클리어했을 때만 추가 보상을 얻을 수 있도록 설정할 수 있습니다. QuestModel 의 firstCompleteAcquireActions 에 입수 액션을 설정합니다. 클리어 보상 감액 퀘스트 내에서 출현한 몬스터를 쓰러뜨리지 않았거나 보물 상자를 놓친 경우, 퀘스트 보상을 줄일 수 있습니다. 퀘스트 시작 API의 응답에는 퀘스트 내에서 얻을 수 있는 보상의 최댓값이 포함되며, 퀘스트 완료 API에는 그중 실제로 입수한 수량을 보고합니다. 이때 보상을 줄여서 보고하면 감액이 이루어집니다. 보고 시 최댓값을 초과하는 보상을 보고하려고 하면 오류가 발생합니다. 퀘스트 실패 보상 퀘스트에 도전했지만 클리어하지 못한 경우 얻을 수 있는 보상을 설정할 수 있습니다. QuestModel 의 failedAcquireActions 에 설정합니다. 퀘스트에 실패한 경우, 도전 시 지불한 스태미나를 환불하는 처리를 구현할 수 있습니다. 퀘스트 전제 조건 퀘스트에 도전하기 위해 다른 퀘스트를 클리어했음을 조건으로 설정할 수 있습니다. QuestModel 의 premiseQuestNames 에 퀘스트 이름의 배열을 설정하면, 지정한 모든 퀘스트를 클리어하지 않으면 도전할 수 없게 됩니다. 이를 통해 퀘스트를 체인처럼 연결할 수 있습니다. 퀘스트 도전 가능 기간 퀘스트에는 도전 가능 기간으로 GS2-Schedule의 이벤트를 연결할 수 있습니다. 도전 가능 기간은 시작 API 실행 시에 판정되며, 종료 처리 시에는 판정되지 않습니다. 따라서 종료 보고 시점까지 기간이 지나더라도 퀘스트 보상을 받을 수 없게 되는 현상은 발생하지 않습니다. 퀘스트 그룹 여러 퀘스트를 묶는 엔티티입니다. 챕터나 월드 단위로 퀘스트를 묶어 관리하는 용도로 활용할 수 있습니다. 퀘스트 그룹의 도전 가능 기간 퀘스트 그룹에도 도전 가능 기간으로 GS2-Schedule의 이벤트를 연결할 수 있습니다. 퀘스트 그룹에 도전 가능 기간을 설정하면 하위의 모든 퀘스트에 조건이 적용됩니다. 퀘스트 그룹과 퀘스트 양쪽에 도전 가능 기간을 설정한 경우, 두 이벤트가 모두 개최 기간일 때에만 퀘스트에 도전할 수 있습니다. 진행 중인 퀘스트(Progress) 퀘스트를 시작하면 사용자별로 1건의 진행 중인 Progress 가 서버에 기록됩니다. Progress 에는 추첨이 완료된 보상 최댓값과 서버 측에서 생성된 난수 시드가 보관되어 있으며, 이를 이용해 보고되는 보상 수량의 타당성을 검증합니다. 진행 중인 Progress 는 사용자당 1건만 보유할 수 있으므로, 통신 단절 등으로 완료 보고를 할 수 없었던 경우에는 DeleteProgress 로 폐기한 후 다음 퀘스트를 시작해야 합니다. 다른 퀘스트를 시작하려는 경우, StartAsync 에 force: true 를 지정하면 진행 중인 Progress 를 폐기하면서 새로 시작할 수도 있습니다. 클리어 상황 관리 퀘스트를 클리어하면 해당 퀘스트의 이름이 CompletedQuestList 에 기록됩니다. 퀘스트 그룹 단위로 별도의 엔티티로 관리되며, 특정 퀘스트 그룹의 클리어 상황을 한꺼번에 가져올 수 있습니다. 클리어 상황은 서버 측에서 전제 조건 판정에도 사용되므로, 외부에서 다시 쓸 때는 트랜잭션 액션을 거쳐야 합니다. 스크립트 트리거 네임스페이스에 startQuestScript · completeQuestScript · failedQuestScript 를 설정하면 퀘스트 시작·클리어·실패 처리 시점에 커스텀 스크립트를 호출할 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정 이름은 다음과 같습니다. startQuestScript : 퀘스트 시작 시 completeQuestScript : 퀘스트 클리어 시 failedQuestScript : 퀘스트 실패 시 스크립트 내에서 보상 덮어쓰기나 퀘스트 시작 거부와 같은 판단을 수행할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록하면 마이크로서비스에서 이용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음과 같은 것이 있습니다. QuestGroupModel : 퀘스트의 묶음과 도전 기간 QuestModel : 비용과 보상의 정의 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성할 수도 있습니다. 퀘스트 모델의 주요 설정 항목은 다음과 같습니다. 항목 내용 name 퀘스트 이름 contents 추첨되는 보상 패턴( completeAcquireActions 와 weight ) firstCompleteAcquireActions 첫 클리어 시에만 지급되는 보상 failedAcquireActions 실패 시 지급되는 보상 consumeActions 시작 시 소비하는 리소스 verifyActions 시작 시 전제 조건 체크 premiseQuestNames 전제가 되는 클리어 완료 퀘스트 challengePeriodEventId 도전 가능 기간을 나타내는 GS2-Schedule 이벤트 마스터 데이터의 JSON 예시: { \"version\": \"2022-02-15\", \"questGroupModels\": [ { \"name\": \"main\", \"metadata\": \"main-story\", \"quests\": [ { \"name\": \"quest-0001\", \"metadata\": \"intro\", \"contents\": [ { \"metadata\": \"normal\", \"completeAcquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \"request\": \"{...}\" } ], \"weight\": 9 }, { \"metadata\": \"rare\", \"completeAcquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \"request\": \"{...}\" } ], \"weight\": 1 } ], \"consumeActions\": [ { \"action\": \"Gs2Stamina:ConsumeStaminaByUserId\", \"request\": \"{...}\" } ], \"premiseQuestNames\": [] } ] } ] } 버프에 의한 보정 GS2-Buff와 연동하면 퀘스트 모델의 completeAcquireActions · firstCompleteAcquireActions · failedAcquireActions · verifyActions · consumeActions 를 버프로 보정할 수 있습니다. 이벤트나 캠페인에 맞춰 보상, 참가 조건, 소비 비용을 유연하게 조정할 수 있습니다. “로그인 캠페인 중에는 퀘스트 보상 1.5배”, “특정 장비를 장착하고 있는 동안에는 도전 비용 절반\"과 같은 게임 경험을, 마스터 데이터를 다시 쓰지 않고도 구현할 수 있습니다. 트랜잭션 액션 GS2-Quest에서는 다음과 같은 트랜잭션 액션을 제공합니다. 소비 액션: 퀘스트 진행 상황( Progress )의 삭제 입수 액션: 퀘스트 진행 상황( Progress )의 생성 “퀘스트 진행 상황 생성\"을 입수 액션으로 이용하면, 상점에서 상품을 구매할 때나 특정 미션을 달성했을 때의 보상으로 특정 퀘스트를 직접 시작 상태로 만드는 처리를 트랜잭션 내에서 안전하게 실행할 수 있습니다. 이를 통해 특정 아이템을 구매한 직후 스페셜 퀘스트로 바로 유도하는 것과 같은 매끄러운 플레이 경험을 제공하기가 쉬워집니다. 구현 예제 퀘스트 그룹 목록 가져오기 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModelsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e QuestGroupModels (); TArray Gs2 :: UE5 :: Quest :: Model :: FEzQuestGroupModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . quest . namespace_ ( \"namespace-0001\" ) . quest_group_models ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 퀘스트 모델 목록 가져오기 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ). QuestModelsAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e QuestGroupModel ( \"quest-group-0001\" // questGroupName ); const auto It = Domain -\u003e QuestModels ( ); TArray Gs2 :: UE5 :: Quest :: Model :: FEzQuestModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . quest . namespace_ ( \"namespace-0001\" ) . quest_group_model ( \"quest-group-0001\" ) . quest_models ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 퀘스트 클리어 상황 가져오기 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CompletedQuestList ( questGroupName : \"main\" ). ModelAsync (); var completedQuestNames = item . CompleteQuestNames ; const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e CompletedQuestList ( \"main\" // questGroupName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . completed_quest_list ( \"main\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 퀘스트 시작 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StartAsync ( questGroupName : \"group-0001\" , questName : \"quest-0001\" ); await result . WaitAsync (); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto Future = Domain -\u003e Start ( \"group-0001\" , // questGroupName \"quest-0001\" // questName ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . start ( \"group-0001\" , # quest_group_name \"quest-0001\" , # quest_name null , # force null # config ) if async_result . error != null : if async_result . error . type == \"InProgressException\" : # 퀘스트가 이미 진행 중입니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 진행 중인 퀘스트 가져오기 퀘스트 시작 시 추첨된 보상 최댓값을 가져와 인게임 클리어 연출에 활용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ). ModelAsync (); var rewards = item . Rewards ; const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Progress ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 퀘스트 종료 보고 isComplete 에 클리어 여부를, rewards 에 실제로 획득한 보상 수량을 보고합니다. 진행 중인 Progress 가 응답한 최댓값 범위 내라면 그 수량의 보상이 지급됩니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ). EndAsync ( isComplete : true , rewards : new [] { new Gs2 . Unity . Gs2Quest . Model . EzReward { Action = \"Gs2Inventory:AcquireItemSetByUserId\" , ItemId = \"grn:gs2:{region}:{ownerId}:inventory:namespace-0001:model:item-0001\" , Value = 3 , }, }, config : null ); await result . WaitAsync (); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Progress ( ); const auto Future = Domain -\u003e End ( true , [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Quest :: Model :: FReward \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: Quest :: Model :: FReward \u003e () -\u003e WithAction ( TOptional FString \u003e ( \"Gs2Inventory:AcquireItemSetByUserId\" )) -\u003e WithItemId ( TOptional FString \u003e ( \"grn:gs2:{region}:{ownerId}:inventory:namespace-0001:model:item-0001\" )) -\u003e WithValue ( TOptional int32 \u003e ( 3 ))); return v ; }(), // rewards nullptr // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . end ( true , # is_complete null , # rewards null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 진행 중인 퀘스트 폐기 통신 단절 등으로 End 를 호출할 수 없었던 경우의 복구에 사용합니다. Game Engine: Unity Unreal Engine Godot await gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ). DeleteProgressAsync (); const auto Future = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Progress ( ) -\u003e DeleteProgress (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . delete_progress ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 기타 기능 퀘스트 분기 일반적인 사양에서는 퀘스트를 분기시킬 수 없습니다. 퀘스트 내에 2개의 출구를 마련하고, 어느 출구를 이용했는지에 따라 다음에 도전할 수 있는 퀘스트가 달라지도록 구현하고 싶다면 다음과 같은 데이터 구조를 검토해 보세요. 퀘스트 이름 전제 퀘스트 Quest1 Quest1a Phantom Quest1b Phantom Quest2a Quest1a Quest2b Quest1b 다소 까다롭지만, 퀘스트의 전제 조건이 되는 퀘스트에는 마스터 데이터 안에 존재하지 않는 퀘스트 이름을 설정할 수 있습니다. 이번 예시에서 Quest1a / Quest1b는 Phantom이라는 이름의 퀘스트를 전제 조건으로 하고 있지만, Phantom이라는 퀘스트는 마스터 데이터 안에 존재하지 않습니다. 따라서 Quest1a / Quest1b는 절대로 도전 가능한 상태가 되지 않는 퀘스트라는 뜻이 됩니다. Quest2a / Quest2b는 Quest1a / Quest1b를 전제 퀘스트로 하고 있습니다. 이 상태에서 Quest1의 클리어 보상으로 “Quest1a를 클리어 상태로 만든다”, “Quest1b를 클리어 상태로 만든다\"라는 보상을 설정해 두고, 이용한 출구에 따라 어느 쪽의 클리어 상태를 조작하는 보상을 플레이어에게 줄지 결정합니다. Quest1a / Quest1b가 존재하는 이유는, 마스터 데이터 안에 존재하지 않는 퀘스트는 클리어 상태로 만들 수 없기 때문입니다. graph TD Quest1 -- if use exit A --\u003e Quest1a Quest1 -- if use exit B --\u003e Quest1b phantom --- Quest1a phantom --- Quest1b Quest1a --\u003e Quest2a Quest1b --\u003e Quest2b linkStyle 2 stroke:#ccc,stroke-dasharray:4 linkStyle 3 stroke:#ccc,stroke-dasharray:4 class phantom pale class Quest1a pale class Quest1b pale Config를 사용한 스크립트로의 파라미터 전달 StartAsync / EndAsync 에는 config 파라미터를 지정할 수 있으며, 스크립트 트리거 실행 시 임의의 키-값 쌍을 전달할 수 있습니다. 플레이어가 선택한 난이도나 사용한 아이템 정보 등, 게임 고유의 맥락을 스크립트에 전달할 수 있습니다. 클리어 상황 리셋 CompletedQuestList 를 삭제하면 특정 퀘스트 그룹의 클리어 상황을 초기화할 수 있습니다. 이벤트 재주회나 챕터의 뉴 게임+ 등의 구현에 활용할 수 있습니다. 상세 레퍼런스 GS2-Quest API 레퍼런스","lang":"ko","section":"microservices","summary":"진행 관리 기능\n","title":"GS2-Quest","url":"/ko/microservices/quest/"},{"content":"Warning GS2-Ranking2 가 릴리스되었습니다. 특별한 이유가 없는 한 새로 이용하실 경우에는 GS2-Ranking2 를 이용해 주세요. 게임의 점수나 클리어 타임을 겨루는 랭킹 기능을 실현합니다. 랭킹에는 2종류가 존재하며 “참가자 전원이 동일한 보드에서 경쟁하는 것\"과 “구독한 플레이어의 점수와 경쟁하는 것\"이 있습니다. 전자를 글로벌 랭킹, 후자를 스코프 랭킹이라고 부릅니다. 글로벌 랭킹 글로벌 랭킹은 모든 플레이어와 경쟁하기 위한 랭킹 기능을 제공합니다. GS2-Ranking 에서는 수억 명 이상의 플레이어가 참가하는 대규모 랭킹을 실현할 수 있습니다. 대신, 랭킹의 집계는 리얼타임이 아니라 사전에 설정한 주기로 집계 처리가 이루어지며 그 집계 결과를 바탕으로 순위 계산 등을 수행합니다. 카테고리 랭킹의 종류를 설정합니다. 순위를 매길 때 점수가 큰 쪽이 우수한지, 작은 쪽이 우수한지를 설정해야 합니다. 집계 간격 랭킹의 집계를 수행하는 간격을 설정합니다. 최소 15분, 최대 24시간 범위에서 지정할 수 있습니다. 집계 간격 설정에서 주의해야 할 점은, 여기서 설정하는 간격이 이전 집계 시작 시각으로부터의 간격이 아니라 이전 집계 종료 시각으로부터의 간격이라는 것입니다. 집계 처리에 5분이 걸리는 상황에서 00:00 에 첫 번째 집계가 실행된 경우를 생각해 봅시다. 집계 시작 시각 집계 종료 시각 00:00 00:05 00:20 00:25 00:40 00:45 고정 집계 시각 집계 간격을 24시간으로 설정했을 때, 집계되는 시각을 고정하고 싶다는 요구가 있습니다. 이러한 요구에 대응하기 위해, 지정한 시각이 되면 집계 주기가 되지 않았더라도 집계를 실행하는 기능을 제공하고 있습니다. 집계 간격을 24시간, 고정 집계 시각을 오전 5시로 설정했다고 가정합니다. 집계 시작 시각 집계 종료 시각 2020-01-01 05:00 2020-01-01 05:05 2020-01-02 05:00 2020-01-02 05:05 ← 23시간 55분밖에 경과하지 않았지만, 고정 집계 시각이 되었기 때문에 집계함 2020-01-03 05:00 2020-01-03 05:05 ← 23시간 55분밖에 경과하지 않았지만, 고정 집계 시각이 되었기 때문에 집계함 점수의 유효 범위 점수로 등록을 허용할 값의 범위를 설정할 수 있습니다. 이를 통해 명백히 부적절한 점수 등록이 있을 때 등록 처리를 하지 않고 폐기할 수 있습니다. 이 경우, 부정한 점수의 경계를 조사하기 어렵게 하기 위해 클라이언트에는 오류가 반환되지 않습니다. 점수 등록 가능 기간 점수 등록을 허용하는 기간 설정으로 GS2-Schedule 의 이벤트를 연결할 수 있습니다. 점수 접수 기간 외에 점수를 전송해도 점수는 폐기됩니다. 점수 등록 가능 기간 외에는 집계 처리가 이루어지지 않으므로 집계와 관련된 비용은 발생하지 않지만, 스케줄 판정을 위한 GS2-Schedule 의 API 호출은 발생합니다. 따라서 더 이상 참조하지 않을 것이 명백한 랭킹은 마스터 데이터에서 삭제하는 것을 권장합니다. 랭킹 데이터 접근 가능 기간 랭킹 데이터에 접근 가능한 기간으로 GS2-Schedule 의 이벤트를 연결할 수 있습니다. 이벤트 종료 후 점수 참조도 할 수 없게 하는 경우 등에 활용할 수 있습니다. 랭킹의 세대 카테고리별로 세대를 설정할 수 있습니다. 세대를 변경함으로써 카테고리 이름을 변경하지 않고도 랭킹 등록 내용을 초기화할 수 있습니다. 점수 갱신 점수를 전송할 때 서버에서는 마지막으로 등록된 점수를 유효한 점수로 처리합니다. 따라서 가장 우수한 점수를 랭킹으로 기록하고 싶은 경우, 클라이언트에서 점수의 우열을 판정하여 점수를 전송할지 여부를 판단해야 합니다. 순위 취득 지정한 사용자ID의 플레이어 순위를 취득할 수 있습니다. 이 처리에서는 가능한 한 최신 상황에 가까운 순위를 응답하려고 시도합니다. 사전에 집계된 집계 결과 내용 중에서 최신 점수라면 몇 위가 될지를 계산하여 그 순위를 응답합니다. 따라서 점수 갱신 직후에 순위를 취득한 경우에도, 집계 시각이 되지 않았더라도 최신 점수를 사용한 순위에 해당하는 값을 얻을 수 있습니다. 지정한 점수 주변의 랭킹 취득 점수를 지정하여 그 주변의 랭킹을 취득할 수 있습니다. 동일한 점수가 대량으로 존재하는 경우, 목록의 중심에 지정한 점수가 설정되지 않을 수 있습니다. 스코프 랭킹 스코프 랭킹은 친구 내 랭킹과 같이 극히 일부 플레이어 내에서의 랭킹을 실현합니다. 이 기능을 실현하기 위해, 각 플레이어에게 점수 버킷을 마련하고 플레이어가 점수를 갱신했을 때 자신의 점수를 구독하고 있는 플레이어의 버킷 데이터도 갱신함으로써 각 플레이어는 자신의 버킷 내 점수를 사용하여 랭킹을 계산하는 방식으로 실현하고 있습니다. 마스터 데이터 관리 랭킹의 카테고리는 마스터 데이터로 정의합니다. CategoryModel : 랭킹의 카테고리 설정(정렬 순서, 집계 간격, 고정 집계 시각, 점수의 유효 범위, 등록 가능 기간, 참조 가능 기간, 세대, 점수 보유 방식 등) 마스터 데이터 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성하는 것도 가능합니다. 스크립트 트리거 GS2-Ranking 에서는 스크립트 트리거를 제공하지 않습니다. 트랜잭션 액션 GS2-Ranking 에서는 트랜잭션 액션을 제공하지 않습니다. 구현 예제 점수 등록 이 API는 편의성을 위해 ApplicationAccess로 호출할 수 있게 되어 있습니다. 하지만 임의의 점수로 전송할 수 있다는 것은 취약점이 됩니다. 따라서 가능하다면 이 API를 클라이언트에서 호출할 수 없도록 설정하고, 신뢰할 수 있는 전송원에서만 점수 등록을 허용하도록 해야 합니다. 예를 들어 아이템 소지 수량 랭킹을 실현하고 싶다면, GS2-Inventory 에서 아이템을 획득할 때 트리거되는 스크립트에서 점수로 아이템 소지 수량을 등록하는 편이 더 안전하게 처리할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" ). PutScoreAsync ( score : 1000L , metadata : null ); var item = await result . ModelAsync (); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RankingCategory ( \"category-0001\" // categoryName ); const auto Future = Domain -\u003e PutScore ( 1000L , nullptr // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) var async_result = await domain . put_score ( 1000 , # score null # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 순위 취득(글로벌) Game Engine: Unity Unreal Engine Godot var item = await gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" ). ModelAsync ( scorerUserId : \"user-0001\" ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RankingCategory ( \"category-0001\" // categoryName ) -\u003e Ranking ( \"user-0001\" // scorerUserId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) . ranking ( \"user-0001\" , null ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 랭킹 취득 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" ). RankingsAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RankingCategory ( \"category-0001\" // categoryName ); const auto It = Domain -\u003e Rankings ( ); TArray Gs2 :: UE5 :: Ranking :: Model :: FEzRankingPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" ) . rankings ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 다른 플레이어 구독(스코프) Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SubscribeAsync ( categoryName : \"category-0001\" , targetUserId : \"user-0002\" ); var item = await result . ModelAsync (); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RankingCategory ( \"category-0001\" // categoryName ); const auto Future = Domain -\u003e Subscribe ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) var async_result = await domain . subscribe ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 다른 플레이어의 구독 해제(스코프) Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SubscribeUser ( categoryName : \"category-0001\" , targetUserId : \"user-0002\" ). UnsubscribeAsync ( ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RankingCategory ( \"category-0001\" // categoryName ) -\u003e SubscribeUser ( \"user-0002\" // targetUserId ); const auto Future = Domain -\u003e Unsubscribe ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) . subscribe_user ( \"user-0002\" ) var async_result = await domain . unsubscribe ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 구독 중인 플레이어 목록 취득 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" ). SubscribeUsersAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RankingCategory ( \"category-0001\" // categoryName ); const auto It = Domain -\u003e SubscribeUsers ( ); TArray Gs2 :: UE5 :: Ranking :: Model :: FEzSubscribeUserPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" ) . subscribe_users ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 점수 보유 설정 글로벌 랭킹·스코프 랭킹 모두, 사용자ID별로 보유할 수 있는 점수를 1개로 할지, 여러 개 보유할 수 있게 할지를 설정할 수 있습니다. 등록한 점수 중 마지막 것만 랭킹 대상으로 할지, 등록한 모든 점수를 랭킹 대상으로 할지 선택할 수 있습니다. 모든 점수를 랭킹 대상으로 하는 경우, 데이터양이 늘어나기 쉬우며 GS2 이용 요금에도 영향을 미칩니다. 게임 시스템상 중요한 이유가 없다면, 마지막으로 등록된 점수 1개만을 랭킹 대상으로 하도록 설정하는 것을 권장합니다. 상세 레퍼런스 GS2-Ranking API 레퍼런스","lang":"ko","section":"microservices","summary":"랭킹 기능\n","title":"GS2-Ranking","url":"/ko/microservices/ranking/"},{"content":"Tip GS2-Ranking2 는 이름 그대로 버전2에 해당하는 마이크로서비스입니다. 이전 버전에 관한 문서는 GS2-Ranking 을 참조하세요. 게임의 점수나 클리어 타임을 겨루는 랭킹 기능을 실현합니다. GS2-Ranking2 는 다음 3가지 종류의 모드를 제공합니다. 글로벌 랭킹 클러스터 랭킹 구독 랭킹 게임에 필요한 랭킹 기능의 대부분은 이 중 하나의 모드로 요건을 충족할 수 있을 것입니다. 랭킹 모드 글로벌 랭킹 글로벌 랭킹은 모든 플레이어와 경쟁하기 위한 랭킹 기능을 제공합니다. GS2-Ranking2 에서는 상위 1000위 플레이어만 랭킹에 참가할 수 있으며, 1000위 이하 플레이어의 점수는 전송하더라도 랭킹에 등록되지 않습니다. 이전 버전인 GS2-Ranking 이 1억 명이 넘는 플레이어의 정확한 순위를 반환할 수 있는 형태로 제공되었기 때문에, 이전 버전과 비교해 사양이 크게 변경되었습니다. GS2-Ranking 에서는 많은 점수를 다룰 수 있는 대신, 15분~24시간 범위에서 지정한 집계 간격으로 집계가 이루어질 때까지 랭킹 등록이 이루어지지 않는 사양으로, 집계할 때마다 참가 인원 수에 따른 비용이 발생했습니다. GS2-Ranking 을 이용한 개발자들의 피드백을 받아 GS2-Ranking2 는 재설계되었습니다. 구체적으로 다음과 같은 사항을 중요한 피드백으로 받아들여 재설계했습니다. 대부분의 사용 사례에서 상위 플레이어만 표시할 수 있으면 충분하다 순위 변화를 즉시 랭킹에 반영하고 싶다 플레이어 증가에 따른 랭킹 집계 비용 증가는 바람직하지 않다 그 결과, 앞서 설명한 대로 상위 1000명의 플레이어만 랭킹에 참가할 수 있고, 1001위 이하의 플레이어는 “순위권 밖\"으로 처리하는 구조가 되었습니다. 대신 점수 등록 직후 바로 랭킹에 반영되며, 일반적인 API 요청 비용 이상의 추가 비용은 발생하지 않습니다. 클러스터 랭킹 대체로 글로벌 랭킹과 동일한 사양이지만, 유일하게 다른 점은 클러스터ID별로 서로 다른 랭킹이 생성된다는 점입니다. 클러스터ID에 GS2-Guild 의 길드ID를 지정함으로써 길드 멤버끼리 경쟁하는 랭킹을 구현하는 데 사용할 수 있습니다. 클러스터 참가 판정 클러스터 랭킹에서는 클러스터의 종류를 정의해 두면 점수 등록 시 클러스터에 참가하고 있는지 확인한 후 점수 등록을 실행할 수 있습니다. 예를 들어 GS2-Guild 의 길드를 클러스터로 하는 랭킹을 구현하는 경우, 랭킹 모드 설정에서 클러스터 종류에 “Gs2Guild::Guild\"를 지정하면 점수 등록 시 클러스터ID로 지정된 길드에 점수를 등록하려는 플레이어가 멤버로 등록되어 있는지 확인한 후 점수를 등록하도록 할 수 있습니다. 구독 랭킹 GS2-Ranking 의 스코프 랭킹과 유사한 사양의 랭킹 기능입니다. 다른 플레이어를 구독함으로써 자신의 랭킹 보드에 다른 플레이어의 최신 점수를 포함시킬 수 있습니다. 친구 간 랭킹처럼 플레이어 간 비대칭성이 강한 랭킹을 구현하기 위해 사용합니다. 구독 랭킹에서의 반영 지연 점수 등록을 실행하면, 해당 플레이어를 구독하고 있는 플레이어의 랭킹에 비동기로 점수 등록이 실행됩니다. 이 처리는 일반적으로 1초 이내에 실행되지만, 비동기 처리이기 때문에 점수가 반영될 때까지 약간의 지연이 발생합니다. 시즌 각 랭킹에는 점수 등록을 받는 기간으로 GS2-Schedule 의 이벤트를 연결할 수 있습니다. GS2-Schedule 의 이벤트에는 반복 설정이 가능하며, 각 랭킹은 이벤트가 반복될 때마다 초기화됩니다. 이 기능을 구현하기 위해 GS2-Ranking2 는 각 랭킹에 시즌 이라는 속성을 가지고 있습니다. 랭킹 결과는 시즌별로 저장되며, 과거 시즌의 결과를 언제든지 참조할 수 있습니다. 랭킹 보상 글로벌 랭킹·클러스터 랭킹에서는 랭킹 순위 보상을 설정할 수 있습니다. 보상을 설정하려면 순위 임계값 과 보상 내용 을 설정합니다. 임계값에 3을 지정하면 1, 2, 3위 플레이어에게 보상이 지급되고, 이어서 10을 지정하면 4, 5, 6, 7, 8, 9, 10위 플레이어에게 보상을 설정할 수 있습니다. 순위권 밖 플레이어에 대한 보상 1001을 임계값으로 지정하면 순위권 밖 플레이어에 대한 보상을 설정할 수 있습니다. 1001을 임계값으로 하는 랭킹 보상 설정은 선택 사항이며, 지정하지 않은 경우 순위권 밖 플레이어는 보상을 받을 수 없습니다. 과거 시즌 보상 수령 과거 시즌의 랭킹 보상은 보상 수령 API에 과거 시즌 번호를 지정하여 호출함으로써 언제든지 받을 수 있습니다. 점수의 유효 범위 점수로 등록을 허용할 값의 범위를 설정할 수 있습니다. 이를 통해 명백히 부적절한 점수 등록이 있을 때 등록 처리를 하지 않고 폐기할 수 있습니다. 기간 설정 점수 등록 가능 기간 점수 등록을 받는 기간 설정으로 GS2-Schedule 의 이벤트를 연결할 수 있습니다. 점수 접수 기간 외에 점수를 전송해도 점수는 폐기됩니다. 랭킹 데이터 접근 가능 기간 랭킹 데이터에 접근할 수 있는 기간으로 GS2-Schedule 의 이벤트를 연결할 수 있습니다. 이벤트 종료 후에는 점수 조회도 할 수 없게 하는 경우 등에 활용할 수 있습니다. 트랜잭션 액션 GS2-Ranking2 에서는 다음과 같은 트랜잭션 액션을 제공합니다. 검증 액션: 글로벌·클러스터·구독 각 랭킹의 점수 검증 소비 액션: 랭킹 보상 수령 이력 기록 “랭킹 점수 검증\"을 검증 액션으로 이용함으로써, 특정 점수 이상을 기록한 플레이어만 구매할 수 있는 상품이나 도전할 수 있는 퀘스트와 같은 제한을 트랜잭션 내에서 안전하게 설정할 수 있습니다. 이를 통해 상위 랭커 한정의 특별 보상 획득 이벤트 등을 확실하게 구현할 수 있습니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 사용할 수 있는 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. RankingModel : 랭킹 모드나 보상 임계값 설정 마스터 데이터 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 구현 예제 점수 등록 이 API는 편의성 관점에서 ApplicationAccess 로 호출할 수 있게 되어 있습니다. 그러나 임의의 점수로 전송할 수 있다는 것은 취약점이 됩니다. 따라서 가능하다면 이 API를 클라이언트에서 호출할 수 없도록 설정하고, 신뢰할 수 있는 발신처로부터만 점수 등록을 받을 수 있도록 해야 합니다. 예를 들어 아이템 소지 수량 랭킹을 구현하고 싶다면, GS2-Inventory 의 아이템 획득 시 트리거되는 스크립트에서 점수로 아이템 소지 수량을 등록하는 편이 더 안전하게 처리할 수 있습니다. 글로벌 랭킹 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( gameSession : GameSession , season : null // current season ). PutGlobalRankingAsync ( score : 100L , metadata : null ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( GameSession , TOptional int64 \u003e () // current season ) -\u003e PutGlobalRanking ( 100L , // score TOptional FString \u003e () // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( 0 , null ) var async_result = await domain . put_global_ranking ( 100 , # score null # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 클러스터 랭킹 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , gameSession : GameSession , season : null // current season ). PutClusterRankingAsync ( score : 100L , metadata : null ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName GameSession , TOptional int64 \u003e () // current season ) -\u003e PutClusterRanking ( 100L , // score TOptional FString \u003e () // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , 0 , null ) var async_result = await domain . put_cluster_ranking ( 100 , # score null # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 구독 랭킹 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( gameSession : GameSession , season : null // current season ). PutSubscribeRankingAsync ( score : 100L , metadata : null ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( GameSession , TOptional int64 \u003e () // current season ) -\u003e PutSubscribeRanking ( 100L , // score TOptional FString \u003e () // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) . subscribe_ranking_season ( 0 , null ) var async_result = await domain . put_subscribe_ranking ( 100 , # score null # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 순위 조회 글로벌 랭킹 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( gameSession : GameSession , season : null // current season ). GetGlobalRankingRankAsync ( ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( GameSession , TOptional int64 \u003e () // current season ) -\u003e GetGlobalRankingRank ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( null , null ) . global_ranking_data ( null ) var async_result = await domain . get_global_ranking_rank ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 클러스터 랭킹 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , gameSession : GameSession , season : null // current season ). GetClusterRankingRankAsync ( ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName GameSession , TOptional int64 \u003e () // current season ) -\u003e GetClusterRankingRank ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , null , null ) . cluster_ranking_data ( null ) var async_result = await domain . get_cluster_ranking_rank ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 구독 랭킹 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( gameSession : GameSession , season : null // current season ). SubscribeRankingData ( scorerUserId : \"user-0001\" ). GetSubscribeRankingRankAsync ( ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( GameSession , TOptional int64 \u003e () // current season ) -\u003e SubscribeRankingData ( \"user-0001\" // scorerUserId ) -\u003e GetSubscribeRankingRank ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) . subscribe_ranking_season ( null , null ) . subscribe_ranking_data ( null ) var async_result = await domain . get_subscribe_ranking_rank ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 랭킹 조회 글로벌 랭킹 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( gameSession : GameSession , season : null // current season ). GlobalRankingsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( GameSession , TOptional int64 \u003e () // current season ) -\u003e GlobalRankings ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzGlobalRankingDataPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( game_session , null ) . global_rankings ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 클러스터 랭킹 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , gameSession : GameSession , season : null // current season ). ClusterRankingsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName GameSession , TOptional int64 \u003e () // current season ) -\u003e ClusterRankings ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzClusterRankingDataPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , game_session , null ) . cluster_rankings ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 구독 랭킹 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( gameSession : GameSession , season : null // current season ). SubscribeRankingsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( GameSession , TOptional int64 \u003e () // current season ) -\u003e SubscribeRankings ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzSubscribeRankingDataPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) . subscribe_ranking_season ( game_session , null ) . subscribe_rankings ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 랭킹 보상 받기 랭킹 보상은 보상 임계값에 해당하는 플레이어가 API를 호출함으로써 받을 수 있습니다. 수령 처리는 트랜잭션으로 실행되며, 설정된 입수 액션이 순서대로 평가됩니다. 과거 시즌의 보상을 받는 경우에는 season 에 대상 시즌 번호를 지정합니다. 글로벌 랭킹 Game Engine: Unity Unreal Engine Godot var transaction = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( gameSession : GameSession , season : null // current season ). GlobalRankingReceivedReward ( ). ReceiveGlobalRankingRewardAsync ( ); await transaction . WaitAsync (); const auto Future = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( GameSession , TOptional int64 \u003e () // current season ) -\u003e GlobalRankingReceivedReward ( ) -\u003e ReceiveGlobalRankingReward ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( 0 , null ) . global_ranking_received_reward ( ) var async_result = await domain . receive_global_ranking_reward ( null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 클러스터 랭킹 Game Engine: Unity Unreal Engine Godot var transaction = await gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , gameSession : GameSession , season : null // current season ). ClusterRankingReceivedReward ( ). ReceiveClusterRankingRewardAsync ( ); await transaction . WaitAsync (); const auto Future = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName GameSession , TOptional int64 \u003e () // current season ) -\u003e ClusterRankingReceivedReward ( ) -\u003e ReceiveClusterRankingReward ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , 0 , null ) . cluster_ranking_received_reward ( ) var async_result = await domain . receive_cluster_ranking_reward ( null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-Ranking2 API 레퍼런스","lang":"ko","section":"microservices","summary":"랭킹 기능","title":"GS2-Ranking2","url":"/ko/microservices/ranking2/"},{"content":"게임 플레이어 간의 대전 기능을 구현하기 위해, 낮은 레이턴시로 높은 빈도의 통신이 필요한 경우에 사용할 수 있는 기능입니다. GS2에서는 일반적으로 API 리퀘스트 횟수에 대해 요금이 발생하지만, 이 서비스는 게임 서버가 기동하면 해당 게임 서버의 가동 시간과 통신 용량에 대해 비용이 발생하며, 통신 횟수에 대해서는 비용이 발생하지 않습니다. graph TD Match[\"GS2-Matchmaking 에서 로비 성립\"] --\u003e Want[\"RoomWant 으로 룸 요청\"] Want -- 핫 스탠바이에서 할당 --\u003e Warm[\"Warm Start (1~3초)\"] Want -- 신규 기동 --\u003e Cold[\"Cold Start (40~60초)\"] Warm --\u003e Connect[\"플레이어가 접속\"] Cold --\u003e Connect Connect --\u003e Play[\"패킷 릴레이로 대전 중 통신\"] Play -- 1분간 무통신 또는 3시간 경과 --\u003e Shutdown[\"룸 종료\"] 서버 타입 현재 GS2-Realtime은 패킷 릴레이 기능만을 제공하고 있습니다. 이는 게임 서버로 메시지를 전송하면 그 메시지가 다른 플레이어에게 브로드캐스트되는 기능을 기본으로 하며, 플레이어ID를 지정하여 지정한 플레이어에게 메시지를 전달하는 기능만을 가지고 있습니다. RPC나 오브젝트 동기화와 같은 기능은 SDK에 포함되어 있지 않으며, 단순한 바이너리 데이터의 송수신만을 수행할 수 있습니다. 페이로드의 바이너리 인코딩은 애플리케이션 측의 책임이므로, Protocol Buffers / FlatBuffers / MessagePack과 같은 임의의 인코딩을 채택할 수 있습니다. Unreal Engine Dedicated Server 호스팅 개발자가 Unreal Engine으로 빌드한 Dedicated Server를 호스팅할 수 있도록 하는 것을 검토하고 있습니다. 이 기능의 제공 시기는 미정입니다. 유상 지원 계약을 체결한 후 개발을 진행할 수 있는 강한 요구가 있다면 일정을 조정할 수 있으니 상담해 주시기 바랍니다. 서버 스펙 서버의 성능을 설정할 수 있습니다. 성능에 따라 1분당 이용 요금에 차이가 발생합니다. 가장 저렴한 realtime1.nano에서 8명의 플레이어가 1초에 3회 메시지를 주고받을 수 있음을 확인했습니다. 검토 중인 Unreal Engine Dedicated Server 호스팅에서는 요구 스펙이 이보다 높아질 것으로 예상됩니다. 개발 효율이 아닌 비용 효율이 가장 중요한 프로젝트에서는 Unreal Engine Dedicated Server 사용을 권장하지 않습니다. 서버 스펙은 Namespace마다 설정하며, serverSpec 필드에 realtime1.nano 와 같은 식별자를 지정합니다. 라이프사이클 게임 서버는 기동 리퀘스트를 접수한 후부터 준비가 시작됩니다. 이때, 기동 리퀘스트가 빈번하게 발생하는 게임 서버에 대해서는 GS2가 핫 스탠바이를 준비합니다. 따라서 기동 리퀘스트를 접수한 직후에 할당이 이루어질 것으로 기대할 수 있지만, 기동 리퀘스트가 빈번하게 발생하지 않는 소규모 게임에서는 기동 리퀘스트부터 실제 할당까지 시간이 걸립니다. 핫 스탠바이에서 할당하는 경우를 웜 스타트, 서버를 새로 기동하여 할당하는 경우를 콜드 스타트라고 부릅니다. 콜드 스타트 시 할당에 필요한 예상 시간은 40초 60초 정도, 웜 스타트 시 할당에 필요한 시간은 1초 3초로 가정해 주시기 바랍니다. 기동 리퀘스트가 빈번하게 발생하지 않는 규모의 타이틀에서 콜드 스타트 시간을 허용할 수 없는 경우, 매월 고정 비용이 발생하는 것을 전제로 핫 스탠바이를 제공할 수 있습니다. 핫 스탠바이 계약은 5대부터 접수하고 있습니다. 핫 스탠바이를 계약했거나 기동 리퀘스트가 빈번하게 발생하는 상황이라도 콜드 스타트가 발생하지 않는다는 것을 보장할 수는 없습니다. 핫 스탠바이가 준비되는 것보다 빠르게 서버 기동 리퀘스트가 발생하거나, 게임 서버의 버전 업 시에는 콜드 스타트가 발생할 가능성이 있습니다. 따라서 최악의 경우 콜드 스타트가 발생하는 상황을 염두에 두고 시스템을 설계해 주시기 바랍니다. 스타트 종류 종류 소요 시간 설명 웜 스타트 1~3초 핫 스탠바이에서 즉시 할당 콜드 스타트 40~60초 서버 프로세스를 새로 기동 룸 종료 조건 기동된 룸은 다음 조건에서 종료됩니다. 룸 생성 후 5분간 아무도 접속하지 않은 경우 룸에 참가하는 모든 플레이어로부터 1분간 무통신 상태가 지속된 경우 룸의 최대 가동 시간인 3시간 이 경과한 경우 또한, 명시적으로 RoomShutdown 을 호출하여 룸을 즉시 종료시킬 수도 있습니다. 또한, 핫 스탠바이의 룸에도 동일한 종료 처리가 적용되지만, 핫 스탠바이의 가동 시간은 이용 요금에 가산되지 않습니다. 룸 접속 GS2-Realtime은 다음 흐름으로 접속합니다. sequenceDiagram participant Player participant Realtime as GS2-Realtime participant Server as GameServer Player -\u003e\u003e Realtime: Room(roomName).Model() Realtime --\u003e\u003e Player: IpAddress / Port / EncryptionKey Player -\u003e\u003e Server: RelayRealtimeSession.ConnectAsync() Server --\u003e\u003e Player: 접속 완료 Note over Player,Server: 이후에는 게임 서버와 직접 WebSocket 통신 접속 정보는 다음 세 가지로 구성됩니다. IpAddress : 게임 서버의 IP 주소 Port : 접속 대상 포트 번호 EncryptionKey : 메시지 페이로드 암호화 키 접속 시에는 액세스 토큰과 플레이어의 프로필 초기값을 전달합니다. 프로필 릴레이 서버는 수신한 메시지를 다른 플레이어에게 전파할 뿐만 아니라, 플레이어별로 프로필 데이터를 가질 수 있습니다. 새로운 플레이어가 게임 서버에 접속했을 때, 참가 중인 다른 모든 플레이어의 프로필 데이터를 받을 수 있습니다. 플레이어의 기본 정보를 저장해 둠으로써, 신규 플레이어가 접속했을 때의 처리를 간소화할 수 있습니다. 프로필을 갱신하면 다른 플레이어에게 그 내용이 전송되므로 메시지 전송 대신 사용할 수도 있지만, 갱신 시 페이로드 전체가 송수신되는 프로필 갱신으로 높은 빈도의 메시징을 수행하는 것은 통신 효율 면에서 최적이 아닙니다. 프로필은 바이너리 페이로드로서 임의의 형식으로 인코딩할 수 있습니다. 플레이어의 캐릭터 정보, 장비, 레벨, 게임 내 통화 등의 스냅샷을 저장하는 데 적합합니다. 이벤트 핸들링 RelayRealtimeSession 에는 다음 이벤트 핸들러를 설정할 수 있습니다. 핸들러 발생 시점 OnJoinPlayer 다른 플레이어가 룸에 참가했을 때 OnLeavePlayer 다른 플레이어가 룸에서 퇴장했을 때 OnRelayMessage 다른 플레이어로부터 릴레이 메시지를 수신했을 때 OnUpdateProfile 다른 플레이어가 프로필을 갱신했을 때 OnError 프로토콜 오류가 발생했을 때 OnGeneralError 통신 오류가 발생했을 때 OnClose 게임 서버와의 접속이 끊어졌을 때 각 이벤트에는 MessageMetadata 를 포함하는 확장판( OnRelayMessageWithMetadata 등)도 준비되어 있어, 메시지의 메타 정보를 함께 취득할 수 있습니다. 푸시 알림 설정할 수 있는 주요 푸시 알림과 설정명은 다음과 같습니다. createNotification : 룸 할당 시 알림 enableTransferMobileNotification 을 활성화하면 오프라인 단말로의 모바일 푸시 전송에도 대응합니다. GS2-Matchmaking으로 모인 멤버 전원에게 룸 할당을 알림으로써, 대전 준비 완료를 실시간으로 알릴 수 있습니다. 마스터 데이터 운용 GS2-Realtime은 마스터 데이터를 필요로 하지 않습니다. 네임스페이스 설정(서버 타입·서버 스펙·푸시 알림 설정)만으로 운용할 수 있습니다. 트랜잭션 액션 GS2-Realtime에서는 트랜잭션 액션을 제공하지 않습니다. 다른 마이크로서비스와의 연계 GS2-Realtime은 단독으로 사용하기보다는 다음 마이크로서비스와 조합하여 사용하는 것이 일반적입니다. 서비스 용도 GS2-Matchmaking 대전 상대를 매칭하고, 성립 후 RoomWant 를 호출 GS2-Gateway 푸시 알림 경로로 createNotification 을 이용 GS2-Account 플레이어의 액세스 토큰을 발행 구현 예제 게임 서버 접속 정보 취득 룸 이름을 지정하여 접속 대상 정보를 취득합니다. RoomWant 를 경유하여 매치메이킹을 통해 룸이 준비된 경우에는 해당 roomName 을 지정합니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Realtime . Namespace ( namespaceName : \"namespace-0001\" ). Room ( roomName : \"room-0001\" ). ModelAsync (); var ipAddress = item . IpAddress ; var port = item . Port ; var encryptionKey = item . EncryptionKey ; const auto Domain = Gs2 -\u003e Realtime -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Room ( \"room-0001\" // roomName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); const auto IpAddress = Result -\u003e GetIpAddress (); const auto Port = Result -\u003e GetPort (); const auto EncryptionKey = Result -\u003e GetEncryptionKey (); var domain = ez . realtime . namespace_ ( \"namespace-0001\" ) . room ( \"room-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 게임 서버에 접속 Game Engine: Unity Unreal Engine Godot using ( var session = new RelayRealtimeSession ( accessToken , // 액세스 토큰 ipAddress , // 게임 서버의 IP 주소 port , // 게임 서버의 포트 encryptionKey , // 암호화 키 ByteString . CopyFromUtf8 ( \"my profile\" ) // 프로필 초기값 ) ) { // 이벤트 핸들러를 설정 await session . ConnectAsync (); // 세션이 유효한 스코프 } // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. var session = Gs2RelayRealtimeSession . new ( game_session . access_token . token , ip_address , port , encryption_key , \"my profile\" . to_utf8_buffer () ) var async_result = await session . connect_session () if async_result . error != null : push_error ( str ( async_result . error )) return session . dispatch () 다른 플레이어의 접속 핸들링 Game Engine: Unity Unreal Engine Godot session . OnJoinPlayer += player =\u003e { var connectionId = player . ConnectionId ; var profile = player . Profile ; // 신규 참가자의 초기 표시 등을 수행 }; // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. session . join_player . connect ( func ( player ): var connection_id = player . connection_id var profile = player . profile # Initialize the newly joined player in the game UI. ) 다른 플레이어의 접속 해제 핸들링 Game Engine: Unity Unreal Engine Godot session . OnLeavePlayer += player =\u003e { // 퇴장한 플레이어의 표시를 정리 }; // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. session . leave_player . connect ( func ( player ): # Remove the player who left from the game UI. pass ) 다른 플레이어로부터의 메시지 핸들링 Game Engine: Unity Unreal Engine Godot session . OnRelayMessage += message =\u003e { var sourceConnectionId = message . ConnectionId ; var payload = message . Data ; // payload 를 애플리케이션 계층에서 복호화·해석 }; // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. session . relay_message . connect ( func ( message ): var source_connection_id = message . connection_id var payload = message . data # Decode and handle the payload in the application layer. ) 다른 플레이어의 프로필 갱신 핸들링 Game Engine: Unity Unreal Engine Godot session . OnUpdateProfile += player =\u003e { // 프로필 변경 사항을 화면에 반영 }; // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. session . update_profile_received . connect ( func ( player ): # Reflect the changed profile in the game UI. pass ) 게임 서버로부터의 접속 해제 핸들링 Game Engine: Unity Unreal Engine Godot session . OnClose += () =\u003e { // 접속 해제 시 재시도·화면 전환 처리 }; // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. session . closed . connect ( func (): # Retry the connection or transition to an error screen. pass ) 프로필 갱신 Game Engine: Unity Unreal Engine Godot await session . UpdateProfileAsync ( ByteString . CopyFromUtf8 ( \"my profile2\" ) ); // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. var async_result = await session . update_profile ( \"my profile2\" . to_utf8_buffer () ) if async_result . error != null : push_error ( str ( async_result . error )) return 브로드캐스트 메시지 전송 targetConnectionIds 를 생략하면 자신을 제외한 룸 내 모든 플레이어에게 배포됩니다. Game Engine: Unity Unreal Engine Godot await session . SendAsync ( ByteString . CopyFrom ( 0x00 , 0x01 , 0x02 ) ); // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. var async_result = await session . send ( PackedByteArray ([ 0x00 , 0x01 , 0x02 ]) ) if async_result . error != null : push_error ( str ( async_result . error )) return 유니캐스트 메시지 전송 targetConnectionIds 에 대상 플레이어의 ConnectionId 를 지정합니다. ConnectionId 는 OnJoinPlayer 등에서 받을 수 있습니다. Game Engine: Unity Unreal Engine Godot await session . SendAsync ( ByteString . CopyFrom ( 0x00 , 0x01 , 0x02 ), new uint [] { targetConnectionId1 , targetConnectionId2 } ); // Unreal Engine용 Realtime SDK는 현재 준비 중입니다. var async_result = await session . send ( PackedByteArray ([ 0x00 , 0x01 , 0x02 ]), [ target_connection_id ] ) if async_result . error != null : push_error ( str ( async_result . error )) return 설계 시 주의사항 바이너리 페이로드 설계 GS2-Realtime은 바이너리 데이터를 그대로 중계할 뿐, 내용을 해석하지 않습니다. 따라서 다음 사항은 애플리케이션 측에서 설계해야 합니다. 메시지 종류를 식별하기 위한 헤더(선두 1바이트에 opcode를 넣는 등) 직렬화 형식(Protocol Buffers / FlatBuffers / MessagePack 등) 순서 보장의 필요성(필요한 경우 애플리케이션 계층에서 시퀀스 번호를 부여) 치트 대책 릴레이 서버는 페이로드의 내용을 해석하지 않으므로, 치트 행위 자체를 탐지할 수는 없습니다. 레이팅 계산 등에서는 투표를 통한 다수결로 결과를 결정합니다. 상세 레퍼런스 GS2-Realtime API 레퍼런스","lang":"ko","section":"microservices","summary":"리얼타임 통신 기능\n","title":"GS2-Realtime","url":"/ko/microservices/realtime/"},{"content":"게임 내 이벤트 등의 스케줄을 관리하는 기능을 제공합니다. GS2-Schedule 은 단독으로는 이벤트의 기간 정보만을 관리하는 기능을 가지고 있으며, 보상 지급이나 구매 제한과 같은 처리는 다른 마이크로서비스와 조합하여 실현합니다. GS2-Showcase / GS2-Exchange / GS2-LoginReward / GS2-Mission 등 거의 모든 게임 요소 마이크로서비스가 이벤트 기간과의 연계를 전제로 설계되어 있기 때문에, 기간 한정 운영 시책을 실시할 때 핵심이 되는 마이크로서비스입니다. 이벤트 개최 기간 이벤트 개최 기간에는 두 가지 종류가 있습니다. 첫 번째는 모든 플레이어가 동일한 기간을 공유하는 “절대 기간”, 두 번째는 플레이어마다 기간이 다른 “상대 기간\"입니다. graph TD Event[\"이벤트\"] Event --\u003e Absolute[\"절대 기간 (scheduleType = absolute)\"] Event --\u003e Relative[\"상대 기간 (scheduleType = relative)\"] Absolute --\u003e AbsoluteSample[\"예: 1월 1일~1월 3일의 뉴이어 이벤트\"] Relative --\u003e RelativeSample[\"예: 첫 플레이로부터 7일간 첫 보스 격파로부터 24시간\"] 절대 기간 “1월 1일~1월 3일에 뉴이어 이벤트를 개최한다\"와 같은 경우에 사용하는 기간 유형입니다. 모든 플레이어에게 동일한 개최 기간이 공유되므로, absoluteBegin / absoluteEnd 를 마스터 데이터에서 지정합니다. 상대 기간 “게임 시작으로부터 1주일” 이나 “처음 보스를 쓰러뜨린 후 24시간\"처럼, 플레이어에 따라 이벤트 기간이 달라지는 경우에 사용하는 기간 유형입니다. 상대 기간을 실현하기 위한 “트리거\"라는 구조가 있습니다. 트리거를 실행한 후, 지정된 기간(ttl)이 이벤트의 개최 기간으로 취급됩니다. Gs2Schedule:TriggerByUserId 액션 트리거를 당기는 방식의 종류 트리거를 당길 때, 이미 트리거가 당겨져 있는 경우 이벤트 기간을 지정하는 방식에는 여러 가지가 있습니다. 트리거를 재기동한다(renew) 트리거를 연장한다(extend) 아무것도 하지 않는다(drop) 이벤트의 반복 종료 일시에 유효 기간이 만료된다(repeatCycleEnd) 다음 반복 시작 일시에 유효 기간이 만료된다(repeatCycleNextStart) 절대 기간 이벤트의 종료 일시에 유효 기간이 만료된다(absoluteEnd) repeatCycleEnd / repeatCycleNextStart / absoluteEnd 는 반복 설정이나 절대 기간을 가진 이벤트에 맞춰 유효 기간을 자동으로 조정하는 방식입니다. 2020년 1월 1일 00:00 에 트리거를 당겨 7일간의 상대 기간 이벤트가 시작된 경우, 2020년 1월 3일 00:00 에 트리거를 다시 당겼을 때의 각 동작은 다음과 같습니다. 방식 이벤트 종료 일시 renew 2020년 1월 10일 00:00 트리거를 기동한 시점인 2020년 1월 3일 00:00 에 7일간을 추가 extend 2020년 01월 14일 00:00 이미 존재하는 트리거의 유효 기간인 2020년 1월 7일 00:00 에 7일간을 추가 drop 2020년 01월 7일 00:00 이미 존재하는 트리거를 그대로 유지 반복 설정 절대 기간·상대 기간 모두, RepeatSetting 을 조합함으로써 “특정 요일이나 시간대에만 유효”, “며칠 주기로 유효·무효를 전환\"과 같은 반복 스케줄을 표현할 수 있습니다. 설정 가능한 반복 유형은 다음과 같습니다. repeatType 설명 always 기간 중 항상 유효 daily 매일 지정 시각~지정 시각 사이에만 유효( beginHour / endHour ) weekly 매주 지정 요일~지정 요일 사이에만 유효( beginDayOfWeek / endDayOfWeek ) monthly 매월 지정일~지정일 사이에만 유효( beginDayOfMonth / endDayOfMonth ) custom 임의의 주기 일수로 유효·무효를 반복( anchorTimestamp / activeDays / inactiveDays ) custom 유형은 “앵커 일시로부터 3일간 유효·4일간 무효\"와 같은 임의의 반복 주기를 표현할 수 있어, 변칙적인 상시 이벤트 설계에 유용합니다. 반복 스케줄 상태 취득 반복 설정을 가진 이벤트에 대해서는 현재 및 직전 반복 주기의 시작 일시·종료 일시를 RepeatSchedule 로 취득할 수 있습니다. 이를 통해 현재 주기 내에서 보상을 몇 번 수령했는지에 대한 집계나, 다음 주기까지의 남은 시간 표시가 가능합니다. 트랜잭션 액션 GS2-Schedule 에서는 다음의 트랜잭션 액션을 제공합니다. 검증 액션: 이벤트 개최 기간 중 검증, 이벤트 기간 외 검증, 트리거가 당겨져 있는지 검증, 트리거가 당겨져 있지 않은지 검증, 트리거를 당긴 후 경과 시간 검증 소비 액션: 트리거 삭제 입수 액션: 트리거 실행, 트리거 기간 연장 “이벤트 개최 기간 검증\"을 검증 액션으로 이용함으로써, 특정 이벤트 기간 중에만 구매 가능한 상품이나 기간 한정 교환소와 같은 제한을 트랜잭션 내에서 안전하게 마련할 수 있습니다. 또한 “트리거 실행\"을 입수 액션으로 이용함으로써, 퀘스트 클리어 시나 아이템 입수 시에 해당 플레이어만의 기간 한정 이벤트(상대 기간)를 시작시키는 등, 동적인 게임 경험 제어가 쉬워집니다. 마스터 데이터 관리 마스터 데이터를 등록함으로써 마이크로서비스에서 사용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. EventMaster : 이벤트 기간과 반복 설정 다음은 마스터 데이터의 JSON 예시입니다. { \"version\": \"2019-03-31\", \"events\": [ { \"name\": \"newyear-2026\", \"metadata\": \"신년 이벤트\", \"scheduleType\": \"absolute\", \"absoluteBegin\": 1735660800000, \"absoluteEnd\": 1735920000000, \"repeatType\": \"always\" }, { \"name\": \"tutorial-bonus\", \"metadata\": \"최초 플레이로부터 7일간 한정\", \"scheduleType\": \"relative\", \"relativeTriggerName\": \"tutorial-clear\", \"repeatType\": \"always\" } ] } 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나, GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성할 수도 있습니다. 구현 예제 트리거 당기기 트리거를 당기는 처리는 게임 엔진용 SDK 에서는 처리할 수 없습니다. GS2-Account 의 계정 생성 시 스크립트 내에서, 또는 GS2-Quest 의 클리어 보상으로 트리거를 당기는 방법 등으로 구현하십시오. 개최 중인 이벤트 목록 취득 현재 플레이어 기준으로 개최 중인 이벤트만 반환됩니다. 절대 기간으로 개최 중이거나, 상대 기간으로 트리거가 당겨져 유효 기간 내에 있는 이벤트가 해당합니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). EventsAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Events ( ); TArray Gs2 :: UE5 :: Schedule :: Model :: FEzEventPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . schedule . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . events ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 특정 이벤트의 정보 취득 특정 이벤트 이름을 지정하여, 해당 이벤트의 개최 기간이나 반복 설정을 취득합니다. isInSchedule 을 true 로 하면 현재 개최 중인 이벤트만, false 로 하면 마스터 데이터에 등록된 모든 이벤트를 참조할 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Event ( eventName : \"event-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Event ( \"event-0001\" // eventName ); const auto Item = Domain -\u003e Model (); var domain = ez . schedule . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . event ( \"event-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 트리거 목록 취득 플레이어에게 당겨져 있는 상대 기간 트리거의 목록과 유효 기간을 취득할 수 있습니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TriggersAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Triggers ( ); TArray Gs2 :: UE5 :: Schedule :: Model :: FEzTriggerPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . schedule . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . triggers ( ) var async_result = await iterator . load () if async_result . error != null : # 에러를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 반복 스케줄 상태 취득 반복 설정을 가진 이벤트의 현재 반복 주기 정보를 취득합니다. 반복 횟수나, 현재 주기의 시작 일시·종료 일시, 직전 주기의 종료 일시를 확인할 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Event ( eventName : \"event-0001\" ). RepeatSchedule ( ). ModelAsync (); const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Event ( \"event-0001\" // eventName ) -\u003e RepeatSchedule ( ); const auto Item = Domain -\u003e Model (); var domain = ez . schedule . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . event ( \"event-0001\" ) . repeat_schedule () var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var item = async_result . result 상세 레퍼런스 GS2-Schedule API 레퍼런스","lang":"ko","section":"microservices","summary":"이벤트 스케줄 기능\n","title":"GS2-Schedule","url":"/ko/microservices/schedule/"},{"content":"GS2-Script는 GS2의 각 마이크로서비스 이벤트에 맞춰 서버 사이드에서 커스텀 로직을 실행하기 위한, Lua 기반의 스크립트 실행 환경입니다. GS2의 각 마이크로서비스에는 특정 API 호출 전후에 스크립트를 실행하는 《스크립트 트리거》라는 구조가 마련되어 있습니다. 여기에 GS2-Script로 작성한 스크립트를 연결함으로써, 각 서비스의 표준 기능으로는 실현할 수 없는 게임 고유의 검증 로직이나 데이터 가공 처리, 외부 시스템 연동 등을 서버 측에서 동작시킬 수 있습니다. 클라이언트 측 로직은 변조의 위험이 있기 때문에, 부정 방지나 감사 관점에서 중요한 처리는 서버 측에서 동작시키고 싶은 경우가 많습니다. GS2-Script를 사용하면 GS2의 완전관리형 환경 안에서 그러한 서버 로직을 작성·운용할 수 있습니다. Lua 스크립트 스크립트 작성 언어로는 Lua 를 채택하고 있습니다. Lua는 게임 업계에서 채택 실적이 풍부한 경량 스크립트 언어로, 단순한 문법과 빠른 실행 성능을 갖추고 있습니다. 스크립트 등록은 문자열을 직접 업로드하는 방법과, GitHub 저장소와 연동하여 파일을 가져오는 방법 두 가지 모두를 이용할 수 있습니다. GitHub 연동을 이용하면, 스크립트의 변경 이력을 Git으로 관리하고 Pull Request 기반의 리뷰·운용이 가능해집니다. 스크립트 트리거 각 마이크로서비스의 네임스페이스 설정에서, 특정 API 처리 전후에 실행할 스크립트를 지정할 수 있습니다. 스크립트 실행 타이밍은 크게 두 가지로 나뉩니다. graph LR Request[\"API 요청\"] --\u003e Pre[\"전처리 스크립트 (동기 실행)\"] Pre --\u003e Process[\"GS2 표준 처리\"] Process --\u003e Done[\"완료 통지 스크립트 (비동기 실행)\"] Process --\u003e Response[\"API 응답\"] 전처리 스크립트 (동기 실행) API 처리 실행 직전에 동기적으로 실행되는 스크립트입니다. 스크립트 실행 결과에 따라 요청 파라미터를 변환하거나, 처리 자체를 중단(예외 발생)시킬 수 있습니다. 응답 시간에는 영향을 미치지만, 요청 내용을 서버 측에서 동적으로 판정·변경하고 싶은 경우에 유용합니다. 예: GS2-Account의 createAccountScript 의 triggerScriptId 를 설정하면, 계정 생성 API 실행 전에 스크립트가 실행되어, 특정 조건 하에서는 생성을 거부하는 등의 제어를 할 수 있습니다. 완료 통지 스크립트 (비동기 실행) API 처리 완료 후 비동기로 실행되는 스크립트입니다. 응답 시간에는 영향을 미치지 않으며, 로그 출력·통계 기록·외부 서비스 연동 등을 안전하게 수행할 수 있습니다. 예: GS2-Account의 createAccountScript 의 doneTriggerScriptId 를 설정하면, 계정 생성이 성공한 후에 스크립트가 실행되어, 외부 분석 기반에 신규 사용자 생성 이벤트를 전송하는 등의 용도로 이용할 수 있습니다. 스크립트 실행 모델 스크립트 실행에는 표준으로 시간 제한이 설정되어 있어, 지나치게 긴 스크립트는 오류가 됩니다. 스크립트 실행 시간은 응답에 포함되며, 실행 비용으로 집계됩니다. 스크립트 내에서 발생한 예외는 API 호출 전체의 예외로 전파되며, 전처리 스크립트에서 예외가 발생한 경우 GS2 표준 처리는 실행되지 않습니다. 스크립트에서의 GS2 API 접근 스크립트 내에서는 GS2가 제공하는 API 그룹을 그대로 호출할 수 있습니다. GS2-Inventory의 아이템 수를 확인한 후 GS2-Account의 처리를 수행하거나, GS2-Stamina의 잔량을 보고 GS2-Mission의 달성 판정을 하는 등, 여러 마이크로서비스를 넘나드는 로직을 스크립트 내에서 구성할 수 있습니다. 스크립트 실행 컨텍스트에는 API를 호출한 사용자의 액세스 토큰 등도 전달되므로, 인증된 플레이어의 컨텍스트에서 서버 API를 호출할 수 있습니다. Amazon EventBridge 연동 완료 통지의 전송 대상으로, GS2-Script의 스크립트 대신 Amazon EventBridge를 지정할 수도 있습니다. EventBridge에 이벤트를 전송함으로써, AWS Lambda 등의 AWS 서비스나 SaaS의 이벤트 기반 워크플로우에 GS2의 이벤트를 연동할 수 있어, 게임 외부 시스템과의 통합이 용이해집니다. GS2 내에서 완결되는 처리는 GS2-Script로, 외부 시스템과의 광범위한 연동은 EventBridge로 구분해서 사용함으로써, 단순하면서도 확장 가능한 운용이 가능합니다. 마스터 데이터 관리 GS2-Script에는 마스터 데이터라는 개념이 없으며, 스크립트 자체가 구성 데이터로 관리됩니다. 스크립트 등록·갱신은 관리 콘솔에서 직접 수행하는 것 외에도, GS2-Deploy의 템플릿( Type: GS2::Script::Script )으로 작성하여 CI에서 자동으로 반영하는 워크플로우도 가능합니다. 트랜잭션 액션 GS2-Script에서는 트랜잭션 액션을 제공하지 않습니다. 스크립트 내에서 GS2 API를 호출함으로써, 간접적으로 각 마이크로서비스의 트랜잭션을 발생시키는 것은 가능합니다. 구현 예제 GS2-Script는 관리 API 중심의 마이크로서비스입니다. 게임 엔진용 SDK(Unity / Unreal Engine / Godot)에는 전용 Domain 클래스가 제공되지 않습니다. 스크립트의 등록·갱신·실행은 서버 측 및 네임스페이스 구성에 관련된 조작이므로, 게임 클라이언트에서 직접 호출하지 말고 다음 중 하나의 수단으로 조작할 것을 권장합니다. 관리 콘솔 GS2 CLI 각 언어용 일반 SDK(C# / Go / Python / TypeScript / PHP / Java) GS2-Deploy를 이용한 템플릿 관리 각 SDK의 상세 내용은 해당 레퍼런스 페이지를 참조해 주세요. 마이크로서비스에 스크립트 연결 스크립트를 각 마이크로서비스의 이벤트 트리거에 연결하는 경우에는, 대상 서비스의 네임스페이스 설정에서 참조합니다. 실제 운용에서는 관리 콘솔에서 직접 설정하거나, GS2-Deploy의 템플릿에 작성함으로써, 스크립트 연결까지 포함하여 CI/CD로 관리할 수 있습니다. 다음은 GS2-Account의 CreateAccountScript 에 “계정 생성 전”( TriggerScriptId )과 “계정 생성 완료 통지”( DoneTriggerScriptId ) 스크립트를 설정하는 예입니다. GS2TemplateFormatVersion: \"2019-05-01\" Resources: Script: Type: GS2::Script::Script Properties: NamespaceName: namespace-0001 Name: createAccount Script: | local result = { permit = true } return result AccountNamespace: Type: GS2::Account::Namespace Properties: Name: account-namespace CreateAccountScript: TriggerScriptId: !GetAttr Script.Item.ScriptId DoneTriggerTargetType: gs2_script DoneTriggerScriptId: !GetAttr Script.Item.ScriptId DependsOn: - Script 스크립트는 사전에 등록해 두고, 네임스페이스 측에서는 GRN으로 참조합니다. DependsOn 으로 리소스 간의 의존 관계를 선언함으로써, 스크립트를 먼저 생성한 후 그것을 참조하는 네임스페이스를 생성하는 순서를 보장할 수 있습니다. 상세 레퍼런스 GS2-Script API 레퍼런스","lang":"ko","section":"microservices","summary":"Lua 스크립트 실행 환경\n","title":"GS2-Script","url":"/ko/microservices/script/"},{"content":"GS2-Script의 확장 스크립트(Lua 언어)에서 사용할 수 있는 확장 메서드입니다. GS2-Script 샌드박스 내에서 사용할 수 있는 Lua 표준 라이브러리에는 제한이 있습니다. load / require / dofile / pcall 과 같이 외부 리소스를 불러오거나 오류를 내부에서 처리하는 함수는 사용할 수 없습니다. os 라이브러리도 안전을 위해 os.time() 만 이용할 수 있습니다. table / string / math 라이브러리는 대체로 그대로 이용할 수 있습니다. util.table_to_json Lua의 테이블 타입(배열)을 JSON 형식의 문자열로 변환합니다. Request 인자명 타입 설명 table table Lua 테이블 Result 멤버명 타입 설명 isError bool 오류 여부 statusCode int 상태 코드 errorMessage string 오류 메시지 result string 변환 결과 JSON 문자열 Sample Code result = util.table_to_json({a=\"a\", b=1, c=false}) if result.isError then fail(result['statusCode'], result['errorMessage']) end json_str = result[\"result\"] Output {\"a\":\"a\",\"b\":1,\"c\":false} util.json_to_table JSON 형식의 문자열을 Lua의 테이블 타입(배열)으로 변환합니다. Request 인자명 타입 설명 jsonText string JSON 형식의 문자열 disableNumberStringToNumber bool JSON 내에 문자열 타입으로 숫자가 저장되어 있을 때 숫자 타입으로 변환하지 않음(default: false) Result 멤버명 타입 설명 isError bool 오류 여부 statusCode int 상태 코드 errorMessage string 오류 메시지 result table 변환 결과 Lua 테이블 Sample Code result = util.json_to_table(\"{\\\"a\\\": \\\"a\\\", \\\"b\\\": 1, \\\"c\\\": false}\") if result.isError then fail(result['statusCode'], result['errorMessage']) end json_table = result[\"result\"] util.split 문자열을 분할합니다. Request 인자명 타입 설명 value string 원본 문자열 sep string 구분자, 구분 문자열 Result 멤버명 타입 설명 isError bool 오류 여부 statusCode int 상태 코드 errorMessage string 오류 메시지 result table 분할된 문자열의 Lua 테이블 Sample Code result = util.split(\"a,b,c\", \",\") if result.isError then fail(result['statusCode'], result['errorMessage']) end split_table = result[\"result\"] print(split_table[1]) print(split_table[2]) print(split_table[3]) Output a b c http.get HTTP GET 요청을 발행합니다. Request 인자명 타입 설명 url string 접속 대상 URL Result 멤버명 타입 설명 isError bool 오류 여부 statusCode int 상태 코드 errorMessage string 오류 메시지 result string HTTP 응답 본문 Sample Code result = http.get(\"https://example.com\") if result.isError then fail(result['statusCode'], result['errorMessage']) end get_result = result[\"result\"] http.post HTTP POST 요청을 발행합니다. Request 인자명 타입 설명 url string 접속 대상 URL contentType string HTTP 헤더의 Content-Type body string HTTP 요청 메시지의 본문 Result 멤버명 타입 설명 isError bool 오류 여부 statusCode int 상태 코드 errorMessage string 오류 메시지 result string HTTP 응답 본문 Sample Code result = http.post(\"https://example.com\", \"application/json\", \"{\\\"a\\\": 1}\") if result.isError then fail(result['statusCode'], result['errorMessage']) end post_result = result[\"result\"] util.random 0 ~ 1 범위의 부동소수점 난수를 생성합니다 Request 인자명 타입 설명 Result 멤버명 타입 설명 isError bool 오류 여부 statusCode int 상태 코드 errorMessage string 오류 메시지 result float 생성한 난수 Sample Code result = util.random() if result.isError then fail(result['statusCode'], result['errorMessage']) end random_value = result[\"result\"] util.uuid UUIDv4 기반 문자열을 생성합니다 Request 인자명 타입 설명 Result 멤버명 타입 설명 isError bool 오류 여부 statusCode int 상태 코드 errorMessage string 오류 메시지 result float 생성한 UUID Sample Code result = util.uuid() if result.isError then fail(result['statusCode'], result['errorMessage']) end random_value = result[\"result\"] util.shared_random 추첨 기능 등에서 《동일한 난수열을 재현하고 싶은》 경우를 위해, 시드와 일련번호를 기반으로 한 결정론적 난수를 생성합니다. 스탬프 시트의 자동 재시도로 인해 재실행되는 경우에도 동일한 난수열을 얻을 수 있도록 설계되어 있습니다. category 별로 독립된 일련번호가 관리되므로, 동일 스크립트 내에서 여러 독립된 난수열이 필요한 경우 구분하여 사용할 수 있습니다. Request 인자명 타입 설명 category int 난수열을 구분하기 위한 카테고리 번호 Result 멤버명 타입 설명 isError bool 오류 여부 statusCode int 상태 코드 errorMessage string 오류 메시지 result float 생성한 난수 Sample Code result = util.shared_random(1) if result.isError then fail(result['statusCode'], result['errorMessage']) end shared_value = result[\"result\"] fail 스크립트 실행을 실패로 중단하고, 호출한 API로 오류를 반환합니다. 사전 스크립트/사후 스크립트에서 검증(validation)을 수행하여 조건을 만족하지 않을 경우 오류를 반환하고 싶을 때 사용합니다. Request 인자명 타입 설명 errorCode string 반환할 오류 코드 ( BadRequest / Unauthorized / NotFound / Conflict / ServiceUnavailable / BadGateway 등. HTTP 상태 코드( 400 / 401 등)도 지정 가능) message string 오류 메시지 errorCode 에 해당하지 않는 값을 지정한 경우 InternalServerError 로 처리됩니다. Sample if not_allowed then fail(\"BadRequest\", \"validation.error.notAllowed\") end print 로그에 임의의 문자열을 출력합니다. GS2-Log를 활성화한 경우, 출력한 내용을 액세스 로그에서 확인할 수 있습니다. 스크립트 내 디버깅이나 실행 경로 기록에 이용하십시오. Request 인자명 타입 설명 message string 출력할 메시지 Sample print(\"invoked with userId=\" .. args.userId) os.time 스크립트 실행 시점의 서버 시각을 Unix 시간(초)으로 취득합니다. GS2-Distributor의 시각 오프셋 기능을 이용하고 있는 경우, 해당 오프셋이 반영된 시각이 반환됩니다. Sample now = os.time() gs2 GS2-Script의 Lua 스크립트 내에서 GS2의 각 마이크로서비스 API를 직접 호출하기 위한 클라이언트입니다. 호출할 서비스명을 인자로 받고, 이어서 API명과 인자를 지정합니다. 호출한 API가 트랜잭션을 발행하는 경우, 그 발행 내용은 스크립트를 실행한 API의 트랜잭션과 함께 반환됩니다. Sample GS2-Inventory의 아이템을 취득하는 예: result = gs2(\"inventory\").get_item_set_by_user_id({ namespaceName = \"namespace-0001\", userId = args.userId, inventoryName = \"inventory-0001\", itemName = \"item-0001\", }) if result.isError then fail(result['statusCode'], result['errorMessage']) end 이용 가능한 서비스명·API명은 각 마이크로서비스의 API 레퍼런스를 참조하십시오.","lang":"ko","section":"articles","summary":"GS2-Script에서 실행하는 Lua 스크립트 내에서 사용할 수 있는 유틸리티 메서드에 대한 설명\n","title":"GS2-Script 유틸리티 메서드","url":"/ko/articles/script/"},{"content":"플레이어 실력에 따라 플레이어를 분류하여, 더 비슷한 실력의 플레이어와의 매치메이킹을 실현하기 위한 기능입니다. 레이트 값에 의한 매치메이킹 기능은 GS2-Matchmaking에 갖추어져 있지만, 최근 늘어나고 있는 현실 시간으로 몇 주에서 몇 달 정도의 시즌을 통해 플레이어를 랭크 매기는 방식에는 대응하지 못했습니다. 이 마이크로서비스는 정해진 기간을 시즌으로 간주하고, 시즌 기간 동안 더 높은 티어를 목표로 대전을 반복하는 게임 사이클을 실현하기 위해 이용할 수 있습니다. 그렇기 때문에 이 기능에서 강함을 나타내는 지표는 레이트 값이 아니라 어느 티어에 속해 있는지로 표현됩니다. graph TD Match[\"GS2-Matchmaking 매치메이킹 성립\"] --\u003e Session[\"MatchSession 생성\"] Session --\u003e Ballot[\"각 플레이어가 투표용지를 획득 (Ballot / SignedBallot)\"] Ballot --\u003e GamePlay[\"게임 플레이\"] GamePlay --\u003e Vote[\"Vote / VoteMultiple 순위를 투표\"] Vote --\u003e Aggregate{\"다수결로 결과 확정\"} Aggregate -- 확정 --\u003e Calc[\"포인트 변동량을 계산 (TierModel 기반)\"] Calc --\u003e Experience[\"GS2-Experience에 포인트 / 랭크를 반영\"] Aggregate -- 분단 --\u003e Skip[\"집계하지 않고 종료\"] 티어 티어는 일반적으로 브론즈부터 시작하여, 승리를 거듭할수록 실버, 골드, 플래티넘… 으로 올라가는 사양이 일반적입니다. 티어를 올리려면 같은 티어 내의 플레이어와 대전하여, 순위에 따라 변동되는 획득 포인트가 임계값을 넘으면 다음 티어로 올라갈 수 있습니다. 승부에서 패배하면 포인트가 줄어들 수 있으며, 포인트가 임계값을 밑돌면 이전 티어로 내려갈 수 있습니다. 티어 모델 설정 항목 각 티어는 TierModel 로 정의하며, 다음 파라미터로 포인트의 증감이나 승급 시의 동작을 제어할 수 있습니다. 항목 설명 metadata 티어 이름 등 자유 기재(브론즈/실버/골드 등) entryFee 게임 참가 시 소비하는 포인트. 연승이 아니면 승급할 수 없는 난이도 설계에 사용 minimumChangePoint 최하위를 했을 때의 포인트 감산량 maximumChangePoint 최상위를 했을 때의 포인트 가산량 raiseRankBonus 랭크업했을 때 부여하는 보너스 포인트. 직후에 강등되지 않도록 하는 채터링 방지에 유효 티어를 넘나드는 대전 레이팅전에서 매치메이킹 규칙은 원칙적으로 같은 티어로 구성해야 합니다. 하지만 플레이어 수 부족 등의 이유로 앞뒤 티어의 플레이어를 포함한 상태로 매치메이킹을 하는 경우에도, 각 플레이어가 속한 티어의 최소·최대 변동량과 순위를 바탕으로 포인트 변동량을 결정합니다. 낮은 티어의 플레이어가 높은 티어의 플레이어를 이겼을 때 보너스 포인트를 가산하는 구조나 그 반대와 같은 구조는 없습니다. 원래 다른 강함의 플레이어끼리 대전시킨 후 포인트 변동량에 조작을 가하는 것보다, 각 티어에 최소한 게임플레이가 성립할 정도의 플레이어가 머무르도록 티어 임계값을 설계하는 것을 권장합니다. 포인트 변동 범위 각 티어마다 최하위일 때의 포인트 감산량, 최상위일 때의 포인트 가산량을 설정할 수 있습니다. 중간 순위를 얻은 경우에는 보고된 순위의 패턴 수로 균등하게 나누어 포인트 가감산량을 결정합니다. 참가료 티어에 따라 게임에 참가할 때 포인트를 소비해야 하도록 설정할 수 있습니다. 이를 통해 연승도 티어를 올리기 위해 필요한 조건으로 표현할 수 있습니다. 참가료 지불은 게임 결과를 서버에 보고하기 위한 투표용지를 획득할 때 지불합니다. 랭크업 보너스 포인트를 가산하여 랭크업했을 때 보너스 포인트를 가산할 수 있습니다. 이를 통해 승급 직후 바로 강등되는 채터링을 방지할 수 있습니다. 사용자 데이터 관리 GS2-SeasonRating은 포인트와 랭크를 관리하지 않습니다. 실제 사용자 데이터 관리는 GS2-Experience를 사용합니다. 시즌의 마스터 데이터로서 시즌의 포인트를 관리하는 GS2-Experience의 경험치 모델을 지정하고, 프로퍼티ID에 시즌 모델의 ID를 지정하여, 경험치에 포인트를, 랭크에 어느 티어에 속해 있는지를 관리합니다. 즉, 포인트의 증감량은 GS2-SeasonRating의 마스터 데이터로 관리하지만, 포인트에 따라 랭크를 결정하는 임계값 관리나 플레이어가 어느 티어에 속해 있는지와 같은 사용자 데이터는 GS2-Experience가 관리합니다. 이를 통해 시즌 종료 후 특정 랭크라면 아이템을 받을 수 있는 것과 같은 교환 처리에 GS2-Experience가 제공하는 랭크 값 검증 기능과 같은 고급 기능을 이용할 수 있습니다. graph LR SeasonModel[\"SeasonModel (GS2-SeasonRating)\"] -- \"experienceModelId\" --\u003e ExpModel[\"ExperienceModel (GS2-Experience)\"] ExpModel -- \"랭크 임계값\" --\u003e Status[\"플레이어의 랭크 상태 (GS2-Experience에 저장)\"] Vote[\"투표 결과 확정\"] -- \"포인트 증감\" --\u003e Status 매치 세션 레이팅전을 진행하려면 먼저 GS2-SeasonRating에 매치 세션 리소스를 생성해야 합니다. GS2-Matchmaking에는 매치메이킹이 성립되었을 때, 매치메이킹이 성립된 게더링 이름으로 매치 세션을 생성하는 연계 기능이 있습니다. 특별한 이유가 없다면 이 방법으로 매치 세션을 생성하시기 바랍니다. 매치 세션의 유효 기간 매치 세션에는 유효 기간을 초 단위로, 최대 24시간의 범위에서 지정할 수 있습니다. 이 기간 내에 결과 투표를 진행해야 하며, 첫 투표로부터 5분이 경과했는데도 모든 투표가 이루어지지 않으면 그 시점에서 결과 집계가 이루어집니다. 결과 투표 매치메이킹이 완료되면 각 플레이어는 매치 세션에서 투표용지를 획득합니다. 투표용지를 사용하여 결과 투표를 진행합니다. 투표 내용에는 대전에 참가한 플레이어의 사용자ID와 순위 목록을 전달합니다. 투표용지 서명 Ballot 을 획득하면 SignedBallot 으로서 GS2가 서명한 투표용지가 발급됩니다. 서명은 keyId 에 지정한 GS2-Key로 이루어지며, 투표 시 서버 측에서 서명 검증이 이루어지므로 투표 내용의 변조를 방지할 수 있습니다. 1경기 복수 투표(VoteMultiple) 싱글 플레이어 시점의 게임(CPU와의 대전 결과를 투표하는 것을 상정)처럼 참가자 전원의 투표용지를 한 명의 플레이어가 한꺼번에 획득하여 투표해야 하는 경우에는 VoteMultiple 을 사용합니다. 복수의 SignedBallot 을 일괄로 전송할 수 있습니다. 투표 결과의 분단 서버가 접수한 투표의 다수결을 취하려고 할 때, 결과가 동수여서 최종 결과를 확정할 수 없는 경우에는 레이트 계산이 이루어지지 않습니다. 그렇기 때문에 1대1 게임에서는 올바른 레이트 값을 구하기가 어렵습니다. 이 문제를 해결하려면 뒤에서 대전에 직접 관여하지 않는 세 번째 플레이어를 매치메이킹하여, 그 플레이어가 제3자 시점에서 투표하도록 하는 등의 방법이 필요합니다. 스크립트 트리거 GS2-SeasonRating은 스크립트 트리거를 제공하지 않습니다. 트랜잭션 액션 GS2-SeasonRating은 트랜잭션 액션을 제공하지 않습니다. 포인트와 랭크의 증감은 내부적으로 GS2-Experience의 트랜잭션 액션을 통해 반영됩니다. 시즌 종료 후 특정 랭크 이상의 플레이어에게 보상을 배포하는 경우에는 GS2-Exchange의 교환 처리에 GS2-Experience의 VerifyRankAction 을 조합하는 등의 구현이 일반적입니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. SeasonModel : 시즌에 포함되는 티어와, 연결되는 GS2-Experience의 경험치 모델 TierModel : 각 티어별 포인트 변동량·참가료·랭크업 보너스 마스터 데이터 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용하여 CI에서 등록하는 등의 워크플로우를 구성할 수 있습니다. 다음은 마스터 데이터의 JSON 예시입니다. { \"version\": \"2023-04-05\", \"seasonModels\": [ { \"name\": \"season-0001\", \"metadata\": \"시즌 1\", \"experienceModelId\": \"grn:gs2:{region}:{ownerId}:experience:experience-0001:model:season\", \"tiers\": [ { \"metadata\": \"브론즈\", \"raiseRankBonus\": 100, \"entryFee\": 0, \"minimumChangePoint\": 10, \"maximumChangePoint\": 30 }, { \"metadata\": \"실버\", \"raiseRankBonus\": 150, \"entryFee\": 10, \"minimumChangePoint\": 20, \"maximumChangePoint\": 40 } ] } ] } 구현 예제 현재 포인트나 랭크 획득 GS2-Experience의 API를 이용하여 상태를 취득해 주세요. “NamespaceName”, “ExperienceName\"에는 시즌 마스터 데이터에 지정한 값을, “PropertyId\"에는 시즌 모델 ID를 지정해 주세요. 매치 세션 생성 매치 세션 생성은 게임 엔진용 SDK에서는 처리할 수 없습니다. GS2-Matchmaking의 연계 기능을 사용해 주세요. GS2-Matchmaking의 네임스페이스 설정에서 매치메이킹 성립 시 스크립트에 GS2-SeasonRating의 세션 생성을 호출하는 스크립트를 설정함으로써, 매치메이킹 성립과 동시에 대응하는 세션을 자동 생성할 수 있습니다. 투표용지 획득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( seasonName : \"rating-0001\" , sessionName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ). ModelAsync (); const auto Future = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Ballot ( \"rating-0001\" , // seasonName \"gathering-0001\" , // sessionName 4 , // numberOfPlayer \"key-0001\" // keyId ) -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ballot ( \"season-0001\" , \"gathering-0001\" , 4 , \"key-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 투표 실행 Game Engine: Unity Unreal Engine Godot var result = await gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). VoteAsync ( ballotBody : \"ballotBody\" , ballotSignature : \"ballotSignature\" , gameResults : new List Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); const auto Future = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Vote ( \"ballotBody\" , // ballotBody \"ballotSignature\" , // ballotSignature [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 1 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0001\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0002\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0003\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 3 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0004\" )) ); return v ; }(), // gameResults \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) var async_result = await domain . vote ( \"ballotBody...\" , # ballot_body \"ballotSignature...\" , # ballot_signature [ Gs2SeasonRatingEzGameResult . new () . with_rank ( 1 ) . with_user_id ( \"user-0001\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0002\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0003\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 3 ) . with_user_id ( \"user-0004\" ), ], # game_results \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 복수의 투표용지를 한꺼번에 투표 CPU전 결과나, 참가자 전원의 투표용지를 한 명의 플레이어가 대표하여 투표하는 경우에 이용합니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). VoteMultipleAsync ( signedBallots : new [] { signedBallot1 , signedBallot2 , }, gameResults : new [] { new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, }, keyId : \"key-0001\" ); const auto Future = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e VoteMultiple ( SignedBallots , GameResults , \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) var async_result = await domain . vote_multiple ( [ Gs2SeasonRatingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2SeasonRatingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2SeasonRatingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2SeasonRatingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), ], # signed_ballots [ Gs2SeasonRatingEzGameResult . new () . with_rank ( 1 ) . with_user_id ( \"user-0001\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0002\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0003\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 3 ) . with_user_id ( \"user-0004\" ), ], # game_results \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-SeasonRating API 레퍼런스","lang":"ko","section":"microservices","summary":"시즌 레이팅 기능","title":"GS2-SeasonRating","url":"/ko/microservices/season_rating/"},{"content":"게임 외부의 물품 판매나 오프라인 이벤트, SNS 캠페인, 콜라보 캠페인 등을 통해 게임 내 아이템을 배포하고 싶은 경우에 사용할 수 있습니다. 종이 패키지나 QR 코드에 인쇄한 코드, 이메일/SNS로 배포하는 문자열 모두 동일한 구조로 다룰 수 있습니다. 단, 이 기능은 일부 플랫폼 사업자가 구현을 허용하지 않는 경우가 있으므로, 채택할 때는 플랫폼 사업자의 가이드라인을 확인하도록 하십시오. 시리얼 코드의 종류 시리얼 코드에는 다음 두 가지 종류가 있습니다. 시리얼 키: 1회 사용하면 재사용할 수 없는 코드 캠페인 코드: 하나의 코드를 여러 사람이 공유할 수 있는 코드 graph TD SerialCode[\"시리얼 코드\"] SerialCode --\u003e SerialKey[\"시리얼 키 1인 1회 한정\"] SerialCode --\u003e CampaignCode[\"캠페인 코드 여러 명이 공용\"] SerialKey --\u003e SerialKeyUse[\"RPCLP-FP7N-NCDMJ-FLVA-IRI4\"] CampaignCode --\u003e CampaignCodeUse[\"NEWYEAR2026\"] 시리얼 키 1회 사용하면 두 번 다시 사용할 수 없게 되는 코드 입니다. 시리얼 키는 “RPCLP-FP7N-NCDMJ-FLVA-IRI4\"와 같은 형식으로 발행되며, 데이터 길이를 변경할 수 없습니다. 시리얼 키 내부에는 캠페인 종류에 대한 정보도 포함되어 있으며, 시리얼 키를 사용할 때는 네임스페이스를 지정하는 것만으로 사용할 수 있습니다. 캠페인 코드 “할로윈2025”, “SUMMER\"와 같이 사람이 기억하기 쉬운 문자열을, 운영 측에서 임의로 설정할 수 있는 코드 입니다. 하나의 코드를 다수의 플레이어가 공유하여 교환에 사용하는 것을 상정하고 있습니다. 캠페인 코드는 캠페인에 연결하여 발행하는 시리얼 키와는 달리, 캠페인 이름 자체가 코드로서 교환 가능해집니다. 캠페인 “시리얼 키\"도 “캠페인 코드\"도 모두 캠페인에 속합니다. 캠페인에는 다음을 설정합니다. name : 캠페인 이름(캠페인 코드로도 사용됨) metadata : 임의의 메타데이터 enableCampaignCode : 캠페인 코드(캠페인 이름 자체를 사용한 교환)를 활성화할지 여부 캠페인은 GS2-Schedule 의 이벤트와 연결하여 유효 기간을 설정할 수 있습니다. 유효 기간의 검증은 트랜잭션 액션을 조합하여 실현할 수 있습니다. 시리얼 키 발행 대상 캠페인과 발행 수량을 지정하여 시리얼 키 발행 처리를 실행하면 시리얼 키가 발행됩니다. 발행 처리는 비동기 작업으로 실행되며, IssueJob 을 통해 진행 상황을 확인할 수 있습니다. 발행된 시리얼 키 목록은 CSV 형식으로 다운로드할 수 있습니다. 물품 패키지에 인쇄하는 등 대량으로 발행하는 용도로는 수십만 건 단위의 발행도 가능합니다. 시리얼 키의 상태 시리얼 키는 다음과 같은 상태를 가집니다. 상태 설명 ACTIVE 플레이어가 사용 가능한 상태 USED 이미 사용됨(재사용 불가) INACTIVE 운영에 의해 무효화된 상태 실제로 플레이어가 사용할 수 있는 상태가 ACTIVE 이며, 사용하면 USED 가 됩니다. 운영 측에서 시리얼 키를 무효화하면 INACTIVE 가 됩니다. 트랜잭션 액션 GS2-SerialKey 에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 검증 액션: 시리얼 코드의 유효성 검증, 시리얼 코드가 지정된 캠페인에 속하는지 검증 소비 액션: 시리얼 코드의 사용 완료 처리 획득 액션: 시리얼 코드의 미사용화(취소용), 시리얼 코드 발행 “시리얼 코드 발행\"을 획득 액션으로 활용하면, 게임 내 특정 미션을 달성했을 때나 상위 입상 보상으로서 플레이어별 고유한 시리얼 코드(타인에게 양도 가능)를 자동으로 발행하여 지급하는 처리를, 트랜잭션 내에서 안전하게 완결시킬 수 있습니다. 이를 통해 게임 외부에서의 팬 교류나 플레이어 간 선물 요소를 촉진하는 시책을 손쉽게 구현할 수 있습니다. 코드에 의한 교환 횟수 제한 캠페인 코드에 의한 교환은 아무 조치도 하지 않으면 몇 번이든 교환이 가능합니다. 보통은 “한 번 교환을 실행하면 두 번 다시 교환할 수 없게 한다\"거나 “일정 기간 교환을 할 수 없게 하고 싶다\"와 같은 요건이 있을 것이며, 캠페인 코드든 시리얼 키든 “동일 캠페인에서 교환 가능한 총 횟수에 제한을 두고 싶다\"는 등 다양한 요건이 있을 것입니다. GS2-SerialKey 는 그러한 제한 기능을 가지고 있지 않으며, 순수하게 입력된 시리얼 키가 유효한지만 판단하는 기능을 제공합니다. 그렇기 때문에 GS2-SerialKey 자체는 교환을 실행했을 때 얻을 수 있는 보상도 가지고 있지 않습니다. 시리얼 키를 사용하는 경우의 구현 예제를 아래에 나타냅니다. actor Player participant \"GS2-Exchange#Rate\" participant \"GS2-SerialKey#SerialKey\" participant \"GS2-Limit#Counter\" participant \"GS2-Inventory#Item\" Player -\u003e \"GS2-Exchange#Rate\" : Exchange \"GS2-Exchange#Rate\" -[#f00]-\u003e \"GS2-SerialKey#SerialKey\" : Use \"GS2-Exchange#Rate\" -\u003e \"GS2-Limit#Counter\" : Increase \"GS2-Exchange#Rate\" -\u003e \"GS2-Inventory#Item\" : Acquire \"GS2-Exchange#Rate\" -\u003e Player GS2-Exchange 에 의해 시리얼 키를 사용했을 때 얻을 수 있는 보상이 정의되고, GS2-Limit 에 의해 횟수 제한이 적용되어 몇 번이든 아이템을 얻을 수 없게 됩니다. 보상을 구성할 때는 GS2-Schedule 에 의한 캠페인 기간 체크나 GS2-Inventory 에서의 경품 지급 등, 여러 마이크로서비스를 트랜잭션으로 연결하여 복잡한 요건을 실현할 수 있습니다. 마스터 데이터 관리 마스터 데이터를 등록하면 마이크로서비스에서 사용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. CampaignModel : 캠페인(시리얼 키/캠페인 코드의 모집단) 정의 다음은 마스터 데이터의 JSON 예입니다. { \"version\": \"2019-08-19\", \"campaigns\": [ { \"name\": \"newyear-2026\", \"metadata\": \"새해 캠페인\", \"enableCampaignCode\": true }, { \"name\": \"package-promo\", \"metadata\": \"패키지 동봉용 (캠페인 코드 비활성화)\", \"enableCampaignCode\": false } ] } 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용해 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 구현 예제 시리얼 키를 사용 이 API로 직접 시리얼 키를 사용하는 처리를 하는 것은 권장하지 않습니다. GS2-Exchange 와 같은 서비스를 통해 시리얼 키 사용을 수행함으로써, 시리얼 키의 사용과 보상 지급·횟수 제한 체크를 하나의 트랜잭션으로 처리할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SerialKey ( code : \"code-0001\" ). UseSerialCodeAsync ( ); var item = await result . ModelAsync (); const auto Future = Gs2 -\u003e SerialKey -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e SerialKey ( \"code-0001\" // code ) -\u003e UseSerialCode ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . serial_key . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . serial_key ( \"code-0001\" ) var async_result = await domain . use_serial_code () if async_result . error != null : push_error ( str ( async_result . error )) return var item = async_result . result 시리얼 키의 정보 취득 시리얼 키의 코드를 지정하여, 해당 코드가 속한 캠페인이나 현재 상태( ACTIVE / USED / INACTIVE )를 확인할 수 있습니다. 교환 화면에서 “입력한 코드는 이미 사용되었습니다\"와 같은 오류 메시지를 표시하는 용도로도 사용할 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SerialKey ( code : \"code-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e SerialKey -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e SerialKey ( \"code-0001\" // code ); const auto Item = Domain -\u003e Model (); var domain = ez . serial_key . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . serial_key ( \"code-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 캠페인 정보 취득 특정 캠페인의 정의(메타데이터, 캠페인 코드의 활성화·비활성화 등)를 취득합니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). CampaignModel ( campaignModelName : \"newyear-2026\" ). ModelAsync (); const auto Domain = Gs2 -\u003e SerialKey -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CampaignModel ( \"newyear-2026\" // campaignModelName ); const auto Item = Domain -\u003e Model (); var domain = ez . serial_key . namespace_ ( \"namespace-0001\" ) . campaign_model ( \"campaign-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 상세 레퍼런스 GS2-SerialKey API 레퍼런스","lang":"ko","section":"microservices","summary":"시리얼 코드 기능\n","title":"GS2-SerialKey","url":"/ko/microservices/serial_key/"},{"content":"게임 내에서 상품을 판매할 때 사용합니다. GS2-Exchange와의 차이점은 진열대가 존재한다는 점입니다. 진열대에는 DisplayItem을 진열할 수 있으며, DisplayItem을 구매하기 위해 필요한 대가와 상품을 구매했을 때 얻을 수 있는 보상을 설정할 수 있습니다. 진열대에는 2종류가 있으며, 고정된 DisplayItem이 진열되는 《스탠다드 진열대》와, 일정 간격으로 진열 내용이 랜덤으로 추첨되는 《랜덤 진열대》가 있습니다. graph TD Master[\"마스터 데이터\"] --\u003e Showcase[\"스탠다드 진열대 (ShowcaseModel)\"] Master --\u003e RandomShowcase[\"랜덤 진열대 (RandomShowcaseModel)\"] Showcase --\u003e DisplayItem[\"DisplayItem (SalesItem / SalesItemGroup)\"] RandomShowcase --\u003e RandomDisplayItem[\"RandomDisplayItem (stock / weight)\"] Player[\"플레이어\"] -- Buy --\u003e DisplayItem Player -- RandomShowcaseBuy --\u003e RandomDisplayItem DisplayItem -- \"consumeActions / acquireActions\" --\u003e Transaction[\"GS2-Distributor 트랜잭션 실행\"] RandomDisplayItem -- \"consumeActions / acquireActions\" --\u003e Transaction 스탠다드 진열대 스탠다드 진열대는 지정한 DisplayItem이 모두 진열됩니다. DisplayItem에는 2종류가 있으며 《SalesItem》과 《SalesItemGroup》이 있습니다. SalesItem SalesItem에는 구매하기 위해 필요한 대가와, 구매했을 때 얻을 수 있는 보상을 설정할 수 있습니다. SalesItem은 다음 3종류의 액션으로 동작을 표현합니다. 항목 설명 verifyActions 구매 조건 검증 액션. 지정한 마이크로서비스의 상태를 검증하여 조건을 충족하지 않으면 구매를 거부합니다. consumeActions 구매 시 소비하는 액션. GS2-Money2의 통화나 GS2-Inventory의 아이템 등을 대가로 소비합니다. acquireActions 구매 시 입수하는 액션. GS2-Inventory·GS2-Experience·GS2-Lottery 등, 임의의 마이크로서비스에 보상으로 배포합니다. SalesItemGroup SalesItemGroup은 구매 횟수에 따라 판매되는 SalesItem이 변화하는 구조를 구현합니다. SalesItemGroup에는 여러 SalesItem을 포함시킬 수 있으며, 목록의 마지막 상품 이외에는 GS2-Limit의 카운터 상승을 대가로 설정해야 합니다. SalesItemGroup을 진열대에 진열할 때는 내부의 SalesItem이 구매 가능한지를 판정하여, 가장 먼저 구매 가능하다고 판정된 상품이 진열됩니다. 이 기능을 이용하면, 첫 구매에 한해 반값으로 상품을 판매하거나, 구매할 때마다 가격이 올라가는 상품을 구현하거나, 10번째 구매에는 덤을 붙이는 등의 상품을 구현할 수 있습니다. graph LR Buy[\"구매 요청\"] --\u003e Check1{\"SalesItem 1 (첫 구매 한정)\"} Check1 -- 구매 가능 --\u003e Sell1[\"SalesItem 1 판매\"] Check1 -- 구매 완료 --\u003e Check2{\"SalesItem 2 (2~9번째)\"} Check2 -- 구매 가능 --\u003e Sell2[\"SalesItem 2 판매\"] Check2 -- 상한 도달 --\u003e Check3{\"SalesItem 3 (10번째 특전)\"} Check3 -- 구매 가능 --\u003e Sell3[\"SalesItem 3 판매\"] 랜덤 진열대 랜덤 진열대는 마스터 데이터에 지정한 DisplayItem 중 지정한 개수가 랜덤으로 추첨되어 진열됩니다. 랜덤 진열대는 다음 파라미터로 동작을 제어합니다. 항목 설명 maximumNumberOfChoice 한 번의 추첨으로 진열되는 DisplayItem의 최대 개수 displayItems 추첨 대상 RandomDisplayItem 목록. 각 아이템은 weight (추첨 가중치)와 stock (재고 수)을 가집니다 baseTimestamp / resetIntervalHours 진열 내용의 재추첨 간격. 지정 시각을 기점으로 일정 시간마다 진열 내용이 갱신됩니다 salesPeriodEventId GS2-Schedule의 이벤트ID. 판매 가능 기간을 제한하고 싶은 경우에 지정합니다 추첨 결과는 플레이어별로 RandomShowcaseStatus 로 저장되며, 구매 시 재고가 소비됩니다. 재추첨 간격이 도래하면 다음 접속 시 진열 내용이 갱신됩니다. 버프에 의한 보정 GS2-Buff와 연동하면 DisplayItem 및 RandomDisplayItemModel의 acquireActions · verifyActions · consumeActions 를 동적으로 보정할 수 있으며, 랜덤 진열 상품에서는 stock 의 덮어쓰기도 가능합니다. 이벤트나 캠페인에 맞춰 보상이나 필요 대가, 재고 수를 유연하게 변경할 수 있습니다. 스크립트 트리거 네임스페이스에 buyScript 를 설정하면, 상품 구매 시점에 커스텀 스크립트를 호출할 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. buyScript : 상품 구매 시 이를 활용하면, 구매 처리에 독자적인 검증이나 감사 로그 출력, KPI 집계 등을 끼워 넣을 수 있습니다. 트랜잭션 액션 GS2-Showcase에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 소비 액션: 구매 횟수 증가 입수 액션: 구매 횟수 감소, 랜덤 진열대의 재추첨 “랜덤 진열대의 재추첨\"을 입수 액션으로 이용하면, 특정 아이템을 입수했을 때나 퀘스트 클리어 시의 보상으로서 상점의 진열 내용을 강제로 갱신시키는 등의 처리를, 트랜잭션 내에서 안전하게 실행할 수 있습니다. 이를 통해 플레이어의 진행 상황에 맞춘 시기적절한 상품 라인업 제공이 가능해집니다. 또한 “구매 횟수 감소\"를 이용하면, 상품의 구매 제한(한정 상품의 재판매 등)을 개별적으로 회복시키는 등의 운영도 쉬워집니다. 마스터 데이터 운용 마스터 데이터를 등록하면 마이크로서비스에서 사용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음과 같은 것이 있습니다. ShowcaseModel : 스탠다드 진열대의 정의. DisplayItem 으로서 SalesItem 또는 SalesItemGroup 을 진열할 수 있습니다. RandomShowcaseModel : 랜덤 진열대의 정의. RandomDisplayItemModel 목록에서 maximumNumberOfChoice 건을 추첨하여 진열합니다. SalesItem / SalesItemMaster : 단일 판매 상품의 정의. SalesItemGroup / SalesItemGroupMaster : 구매 상황에 따라 진열 내용이 변화하는 상품 그룹의 정의. 마스터 데이터 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub에서 데이터를 반영하거나, GS2-Deploy를 사용해 CI에서 등록하는 등의 워크플로우를 구성할 수 있습니다. 다음은 랜덤 진열대를 포함한 마스터 데이터의 JSON 예시입니다. { \"version\": \"2019-09-13\", \"showcases\": [ { \"name\": \"showcase-0001\", \"metadata\": \"일반 상점\", \"salesPeriodEventId\": null, \"displayItems\": [ { \"displayItemId\": \"display-item-0001\", \"type\": \"salesItem\", \"salesItemName\": \"item-0001\" } ] } ], \"randomShowcases\": [ { \"name\": \"random-showcase-0001\", \"metadata\": \"일일 상점\", \"maximumNumberOfChoice\": 4, \"baseTimestamp\": 1700000000000, \"resetIntervalHours\": 24, \"displayItems\": [ { \"name\": \"display-item-0001\", \"weight\": 10, \"stock\": 3, \"consumeActions\": [], \"acquireActions\": [] } ] } ] } 구현 예제 스탠다드 진열대 진열대 가져오기 Game Engine: Unity Unreal Engine Godot var item = await gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Showcase ( showcaseName : \"showcase-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Showcase ( \"showcase-0001\" // showcaseName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . showcase ( \"showcase-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 진열대 목록 가져오기 진열대 목록을 가져오는 API는 게임 엔진용 SDK에는 제공되지 않습니다. 가져와야 하는 경우, 관리 콘솔 / GS2 CLI / 각종 언어용 범용 SDK(C# / Go / Python / TypeScript / PHP / Java)를 이용해 주세요. 상품 구매 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Showcase ( showcaseName : \"showcase-0001\" ). DisplayItem ( displayItemId : \"display-item-0001\" ). BuyAsync ( quantity : 1 , config : null ); await result . WaitAsync (); const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Showcase ( \"showcase-0001\" // showcaseName ) -\u003e DisplayItem ( \"display-item-0001\" // displayItemId ); const auto Future = Domain -\u003e Buy ( 1 , // quantity nullptr // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . showcase ( \"showcase-0001\" ) . display_item ( \"display-item-0001\" ) var async_result = await domain . buy ( null , # quantity null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Buy 는 GS2-Distributor를 경유한 트랜잭션 처리로 실행됩니다. 트랜잭션 결과를 반영하려면, 반환값인 EzTransactionDomain 의 WaitAsync / Wait 를 호출하여 트랜잭션 완료를 대기해 주세요. 랜덤 진열대 진열대 가져오기 Game Engine: Unity Unreal Engine Godot var items = await gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ). RandomDisplayItemsAsync ( ). ToListAsync (); const auto It = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RandomShowcase ( \"showcase-0001\" // showcaseName ) -\u003e RandomDisplayItems ( ); TArray Gs2 :: UE5 :: Showcase :: Model :: FEzRandomDisplayItemPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . random_showcase ( \"showcase-0001\" ) . random_display_items ( ) var async_result = await iterator . load () if async_result . error != null : # 오류를 처리 push_error ( str ( async_result . error )) return var items = async_result . result 상품 구매 Game Engine: Unity Unreal Engine Godot var result = await gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ). RandomDisplayItem ( displayItemName : \"display-item-0001\" ). RandomShowcaseBuyAsync ( quantity : 1 , config : null ); await result . WaitAsync (); const auto Future = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RandomShowcase ( \"showcase-0001\" // showcaseName ) -\u003e RandomDisplayItem ( \"display-item-0001\" // displayItemName ) -\u003e RandomShowcaseBuy ( 1 , // quantity nullptr // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Transaction = Future -\u003e GetTask (). Result (); const auto Future2 = Transaction -\u003e Wait (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . random_showcase ( \"showcase-0001\" ) . random_display_item ( \"display-item-0001\" ) var async_result = await domain . random_showcase_buy ( 1 , # quantity null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 랜덤 진열대 상태 가져오기 랜덤 진열대는 플레이어별로 추첨 결과와 구매 횟수를 RandomShowcaseStatus 로 유지하고 있습니다. 다음 재추첨 시각이나 구매 완료 수를 확인하고 싶은 경우에 가져옵니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcaseStatus ( showcaseName : \"showcase-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e RandomShowcaseStatus ( \"showcase-0001\" // showcaseName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . random_showcase_status ( \"showcase-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var item = async_result . result 상세 레퍼런스 GS2-Showcase API 레퍼런스","lang":"ko","section":"microservices","summary":"상품 판매 기능","title":"GS2-Showcase","url":"/ko/microservices/showcase/"},{"content":"캐릭터 등의 성장 요소로 일반적으로 사용되는 스킬 트리 기능을 구현하기 위한 마이크로서비스입니다. 스킬 트리란 아래와 같은 트리 구조를 가지며, 노드를 해제함으로써 캐릭터의 파라미터를 향상시킬 수 있는 기능을 가리킵니다. 노드 해제에는 비용이 필요하며, GS2-SkillTree에서는 각 마이크로서비스가 제공하는 《소비 액션》을 설정할 수 있습니다. flowchart TD Base --\u003e Node1[STR+5] Node1 --\u003e Node2[DEF+5] Node2 --\u003e Node3[SPD+5] Node3 --\u003e Node4[STR+5] Node4 --\u003e Node5[DEF+5] Node5 --\u003e Node6[STR+5] Node6 --\u003e Node7[DEF+5] Node3 --\u003e Node10[SPD+5] Node10 --\u003e Node11[DEF+5] Node11 --\u003e Node12[SPD+5] Node12 --\u003e Node13[DEF+5] Node11 --\u003e Node30[SPD+5] Node30 --\u003e Node31[STR+5] Node31 --\u003e Node32[SPD+5] Node7 --\u003e Node20[STR+5] Node13 --\u003e Node20 Node20 --\u003e Node21[STR+5] Node21 --\u003e Node22[STR+5] 노드 정의(NodeModel) 스킬 트리를 구성하는 노드는 마스터 데이터 NodeModel 로 정의합니다. 각 노드는 다음 필드로 구성되며, 이를 통해 노드의 해제 조건·비용·효과·의존 관계를 표현합니다. 필드 역할 name 노드의 식별자 metadata 클라이언트에서 표시할 설명용 텍스트 releaseVerifyActions 해제에 필요한 검증 액션(특정 랭크일 것 등. 최대 10건) releaseConsumeActions 해제 시 소비되는 액션(SP·아이템·골드 등. 1~10건) restrainReturnRate 미해제화(리스트레인) 시 비용 반환율(0.0~1.0, 기본값 1.0) premiseNodeNames 전제 노드(최대 10개) 미해제화(리스트레인) 시 반환되는 입수 액션( returnAcquireActions )은 releaseConsumeActions 를 반전시키고 restrainReturnRate 를 곱한 내용으로 자동 생성됩니다. 스킬의 효과(스탯 가산 등)는 releaseConsumeActions 에서 소비하는 리소스(GS2-Experience의 랭크나 GS2-Inventory의 스킬 포인트 등)를 다른 마이크로서비스와 연동하는 형태로 표현하십시오. 전제 노드 각 노드에는 트리 구조를 만들기 위해 《전제 노드》를 설정할 수 있습니다. 전제 노드에는 최대 10개의 노드를 설정할 수 있으며, 전제 노드로 설정된 노드가 해제 상태가 아니면 해당 노드는 해제할 수 없습니다. 전제 노드에는 그 노드에 이르기까지의 모든 노드를 설정할 필요는 없으며, 바로 앞의 노드 하나만 설정해도 트리 구조를 만들 수 있다는 점에 유의하십시오. flowchart LR A --\u003e B B --\u003e C C --\u003e D 위 예시에서는 D의 premiseNodeNames 에 C만 지정하면 충분합니다. A·B는 C를 해제하기 위해 필연적으로 이미 해제되어 있어야 하므로, 의존 관계로 별도 기술할 필요가 없습니다. 해제 처리 흐름 sequenceDiagram participant Client participant SkillTree as GS2-SkillTree participant Other as 다른 마이크로서비스 Client-\u003e\u003eSkillTree: Release(nodeModelNames) SkillTree-\u003e\u003eSkillTree: 전제 노드 판정 SkillTree-\u003e\u003eSkillTree: releaseVerifyActions 검증 SkillTree-\u003e\u003eOther: releaseConsumeActions 실행 SkillTree--\u003e\u003eClient: 해제된 노드 목록 (Status) 해제한 노드를 미해제 상태로 되돌리기 각 노드 단위로, 또는 모든 노드를 미해제 상태로 되돌릴 수 있습니다. 플레이어가 빌드를 다시 짜는 “재분배” 기능을 구현하는 데 활용할 수 있습니다. 비용 반환 이때 노드를 해제하는 데 소비한 비용을 restrainReturnRate 로 지정한 비율에 따라 반환할 수 있습니다. 여기서 주의해야 할 점은 트랜잭션의 소비 액션에는 “반전 가능\"과 “반전 불가능\"의 두 가지 종류가 존재한다는 것입니다. “반전 가능\"한 소비 액션에 대해서는 반환이 이루어지지만, “반전 불가능\"한 소비 액션에 대해서는 반환이 이루어지지 않습니다. 소비 액션이 “반전 가능\"한지 여부는 각 마이크로서비스 레퍼런스의 기재 내용을 확인하십시오. 트리 중간에 있는 노드 조작 노드에 의존하고 있는 노드가 이미 해제된 상태라면, 해당 노드를 미해제 상태로 되돌릴 수 없습니다. 예를 들어 A → B → C의 의존 관계가 있는 경우, C를 해제한 상태로 둔 채 B만 미해제로 만들 수는 없습니다. 재분배를 구현할 때는 의존 관계의 말단부터 순서대로 미해제화하거나, 후술할 ResetAsync 로 모든 노드를 일괄 미해제 상태로 되돌리십시오. 노드의 일괄 해제 노드 해제는 여러 노드를 일괄로 해제할 수 있습니다. 이때 의존 관계에 주의하며 노드를 지정할 필요는 없으며, GS2-SkillTree 쪽에서 의존 관계의 순서를 고려하면서 해제 처리를 수행하고 해제 가능 여부를 판정합니다. 스크립트 트리거 네임스페이스에 releaseScript · restrainScript 를 설정하면 노드 해제 및 미해제 복원 처리 시점에 커스텀 스크립트를 호출할 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. releaseScript : 노드 해제 시 restrainScript : 노드를 미해제 상태로 되돌릴 때 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. NodeModel : 스킬 트리의 노드 정의 마스터 데이터 JSON 예시 { \"version\": \"2024-05-30\", \"nodeModels\": [ { \"name\": \"str-001\", \"metadata\": \"STR+5\", \"premiseNodeNames\": [], \"releaseConsumeActions\": [ { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \"request\": \"{\\\"namespaceName\\\":\\\"inventory-0001\\\",\\\"inventoryName\\\":\\\"skill_point\\\",\\\"itemName\\\":\\\"sp\\\",\\\"userId\\\":\\\"#{userId}\\\",\\\"consumeCount\\\":1}\" } ], \"restrainReturnRate\": 1.0 }, { \"name\": \"str-002\", \"metadata\": \"STR+10\", \"premiseNodeNames\": [\"str-001\"], \"releaseConsumeActions\": [ { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \"request\": \"{\\\"namespaceName\\\":\\\"inventory-0001\\\",\\\"inventoryName\\\":\\\"skill_point\\\",\\\"itemName\\\":\\\"sp\\\",\\\"userId\\\":\\\"#{userId}\\\",\\\"consumeCount\\\":2}\" } ], \"restrainReturnRate\": 1.0 } ] } 마스터 데이터 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 버프에 의한 보정 GS2-Buff를 이용하면 노드 모델의 releaseVerifyActions · releaseConsumeActions · restrainReturnRate 를 버프로 보정하여, 해제 조건이나 비용, 반환율을 이벤트에 맞게 조정할 수 있습니다. 예를 들어 기간 한정 이벤트로 “스킬 포인트 1개만으로도 해제 가능\"하게 하거나 “재분배 시 반환율을 1.5배로 한다\"와 같은 시책을, 마스터 데이터를 다시 쓰지 않고 버프 적용만으로 실현할 수 있습니다. 트랜잭션 액션 GS2-SkillTree에서는 다음과 같은 트랜잭션 액션을 제공합니다. 소비 액션: 노드의 미해제화 입수 액션: 노드의 해제 완료 기록 “노드의 해제 완료 기록\"을 입수 액션으로 이용함으로써, 상점에서 상품을 구입할 때나 퀘스트 클리어 시의 보상으로 스킬 트리의 특정 노드를 직접 해제 완료 상태로 만드는 처리를, 트랜잭션 내에서 안전하게 실행할 수 있습니다. 이를 통해 특정 조건을 달성한 플레이어에게 비용을 소비시키지 않고 특별한 스킬을 즉시 부여하는 등, 유연한 캐릭터 성장 연출이 가능해집니다. 구현 예제 노드의 해제 상태 취득 Status 에는 현재 해제 완료된 노드 목록( releasedNodeNames )이 저장되어 있습니다. 캐릭터별로 스킬 트리를 나누어 관리하고 싶은 경우에는 propertyId 를 지정함으로써 여러 개의 스킬 트리 상태를 유지할 수 있습니다. Game Engine: Unity Unreal Engine Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( ); var item = await domain . ModelAsync (); const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 노드 해제 여러 노드를 일괄로 전달할 수 있습니다. 전제 관계를 포함하여 지정해도 GS2-SkillTree 쪽에서 순서를 해결하여 해제를 시도합니다. Game Engine: Unity Unreal Engine Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( ); var result = await domain . ReleaseAsync ( nodeModelNames : new string [] { \"node-0001\" , } ); const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( ); const auto Future = Domain -\u003e Release ( [] { const auto v = MakeShared TArray FString \u003e\u003e (); v -\u003e Add ( \"node-0001\" ); return v ; }() ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) var async_result = await domain . release ( [ \"node-0001\" , ] # node_model_names ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 노드의 해제 상태를 원래대로 되돌리기 지정한 노드를 미해제 상태로 되돌립니다. restrainReturnRate 로 지정된 비율에 따라 소비한 액션이 반환됩니다(반전 가능한 소비 액션만 해당). Game Engine: Unity Unreal Engine Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( ); var result = await domain . RestrainAsync ( nodeModelNames : new string [] { \"node-0001\" , } ); const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( ); const auto Future = Domain -\u003e Restrain ( [] { const auto v = MakeShared TArray FString \u003e\u003e (); v -\u003e Add ( \"node-0001\" ); return v ; }() ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) var async_result = await domain . restrain ( [ \"node-0001\" , ] # node_model_names ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 노드의 해제 상태를 리셋하기 해제 완료된 노드를 일괄로 미해제 상태로 되돌립니다. “스킬 재분배 아이템\"을 소비하는 사양 등에서 활용할 수 있습니다. 모든 노드에 대해 restrainReturnRate 에 따른 비용 반환이 시도됩니다. Game Engine: Unity Unreal Engine Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( ); var result = await domain . ResetAsync ( ); const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( ); const auto Future = Domain -\u003e Reset ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) var async_result = await domain . reset ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 캐릭터 단위 스킬 트리 관리하기 하나의 계정 안에서 여러 캐릭터가 각각 독립된 스킬 트리를 가지는 경우에는 Status 의 propertyId 를 활용합니다. GS2-Dictionary나 GS2-Inventory에서 관리하고 있는 캐릭터ID를 그대로 propertyId 로 할당함으로써, 캐릭터별로 독립된 해제 상태를 저장할 수 있습니다. 상세 레퍼런스 GS2-SkillTree API 레퍼런스","lang":"ko","section":"microservices","summary":"스킬 트리 기능","title":"GS2-SkillTree","url":"/ko/microservices/skill_tree/"},{"content":"스태미나는 게임 내의 횟수 제한 기능을 실현하는 것입니다. GS2-Limit 는 “하루에 3회” 와 같이 횟수 제한을 표현하지만, GS2-Stamina 는 “8시간에 1포인트 회복하는 스태미나를 사용하여 하루 3회로 횟수를 제한한다” 와 같이, 시간 경과와 소비 액션의 조합으로 제한을 표현합니다. 스태미나의 경우, 소비하는 포인트에 차등을 둠으로써 A라는 행동이라면 하루 3회, B라는 행동이라면 하루 5회와 같은 사양을 구현할 수 있습니다. 이는 스태미나 1당 얻을 수 있는 경험치나 게임 내 통화의 기준을 마련함으로써, 게임 내에서 어떤 행동을 취하더라도 특별히 효율이 좋은 행동이라는 것을 배제할 수 있어, 게임 밸런스를 조정하기 쉬워집니다. 개발자는 매일 로그인하도록 유도하기 위해 노력해야 하므로 이런 사양은 그다지 채택하지 않지만, 플레이어 입장에서는 8시간에 1포인트 회복하고 최대 15포인트까지 축적할 수 있는 사양이라면, 매일 로그인하지 않고 5일에 1회 로그인하더라도 포인트를 낭비하지 않고 다 사용할 수 있습니다. 스태미나 스태미나에는 “회복 간격”, “회복량”, “최대값” 을 설정합니다. graph LR Time[\"시간 경과\"] -- \"recoverIntervalMinutes 마다\" --\u003e Recover[\"회복 (+recoverValue)\"] Recover --\u003e Value[\"현재값\"] Consume[\"소비 액션\"] -- \"-consumeValue\" --\u003e Value Value -- \"maxValue 초과\" --\u003e Overflow[\"오버플로우 상태\"] 파라미터 설명 value 현재 보유하고 있는 스태미나 값 maxValue 자연 회복으로 도달할 수 있는 상한값 recoverIntervalMinutes 1포인트 회복하는 데 필요한 분 수 recoverValue 1회 회복으로 증가하는 값 overflowValue 최대값을 초과한 만큼의 값 nextRecoverAt 다음 회복 예정 일시 오버플로우 스태미나는 최대값을 초과하여 회복시킬 수 있습니다. 최대값을 초과한 상태에서는 시간 경과에 따른 회복이 발생하지 않습니다. 또한 최대값을 초과한 상태에서도 UI 상의 편의 등을 위해, 그 이상은 가산되지 않도록 하는 “진짜 최대값” 을 설정할 수 있습니다. 왜 오버플로우시키는 건가요? 이 사양은 스태미나를 사양에 포함한 게임을 플레이해 본 적이 별로 없는 개발자에게는 이상하게 느껴질 수 있습니다. 스태미나는 일반적으로 회복시키기 위한 아이템이나, 게임 내 과금을 통해 회복시키는 수단이 존재합니다. 그 아이템을 사용하거나 스태미나를 구매할 때 플레이어의 스트레스를 최소화하고자 이러한 사양이 만들어졌습니다. 구체적인 예를 들어 보겠습니다. 이 게임은 5분에 1포인트씩 스태미나가 회복되며, 당신의 스태미나 최대값은 50포인트입니다. 당신이 다음에 플레이하고 싶은 퀘스트를 플레이하려면 스태미나가 10포인트 필요합니다. 하지만 현재 당신의 스태미나 값은 9포인트밖에 없어, 5분을 기다리지 않으면 다음 퀘스트를 플레이할 수 없습니다. 그래서 당신은 스태미나를 구매하려고 합니다. 스태미나를 구매하면 스태미나가 50포인트 회복됩니다. 하지만 지금 당장 스태미나를 구매하면, 50포인트가 회복되더라도 9포인트는 낭비되고 맙니다. 그래서 당신은 5분을 기다려 1포인트가 회복된 후 퀘스트를 플레이하여 0포인트로 만든 다음, 그다음 퀘스트를 플레이하기 위해 스태미나를 구매했습니다. 이래서는 플레이어가 게임을 쾌적하게 플레이할 수 없습니다. 그래서 최대값을 초과하여 스태미나를 회복할 수 있는 사양을 도입하는 게임이 등장했습니다. 스태미나에 최대값을 초과하는 사양을 추가하면, 사용자 경험이 어떻게 달라지는지 살펴보겠습니다. 현재 당신의 스태미나 값은 9포인트밖에 없어, 5분을 기다리지 않으면 다음 퀘스트를 플레이할 수 없습니다. 그래서 당신은 스태미나를 구매하여 스태미나를 50포인트 회복시켜 59포인트로 만들었습니다. 이 상태에서는 시간 경과에 따른 스태미나 회복이 이루어지지 않지만, 당신은 곧바로 다음 퀘스트를 시작하여 스태미나를 49포인트로 만들었습니다. GS2-Experience 와의 연동 MaxStaminaTable / RecoverIntervalTable / RecoverValueTable 를 마스터 데이터에 등록하여, GS2-Experience 의 랭크(플레이어 레벨 등)에 따라 자동으로 최대값·회복 간격·회복량을 변화시킬 수 있습니다. 플레이어의 레벨업에 맞춰 자동으로 스태미나 상한이 증가하는 등, 흔히 볼 수 있는 성장 요소를 간단하게 구현할 수 있습니다. 자연 회복의 동기화 Apply API 를 호출하면, 마지막으로 접근한 후 경과한 시간만큼의 스태미나 자연 회복을 즉시 반영할 수 있습니다. 일반적으로는 스태미나 취득 API 내부에서 자동으로 반영되므로 명시적으로 호출할 필요가 거의 없지만, 서버 측에서 스태미나 값을 엄밀하게 동기화하고 싶은 경우에 사용합니다. 스크립트 트리거 네임스페이스에 overflowTriggerScript 를 설정하면, 자연 회복에 의해 스태미나가 최대값을 초과했을 때 커스텀 스크립트를 실행할 수 있습니다. 이를 통해 오버플로우 시 넘친 스태미나를 다른 리소스로 변환하는 등의 응용이 가능합니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. overflowTriggerScript : 스태미나 오버플로우 시 버프에 의한 보정 GS2-Buff 와 연동하면, maxValue · recoverIntervalMinutes · recoverValue 외에도 consumeValue 나 recoverValue 같은 액션 파라미터를 버프로 보정할 수 있어, 이벤트 등에서 스태미나 상한이나 회복 속도, 소비량을 유연하게 조정할 수 있습니다. “기간 한정으로 스태미나 최대값을 1.5배로 늘린다”, “로그인 직후 1시간만 회복 속도를 2배로 한다” 와 같은 한시적인 게임 체험 조정에 활용할 수 있습니다. 트랜잭션 액션 GS2-Stamina 에서는 다음과 같은 트랜잭션 액션을 제공하고 있습니다. 검증 액션: 현재값 검증, 최대값 검증, 회복 속도 검증, 회복량 검증, 오버플로우량 검증 소비 액션: 스태미나 소비, 최대값 감산 입수 액션: 스태미나 회복(가산), 최대값 가산·설정, 회복 속도 설정, 회복량 설정 “최대값 가산” 을 입수 액션으로 이용함으로써, 상점에서 아이템 구매 시나 플레이어 랭크가 상승했을 때 등에, 자동으로 스태미나의 최대 용량을 확장하는 처리를 트랜잭션 내에서 안전하게 실행할 수 있습니다. 이를 통해 플레이어의 성장을 체감하게 하는 보상 설계가 쉬워집니다. 또한 “스태미나 회복” 을 보상으로 설정함으로써, 특정 미션 달성 시 스태미나를 전부 회복시켜 지속적인 플레이를 유도하는 운용도 가능합니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. StaminaModel : 회복량·회복 간격·최대값·오버플로우 허용 여부의 정의 MaxStaminaTable : GS2-Experience 의 랭크로부터 최대값을 산출하는 테이블 RecoverIntervalTable : GS2-Experience 의 랭크로부터 회복 간격을 산출하는 테이블 RecoverValueTable : GS2-Experience 의 랭크로부터 회복량을 산출하는 테이블 다음은 마스터 데이터의 JSON 예입니다. { \"version\": \"2019-04-23\", \"staminaModels\": [ { \"name\": \"stamina-0001\", \"metadata\": \"퀘스트용 스태미나\", \"recoverIntervalMinutes\": 5, \"recoverValue\": 1, \"initialCapacity\": 50, \"isOverflow\": true, \"maxCapacity\": 999 } ] } 마스터 데이터의 등록은 매니지먼트 콘솔에서 등록하는 것 외에도, GitHub 에서 데이터를 반영하거나, GS2-Deploy 를 사용해 CI 에서 등록하는 등의 워크플로우를 구성하는 것이 가능합니다. 구현 예제 현재 스태미나 값 취득 취득 시각에서의 자연 회복이 반영된 상태의 스태미나 값이 반환됩니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Item = Domain -\u003e Model (); var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 스태미나 목록 취득 네임스페이스에 등록된 여러 StaminaModel 중, 플레이어가 이용하고 있는 모든 스태미나의 현재값을 일괄로 취득할 수 있습니다. Game Engine: Unity Unreal Engine Godot var items = await gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StaminasAsync ( ). ToListAsync (); const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ); const auto It = Domain -\u003e Staminas ( ); TArray Gs2 :: UE5 :: Stamina :: Model :: FEzStaminaPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var iterator = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . staminas ( ) var async_result = await iterator . load () if async_result . error != null : # 오류 처리 push_error ( str ( async_result . error )) return var items = async_result . result 스태미나 소비 이 API로 직접 스태미나를 소비하는 처리를 수행하는 것은 권장하지 않습니다. GS2-Quest 와 같은 서비스를 통해 스태미나 소비를 수행함으로써, 소비와 맞바꾸어 퀘스트 시작이나 아이템 입수 등의 처리를 하나의 트랜잭션으로 안전하게 다룰 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ). ConsumeAsync ( consumeValue : 50 ); var item = await result . ModelAsync (); const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e Consume ( 50 ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . consume ( 50 # consume_value ) if async_result . error != null : if async_result . error . type == \"InsufficientException\" : # 스태미나 잔량이 부족합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 자연 회복 반영 마지막 접근 이후 경과한 시간만큼의 자연 회복을 즉시 반영합니다. 일반적으로는 API 호출 시 내부에서 자동으로 반영되므로 명시적으로 호출할 필요가 거의 없습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ). ApplyAsync ( ); var item = await result . ModelAsync (); const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e Apply ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . apply ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 응용 예: 마을 만들기 게임의 채집 기능 스태미나의 구조를 응용하면, 마을 만들기 게임의 채집 기능도 구현할 수 있습니다. 스태미나 모델에 건축물을 설정하고, 스태미나 값을 건축물의 생산량으로 표현함으로써, 시간 경과에 따라 자원이 축적되는 채집 시스템을 구현할 수 있습니다. 예를 들어, “철광석을 생산하는 광산” 을 하나의 스태미나 모델로 다루어, 회복 간격을 채굴 간격, 회복량을 1회당 채굴량, 최대값을 창고의 상한으로 표현할 수 있습니다. 플레이어가 회수 액션을 수행했을 때 Consume 으로 전량을 소비하고, 얻은 포인트 수를 GS2-Inventory 에 아이템으로 저장하는 구성이 가능합니다. 상세 레퍼런스 GS2-Stamina API 레퍼런스","lang":"ko","section":"microservices","summary":"스태미나 기능\n","title":"GS2-Stamina","url":"/ko/microservices/stamina/"},{"content":"GS2-Quest 는 퀘스트의 시작·종료를 관리하고, 시작한 퀘스트에 따라 종료 시 보상을 받을 수 있는 구조를 제공했습니다. 하지만 인게임의 무작위성이 강해 보상을 사전에 특정하기 어려운 게임 사양은 GS2-Quest 로는 잘 다루지 못하는 과제가 있었습니다. GS2-StateMachine 은 더 세밀한 단위로 인게임의 상태 관리를 하기 위해 개발되었습니다. 스테이트 머신 인게임의 상태 관리에 사용하는 것이 스테이트 머신입니다. flowchart TD Start ----\u003e MainStateMachine_Initialize MainStateMachine_Pass ----\u003e Exit subgraph MainStateMachine MainStateMachine_Initialize[[Initialize]] --\u003e|Pass| MainStateMachine_ChoiceSkill MainStateMachine_ChoiceSkill[/ChoiceSkill/] MainStateMachine_InGame([InGame]) --\u003e|Pass| MainStateMachine_NextTurn MainStateMachine_InGame([InGame]) --\u003e|Fail| MainStateMachine_Pass MainStateMachine_NextTurn[[NextTurn]] --\u003e|Next| MainStateMachine_ChoiceSkill MainStateMachine_NextTurn[[NextTurn]] --\u003e|Exit| MainStateMachine_Pass MainStateMachine_Pass[\\Pass/] subgraph ChoiceSkill ChoiceSkill_Initialize[[Initialize]] --\u003e|Pass| ChoiceSkill_LotterySkills ChoiceSkill_LotterySkills[[LotterySkills]] --\u003e|Pass| ChoiceSkill_WaitChoiceSkill ChoiceSkill_WaitChoiceSkill([WaitChoiceSkill]) --\u003e|ChoiceSkill| ChoiceSkill_ChoiceSkill ChoiceSkill_WaitChoiceSkill([WaitChoiceSkill]) --\u003e|ReLotterySkill| ChoiceSkill_ReLotterySkill ChoiceSkill_ReLotterySkill[[ReLotterySkill]] --\u003e|Pass| ChoiceSkill_LotterySkills ChoiceSkill_ReLotterySkill[[ReLotterySkill]] --\u003e|AlreadyReLottery| ChoiceSkill_WaitChoiceSkill ChoiceSkill_ChoiceSkill[[ChoiceSkill]] --\u003e|Pass| ChoiceSkill_Pass ChoiceSkill_ChoiceSkill[[ChoiceSkill]] --\u003e|InvalidSkillIndex| ChoiceSkill_WaitChoiceSkill ChoiceSkill_Pass[\\Pass/] end end MainStateMachine_ChoiceSkill --\u003e ChoiceSkill_Initialize ChoiceSkill_Pass --\u003e|Pass| MainStateMachine_InGame Player -----\u003e|Interaction| MainStateMachine_InGame Player -----\u003e|Interaction| ChoiceSkill_WaitChoiceSkill 당신이 프로그래머라면 기획자로부터 위와 같은 플로우차트를 받아본 적이 있을 것입니다. 이러한 상태 전이를 표현한 것이 스테이트 머신입니다. 현재 플레이어가 어떤 스테이트에 있는지, 스테이트 머신 내에서 사용할 수 있는 변수가 어떤 값을 가지고 있는지를 관리합니다. 스테이트 머신은 언젠가 종료 스테이트로 전이하며, 그 시점의 스테이트 머신이 가진 상태 변수에 따라 보상을 확정할 수 있게 됩니다. 이벤트와 트랜지션 스테이트 머신의 스테이트 사이를 연결하는 것이 트랜지션입니다. 트랜지션에서는 특정 스테이트에서 다음 스테이트로 전이하는 조건을 설정합니다. 조건에는 이벤트 수신을 설정할 수 있으며, 이벤트의 종류에 따라 다음에 전이할 스테이트를 다르게 지정할 수 있습니다. 이벤트는 스테이트 머신 내에서 실행 중인 스크립트에서 발행할 수도 있지만, 플레이어로부터의 발행도 받아들일 수 있습니다. 이를 통해 플레이어가 취한 선택이나 게임 결과에 따라 처리를 분기시킬 수 있습니다. 이벤트에는 파라미터를 붙일 수 있으므로, 선택지마다 이벤트를 따로 준비하지 않아도 《선택지에서 선택했다》라는 이벤트와 《선택한 내용》이라는 파라미터를 전달하도록 함으로써 스테이트 머신을 단순하게 유지할 수도 있습니다. 스테이트 머신의 버전 관리 스테이트 머신은 버전 관리되며, 스테이트 머신의 내용을 업데이트해도 기동 시점에 사용하던 스테이트 머신 정의로 계속 동작합니다. 이를 통해 스테이트 머신의 정의를 변경해도 동작 중인 스테이트 머신에 영향을 주지 않고 새로운 스테이트 머신 정의를 적용할 수 있습니다. 호환성이 깨지는 변경을 스테이트 머신에 가할 경우에는, 네임스페이스 설정에서 지정한 버전 이하로 기동된 스테이트 머신을 삭제된 것으로 취급하는 구조를 이용하십시오. 또한 버전 관리되는 것은 스테이트 머신의 정의뿐입니다. 스테이트 머신이 참조하는 GS2-Script 는 버전 관리되지 않으므로 주의가 필요합니다. 기동된 스테이트 머신에는 분 단위로 유효 기간을 설정할 수 있으며, 유효 기간이 만료되면 자동으로 삭제됩니다. 스테이트 머신 정의 언어 스테이트 머신의 정의에는 GS2 가 독자적으로 개발한 GS2 States Language(GSL) 를 사용합니다. GSL 은 다음과 같은 표기법으로 작성합니다. StateMachine MainStateMachine { Variables { int turn; int choiceSkill; array skills; } EntryPoint Initialize; Task Initialize() { Event Pass(); Event Error(string reason); Script grn:gs2:{region}:{ownerId}:script:statemachine-script:script:MainStateMachine_Initialize } SubStateMachineTask ChoiceSkill { using ChoiceSkill; in (turn choiceSkill); } WaitTask InGame { Event Pass(); Event Fail(); Event Error(string reason); } Task NextTurn() { Event Next(); Event Exit(); Event Error(string reason); Script grn:gs2:{region}:{ownerId}:script:statemachine-script:script:MainStateMachine_NextTurn } PassTask Pass; ErrorTask Error(string reason); Transition Initialize handling Pass -\u003e ChoiceSkill; Transition Initialize handling Error -\u003e Error; Transition ChoiceSkill handling Pass -\u003e InGame; Transition InGame handling Pass -\u003e NextTurn; Transition InGame handling Fail -\u003e Pass; Transition InGame handling Error -\u003e Error; Transition NextTurn handling Next -\u003e ChoiceSkill; Transition NextTurn handling Exit -\u003e Pass; Transition NextTurn handling Error -\u003e Error; } 자세한 사양은 GS2 States Language 의 언어 사양에 대하여 를 참조하십시오. 스테이트 머신의 투기적 실행 GS2-StateMachine 이 제공하는 스테이트 머신은 Unity 와 Godot 에서 투기적 실행을 이용할 수 있습니다. 이 기능을 이용함으로써, 복잡한 로직을 가진 서버 프로그램을 플레이어가 통신 시간을 체감하지 않도록 하면서도 치트 행위는 할 수 없는 형태로 구현할 수 있습니다. 스테이트 머신의 투기적 실행 메커니즘 actor Player participant \"Game\" participant \"GS2-SDK\" participant \"Local State Machine\" participant \"Event Stream\" participant \"GS2-StateMachine\" Player -\u003e \"Game\" : 플레이 \"Game\" -\u003e \"GS2-SDK\" : 스테이트 머신 로드 \"GS2-SDK\" -\u003e \"GS2-StateMachine\" : 스테이트 머신 로드 \"GS2-SDK\" \"Local State Machine\" : 로컬 스테이트 머신 시작 \"Local State Machine\" -\u003e \"Event Stream\" : 이벤트 스트림 생성 \"GS2-SDK\" \"Game\" : 조작 \"Game\" -\u003e \"Local State Machine\" : 메시지 전송 \"Local State Machine\" -\u003e \"Event Stream\" : 수신한 메시지의 이벤트 기록 \"Local State Machine\" -\u003e \"Local State Machine\" : 상태 변화 \"Local State Machine\" -\u003e \"Event Stream\" : 변화 후 상태의 해시값 이벤트 기록 \"Game\" \"GS2-StateMachine\" : 이벤트 리포트 전송 note over \"GS2-StateMachine\" : 서버는 이벤트를 재생하여\\n상태 변수의 해시값이 일치하는지 검증 group 해시값 불일치 \"GS2-SDK\" \"GS2-SDK\" : 스테이트 머신 로드 \"GS2-SDK\" -\u003e \"GS2-StateMachine\" : 스테이트 머신 로드 \"GS2-SDK\" \"Local State Machine\" : 로컬 스테이트 머신 재기동(최대 3초간 롤백) end end end 그림에서 보여준 것처럼, 로컬 스테이트 머신은 서버로부터 받은 GSL 을 실행하는 기능을 가지고 있습니다. 다만, 서버상의 사용자 데이터를 다시 쓸 권한은 없으며, 스테이트 머신 내에서 발생한 사용자 데이터의 변경은 SDK 의 로컬 캐시 변경만 수행합니다. 로컬 스테이트 머신은 게임으로부터 받은 메시지를 바탕으로 상태 전이를 수행하는데, 수신한 메시지와 스테이트 머신의 상태 변수의 해시값을 이벤트 스트림에 기록합니다. 이벤트 스트림은 3초마다 발생한 이벤트가 있으면 GS2-StateMachine 에 리포트를 전송합니다. GS2-StateMachine 은 리포트를 수신하면, 거기에 기록된 이벤트를 서버가 보유하고 있는 스테이트 머신에 대해 실행합니다. 상태가 전이되었을 때는 리포트에 포함된 상태 변수의 해시값과 일치하는지 검증하며, 마지막 이벤트까지 문제가 없으면 스테이트 머신이 실행한 사용자 데이터의 변경도 실제로 실행하고, 스테이트 머신의 상태를 데이터베이스에 저장합니다. 만약 전이 대상 스테이트가 다르거나 상태 변수의 해시값에 불일치가 발생한 경우에는 “상태 불일치” 오류를 반환합니다. 이는 게임 프로그램 쪽에서 로컬 스테이트 머신의 “OnDetectStateMismatch” 콜백으로 처리할 수 있습니다. 불일치가 발생하면 이벤트 스트림은 GS2-StateMachine 으로의 리포트를 중단하므로, 로컬 스테이트 머신을 다시 생성해야 합니다. 이때, 마지막으로 정합성이 확인된 상태(데이터베이스에 저장된 상태)까지 롤백될 수 있습니다. 스테이트 머신에서의 난수 스테이트 머신이 난수를 기반으로 처리를 분기하고 싶은 경우가 있을 것입니다. 그러한 용도를 위해 서버와 난수 시드를 공유한 난수 생성기를 이용할 수 있습니다. category = 1 result = util.shared_random(category) if result.isError then fail(result['statusCode'], result['errorMessage']) end random_value = result[\"result\"] category 에는 용도별로 다른 값을 지정함으로써, 서로 다른 난수열을 기반으로 난수를 얻을 수 있습니다. 이 구조를 활용하면 난수값을 골라내는 행위(치트성 시행)에 대해 높은 내성을 얻을 수 있습니다. 이 방법으로 생성한 난수는 서버에서도 완전히 동일한 난수값을 얻을 수 있음이 보장되어 있어, 난수가 원인이 되어 상태 불일치가 발생하는 일은 없습니다. 스테이트 머신에서의 트랜잭션 처리 스테이트 머신의 실행 과정에서 사용자 데이터를 변경할 경우에는 GS2-SDK for Lua 를 사용하지 않고 전용 구문을 사용합니다. 그렇게 함으로써, 투기적 실행 시에도 통신 처리 없이 SDK 가 가진 캐시 데이터를 변경하는 형태로 사용자 데이터 변경에 대해서도 투기적 실행이 가능해집니다. 자세한 API 에 대해서는 각 마이크로서비스의 트랜잭션 액션 문서를 확인하십시오. transaction.execute({ consumeActions={}, acquireActions={ transaction.service(\"inventory\").acquire.acquire_simple_items_by_user_id({ namespaceName=\"namespace\", inventoryName=\"inventory\", acquireCounts={ { itemName=\"item\", count=1, }, }, }) } }) 스테이트 머신에서의 통신 처리 투기적 실행을 이용하는 스테이트 머신에서는 외부와 통신하는 것을 권장하지 않습니다. 왜냐하면 외적 요인에 의해 스테이트 머신의 실행 결과에 차이가 생기면 상태 불일치가 발생할 가능성이 비약적으로 높아지기 때문입니다. 로컬 스테이트 머신의 실행 환경 Unity 에서는 로컬 스테이트 머신을 이용할 수 있도록 하기 위해, GS2-SDK 와는 별도로 LocalStateMachineKit 을 설치해야 합니다. GS2-SDK Installer 에서 LocalStateMachineKit 을 설치할 수 있습니다. Godot 에서는 로컬 스테이트 머신의 실행 환경이 Godot SDK 에 동봉되어 있습니다. SDK 를 도입하면 addons/gs2/state_machine/local 이하도 함께 배치되므로, 추가 패키지 설치는 필요하지 않습니다. 다만, 추가적인 오픈 소스 라이브러리를 도입하게 되므로 라이선스 표기에 주의가 필요합니다. Unity 버전의 자세한 내용은 GS2 LocalStateMachineKit for Unity 를 확인하십시오. 스크립트 연동 스테이트 머신 내에서 Task 스테이트를 실행할 때, GS2-Script 를 호출할 수 있습니다. 스크립트의 실행 결과로서 “이벤트\"를 반환함으로써, 스크립트의 로직에 따라 스테이트 머신을 전이시킬 수 있습니다. 마스터 데이터 관리 마스터 데이터를 등록함으로써 마이크로서비스에서 사용 가능한 데이터나 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. StateMachineMaster : 스테이트 머신 정의(GSL). 버전 관리되며, 호환성이 깨지는 변경을 하고 싶은 경우에는 네임스페이스 설정의 lowestStateMachineVersion 을 이용하여 이전 버전의 스테이트 머신을 삭제된 것으로 취급할 수 있습니다 마스터 데이터의 등록은 관리 콘솔에서 등록하는 것 외에도, GitHub에서 데이터를 반영하거나, GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성할 수도 있습니다. 스크립트 트리거 스테이트 머신의 시작 시점이나 종료 상태에 도달한 시점에 GS2-Script 를 호출할 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. startScript : 스테이트 머신 시작 시 passScript : 스테이트 머신이 PassTask 에 도달했을 때 errorScript : 스테이트 머신이 ErrorTask 에 도달했을 때 또한, 스테이트 머신 내의 Task 스테이트에서 호출되는 GS2-Script 는 별도로 GSL 의 Script 지시자로 지정하며, 상태 전이 자체를 구동하는 용도로 사용됩니다. 트랜잭션 액션 GS2-StateMachine 에서는 다음의 트랜잭션 액션을 제공합니다. 입수 액션: 스테이트 머신의 시작 “스테이트 머신의 시작\"을 입수 액션으로 이용함으로써, 상점에서의 상품 구매 시나 미션 달성 시의 보상으로, 특정 인게임(로그라이크한 던전 공략 등, 복잡한 상태 관리를 수반하는 게임 루프)을 직접 시작시키는 처리를 트랜잭션 내에서 안전하게 실행할 수 있습니다. 이를 통해 구매부터 플레이 시작까지를 매끄럽게 연결하는 경험을 제공할 수 있습니다. 스테이트 머신 내부에서의 사용자 데이터 변경에 대해서는, transaction.execute 구문을 이용함으로써 로컬 스테이트 머신의 투기적 실행과 정합되는 트랜잭션 액션을 발행할 수 있습니다. 자세한 내용은 스테이트 머신에서의 트랜잭션 처리 를 참조하십시오. 구현 예제 스테이트 머신 시작 스테이트 머신의 시작은 게임 엔진용 SDK 에서는 처리할 수 없습니다. GS2-Quest 등의 마이크로서비스의 보상으로 설정하십시오. 스테이트 머신에 이벤트 전송 Game Engine: Unity Unreal Engine Godot var result = await gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : status1 . Name ). EmitAsync ( eventName : \"event-0001\" , args : \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ); var item = await result . ModelAsync (); const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( \"status-0001\" // statusName ); const auto Future = Domain -\u003e Emit ( \"event-0001\" , \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" // args ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . state_machine . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"status-0001\" ) var async_result = await domain . emit ( \"event-0001\" , # event_name \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" # args ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 스테이트 머신의 상태 취득 Game Engine: Unity Unreal Engine Godot var item = await gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ). ModelAsync (); const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Status ( \"status-0001\" // statusName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . state_machine . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"status-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 로컬 스테이트 머신(스테이트 머신의 투기적 실행) 로컬 스테이트 머신 시작 Game Engine: Unity Godot var localStateMachine = await LocalStateMachineExecutor . StartAsync ( gs2 : gs2 , gameSession : GameSession , stateMachineNamespaceName : \"namespace-0001\" , statusName : \"status-0001\" ); var local_state_machine = Gs2StateMachineLocalActiveStateMachine . setup ( game_session . get_user_id (), gsl_source , \"MainStateMachine\" ) var event_stream = Gs2StateMachineLocalEventStream . new () event_stream . attach ( local_state_machine ) local_state_machine . start ({}) 로컬 스테이트 머신에 이벤트 전송 Game Engine: Unity Godot localStateMachineExecutor . Emit ( \"Select\" , new MapVariableValue ( new Dictionary string , IVariableValue \u003e { [\"x\"] = new IntVariableValue ( x ), [\"y\"] = new IntVariableValue ( y ), } )); local_state_machine . emit ( \"Select\" , { \"x\" : x , \"y\" : y } ) 상태 불일치 처리 상태 불일치 콜백을 받으면, 최신 스테이트 머신의 상태를 서버에서 다시 가져와 로컬 스테이트 머신을 처음부터 다시 시작하십시오. Game Engine: Unity Godot localStateMachineExecutor . OnDetectStateMismatch += ( namespaceName , statusName ) =\u003e { Debug . LogWarning ( \"detect state mismatch!\" ); }; local_state_machine . changed_state . connect ( func ( task_name , hash_value ): # Compare the local state with the state confirmed by the server. # Reload the latest state if a mismatch is detected. pass ) 이벤트 스트림의 디스패치 로컬 스테이트 머신을 이용하는 동안, 이벤트 스트림이 GS2-StateMachine 에 이벤트를 전송하도록 일정 간격으로 Dispatch 함수를 호출해야 합니다. Game Engine: Unity Godot private async UniTask Dispatch () { while ( true ) { await this . _localStateMachineExecutor . DispatchAsync ( Login . Gs2 , Login . GameSession ); await UniTask . Delay ( TimeSpan . FromMilliseconds ( 100 )); } } # Send the events accumulated in event_stream.events to GS2-StateMachine # at a fixed interval, then clear the confirmed events. while true : await get_tree () . create_timer ( 0.1 ) . timeout await dispatch_event_stream ( event_stream . events , game_session ) 상세 레퍼런스 GS2-StateMachine API 레퍼런스","lang":"ko","section":"microservices","summary":"스테이트 머신 관리 기능","title":"GS2-StateMachine","url":"/ko/microservices/state_machine/"},{"content":"애플리케이션 버전이나 추가 에셋의 버전, 이용약관에 동의한 버전 등을 판정하는 기능을 제공합니다. 버전 체크를 통과했을 때, 새로운 임시 GS2 클라이언트ID/시크릿을 발급할 수 있습니다. 이 기능을 이용함으로써, 앱에 내장된 GS2의 클라이언트ID/시크릿은 로그인 및 버전 체크를 수행하는 API만 호출할 수 있는 권한만 가지도록 하고, 버전 체크를 통과한 후에 실제로 게임을 플레이하기에 충분한 권한을 가진 클라이언트ID/시크릿을 받을 수 있도록 할 수 있습니다. graph TD Boot[\"앱 실행\"] --\u003e Login[\"GS2-Account 로 로그인\"] Login -- \"최소 권한의 클라이언트ID/시크릿\" --\u003e Check[\"GS2-Version CheckVersion\"] Check -- \"OK\" --\u003e Token[\"새로운 ProjectToken 취득 (원래 권한)\"] Check -- \"Warning\" --\u003e Notify[\"플레이어에게 업데이트 안내\"] Check -- \"Error\" --\u003e Force[\"강제 버전 업\"] Notify --\u003e Token Token --\u003e Game[\"게임 본편\"] 버전 모델 네임스페이스에는 최대 10개의 버전 모델을 선언할 수 있습니다. 버전 체크에는 여러 항목을 설정할 수 있으며, 모든 버전 체크를 통과한 경우에만 체크를 통과할 수 있습니다. 버전 모델에는 두 종류가 있으며, “애플리케이션이 전송한 버전을 기반으로 버전을 판정\"하거나 “로그인 중인 사용자가 과거에 동의한 약관의 버전을 기반으로 버전을 판정\"할 수 있습니다. 전자를 “패시브 버전 체크”, 후자를 “액티브 버전 체크\"라고 부릅니다. 마스터 항목 설명 name 버전 모델명(체크 시 식별자) scope passive (패시브) / active (액티브) type simple (단일 임계값) / schedule (시각에 따라 임계값 전환) currentVersion 액티브 버전 체크에서 최초 참여 시 자동으로 승인된 것으로 처리하는 버전 warningVersion 경고를 표시하는 버전 임계값(이 버전 이하에서 warnings 를 반환) errorVersion 오류로 처리하는 버전 임계값(이 버전 이하에서 errors 를 반환) scheduleVersions type: schedule 일 때 시각별 임계값을 정의 needSignature 버전 정보에 서명을 요구할지 여부 signatureKeyId 서명 검증에 사용하는 GS2-Key의 키ID approveRequirement 액티브 버전 체크 시 승인 요구 사항( required / optional ) 버전 번호 형식 {major}.{minor}.{micro} 형식의 버전 번호를 이용할 수 있으며, 각 항목에는 정수값을 지정할 수 있습니다. 버전 값의 비교는 major → minor → micro 순으로 이루어지며, 사전순이 아니라 숫자로 비교됩니다. 패시브 버전 체크 게임 실행 바이너리나, 게임이 다운로드한 에셋별 버전 체크에 이용합니다. 마스터 데이터에서는 버전 모델별로 “경고를 발생시키는 버전 임계값”, “오류로 처리하는 버전 임계값\"을 설정할 수 있습니다. 클라이언트는 CheckVersion API에 현재 앱의 빌드 번호나 다운로드 완료된 에셋의 버전을 전송하고, 서버 측에서 임계값을 판정한 결과를 받습니다. 판정 결과는 다음 중 하나가 됩니다. 결과 조건 예상되는 동작 통과 모든 항목이 warningVersion 을 상회 게임 본편으로 진행 경고 ( warnings ) 어느 하나가 warningVersion 이하이면서 errorVersion 초과 플레이어에게 업데이트를 안내하면서 계속 진행 가능 오류 ( errors ) 어느 하나가 errorVersion 이하 강제 버전 업 액티브 버전 체크 EULA·개인정보처리방침·특정 지역의 약관 개정과 같이 “플레이어가 어느 버전에 동의했는지\"를 판정하는 용도로 이용합니다. AcceptVersion API를 호출함으로써 사용자가 임의의 버전을 승인 상태로 만들 수 있습니다. 클라이언트에서 전송되는 버전이 아니라 서버 측에 기록된 승인 버전이 임계값 판정의 대상이 되므로, 위장을 통해 약관 동의를 회피할 수 없습니다. 스케줄에 의한 임계값 전환 type: schedule 을 선택하면 scheduleVersions 에 GS2-Schedule의 이벤트ID와 해당 이벤트 기간 중의 버전을 설정할 수 있습니다. 예를 들어 “12월 1일부터는 이용약관 v2를 필수로 한다\"와 같은 운영을, 배포 없이 예약할 수 있습니다. 서명 검증 needSignature 를 활성화하면 CheckVersion 시 서명이 포함된 버전 정보를 요구할 수 있습니다. 서명은 GS2-Key에서 발급한 키( signatureKeyId )로 검증되므로, 변조된 버전 정보를 배제할 수 있습니다. 스크립트 트리거 네임스페이스에 checkVersionTriggerScriptId · acceptVersionScript 를 설정하면 버전 체크 시나 버전 승인 시에 커스텀 스크립트를 실행할 수 있습니다. 설정할 수 있는 주요 이벤트 트리거와 스크립트 설정명은 다음과 같습니다. checkVersionTriggerScriptId : 버전 체크 처리 시 호출되는 스크립트입니다. 동적인 판정 로직을 추가할 수 있습니다. acceptVersionScript : 버전 승인 시 호출되는 스크립트입니다. 트랜잭션 액션 GS2-Version에서는 다음과 같은 트랜잭션 액션을 제공합니다. 입수 액션 액션 용도 Gs2Version:AcceptByUserId 지정한 버전을 승인 상태로 만듭니다(액티브 버전 체크용). “지정한 버전의 승인\"을 입수 액션으로 이용함으로써, 특정 아이템을 입수했을 때나 미션을 달성했을 때 등에 자동으로 특정 약관이나 버전을 승인 완료 상태로 만드는 처리가 가능해집니다. 마스터 데이터 운용 마스터 데이터를 등록함으로써 마이크로서비스에서 이용 가능한 데이터와 동작을 설정할 수 있습니다. 마스터 데이터의 종류에는 다음이 있습니다. VersionModel : 버전 모델 정의 다음은 마스터 데이터 JSON의 예시입니다. { \"version\": \"2019-08-19\", \"versionModels\": [ { \"name\": \"app\", \"metadata\": \"앱 본체\", \"scope\": \"passive\", \"type\": \"simple\", \"warningVersion\": { \"major\": 1, \"minor\": 2, \"micro\": 0 }, \"errorVersion\": { \"major\": 1, \"minor\": 0, \"micro\": 0 } }, { \"name\": \"eula\", \"metadata\": \"이용약관\", \"scope\": \"active\", \"type\": \"simple\", \"currentVersion\": { \"major\": 1, \"minor\": 0, \"micro\": 0 }, \"warningVersion\": { \"major\": 1, \"minor\": 0, \"micro\": 0 }, \"errorVersion\": { \"major\": 1, \"minor\": 0, \"micro\": 0 }, \"approveRequirement\": \"required\" } ] } 마스터 데이터 등록은 관리 콘솔에서 등록하는 방법 외에도, GitHub에서 데이터를 반영하거나 GS2-Deploy를 사용하여 CI에서 등록하는 워크플로우를 구성할 수 있습니다. 구현 예제 버전 체크 실행 CheckVersion 의 결과에는 경고에 해당하는 항목( Warnings )·오류에 해당하는 항목( Errors )·성공 시 발급되는 ProjectToken 이 포함됩니다. ProjectToken 을 받은 경우에는 이를 사용하여 재인증을 수행함으로써, 실제 게임 플레이에 필요한 권한을 가진 세션을 취득할 수 있습니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Checker ( ). CheckVersionAsync ( targetVersions : new [] { new Gs2 . Unity . Gs2Version . Model . EzTargetVersion { VersionName = \"app\" , Version = new Gs2 . Unity . Gs2Version . Model . EzVersion { Major = 1 , Minor = 2 , Micro = 3 , }, }, new Gs2 . Unity . Gs2Version . Model . EzTargetVersion { VersionName = \"asset\" , Version = new Gs2 . Unity . Gs2Version . Model . EzVersion { Major = 1 , Minor = 2 , Micro = 3 , }, }, } ); var projectToken = result . ProjectToken ; var warnings = result . Warnings ; var errors = result . Errors ; if ( errors != null \u0026\u0026 errors . Count \u003e 0 ) { // 강제 버전 업 } else if ( warnings != null \u0026\u0026 warnings . Count \u003e 0 ) { // 업데이트 권장 다이얼로그를 표시하면서 계속 진행 } const auto Future = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e Checker ( ) -\u003e CheckVersion ( [] { const auto v = MakeShared TArray TSharedPtr Gs2 :: Version :: Model :: FTargetVersion \u003e\u003e\u003e (); v -\u003e Add ({ ' versionName ' : ' app ' , ' version ' : { ' major ' : 1 , ' minor ' : 2 , ' micro ' : 3 }}); v -\u003e Add ({ ' versionName ' : ' asset ' , ' version ' : { ' major ' : 1 , ' minor ' : 2 , ' micro ' : 3 }}); return v ; }() // targetVersions ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto ProjectToken = Result -\u003e ProjectToken ; const auto Warnings = Result -\u003e Warnings ; const auto Errors = Result -\u003e Errors ; var domain = ez . version . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . checker ( ) var async_result = await domain . check_version ( [ Gs2VersionEzTargetVersion . new () . with_version_name ( \"app\" ) . with_version ( Gs2VersionEzVersion . new () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ), Gs2VersionEzTargetVersion . new () . with_version_name ( \"asset\" ) . with_version ( Gs2VersionEzVersion . new () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ), ] # target_versions ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 액티브 버전 체크에 동의 이용약관 동의 버튼을 눌렀을 때 등에 AcceptAsync 를 호출합니다. 동의한 버전은 AcceptVersion 모델에 사용자별로 기록되며, 이후의 CheckVersion 에서 참조됩니다. Game Engine: Unity Unreal Engine Godot var result = await gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AcceptVersion ( versionName : \"eula\" ). AcceptAsync ( ); const auto Future = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( AccessToken ) -\u003e AcceptVersion ( \"eula\" // versionName ) -\u003e Accept ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) return false ; const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . version . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . accept_version ( \"eula\" ) var async_result = await domain . accept ( ( Gs2VersionVersion . new () . with_major ( 2 ) . with_minor ( 2 ) . with_micro ( 2 )) # version ) if async_result . error != null : if async_result . error . type == \"AcceptVersionInvalidException\" : # 승인 프로세스 도중에 서버 버전이 갱신된 결과 오류가 발생했습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 버전 모델 취득 UI에 “현재 약관 버전”, “경고 대상 임계값\"을 표시하기 위해 버전 모델 자체를 취득할 수 있습니다. Game Engine: Unity Unreal Engine Godot var item = await gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). VersionModel ( versionName : \"eula\" ). ModelAsync (); const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e VersionModel ( \"eula\" // versionName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) return false ; const auto Item = Future -\u003e GetTask (). Result (); var domain = ez . version . namespace_ ( \"namespace-0001\" ) . version_model ( \"version-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 보다 실전적인 정보 버전 업데이트 운영 절차 버전 업데이트 시, 플레이 중인 모든 플레이어를 한 번에 내보내고 최신 버전에서만 플레이할 수 있도록 하고 싶을 때가 있습니다. GS2-Version에서는 신규 로그인을 막을 수는 있지만, 이미 로그인된 플레이어는 버전 체크 후 임시로 발급된 클라이언트ID/클라이언트시크릿의 유효기간이 만료될 때까지 계속 접근할 수 있습니다. 그래서 모든 플레이어의 GS2-Gateway가 제공하는 알림용 상시 접속 세션을 끊고, 게임에서 세션 끊김을 핸들링하면 버전 체크 후 재접속 처리를 수행하도록 합니다. 버전 체크에 실패한 경우에는 그대로 버전 업 시퀀스로 진입합니다. 이렇게 하면 버전을 업데이트하여 플레이 중인 모든 플레이어에게도 버전 체크를 강제할 수 있습니다. 임시 클라이언트ID 활용 ProjectToken 을 조합하면, 실행 시 앱에 내장되어 있는 클라이언트ID/시크릿에는 “로그인과 버전 체크만 가능\"한 최소한의 권한만 부여해 두고, 버전 체크 통과 후에 얻는 ProjectToken 을 통해 게임 플레이에 필요한 강력한 권한을 행사하는 2단계 인증 구성을 취할 수 있습니다. 이를 통해 앱의 리버스 엔지니어링으로 클라이언트ID/시크릿이 유출되더라도, 피해를 버전 체크 돌파 수준으로 한정할 수 있습니다. 상세 레퍼런스 GS2-Version API 레퍼런스","lang":"ko","section":"microservices","summary":"버전 체크 기능\n","title":"GS2-Version","url":"/ko/microservices/version/"},{"content":"Game Server Services 이용을 시작하려면, 먼저 계정 등록이 필요합니다. 계정 등록은 https://gs2.io 페이지 하단에서 할 수 있습니다. 이 단계에서 개발자가 이용할 계정의 운영 방침에 대해 검토할 필요가 있습니다. 개발자가 각자 전용 계정을 만들어 개발 공유 계정으로 개발 개발자가 각자 전용 계정을 만들어 개발 GS2에서는 이 방법을 권장하고 있습니다. 개발자가 전용 계정을 만들고 전용 환경에서 개발을 진행함으로써, 다른 개발자의 GS2 설정 변경에 영향을 받지 않고 원활하게 개발을 진행할 수 있습니다. GS2에서는 개발자 간에 GS2 리소스 설정을 공유하는 방법을 제공하고 있으며, 이 기능을 활용하면 전용 개발 환경을 최소한의 수고로 유지·관리할 수 있습니다. Project \"1\" *-- \"many\" Developer Developer \"1\" -- \"1\" Gs2Account Gs2Account \"1\" *-- \"many\" Gs2Project Gs2Project \"1\" *-- \"many\" GS2Resources 이 방법을 채택했을 때 비용도 신경 쓰이는 부분일 수 있습니다. GS2에서는 Pay-as-you-go 방식의 요금 청구를 하고 있기 때문에, 계정 수나 프로젝트 수가 늘어난다고 해서 추가 비용이 발생하지는 않습니다. 그 방법에 대해서는 이후 단계에서 설명합니다. 공유 계정으로 개발 프로젝트용 GS2 계정, 또는 개발용 GS2 계정을 만들고, 해당 계정 내에 개발용 프로젝트를 생성합니다. 프로젝트별로 프로젝트 관리 기능에 접근 가능한 서브 계정을 만들 수 있으므로, 이 구조를 이용하여 하나의 프로젝트를 여러 명이 관리할 수 있습니다. Project \"1\" *-- \"1\" \"Gs2Project(Dev Env)\" \"Gs2Project(Dev Env)\" \"1\" *-- \"many\" User User \"1\" -- \"1\" LoginPassword User \"1\" -- \"1\" Developer","lang":"ko","section":"overview","summary":"GS2 계정 등록 절차와 운영 방침\n","title":"GS2의 계정을 등록","url":"/ko/overview/workflow/setup_gs2/create_account/"},{"content":"GS2는 다양한 기능을 마이크로서비스로 제공하고 있습니다. 하지만 경우에 따라서는 기능을 확장하고 싶다고 느끼는 상황이 있을 수 있습니다. GS2-Script는 Lua 언어를 이용한 스크립팅 기능을 제공하여, GS2 마이크로서비스의 기능을 확장할 수 있습니다. GS2-Script에 작성한 스크립트는 임의의 타이밍에 호출할 수 있는 것이 아니라, GS2의 각 마이크로서비스가 정의하는 트리거에 따라 실행됩니다. 예를 들어, GS2-Account에는 다음과 같은 트리거가 존재합니다. 계정 신규 생성 인증 실행 인계 정보 등록 인계 실행 각각 스크립트 실행 타이밍으로 “동기 처리\"와 “비동기 처리\"를 이용할 수 있습니다. 계정 신규 생성 시 실행되는 스크립트 예시 Request 타입 설명 namespace Namespace 네임스페이스 account Account 게임 플레이어 계정 Result 타입 필수 기본값 값 제한 설명 permit bool  계정 생성을 허가할지 여부 구현 예제 namespace = args.namespace account = args.account result = { permit=permit } GS2-Script의 동기 처리 트리거에 대해 동기 처리를 설정하면, 스크립트 실행이 완료될 때까지 API 처리가 블록됩니다. 스크립트 실행 시간만큼 API 응답 속도가 느려지는 대신 “스크립트로부터 결과를 변조\"하거나 “처리를 중단\"할 수 있습니다. 조금 더 구체적인 예를 들면, 스크립트에서 퀘스트의 획득 경험치량을 2배로 다시 쓰거나, 퀘스트 시작 처리에서 편성된 파티에 특정 캐릭터가 포함되어 있지 않으면 오류로 응답하게 할 수 있습니다. GS2-Script의 비동기 처리 트리거에 대해 비동기 처리를 설정하면, API가 응답한 후에 비동기 처리로 스크립트가 실행됩니다. 아이템 보유 수량으로 랭킹을 구현하고 싶은 경우, 아이템을 입수·소비했을 때의 트리거에 비동기 스크립트를 할당함으로써, API의 응답 속도를 저해하지 않으면서, 스크립트 내에서 아이템 보유 수량을 점수로 랭킹에 등록하는 처리를 할 수 있습니다. Amazon Event Bridge의 비동기 처리 GS2는 비동기 처리의 구현 방법으로, AWS가 제공하는 “Amazon Event Bridge\"를 이용할 수 있습니다. “Amazon Event Bridge\"의 이용 방법에 대해서는 별도 자료를 참고해 주세요.","lang":"ko","section":"overview","summary":"GS2 마이크로서비스의 기능 확장 방법\n","title":"GS2의 기능 확장","url":"/ko/overview/workflow/coding/extend/"},{"content":"소개 GS2 States Language(GSL)는 고유한 구조를 가진 스테이트 머신 정의 언어입니다. 스테이트 머신은 일반적으로 여러 상태를 나타내는 Task와 태스크 간의 전환을 나타내는 Transition으로 구성됩니다. 외부에서 메시지를 전송하면 Transition에 의해 정해진 규칙에 따라 「실행 중인 Task」가 전환되어 상태를 관리합니다. 스테이트 머신은 「실행 중인 Task」 외에 「상태 변수」를 가지고 있습니다. Task에는 몇 가지 종류가 있으며, 일반적으로 GS2-Script를 실행하여 처리를 기술할 수 있습니다. GS2-Script는 「상태 변수」를 참조할 수 있으며, 스크립트 실행 결과로 「상태 변수」를 다시 쓸 수 있습니다. (C) Game Server Services Inc. and affiliates. GSL 사양의 구현 및 파생 사양은 무상으로 허용합니다. 단, 위 저작권 표시를 파생물에 포함해야 합니다. 본 사양의 파생물을 서브라이선스하거나 판매할 수 없습니다. 본 사양은 「있는 그대로」 제공되며, 본 사양이 타사의 저작권 등을 침해하지 않는다는 것을 보증하지 않습니다. 본 사용으로 인해 발생하는 모든 청구, 손해, 기타 책임에 대해서도 Game Server Services, Inc.는 책임을 지지 않습니다. 본 사양서에 포함된 샘플 코드는 별도로 명시되지 않는 한 Apache License, Version 2.0 하에 라이선스됩니다. GSL 예제 StateMachine MainStateMachine { Variables { int counter; } EntryPoint Task1; Task Task1(int initCounter) { Event StartLoop(); Event Error(string Reason); Payload { args.variables.counter = args.params.initCounter result = { event=\"StartLoop\", params={}, updatedVariables=args.variables } } } SubStateMachineTask Task2 { using SubStateMachine; in (initCounter counter); } WaitTask WaitForExternalEvent { Event ExternalEvent(int newCounter); } Task Task3(int newCounter) { Event Pass(); Payload { print(args.variables.counter) print(args.params.newCounter) result = { event=\"Pass\", params={}, updatedVariables=args.variables } } } PassTask Pass; ErrorTask Error(string reason); Transition Task1 handling StartLoop -\u003e Task2; Transition Task2 handling Pass -\u003e WaitForExternalEvent; Transition Task2 handling Error -\u003e Error; Transition WaitForExternalEvent handling ExternalEvent -\u003e Task3; Transition Task3 handling Pass -\u003e Pass; } StateMachine SubStateMachine { Variables { int currentCounter; int loopCounter; } EntryPoint SubTask1; Task SubTask1(int initCounter) { Event Pass(); Event Error(string reason); Script grn:gs2:{region}:{ownerId}:script:state-machine-0001:script:SubTask1 } Task SubTask2(int currentCounter) { Event IncrementCounter(); Event Pass(); Event Error(string reason); Script grn:gs2:{region}:{ownerId}:script:state-machine-0001:script:SubTask2 } PassTask Pass; ErrorTask Error(string reason); Transition SubTask1 handling Pass -\u003e SubTask2; Transition SubTask1 handling Error -\u003e Error; Transition SubTask2 handling IncrementCounter -\u003e SubTask2; Transition SubTask2 handling Pass -\u003e Pass; Transition SubTask2 handling Error -\u003e Error; } 샘플에 대응하는 GS2-Script 예제 SubTask1 args.variables.currentCounter = args.params.initCounter args.variables.loopCounter = 0 result = { event=\"Pass\", params={}, updatedVariables=args.variables } SubTask2 args.variables.loopCounter = args.variables.loopCounter + 1 if args.variables.currentCounter 언어 사양 StateMachine StateMachine ${name} { } StateMachine 블록은 스테이트 머신을 정의하기 위해 사용하며, 파일 내에 여러 개를 기술할 수 있습니다. StateMachine에는 이름을 붙일 수 있으며, 파일 내에서 고유해야 합니다. Variables Variables { string ${variableName}; int ${variableName}; float ${variableName}; bool ${variableName}; } Variables 블록에서는 스테이트 머신이 가지는 상태 변수를 지정할 수 있습니다. 상태 변수는 「데이터 타입」과 「변수명」으로 구성됩니다. 데이터 타입에는 다음 종류를 지정할 수 있습니다. 이름 데이터 타입 string 문자열 int 64비트 부호 있는 정수 값 float 64비트 부동소수점 수 bool 불리언 값 EntryPoint EntryPoint ${taskName}; EntryPoint에는 스테이트 머신을 시작했을 때 최초로 전환되는 태스크를 지정합니다. Task Task는 상태를 나타내는 노드를 정의합니다. 노드에는 용도에 따라 몇 가지 종류가 존재합니다. Task Task ${taskName}(sting ${argumentName}, int ${argumentName}) { Event ${eventName}(); Event Error(string Reason); Script ${scriptId} } Task 블록은 가장 일반적인 노드로, GS2-Script의 스크립트를 실행합니다. Task에는 이름을 붙일 수 있지만, StateMachine 내에서 고유해야 합니다. 여기서 정의한 이름은 태스크 간 Transition을 지정하는 데 사용합니다. Task ${taskName}(sting ${argumentName}, int ${argumentName}) Task는 인수를 받을 수 있습니다. 인수는 없음, 단수, 또는 복수로 지정할 수 있습니다. 인수 선언에는 「데이터 타입 변수명」을 사용하며, 여러 인수를 사용할 경우 쉼표로 구분합니다. Event ${eventName}(); Event는 태스크 실행 중에 수신하는 이벤트의 종류를 정의합니다. Event는 여러 개 정의할 수 있습니다. 이벤트에는 이름을 붙일 수 있으며, 이벤트에 추가할 파라미터도 지정할 수 있습니다. Event Error(string Reason); 주의할 점으로, Error(string Reason)라는 이벤트는 반드시 선언해야 합니다. 이는 스크립트 내에서 오류가 발생했을 때 메시지를 전송할 수도 있지만, 스크립트 실행에 실패하는 등 내부 처리에서도 전송될 수 있습니다. Script ${scriptId} Script는 태스크로 전환되었을 때 실행할 GS2-Script의 스크립트 GRN을 지정합니다. Payload { result = { event=\"Event\", params={}, updatedVariables=args.variables } } Payload는 태스크로 전환되었을 때 실행할 GS2-Script를 직접 지정합니다. Task는 Script 또는 Payload 중 하나를 반드시 구현해야 합니다. 두 가지를 동시에 기술한 경우에는 Script가 채택됩니다. SubStateMachineTask SubStateMachineTask ${taskName} { using ${nextStateMachine}; in (${inputArgumentName} ${variableName}); } SubStateMachineTask는 처리를 다른 스테이트 머신으로 이관하는 처리를 정의합니다. nextStateMachine에는 전환할 대상 스테이트 머신의 이름을 지정합니다. in (${inputArgumentName} in에는 전환 대상 스테이트 머신의 엔트리 포인트에 전달할 인수를 지정합니다. inputArgumentName에는 엔트리 포인트로 지정한 태스크가 받는 인수의 이름을 지정하고, variableName에는 인수에 전달할 값을 전환 전 스테이트 머신이 가진 상태 변수명으로 지정합니다. out (${outputVariableName} -\u003e ${variableName}); out에는 전환 대상 스테이트 머신이 PassTask로 전환되었을 때 받는 파라미터를 지정합니다. outputVariableName에는 전환 대상 스테이트 머신이 가진 상태 변수의 이름을 지정하고, variableName에는 돌아온 결과를 받는 현재 스테이트 머신의 상태 변수 이름을 지정합니다. WaitTask WaitTask ${taskName} { Event ${eventName}(sting ${argumentName}, int ${argumentName}); } WaitTask는 특별히 아무것도 하지 않는 태스크입니다. 다만 외부로부터의 메시지 전송을 대기합니다. 일반적으로 클라이언트에서 진행되는 게임의 결과를 기다리는 데 사용합니다. Event ${eventName}(sting ${argumentName}, int ${argumentName}); Event는 태스크 실행 중에 수신하는 이벤트의 종류를 정의합니다. Event는 여러 개 정의할 수 있습니다. 이벤트에는 수신할 이벤트를 식별하는 이름을 붙일 수 있으며, 이벤트에 추가할 파라미터도 지정할 수 있습니다. PassTask PassTask Pass; PassTask는 필수 노드로, 스테이트 머신의 완료를 나타내는 태스크입니다. PassTask의 이름은 반드시 Pass여야 합니다. ErrorTask ErrorTask Error(string reason); ErrorTask는 필수 노드로, 스테이트 머신의 비정상 종료를 나타내는 태스크입니다. ErrorTask의 이름은 반드시 Error여야 합니다. Transition Transition ${taskName} handling ${eventName} -\u003e ${nextTaskName}; Transition은 노드 간의 전환을 나타냅니다. taskName에는 전환 전 태스크명을, eventName에는 수신한 이벤트의 종류를, nextTaskName에는 전환 대상 태스크명을 지정합니다.","lang":"ko","section":"api_reference","summary":"소개GS2 States Language(GSL)는 고유한 구조를 가진 스테이트 머신 정의 언어입니다. 스테이트 머신은 일반적으로 여러 상태를 나타내는 Task와 태스크 간의 전환을 나타내는 Transition으로 구성됩니다. 외부에서 메시지를 전송하면 Transition에 의해 정해진 규칙에 따라 「실행 중인 Task」가 전환되어 상태를 관리합니다.\n스테이트 머신은 「실행 중인 Task」 외에 「상태 변수」를 가지고 있습니다. Task에는 몇 가지 종류가 있으며, 일반적으로 GS2-Script를 실행하여 처리를 기술할 수 있습니다. GS2-Script는 「상태 변수」를 참조할 수 있으며, 스크립트 실행 결과로 「상태 변수」를 다시 쓸 수 있습니다.\n","title":"GS2 States Language 포맷","url":"/ko/api_reference/state_machine/format/"},{"content":"프레젠트 박스 기능을 구현합니다. 리포지토리 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Inbox GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Inbox/initialize_inbox_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같이 표시됩니다. 실행하면 상단에는 아무것도 없고 하단에 메뉴가 표시되는 화면이 나타납니다. 메뉴에서 “Send” 버튼을 3번 눌러 봅니다. 3통의 메시지가 목록으로 표시됩니다. 이처럼 화면 상단에는 프레젠트 박스에 도착한 메시지 목록이 표시됩니다. 이번에는 메뉴에서 “Send With Expire” 버튼을 눌러 봅니다. 메시지 목록에 새로 유효기간이 설정된 메시지 목록이 표시됩니다. 일시 표기가 두 줄로 표시되는데, 위쪽이 수신 일시이고 아래쪽이 유효기간입니다. 유효기간은 수신 일시로부터 1분 후로 설정되어 있습니다. 이대로 1분간 기다려 주세요. 유효기간이 지난 메시지는 자동으로 표시되지 않게 됩니다. 다음으로, 3통 중 가운데에 있는 메시지의 “Read” 버튼을 눌러 봅니다. 이미 읽은 메시지는 Read 버튼이 회색으로 비활성화됩니다. 프로젝트 해설 씬의 계층 구조(Hierarchy)에 주목해 주세요. Canvas/InboxWindow Gs2InboxNamespaceContext 이 GameObject 이하의 노드에서 다룰 GS2-Inbox의 네임스페이스를 지정하고 있습니다. 이번에는 GS2-Inbox의 inbox-0001이라는 네임스페이스를 지정하고 있습니다. Canvas/InboxWindow/Inbox/…/Content Gs2InboxOwnMessageListFetcher NamespaceContext에서 지정된 네임스페이스의 메시지 목록을 취득합니다. Gs2InboxOwnMessageList Gs2InboxOwnMessageListFetcher에서 취득한 메시지를 지정된 프리팹에 할당하여 생성합니다. Maximum Items에는 프리팹을 생성할 최대 개수를 지정합니다. 이번에는 자식 노드에 있는 Message를 프리팹으로 지정하고 있습니다. 프리팹으로 지정된 GameObject가 씬 내에 있는 경우, 해당 GameObject는 비활성화되고 그 외에 Maximum Items에서 지정된 수만큼 GameObject가 생성됩니다. Canvas/InboxWindow/Inbox/…/Content/Message Gs2InboxOwnMessageContext 이 GameObject 이하의 노드에서 다룰 메시지를 지정하고 있습니다. 컨텍스트의 내용은 Gs2InboxOwnMessageList에 의해 할당됩니다. Gs2InboxOwnMessageFetcher Gs2InboxOwnMessageContext에서 지정된 메시지를 취득합니다. Canvas/InboxWindow/Inbox/…/Content/Message/Metadata 메시지의 페이로드를 표시합니다. Gs2InboxOwnMessageLabel 메시지의 내용을 Format에서 지정한 형식으로 정형화합니다. 정형화된 텍스트는 OnUpdate(String)로 콜백되며, 여기서 Text 컴포넌트에 값을 반영합니다. Canvas/InboxWindow/Inbox/…/Content/Message/Timestamp Gs2InboxOwnMessageExpiresAtEnabler 메시지에 설정된 유효기간 값을 기반으로 표시·비표시를 제어합니다. 유효기간이 설정되어 있는 경우 ExpiresAt이 활성화되도록 설정되어 있습니다. Canvas/InboxWindow/Inbox/…/Content/Message/Timestamp/ReceivedAt Gs2InboxOwnMessageLabel 메시지의 수신 일시를 표시하고 있습니다. 정형화 방식은 Format으로 지정하며, 정형화된 텍스트는 OnUpdate(String)로 콜백되며, 여기서 Text 컴포넌트에 값을 반영합니다. Canvas/InboxWindow/Inbox/…/Content/Message/Timestamp/ExpiresAt Gs2InboxOwnMessageLabel 메시지의 유효기간을 표시하고 있습니다. 정형화 방식은 Format으로 지정하며, 정형화된 텍스트는 OnUpdate(String)로 콜백되며, 여기서 Text 컴포넌트에 값을 반영합니다. Canvas/InboxWindow/Inbox/…/Content/Message/Control Gs2InboxOwnMessageIsReadEnabler 메시지의 읽음 상태 값을 기반으로 표시·비표시를 제어합니다. 미읽음 상태인 경우 Read를 활성화하고, 읽음 상태인 경우 AlreadyRead를 활성화합니다. Canvas/InboxWindow/Inbox/…/Content/Message/Control/Gs2InboxMessageReadAction 이 컨텍스트 메뉴에서 프리팹을 추가할 수 있습니다. 프리팹을 활성화함으로써 Gs2InboxOwnMessageContext에서 지정한 메시지를 읽음 상태로 만듭니다. OnReadComplete(String) 에 읽음 처리가 정상적으로 완료되었을 때의 콜백을 설정할 수 있으며, 자기 자신을 비활성화합니다. Canvas/InboxWindow/Input/Send Gs2ExchangeRateModelContext GS2-Inbox의 메시지를 전송하는 GS2-Exchange의 교환 레이트를 설정합니다. 여기서는 GS2-Exchange의 exchange-0002라는 이름의 네임스페이스에 있는 SendMessage라는 이름의 교환 레이트를 지정하고 있습니다. Canvas/ExperienceWindow/Input/Send/Gs2ExchangeExchangeExchangeAction Count에 교환 수량을 지정하고, 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext에서 지정한 교환 레이트의 교환을 실행합니다. OnExchangeComplete(String) 에 교환 처리가 정상적으로 완료되었을 때의 콜백을 설정할 수 있으며, 자기 자신을 비활성화합니다. Canvas/InboxWindow/Input/Send With Expire Gs2ExchangeRateModelContext GS2-Inbox의 유효기간이 있는 메시지를 전송하는 GS2-Exchange의 교환 레이트를 설정합니다. 여기서는 GS2-Exchange의 exchange-0002라는 이름의 네임스페이스에 있는 SendMessageWithExpire라는 이름의 교환 레이트를 지정하고 있습니다. Canvas/ExperienceWindow/Input/Send With Expire/Gs2ExchangeExchangeExchangeAction Count에 교환 수량을 지정하고, 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext에서 지정한 교환 레이트의 교환을 실행합니다. OnExchangeComplete(String) 에 교환 처리가 정상적으로 완료되었을 때의 콜백을 설정할 수 있으며, 자기 자신을 비활성화합니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으니 그쪽을 참조해 주세요.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity를 사용한 GS2-Inbox 기능 구현 샘플 소개","title":"Inbox(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/inbox/"},{"content":"인벤토리 기능을 구현합니다. 리포지토리 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Inventory GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Inventory/initialize_inventory_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같은 화면이 됩니다. 실행하면 오른쪽 위에 인벤토리 용량 사용 현황이 표시되고, 하단에 인벤토리 조작 버튼이 표시됩니다. “Acquire Potion\"을 클릭합니다. 그러면 포션을 10개 입수할 수 있으며, 화면 상단에 포션이 표시됩니다. 마찬가지로, 다음은 에테르를 입수하기 위해 “Acquire Ether\"를 클릭합니다. 포션 옆에 에테르가 추가됩니다. 참고로, 오른쪽 위의 인벤토리 사용량도 2/10 이 되어 있습니다. 다음으로, 포션의 최대 스택 수는 99개 로 설정되어 있으므로 “Acquire Potion\"을 9번 더 클릭하여 100개를 가지고 있는 상태로 만들어 봅니다. 이처럼 포션이 2개의 스택으로 나뉘고, 인벤토리 사용량도 3/10 이 되었습니다. 포션이나 에테르의 아이콘을 클릭하면 아이템을 소비할 수 있습니다. 99개 스택되어 있는 포션을 클릭해 봅시다. 아이템은 스택을 명시적으로 지정하여 소비할 수 있으며, 이 경우 채워 넣는 처리는 이루어지지 않으므로 98개 스택된 포션과 1개 스택된 포션이 됩니다. 다음은 1개 스택되어 있는 포션을 클릭해 봅니다. 이처럼 스택의 총 수가 2개가 되고, 인벤토리 소비량도 2/10 이 되었습니다. 프로젝트 해설 씬의 계층 구조에 주목해 주세요. Canvas/InventoryWindow Gs2InventoryOwnInventoryContext 이 GameObject 이하의 노드에서 다루는 GS2-Inventory 의 인벤토리(스탠다드)를 지정하고 있습니다. 이번에는 GS2-Inventory 의 inventory-0001 이라는 네임스페이스의 Bag 이라는 인벤토리를 지정하고 있습니다. Canvas/InventoryWindow/Capacity Gs2InventoryInventoryEnabler Gs2InventoryOwnInventoryContext 에서 지정한 인벤토리의 로드가 끝나면 InventoryCapacityText GameObject 가 활성화됩니다. Canvas/InventoryWindow/Capacity/InventoryCapacityText Gs2InventoryInventoryLabel 현재 인벤토리 사용량/현재 인벤토리 최대량 을 Format 에 지정하고 있습니다. 정형된 텍스트는 OnUpdate(String) 로 콜백되어, 거기서부터 Text 컴포넌트에 값을 반영합니다. Canvas/InventoryWindow/Inventory/…/Content Gs2InventoryOwnItemSetListFetcher Gs2InventoryOwnInventoryContext 에서 지정된 네임스페이스의 아이템 목록을 가져옵니다. Gs2InventoryOwnItemSetList Gs2InventoryOwnItemSetListFetcher 로 가져온 아이템을 지정된 프리팹에 할당하여 생성합니다. Maximum Items 에는 프리팹을 생성할 최대 수를 지정합니다. 이번에는 자식 노드에 있는 Item 을 프리팹으로 지정하고 있습니다. 프리팹으로 지정된 GameObject 가 씬 안에 있는 경우, 해당 GameObject 는 비활성화되고, 그 외에 Maximum Items 로 지정된 수만큼 GameObject 가 생성됩니다. Canvas/InventoryWindow/Inventory/…/Content/Item Gs2InventoryOwnItemSetContext 이 GameObject 이하의 노드에서 다루는 아이템을 지정하고 있습니다. 컨텍스트의 내용은 Gs2InventoryOwnItemSetList 에 의해 할당됩니다. Gs2InventoryItemModelFetcher Gs2InventoryOwnItemSetContext 에서 지정된 아이템 모델을 가져옵니다. Gs2InventoryOwnItemSetFetcher Gs2InventoryOwnItemSetContext 에서 지정된 아이템을 가져옵니다. Canvas/InventoryWindow/Inventory/…/Content/Item/Icon Gs2InventoryItemModelNameEnabler 할당된 아이템 모델의 이름에 따라 활성화할 GameObject 를 전환합니다. Potion 인 경우에는 PotionImage 를 활성화하고, Ether 인 경우에는 EnterImage 를 활성화합니다. 그 결과, 목록에 표시되는 아이템의 종류에 따라 아이템 아이콘이 바뀝니다. Canvas/InventoryWindow/Inventory/…/Content/Item/Name Gs2InventoryItemModelLabel 할당된 아이템 모델의 내용을 Format 에서 지정한 형식으로 정형합니다. 정형된 텍스트는 OnUpdate(String) 로 콜백되어, 거기서부터 Text 컴포넌트에 값을 반영합니다. Canvas/InventoryWindow/Inventory/…/Content/Item/Count Gs2InventoryOwnItemSetLabel 할당된 아이템 세트의 내용을 Format 에서 지정한 형식으로 정형합니다. 정형된 텍스트는 OnUpdate(String) 로 콜백되어, 거기서부터 Text 컴포넌트에 값을 반영합니다. Canvas/InventoryWindow/Inventory/…/Content/Item/Use/Gs2InventoryItemSetConsumeAction 이 컨텍스트 메뉴에서 프리팹을 추가할 수 있습니다. Gs2InventoryItemSetConsumeAction Consume Count 로 소비할 수량을 지정할 수 있습니다. 프리팹을 활성화함으로써 Gs2InventoryOwnItemSetContext 에서 지정한 아이템을 소비합니다. Canvas/InventoryWindow/Input/Acquire Potion Gs2ExchangeRateModelContext GS2-Inventory 의 Potion 을 입수하기 위한 GS2-Exchange 의 교환 비율을 설정합니다. 여기서는 GS2-Exchange 의 exchange-0001 이라는 이름의 네임스페이스 의 Potion 이라는 이름의 교환 비율을 지정하고 있습니다. Canvas/InventoryWindow/Input/Acquire Potion/Gs2ExchangeExchangeExchangeAction Gs2ExchangeExchangeExchangeAction Count 로 교환할 수량을 지정할 수 있습니다. 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext 에서 지정한 교환을 실행합니다. Canvas/InventoryWindow/Input/Acquire Ether Gs2ExchangeRateModelContext GS2-Inventory 의 Ether 를 입수하기 위한 GS2-Exchange 의 교환 비율을 설정합니다. 여기서는 GS2-Exchange 의 exchange-0001 이라는 이름의 네임스페이스 의 Potion 이라는 이름의 교환 비율을 지정하고 있습니다. Canvas/InventoryWindow/Input/Acquire Ether/Gs2ExchangeExchangeExchangeAction Gs2ExchangeExchangeExchangeAction Count 로 교환할 수량을 지정할 수 있습니다. 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext 에서 지정한 교환을 실행합니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으니 그쪽을 참조해 주십시오.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity를 사용한 GS2-Inventory 기능 구현 샘플 소개","title":"Inventory(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/inventory/"},{"content":"과금 통화의 잔액 관리를 구현합니다. 리포지토리 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Money GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Money/initialize_money_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같은 화면이 나타납니다. 실행하면 이처럼 과금 통화의 잔액이 표시됩니다. 먼저 “Deposit(Free)“를 클릭합니다. 잔액이 1000이 됩니다. 다음으로 “Deposit(Paid)“를 클릭합니다. 잔액이 2000이 됩니다. 내부적으로는 무상과 유상을 별도의 데이터로 취급하지만, 이 샘플에서는 총량을 표시하고 있습니다. 다음으로 “Withdraw\"를 클릭합니다. 잔액이 1900이 됩니다. 프로젝트 설명 씬의 계층 구조에 주목해 주세요. Canvas/MoneyWindow Gs2MoneyOwnWalletContext 이 GameObject 이하의 노드에서 다루는 GS2-Money의 지갑을 지정합니다. 이번에는 GS2-Money의 money-0001이라는 네임스페이스의 슬롯 0 지갑을 지정하고 있습니다. Canvas/MoneyWindow/Wallet/Contents/WalletValue Gs2MoneyOwnWalletEnabler Gs2MoneyOwnWalletContext에서 지정한 지갑의 로드가 끝나면 Value GameObject를 활성화합니다. Canvas/MoneyWindow/Wallet/Contents/WalletValue/Value Gs2MoneyOwnWalletLabel Gs2MoneyOwnWalletContext에서 지정한 지갑을 Format으로 지정한 형식으로 정형화합니다. 정형화된 텍스트는 OnUpdate(String)에 콜백되며, 여기서 Text 컴포넌트에 값을 반영합니다. Canvas/MoneyWindow/Input/Withdraw/Gs2MoneyWalletWithdrawAction 과금 통화의 잔액을 감소시킵니다. Gs2MoneyWalletWithdrawAction Count에 소비할 수량을 지정합니다. OnWithdrawComplete(EzWallet)에 소비가 끝났을 때 콜백이 반환됩니다. Canvas/MoneyWindow/Input/DepositFree Gs2ExchangeRateModelContext GS2-Money의 무상 통화를 가산하는 GS2-Exchange의 교환 비율을 설정합니다. 여기서는 GS2-Exchange의 exchange-0005라는 이름의 네임스페이스에 있는 Gem0to1000이라는 이름의 교환 비율을 지정하고 있습니다. Canvas/MoneyWindow/Input/DepositFree/Gs2ExchangeExchangeExchangeAction 무상 과금 통화의 잔액을 가산합니다. Gs2ExchangeExchangeExchangeAction Count에 교환할 수량을 지정합니다. Canvas/MoneyWindow/Input/DepositPaid Gs2ExchangeRateModelContext GS2-Money의 유상 통화를 가산하는 GS2-Exchange의 교환 비율을 설정합니다. 여기서는 GS2-Exchange의 exchange-0005라는 이름의 네임스페이스에 있는 Gem1000to1000이라는 이름의 교환 비율을 지정하고 있습니다. Canvas/MoneyWindow/Input/DepositPaid/Gs2ExchangeExchangeExchangeAction 유상 과금 통화의 잔액을 가산합니다. Gs2ExchangeExchangeExchangeAction Count에 교환할 수량을 지정합니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으니 그쪽을 참조해 주세요.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity를 사용한 GS2-Money 기능 구현 샘플 소개","title":"Money(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/money/"},{"content":"과금 통화의 판매 기능을 구현합니다. 리포지토리 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/MoneyStore GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/MoneyStore/initialize_money_store_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같은 모습이 됩니다. 실행하면 이와 같이 판매 중인 상품 목록이 표시됩니다. “¥100 x100” 의 “Buy\"를 클릭합니다. 잔고가 100이 되었습니다. Editor 에서는 표시되지 않지만, iOS 나 Android 에서 실행하면 결제 시퀀스가 개입합니다. 프로젝트 해설 씬의 계층 구조에 주목해 주십시오. Canvas/MoneyStoreWindow/Wallet 과금 통화의 잔고를 표시하고 있습니다. Money 샘플 에서 설명하고 있으니 그쪽을 참조해 주십시오. Canvas/MoneyStoreWindow/Store Gs2ShowcaseOwnShowcaseContext 이 GameObject 이하의 노드에서 다루는 GS2-Showcase 의 진열대를 지정하고 있습니다. 이번에는 GS2-Showcase 의 showcase-0001 이라는 네임스페이스의 GenStore 라는 이름의 진열대를 지정하고 있습니다. Gs2ShowcaseOwnShowcaseFetcher Gs2ShowcaseOwnShowcaseContext 에서 지정한 진열대의 정보를 취득합니다. Canvas/MoneyStoreWindow/Store/…/Content Gs2ShowcaseOwnDisplayItemList Gs2ShowcaseOwnShowcaseFetcher 로 취득한 진열대에 진열된 상품을 지정된 프리팹에 할당하여 생성합니다. Maximum Items 에는 프리팹을 생성할 최대 수를 지정합니다. 이번에는 자식 노드에 있는 DisplayItem 을 프리팹으로 지정하고 있습니다. 프리팹으로 지정된 GameObject 가 씬 안에 있는 경우, 해당 GameObject 는 비활성화되고, 그 외에 Maximum Items 로 지정된 수만큼 GameObject 가 생성됩니다. Canvas/MoneyStoreWindow/Store/…/Content/DisplayItem Gs2ShowcaseOwnDisplayItemContext 이 GameObject 이하의 노드에서 다루는 상품을 지정하고 있습니다. 컨텍스트의 내용은 Gs2ShowcaseOwnDisplayItemList 에 의해 할당됩니다. Gs2ShowcaseOwnDisplayItemFetcher 진열되어 있는 상품의 상세 정보를 취득합니다. Canvas/MoneyStoreWindow/Store/…/Content/DisplayItem/Icon Gs2ShowcaseOwnSalesItemNameEnabler 진열되어 있는 상품의 이름을 사용하여 GameObject 의 표시·비표시를 제어합니다. 상품별로 표시할 이미지를 전환하는 데 사용하고 있습니다. Canvas/MoneyStoreWindow/Store/…/Content/DisplayItem/Price Gs2MoneyDepositByUserIdFetcher DisplayItem 의 AcquireActions 에서 Gs2MoneyDepositByUserId 를 꺼냅니다. Gs2MoneyDepositByUserIdLabel Gs2MoneyDepositByUserId 에 설정된 파라미터를 Format 으로 지정된 형식으로 정리합니다. 정리된 텍스트는 OnUpdate(String) 로 콜백되어, 그곳에서 Text 컴포넌트에 값을 반영합니다. Canvas/MoneyStoreWindow/Store/…/Content/DisplayItem/Count Gs2MoneyDepositByUserIdFetcher DisplayItem 의 AcquireActions 에서 Gs2MoneyDepositByUserId 를 꺼냅니다. Gs2MoneyDepositByUserIdLabel Gs2MoneyDepositByUserId 에 설정된 파라미터를 Format 으로 지정된 형식으로 정리합니다. 정리된 텍스트는 OnUpdate(String) 로 콜백되어, 그곳에서 Text 컴포넌트에 값을 반영합니다. Canvas/MoneyStoreWindow/Store/…/Content/DisplayItem/Buy/Gs2ShowcaseShowcaseBuyAction 이 컨텍스트 메뉴에서 프리팹을 추가할 수 있습니다. Gs2ShowcaseShowcaseBuyAction Quantity 로 구매할 수량을 지정할 수 있습니다. 프리팹을 활성화함으로써 Gs2ShowcaseDisplayItemContext 에서 지정한 상품을 구매합니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으니 그쪽을 참조해 주십시오.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity 를 사용한 GS2-Money + GS2-Showcase 기능 구현 샘플 소개","title":"MoneyStore(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/money_store/"},{"content":"구매 횟수 제한이 있는 세일 판매 기능이 포함된 과금 통화 판매 기능을 구현합니다. 리포지토리 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/MoneyStoreWithSale GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/MoneyStoreWithSale/initialize_money_store_with_sale_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같은 화면이 나타납니다. 실행하면 MoneyStore 샘플과 달리 구매 횟수 제한이 있는 상품이 진열되어 있습니다. “¥10000 x 16000\"의 “Buy\"를 클릭합니다. 구매 횟수 제한 표기가 1/2가 되고, 잔액이 16000이 됩니다. 한 번 더 구매합니다. 구매 횟수 제한 표기가 2/2가 되고, 잔액이 32000이 됩니다. 구매 횟수 상한에 도달했으므로 “Buy” 버튼이 비활성화됩니다. 프로젝트 설명 씬의 계층 구조에 주목해 주세요. Canvas/MoneyStoreWindow/Wallet 과금 통화의 잔액을 표시하고 있습니다. Money 샘플 에서 설명하고 있으니 그쪽을 참조해 주세요. Canvas/MoneyStoreWindow/Store 과금 통화의 진열대를 표시하고 있습니다. 기본적인 구현은 MoneyStore 샘플 에서 설명하고 있으니 그쪽을 참조해 주세요. 여기서부터는 MoneyStore 샘플과의 차이점에 대해서만 설명합니다. Canvas/MoneyStoreWindow/Store/…/DisplayItem Gs2LimitCountUpByUserIdEnabler DisplayItem의 ConsumeActions에 Gs2LimitCountUpByUserId가 설정되어 있는 경우 EnableLimit이 활성화되고, 설정되어 있지 않은 경우에는 DisableLimit이 활성화됩니다. Canvas/MoneyStoreWindow/Store/…/DisplayItem/EnableLimit Gs2LimitCountUpByUserIdFetcher DisplayItem의 ConsumeActions에 설정된 Gs2LimitCountUpByUserId를 취득합니다. Gs2MoneyDepositByUserIdFetcher DisplayItem의 AcquireActions에 설정된 Gs2MoneyDepositByUserId를 취득합니다. Canvas/MoneyStoreWindow/Store/…/DisplayItem/EnableLimit/PriceAndRemain/Remain 남은 구매 가능 횟수를 표시합니다. Gs2LimitOwnCounterFetcher Gs2LimitCountUpByUserIdFetcher로 취득한 소비 액션의 카운터 값을 취득합니다. Gs2LimitOwnCounterEnabler Gs2LimitOwnCounterFetcher로 카운터 취득이 끝났는지 여부에 따라 CounterLoadingText 또는 CounterLoadedText를 활성화합니다. Canvas/MoneyStoreWindow/Store/…/DisplayItem/EnableLimit/Buy ConsumeActionsEnabler DisplayItem의 ConsumeActions에 설정된 소비 액션이 실행 조건을 충족하는지에 따라 Active 또는 InActive를 활성화합니다. 이 컴포넌트에 의해 구매 횟수 상한에 도달하면 Buy 버튼이 비활성화됩니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으니 그쪽을 참조해 주세요.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity를 사용한 GS2-Money + GS2-Showcase + GS2-Limit 기능 구현 샘플 소개","title":"MoneyStoreWithSale(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/money_store_with_sale/"},{"content":"SDK를 초기화하려면 Credential, Session이라는 객체를 생성해야 합니다. Credential GS2의 API 키를 표현하는 객체입니다. BasicGs2Credential 이라는 클래스가 정의되어 있으며, clientId / clientSecret을 사용하여 API를 이용할 때는 이 클래스를 사용합니다. BasicGs2Credential 파라미터 인자명 설명 clientId 클라이언트ID clientSecret 클라이언트시크릿 Session Session에는 HTTP 통신을 이용하는 Gs2RestSession 과 WebSocket 통신을 이용하는 Gs2WebSocketSession 의 두 가지 종류가 있습니다. 프로그래밍 언어에 따라서는 Gs2WebSocketSession 이 지원되지 않는 경우가 있으며, 또한 페이로드가 커지는 요청에는 사용할 수 없는 제약이 있습니다. 따라서 서버로부터의 푸시 알림이 필요하지 않은 경우에는 원칙적으로 Gs2RestSession 을 이용해 주십시오. Gs2RestSession Request 인자명 설명 credential Credential 객체 region 접속 대상 GS2 리전 Gs2WebSocketSession Request 인자명 설명 credential Credential 객체 region 접속 대상 GS2 리전 초기화 생성한 Session 객체는 사용하기 전에 접속 처리가 필요합니다. 세션 객체에는 접속 API가 마련되어 있으며, 이를 호출함으로써 접속을 실행할 수 있습니다. Language: Go PHP Java C# TypeScript Python session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . Open (); const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); await session . connect (); session = core . Gs2RestSession ( core . BasicGs2Credential ( \"your client id\" , \"your client secret\" ), \"ap-northeast-1\" , ) session . connect () 카오스 모드 카오스 모드를 적용한 SDK 초기화 처리를 호출함으로써 API 요청을 일정한 확률로 실패시킬 수 있습니다. 카오스 모드를 활성화한 클라이언트를 사용하여 개발을 진행함으로써 에러 핸들링을 더욱 견고하게 만들 수 있습니다. Language: C# var session = new ChaosGs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), 0.1f , // API 요청 시 10%의 확률로 재시도가 필요한 에러를 발생시킴 Region . ApNortheast1 ); yield return session . Open (); 마이크로서비스의 클라이언트 GS2가 제공하는 각 마이크로서비스마다 클라이언트가 마련되어 있습니다. 마이크로서비스의 클라이언트에도 Gs2AccountRestClient 와 Gs2AccountWebSocketClient 처럼 통신 프로토콜별 클라이언트가 마련되어 있으며, 각각 Gs2RestSession 과 Gs2WebSocketSession 을 필요로 합니다. Gs2AccountRestClient Request 인자명 설명 session Gs2RestSession Gs2AccountWebSocketClient Request 인자명 설명 session Gs2WebSocketSession 구현 예제 Language: Go PHP Java C# TypeScript Python client := account . Gs2AccountRestClient { Session : \u0026 session , } $client = new Gs2AccountRestClient ( $session ); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); var client = new Gs2AccountRestClient ( session ); const client = new Gs2Account . Gs2AccountRestClient ( session ); client = account . Gs2AccountRestClient ( session )","lang":"ko","section":"api_reference","summary":"GS2-SDK의 초기화 방법에 대해","title":"SDK","url":"/ko/api_reference/initialize/sdk/"},{"content":"GS2-SDK for Game Engine의 트랜잭션 처리에 대해 기본적인 개념과 처리 흐름은 for Game Engine 문서를 참조하십시오. 한편, GS2-SDK에서는 for Game Engine 만큼 충실한 지원은 제공되지 않습니다. 구체적으로는 캐시 기능이나 EzTransactionDomain과 같은 구조는 마련되어 있지 않습니다. 트랜잭션 실행 자동 실행이 유효한 경우 완료 통지를 받으려면 명시적으로 GS2-Gateway에 사용자ID를 설정해야 합니다. GS2-Gateway::setUserId 완료 통지를 핸들링해야 합니다. Gs2WebSocketSession 클래스에 통지를 핸들링하는 함수가 마련되어 있으므로 이를 이용하십시오. 프로그래밍 언어에 따라서는 WebSocket 클라이언트 구현이 없을 수도 있습니다. GS2-Distributor로부터 트랜잭션의 실행 완료 통지를 받으면, 명시적으로 결과를 취득해야 합니다. 실행 결과에는 오류가 포함되어 있을 수 있으며, 성공할 때까지 실행 결과는 갱신될 수 있습니다. GS2-Distributor::getStampSheetResult GS2-JobQueue로부터 잡의 실행 완료 통지를 받으면, 명시적으로 결과를 취득해야 합니다. 실행 결과에는 오류가 포함되어 있을 수 있으며, tryNumber를 지정하지 않으면 최신 결과를 취득할 수 있으므로, 이를 이용해 성공할 때까지 기다려야 합니다. GS2-JobQueue::getJobResult 자동 실행이 무효한 경우 GS2-Showcase::Buy와 같은 트랜잭션 발행 API를 호출하면, stampSheet 변수에 트랜잭션 데이터가, stampSheetEncryptionKeyId 에 트랜잭션 데이터의 서명 계산에 사용한 암호화 키의 ID가 응답됩니다. 트랜잭션 데이터와 암호화 키 정보를 GS2-Distributor에 전달하여 명시적으로 트랜잭션을 실행해야 합니다. GS2-Log에 로그를 남기고 싶은 경우에는 로그 출력 설정을 해 둔 GS2-Distributor의 네임스페이스를 지정하여 runStampSheetExpress를 호출하고, 필요하지 않은 경우에는 runStampSheetExpressWithoutNamespace를 호출합니다. GS2-Distributor::runStampSheetExpress GS2-Distributor::runStampSheetExpressWithoutNamespace runStampSheetExpress 또는 runStampSheetExpressWithoutNamespace의 실행 결과에 stampSheet 가 포함되어 있는 경우에는 해당 트랜잭션도 명시적으로 실행해야 합니다. 스탬프 시트의 입수 액션이 「Gs2JobQueue:PushByUserId」였던 경우에는, GS2-JobQueue도 실행해야 합니다. GS2-JobQueue::run","lang":"ko","section":"api_reference","summary":"GS2-SDK의 트랜잭션 처리에 대해","title":"SDK","url":"/ko/api_reference/transaction/sdk/"},{"content":"스태미나 기능을 구현합니다. 리포지토리 https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Stamina GS2-Deploy 템플릿 https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Stamina/initialize_stamina_template.yaml 프로젝트 내용 프로젝트를 열면 위와 같은 화면이 됩니다. 실행하면 이처럼 스태미나의 잔량과 스태미나 조작 UI가 표시됩니다. 먼저 “Consume(5)” 버튼을 클릭합니다. 스태미나를 소비하여 잔량 표시가 “45/50\"이 되고, 회복까지의 카운트다운이 표시됩니다. 다음으로 “Recover(10)” 버튼을 클릭합니다. 스태미나 잔량이 “55/50\"이 됩니다. 최대값을 초과한 상태가 되었으므로, 다시 카운트다운은 표시되지 않게 됩니다. 프로젝트 해설 씬의 계층 구조에 주목해 주세요. Canvas/StaminaWindow Gs2StaminaOwnStaminaContext 이 GameObject 이하의 노드에서 다루는 GS2-Stamina 의 스태미나를 지정하고 있습니다. 이번에는 GS2-Stamina 의 stamina-0001 이라는 네임스페이스의 Stamina 라는 이름의 스태미나를 지정하고 있습니다. Canvas/StaminaWindow/Stamina Gs2StaminaStaminaEnabler 스태미나 로드가 끝나면 StaminaValue 를 활성화합니다. Canvas/StaminaWindow/Stamina/StaminaValue/Slider Gs2StaminaStaminaProgress 현재 스태미나 값의 최대값에 대한 비율을 0.0~1.0 으로 취득합니다. 최대값을 초과한 상태에서는 1.0 으로 반올림됩니다. 취득한 결과는 OnUpdate(Single) 에 전달되어, Slider 의 값에 반영됩니다. Canvas/StaminaWindow/Stamina/StaminaValue/Slider/Label Gs2StaminaOwnStaminaValueEnabler 스태미나가 최대값에 도달했는지에 따라 GameObject 를 활성화합니다. Canvas/StaminaWindow/Stamina/StaminaValue/Slider/Label/NextRecoverAt Gs2StaminaOwnStaminaNextRecoverAtFetcher 스태미나가 다음에 회복되는 일시를 취득합니다. 취득한 결과는 OnUpdate(int64) 로 콜백되어, Gs2CoreTimeSpanLabel 에 값을 반영합니다. Gs2CoreTimeSpanLabel 스태미나가 다음에 회복될 때까지의 남은 시간을 Format 에 지정한 형식으로 정형합니다. 정형된 텍스트는 OnUpdate(String) 으로 콜백되어, 거기서부터 Text 컴포넌트에 값을 반영합니다. Process/Gs2AutoLogin 로그인 처리를 실행하는 프리팹이 설정되어 있습니다. Account 샘플 에서 설명하고 있으니 그쪽을 참조해 주십시오.","lang":"ko","section":"articles","summary":"GS2 UIKit for Unity를 사용한 GS2-Stamina 기능 구현 샘플 소개","title":"Stamina(GS2 UIKit for Unity) 샘플","url":"/ko/articles/sample/uikit_project/stamina/"},{"content":"GS2 공식 YouTube 채널에서는 각 마이크로서비스 해설 영상, 샘플 구현 소개 영상, 운영 관련 정보 등을 공개하고 있습니다. Game Server Services JP","lang":"ko","section":"articles","summary":"공식 YouTube 채널 소개\n","title":"공식 YouTube 채널","url":"/ko/articles/sample/youtube/"},{"content":"인증 정보 추가하기 프로젝트에 크리덴셜(인증 정보) 을 추가합니다. 애플리케이션은 크리덴셜에 포함된 클라이언트ID, 클라이언트 시크릿 정보를 사용해 GS2-Identifier 인증을 수행함으로써 각종 API에 액세스할 수 있게 됩니다. 인증은 GS2-Identifier 사용자 단위로 이루어집니다. GS2-Identifier 사용자는 GS2 서비스 이용에 관한 권한 정의를 가지고 있습니다. 여기서는 애플리케이션용 액세스 권한을 가진 사용자를 추가합니다. 사용자 생성 관리 콘솔의 사이드 메뉴에서 Identifier를 선택하고 Users를 클릭합니다. 『Identifier \u003e 사용자 목록』 페이지가 열립니다. 오른쪽의 사용자 신규 생성을 선택합니다. 『Identifier \u003e 사용자 목록 \u003e 사용자 신규 생성』 페이지가 열립니다. 사용자 이름과 설명문 항목을 적절히 입력하고 생성을 클릭합니다.(예: 사용자 이름:Application 등) 크리덴셜(API 키) 생성 『Identifier \u003e 사용자 목록』 페이지에서 방금 생성한 사용자를 선택합니다. 『Identifier \u003e 사용자 목록 \u003e 사용자 정보』 페이지에서 사용자에게 크리덴셜을 추가합니다. 크리덴셜 탭에서 크리덴셜 신규 생성을 클릭합니다. 『Identifier \u003e 사용자 목록 \u003e 사용자 정보 \u003e 크리덴셜 \u003e 크리덴셜 신규 생성』 페이지에서 생성을 클릭하면 Client Id와 Client Secret이 발급됩니다. 발급된 클라이언트ID와 클라이언트 시크릿은 잘 보관해두시기 바랍니다. 사용자에게 권한 설정 새로 생성한 사용자에게 보안 정책을 할당합니다. 여기서는 표준적인 애플리케이션의 액세스 정책으로 미리 정의되어 있는 ApplicationAccess 라는 보안 정책을 할당합니다. 『Identifier \u003e 사용자 목록 \u003e 사용자 정보』 페이지의 보안 정책 탭에서 보안 정책 이름 ApplicationAccess의 할당 버튼을 클릭합니다. 이것으로 애플리케이션이 GS2 프로젝트에 액세스하기 위한 준비가 완료되었습니다.","lang":"ko","section":"get_start","summary":"관리 콘솔(Web UI)을 사용한 생성 절차\n","title":"관리 콘솔","url":"/ko/get_start/tutorial/setup_credential/ui/"},{"content":"개발자가 가장 먼저 관리 콘솔에서 해야 할 일은 네임스페이스 생성과 마스터 데이터 등록입니다. 이 작업들은 관리 콘솔에서 생성할 수 있습니다. 리전 선택 사이드 메뉴 하단에 리전 메뉴가 있습니다. 여기에서 마이크로서비스를 조작할 리전을 선택할 수 있습니다. 네임스페이스 생성 관리 콘솔에 로그인하고 마이크로서비스를 선택합니다. 네임스페이스 목록이 표시되면 네임스페이스를 새로 생성합니다. 설정 항목에 값을 입력하고 확정하면 네임스페이스 생성이 완료됩니다. 마스터 데이터 등록 마이크로서비스에 따라서는 기능을 이용하기 전에 마스터 데이터 등록이 필요한 경우가 있습니다. 마스터 데이터 등록이 필요한 마이크로서비스에는 네임스페이스 상세 페이지에 “마스터 데이터\"라는 탭이 있습니다. 탭을 선택하면 “Currently available master data could not be found\"라는 오류가 표시되며, 아직 마스터 데이터가 등록되지 않았음을 알 수 있습니다. 마스터 데이터 에디터 이용 마스터 데이터를 작성하려면 마스터 데이터 에디터를 이용할 수 있습니다. 네임스페이스 상세 페이지에 “마스터 데이터 에디터\"라는 탭이 있으니 그것을 선택합니다. 이 스크린샷은 GS2-Inventory의 예시입니다. 마스터 데이터 작성에 대해 설명하기 위해, GS2-Inventory가 어떤 마스터 데이터를 필요로 하는지 설명하겠습니다. class InventoryModel { +string 이름 +int 초기 크기 +int 최대 크기 } class ItemModel { +string 이름 +int 스택 가능한 최대 수량 +bool 스택 가능한 최대 수량을 초과했을 때, 여러 슬롯에 아이템을 보관하는 것을 허용할지 여부 +int 표시 순서 } Namespace \"1\" *-- \"many\" InventoryModel InventoryModel \"1\" *-- \"many\" ItemModel GS2-Inventory에는 용량 제한이 있는 Inventory와, Inventory에 담을 수 있는 Item의 정의가 필요합니다. Inventory에는 초기 용량과 최대 용량을, Item에는 1용량당 최대 몇 개의 아이템을 스택할 수 있는지, 아이템 소지 수량이 스택 가능한 최대치에 도달했을 때 2번째 스택을 만들지 여부를 설정합니다. Inventory Model 작성 먼저 마스터 데이터 에디터를 사용하여 Inventory Model을 작성해 봅시다. 각 항목에 값을 입력하고 작성 버튼을 누릅니다. Inventory Model 목록에 추가되면, 작성한 Inventory Model을 선택하여 상세 페이지를 엽니다. Item Model 작성 Inventory Model의 상세 페이지를 열면, 다음으로 Item Model을 작성하는 메뉴가 있습니다. 선택하여 Item Model을 작성합니다. 각 항목에 값을 입력하고 작성 버튼을 누릅니다. 마스터 데이터 내보내기 등록이 끝나면 마스터 데이터를 내보냅니다. 네임스페이스 상세 페이지로 돌아가서 마스터 데이터 에디터 탭을 선택해 주세요. 탭 페인 상단에 있는 내보내기 버튼을 누릅니다. 마스터 데이터의 JSON 파일이 출력됩니다. 마스터 데이터는 이러한 JSON 파일로 관리됩니다. 따라서 반드시 관리 콘솔의 마스터 데이터 에디터를 사용하지 않더라도, 스프레드시트로 관리하고 있는 마스터 데이터를 내보내는 프로그램을 준비해도 문제없습니다. 마스터 데이터의 JSON 포맷은 각 마이크로서비스의 프로그래밍 가이드에 상세히 기재되어 있습니다. 마스터 데이터 반영 조금 전 마스터 데이터 등록이 없다는 오류가 발생했던 “마스터 데이터” 탭을 다시 선택합니다. 마스터 데이터를 업로드하기 위한 메뉴를 선택합니다. 내보낸 JSON 파일을 선택하여 업로드합니다. 마스터 데이터가 표시되면 반영이 완료됩니다. 마스터 데이터 등록이 필요한 마이크로서비스는 모두 이 방법으로 마스터 데이터를 등록·갱신할 수 있습니다.","lang":"ko","section":"overview","summary":"관리 콘솔을 사용하여 마이크로서비스에 리소스를 생성한다\n","title":"관리 콘솔을 사용한 설정","url":"/ko/overview/workflow/setup_gs2_resources/manual_setup/"},{"content":"GS2를 더 깊이 이해하고, 게임에 통합할 때의 설계 판단을 내리기 위한 기술 자료를 모은 섹션입니다. 개별 API 레퍼런스나 각 마이크로서비스의 매뉴얼에서는 다루지 않는, 여러 마이크로서비스에 걸친 구조와 모범 사례를 다룹니다. 섹션 구성 섹션 내용 리전 GS2가 제공하는 데이터센터의 리전·존 구성과, 그에 따른 일관성 모델 접근 제어 GS2-Identifier의 사용자·보안 정책 구조 스탬프 시트 GS2의 트랜잭션 시스템인 《스탬프 시트》의 동작 원리 트랜잭션 설정 네임스페이스 설정의 TransactionSetting의 의미와 권장 설정 GS2-Deploy 템플릿 파일 사양 GS2-Deploy에서 사용하는 템플릿 파일의 서식 에러·예외 API 응답 에러의 구조와 SDK의 예외 타입, 재시도 판단 지침 SDK의 캐시 메커니즘 SDK가 내부에 가지고 있는 캐시의 구조와 활용 방침 비용 최적화 이용 요금을 절감하면서 성능을 유지하기 위한 설계 포인트 관련 섹션 마스터 데이터 관리 : 모델/모델 마스터의 차이와, 마스터 데이터의 고정화 서비스 제한 : 각 마이크로서비스의 API 호출 빈도에 관한 제한 보안 : GS2의 보안 모델과, 게임 측에서 대응해야 할 범위 GS2-Script의 유틸리티 메서드 : GS2-Script에서 사용할 수 있는 Lua 내장 함수","lang":"ko","section":"articles","summary":"GS2를 더 깊이 이해하기 위한 기술 자료\n","title":"기술 자료","url":"/ko/articles/tech/"},{"content":"GS2에서는 현재 4개 리전에서 서비스를 제공하고 있습니다. 이름 지역 ap-northeast-1 동아시아 us-east-1 북미 eu-west-1 유럽 ap-southeast-1 아시아 존 하나의 리전은 2개의 존으로 구성되어 있습니다. 이름 배치 국가·지역 ap-northeast-1 일본·한국 us-east-1 미합중국(버지니아·오레곤) eu-west-1 아일랜드·독일 ap-southeast-1 싱가포르·인도 존은 Active / Active로 구성되어 있으며, 게임 플레이어와 가까운 존이 사용됩니다. 존 사이에서는 데이터베이스가 실시간으로 동기화되지만, 1초 미만의 지연이 발생합니다. 접속 위치가 물리적으로 이동하거나, 존이 사용 불가능해지는 장애가 발생하면 자동으로 존이 전환되는 경우가 있습니다. 이러한 경우, “기록이 완료되었을 텐데 읽어보면 결과가 반영되어 있지 않은” 순간이 아주 잠깐 발생할 수 있습니다. GS2에서는 Game Engine용 SDK가 SDK 레이어에서 서버로부터 취득한 데이터를 캐싱하며, 한 번 데이터를 취득한 후 서버의 데이터가 갱신되면 자동으로 해당 캐시도 최신 상태로 갱신됩니다. 이러한 구조를 채택함으로써, 게임은 읽기 요청에 관해 통신 시간이나 비용을 신경 쓰지 않고 높은 빈도로 GS2 SDK의 API를 호출할 수 있도록 설계되어 있으며, 존 전환 시에도 최선의 노력으로 최신 정보가 캐시에 반영되도록 설계되어 있습니다. 게임 개발자 여러분은 씬 전환 시뿐만 아니라, 망설임 없이 GS2 SDK의 읽기 API를 호출해 UI에 값을 반영하도록 하면 존 전환 시의 지연을 신경 쓰지 않고도 UI에 최신 값을 반영할 수 있어, 게임 개발에 전념하실 수 있습니다. 데이터 센터 하나의 존은 3개의 데이터 센터로 구성됩니다. 데이터 센터는 물리적으로 서로 다른 장소에 구성되어 있지만, 거리상으로는 100km 미만에 배치되어 있습니다. 데이터 센터 중 한 곳이 사용 불가능해지더라도 존 전환은 발생하지 않으며, 남은 2개의 데이터 센터로 서비스가 계속 가동됩니다.","lang":"ko","section":"articles","summary":"GS2에서 이용 가능한 데이터 센터의 지역에 대해\n","title":"리전","url":"/ko/articles/tech/region/"},{"content":"용어 정의 용어 의미 모델 마스터 마스터 데이터 에디터가 임시로 등록하는, 게임 플레이어별로 달라지지 않는 데이터 모델 게임 내에서 사용하는, 게임 플레이어별로 달라지지 않는 데이터 프로퍼티 모델을 바탕으로 작성한, 게임 플레이어별로 다른 데이터 게임을 구성하는 요소에는 소지 아이템의 파라미터나 퀘스트의 구성 데이터 등, 게임 플레이어별로는 달라지지 않는 데이터가 있습니다. 이러한 데이터를 GS2에서는 모델 이라고 부릅니다. 그리고 모델을 바탕으로 게임 플레이어가 소지하는 데이터가 된 것을 프로퍼티 라고 부릅니다. 일반적인 마스터 데이터는 GS2에서는 모델 에 해당하며, GS2에는 모델 마스터 라는 개념이 존재합니다. 모델 / 모델 마스터 의 차이는 데이터의 내용은 동일하지만, 실제로 게임에서 액세스되는 상태인지 여부에 있습니다. graph TD subgraph \"관리용 데이터\" Master[모델 마스터] end subgraph \"실행용 데이터\" Model[모델] end subgraph \"플레이어 데이터\" Property[프로퍼티] end Master -- \"내보내기/반영 (Current)\" --\u003e Model Model -- \"인스턴스화\" --\u003e Property GS2의 관리 화면에서 편집할 수 있는 데이터는 모델 마스터 이며, 이를 실제로 게임 내에서 사용할 수 있는 상태로 변환하면 모델 로 바뀝니다. 이 변환 공정이 필요한 이유는 모델 마스터 에 대한 변경을 일괄로 게임 내에 반영하기 위해서입니다. 이 공정이 없으면 관리 화면에서 데이터를 갱신해 나가는 과정에서, 중간 단계의 데이터가 게임 내에 반영되어 버리게 됩니다. 마스터 데이터 작성 이 변환 공정은 모든 모델 마스터 를 일단 JSON 형식의 파일로 내보내고, 그 JSON 파일을 업로드함으로써 일괄적으로 모델 로 반영하는 구조로 되어 있습니다. GS2의 관리 화면에서 모델 마스터 를 조작하여 JSON 형식의 파일로 내보내서 이용해도 되지만, Excel이나 자체 관리 도구를 만들어 GS2에 모델 마스터 를 전혀 등록하지 않고 모델 에 데이터를 반영하는 것도 가능합니다. 또한, GS2-Deploy 템플릿 내에서 마스터 데이터를 관리할 수도 있습니다. 이 경우 git 등의 버전 관리 도구 로 다루기 쉬워지므로, 이 방법도 검토해 보십시오. 운영상 편리한 방법으로 마스터 데이터를 관리하십시오. YAML GS2TemplateFormatVersion : \"2019-05-01\" Description : GS2 master data template Version 2010-06-26 Globals : Alias : NamespaceName : inventory Resources : Namespace : Type : GS2::Inventory::Namespace Properties : Name : ${NamespaceName} NamespaceSettings : Type : GS2::Inventory::CurrentItemModelMaster Properties : NamespaceName : ${NamespaceName} Settings : # 이 아래의 데이터는 본래 JSON으로 지정하는 부분이지만, yaml로 작성해도 반영할 수 있습니다 version : 2019-02-05 inventoryModels : - name : item metadata : ITEM initialCapacity : 40 maxCapacity : 60 itemModels : - name : item-0001 metadata : ITEM_0001 maxCount : 99 sortValue : 1 - name : item-0002 metadata : ITEM_0002 maxCount : 99 sortValue : 2 - name : item-0003 metadata : ITEM_0003 maxCount : 99 sortValue : 3 - name : character metadata : CHARACTER initialCapacity : 30 maxCapacity : 50 itemModels : - name : character-0001 metadata : CHARACTER_0001 maxCount : 1 sortValue : 1 DependsOn : - Namespace 마스터 데이터 고정화 플레이어가 로그인 중에 마스터 데이터가 갱신되어도 불일치가 발생하지 않도록, 플레이어가 사용하는 마스터 데이터를 특정 일시 시점의 내용으로 고정화하는 구조가 마련되어 있습니다. gs2 = await gs2.Distributor.Namespace( \"namespace-0001\" ).Me( _gameSession ).FreezeMasterDataAsync(); 이처럼 GS2-Distributor 의 FreezeMasterData 를 호출함으로써, 이 API를 호출한 시점의 마스터 데이터 내용으로 이후의 API를 처리할 수 있습니다. 단, 고정 가능한 것은 30일 이내이며 각 마이크로서비스의 마스터 데이터에서 10세대 전까지의 내용입니다. 이 제한을 초과하면 최신 마스터 데이터를 사용하게 됩니다. WebSocketSession 의 연속 접속 가능 시간은 2시간이므로, WebSocketSession 의 OnDisconnect 가 호출되었을 때 재접속 처리를 수행하는 시점에 재고정화할 것을 권장합니다. 재고정화할 때는 마스터 데이터의 갱신 여부를 GS2-Version 등으로 확인하고, 갱신이 있는 경우에는 타이틀 화면으로 되돌리는 등의 대응도 검토하십시오. Tip GS2-Version 으로 마스터 데이터의 갱신 판정에 대해 권장되는 구현 마스터 데이터 버전을 마스터 데이터 갱신 시점의 YYYY.MMDD.HHMM 형식으로 VersionModel 에 warningVersion 으로 등록합니다. 클라이언트는 WebSocketSession 재접속 시 마스터 데이터의 고정화 시점의 일시로 버전 체크를 실행합니다. 만약 경고에 해당하는 경우에는 마스터 데이터의 갱신이 있다는 것이므로, 타이틀로 돌아가는 등 정합성을 유지하면서 현재 시각으로 재고정화하도록 합니다.","lang":"ko","section":"articles","summary":"GS2 마이크로서비스에 설정하는 마스터 데이터의 일반적인 사양에 대해\n","title":"마스터 데이터 관리","url":"/ko/articles/master_data/"},{"content":"Game Server Services는 게임 내 기능을 구현하기 위해 다수의 마이크로서비스를 제공하고 있습니다. 게임 사양에 맞추어 지금부터 소개할 마이크로서비스를 조합하여 구현하게 됩니다. 이 섹션에서는 게임 개발자가 게임 기획을 검토하는 데 있어, GS2의 각 마이크로서비스로 무엇을 할 수 있는지에 초점을 맞추어 설명합니다. 마이크로서비스 조합 방법 GS2의 마이크로서비스는 각각 독립된 책임을 가지면서도, 트랜잭션 액션을 통해 연계됩니다. 예를 들어 다음과 같은 연계를 통해 복잡한 게임 로직을 안전하게 구현할 수 있습니다. graph LR Player[플레이어] -- 결제 --\u003e Platform[AppStore/GooglePlay] Showcase[GS2-Showcase] -- 상품 목록 --\u003e Player Player -- 구매(영수증 첨부) --\u003e Showcase Showcase -- 트랜잭션 발행 --\u003e Distributor[GS2-Distributor] Distributor -- 소비 액션(영수증 검증) --\u003e Money Distributor -- 입수 액션(아이템 입수) --\u003e Inventory 각 서비스가 “검증 액션”, “소비 액션”, “입수 액션\"이라고 불리는 트랜잭션 액션을 공개하고 있으며, 이들을 GS2-Distributor 를 통해 연결함으로써, 여러 서비스에 걸친 처리를 원자성을 유지한 채 실행할 수 있습니다. 학습 진행 방법 처음으로 GS2를 이용하는 경우에는, 먼저 GS2-Account 를 이해하는 것을 추천합니다. 익명 계정의 개념은 GS2의 모든 서비스의 전제가 됩니다. 다음으로, 게임에 필요한 기능 카테고리 페이지를 순서대로 읽어 나가면, 게임 전체의 시스템 설계에 필요한 서비스 선택 방법을 파악할 수 있습니다.","lang":"ko","section":"microservices","summary":"Game Server Services가 제공하는 마이크로서비스 소개\n","title":"마이크로서비스 소개","url":"/ko/microservices/"},{"content":"여기에서는 장기 운영형 게임을 설계할 때 필요한 사고방식의 전환에 대해 설명하고자 합니다. 특히 제가 서구권 게임 개발자들과 이야기를 나누면서 느꼈던, 장기 운영형 게임의 수익화 설계에 대한 오해라고 느낀 부분을 중심으로 설명합니다. 플레이어는 시간을 산다 가장 중요한 것을 가장 먼저 설명하겠습니다. 장기 운영형 게임의 수익화는 기본적으로 “시간\"을 사고파는 것입니다. 출시일에 “게임을 클리어할 때까지 플레이하려고 했는데 스태미나가 부족해서 과금을 요구받았다. 정말 형편없는 게임이다\"라는 의견을 자주 듣습니다. 하지만 그것은 당연한 일입니다. 장기 운영형 게임은 하루에 15분에서 30분씩, 매일 플레이해 주기를 바라는 것입니다. 하루 만에 클리어할 수 있는 게임은 일주일 후에는 할 것이 없어져 삭제되고 맙니다. 당신이 게임 개발자라면 10시간 분량의 콘텐츠를 3개월 만에 만드는 것이 얼마나 어려운 일인지 이해하고 있을 것입니다. 하지만 플레이어 입장에서는 3개월이나 기다려야 한다면 보통 잊어버리게 됩니다. 그래서 제한을 두어 플레이어를 기다리게 하는 시간을 최대한 짧게 만드는 것입니다. 한편, 매일 플레이해도 선두를 따라잡을 수 없다면 그것은 지나친 일입니다. 신규 플레이어라도 1~3개월 정도 플레이하면 선두를 따라잡아 엔드 콘텐츠에 도전할 수 있도록 하는 것이 좋습니다. 자, 여기서 비즈니스 이야기가 나옵니다. 월정액 구독형 게임이라면 지금까지의 원칙에 따라 서비스를 제공하면 됩니다. 하지만 F2P 방식으로 제공하는 경우에는 다른 관점이 필요합니다. 출시 시점에 3개월간 플레이할 수 있는 콘텐츠를 준비했다고 해도, 세상에는 그 콘텐츠를 돈을 내서라도 3일로 단축하고 싶은 플레이어가 있습니다. 그런 플레이어는 거의 확실히 3개월 후에는 사라지고 없겠지만, 3일 동안 일반적인 라이프타임 밸류 이상의 지출을 해준다면 그것을 허용해도 되지 않을까요? 장기 운영형 게임의 수익화는 이 점을 유의하면서 설계하도록 합시다. 가챠는 무료로 돌릴 수 있다 일본식 모바일 게임에서 가장 오해받는 요소가 “가챠\"입니다. “가챠가 있으면 원하는 것을 얻기 위해 얼마가 들지 알 수 없다” 이것은 어떤 의미로는 맞는 말이지만, 어떤 의미로는 틀린 말이기도 합니다. 여기서 중요한 것은 “원하는 것\"이 게임을 플레이하는 데 필수는 아니라는 점입니다. 일본에서도 매달, 매주 새로운 캐릭터가 추가되지만, 그것을 전부 가지고 있는 플레이어는 극히 드뭅니다. 그래도 게임은 충분히 즐길 수 있습니다. 일본식 모바일 게임에서는 기회가 있을 때마다 가챠를 무료로 돌리게 해줍니다. 그것은 퀘스트의 첫 클리어 보상일 수도 있고, 데일리 미션일 수도 있고, 이벤트 보상일 수도 있고, 점검으로 게임 플레이가 중단된 것에 대한 사과일 수도 있습니다. 어쨌든 꾸준히 플레이하고 있는 것만으로도 매달 100달러 상당은 확실히 운영 측에서 지급됩니다. 그것으로 게임을 플레이하기에 충분한 캐릭터를 얻을 수 있습니다. 또한 입수가 어려운 캐릭터는 최대 파라미터는 높을지 몰라도, 성장시키기도 어렵게 설계되어 있습니다. “사실은 입수하기 쉬운 캐릭터를 제대로 키우는 편이 더 강하다\"는 경우도 흔히 있는 이야기입니다. 대전은 중요하지 않다. 오히려 해로울 수도 있다 엔드 콘텐츠에서 플레이어를 가장 오래 붙잡아 두는 요소로 가장 먼저 떠오르는 것이 PvP 요소일 것입니다. 하지만 일본에서는 PvP 요소가 있는 장기 운영형 게임이 드뭅니다. 왜냐하면 PvP는 약한 플레이어를 게임에서 튕겨내는 메커니즘이 될 수 있기 때문입니다. 엔드 콘텐츠는 오래 플레이하도록 만드는 장치여야 하며, 그 장치 때문에 이탈하는 플레이어가 생긴다면 의미가 없습니다. PvP는 참가자의 대부분이 패배하여 기분이 상한다는 사실을 잊어서는 안 됩니다. 배틀로얄 게임에서는 마지막까지 살아남은 플레이어는 최고의 기쁨을 얻지만, 그 외 다수의 플레이어는 책상을 내리치고 싶은 심정이 들 때도 있을 것입니다. 냉정하게 생각해 보세요. 당신은 책상을 내리치면서까지 그 게임을 몇 년이나 계속하고 싶은가요? 즐겁고 여유롭게 오래 플레이할 수 있는 게임을 원하는 플레이어가 많으며, 그런 플레이어를 위한 게임으로 만드는 편이 장기 운영에는 더 적합합니다.","lang":"ko","section":"design_knowledge","summary":"장기 운영형 게임의 수익화를 설계하려면 개발자에게는 많은 사고방식의 전환이 필요합니다","title":"장기 운영형 게임의 수익화를 실현하기 위해 당신이 먼저 바꿔야 할 사고방식","url":"/ko/design_knowledge/change_your_mind/"},{"content":"일본에서는 10년 이상, 구미권에서는 최근 몇 년 사이에 운영형 게임이 일반화되었거나, 일반화되고 있는 중입니다. 운영형 게임을 실현하는 데 있어서는 메인 게임의 재미는 물론이거니와, 그것을 장기간에 걸쳐 뒷받침하는 메타게임의 존재가 필수적입니다. 이 섹션에서는 메타게임의 개념에 대해 설명함으로써, 개발자가 더 나은 게임 디자인에 한 걸음 더 다가갈 수 있도록 돕고자 합니다. 메인 게임 메인 게임은 게임의 핵심이 되는 놀이입니다. 배틀로얄 게임이라면 광활한 전장에 100명이 내려앉아 최후의 1인이 될 때까지 싸우는 게임 부분에 해당하고, RPG라면 적과의 전투나 시나리오 진행이 메인 게임에 해당합니다. 문제는 이것만으로는 장기 운영형 게임을 성립시키는 것이 거의 불가능하다는 점입니다. 세상에는 메인 게임의 재미만으로 몇 년에 걸쳐 플레이어를 사로잡는 게임도 존재하지만, 그런 게임은 극히 드뭅니다. 메타게임 메타게임은 그러한 기적에 기대는 것이 아니라, 개발자의 노력을 통해 장기간 플레이어를 사로잡기 위한 게임 사이클입니다. 구미권 게임에서는 메타게임에 힘쓰는 타이틀이 적은 반면, 아시아권 게임에서는 당연하다는 듯이 이루어지고 있습니다. 이러한 지역 차이가 있다는 전제 하에, 이번에는 아시아권에서 어떤 메타게임을 제공하고 있는지, 그 배경에는 어떤 경험이 있는지에 대해 설명합니다. 메타게임이 존재하는 이유 메타게임을 마련하는 이유는 여러 가지가 있지만, 다음과 같은 점이 특히 중요합니다. 게임의 개발 속도와 플레이 속도의 격차를 메운다 플레이어를 지치게 하지 않는다 게임의 개발 속도와 플레이 속도의 격차를 메운다 여러분이 매일 애써서 수년에 걸쳐 개발한 게임이 플레이어에 의해 10시간 정도 만에 클리어되어 버리는 현실을 몇 번이고 목격했을 것입니다. 운영형 게임을 실현하려면 이 격차를 메울 필요가 있습니다. 왜냐하면 매달 어떤 형태로든 변화를 게임에 가져오지 않으면 플레이어는 싫증을 느끼기 때문입니다. 그러나 개발 속도는 소비 속도보다 명백히 시간이 더 걸립니다. 메인 게임을 반복해서 플레이하는 것만으로 플레이어가 만족하며 수년간 즐겨준다면 이런 고민을 할 필요가 없겠지만, 이미 언급했듯이 그런 게임을 만들어낼 확률은 정말로 낮습니다. 그래서 개발자의 공수는 적게 들이면서 플레이어의 공수는 많이 들이는 게임 사이클로서 메타게임이 필요합니다. 플레이어를 지치게 하지 않는다 플레이어가 매일 조금이라도 게임을 플레이하게 하는 것은 게임을 장기간 운영하기 위해 중요합니다. 왜냐하면 한번 플레이어가 게임을 실행하지 않게 되면, 다시 게임을 실행하도록 만드는 데 드는 노력이 엄청나게 커지기 때문입니다. 메인 게임을 플레이하려면 최소 20분간 진지하게 몰입해야 하는 게임 사이클이라면, 매일 플레이하게 만드는 것이 점점 어려워집니다. 플레이어가 지쳐버리기 때문입니다. 메타게임에는 “매일 5분이라도 좋으니 일단 실행해줘!” 라는 메시지를 담을 수 있습니다. 이를 통해 플레이어가 매일 5분만이라도 게임을 실행해주게 되면, 업데이트나 시즌 이벤트 공지에서 메인 게임 복귀까지 게임 내에서 매끄럽게 이루어질 수 있게 됩니다. 메타게임의 정의 “메인 게임에서 사용하는 캐릭터를 육성한다”, “메인 게임의 광활한 필드 안에서 뷰포인트를 탐색한다” 등, 메인 게임의 외부에서 놀이 체험을 제공하는 것이 메타게임입니다. 이러한 놀이는 기본적으로 목표를 세운 뒤 실제로 그것을 완수하기까지 몇 주에서 몇 개월이 걸릴 만큼 매우 긴 게임 사이클이 되도록 설계합니다. 잊지 말아야 할 것은, 앞서 설명한 메타게임의 존재 이유를 충족하는 디자인으로 게임 내에 포함시켜야 한다는 점입니다. 메타게임의 성장 과정 자, 메타게임 사이클을 이해하기 위해서는 일본·북미/유럽·중국/한국 3개 지역이 각각 다른 과정을 거쳐 현재의 표준이 된 게임을 형성해 온 역사를 이해할 필요가 있습니다. flowchart TD PCGame[\"PC 게임\"] subgraph \"북미/유럽\" PCGame --\u003e USAmusumentMachine[\"아케이드 게임기\"] USAmusumentMachine --\u003e USConsoleGame[\"가정용 게임기\"] end subgraph \"일본\" PCGame --\u003e JPAmusumentMachine[\"게임센터\"] JPAmusumentMachine --\u003e JPConsoleGame[\"가정용 게임기\"] JPConsoleGame --\u003e JPSocialGame[\"소셜 게임\"] JPSocialGame --\u003e JPSmartPhoneGame[\"스마트폰 게임\"] end subgraph \"중국/한국\" PCGame --\u003e ASIAPCMMORPG[\"PC MMO RPG\"] ASIAPCMMORPG --\u003e ASIASmartPhoneGame[\"스마트폰 게임\"] end class JPSocialGame emphasis class ASIAPCMMORPG emphasis 그림에서 보여준 흐름을 따라 각 지역의 표준 게임이 형성되어 왔습니다. 그중에서도 빨간 상자로 표시된 부분이 Game as a Service를 의식하고 개발된 부분입니다. 즉, 일본이나 중국·한국을 중심으로 한 아시아 지역에서는 오랫동안 운영형 게임에 대해 고민할 기회가 있었고, 그를 위한 노하우의 축적이 있었습니다. 그 결과물로 나온 것이 바로 메타게임이라는 게임 사이클입니다. 일본 소셜 게임에서 길러진 수익화 Facebook 게임을 기억하십니까? 아마 많은 지역의 사람들에게 “아, 그런 게 있었지” 하는 과거의 것이 되어 있을 것입니다. 그러나 Facebook 게임이 게임 업계에 미친 영향은 컸으며, 특히 일본에서 그 영향이 두드러졌습니다. 일본에서는 Facebook 게임을 보고 mixi / mobage / GREE 와 같은 일본의 소셜 네트워크 서비스들도 게임에 뛰어들었습니다. 그중에서도 mobage / GREE 의 성장은 눈부셔서, 한때 일본의 텔레비전이 그들의 광고로 뒤덮이던 시기가 있었습니다. 그 원천이 된 것이 F2P로 사용자 수를 확대하고, 휴대전화 브라우저라는 빈약한 표현력으로 어떻게 플레이어를 사로잡을 것인가 하는 무모하다고도 할 수 있는 도전이었습니다. 그러나 당시 닌텐도에서 근무하던 저에게도 의외였던 것은, 많은 플레이어들이 소셜 게임에 빠져들었다는 사실입니다. 당시의 저는 이해하지 못했지만, 여기에 메타게임의 힘이 작용하고 있었음은 말할 것도 없습니다. 메타게임의 힘으로 인게이지먼트를 극대화한 소셜 게임은 점차 수익화에 힘을 쏟기 시작합니다. 그리하여 코나미의 드래곤 컬렉션을 통해 탄생한 것이 “디지털 가챠\"입니다. 가챠로 얻은 캐릭터를 메타게임으로 육성하고, 메인 게임을 공략하는 게임 사이클이 확립된 순간이었습니다. 중국의 합류와 북미·유럽의 향후 지금 중국은 게임 시장에서 가장 기세가 좋은 퍼블리셔가 많은 지역입니다. 브라우저에서 동작하는 소셜 게임이 스마트폰으로의 이행에 맞춰 점차 표현을 더 풍부하게 변화시켜 온 일본식 스마트폰 게임도 여러 차례 북미·유럽 시장에 도전해 왔습니다. 그러나 그래픽 표현력이라는 관점에서 가정용 게임에 눈이 높아진 플레이어들에게 어필하지 못해, 일본 이외의 지역에서는 좀처럼 성과를 내지 못하고 있었습니다. 그런 가운데, 중국이 강점을 가진 MMORPG에 일본식 가챠에 의한 수익화와 그 주변의 메타게임 사이클을 융합해 설계된 원신이 전 세계적으로 대히트(2020년-2022년 매출액 5000억 엔 이상)를 기록하고 있습니다. 북미·유럽 시장의 향후를 내다보는 데 있어 원신의 존재를 빼놓고 이야기할 수 없습니다. 일본 개발자들에게는 브라우저 게임 시대의 페이지 전환식 UX를 완전히 벗어나지 못한 방식이 아니라, 원신이 구현한 매끄러운 게임 체험이 매우 참고가 될 것입니다. 북미/유럽 개발자들에게는 이미 개발하고 있는 것과 같은 풍부한 게임 체험에 메타게임을 융합함으로써, 막대한 매출을 창출하는 장기 운영형 게임으로 완성시키는 방법에 대해 참고가 될 것입니다. 2022-02-11 Kazutomo Niwa","lang":"ko","section":"design_knowledge","summary":"수년에 걸쳐 플레이어에게 만족을 제공하는 운영형 게임을 지탱하는 메타게임이란","title":"Game as a Service 를 지탱하는 메타게임이란","url":"/ko/design_knowledge/what_the_metagame/"},{"content":"보안 요건에는 크게 3가지 카테고리가 있습니다. 게임 실행 파일의 변조 게임 실행 중 메모리의 변조 사용자 데이터의 변조 게임 실행 파일의 변조 어떤 무기의 공격력이 본래 10이어야 할 부분을 부정 행위로 9999로 변조하는 것과 같은 공격입니다. Android 에서는 apk 파일을 디스어셈블하여 게임 데이터를 변조한 후 재패키징한 apk 파일을 만듦으로써 이러한 공격이 가능합니다. GS2 는 이러한 공격에 대한 지원을 제공하지 않습니다. 게임 바이너리가 변조되지 않았는지를 탐지하는 솔루션을 도입함으로써 이러한 문제에 대처해야 합니다. 게임 실행 중 메모리의 변조 실행 시 메모리 정보를 다시 써서 부정하게 적의 체력을 줄이거나 퀘스트 클리어 판정에 사용되는 플래그 값을 다시 써서, 실패했어야 할 것을 클리어한 시퀀스로 진입시키는 공격이 해당합니다. GS2 는 이러한 공격에 대한 지원을 제공하지 않습니다. 게임 실행 시 메모리 값이 부정하게 변조되지 않았는지를 탐지하는 솔루션을 도입함으로써 이러한 문제에 대처해야 합니다. 사용자 데이터의 변조 아이템 소지 수량을 변조하는 것과 같은 공격이 해당합니다. GS2 에서는 아이템 소지 수량 등의 사용자 데이터(세이브 데이터)를 서버 사이드에서 관리하며, 그 증감을 API를 통해서만 수행할 수 있도록 되어 있습니다. 특히 아이템 증가와 같이 플레이어에게 이득이 되는 사용자 데이터 조작은, GS2 가 제공하는 마이크로서비스의 부수 효과를 통해서만 조작할 수 있도록 설계되어 있습니다. 예를 들어 GS2-Showcase 에서 상품을 구매했을 때 아이템 소지 수량을 늘린다 GS2-Quest 에서 퀘스트를 클리어했을 때 아이템 소지 수량을 늘린다 와 같은 처리를 통해서만 아이템 소지 수량을 늘릴 수 있습니다. GS2-Showcase 에서 아이템을 구매한다는 것은 게임 내 통화를 소비하는 등 어떠한 대가를 지불해야 하며, GS2-Quest 에서 퀘스트를 시작하기 위해서는 스태미나를 소비하는 등 어떠한 대가를 지불해야 합니다. 이러한 설계로 함으로써, 무제한으로 아이템을 늘리는 행위를 할 수 없도록 하고 있습니다.","lang":"ko","section":"articles","summary":"GS2 의 보안에 대한 사고방식","title":"보안","url":"/ko/articles/security/"},{"content":"GS2를 사용한 게임 개발에 참고가 되는 샘플 코드와 학습 리소스를 공개하고 있습니다. 학습 목적이나 개발 단계에 맞게 적절한 리소스를 활용해 주세요. 샘플 선택 방법 샘플 내용 적합한 용도 GS2 구현 샘플 각 기능을 한 차례 포함한 Unity용 종합 샘플 GS2 전체의 연계 이미지나 전형적인 게임 사이클의 구현 방법을 파악하고 싶을 때 UIKit을 이용한 샘플 기능별로 준비된 UIKit 기반의 최소 샘플 계정·인벤토리·채팅 등 특정 기능의 구현만 참고하고 싶을 때 공식 YouTube 채널 기능 설명·튜토리얼 동영상 텍스트로는 전달하기 어려운 화면 전환이나 절차를 확인하고 싶을 때 UIKit을 이용한 샘플은 기능별로 저장소가 나뉘어 있어, 자신의 프로젝트에 필요한 부분만 단계적으로 도입하기 쉬운 구성으로 되어 있습니다. 한편 GS2 구현 샘플 은 여러 마이크로서비스가 연계된 상태의 레퍼런스 구현으로 참고할 것을 상정하고 있습니다.","lang":"ko","section":"articles","summary":"샘플 코드 소개\n","title":"샘플 코드","url":"/ko/articles/sample/"},{"content":"Game Engine: Unity Unreal Engine Godot using System.Collections ; using Gs2.Core.Model ; using Gs2.Unity.Core ; using Gs2.Unity.Gs2Account.Model ; using Gs2.Unity.Util ; using UnityEngine ; public class Tutorial : MonoBehaviour { IEnumerator Start () { // Setup variables var clientId = \"YourClientId\" ; var clientSecret = \"YourClientSecret\" ; var accountNamespaceName = \"game-0001\" ; // Initialize GS2 SDK Gs2Domain gs2 ; { var future = Gs2Client . CreateFuture ( new BasicGs2Credential ( clientId , clientSecret ), Region . ApNortheast1 ); yield return future ; if ( future . Error != null ) { throw future . Error ; } gs2 = future . Result ; } // define GS2-Account namespace var gs2Account = gs2 . Account . Namespace ( accountNamespaceName ); // Create an anonymous account EzAccount account ; { Debug . Log ( \"Create an anonymous account\" ); var future = gs2Account . CreateFuture (); yield return future ; if ( future . Error != null ) { throw future . Error ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { throw future2 . Error ; } account = future2 . Result ; } // Dump anonymous account Debug . Log ( $\"UserId: {account.UserId}\" ); Debug . Log ( $\"Password: {account.Password}\" ); // Log-in created anonymous account GameSession gameSession ; { var future = gs2 . LoginFuture ( new Gs2AccountAuthenticator ( accountSetting : new AccountSetting { accountNamespaceName = accountNamespaceName , } ), account . UserId , account . Password ); yield return future ; if ( future . Error != null ) { throw future . Error ; } gameSession = future . Result ; } // Load TakeOver settings { var it = gs2Account . Me ( gameSession ). TakeOvers (); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { throw it . Error ; } if ( it . Current != null ) { Debug . Log ( $\"Type: {it.Current.Type}\" ); Debug . Log ( $\"Identifier: {it.Current.UserIdentifier}\" ); } } } // Finalize GS2-SDK { var future = gs2 . DisconnectFuture (); yield return future ; if ( future . Error != null ) { throw future . Error ; } } } } // Gs2Tutorial.cpp #include \"Sample/Gs2Tutorial.h\" #include \"Core/Gs2Domain.h\" #include \"Util/Gs2AccountAuthenticator.h\" DEFINE_LOG_CATEGORY ( GameLog ); class EZGS2_API FSampleTask final : public Gs2 :: Core :: Util :: TGs2Future void *\u003e { public : virtual ~ FSampleTask () override = default ; virtual Gs2 :: Core :: Model :: FGs2ErrorPtr Action ( const TSharedPtr TSharedPtr void *\u003e\u003e Result ) override { // Setup variables const auto ClientId = \"YourClientId\" ; const auto ClientSecret = \"YourClientSecret\" ; const auto AccountNamespaceName = \"game-0001\" ; // Create GS2 client const auto InitializeFuture = Gs2 :: UE5 :: Core :: FGs2Client :: Create ( MakeShared Gs2 :: Core :: Model :: FBasicGs2Credential \u003e ( ClientId , ClientSecret ), Gs2 :: Core :: Model :: ApNorthEast1 ); InitializeFuture -\u003e StartSynchronousTask (); if ( InitializeFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( InitializeFuture -\u003e GetTask (). Error () -\u003e String ())); return InitializeFuture -\u003e GetTask (). Error (); } const auto Gs2 = InitializeFuture -\u003e GetTask (). Result (); // Create an anonymous account UE_LOG ( GameLog , Display , TEXT ( \"Create anonymous account\" )); const auto CreateFuture = Gs2 -\u003e Account -\u003e Namespace ( AccountNamespaceName ) -\u003e Create (); CreateFuture -\u003e StartSynchronousTask (); if ( CreateFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( CreateFuture -\u003e GetTask (). Error () -\u003e String ())); return CreateFuture -\u003e GetTask (). Error (); } // Load created account const auto LoadFuture = CreateFuture -\u003e GetTask (). Result () -\u003e Model (); LoadFuture -\u003e StartSynchronousTask (); if ( LoadFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( LoadFuture -\u003e GetTask (). Error () -\u003e String ())); return LoadFuture -\u003e GetTask (). Error (); } const auto Account = LoadFuture -\u003e GetTask (). Result (); // Dump anonymous account UE_LOG ( GameLog , Display , TEXT ( \"UserId: %s\" ), ToCStr ( * Account -\u003e GetUserId ())); UE_LOG ( GameLog , Display , TEXT ( \"Password: %s\" ), ToCStr ( * Account -\u003e GetPassword ())); // Log-in created anonymous account const auto LoginFuture = Gs2 -\u003e Login ( MakeShareable Gs2 :: UE5 :: Util :: IAuthenticator \u003e ( new Gs2 :: UE5 :: Util :: FGs2AccountAuthenticator ( MakeShared Gs2 :: UE5 :: Util :: FAccountSetting \u003e ( AccountNamespaceName ) ) ), * Account -\u003e GetUserId (), * Account -\u003e GetPassword () ); LoginFuture -\u003e StartSynchronousTask (); if ( LoginFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( LoginFuture -\u003e GetTask (). Error () -\u003e String ())); return LoginFuture -\u003e GetTask (). Error (); } const auto GameSession = LoginFuture -\u003e GetTask (). Result (); // Load TakeOver settings const auto It = Gs2 -\u003e Account -\u003e Namespace ( AccountNamespaceName ) -\u003e Me ( GameSession ) -\u003e TakeOvers (); for ( const auto TakeOver : * It ) { UE_LOG ( GameLog , Display , TEXT ( \"Type: %d\" ), * TakeOver -\u003e GetType ()); UE_LOG ( GameLog , Display , TEXT ( \"Identifier: %s\" ), ToCStr ( * TakeOver -\u003e GetUserIdentifier ())); } // Finalize GS2-SDK const auto FinalizeFuture = Gs2 -\u003e Disconnect (); FinalizeFuture -\u003e StartSynchronousTask (); if ( FinalizeFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( FinalizeFuture -\u003e GetTask (). Error () -\u003e String ())); return FinalizeFuture -\u003e GetTask (). Error (); } return nullptr ; } }; AGs2Tutorial :: AGs2Tutorial () { PrimaryActorTick . bCanEverTick = true ; } void AGs2Tutorial :: BeginPlay () { Super :: BeginPlay (); ( new FAsyncTask FSampleTask \u003e ()) -\u003e StartBackgroundTask (); } void AGs2Tutorial :: Tick ( float DeltaTime ) { Super :: Tick ( DeltaTime ); } // Gs2Tutorial.h #pragma once #include \"CoreMinimal.h\" #include \"GameFramework/Actor.h\" #include \"Gs2Tutorial.generated.h\" DECLARE_LOG_CATEGORY_EXTERN ( GameLog , Log , All ); UCLASS () class EZGS2_API AGs2Tutorial : public AActor { GENERATED_BODY () public : AGs2Tutorial (); protected : virtual void BeginPlay () override ; public : virtual void Tick ( float DeltaTime ) override ; }; extends Node func _ready () -\u003e void : # Setup variables var client_id = \"YourClientId\" var client_secret = \"YourClientSecret\" var account_namespace_name = \"game-0001\" var account_encryption_key_id = \"grn:gs2: {region}:{ownerId} :key:account-encryption-key-namespace:key:account-encryption-key\" # Initialize GS2 SDK var credential = Gs2BasicCredential . new ( client_id , client_secret ) var connection = Gs2Connection . new ( credential , Gs2Region . AP_NORTHEAST_1 ) var ez = Gs2EzDomain . new ( connection ) # Define the GS2-Account namespace var gs2_account = ez . account . namespace_ ( account_namespace_name ) # Create an anonymous account var create_result = await gs2_account . create () if create_result . error != null : push_error ( str ( create_result . error )) return # Load the created account var model_result = await create_result . result . model () if model_result . error != null : push_error ( str ( model_result . error )) return var account = model_result . result # Dump the anonymous account print ( \"UserId: \" , account . user_id ) print ( \"Password: \" , account . password ) # Log in with the created anonymous account var authenticator = Gs2AccountAuthenticator . new ( account_namespace_name , account_encryption_key_id ) var game_session = Gs2GameSession . new ( authenticator , connection , account . user_id , account . password ) var login_result = await game_session . login () if login_result . error != null : push_error ( str ( login_result . error )) return # Load TakeOver settings var load_result = await gs2_account . me ( game_session ) . take_overs () . load () if load_result . error != null : push_error ( str ( load_result . error )) return for take_over in load_result . result : print ( \"Type: \" , take_over . type ) print ( \"Identifier: \" , take_over . user_identifier ) # Finalize GS2 SDK connection . disconnect_session ()","lang":"ko","section":"get_start","summary":"계정 발급~로그인까지를 구현하는 샘플 코드\n","title":"샘플 코드 전문","url":"/ko/get_start/tutorial/coding/all/"},{"content":"GS2-Account 인계 정보에 관하여, 동일 사용자의 정보 등록·갱신·삭제는 1초에 3회 이내로 제한해 주시기 바랍니다. 다른 사용자라면 이 제한은 없습니다. GS2-Chat 하나의 룸에 대해 1초에 최대 3회까지만 게시할 수 있습니다. 하나의 룸에 참가할 수 있는 인원 수를 극단적으로 많게 하거나, 일제히 게시를 유도하는 구현은 피해 주시기 바랍니다. GS2-Experience 동일 프로퍼티에 대한 경험치 부여는 1초에 3회까지로 제한해 주시기 바랍니다. 다른 사용자나 동일 사용자라도 다른 프로퍼티에 대한 경험치 부여라면 이 제한은 없습니다. GS2-Formation 동일 폼의 갱신 처리는 1초에 3회 이내로 제한해 주시기 바랍니다. GS2-Friend 동일 게임 플레이어에 의한 프로필 갱신은 1초에 3회까지로 제한해 주시기 바랍니다. 다른 사용자나 동일 사용자라도 다른 프로퍼티에 대한 경험치 부여라면 이 제한은 없습니다. 한 명의 플레이어에게 친구 요청이 집중되는 사양은 피해 주시기 바랍니다. 한 명의 플레이어가 친구 요청을 받을 수 있는 것은 1초에 3회까지입니다. GS2-Inventory 동일 프로퍼티에 대한 소유 수량 증감 처리는 1초에 3회까지로 제한해 주시기 바랍니다. 다른 프로퍼티라도 인벤토리 입장에서 처음 입수하거나, 인벤토리의 아이템을 모두 소진하는 조작인 경우에는 인벤토리 내 조작으로서 1초에 3회까지로 제한해 주시기 바랍니다. 다른 프로퍼티에 대한 소유 수량 증감이라면 이 제한은 없습니다. GS2-JobQueue 동일 사용자에 대한 큐로의 작업 등록은 1초에 3회까지로 제한해 주시기 바랍니다. 1회의 작업 등록으로 최대 10개까지 작업을 등록할 수 있으므로 이를 활용해 주시기 바랍니다. 자동 실행 기능을 이용하지 않는 경우, 작업 실행은 1초에 1회로 제한해 주시기 바랍니다. 다른 사용자에 대한 처리라면 이 제한은 없습니다. GS2-Limit 동일 카운터에 대한 조작은 1초에 3회까지로 제한해 주시기 바랍니다. 다른 사용자나, 동일 사용자라도 다른 카운터에 대한 처리라면 이 제한은 없습니다. GS2-Lock 동일 뮤텍스에 대한 조작은 1초에 3회까지로 제한해 주시기 바랍니다. 다른 뮤텍스에 대한 처리라면 이 제한은 없습니다. GS2-MegaField 사용자별로 1초에 좌표 정보를 갱신할 수 있는 횟수는 5회까지입니다. GS2-Mission 동일 카운터에 대한 조작은 1초에 3회까지로 제한해 주시기 바랍니다. 다른 사용자나, 동일 사용자라도 다른 카운터에 대한 처리라면 이 제한은 없습니다. GS2-Money 동일 지갑에 대한 조작은 1초에 3회까지로 제한해 주시기 바랍니다. 다른 사용자나, 동일 사용자라도 다른 지갑에 대한 처리라면 이 제한은 없습니다. GS2-Script 스크립트의 실행 시간은 10초 이내에 완료되도록 해 주시기 바랍니다. GS2-Stamina 동일 스태미나에 대한 조작은 1초에 3회까지로 제한해 주시기 바랍니다. 다른 사용자나, 동일 사용자라도 다른 스태미나 모델에 대한 처리라면 이 제한은 없습니다. GS2-StateMachine 동일 스테이트 머신의 상태 전이 횟수는 10,000회까지입니다. 10,000회를 초과하면 오류가 응답됩니다. 동일 스테이트 머신으로의 이벤트 전송은 1초에 3회까지로 제한해 주시기 바랍니다.","lang":"ko","section":"articles","summary":"GS2의 각 마이크로서비스 이용 제한\n","title":"서비스 제한","url":"/ko/articles/service_limit/"},{"content":"게임 사양이 정해지면 이를 어떻게 구현할지 검토할 필요가 있습니다. GS2에서는 게임의 다양한 사양을 구현하는 데 활용할 수 있는 마이크로서비스를 제공하고 있습니다. GS2가 제공하는 마이크로서비스의 종류와 각 마이크로서비스의 역할에 대해서는 다음 문서를 참고해 주세요. 마이크로서비스 소개 Game Server Services에서는 설계를 돕기 위한 유료 지원을 제공하고 있습니다. 유료 지원을 계약하면 게임의 사양을 GS2 스태프가 이해하고, 최적의 GS2 마이크로서비스 적용 방법을 함께 검토합니다. 지원 메뉴","lang":"ko","section":"overview","summary":"GS2를 이용하여 게임 사양을 구현하기 위한 설계\n","title":"설계","url":"/ko/overview/workflow/architect/"},{"content":"GS2에서는 각 서비스 간을 연계시키는 트랜잭션 구조로서 《스탬프 시트》라는 구조를 사용합니다. GS2 내의 API 중, 플레이어에게 불이익이 되는 조작을 《소비 액션》이라고 부르고, 반대로 플레이어에게 이익이 되는 조작을 《입수 액션》이라고 부릅니다. 게임 내 상점에서 《1000 젬을 사용》하여 《가챠를 10번 뽑는》처리가 있다고 합시다. 이 경우, 《1000 젬을 사용》이 소비 액션이고, 《가챠를 10번 뽑는》것을 입수 액션으로 볼 수 있습니다. 조금 더 예시를 나열해 보겠습니다. 《메시지를 읽음 처리》하는 소비 액션을 실행하고 《메시지에 첨부된 젬 100개를 수령》하는 입수 액션을 실행한다 《스태미나를 10 소비》하는 소비 액션을 실행하고 《퀘스트 1을 시작 상태로 만드는》 입수 액션을 실행한다 《퀘스트 1의 시작 상태를 삭제》하는 소비 액션을 실행하고 《퀘스트 1의 클리어 보상을 입수》하는 입수 액션을 실행한다 《현재 시각으로 최종 방치 보상 수령 시간을 갱신》하는 소비 액션을 실행하고 《방치 시간에 따른 보상을 입수》하는 입수 액션을 실행한다 《매일 초기화되는 횟수 제한 카운터를 1 증가》하는 소비 액션을 실행하고 《하루 1회만 받을 수 있는 아이템을 입수》하는 입수 액션을 실행한다 이처럼 GS2에서는 모든 게임 사이클이 무언가를 소비하고, 무언가를 얻는 것으로 표현됩니다. 스탬프 시트의 구조 스탬프 시트는 여러 개의 《소비 액션》과 1개의 《입수 액션》으로 구성되며, 스탬프 시트의 발행도 상점 기능이나 퀘스트 기능과 같은 GS2의 마이크로서비스가 수행합니다. 발행되는 스탬프 시트의 내용은 상점 기능에 등록한 상품 마스터 데이터 등을 바탕으로 결정됩니다. 스탬프 시트의 실행은 《소비 액션》의 실행 -\u003e 《입수 액션》의 실행 순서로 처리됩니다. 이 순서로 처리함으로써, 부정하게 《입수 액션》이 여러 번 실행되는 것을 방지하고 있습니다. 《소비 액션》을 실행하면, GS2의 각 기능을 제공하는 마이크로서비스는 실행 완료를 증명하는 서명을 발행합니다. 《입수 액션》을 실행할 때는, 모든 《소비 액션》에서 받은 서명을 함께 전송합니다. 《입수 액션》을 실행하기 전에 서명 검증을 수행하여, 모든 것이 실행 완료되었음을 확인한 후에 《입수 액션》을 실행합니다. 서비스 디스커버리 스탬프 시트의 《소비 액션》이나 《입수 액션》의 내용에 따라, 적절한 마이크로서비스에 처리를 위임해야 합니다. 하지만 GS2의 기능은 나날이 추가되고 있으며, 《소비 액션》이나 《입수 액션》의 종류는 계속 늘어나고 있어, 이러한 분기 처리를 유지보수하는 것은 힘든 일입니다. 그래서 GS2에서는 GS2-Distributor라는, 받은 스탬프 시트를 적절한 마이크로서비스로 전달하는 마이크로서비스를 제공하고 있습니다. GS2-Distributor에 스탬프 시트를 전송함으로써, 스탬프 시트의 《소비 액션》이나 《입수 액션》의 내용에 따라 적절한 마이크로서비스로 전달하는 역할을 합니다. 중복 실행 방지 스탬프 시트는 중복 실행할 수 없도록 설계되어 있습니다. 정확히 말하면, GS2의 모든 《소비 액션》이나 《입수 액션》 API에는 중복 실행 방지 구조가 마련되어 있습니다. 《소비 액션》이나 《입수 액션》의 API는 《Duplication Avoider》 파라미터를 받을 수 있게 되어 있습니다. 여기에 값을 지정하고 API 처리가 정상 종료되면, 응답 내용이 GS2에 의해 일정 기간 저장됩니다. 동일한 요청 페이로드에 《Duplication Avoider》가 지정되어 있고, 과거에 동일한 《Duplication Avoider》 값으로 처리를 실행한 적이 있는 경우에는, 그 결과를 정상 처리 완료로 응답하고 실제로는 처리를 수행하지 않게 되어 있습니다. 그리고 스탬프 시트에 의한 《소비 액션》이나 《입수 액션》의 실행에서는, 《Duplication Avoider》에 스탬프 시트 고유의 ID인 《트랜잭션ID》를 지정하게 되어 있습니다. 그럼, 중복 실행 방지 구조가 어떤 과정으로 실행되는지 순서대로 살펴보겠습니다. 먼저, 다음과 같은 스탬프 시트가 존재한다고 가정합니다. 소비 액션 아이템을 1개 소비 횟수 제한 카운터를 1 증가 입수 액션 젬을 10개 입수 이 스탬프 시트를 실행하는 경우, 먼저 《아이템을 1개 소비》를 실행합니다. 《아이템을 1개 소비》 실행 아이템이 1개 소비됩니다. 서버 측에 “트랜잭션ID: XXX로 아이템 소비 성공\"이라는 기록이 남습니다. 《횟수 제한 카운터를 1 증가》 실행 여기서 네트워크 오류나 서버 오류가 발생하여 처리가 중단되었다고 합시다. 이 시점에서 아이템은 이미 소비된 상태로 멈춰 있어, 플레이어에게는 불이익한 상태입니다. 스탬프 시트 재시도 클라이언트 또는 서버 사이드의 자동 실행에 의해, 처음부터 다시 실행됩니다. 다시 **《아이템을 1개 소비》**를 실행하려 하지만, 여기서 Duplication Avoider 가 작동합니다. 이미 성공 기록이 있으므로, 실제로는 소비 처리를 수행하지 않고, 이전 성공 응답을 그대로 반환합니다. 《횟수 제한 카운터를 1 증가》 재시도 이전에 실패했던 부분이지만, 이번에는 정상적으로 성공했다고 합시다. 서버 측에 성공 기록이 남습니다. 《젬을 10개 입수》 실행 마지막으로 입수 액션을 실행하여 젬을 지급하고 완료됩니다. 이처럼 스탬프 시트를 실행하는 쪽에서는 “어디까지 진행되었는지\"를 세세하게 관리할 필요가 없으며, 실패하면 단순히 “처음부터 다시 하기\"만 하면, Duplication Avoider에 의해 불일치 없이 최종 상태까지 도달할 수 있게 되어 있습니다. 스탬프 시트 재시도의 자동화 스탬프 시트 실행에 실패한 경우에는 재시도하면 된다고 했지만, 말은 쉬워도 실제로 이를 철저히 지키는 것은 어렵습니다. 그래서 GS2에서 스탬프 시트를 발행하는 마이크로서비스는 《스탬프 시트 자동 실행》이라는 옵션을 가지고 있습니다. 이 옵션을 활성화하면, 어떤 이유로든 재시도가 필요한 상황이 발생했을 때 서버 사이드에서 자동으로 재시도가 수행됩니다. 《소비 액션에서 소비할 아이템의 잔량이 부족함》과 같이 재시도로 해결되지 않는 경우에는, 재시도가 수행되지 않을 수 있습니다. 여러 개의 입수 액션 중복 실행 방지 구조가 있다면, 입수 액션이 여러 개 있어도 되지 않을까 생각할 수 있습니다. 그것은 기본적으로 맞습니다. 하지만 주의해야 할 점은, 중복 실행 방지를 위한 응답 내용의 보존 기간이 무기한이 아니라는 것입니다. 응답 내용의 보존 기간이 지나면, 과거에 발행된 스탬프 시트를 다시 실행할 수 있게 되어 버립니다. 이 경우에도 소비 액션의 실행은 필요하지만, 소비 액션을 실행했다고 해도 다시 실행되는 것 자체가 바람직하지 않은 경우도 있습니다. 이러한 문제에 대처하기 위해, 스탬프 시트 실행이 끝났을 때 스탬프 시트 자체를 무효화하는 프로세스를 포함시켜, 응답 내용의 보존 기간이 지나더라도 다시 실행할 수 없도록 하고 있습니다. 여기서 《입수 액션》이 여러 개 있으면, 언제 스탬프 시트를 무효화해야 할지가 어려워집니다. 그래서 스탬프 시트에서는 《입수 액션》을 1개만 설정할 수 있도록 설계되어 있습니다. 하지만 현실적으로 게임을 만들다 보면, 입수 액션이 항상 1개로 끝나는 것은 아닙니다. 가장 일반적인 게임 사이클을 구성하는 퀘스트 기능조차, 《경험치 지급》과 《드롭 아이템 입수》라는 2개의 입수 액션이 동시에 발생합니다. 이러한 경우에 대응하기 위해, GS2에서는 잡 큐를 이용하고 있습니다. 잡 큐는 플레이어별로 마련되는 지연 실행용 큐입니다. 스탬프 시트에 《입수 액션》을 여러 개 설정하고 싶은 상황에서는, 《잡 큐에 입수 액션을 실행하는 잡을 여러 개 등록》하는 하나의 《입수 액션》을 설정합니다. 이 프로세스는 자동화되어 있으며, 퀘스트의 마스터 데이터에서 보상을 설정할 때는 여러 개의 《입수 액션》을 설정할 수 있게 되어 있습니다. 그리고 스탬프 시트를 발행할 때 이를 《입수 액션을 실행하는 잡을 여러 개 등록》하는 형태로 변형하여 스탬프 시트를 발행하고 있습니다. 스탬프 시트의 실행은 비동기 처리 지금까지의 설명으로 알 수 있듯이, 스탬프 시트의 완료를 기다리는 것은 매우 어렵습니다. GS2는 다수의 마이크로서비스를 제공하고 있지만, 그중 하나가 정지하더라도 서비스 전체가 정지하지 않도록 설계되어 있습니다. 하지만 장애가 발생한 시점에는 스탬프 시트나 잡 큐의 실행이 지연되어, 결과 반영이 즉시 완료된다는 보장은 없습니다. 한편, 장애가 복구되면 여러분이 아무것도 하지 않아도 스탬프 시트나 잡 큐의 재시도에 의해 처리가 흐르기 시작하여, 결국 정상화됩니다. 지금까지의 개발 스타일과 다르기 때문에 당황할 수도 있습니다. 하지만 부분적인 마이크로서비스 장애로 인해 일시적으로 불일치 상황이 발생하더라도, 아무것도 신경 쓰지 않아도 장애 복구 후 언젠가는 정상화된다는 전체적인 이점을 취하여 GS2에서는 이러한 설계를 채택하고 있습니다. 스탬프 시트 발행 시 파라미터 설정 각 서비스로의 요청에는 어느 사용자의 리소스를 조작할지에 대한 정보가 필요하지만, 게임 내 상점이나 퀘스트의 마스터 데이터에는 미리 사용자ID를 정적으로 지정할 수 없습니다. 그래서 스탬프 시트의 요청에 변수를 삽입할 수 있습니다. 마스터 데이터의 액션 요청에 #{userId}라는 플레이스홀더 문자열을 설정하면, 그 부분은 스탬프 시트를 발행할 때 스탬프 시트 발행을 수행한 사용자의 사용자ID로 치환됩니다. Config 스탬프 시트의 발행 요청에는 Config(EzConfig)라는 파라미터를 전달할 수 있게 되어 있습니다. Config(EzConfig)는 키-값 형식으로, 전달한 파라미터로 #{Config에서 지정한 키 값} 이라는 플레이스홀더 문자열을 치환할 수 있습니다. 지갑에 잔액을 추가하는 스탬프 시트 예시 { \"name\": \"currency-120-jpy\", \"metadata\": \"price: 120 currencyCount: 50\", \"consumeActions\": [ { \"action\": \"Gs2Money:RecordReceipt\", \"request\": \"{\\\"namespaceName\\\": \\\"money-0001\\\", \\\"contentsId\\\": \\\"io.gs2.sample.currency120\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"receipt\\\": \\\"#{receipt}\\\"}\" } ], \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\", \"request\": \"{\\\"namespaceName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"slot\\\": \\\"#{slot}\\\", \\\"price\\\": 120, \\\"count\\\": 50}\" } ] } Unity에서 Config 값을 설정하는 예시 var result = await gs2.Showcase.Namespace( namespaceName: \"namespace-0001\" ).Me( gameSession: GameSession ).Showcase( showcaseName: \"showcase-0001\" ).BuyAsync( displayItemId: \"display-item-0001\", quantity: 1, config: new [] { new EzConfig { Key = \"slot\", Value = Slot.ToString(), }, new EzConfig { Key = \"receipt\", Value = receipt, }, } ); 스탬프 시트 《소비 액션》의 실행 결과 액션 요청 기술 내용에, 예를 들어 %{Gs2Money:WithdrawByUserId.price} 라는 플레이스홀더 문자열을 설정하면, 그 부분은 《소비 액션》의 실행 결과로 치환되어 변수로 이용할 수 있습니다. 예시로 든 케이스에서는, 실행한 《소비 액션》 중 Gs2Money:WithdrawByUserId의 실행 결과를 참조하여, 반환값의 price를 값으로 사용합니다. 자식 요소를 참조하는 경우에는 %{Gs2Money:WithdrawByUserId.item.paid} 처럼 점(.)으로 연결하여 참조할 수 있습니다. 동일한 액션이 《소비 액션》으로 여러 번 등록되어 있는 경우 채택되는 값은 정해져 있지 않습니다.","lang":"ko","section":"articles","summary":"Game Server Services의 트랜잭션 시스템인 스탬프 시트에 대한 설명","title":"스탬프 시트","url":"/ko/articles/tech/stamp_sheet/"},{"content":"GS2가 응답하는 에러는 일정한 규칙에 따라 응답됩니다. 이 규칙을 이해하면 에러 해결을 신속하게 수행할 수 있습니다. 에러 메시지 예시 [{\"component\":\"progress\",\"message\":\"quest.progress.progress.error.notFound\"}] 섹션 설명 component 에러가 발생한 대상을 나타내며, 멤버 이름, 메서드 이름이 들어갑니다. message 에러 위치의 상세 내용, 에러를 나타내는 키워드가 들어갑니다. 서비스명 . 컴포넌트 .error. 에러 내용 주요 에러 내용 주요 에러 내용 설명 failed 처리에 실패했습니다. invalid 잘못된 파라미터입니다. require 필요한 인수가 없습니다. tooLong 인수의 문자 수가 너무 깁니다. tooMany 배열의 요소 수가 너무 많습니다. exists 이미 존재합니다. duplicate 중복, 이미 존재합니다. notFound 찾을 수 없습니다. notMatch 일치하지 않습니다. 예외의 종류 SDK에 의해 에러는 어느 정도 분류되며, 발생하는 예외의 유형이 달라집니다. 모든 예외는 Gs2Exception 을 상속하고 있으며, 다음 속성을 참조함으로써 재시도 필요 여부를 판단할 수 있습니다. RecommendRetry : 사용자에게 “재시도” 버튼을 표시하는 등, 수동 재시도를 검토해야 하는 에러. RecommendAutoRetry : 사용자에게 알리지 않고 시스템 측에서 자동으로 재시도해도 안전한 에러. 예외 에러 내용 상태 코드 RecommendRetry RecommendAutoRetry BadRequestException 요청 내용이 올바르지 않습니다. 400 UnauthorizedException 권한 인증을 할 수 없었습니다. 401 QuotaLimitExceededException 쿼터 제한을 초과했습니다. 402 ✔︎ NotFoundException 대상을 찾을 수 없었습니다. 404 ConflictException 처리가 충돌했습니다. 409 ✔︎ InternalServerErrorException 서버에서 에러가 발생했습니다. 500 ✔︎ ✔︎ BadGatewayException 서버가 잘못된 응답을 받았습니다. 502 ✔︎ ✔︎ ServiceUnavailableException 서비스에서 일시적인 에러가 발생했습니다. 503 ✔︎ ✔︎ RequestTimeoutException 요청이 타임아웃되었습니다. 504 ✔︎ ✔︎ UnknownException 알 수 없는 예외가 발생했습니다. RecommendRetry 가 true인 예외는 요청 파라미터는 정상이지만 서버의 상태에 따라 발생할 수 있는 에러입니다. 이러한 에러를 감지한 경우에는 재시도할 것을 권장합니다. 이때 성공할 때까지 재시도하는 것이 아니라, 일정 횟수나 일정 시간 경과 시 타임아웃되도록 구현할 것을 강력히 권장합니다. 재시도할 때는 요청 사이에 슬립을 넣을 것을 권장하며, 재시도 횟수에 따라 슬립 시간을 늘려나갈 것을 권장합니다. 게임 내에서 핸들링이 필요한 에러에 대해서는, 마이크로서비스별로 나열된 예외를 상속한 에러 고유의 예외 타입을 정의한 경우가 있습니다. 그 경우, 에러 고유의 예외로 에러 핸들링을 하면 더 간편하게 에러 핸들링을 구현할 수 있습니다. 고유의 에러를 표현하는 예외가 존재하는 경우, API 레퍼런스의 메서드 설명에 기재되어 있으므로 그쪽을 참조해 주십시오. 클라이언트에서 발생하는 예외의 취득 GS2-CSharp-SDK, GS2 SDK for Unity에서는 접속에 사용하는 게임 엔진/프레임워크에서 발생한 에러 내용의 메시지를 취득할 수 있습니다. 예외 에러 내용 상태 코드 NoInternetConnectionException 인터넷 접속에 실패했습니다. ※단말기가 비행기 모드/전파권 밖/라우터에 연결되어 있지만 외부로 나갈 수 없는 등, 소켓 확립이나 DNS 해석에 실패했을 때의 접속 에러를 포함합니다. 0 　ConnectionException (Unity만 해당)　서버와의 통신에 실패했습니다. 요청이 접속할 수 없었거나, 보안이 적용된 채널을 확립할 수 없었던 경우 등. 0 　DataProcessingException (Unity만 해당)　데이터 처리 중 에러가 발생했습니다. 0 　HttpRequestException (.net만 해당)　HttpRequest에서 에러가 발생했습니다. 0 카오스 모드 GS2 C# SDK 및 GS2 SDK for Unity에는 카오스 모드가 탑재되어 있습니다. 카오스 모드를 활성화하면 지정한 비율로 재시도가 필요한 예외를 무작위로 발생시킵니다. 카오스 모드를 활성화한 상태로 개발을 진행함으로써 게임 내 에러 핸들링을 더욱 견고하게 만들 수 있습니다. 카오스 모드 활성화 방법은 초기화 처리 를 참조해 주십시오. 구현 가이드 보다 구체적인 구현 방법이나 모범 사례에 대해서는 에러 핸들링 구현 패턴 을 참조해 주십시오.","lang":"ko","section":"articles","summary":"Game Server Services를 이용하는 과정에서 발생하는 일반적인 에러\n","title":"에러·예외","url":"/ko/articles/tech/error/"},{"content":"GS2의 각 서비스에 접근하기 위한 크리덴셜(인증 정보)이나 접근 권한을 관리하는 구조가 GS2-Identifier입니다. 각 서비스에 접근이 가능한지에 대한 권한 관리는 GS2-Identifier 사용자(이하 사용자) 단위로 이루어집니다. 사용자에게는 GS2의 어떤 서비스를 이용할 수 있는지에 대한 정의(보안 정책)를 할당합니다. GS2는 크리덴셜을 사용하여 접근한 사용자를 인증하고, 프로젝트 토큰을 반환합니다. 게임 앱/관리 도구는 이 프로젝트 토큰을 사용하여 각 서비스에 접근합니다. 권한에 대한 상세한 설정은 보안 정책에서 정의되며, 이를 사용자마다 할당합니다. 사용자 사용자가 갖는 데이터 구조의 개요는 다음과 같습니다. class User { +userId +name : } class Identifier { +clientId +clientSecret : } class Password { +hashedPassword : } class AttachedSecurityPolicy { +securityPolicyId : } class SecurityPolicy { +policyDocument : } User \"1\" *-- \"many\" Identifier User \"1\" --- \"1\" Password User \"1\" *-- \" 보안 정책 보안 정책에는 미리 다음과 같은 정책이 정의되어 있습니다. 보안 정책 이름 설명 AdministratorAccess 모든 API를 이용할 수 있는 권한 ApplicationAccess 치트 행위로 이어지지 않는 API만 호출할 수 있는 권한 DeliveryAccess GS2-Distributor가 리소스 오버플로우 처리를 실행하기 위해 필요한 권한 UnauthenticatedAccess 버전 체크(GS2-Version) 실행에 필요한 처리(로그인 처리 포함)만 수행할 수 있는 권한 AdministratorAccess 정책은 GS2의 모든 서비스에 접근 가능한 권한입니다. 게임 앱 내에 내장하여 사용하는 것을 전제로 한 ApplicationAccess 정책은, 치트 행위로 이어질 수 있는 서버 조작이 가능한 API 호출을 할 수 없도록 설정되어 있습니다. 보안 정책의 형식 보안 정책은 JSON 형식으로 작성합니다. Statements 안에 Effect, Actions, Resources 각 요소를 포함시킵니다. *(애스터리스크)는 와일드카드를 나타냅니다. 가장 단순한 보안 정책은 다음 예시와 같습니다. 이 보안 정책은 모든 서비스, 모든 API에 대해 모든 조작을 허용하는 것입니다. { \"Version\": \"2016-04-01\", \"Statements\": [ { \"Effect\": \"Allow\", \"Actions\": [ \"*\" ], \"Resources\": [ \"*\" ] } ] } Actions 예시로 든 보안 정책은 GS2-Inbox 서비스에 대해 모든 조작을 수행할 수 있다는 것입니다. 이 예시의 보안 정책이 할당된 사용자의 권한은 GS2-Inbox 이외의 서비스에는 접근할 수 없습니다. *(애스터리스크)는 와일드카드를 나타냅니다. { \"Version\": \"2016-04-01\", \"Statements\": [ { \"Effect\": \"Allow\", \"Actions\": [ \"Gs2Inbox:*\" ], \"Resources\": [ \"*\" ] } ] } Effect 이 정책에서 API 접근에 대한 허가/불허가를 지정합니다. 지정 접근 Allow 허가 Deny 불허가 액션 열거 Actions에는 액션, 즉 접근하여 실행 가능/불가능한 메서드의 지정을 열거할 수 있습니다. 각 서비스의 레퍼런스에 기재된 메서드를 지정합니다. [서비스 이름]:[메서드 이름]과 같이 :(콜론)을 사이에 넣어 주세요. 서비스 이름 지정은 Gs2Inbox 처럼 -(하이픈)을 포함하지 않고, Gs2에 각 서비스의 명칭이 이어진 형태가 됩니다. 메서드 이름은 SendMessage 처럼 첫 글자가 대문자(어퍼 카멜 케이스)가 됩니다. { \"Version\": \"2016-04-01\", \"Statements\": [ { \"Effect\": \"Allow\", \"Actions\": [ \"Gs2Inbox:SendMessage\", \"Gs2Inbox:DescribeMessage\", \"Gs2Inbox:ReadMessage\", \"Gs2Inbox:DeleteMessage\" ], \"Resources\": [ \"*\" ] } ] } Resources 이 정책의 영향을 받는 리소스의 범위를 지정하는 변수입니다. Resources에는 조작을 허가하거나 거부하고자 하는 리소스의 GRN을 열거합니다. Actions와 마찬가지로 앞뒤에 와일드카드를 사용할 수 있습니다. { \"Version\": \"2016-04-01\", \"Statements\": [ { \"Effect\": \"Allow\", \"Actions\": [ \"Gs2Inbox:SendMessage\" ], \"Resources\": [ \"grn:gs2:{region}:{ownerId}:inbox:namespace-0001\", \"grn:gs2:{region}:{ownerId}:inbox:namespace-0001:*\" ] } ] } 이 예시에서는 namespace-0001에 대해서만 SendMessage가 가능한 권한을 설정하고 있습니다. 플레이스홀더 GRN의 요소 중 “리전 이름: {region}”, “오너ID: {ownerId}”, “사용자ID: {userId}“에는 플레이스홀더를 사용할 수 있습니다. 플레이스홀더를 지정하면 실행 시 접근하고 있는 값으로 치환되어 평가됩니다. 보안 정책 판정 사용자는 최대 10개의 보안 정책을 할당할 수 있습니다. Effect에 Allow가 지정된 액션에 대해 Or로 처리한 후, Effect에 Deny가 지정된 액션에 대해 Or로 처리한 것을 제외한 API를 호출할 수 있게 됩니다. 즉, Allow와 Deny 양쪽에 기술이 있는 경우에는 Deny가 우선됩니다.","lang":"ko","section":"articles","summary":"GS2의 API에 대한 접근 제어\n","title":"접근 제어","url":"/ko/articles/tech/identifier/"},{"content":"여기서는 모든 마이크로서비스에 공통되는 초기화 처리에 대해 설명합니다. 초기화 처리는 for Game Engine과 그 외의 경우로 크게 방침이 다릅니다. 원칙적으로 for Game Engine은 개발자가 더 편하게 작업할 수 있도록 유틸리티 클래스가 충실히 갖춰져 있으며 유틸리티 클래스를 이용한 초기화 처리를 수행한다는 점이 다릅니다.","lang":"ko","section":"api_reference","summary":"여기서는 모든 마이크로서비스에 공통되는 초기화 처리에 대해 설명합니다.\n초기화 처리는 for Game Engine과 그 외의 경우로 크게 방침이 다릅니다. 원칙적으로 for Game Engine은 개발자가 더 편하게 작업할 수 있도록 유틸리티 클래스가 충실히 갖춰져 있으며 유틸리티 클래스를 이용한 초기화 처리를 수행한다는 점이 다릅니다.\n","title":"초기화 처리","url":"/ko/api_reference/initialize/"},{"content":"트렌드 오랫동안 일본의 스마트폰 게임은 가챠로 캐릭터를 획득하는 것이 수익화의 트렌드였으며, 가챠를 뽑기 위한 과금 통화를 판매하는 도선이 주류였습니다. 그로 인해 게임 내에서 실제 화폐로 구매 가능한 판매 아이템도 과금 통화만 제공하는 게임이 대다수였습니다. 그러나 최근에는 상품 라인업을 충실하게 갖추는 판매 스타일이 일반화되고 있습니다. 과금 통화는 현금 가치의 전환처로서의 조정 역할로 《상품 라인업의 충실화》란 구체적으로 어떤 것일까요? 스태미나 회복 아이템 + 과금 통화 육성 소재 + 과금 통화 SSR 확정 가챠 티켓 + 과금 통화 구체적으로는 위와 같은 라인업이 늘고 있습니다. 이러한 변화의 배경에는 플레이어에게 무작위성이 낮고 즉시 효과를 발휘하는 이점을 제공하려는 의도가 엿보입니다. 게다가 SSR 확정 가챠 티켓이나, 게임 진행을 상당히 효율화할 수 있는 육성 소재 등을 번들로 묶은 알뜰한 패키지 상품을, 게임 진행 상황에 맞춰 기간 한정으로 판매함으로써 과금 욕구를 높이면서도 플레이어의 만족도를 높이고 있습니다. 여기서 핵심이 되는 것이 번들에 과금 통화가 포함되어 있다는 점입니다. 스태미나 회복 아이템, 육성 소재, 가챠 티켓 모두 플레이어가 사용하기 전까지는 즉시 효과를 발휘하지 않는 성질의 아이템을 번들로 묶고 있습니다. 자금결제법의 선불식 지급수단에서는, 즉시 효과를 발휘하지 않는 게임 내 아이템은 가치의 전환이 이루어지며, 서비스 종료 시 환불이 가능하도록 엄격한 잔액 관리나 공탁이 요구됩니다. 그러나 과금 통화의 단독 판매 옆에 번들 판매를 두고, 금액과 과금 통화 지급 수의 균형을 일치시킴으로써 “스태미나 회복 아이템, 육성 소재, 가챠 티켓 같은 아이템은 덤이며 금전적인 가치는 없습니다\"라는 명분을 세울 수 있습니다. 이러한 명분 덕분에 번들에 포함시키는 아이템의 효과 발휘 시점을 고려하지 않고도 유연하게 번들 아이템을 결정할 수 있게 되었습니다. 플레이어 체감의 변화 번들 판매가 늘어나면 과금 통화가 보이는 방식이 달라집니다. 저 개인의 경험으로는 자금결제법의 법 해석과는 반대로 과금 통화가 덤처럼 느껴지게 됩니다. 원하는 게임 내 아이템이 포함된 번들 팩을 구매하다 보면, 점점 과금 통화가 쌓여가는 느낌이 듭니다. “원하는 것을 사다 보니 과금 통화가 쌓였으니 가챠를 돌리자\"라는 마음으로 가챠를 돌리면, SSR이 나오지 않아도 심리적 타격이 줄어드는 것 같습니다. 이는 플레이어의 만족도 향상과 인게이지먼트 장기화라는 측면에서 또 다른 효과가 있을지도 모릅니다. 과금 압박 기간 한정 판매는 플레이어에게 과금 압박으로 받아들여집니다. 등장 빈도에 주의를 기울이면서 실시하는 것이 중요합니다. 잼의 법칙에 주의하자 여기서 주의해야 할 것은 “잼의 법칙\"이라는 마케팅 이론입니다. 소비자는 선택지가 많아질수록 구매 의욕이 떨어진다는 법칙입니다. 무엇이든 번들로 묶을 수 있게 되었기 때문에, 플레이어가 원할 만한 다양한 아이템을 번들로 묶은 패키지 상품을 대량으로 준비하면 오히려 역효과가 날 수도 있습니다. 면책 사항 이 글에서 다룬 자금결제법의 법 해석에 대해 GS2는 책임을 지지 않습니다. 정식 법 해석에 대해서는 고문 변호사에게 확인하시기 바랍니다. 2023-10-06 Kazutomo Niwa","lang":"ko","section":"design_knowledge","summary":"2020년 이후의 수익화 트렌드에 대해","title":"최근의 수익화 트렌드","url":"/ko/design_knowledge/japanese_metagame/trends/"},{"content":"Game Server Services는 서버 솔루션이 아니다 서비스 명칭을 부정하는 듯한 이야기를 하겠습니다. 저희가 Game Server Services를 개발할 때 가장 중요하게 여기는 것은 게임 개발자의 개발 경험을 최고로 만드는 것 입니다. 게임 개발자에게 네트워크 기능 은 어떻게 보일까요? 있으면 게임을 더 재미있게 만들 수 있다 요즘 게임이라면 있는 것이 당연하다 게임으로 장기간 비즈니스를 하려면 필요하다 한편, 게임 개발자에게 서버 개발 은 어떻게 보일까요? 귀찮다 힘들 것 같다 가까이하고 싶지 않다 이 간극을 메우기 위한 솔루션이 바로 Game Server Services 입니다. 서버를 사용하는 것은 힘들다! 네트워크 기능을 구현하려면 서버가 필요합니다. 하지만 서버 개발자는 API는 만들어 주어도 SDK는 만들어 주지 않습니다. 그렇다면 서버 API와의 통신 처리는 누가 프로그래밍할까요? 바로 게임 개발자 입니다. Game Server Services는 게임 개발자에게 최대한 친화적인 SDK를 제공하여, 통신 처리를 귀찮은 것에서 일반적인 라이브러리처럼 다룰 수 있는 것으로 바꾸려 하고 있습니다. 대표적인 노력에는 다음과 같은 것들이 있습니다. 서버와의 통신 횟수나 통신 시간을 신경 쓰지 않아도 되게 하는 캐시 메커니즘을 탑재한 SDK Unity / Unreal Engine과의 통합으로, 노코드 개발이 가능한 SDK 데이터 분석이나 고객 지원도 힘들다! Game as a Service를 실천하면, 플레이어가 게임을 어떻게 플레이하고 있는지에 대한 데이터 분석이 필요해집니다. 서버를 새로 만들면, 데이터 분석 구조도 함께 만들어야 합니다. 고객 지원도 마찬가지입니다. 장기 운영형 게임에서는 고객 지원 대응이 늘어납니다. 고객이 말하는 것이 항상 사실이라고는 할 수 없습니다. 행동 로그를 확인하여, 고객이 말하는 내용이 맞는지 판단하고 개발 부서로 에스컬레이션할 필요가 있을 것입니다. 이 구조가 미흡하면 모든 문의가 게임 개발자에게 전달되어, 게임 개발은커녕 다른 일을 할 수 없게 됩니다. Game Server Services는 데이터 분석과 고객 지원 도구도 제공함으로써, 이러한 상황을 피할 수 있도록 하고 있습니다. 서버리스와 마이크로서비스 게임 개발자가 서버를 운영할 경우, 서버의 생존 감시나 스케일 업, OS 업데이트 등 게임의 본질과는 관계없는 작업에 쫓기기 쉽습니다. GS2는 서버리스 아키텍처를 채택하고 있어, 개발자가 서버 관리를 의식할 필요가 없습니다. 또한 기능별로 독립된 마이크로서비스 로 제공되기 때문에, 필요한 기능만 선택하여 조합하는 것이 가능합니다. 네트워크 기능의 종합 개발 운영 환경 Game Server Services는 단순한 “API의 집합\"이 아니라, 개발부터 운영까지를 지원하는 종합적인 환경을 제공하고 있습니다. graph LR subgraph \"Game Server Services (GS2)\" SDK[GS2 SDK] API[GS2 Microservices] Console[Management Console] Analytics[Analytics / Logs] end Developer[Game Developer] --\u003e SDK Developer --\u003e Console Developer --\u003e Analytics GameClient[Game Client] --\u003e SDK SDK --\u003e API API --\u003e Analytics 즉 Game Server Services는 게임 서버를 중심축으로 하여, 게임 개발자가 네트워크 대응을 손쉽게 할 수 있도록 하고, 그 후의 데이터 분석·고객 지원 구조도 제공하는 네트워크 기능의 종합 개발 운영 환경 을 제공하고 있습니다.","lang":"ko","section":"overview","summary":"Game Server Services가 지향하는 게임 개발 환경에 대해\n","title":"Game Server Services의 컨셉","url":"/ko/overview/concept/"},{"content":"","lang":"ko","section":"get_start","summary":"Game Server Services 에서 계정을 생성하고 로그인하기까지 구현해 봅시다\n","title":"튜토리얼","url":"/ko/get_start/tutorial/"},{"content":"GS2가 제공하는 마이크로서비스에는 대체로 네임스페이스 설정에 TransactionSetting이라는 필드가 존재합니다. TransactionSetting은 다음과 같은 구조를 가집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool  false 발행한 트랜잭션을 서버 측에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true  false 트랜잭션 실행을 원자적(atomic)으로 커밋할지 여부 enableAutoRun이 true이면 필수 transactionUseDistributor bool {enableAtomicCommit} == true  false 트랜잭션을 비동기 처리로 실행 enableAtomicCommit이 true이면 필수 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true  false 스크립트 결과 커밋 처리를 비동기 처리로 실행할지 여부 transactionUseDistributor가 true이면 필수 acquireActionUseJobQueue bool {enableAtomicCommit} == true  false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 enableAtomicCommit이 true이면 필수 distributorNamespaceId string  “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 queueNamespaceId string  “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 필드가 많고 그 용도도 복잡하므로 이 문서에서 자세히 설명합니다. 필드 해설 enableAutoRun 발행한 트랜잭션을 자동으로 실행할지를 설정합니다. 여기서 false로 할 이유는 이제 거의 없습니다. 예전에 GS2에는 트랜잭션을 자동으로 실행하는 구조가 없어서, 발행된 트랜잭션을 수동으로 각 마이크로서비스에 요청하여 처리하는 것이 주요한 트랜잭션 실행 방법이었지만, 지금에 와서는 트랜잭션이 도중에 실패했을 때의 오류 처리를 복잡하게 만들 뿐입니다. enableAtomicCommit GS2의 트랜잭션 시스템 역사에서도 비교적 나중에 추가된 기능이 이 AtomicCommit 기능입니다. AtomicCommit 기능이 없던 시절에는 발행된 트랜잭션이 비동기 처리로 실행되었기 때문에, 예를 들어 GS2-Showcase에서 상품을 구매하는 API를 호출한 시점에는 구매 처리가 완료되지 않았고, 비동기 처리로 실행되는 트랜잭션의 결과가 반환되어야만 비로소 트랜잭션이 성공했는지 실패했는지를 알 수 있었습니다. 이러한 설계의 문제는 트랜잭션 실행 과정에서 오류가 발생했을 때 나타났습니다. 소비 액션에 성공한 후, 입수 액션 실행에 실패한 경우, 그것이 재시도할 가치가 있는 서버 오류였다면 자동으로 재시도되어 트랜잭션을 완료하도록 서버 측에서 노력하는 것이 자동 실행의 구조입니다. 하지만 입수 액션이 소지 수량 초과였거나, 복수 설정된 소비 액션 중 하나가 리소스 부족이었던 경우처럼 재시도해도 의미가 없는 상황이 되면 그 시점에서 트랜잭션은 실패하지만, 이미 성공한 소비 액션은 실행된 채로 남아 있는 경우가 있었습니다. 이러한 문제를 해결하기 위해 마련된 것이 AtomicCommit으로, GS2-Showcase의 상품 구매 API 응답을 반환하기 전에 소비 액션과 입수 액션을 실행하고, 모두 성공하면 결과를 데이터베이스에 반영하는 동작을 하게 됩니다. 이 설정을 통해 트랜잭션이 어중간한 상태로 실행되어 버리는 문제를 회피할 수 있습니다. 그렇기 때문에 새롭게 GS2를 이용한 게임을 개발할 때는 AtomicCommit을 활성화하여 개발을 진행할 것을 강력히 권장합니다. 다만 AtomicCommit은 만능이 아니며, 소비 액션과 입수 액션을 동시에 실행하기 때문에 액션 내에서 동일한 리소스에 대해 갱신 처리를 시도하면 오류가 발생합니다. 그러한 트랜잭션을 실행할 때는 AtomicCommit을 활성화할 수 없다는 점에 주의가 필요합니다. 또한 AtomicCommit을 활성화하면, 그 효력은 트랜잭션 실행뿐만 아니라 해당 API에서 실행되는 사전 스크립트에도 적용됩니다. 예를 들어 상품 구매 시의 스크립트를 설정한 경우, 그 스크립트에서 GS2의 API를 호출하여 데이터를 다시 쓰는 처리나, 스크립트가 발행한 트랜잭션도 GS2-Showcase의 상품 구매 API가 성공했을 때 결과가 반영되게 됩니다. transactionUseDistributor enableAtomicCommit을 활성화한 상태에서 이용할 수 있는 옵션입니다. 트랜잭션 실행을 비동기 처리로 수행하도록 하는 설정입니다. 이 설정을 하면 소비 액션과 입수 액션은 AtomicCommit으로 처리되지만, 그 완료를 기다리지 않고 GS2-Showcase의 상품 구매 API는 응답을 반환합니다. 트랜잭션 결과를 기다릴 필요가 없을 때 활성화하거나, 상품 구매 시 스크립트에서 다시 쓰는 내용과 트랜잭션에서 다시 쓰는 내용이 충돌하는 경우에 활성화하는 용도를 상정하고 있습니다. commitScriptResultInUseDistributor transactionUseDistributor를 활성화했을 때 이용할 수 있는 옵션입니다. 사전 스크립트에 의해 다시 쓰이는 처리도, 비동기 처리로 실행되는 소비 액션과 입수 액션의 트랜잭션에 포함시킬 수 있습니다. 이를 통해 스크립트의 실행 결과만 반영되는 것을 방지하면서, 트랜잭션 실행을 비동기 처리로 만드는 것이 가능해집니다. acquireActionUseJobQueue enableAtomicCommit을 활성화한 상태에서 이용할 수 있는 옵션입니다. 발행하는 트랜잭션의 입수 액션을 GS2-JobQueue에 대한 잡 등록으로 전환하여, 비동기 처리로 입수 액션을 실행하도록 설정할 수 있습니다. 이 설정을 통해 소비 액션과 입수 액션이 경합하는 경우나, 복수 설정된 입수 액션 사이에 경합이 발생하는 경우의 문제를 회피할 수 있습니다. distributorNamespaceId 트랜잭션을 자동으로 실행할 때 사용하는 GS2-Distributor의 네임스페이스를 설정합니다. queueNamespaceId 트랜잭션의 입수 액션을 잡 큐를 경유하여 실행할 때 사용하는 GS2-JobQueue의 네임스페이스를 설정합니다. 어떤 트랜잭션 시스템을 이용해야 하는지 판단하는 흐름도 graph TD Start --\u003e 1st[\"enableAutoRun = true, enableAtomicCommit = true\"] 1st --\u003e Async{\"게임에서 트랜잭션 실행 결과를 사용할 필요가 있는가\"} Async -- 기다릴 필요가 없음 --\u003e UseDistributor2[\"transactionUseDistributor = true\"] Async -- 기다릴 필요가 있음 --\u003e Conflict{\"경합 오류가 발생하는가\"} Conflict -- 경합하지 않음 --\u003e End Conflict -- 경합함--\u003e 2nd{\"경합하고 있는 내용을 조사\"} 2nd -- 경합하고 있는 것이 스크립트와 트랜잭션 --\u003e UseDistributor[\"transactionUseDistributor = true\"] 2nd -- 트랜잭션의 소비 액션끼리 --\u003e NotAtomicCommit[\"enableAtomicCommit = false\"] 2nd -- 트랜잭션의 소비 액션과 입수 액션 ----\u003e UseJobQueue[\"acquireActionUseJobQueue = true\"] 2nd -- 트랜잭션의 입수 액션끼리 --\u003e UseJobQueue UseDistributor2 --\u003e 3rd{\"사전 스크립트를 설정하고 있는가\"} 3rd -- 설정하지 않음 --\u003e Conflict 3rd -- 설정함 --\u003e UseScript{\"스크립트의 결과도 트랜잭션과 함께 반영되기를 원하는가\"} UseScript -- 하지 않아도 됨 --\u003e Conflict UseScript -- 원함 --\u003e CommitScriptResultInUseDistributor[\"commitScriptResultInUseDistributor = true\"] CommitScriptResultInUseDistributor --\u003e Conflict NotAtomicCommit --\u003e End UseJobQueue --\u003e End","lang":"ko","section":"articles","summary":"Game Server Services의 트랜잭션 설정 설계 방침","title":"트랜잭션 설정","url":"/ko/articles/tech/transaction/"},{"content":"GS2에는 프로젝트 관리를 위해, 관리 콘솔에 로그인할 수 있는 계정을 여러 개 준비할 수 있습니다. 로그인에 사용할 사용자 생성 먼저 GS2-Identifier에 로그인 사용자별로 User를 추가합니다. 사용자 이름을 입력하고 사용자를 생성합니다. 사용자에게 권한 설정 사용자에게 적절한 권한을 설정합니다. 보안 정책에 대한 자세한 내용은 접근 제어 를 참조해 주세요. 사용자에게 비밀번호 설정 생성한 사용자를 선택합니다. Password 탭을 선택합니다. 비밀번호를 생성합니다. 로그인 URL 확인 Password 탭 내 정보에 이 사용자로서 관리 콘솔에 로그인하기 위한 URL이 기재되어 있습니다.","lang":"ko","section":"articles","summary":"하나의 프로젝트를 여러 사람이 관리하는 방법\n","title":"프로젝트 공유","url":"/ko/articles/project/share/"},{"content":"모델 EzAccount 게임 플레이어 계정 게임 플레이어를 식별하는 ID 정보 엔티티입니다. 게임 플레이어 계정은 익명 계정이며 사용자ID(UUID)와 비밀번호(무작위 32자 문자열)로 구성되므로, 게임 플레이어는 이메일 주소 등의 정보를 입력할 필요가 없습니다. 발급된 게임 플레이어 계정은 디바이스의 로컬 스토리지에 저장해 두고, 다음번 로그인부터 사용합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  UUID ~ 128자 사용자ID password string  ~ 128자 비밀번호 계정의 보안을 확보하기 위한 비밀번호를 저장합니다. 비밀번호는 최대 128자 길이를 가지며, 계정 보호에 중요한 역할을 합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzTakeOver 인계 정보 인계 정보란 디바이스 기종 변경이나 플랫폼 간 계정 이동·공유 시에 사용하는 정보입니다. 개인을 식별하는 고유한 문자열과 비밀번호로 구성되며, 올바른 조합을 입력함으로써 Account(익명 계정)를 취득할 수 있습니다. 하나의 Account에 대해 여러 개의 인계 정보를 설정할 수 있습니다. 여러 개의 인계 정보를 설정하려면 각각 다른 슬롯을 지정해야 합니다. 슬롯에는 0~1024를 지정할 수 있으므로, 최대 1,025종류의 인계 정보를 설정할 수 있습니다. 구체적인 예시로는 0에는 Sign in with Apple의 계정 정보를, 1에는 Google의 계정 정보를 저장하는 방식이 예상됩니다. 어디까지나 이 인계 정보는 데이터 홀더일 뿐이며, 소셜 계정과의 인증 구조는 별도로 준비해야 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. userIdentifier string  ~ 1024자 인계용 사용자 ID 계정을 인계할 때 사용되는 개인을 식별하기 위한 고유 키입니다. 서로 다른 계정에서 동일한 userIdentifier를 지정한 경우, 나중에 설정한 값이 우선됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzPlatformId 외부 플랫폼 계정 ID X, Instagram, Facebook 등 외부 서비스의 사용자 식별자를 보유합니다. 다른 플레이어는 외부 플랫폼 계정 정보를 사용하여 GS2-Account 사용자 ID를 검색할 수 있습니다. Instagram의 팔로워나 Facebook의 친구를 게임 내 친구로 임포트할 때, GS2-Account의 계정을 특정하기 위해 사용합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string  ~ 1024자 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. userId string  ~ 128자 GS2-Account 사용자 ID 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzPlatformUser 외부 플랫폼 사용자 정보 외부 플랫폼에서의 사용자 정보를 보유합니다. 플랫폼 고유의 사용자 식별자와 대응하는 GS2-Account 사용자 ID의 매핑을 포함하며, 외부 플랫폼의 계정 ID를 이용한 플레이어 검색에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string  ~ 1024자 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. userId string  ~ 128자 GS2-Account 사용자 ID 이 플랫폼 사용자에게 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. EzBanStatus 계정 BAN 상태 게임 플레이어 계정에 적용된 BAN(접근 금지) 상태에 관한 정보를 나타냅니다. 이 타입은 BAN이 적용된 이유, BAN의 명칭, 그리고 BAN 해제 예정 일시 등의 상세 정보를 포함합니다. BAN 상태는 부정 행위나 이용 약관 위반 등 다양한 이유로 계정에 적용될 수 있으며, 이 타입은 그 상태를 관리하는 데 도움이 됩니다. 시스템은 이 정보를 바탕으로 계정의 접근 권한을 제어하고, 필요에 따라 접근을 제한하거나 해제합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 36자 BAN 상태 이름 BAN 상태의 고유한 이름을 보유합니다. 이름에는 임의의 값을 설정할 수 있습니다. 생략할 경우 UUID(Universally Unique Identifier) 형식으로 자동 생성되어 각 BAN 상태를 식별하는 데 사용됩니다. 이 ID를 통해 여러 개의 BAN 상태를 쉽게 추적할 수 있습니다. reason string  ~ 256자 계정이 BAN된 이유 계정이 BAN된 구체적인 이유를 설명합니다. 최대 256자 길이로, 계정 BAN의 원인을 명확히 하는 데 도움이 됩니다. 이 정보는 계정 관리자나 운영팀이 참조할 뿐만 아니라, 게임 클라이언트로의 응답값에도 포함됩니다. releaseTimestamp long  BAN이 해제되는 일시 계정 BAN이 해제될 예정 일시를 나타냅니다. 이 일시가 지나면 계정은 자동으로 BAN 해제 상태가 되어 정상적인 접근이 가능해집니다. 메서드 authentication 계정에 로그인합니다 계정 생성 시 발급받은 사용자 ID와 비밀번호를 사용하여 게임 플레이어의 로그인 처리를 수행합니다. 로그인에 성공하면 계정 인증 정보 와 서명 이 발급됩니다. 이를 GS2-Auth::Login 에 전달하면 GS2의 각 서비스를 이용하기 위한 액세스 토큰 을 얻을 수 있습니다. 일반적으로는 GS2-Profile::Login을 사용하여 이 처리와 GS2-Auth::Login 을 한 번에 실행할 수 있습니다. 자세한 내용은 “시작하기\"의 샘플 프로그램을 참조하십시오. 계정 인증 정보 와 서명 의 유효 기간은 1시간입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN password string  ~ 128자 비밀번호 계정의 보안을 확보하기 위한 비밀번호를 저장합니다. 비밀번호는 최대 128자 길이를 가지며, 계정 보호에 중요한 역할을 합니다. Result 타입 설명 item EzAccount 게임 플레이어 계정 banStatuses List BAN 상태 리스트 body string 서명 대상 계정 인증 정보 signature string 서명 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 PasswordIncorrectException UnauthorizedException 비밀번호 지정이 올바르지 않습니다 BannedInfinityException UnauthorizedException 계정이 이용 정지되었습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Account ( userId : \"user-0001\" ); var result = await domain . AuthenticationAsync ( password : \"password-0001\" , keyId : \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" ); var item = await result . ModelAsync (); var banStatuses = result . BanStatuses ; var body = result . Body ; var signature = result . Signature ; } catch ( Gs2 . Gs2Account . Exception . PasswordIncorrectException e ) { // Incorrect password specified. } catch ( Gs2 . Gs2Account . Exception . BannedInfinityException e ) { // Account has been suspended. } var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Account ( userId : \"user-0001\" ); var future = domain . AuthenticationFuture ( password : \"password-0001\" , keyId : \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Account . Exception . PasswordIncorrectException ) { // Incorrect password specified. } if ( future . Error is Gs2 . Gs2Account . Exception . BannedInfinityException ) { // Account has been suspended. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var banStatuses = future . Result . BanStatuses ; var body = future . Result . Body ; var signature = future . Result . Signature ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Account ( \"user-0001\" // userId ); const auto Future = Domain -\u003e Authentication ( \"password-0001\" , // password \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Account :: Error :: FPasswordIncorrectError :: Class )) { // Incorrect password specified. } if ( e -\u003e IsChildOf ( Gs2 :: Account :: Error :: FBannedInfinityError :: Class )) { // Account has been suspended. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto BanStatuses = Result -\u003e BanStatuses ; const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . account . namespace_ ( \"namespace-0001\" ) . account ( \"user-0001\" ) var async_result = await domain . authentication ( \"password-0001\" , # password \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" # key_id ) if async_result . error != null : if async_result . error is Gs2AccountPasswordIncorrectException : # 비밀번호 지정이 올바르지 않습니다 pass if async_result . error is Gs2AccountBannedInfinityException : # 계정이 이용 정지되었습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result create 새로운 계정을 생성합니다 게임을 처음 실행했을 때 호출하여 플레이어의 계정을 생성합니다. 생성에 성공하면 사용자 ID와 비밀번호가 반환됩니다. 이 두 값은 게임 데이터의 저장 영역(PlayerPrefs나 로컬 세이브 등)에 저장하여 다음 로그인에 사용하십시오. 비밀번호는 자동으로 무작위 생성되므로 플레이어가 임의로 설정할 수 없습니다. 플레이어가 알기 쉬운 ID(이메일 주소나 SNS 계정 등)로 계정을 인계하고자 하는 경우에는 별도로 인계 정보 를 등록하십시오. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzAccount 작성한 게임 플레이어 계정 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . CreateAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . CreateFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e Create ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) var async_result = await domain . create ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result addTakeOverSetting 인계 정보를 등록합니다 스마트폰 기종 변경이나 앱 재설치 시에 계정을 복원할 수 있도록 하기 위한 설정입니다. 인계용 사용자 ID (이메일 주소 등)와 인계용 비밀번호 를 등록해 두면, 해당 조합을 입력하여 다른 단말기에서 계정을 인계할 수 있습니다. 하나의 계정에 대해 여러 개의 인계 방법을 설정할 수 있습니다. 슬롯 번호 를 나누어 예를 들어 슬롯 0에는 이메일 주소, 슬롯 1에는 SNS 계정 정보를 저장하는 등의 방식으로 사용할 수 있습니다. 슬롯 번호는 0~1024 범위에서 지정할 수 있습니다. 주의: 이 기능은 데이터 저장만을 수행합니다. SNS 계정과의 인증 연동(OAuth 등)은 게임 측에서 별도로 구현해야 합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. userIdentifier string  ~ 1024자 인계용 사용자 ID 계정을 인계할 때 사용되는 개인을 식별하기 위한 고유 키입니다. 서로 다른 계정에서 동일한 userIdentifier를 지정한 경우, 나중에 설정한 값이 우선됩니다. password string  ~ 128자 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. Result 타입 설명 item EzTakeOver 작성한 인계 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); var result = await domain . AddTakeOverSettingAsync ( userIdentifier : \"user-0001@gs2.io\" , password : \"password-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); var future = domain . AddTakeOverSettingFuture ( userIdentifier : \"user-0001@gs2.io\" , password : \"password-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e TakeOver ( 0 , // type ); const auto Future = Domain -\u003e AddTakeOverSetting ( \"user-0001@gs2.io\" , // userIdentifier \"password-0001\" // password ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . take_over ( 0 ) var async_result = await domain . add_take_over_setting ( \"password-0001\" # password ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result addTakeOverSettingOpenIdConnect OpenID Connect를 사용하여 인계 정보를 등록합니다 Google이나 Apple 등의 외부 로그인 서비스(OpenID Connect)의 인증 결과를 사용하여 인계 정보를 등록합니다. 이 방법에서는 비밀번호 설정이 필요하지 않습니다. 이 기능을 사용하려면 사전에 마스터 데이터에서 슬롯 번호 와 인증 서비스의 대응 관계를 설정해 두어야 합니다. OpenID Connect 연동 설정이 완료된 슬롯에서는 일반적인 “사용자 ID + 비밀번호” 방식의 인계 설정을 사용할 수 없게 됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. idToken string  ~ 10240자 OpenID Connect ID Token Result 타입 설명 item EzTakeOver 작성한 인계 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); var result = await domain . AddTakeOverSettingOpenIdConnectAsync ( idToken : \"0123456789\" ); var item = await result . ModelAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); var future = domain . AddTakeOverSettingOpenIdConnectFuture ( idToken : \"0123456789\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e TakeOver ( 0 , // type ); const auto Future = Domain -\u003e AddTakeOverSettingOpenIdConnect ( \"0123456789\" // idToken ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . take_over ( 0 ) var async_result = await domain . add_take_over_setting_open_id_connect ( \"0123456789\" # id_token ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result deleteTakeOverSetting 인계 정보를 삭제합니다 등록된 인계 정보를 삭제합니다. 삭제 후에는 해당 인계 정보를 이용한 계정 복원이 불가능해집니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. Result 타입 설명 item EzTakeOver 삭제한 인계 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . DeleteTakeOverSettingAsync ( type : 0 ); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . DeleteTakeOverSettingFuture ( type : 0 ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e DeleteTakeOverSetting ( 0 // type ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . delete_take_over_setting ( null # type ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result doTakeOver 계정 인계를 실행합니다 인계용 사용자 ID 와 인계용 비밀번호 를 입력하여 계정을 인계합니다. 입력한 정보가 일치하면 연결된 계정의 사용자 ID 와 비밀번호 가 반환됩니다. 반환된 사용자 ID와 비밀번호를 세이브 데이터에 저장하여 다음 로그인부터 사용하십시오. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. userIdentifier string  ~ 1024자 인계용 사용자 ID 계정을 인계할 때 사용되는 개인을 식별하기 위한 고유 키입니다. 서로 다른 계정에서 동일한 userIdentifier를 지정한 경우, 나중에 설정한 값이 우선됩니다. password string  ~ 128자 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. Result 타입 설명 item EzAccount 게임 플레이어 계정 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 PasswordIncorrectException UnauthorizedException 비밀번호 지정이 올바르지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . DoTakeOverAsync ( type : 0 , userIdentifier : \"user-0001@gs2.io\" , password : \"password-0001\" ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Account . Exception . PasswordIncorrectException e ) { // Incorrect password specified. } var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . DoTakeOverFuture ( type : 0 , userIdentifier : \"user-0001@gs2.io\" , password : \"password-0001\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Account . Exception . PasswordIncorrectException ) { // Incorrect password specified. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e DoTakeOver ( 0 , // type \"user-0001@gs2.io\" , // userIdentifier \"password-0001\" // password ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Account :: Error :: FPasswordIncorrectError :: Class )) { // Incorrect password specified. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) var async_result = await domain . do_take_over ( null , # type \"user-0001@gs2.io\" , # user_identifier \"password-0001\" # password ) if async_result . error != null : if async_result . error is Gs2AccountPasswordIncorrectException : # 비밀번호 지정이 올바르지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result doTakeOverOpenIdConnect OpenID Connect를 사용하여 계정 인계를 실행합니다 Google이나 Apple 등의 로그인 서비스(OpenID Connect)의 인증 정보를 사용하여 계정을 인계합니다. 인증 정보에 연결된 계정의 사용자 ID 와 비밀번호 가 반환됩니다. 반환된 사용자 ID와 비밀번호를 세이브 데이터에 저장하여 다음 로그인부터 사용하십시오. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. idToken string  ~ 10240자 OpenID Connect ID Token Result 타입 설명 item EzAccount 게임 플레이어 계정 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . DoTakeOverOpenIdConnectAsync ( type : 0 , idToken : \"0123456789\" ); var item = await result . ModelAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . DoTakeOverOpenIdConnectFuture ( type : 0 , idToken : \"0123456789\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e DoTakeOverOpenIdConnect ( 0 , // type \"0123456789\" // idToken ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) var async_result = await domain . do_take_over_open_id_connect ( null , # type \"0123456789\" # id_token ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result get 지정한 타입의 인계 정보를 조회합니다 슬롯 번호(타입)를 지정하여 등록된 인계 정보를 1건 조회합니다. 어떤 인계 방법이 설정되어 있는지 확인할 때 사용합니다. 보안을 위해 인계용 비밀번호는 응답에 포함되지 않습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. Result 타입 설명 item EzTakeOver 인계 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); var item = await domain . ModelAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e TakeOver ( 0 , // type ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . take_over ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e TakeOver ( 0 , // type ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Account :: Model :: FTakeOver \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . take_over ( 0 ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getAuthorizationUrl Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . GetAuthorizationUrlAsync ( type : 0 ); var authorizationUrl = result . AuthorizationUrl ; var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . GetAuthorizationUrlFuture ( type : 0 ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var authorizationUrl = future . Result . AuthorizationUrl ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e GetAuthorizationUrl ( 0 // type ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); const auto AuthorizationUrl = Result -\u003e AuthorizationUrl ; var domain = ez . account . namespace_ ( \"namespace-0001\" ) . account ( \"userId-0001\" ) . take_over ( 0 ) var async_result = await domain . get_authorization_url ( null # type ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listTakeOverSettings Request 타입 활성화 조건 필수 기본값 값 제한 설명 gameSession GameSession  GameSession Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . TakeOversAsync ( ). ToListAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . TakeOvers ( ); List EzTakeOver \u003e items = new List EzTakeOver \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e TakeOvers ( ); TArray Gs2 :: UE5 :: Account :: Model :: FEzTakeOverPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeTakeOvers ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeTakeOvers ( callbackId ); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeTakeOvers ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeTakeOvers ( callbackId ); const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeTakeOvers ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeTakeOvers ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. updateTakeOverSetting Request 타입 활성화 조건 필수 기본값 값 제한 설명 gameSession GameSession  GameSession Result 타입 설명 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); var result = await domain . UpdateTakeOverSettingAsync ( oldPassword : \"password-0001\" , password : \"password-1001\" ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Account . Exception . PasswordIncorrectException e ) { // Incorrect password specified. } var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TakeOver ( type : 0 , ); var future = domain . UpdateTakeOverSettingFuture ( oldPassword : \"password-0001\" , password : \"password-1001\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Account . Exception . PasswordIncorrectException ) { // Incorrect password specified. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e TakeOver ( 0 , // type ); const auto Future = Domain -\u003e UpdateTakeOverSetting ( \"password-0001\" , // oldPassword \"password-1001\" // password ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Account :: Error :: FPasswordIncorrectError :: Class )) { // Incorrect password specified. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . take_over ( 0 ) var async_result = await domain . update_take_over_setting ( \"password-0001\" , # old_password \"password-1001\" # password ) if async_result . error != null : if async_result . error is Gs2AccountPasswordIncorrectException : pass push_error ( str ( async_result . error )) return var result = async_result . result addPlatformIdSetting Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); var result = await domain . AddPlatformIdSettingAsync ( userIdentifier : \"user-0001@gs2.io\" ); var item = await result . ModelAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); var future = domain . AddPlatformIdSettingFuture ( userIdentifier : \"user-0001@gs2.io\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PlatformId ( 0 , // type ); const auto Future = Domain -\u003e AddPlatformIdSetting ( \"user-0001@gs2.io\" // userIdentifier ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . platform_id ( 0 ) var async_result = await domain . add_platform_id_setting ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result deletePlatformIdSetting Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); var result = await domain . DeletePlatformIdSettingAsync ( ); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); var future = domain . DeletePlatformIdSettingFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PlatformId ( 0 , // type ); const auto Future = Domain -\u003e DeletePlatformIdSetting ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . platform_id ( 0 ) var async_result = await domain . delete_platform_id_setting ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result findPlatformUser Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); var result = await domain . FindPlatformUserAsync ( userIdentifier : \"user-0001@gs2.io\" ); var item = await result . ModelAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); var future = domain . FindPlatformUserFuture ( userIdentifier : \"user-0001@gs2.io\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PlatformId ( 0 , // type ); const auto Future = Domain -\u003e FindPlatformUser ( \"user-0001@gs2.io\" // userIdentifier ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . platform_id ( 0 ) var async_result = await domain . find_platform_user ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getPlatformId Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); var item = await domain . ModelAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PlatformId ( 0 , // type ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . platform_id ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PlatformId ( type : 0 , ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PlatformId ( 0 , // type ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Account :: Model :: FPlatformId \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . account . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . platform_id ( 0 ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listPlatformIdSettings Request 타입 활성화 조건 필수 기본값 값 제한 설명 gameSession GameSession  GameSession Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . PlatformIdsAsync ( ). ToListAsync (); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . PlatformIds ( ); List EzPlatformId \u003e items = new List EzPlatformId \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e PlatformIds ( ); TArray Gs2 :: UE5 :: Account :: Model :: FEzPlatformIdPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribePlatformIds ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribePlatformIds ( callbackId ); var domain = gs2 . Account . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribePlatformIds ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribePlatformIds ( callbackId ); const auto Domain = Gs2 -\u003e Account -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribePlatformIds ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribePlatformIds ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. OpenID Connect 인증 URL을 조회합니다 Google이나 Apple 등의 외부 로그인 서비스의 인증 페이지로 리다이렉트하기 위한 URL을 조회합니다. 이 URL로 플레이어를 안내하면 OpenID Connect를 사용한 인계 정보 등록이나 계정 인계 실행을 시작할 수 있습니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | type | int | |  | | 0 ~ 1024 | 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. | | authorizationUrl | string | 인증URL| 등록된 인계 정보 목록을 조회합니다 이 플레이어에게 설정되어 있는 인계 정보 목록을 조회합니다. 보안을 위해 인계용 비밀번호는 응답에 포함되지 않습니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | pageToken | string | | | | ~ 1024자 | 데이터 취득을 시작할 위치를 지정하는 토큰 | | limit | int | | | 30 | 1 ~ 1000 | 취득할 데이터 건수 | | items | List | 인계 정보의 리스트| | nextPageToken | string | 목록의 나머지를 취득하기 위한 페이지 토큰| 인계용 비밀번호를 변경합니다 인계 정보의 비밀번호를 변경합니다. 변경하려면 현재 설정되어 있는 기존 비밀번호를 입력해야 합니다. 주의: 이 API를 사용하여 안전한 비밀번호 변경을 구현하려는 경우에는, 인계 정보 삭제 API에 대한 접근 권한을 비활성화하십시오. 삭제 시에는 비밀번호 인증이 필요하지 않으므로, 삭제 후 재생성하면 사실상 비밀번호를 변경할 수 있게 되기 때문입니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | type | int | |  | | 0 ~ 1024 | 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. | | oldPassword | string | |  | | ~ 128자 | 이전 비밀번호 | | password | string | |  | | ~ 128자 | 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. | | item | EzTakeOver | 갱신한 인계 정보| | PasswordIncorrectException | UnauthorizedException | 비밀번호 지정이 올바르지 않습니다 | # 비밀번호 지정이 올바르지 않습니다 외부 플랫폼 계정 ID를 등록합니다 X(구 Twitter), Instagram, Facebook 등의 외부 서비스 사용자 ID를 GS2 게임 플레이어 계정에 연결하여 저장합니다. type 에는 0~1024 범위의 숫자를 지정하여 플랫폼 종류를 구분합니다. userIdentifier 에는 각 플랫폼의 사용자 ID를 지정합니다. 다른 플레이어는 type과 userIdentifier를 지정하여 해당 플레이어를 검색할 수 있습니다. 예를 들어 SNS 친구를 게임 내 친구로 추가하는 기능을 구현할 때 사용할 수 있습니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | gameSession | GameSession | |  | | | GameSession 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID를 포함하는 GameSession 객체입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키기 위해 사용됩니다. | | type | int | |  | | 0 ~ 1024 | 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. | | userIdentifier | string | |  | | ~ 1024자 | 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. | | item | EzPlatformId | 생성한 외부 플랫폼의 계정ID| 외부 플랫폼 계정 ID를 삭제합니다 등록된 외부 플랫폼 계정 ID를 삭제합니다. 삭제 후에는 해당 외부 플랫폼 계정 ID를 이용한 플레이어 검색이 불가능해집니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | gameSession | GameSession | |  | | | GameSession 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID를 포함하는 GameSession 객체입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키기 위해 사용됩니다. | | type | int | |  | | 0 ~ 1024 | 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. | | item | EzPlatformId | 삭제한 외부 플랫폼의 계정ID| 슬롯 번호와 외부 플랫폼 계정 ID로 GS2-Account 사용자 ID를 검색합니다 type (슬롯 번호)과 userIdentifier (외부 플랫폼의 사용자 ID)를 지정하여 해당 외부 플랫폼 계정 ID에 연결된 게임 플레이어를 검색합니다. 예를 들어 SNS 친구 목록에서 게임 내 플레이어를 찾는 데 이용할 수 있습니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | gameSession | GameSession | |  | | | GameSession 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID를 포함하는 GameSession 객체입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키기 위해 사용됩니다. | | type | int | |  | | 0 ~ 1024 | 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. | | userIdentifier | string | |  | | ~ 1024자 | 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. | | item | EzPlatformUser | 외부 플랫폼의 사용자 정보| 지정한 슬롯 번호의 외부 플랫폼 계정 ID를 조회합니다 type (슬롯 번호)을 지정하여 등록된 외부 서비스 계정을 1건 조회합니다. 특정 플랫폼에 어떤 사용자 ID가 연결되어 있는지 확인할 때 사용합니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | gameSession | GameSession | |  | | | GameSession 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID를 포함하는 GameSession 객체입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키기 위해 사용됩니다. | | type | int | |  | | 0 ~ 1024 | 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. | | item | EzPlatformId | 외부 플랫폼의 계정ID| 등록된 외부 플랫폼 계정 ID 목록을 조회합니다 이 플레이어에게 연결된 외부 서비스 ID 정보 목록을 조회합니다. 어떤 플랫폼의 ID가 등록되어 있는지 확인할 때 사용합니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | pageToken | string | | | | ~ 1024자 | 데이터 취득을 시작할 위치를 지정하는 토큰 | | limit | int | | | 30 | 1 ~ 1000 | 취득할 데이터 건수 | | items | List | 외부 플랫폼 계정ID 목록| | nextPageToken | string | 목록의 나머지를 취득하기 위한 페이지 토큰|","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Account SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Account SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/account/game_engine/"},{"content":"모델 EzPoint 광고를 시청함으로써 획득한 포인트 플레이어가 광고 시청을 통해 획득한 포인트의 합계를 나타내는 모델입니다. 플레이어는 광고를 시청할 때마다 포인트를 획득하며, 이 포인트는 보상 교환이나 게임 내 특전 구매 등에 사용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 point long 0 0 ~ 9223372036854775805 포인트 보유 수 사용자가 보유하고 있는 포인트 수를 나타냅니다. 이 수치는 사용자가 광고를 시청함으로써 증가하고, 보상이나 특전과 교환함으로써 감소합니다. 메서드 getPoint 광고 시청으로 획득한 포인트의 현재값 조회 리워드 광고(AdMob, Unity Ads, AppLovin MAX 등) 시청을 통해 플레이어가 획득한 포인트 수를 조회합니다. UI에 플레이어의 현재 포인트 잔액을 표시하거나, 포인트를 사용하기 전에 잔액이 충분한지 확인할 때 사용합니다. 아직 포인트 레코드가 없는 경우, 0포인트의 레코드가 자동으로 생성되어 반환됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzPoint 광고 시청으로 획득한 포인트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . AdReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Point ( ); var item = await domain . ModelAsync (); var domain = gs2 . AdReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Point ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e AdReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Point ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ad_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . point ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . AdReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Point ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . AdReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Point ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e AdReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Point ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: AdReward :: Model :: FPoint \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ad_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . point ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. 이벤트 핸들러 OnChangePointNotification 광고 시청으로 포인트가 변동되었을 때의 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . AdReward . OnChangePointNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; }; gs2 . AdReward . OnChangePointNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; }; Gs2 -\u003e AdReward -\u003e OnChangePointNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; }); ez . ad_reward . change_point_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-AdReward SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-AdReward SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/ad_reward/game_engine/"},{"content":"모델 EzAccessToken 액세스 토큰 사용자 인증 후 발급되는 액세스 토큰을 관리하는 모델입니다. 액세스 토큰은 사용자가 서비스에 로그인되어 있는 동안 해당 세션의 신원을 증명하는 데 사용됩니다. 토큰에는 유효기간이 설정되어 있으며, 만료되면 재인증이 필요합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 token string  ~ 1024자 액세스 토큰 액세스를 인증하기 위한 토큰입니다. 이 토큰은 시스템에 의해 자동으로 생성되며, 사용자의 세션을 식별합니다. userId string  ~ 128자 사용자ID expire long 현재 시각으로부터 1시간 후의 절대 시각 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰은 무효화됩니다. UNIX 시간·밀리초 메서드 login 계정 인증 정보를 사용하여 GS2에 로그인 GS2-Account::Authentication 에서 획득한 body 와 signature 를 전달하여 로그인하고 액세스 토큰 을 받습니다. 액세스 토큰 은 유효기간이 1시간인 임시 로그인 정보로, GS2의 각 서비스를 해당 플레이어로서 이용하기 위해 필요합니다. 일반적으로 이 API를 직접 호출할 필요는 없습니다. Unity 및 Unreal Engine 5 SDK에서는 GS2-Account::Authentication 과 이 API를 하나로 묶어 실행하는 Profile::Login이 제공됩니다. 자세한 내용은 초기화 처리 / Game Engine 을 참조하십시오. Request 타입 활성화 조건 필수 기본값 값 제한 설명 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN body string  ~ 524288자 서명 대상 계정 인증 정보 signature string  ~ 1024자 서명 Result 타입 설명 token string 액세스 토큰 액세스를 인증하기 위한 토큰입니다. 이 토큰은 시스템에 의해 자동으로 생성되며, 사용자의 세션을 식별합니다. userId string 사용자ID expire long 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Auth . AccessToken ( ); var result = await domain . LoginAsync ( body : \"body\" , signature : \"signature\" , keyId : \"key-0001\" ); var token = result . Token ; var userId = result . UserId ; var expire = result . Expire ; var domain = gs2 . Auth . AccessToken ( ); var future = domain . LoginFuture ( body : \"body\" , signature : \"signature\" , keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var token = future . Result . Token ; var userId = future . Result . UserId ; var expire = future . Result . Expire ; const auto Domain = Gs2 -\u003e Auth -\u003e AccessToken ( ); const auto Future = Domain -\u003e Login ( \"body\" , // body \"signature\" , // signature \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); const auto Token = Result -\u003e Token ; const auto UserId = Result -\u003e UserId ; const auto Expire = Result -\u003e Expire ; var domain = ez . auth . access_token ( ) var async_result = await domain . login ( \"body\" , # body \"signature\" , # signature \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Auth SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Auth SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/auth/game_engine/"},{"content":"모델 EzBuffEntryModel 버프 엔트리 모델 버프의 적용량은 버프 엔트리 모델로 관리하며, 동일한 대상에 대해 여러 버프 엔트리 모델을 연결할 수 있습니다. 버프 엔트리 모델의 적용 순서는 버프 엔트리 모델의 priority 로 관리하며, priority 값이 작을수록 우선순위가 높아집니다. 버프의 적용 방식은 3종류가 있으며 “Rate Add”, “Mul”, “Value Add\"가 있습니다. Rate Add 는 버프의 적용 레이트에 가산하는 명령이며, Mul 은 버프의 적용 레이트에 곱하는 명령입니다. Value Add 는 버프 보정 계산 후의 값에 가산을 수행하는 명령입니다. 예를 들어 기본 레이트가 1.0 이고 Rate Add 0.2 를 설정하면 버프 적용 레이트는 1.2 가 됩니다. Mul 0.5 를 설정하면 버프 적용 레이트는 현재 레이트의 0.5배가 됩니다. 버프 엔트리 모델에는 GS2-Schedule 의 이벤트를 연결할 수 있으며, 이벤트 개최 기간 중에만 버프를 적용하도록 설정하는 것도 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetType 문자열 열거형 enum {   “model”,   “action” }  버프를 적용할 대상의 종류 버프를 모델의 필드 값에 적용할지, 액션의 파라미터에 적용할지를 지정합니다. “Model\"은 GS2 리소스 모델의 필드를 대상으로 하며, “Action\"은 GS2 액션(예: 획득량이나 소비량)의 파라미터를 대상으로 합니다. 정의 설명 model 모델 action 액션 targetModel EzBuffTargetModel {targetType} == “model” ※ 버프를 적용할 대상 모델 버프를 적용할 GS2 리소스 모델과 필드를 지정합니다. 모델 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “model” 이면 필수 targetAction EzBuffTargetAction {targetType} == “action” ※ 버프를 적용할 대상 액션 버프를 적용할 GS2 액션과 파라미터를 지정합니다. 액션 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “action” 이면 필수 expression 문자열 열거형 enum {   “rate_add”,   “mul”,   “value_add” }  버프의 적용 타입 버프 값을 대상에 어떻게 적용할지를 지정합니다. “Rate Add\"는 보정 레이트에 가산(예: 1.0 + 0.2 = 1.2), “Mul\"은 보정 레이트에 곱함(예: 레이트 * 0.5), “Value Add\"는 레이트 기반 보정 계산 후의 값에 직접 가산합니다. 정의 설명 rate_add 보정 레이트에 가산 mul 보정 레이트에 곱함 value_add 값을 직접 가산(모델이나 액션의 숫자 값만) applyPeriodScheduleEventId string ~ 1024자 버프를 적용할 이벤트의 개최 기간 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버프의 유효 기간을 제어하는 GS2-Schedule 이벤트의 GRN입니다. 지정한 경우, 이벤트 개최 기간 중에만 버프가 적용됩니다. 지정하지 않은 경우, 버프는 항상 유효합니다. EzBuffTargetModel 버프 적용 대상 모델 버프 적용의 대상이 되는 GS2 리소스 모델과 필드를 정의합니다. 어떤 모델의 어떤 필드 값을 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetModelName 문자열 열거형 enum { }  버프를 적용할 모델의 종류 targetFieldName string  ~ 64자 버프 적용 대상 필드명 버프에 의해 값이 변경되는 대상 모델 상의 수치 필드명입니다. 예를 들어 경험치나 공격력 등의 수치 속성을 나타내는 필드가 대상이 됩니다. conditionGrns List  1 ~ 10 items 버프 적용 조건 GRN 목록 버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다. rate float  0 ~ 1000000 보정 레이트 적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add\"의 경우 기본 레이트에 가산, “Mul\"의 경우 현재 레이트에 곱셈, “Value Add\"의 경우 레이트 계산 후의 필드 값에 직접 가산됩니다. EzBuffTargetAction 버프 적용 대상 액션 버프 적용의 대상이 되는 GS2 액션과 파라미터를 정의합니다. 어떤 액션의 어떤 파라미터를 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetActionName 문자열 열거형 enum { \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SubExperience\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:ConsumeItemSet\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeSimpleItems\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:ConsumeBigItem\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2Limit:CountUp\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:Withdraw\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Money2:Withdraw\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Stamina:ConsumeStamina\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , }  버프를 적용할 액션의 종류 targetFieldName string  ~ 64자 버프 적용 대상 필드명 버프에 의해 값이 변경되는 대상 액션 상의 수치 파라미터명입니다. 예를 들어 입수 수량, 소비량, 보상 수량 등을 나타내는 파라미터가 대상이 됩니다. conditionGrns List  1 ~ 10 items 버프 적용 조건 GRN 목록 버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다. rate float  0 ~ 1000000 보정 레이트 적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add\"의 경우 기본 레이트에 가산, “Mul\"의 경우 현재 레이트에 곱셈, “Value Add\"의 경우 레이트 계산 후의 파라미터 값에 직접 가산됩니다. EzBuffTargetGrn 버프 적용 조건이 되는 리소스의 GRN 패턴 버프가 유효해지는 리소스 인스턴스를 좁히기 위한 조건 GRN 패턴입니다. targetModelName 으로 GS2 서비스 모델의 종류를 특정하며, targetGrn 에는 런타임에 해결되는 컨텍스트 변수({region}, {ownerId})를 포함할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetModelName string  ~ 64자 버프 적용 조건의 모델 이름 조건 GRN을 해결하기 위해 사용되는 GS2 서비스 모델의 이름입니다. GRN 패턴이 어느 서비스의 리소스 모델을 참조하는지를 특정합니다. targetGrn string  ~ 1024자 버프의 적용 조건 GRN 런타임에 해결되는 컨텍스트 플레이스홀더(예: {region}, {ownerId})를 포함한 GRN 템플릿입니다. 버프의 대상이 되는 특정 리소스 인스턴스를 특정하기 위해 사용됩니다. 메서드 getBuffEntryModel 이름으로 버프 정의 조회 이름을 지정하여 버프 엔트리 모델을 1건 조회합니다. 조회되는 정보에는 적용 방법(Rate Add / Mul / Value Add), 버프의 대상, 우선순위, 그리고 설정되어 있는 경우 버프가 활성화되는 이벤트 기간이 포함됩니다. 특정 버프의 효과 내용이나 활성 기간 등의 상세 정보를 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. buffEntryName string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzBuffEntryModel 버프 엔트리 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). BuffEntryModel ( buffEntryName : \"character-level\" ); var item = await domain . ModelAsync (); var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). BuffEntryModel ( buffEntryName : \"character-level\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Buff -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BuffEntryModel ( \"character-level\" // buffEntryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . buff . namespace_ ( \"namespace-0001\" ) . buff_entry_model ( \"character-level\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). BuffEntryModel ( buffEntryName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). BuffEntryModel ( buffEntryName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Buff -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BuffEntryModel ( \"character-level\" // buffEntryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Buff :: Model :: FBuffEntryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . buff . namespace_ ( \"namespace-0001\" ) . buff_entry_model ( \"character-level\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listBuffEntryModels 버프 엔트리 모델 목록 조회 이 네임스페이스에 등록된 모든 버프 엔트리 모델을 조회합니다. 각 버프 엔트리 모델은 하나의 버프 효과를 정의합니다. 대상(모델의 스탯이나 액션의 파라미터), 적용 방법(Rate Add / Mul / Value Add), 우선순위, 그리고 선택적으로 버프가 활성화되는 이벤트 기간이 포함됩니다. 게임 UI에서 버프 목록을 표시하거나, 현재 설정된 버프를 확인할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 버프 엔트리 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . BuffEntryModelsAsync ( ). ToListAsync (); var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . BuffEntryModels ( ); List EzBuffEntryModel \u003e items = new List EzBuffEntryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Buff -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e BuffEntryModels ( ); TArray Gs2 :: UE5 :: Buff :: Model :: FEzBuffEntryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBuffEntryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBuffEntryModels ( callbackId ); var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBuffEntryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBuffEntryModels ( callbackId ); const auto Domain = Gs2 -\u003e Buff -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeBuffEntryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeBuffEntryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. applyBuff 현재 플레이어에게 버프 적용 이 네임스페이스에 등록된 모든 버프 설정을 평가하여, 조건에 맞는 것을 플레이어에게 적용합니다. 예를 들어 “이벤트 중 경험치 2배”, “특정 아이템 소지 시 골드 드롭률 +10%“와 같은 버프를 설정할 수 있습니다. 버프의 적용 방법은 3가지가 있습니다: Rate Add : 배율에 가산합니다(예: 기본 1.0 + 0.2 = 1.2배) Mul : 현재 배율에 곱합니다(예: 배율 × 0.5) Value Add : 배율 계산 후의 값에 고정값을 가산합니다 GS2-Schedule 이벤트에 연동된 버프는 해당 이벤트 개최 기간 동안만 유효합니다. 여러 버프는 우선순위 순서로 적용됩니다(값이 작을수록 우선순위가 높음). Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 적용한 버프 목록 newContextStack string 버프의 적용 상태를 기록한 컨텍스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Buff ( ); var result = await domain . ApplyBuffAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Buff . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Buff ( ); var future = domain . ApplyBuffFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Buff -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Buff ( ); const auto Future = Domain -\u003e ApplyBuff ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . buff . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . buff ( ) var async_result = await domain . apply_buff ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Buff SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Buff SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/buff/game_engine/"},{"content":"모델 EzRoom 룸 룸은 채팅 메시지를 전달할 수 있는 범위를 나타냅니다. GS2-Chat의 룸에는 참가라는 개념이 없습니다. 따라서 메시지를 수신하려면 룸의 이름만 알고 있으면 되며, 룸에 참가하거나 멤버로 등록할 필요가 없습니다. 룸의 메시지를 열람할 수 있는 게임 플레이어를 제한하고 싶은 경우 두 가지 방법이 있습니다. 첫 번째는 룸에 비밀번호를 설정하는 것입니다. 두 번째는 룸에 설정 가능한 화이트리스트에 게임 플레이어의 사용자 ID를 설정하여 제한하는 것입니다. 비밀번호를 설정한 경우, 비밀번호를 모르면 게임 관리자라도 메시지를 가져올 수 없게 된다는 점에 주의하십시오. 이는 일본국 헌법에서 정한 통신의 비밀 에 해당할 가능성이 있기 때문입니다. 룸을 구독하면, 룸에 새로운 메시지가 전송되었을 때 GS2-Gateway의 푸시 알림을 받을 수 있습니다. 이 알림 기능을 이용함으로써, 룸에 대해 폴링하지 않고도 새로운 메시지의 유무를 알 수 있게 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. whiteListUserIds List [] 0 ~ 1000 items 룸에 액세스 가능한 사용자 ID 리스트 설정하면, 리스트에 포함된 사용자만 룸의 메시지를 가져오거나 게시할 수 있게 됩니다. 비어 있는 경우, 사용자 ID에 의한 액세스 제한은 적용되지 않습니다(단, 비밀번호가 별도로 필요할 수 있습니다). EzMessage 메시지 메시지는 룸에 게시된 데이터입니다. 카테고리라는 필드를 가지고 있어 메시지를 분류할 수 있습니다. 예를 들어, 카테고리가 0인 경우는 일반적인 텍스트 메시지로 해석하고, 1인 경우는 스탬프(스티커)로 처리하도록 클라이언트를 구현할 수 있습니다. 게시된 메시지는 게시 후, Chat Namespace의 messageLifeTimeDays에서 설정한 메시지 보관 기간이 경과하면 자동으로 삭제됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID category int 0 0 ~ 2147483645 메시지 분류용 카테고리 번호 메시지를 분류하기 위한 숫자 값입니다. 예를 들어, 0은 텍스트 메시지, 1은 스탬프(스티커), 그 외의 값은 커스텀 메시지 타입으로 사용할 수 있습니다. 카테고리에 따라 메시지에 적용되는 CategoryModel의 규칙이 결정됩니다. metadata string  ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzSubscribe 룸 구독 룸을 구독하면 해당 룸에 대한 신규 메시지의 존재를 즉시 알 수 있게 됩니다. 구독할 때 메시지의 카테고리를 지정할 수 있습니다. 이 기능을 잘 활용하면 중요도가 높은 메시지만 수신하는 설정도 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID roomName string  ~ 128자 구독할 룸 이름 구독할 채팅 룸의 이름입니다. 구독하면, 이 룸에 새로운 메시지가 게시될 때마다 GS2-Gateway를 통해 푸시 알림이 전송됩니다. notificationTypes List [] 0 ~ 100 items 신규 메시지 알림을 받을 카테고리 리스트 푸시 알림을 트리거하는 메시지 카테고리를 필터링합니다. 비어 있는 경우, 모든 카테고리에 대해 알림이 전송됩니다. 각 항목은 카테고리 번호와 선택적인 모바일 푸시 알림 전달 여부를 지정합니다. EzCategoryModel 메시지 카테고리 모델 메시지 카테고리 모델은 채팅 룸에 게시되는 메시지를 분류하기 위한 카테고리를 정의합니다. 각 카테고리는 숫자로 식별되며, 카테고리별로 플레이어의 액세스 토큰을 사용한 게시를 허용할지 거부할지 설정할 수 있습니다. 이를 통해 서버만 게시할 수 있는 시스템 안내 카테고리 등의 사용 사례를 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. rejectAccessTokenPost 문자열 열거형 enum {   “Enabled”,   “Disabled” } 플레이어의 액세스 토큰을 이용한 게시를 거부한다 활성화하면, 이 카테고리에서는 서버 사이드 API 호출(사용자 ID 지정)만으로 메시지를 게시할 수 있습니다. 플레이어가 직접 게시해서는 안 되는 시스템 안내나 서버 생성 메시지에 유용합니다. 정의 설명 Enabled 액세스 토큰을 이용한 게시를 거부한다 Disabled 액세스 토큰을 이용한 게시를 허용한다 EzNotificationType 알림 타입 신규 메시지 알림을 받을 카테고리 설정 타입 활성화 조건 필수 기본값 값 제한 설명 category int 0 0 ~ 2147483646 신규 메시지 알림을 받을 카테고리 알림을 필터링하기 위한 카테고리의 숫자 식별자입니다. 이 카테고리와 일치하는 메시지만 구독에 대한 푸시 알림을 트리거합니다. enableTransferMobilePushNotification bool false 오프라인 상태였을 때 모바일 푸시 알림으로 전달할지 여부 활성화하면, 알림 시점에 수신 대상 기기가 오프라인 상태였던 경우 모바일 푸시 알림 서비스로 전달됩니다. 이를 통해 게임이 실행되고 있지 않은 상태에서도 플레이어에게 신규 메시지를 알릴 수 있습니다. 메서드 createRoom 채팅룸을 작성한다 플레이어가 메시지를 주고받을 수 있는 새로운 채팅룸을 작성합니다. 네임스페이스 설정에서 플레이어에 의한 룸 작성이 허용되어 있어야 합니다. 허용되어 있지 않은 경우 실패합니다. 룸에 비밀번호를 설정할 수도 있습니다. 비밀번호를 설정한 경우, 메시지 게시·취득 시 비밀번호 입력이 필요합니다. 화이트리스트에 사용자 ID를 설정하여 접근할 수 있는 플레이어를 제한하는 것도 가능합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession GameSession 룸 오너의 사용자 ID입니다. 설정하면, 오너만 룸을 삭제할 수 있게 됩니다. 오너 설정은 선택 사항입니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. whiteListUserIds List [] 0 ~ 1000 items 룸에 액세스 가능한 사용자 ID 리스트 설정하면, 리스트에 포함된 사용자만 룸의 메시지를 가져오거나 게시할 수 있게 됩니다. 비어 있는 경우, 사용자 ID에 의한 액세스 제한은 적용되지 않습니다(단, 비밀번호가 별도로 필요할 수 있습니다). Result 타입 설명 item EzRoom 생성한 룸 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 NoAccessPrivilegesException BadRequestException 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . CreateRoomAsync ( name : \"room-0001\" , metadata : null , password : null , whiteListUserIds : null ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException e ) { // The whitelist configured for the room does not contain any currently logged in user. } var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . CreateRoomFuture ( name : \"room-0001\" , metadata : null , password : null , whiteListUserIds : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException ) { // The whitelist configured for the room does not contain any currently logged in user. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e CreateRoom ( \"room-0001\" // name // metadata // password // whiteListUserIds ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Chat :: Error :: FNoAccessPrivilegesError :: Class )) { // The whitelist configured for the room does not contain any currently logged in user. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . create_room ( \"room-0001\" , # name null , # metadata null , # password null # white_list_user_ids ) if async_result . error != null : if async_result . error is Gs2ChatNoAccessPrivilegesException : # 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result deleteRoom 채팅룸을 삭제한다 플레이어가 작성한 채팅룸을 삭제합니다. 룸을 작성한 플레이어(오너)만 삭제할 수 있습니다. 룸 안의 모든 메시지도 함께 삭제됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession GameSession Result 타입 설명 item EzRoom 삭제한 룸 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 NoAccessPrivilegesException BadRequestException 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); var result = await domain . DeleteRoomAsync ( ); } catch ( Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException e ) { // The whitelist configured for the room does not contain any currently logged in user. } var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); var future = domain . DeleteRoomFuture ( ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException ) { // The whitelist configured for the room does not contain any currently logged in user. } onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); const auto Future = Domain -\u003e DeleteRoom ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Chat :: Error :: FNoAccessPrivilegesError :: Class )) { // The whitelist configured for the room does not contain any currently logged in user. } return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . room ( \"room-0001\" , null ) var async_result = await domain . delete_room ( ) if async_result . error != null : if async_result . error is Gs2ChatNoAccessPrivilegesException : # 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result getRoom 채팅룸 정보를 취득한다 지정한 채팅룸의 메타데이터나 작성 일시 등의 정보를 취득합니다. 룸에 비밀번호가 설정되어 있어도 비밀번호 없이 취득할 수 있습니다. 플레이어가 룸에 입장하기 전에, 룸의 상세 정보(룸 이름이나 주제 등)를 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzRoom 룸 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : null ). Room ( roomName : \"room-0001\" , password : null ); var item = await domain . ModelAsync (); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : null ). Room ( roomName : \"room-0001\" , password : null ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( nullptr // userId ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . user ( null ) . room ( \"room-0001\" , null ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : null ). Room ( roomName : \"room-0001\" , password : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : null ). Room ( roomName : \"room-0001\" , password : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( nullptr // userId ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Chat :: Model :: FRoom \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . user ( null ) . room ( \"room-0001\" , null ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getMessage 메시지 이름을 지정하여 메시지를 1건 취득한다 메시지 이름(ID)을 지정하여 채팅룸 내의 메시지를 1건 취득합니다. 알림을 탭했을 때 등, 특정 메시지의 상세 정보를 표시할 때 사용합니다. 룸에 비밀번호가 설정되어 있는 경우 비밀번호 입력이 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. gameSession GameSession GameSession password string ~ 128자 비밀번호 Result 타입 설명 item EzMessage 메시지 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 NoAccessPrivilegesException BadRequestException 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 PasswordRequiredException BadRequestException 룸에 접근하려면 비밀번호 지정이 필요합니다 PasswordIncorrectException BadRequestException 룸에 설정된 비밀번호와 지정된 비밀번호가 일치하지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ). Message ( messageName : \"message-0001\" ); var item = await domain . ModelAsync (); } catch ( Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException e ) { // The whitelist configured for the room does not contain any currently logged in user. } catch ( Gs2 . Gs2Chat . Exception . PasswordRequiredException e ) { // A password must be specified to access the room. } catch ( Gs2 . Gs2Chat . Exception . PasswordIncorrectException e ) { // The password set for the room does not match the password specified. } var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ). Message ( messageName : \"message-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ) -\u003e Message ( \"message-0001\" // messageName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Chat :: Error :: FNoAccessPrivilegesError :: Class )) { // The whitelist configured for the room does not contain any currently logged in user. } if ( e -\u003e IsChildOf ( Gs2 :: Chat :: Error :: FPasswordRequiredError :: Class )) { // A password must be specified to access the room. } if ( e -\u003e IsChildOf ( Gs2 :: Chat :: Error :: FPasswordIncorrectError :: Class )) { // The password set for the room does not match the password specified. } return false ; } var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . room ( \"room-0001\" , null ) . message ( \"message-0001\" ) var async_result = await domain . model () if async_result . error != null : if async_result . error is Gs2ChatNoAccessPrivilegesException : # 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 pass if async_result . error is Gs2ChatPasswordRequiredException : # 룸에 접근하려면 비밀번호 지정이 필요합니다 pass if async_result . error is Gs2ChatPasswordIncorrectException : # 룸에 설정된 비밀번호와 지정된 비밀번호가 일치하지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ). Message ( messageName : \"message-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); } catch ( Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException e ) { // The whitelist configured for the room does not contain any currently logged in user. } catch ( Gs2 . Gs2Chat . Exception . PasswordRequiredException e ) { // A password must be specified to access the room. } catch ( Gs2 . Gs2Chat . Exception . PasswordIncorrectException e ) { // The password set for the room does not match the password specified. } var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ). Message ( messageName : \"message-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ) -\u003e Message ( \"message-0001\" // messageName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Chat :: Model :: FMessage \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . room ( \"room-0001\" , null ) . message ( \"message-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listLatestMessages 채팅룸의 최신 메시지를 취득한다 채팅룸 내의 최신 메시지를 새로운 순으로 취득합니다. 플레이어가 채팅 화면을 열었을 때 최근 대화 내용을 표시할 때 사용합니다. 룸에 비밀번호가 설정되어 있는 경우 비밀번호 입력이 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession limit int 30 1 ~ 1000 취득할 데이터 건수 password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. Result 타입 설명 items List 메시지 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 NoAccessPrivilegesException BadRequestException 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 PasswordRequiredException BadRequestException 룸에 접근하려면 비밀번호 지정이 필요합니다 PasswordIncorrectException BadRequestException 룸에 설정된 비밀번호와 지정된 비밀번호가 일치하지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 try { var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); var items = await domain . LatestMessagesAsync ( ). ToListAsync (); } catch ( Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException e ) { // The whitelist configured for the room does not contain any currently logged in user. } catch ( Gs2 . Gs2Chat . Exception . PasswordRequiredException e ) { // A password must be specified to access the room. } catch ( Gs2 . Gs2Chat . Exception . PasswordIncorrectException e ) { // The password set for the room does not match the password specified. } var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); var it = domain . LatestMessages ( ); List EzMessage \u003e items = new List EzMessage \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); const auto It = Domain -\u003e LatestMessages ( ); TArray Gs2 :: UE5 :: Chat :: Model :: FEzMessagePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } listMessages 채팅룸의 메시지를 취득한다(지정 시각 이후) startAt 에 지정한 시각 이후에 게시된 메시지를 오래된 순으로 취득합니다. 이전 확인 이후의 신규 메시지를 취득하고 싶을 때(재접속 시나 채팅 화면을 열었을 때 등)에 사용합니다. 네임스페이스 설정에서 지정된 보존 기간 내의 메시지만 취득할 수 있습니다. 룸에 비밀번호가 설정되어 있는 경우 비밀번호 입력이 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession startAt long 현재 시각으로부터 1시간 전의 절대 시각 메시지 취득을 시작하는 시각 UNIX 시간·밀리초 limit int 30 1 ~ 1000 취득할 데이터 건수 password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. Result 타입 설명 items List 메시지 목록 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 NoAccessPrivilegesException BadRequestException 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 PasswordRequiredException BadRequestException 룸에 접근하려면 비밀번호 지정이 필요합니다 PasswordIncorrectException BadRequestException 룸에 설정된 비밀번호와 지정된 비밀번호가 일치하지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 try { var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); var items = await domain . MessagesAsync ( ). ToListAsync (); } catch ( Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException e ) { // The whitelist configured for the room does not contain any currently logged in user. } catch ( Gs2 . Gs2Chat . Exception . PasswordRequiredException e ) { // A password must be specified to access the room. } catch ( Gs2 . Gs2Chat . Exception . PasswordIncorrectException e ) { // The password set for the room does not match the password specified. } var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); var it = domain . Messages ( ); List EzMessage \u003e items = new List EzMessage \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); const auto It = Domain -\u003e Messages ( ); TArray Gs2 :: UE5 :: Chat :: Model :: FEzMessagePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 try { var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMessages ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMessages ( callbackId ); } catch ( Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException e ) { // The whitelist configured for the room does not contain any currently logged in user. } catch ( Gs2 . Gs2Chat . Exception . PasswordRequiredException e ) { // A password must be specified to access the room. } catch ( Gs2 . Gs2Chat . Exception . PasswordIncorrectException e ) { // The password set for the room does not match the password specified. } var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMessages ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMessages ( callbackId ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeMessages ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeMessages ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. post 채팅룸에 메시지를 게시한다 지정한 채팅룸에 메시지를 전송합니다. 카테고리 숫자를 지정하여 메시지의 종류를 구분할 수 있습니다(예: 0은 텍스트, 1은 스탬프). 메시지의 내용은 metadata 에 자유로운 형식의 문자열로 저장됩니다. 텍스트, JSON 등 게임에 맞는 데이터를 저장할 수 있습니다. 룸에 비밀번호가 설정되어 있는 경우 비밀번호 입력이 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession category int 0 0 ~ 2147483645 메시지 분류용 카테고리 번호 메시지를 분류하기 위한 숫자 값입니다. 예를 들어, 0은 텍스트 메시지, 1은 스탬프(스티커), 그 외의 값은 커스텀 메시지 타입으로 사용할 수 있습니다. 카테고리에 따라 메시지에 적용되는 CategoryModel의 규칙이 결정됩니다. metadata string  ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 비밀번호 Result 타입 설명 item EzMessage 게시한 메시지 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 NoAccessPrivilegesException BadRequestException 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 PasswordRequiredException BadRequestException 룸에 접근하려면 비밀번호 지정이 필요합니다 PasswordIncorrectException BadRequestException 룸에 설정된 비밀번호와 지정된 비밀번호가 일치하지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); var result = await domain . PostAsync ( metadata : \"MESSAGE_0001\" , category : null ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException e ) { // The whitelist configured for the room does not contain any currently logged in user. } catch ( Gs2 . Gs2Chat . Exception . PasswordRequiredException e ) { // A password must be specified to access the room. } catch ( Gs2 . Gs2Chat . Exception . PasswordIncorrectException e ) { // The password set for the room does not match the password specified. } var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Room ( roomName : \"room-0001\" , password : null ); var future = domain . PostFuture ( metadata : \"MESSAGE_0001\" , category : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Chat . Exception . NoAccessPrivilegesException ) { // The whitelist configured for the room does not contain any currently logged in user. } if ( future . Error is Gs2 . Gs2Chat . Exception . PasswordRequiredException ) { // A password must be specified to access the room. } if ( future . Error is Gs2 . Gs2Chat . Exception . PasswordIncorrectException ) { // The password set for the room does not match the password specified. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Room ( \"room-0001\" , // roomName nullptr // password ); const auto Future = Domain -\u003e Post ( \"MESSAGE_0001\" // metadata // category ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Chat :: Error :: FNoAccessPrivilegesError :: Class )) { // The whitelist configured for the room does not contain any currently logged in user. } if ( e -\u003e IsChildOf ( Gs2 :: Chat :: Error :: FPasswordRequiredError :: Class )) { // A password must be specified to access the room. } if ( e -\u003e IsChildOf ( Gs2 :: Chat :: Error :: FPasswordIncorrectError :: Class )) { // The password set for the room does not match the password specified. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . room ( \"room-0001\" , null ) var async_result = await domain . post ( \"MESSAGE_0001\" , # metadata null # category ) if async_result . error != null : if async_result . error is Gs2ChatNoAccessPrivilegesException : # 룸에 설정된 화이트리스트에 로그인 중인 사용자가 포함되어 있지 않습니다 pass if async_result . error is Gs2ChatPasswordRequiredException : # 룸에 접근하려면 비밀번호 지정이 필요합니다 pass if async_result . error is Gs2ChatPasswordIncorrectException : # 룸에 설정된 비밀번호와 지정된 비밀번호가 일치하지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result listSubscribeRooms 플레이어가 구독 중인 룸 목록을 취득한다 신규 메시지 알림을 받기 위해 구독 중인 채팅룸의 목록을 취득합니다. 채팅 UI에서 「구독 중인 룸」 목록을 표시하여 플레이어가 관심 있는 룸에 바로 접근할 수 있도록 할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 룸 구독 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . SubscribesAsync ( ). ToListAsync (); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Subscribes ( ); List EzSubscribe \u003e items = new List EzSubscribe \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Subscribes ( ); TArray Gs2 :: UE5 :: Chat :: Model :: FEzSubscribePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribes ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribes ( callbackId ); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribes ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribes ( callbackId ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSubscribes ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSubscribes ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. subscribe 채팅룸을 구독한다 채팅룸을 구독하여 새로운 메시지가 게시되었을 때 알림을 받을 수 있도록 합니다. 카테고리 조건을 설정함으로써 어떤 메시지에서 알림을 받을지 필터링할 수 있습니다. 예를 들어 「카테고리 1(스탬프)일 때만 알림」 「모든 카테고리에서 알림」과 같은 설정이 가능합니다. 알림을 받을 때 플레이어가 오프라인 상태인 경우, 모바일 푸시 알림으로 전달할 수도 있습니다(네임스페이스 설정에 따라 다름). Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독할 룸 이름 구독할 채팅 룸의 이름입니다. 구독하면, 이 룸에 새로운 메시지가 게시될 때마다 GS2-Gateway를 통해 푸시 알림이 전송됩니다. gameSession GameSession  GameSession notificationTypes List [] 0 ~ 100 items 신규 메시지 알림을 받을 카테고리 리스트 푸시 알림을 트리거하는 메시지 카테고리를 필터링합니다. 비어 있는 경우, 모든 카테고리에 대해 알림이 전송됩니다. 각 항목은 카테고리 번호와 선택적인 모바일 푸시 알림 전달 여부를 지정합니다. Result 타입 설명 item EzSubscribe 룸 구독 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( roomName : \"room-0001\" ); var result = await domain . SubscribeAsync ( notificationTypes : new List Gs2 . Unity . Gs2Chat . Model . EzNotificationType \u003e { new Gs2 . Unity . Gs2Chat . Model . EzNotificationType { }, } ); var item = await result . ModelAsync (); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( roomName : \"room-0001\" ); var future = domain . SubscribeFuture ( notificationTypes : new List Gs2 . Unity . Gs2Chat . Model . EzNotificationType \u003e { new Gs2 . Unity . Gs2Chat . Model . EzNotificationType { }, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Subscribe ( \"room-0001\" // roomName ); const auto Future = Domain -\u003e Subscribe ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Chat :: Model :: FEzNotificationType \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Chat :: Model :: FEzNotificationType \u003e ()); return v ; }() // notificationTypes ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscribe ( \"room-0001\" ) var async_result = await domain . subscribe ( [ ( Gs2ChatEzNotificationType . new ()), ] # notification_types ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result unsubscribe 채팅룸의 구독을 해제한다 지정한 채팅룸의 신규 메시지 알림 수신을 중지합니다. 그룹에서 나갔을 때나 설정 화면에서 알림을 껐을 때 등, 플레이어가 룸 구독을 해제할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 구독을 해제할 룸 이름 구독을 해제할 채팅 룸의 이름입니다. gameSession GameSession  GameSession Result 타입 설명 item EzSubscribe 해제한 룸 구독 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( roomName : \"room-0001\" ); var result = await domain . UnsubscribeAsync ( ); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( roomName : \"room-0001\" ); var future = domain . UnsubscribeFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Subscribe ( \"room-0001\" // roomName ); const auto Future = Domain -\u003e Unsubscribe ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscribe ( \"room-0001\" ) var async_result = await domain . unsubscribe ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result updateSubscribeSetting 구독 중인 룸의 알림 설정을 변경한다 이미 구독 중인 룸에서 어떤 카테고리의 메시지로 알림을 받을지 변경합니다. 예를 들어, 처음에는 모든 카테고리로 구독했던 것을 설정 화면에서 「스탬프만」으로 변경하는 방식으로 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독 중인 룸 이름 알림 설정을 변경할 대상 구독 중 채팅 룸 이름입니다. gameSession GameSession  GameSession notificationTypes List [] 0 ~ 100 items 신규 메시지 알림을 받을 카테고리 리스트 푸시 알림을 트리거하는 메시지 카테고리를 필터링합니다. 비어 있는 경우, 모든 카테고리에 대해 알림이 전송됩니다. 각 항목은 카테고리 번호와 선택적인 모바일 푸시 알림 전달 여부를 지정합니다. Result 타입 설명 item EzSubscribe 갱신한 룸 구독 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( roomName : \"room-0001\" ); var result = await domain . UpdateSubscribeSettingAsync ( notificationTypes : new List Gs2 . Unity . Gs2Chat . Model . EzNotificationType \u003e { new Gs2 . Unity . Gs2Chat . Model . EzNotificationType () {}, } ); var item = await result . ModelAsync (); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( roomName : \"room-0001\" ); var future = domain . UpdateSubscribeSettingFuture ( notificationTypes : new List Gs2 . Unity . Gs2Chat . Model . EzNotificationType \u003e { new Gs2 . Unity . Gs2Chat . Model . EzNotificationType () {}, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Subscribe ( \"room-0001\" // roomName ); const auto Future = Domain -\u003e UpdateSubscribeSetting ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Chat :: Model :: FEzNotificationType \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Chat :: Model :: FEzNotificationType \u003e () {}); return v ; }() // notificationTypes ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscribe ( \"room-0001\" ) var async_result = await domain . update_subscribe_setting ( [ Gs2ChatEzNotificationType . new (), ] # notification_types ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getCategoryModel 카테고리 번호를 지정하여 메시지 카테고리 정의를 취득한다 카테고리 번호를 지정하여 메시지 카테고리 정의를 1건 취득합니다. 취득할 수 있는 정보에는 플레이어가 이 카테고리로의 게시를 제한받고 있는지 여부가 포함됩니다. (서버 측의 시스템 메시지 전용 카테고리 등에 이용할 수 있습니다). Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. Result 타입 설명 item EzCategoryModel 메시지 카테고리 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( category : 0 ); var item = await domain . ModelAsync (); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( category : 0 ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CategoryModel ( 0 // category ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . category_model ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( category : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( category : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CategoryModel ( 0 // category ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Chat :: Model :: FCategoryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . chat . namespace_ ( \"namespace-0001\" ) . category_model ( 0 ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listCategoryModels 메시지 카테고리 모델 목록을 취득한다 이 네임스페이스에 등록되어 있는 모든 메시지 카테고리 모델을 취득합니다. 카테고리를 사용하면 메시지의 종류를 분류할 수 있습니다. 예를 들어 카테고리 0을 일반 텍스트, 카테고리 1을 스탬프로 지정하는 방식입니다. 카테고리별로 게시 권한을 제어할 수도 있습니다(예: 시스템 공지는 서버에서만 게시 가능). 채팅 UI에서 카테고리 선택을 표시하거나 사용 가능한 메시지 타입을 확인할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 메시지 카테고리 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . CategoryModelsAsync ( ). ToListAsync (); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . CategoryModels ( ); List EzCategoryModel \u003e items = new List EzCategoryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e CategoryModels ( ); TArray Gs2 :: UE5 :: Chat :: Model :: FEzCategoryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCategoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCategoryModels ( callbackId ); var domain = gs2 . Chat . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCategoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCategoryModels ( callbackId ); const auto Domain = Gs2 -\u003e Chat -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeCategoryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeCategoryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. 이벤트 핸들러 OnPostNotification 구독 중인 룸에 새로운 게시물이 있을 때의 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID category int 메시지 분류용 카테고리 번호 메시지를 분류하기 위한 숫자 값입니다. 예를 들어, 0은 텍스트 메시지, 1은 스탬프(스티커), 그 외의 값은 커스텀 메시지 타입으로 사용할 수 있습니다. 카테고리에 따라 메시지에 적용되는 CategoryModel의 규칙이 결정됩니다. createdAt long 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Chat . OnPostNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var roomName = notification . RoomName ; var userId = notification . UserId ; var category = notification . Category ; var createdAt = notification . CreatedAt ; }; gs2 . Chat . OnPostNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var roomName = notification . RoomName ; var userId = notification . UserId ; var category = notification . Category ; var createdAt = notification . CreatedAt ; }; Gs2 -\u003e Chat -\u003e OnPostNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto RoomName = Notification -\u003e RoomNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto Category = Notification -\u003e CategoryValue ; const auto CreatedAt = Notification -\u003e CreatedAtValue ; }); ez . chat . post_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var room_name = notification . room_name var user_id = notification . user_id var category = notification . category var created_at = notification . created_at )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Chat SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Chat SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/chat/game_engine/"},{"content":"모델 EzDataObject 데이터 오브젝트 데이터 오브젝트는 게임 플레이어가 업로드한 데이터입니다. 데이터는 세대 관리되며, 30일분의 과거 데이터도 보관됩니다. 데이터에는 접근 권한을 설정할 수 있습니다. 스코프에는 3종류가 있으며, 누구나 접근할 수 있는 public 지정한 사용자 ID의 게임 플레이어만 접근할 수 있는 protected 본인만 접근할 수 있는 private 가 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 dataObjectId string ※ ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. userId string  ~ 128자 사용자ID scope 문자열 열거형 enum {   “public”,   “protected”,   “private” } “private” 파일 접근 권한 이 데이터 오브젝트에 접근할 수 있는 사용자를 제어합니다. public 은 누구나 접근 가능, protected 는 allowUserIds에 지정된 사용자 ID만 접근 가능, private 은 오너 본인만 접근 가능합니다. 정의 설명 public 공개 protected 지정한 사용자에게만 공개 private 비공개 allowUserIds List {scope} == “protected” [] 0 ~ 100 items 공개할 사용자 ID 목록 스코프가 protected 로 설정되어 있는 경우, 이 데이터 오브젝트에 접근할 수 있는 사용자를 지정합니다. 이 목록에 포함된 사용자 ID를 가진 사용자만 읽기 접근이 허용됩니다. ※ scope이(가) “protected” 이면 활성화 status 문자열 열거형 enum {   “ACTIVE”,   “UPLOADING”,   “DELETED” }  상태 데이터 오브젝트의 현재 라이프사이클 상태입니다. ACTIVE 는 데이터에 접근 가능함을 나타내고, UPLOADING 은 새로운 버전이 업로드 중임을 나타내며, DELETED 는 삭제 예정으로 표시된 상태임을 나타냅니다(실제 삭제는 30일 후에 이루어집니다). 정의 설명 ACTIVE 유효 UPLOADING 업로드 중 DELETED 삭제됨(삭제 처리로부터 30일 후에 실제로 삭제) generation string ~ 128자 데이터의 세대 업로드된 데이터의 현재 버전을 나타내는 식별자입니다. 데이터가 재업로드될 때마다 새로운 세대 ID가 할당됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzDataObjectHistory 데이터 오브젝트 이력 데이터 오브젝트의 업데이트 이력을 확인할 수 있습니다. 데이터 오브젝트가 재업로드될 때마다 세대 ID와 파일 크기를 포함한 이력 레코드가 생성됩니다. 이력 데이터는 30일간 보관되며, 이전 버전으로의 롤백 및 감사가 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 dataObjectHistoryId string ※ ~ 1024자 데이터 오브젝트 이력 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 generation string  ~ 128자 세대 ID 업로드 시점의 데이터 오브젝트의 특정 버전을 나타내는 고유 식별자입니다. DataObject 의 generation 필드에 해당하며, PrepareDownloadByGeneration 에서 이 특정 버전을 다운로드할 때 사용할 수 있습니다. contentLength long  0 ~ 10485760 데이터 크기 이 세대의 업로드 데이터 크기(바이트 단위)입니다. 최대 파일 크기는 10 MB(10,485,760 바이트)입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 메서드 deleteDataObject 업로드한 파일 삭제 지정한 데이터 오브젝트를 삭제 예정으로 표시합니다. 실제 파일은 30일 후에 삭제됩니다. 플레이어가 더 이상 필요하지 않은 세이브 데이터나 업로드한 콘텐츠를 삭제할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. Result 타입 설명 item EzDataObject 데이터 오브젝트 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 InvalidStatusException BadRequestException DataObject가 조작 가능한 상태가 아닙니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . DeleteDataObjectAsync ( ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Datastore . Exception . InvalidStatusException e ) { // DataObject is not in operable state. } var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . DeleteDataObjectFuture ( ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Datastore . Exception . InvalidStatusException ) { // DataObject is not in operable state. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e DeleteDataObject ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Datastore :: Error :: FInvalidStatusError :: Class )) { // DataObject is not in operable state. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . delete_data_object ( ) if async_result . error != null : if async_result . error is Gs2DatastoreInvalidStatusException : # DataObject가 조작 가능한 상태가 아닙니다 pass push_error ( str ( async_result . error )) return var result = async_result . result doneUpload 파일 업로드 확정 PrepareUpload 또는 PrepareReUpload로 취득한 URL로의 파일 업로드가 완료된 후에 호출합니다. 업로드를 확정하여 데이터 오브젝트를 다운로드 가능한 상태(상태 ACTIVE )로 만듭니다. 이 호출을 하지 않으면 데이터 오브젝트는 UPLOADING 상태인 채로 남아 다운로드할 수 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. Result 타입 설명 item EzDataObject 데이터 오브젝트 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 InvalidStatusException BadRequestException DataObject가 조작 가능한 상태가 아닙니다 NotUploadedException BadRequestException DataObject가 업로드되지 않았습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . DoneUploadAsync ( ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Datastore . Exception . InvalidStatusException e ) { // DataObject is not in operable state. } catch ( Gs2 . Gs2Datastore . Exception . NotUploadedException e ) { // DataObject is not uploaded. } var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . DoneUploadFuture ( ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Datastore . Exception . InvalidStatusException ) { // DataObject is not in operable state. } if ( future . Error is Gs2 . Gs2Datastore . Exception . NotUploadedException ) { // DataObject is not uploaded. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e DoneUpload ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Datastore :: Error :: FInvalidStatusError :: Class )) { // DataObject is not in operable state. } if ( e -\u003e IsChildOf ( Gs2 :: Datastore :: Error :: FNotUploadedError :: Class )) { // DataObject is not uploaded. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . done_upload ( ) if async_result . error != null : if async_result . error is Gs2DatastoreInvalidStatusException : # DataObject가 조작 가능한 상태가 아닙니다 pass if async_result . error is Gs2DatastoreNotUploadedException : # DataObject가 업로드되지 않았습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result listMyDataObjects 플레이어가 업로드한 데이터 목록 조회 플레이어가 업로드한 데이터 오브젝트(파일)의 목록을 조회합니다. 상태별로 필터링할 수 있습니다: ACTIVE (다운로드 가능), UPLOADING (업로드 중), DELETED (삭제 예정). 세이브 데이터 목록 화면을 표시하거나, 플레이어가 현재 저장하고 있는 파일을 확인할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession status 문자열 열거형 enum {   “ACTIVE”,   “UPLOADING”,   “DELETED” } 상태 정의 설명 ACTIVE 유효 UPLOADING 업로드 중 DELETED 삭제됨(삭제 처리로부터 30일 후 실제 삭제) pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 데이터 오브젝트 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . DataObjectsAsync ( status : \"ACTIVE\" ). ToListAsync (); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . DataObjects ( status : \"ACTIVE\" ); List EzDataObject \u003e items = new List EzDataObject \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e DataObjects ( \"ACTIVE\" // status ); TArray Gs2 :: UE5 :: Datastore :: Model :: FEzDataObjectPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeDataObjects ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeDataObjects ( callbackId ); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeDataObjects ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeDataObjects ( callbackId ); const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeDataObjects ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeDataObjects ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. prepareDownload 파일의 다운로드 URL 취득(데이터 오브젝트 ID로 지정) 지정한 데이터 오브젝트의 일시적인 다운로드 URL을 반환합니다. 데이터 오브젝트는 ID(GRN)로 지정합니다. 접근 제어가 적용되어 파일의 오너 또는 허용 목록에 등록된 사용자만 다운로드할 수 있습니다. 반환된 URL에 HTTP GET으로 접근하여 파일을 다운로드합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectId string  ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN gameSession GameSession  GameSession Result 타입 설명 item EzDataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . PrepareDownloadAsync ( dataObjectId : \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ); var item = await result . ModelAsync (); var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . PrepareDownloadFuture ( dataObjectId : \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var fileUrl = future . Result . FileUrl ; var contentLength = future . Result . ContentLength ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e PrepareDownload ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" // dataObjectId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto FileUrl = Result -\u003e FileUrl ; const auto ContentLength = Result -\u003e ContentLength ; var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . prepare_download ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" # data_object_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result prepareDownloadByUserIdAndDataObjectName 다른 플레이어의 파일 다운로드 URL 취득(사용자 ID와 이름으로 지정) 다른 플레이어의 데이터를 사용자 ID와 데이터 오브젝트 이름을 지정하여 다운로드합니다. 접근 제어가 적용됩니다. 데이터가 public 이거나, 요청한 플레이어가 오너의 허용 목록에 포함되어 있어야 합니다. 커스텀 레벨이나 리플레이 데이터 등, 플레이어끼리 데이터를 공유할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. Result 타입 설명 item EzDataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . PrepareDownloadByUserIdAndDataObjectNameAsync ( ); var item = await result . ModelAsync (); var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . PrepareDownloadByUserIdAndDataObjectNameFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var fileUrl = future . Result . FileUrl ; var contentLength = future . Result . ContentLength ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e PrepareDownloadByUserIdAndDataObjectName ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto FileUrl = Result -\u003e FileUrl ; const auto ContentLength = Result -\u003e ContentLength ; var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . prepare_download_by_user_id_and_data_object_name ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result prepareDownloadOwnData 플레이어 자신의 파일 다운로드 URL 취득(이름으로 지정) ID 대신 데이터 오브젝트 이름을 지정하여 플레이어 자신의 데이터를 다운로드하기 위한 편리한 방법입니다. 플레이어가 자신의 세이브 데이터나 업로드한 콘텐츠를 불러올 때 사용합니다. 일시적인 다운로드 URL과 파일 크기가 반환됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. gameSession GameSession  GameSession Result 타입 설명 item EzDataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . PrepareDownloadOwnDataAsync ( ); var item = await result . ModelAsync (); var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . PrepareDownloadOwnDataFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var fileUrl = future . Result . FileUrl ; var contentLength = future . Result . ContentLength ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e PrepareDownloadOwnData ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto FileUrl = Result -\u003e FileUrl ; const auto ContentLength = Result -\u003e ContentLength ; var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . prepare_download_own_data ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result Download 데이터 다운로드 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 Result 타입 설명 item byte 배열 바이너리 데이터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . DownloadAsync ( dataObjectName : \"dataObject-0001\" ); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . DownloadFuture (); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var result = future . Result ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e Download (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); DownloadByUserIdAndDataObjectName 사용자ID와 데이터 이름을 지정하여 데이터를 다운로드 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 Result 타입 설명 item byte 배열 바이너리 데이터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . DownloadByUserIdAndDataObjectNameAsync ( ); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . DownloadByUserIdAndDataObjectNameFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var result = future . Result ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e DownloadByUserIdAndDataObjectName ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); DownloadOwn 자신의 데이터 다운로드 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 Result 타입 설명 item byte 배열 바이너리 데이터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . DownloadOwnAsync (); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . DownloadOwnFuture (); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var result = future . Result ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e DownloadOwn ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); ReUpload 재업로드 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 data byte 배열 바이너리 데이터 Result 타입 설명 item EzDataObject 데이터 오브젝트 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . ReUploadAsync ( data : binary ); var item = await result . ModelAsync (); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . ReUploadFuture ( data : binary ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e ReUpload ( binary // Binary ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // obtain changed values / result values const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); prepareReUpload 기존 파일의 재업로드(덮어쓰기) 준비 기존 데이터 오브젝트의 내용을 교체하기 위한 새로운 업로드 URL을 반환합니다. 이전 버전의 파일은 이력에 남으므로, 세대 번호를 지정하여 이전 버전을 다운로드할 수도 있습니다. 반환된 URL에 새 파일을 업로드한 후, DoneUpload를 호출하여 확정합니다. 재업로드 흐름: PrepareReUpload → 반환된 URL에 파일 PUT → DoneUpload Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. contentType string “application/octet-stream” ~ 256자 업로드할 데이터의 MIME-Type Result 타입 설명 item EzDataObject 데이터 오브젝트 uploadUrl string 업로드 처리를 실행하는 데 사용하는 URL 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . PrepareReUploadAsync ( contentType : \"application/octet-stream\" ); var item = await result . ModelAsync (); var uploadUrl = result . UploadUrl ; var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . PrepareReUploadFuture ( contentType : \"application/octet-stream\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var uploadUrl = future . Result . UploadUrl ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e PrepareReUpload ( \"application/octet-stream\" // contentType ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto UploadUrl = Result -\u003e UploadUrl ; var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . prepare_re_upload ( \"application/octet-stream\" # content_type ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result prepareUpload 새 파일 업로드 준비 새로운 데이터 오브젝트를 생성하고 업로드용 URL을 반환합니다. 이 API를 호출한 후, 반환된 URL에 HTTP PUT 요청으로 파일을 업로드하고, DoneUpload를 호출하여 확정합니다. 접근 범위( public 또는 protected )를 설정하거나, 파일 다운로드를 허용할 사용자를 지정할 수 있습니다. updateIfExists 를 true로 설정하면, 동일한 이름의 파일이 이미 있는 경우 오류를 반환하는 대신 기존 파일을 덮어써 업데이트합니다. 업로드 흐름: PrepareUpload → 반환된 URL에 파일 PUT → DoneUpload Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession name string ~ 128자 데이터 오브젝트의 이름 지정하지 않으면 자동으로 UUID가 할당됩니다. scope 문자열 열거형 enum {   “public”,   “protected”,   “private” } “private” 파일 접근 권한 이 데이터 오브젝트에 접근할 수 있는 사용자를 제어합니다. public 은 누구나 접근 가능, protected 는 allowUserIds에 지정된 사용자 ID만 접근 가능, private 은 오너 본인만 접근 가능합니다. 정의 설명 public 공개 protected 지정한 사용자에게만 공개 private 비공개 contentType string “application/octet-stream” ~ 256자 업로드할 데이터의 MIME-Type allowUserIds List {scope} == “protected” [] 0 ~ 100 items 공개할 사용자 ID 목록 스코프가 protected 로 설정되어 있는 경우, 이 데이터 오브젝트에 접근할 수 있는 사용자를 지정합니다. 이 목록에 포함된 사용자 ID를 가진 사용자만 읽기 접근이 허용됩니다. updateIfExists bool false 이미 데이터가 존재하는 경우 오류로 처리할지, 데이터를 업데이트할지 여부 Result 타입 설명 item EzDataObject 데이터 오브젝트 uploadUrl string 업로드 처리를 실행하는 데 사용하는 URL 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . PrepareUploadAsync ( name : \"dataObject-0001\" , scope : \"public\" , contentType : \"application/octet-stream\" , allowUserIds : null , updateIfExists : null ); var item = await result . ModelAsync (); var uploadUrl = result . UploadUrl ; var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . PrepareUploadFuture ( name : \"dataObject-0001\" , scope : \"public\" , contentType : \"application/octet-stream\" , allowUserIds : null , updateIfExists : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var uploadUrl = future . Result . UploadUrl ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e PrepareUpload ( \"dataObject-0001\" , // name \"public\" , // scope \"application/octet-stream\" // contentType // allowUserIds // updateIfExists ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto UploadUrl = Result -\u003e UploadUrl ; var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . prepare_upload ( \"dataObject-0001\" , # name \"public\" , # scope \"application/octet-stream\" , # content_type null , # allow_user_ids null # update_if_exists ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result restoreDataObject 데이터 오브젝트의 관리 정보 복구 데이터 오브젝트의 메타데이터와 실제 파일 사이의 불일치를 수정합니다. 기록되어 있는 파일 크기나 버전 번호가 실제 파일과 일치하지 않는 경우(업로드가 중단된 경우 등), 이 API가 메타데이터를 올바르게 수정합니다. 일반적으로는 호출할 필요가 없으며, 업로드 중 문제가 발생했을 때 복구 용도로만 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectId string  ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzDataObject 데이터 오브젝트 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 InvalidStatusException BadRequestException DataObject가 조작 가능한 상태가 아닙니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . RestoreDataObjectAsync ( dataObjectId : \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Datastore . Exception . InvalidStatusException e ) { // DataObject is not in operable state. } var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . RestoreDataObjectFuture ( dataObjectId : \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Datastore . Exception . InvalidStatusException ) { // DataObject is not in operable state. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e RestoreDataObject ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" // dataObjectId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Datastore :: Error :: FInvalidStatusError :: Class )) { // DataObject is not in operable state. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) var async_result = await domain . restore_data_object ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" # data_object_id ) if async_result . error != null : if async_result . error is Gs2DatastoreInvalidStatusException : # DataObject가 조작 가능한 상태가 아닙니다 pass push_error ( str ( async_result . error )) return var result = async_result . result updateDataObject 데이터 오브젝트의 접근 설정 변경 업로드된 데이터 오브젝트에 접근할 수 있는 범위를 변경합니다. 스코프를 public (누구나 다운로드 가능)과 protected (지정한 사용자만 다운로드 가능) 사이에서 전환하거나, 허용할 사용자 ID 목록을 업데이트할 수 있습니다. 파일 내용 자체는 변경되지 않습니다. 파일을 업데이트하려면 대신 PrepareReUpload를 사용하세요. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession scope 문자열 열거형 enum {   “public”,   “protected”,   “private” } “private” 파일 접근 권한 이 데이터 오브젝트에 접근할 수 있는 사용자를 제어합니다. public 은 누구나 접근 가능, protected 는 allowUserIds에 지정된 사용자 ID만 접근 가능, private 은 오너 본인만 접근 가능합니다. 정의 설명 public 공개 protected 지정한 사용자에게만 공개 private 비공개 allowUserIds List {scope} == “protected” [] 0 ~ 100 items 공개할 사용자 ID 목록 스코프가 protected 로 설정되어 있는 경우, 이 데이터 오브젝트에 접근할 수 있는 사용자를 지정합니다. 이 목록에 포함된 사용자 ID를 가진 사용자만 읽기 접근이 허용됩니다. Result 타입 설명 item EzDataObject 데이터 오브젝트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var result = await domain . UpdateDataObjectAsync ( scope : \"public\" , allowUserIds : null ); var item = await result . ModelAsync (); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var future = domain . UpdateDataObjectFuture ( scope : \"public\" , allowUserIds : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto Future = Domain -\u003e UpdateDataObject ( \"public\" // scope // allowUserIds ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . datastore . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . data_object ( \"dataObject-0001\" ) var async_result = await domain . update_data_object ( \"public\" , # scope null # allow_user_ids ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listDataObjectHistories 데이터 오브젝트의 버전 이력 조회 데이터 오브젝트의 과거 버전(세대) 목록을 조회합니다. PrepareReUpload로 파일을 재업로드할 때마다 이전 버전이 이력에 저장됩니다. 각 항목에는 파일 크기와 생성 일시가 포함되어 있어, 언제 무엇이 변경되었는지 확인할 수 있습니다. 버전 이력 화면을 구성하거나, 플레이어가 이전 세이브 데이터로 되돌리는 기능을 구현할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 데이터 오브젝트 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var items = await domain . DataObjectHistoriesAsync ( ). ToListAsync (); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); var it = domain . DataObjectHistories ( ); List EzDataObjectHistory \u003e items = new List EzDataObjectHistory \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); const auto It = Domain -\u003e DataObjectHistories ( ); TArray Gs2 :: UE5 :: Datastore :: Model :: FEzDataObjectHistoryPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeDataObjectHistories ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeDataObjectHistories ( callbackId ); var domain = gs2 . Datastore . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). DataObject ( dataObjectName : \"dataObject-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeDataObjectHistories ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeDataObjectHistories ( callbackId ); const auto Domain = Gs2 -\u003e Datastore -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e DataObject ( \"dataObject-0001\" // dataObjectName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeDataObjectHistories ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeDataObjectHistories ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Datastore SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Datastore SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/datastore/game_engine/"},{"content":"모델 EzEntry 게임 플레이어가 획득한 엔트리 게임 플레이어가 수집한 도감 엔트리 1건을 나타냅니다. 각 엔트리는 EntryModel에 대응하며, 획득 일시를 기록합니다. 보유 상태는 ‘존재함(수집됨) / 존재하지 않음’의 2가지 값으로 관리되며, 수량의 개념은 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 entryId string ※ ~ 1024자 엔트리 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string ~ 128자 사용자ID name string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. acquiredAt long ※ 현재 시각 획득 일시 이 엔트리가 게임 플레이어에 의해 처음 수집된 일시입니다. 등록 시 현재 시각이 자동으로 설정되며, 이후 변경할 수 없습니다. EzLike 즐겨찾기로 등록한 엔트리 게임 플레이어가 즐겨찾기(좋아요)로 등록한 도감 엔트리를 나타냅니다. 플레이어가 도감 내 특정 엔트리를 북마크하여 빠르게 접근할 수 있도록 합니다. 각 즐겨찾기는 EntryModel을 이름으로 참조하며, 사용자별로 고유합니다. 동일한 엔트리를 중복하여 즐겨찾기에 등록할 수 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 likeId string ※ ~ 1024자 즐겨찾기 엔트리 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string ~ 128자 사용자ID name string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. EzEntryModel 엔트리 모델 엔트리 모델은 GS2-Dictionary에서 도감에 기록 가능한 대상을 정의하는 마스터 데이터입니다. 각 엔트리 모델은 몬스터, 아이템, 아바타 파츠 등 도감에 기록되는 엔티티의 종류를 나타냅니다. 엔트리의 보유 상태는 ‘기록됨 / 미기록’의 2가지 값으로 관리되며, 동일한 엔트리 모델에 대해 수량이나 스택의 개념은 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 엔트리 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzConfig 설정 분산 트랜잭션 실행 시 트랜잭션 변수에 적용되는 키와 값의 쌍입니다. 실행 시점에 트랜잭션 파라미터 내의 플레이스홀더 값을 동적으로 치환할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 트랜잭션 파라미터 내에서 플레이스홀더 키로 사용되는 변수 이름입니다. 트랜잭션 템플릿에 정의된 플레이스홀더와 일치해야 합니다. value string ~ 51200자 값 트랜잭션 실행 시 플레이스홀더 키에 대입할 값입니다. 트랜잭션 파라미터 내의 해당 플레이스홀더가 이 값으로 치환됩니다. 메서드 getEntryModel 이름을 지정하여 수집 아이템 정의 조회 이름을 지정하여 엔트리 모델을 1건 조회합니다. 플레이어가 도감 화면에서 엔트리를 탭했을 때, 해당 아이템의 설명이나 메타데이터 등 상세 정보를 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. entryName string  ~ 128자 엔트리 모델 이름 Result 타입 설명 item EzEntryModel 엔트리 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). EntryModel ( entryName : \"entry-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). EntryModel ( entryName : \"entry-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e EntryModel ( \"entry-0001\" // entryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . entry_model ( null ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). EntryModel ( entryName : \"entry-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). EntryModel ( entryName : \"entry-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e EntryModel ( \"entry-0001\" // entryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Dictionary :: Model :: FEntryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . entry_model ( null ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listEntryModels 수집 아이템 정의 목록 조회 이 네임스페이스에 등록된 모든 엔트리 모델(수집 가능한 아이템의 종류)을 조회합니다. 엔트리 모델은 플레이어의 컬렉션에 등장하는 아이템을 정의합니다. 예를 들어 도감의 몬스터, 앨범의 캐릭터, 업적 등입니다. 컬렉션 화면이나 도감 화면에서 수집 가능한 아이템의 전체 목록을 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 엔트리 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . EntryModelsAsync ( ). ToListAsync (); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . EntryModels ( ); List EzEntryModel \u003e items = new List EzEntryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e EntryModels ( ); TArray Gs2 :: UE5 :: Dictionary :: Model :: FEzEntryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeEntryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeEntryModels ( callbackId ); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeEntryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeEntryModels ( callbackId ); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeEntryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeEntryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getEntry 플레이어가 특정 엔트리를 수집했는지 확인 엔트리 모델 이름을 지정하여, 플레이어가 특정 수집 아이템을 획득했는지 여부를 확인합니다. 도감의 아이템 상세 화면에서 “수집 완료” 또는 “미수집” 상태를 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzEntry 엔트리 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Entry ( entryModelName : \"entry-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Entry ( entryModelName : \"entry-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Entry ( \"entry-0001\" // entryModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . entry ( \"entry-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Entry ( entryModelName : \"entry-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Entry ( entryModelName : \"entry-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Entry ( \"entry-0001\" // entryModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Dictionary :: Model :: FEntry \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . entry ( \"entry-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getEntryWithSignature 변조 방지 서명이 포함된 엔트리 가져오기 데이터가 변조되지 않았음을 증명하는 암호 서명과 함께 엔트리를 가져옵니다. 플레이어가 특정 컬렉션 엔트리를 실제로 보유하고 있는지 외부 서버에서 검증하고 싶을 때 사용합니다. 예를 들어, 컬렉션 진행 상황에 따라 커스텀 서버에서 보상을 지급하는 경우 등에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzEntry 엔트리 body string 서명 대상 엔트리 정보 signature string 서명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Entry ( entryModelName : \"entry-0001\" ); var result = await domain . GetEntryWithSignatureAsync ( keyId : \"key-0001\" ); var item = await result . ModelAsync (); var body = result . Body ; var signature = result . Signature ; var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Entry ( entryModelName : \"entry-0001\" ); var future = domain . GetEntryWithSignatureFuture ( keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var body = future . Result . Body ; var signature = future . Result . Signature ; const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Entry ( \"entry-0001\" // entryModelName ); const auto Future = Domain -\u003e GetEntryWithSignature ( \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . entry ( \"entry-0001\" ) var async_result = await domain . get_entry_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listEntries 플레이어가 수집한 엔트리 목록 조회 플레이어가 지금까지 획득한 엔트리(수집 아이템)의 목록을 조회합니다. 플레이어가 잠금 해제한 아이템을 표시하는 컬렉션 화면이나 도감 화면을 구성할 때 사용합니다. 이 목록을 엔트리 모델의 전체 목록과 비교하면, 수집한 아이템과 수집하지 않은 아이템을 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession limit int 30 1 ~ 10000 취득할 데이터 건수 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 Result 타입 설명 items List 엔트리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . EntriesAsync ( ). ToListAsync (); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Entries ( ); List EzEntry \u003e items = new List EzEntry \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Entries ( ); TArray Gs2 :: UE5 :: Dictionary :: Model :: FEzEntryPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeEntries ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeEntries ( callbackId ); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeEntries ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeEntries ( callbackId ); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeEntries ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeEntries ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. addLikes 엔트리를 즐겨찾기에 추가 하나 이상의 엔트리를 플레이어의 즐겨찾기로 등록합니다. 여러 엔트리 이름을 한 번에 지정하여 일괄로 즐겨찾기에 추가할 수 있습니다. 이미 즐겨찾기에 등록된 엔트리는 그대로 건너뜁니다(오류가 발생하지 않습니다). 컬렉션 화면에서 플레이어가 “즐겨찾기” 버튼을 탭했을 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 Result 타입 설명 items List 등록한 즐겨찾기 엔트리 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . AddLikesAsync ( entryModelNames : new List string \u003e { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , } ); var item = await result . ModelAsync (); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . AddLikesFuture ( entryModelNames : new List string \u003e { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e AddLikes ( [] { auto v = TOptional TArray FString \u003e\u003e (); v -\u003e Add ( \"entry-0001\" ); v -\u003e Add ( \"entry-0002\" ); v -\u003e Add ( \"entry-0003\" ); return v ; }() // entryModelNames ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . add_likes ( [ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ] # entry_model_names ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result deleteLikes 엔트리를 즐겨찾기에서 제외 플레이어의 즐겨찾기 목록에서 하나 이상의 엔트리를 삭제합니다. 여러 엔트리 이름을 한 번에 지정하여 일괄로 즐겨찾기에서 제외할 수 있습니다. 컬렉션 화면에서 플레이어가 “즐겨찾기 해제” 버튼을 탭했을 때 사용합니다. 엔트리의 수집 상태에는 영향을 주지 않습니다. 수집된 상태는 그대로 유지됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 Result 타입 설명 items List 삭제한 즐겨찾기 엔트리 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . DeleteLikesAsync ( entryModelNames : new List string \u003e { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , } ); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . DeleteLikesFuture ( entryModelNames : new List string \u003e { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e DeleteLikes ( [] { auto v = TOptional TArray FString \u003e\u003e (); v -\u003e Add ( \"entry-0001\" ); v -\u003e Add ( \"entry-0002\" ); v -\u003e Add ( \"entry-0003\" ); return v ; }() // entryModelNames ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . delete_likes ( [ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ] # entry_model_names ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getLike 특정 엔트리가 즐겨찾기인지 확인 플레이어가 특정 엔트리를 즐겨찾기에 등록했는지 확인합니다. 도감의 아이템 상세 화면에서 “즐겨찾기 등록됨” 아이콘이나 하이라이트를 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzLike 즐겨찾기 엔트리 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Like ( entryModelName : \"entry-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Like ( entryModelName : \"entry-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Like ( \"entry-0001\" // entryModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . like ( \"entry-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Like ( entryModelName : \"entry-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Like ( entryModelName : \"entry-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Like ( \"entry-0001\" // entryModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Dictionary :: Model :: FLike \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . dictionary . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . like ( \"entry-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listLikes 플레이어의 즐겨찾기 엔트리 목록 조회 플레이어가 즐겨찾기에 등록한 엔트리의 목록을 조회합니다. 즐겨찾기는 수집과는 별도로 관리됩니다. 엔트리를 수집해도 자동으로 즐겨찾기에 등록되지는 않습니다. 컬렉션 화면의 “즐겨찾기” 탭을 표시하여, 플레이어가 관심 있는 아이템에 빠르게 접근할 수 있도록 할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession limit int 30 1 ~ 1000 취득할 데이터 건수 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 Result 타입 설명 items List 즐겨찾기 엔트리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . LikesAsync ( ). ToListAsync (); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Likes ( ); List EzLike \u003e items = new List EzLike \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Likes ( ); TArray Gs2 :: UE5 :: Dictionary :: Model :: FEzLikePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeLikes ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeLikes ( callbackId ); var domain = gs2 . Dictionary . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeLikes ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeLikes ( callbackId ); const auto Domain = Gs2 -\u003e Dictionary -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeLikes ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeLikes ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Dictionary SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Dictionary SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/dictionary/game_engine/"},{"content":"모델 EzStampSheetResult 트랜잭션 실행 결과(레거시) 서버사이드 자동 실행으로 처리된 트랜잭션의 실행 결과를 기록합니다. 각 단계의 요청 내용과 응답 결과를 포함합니다: 검증 액션(사전 조건 확인), 소비 액션, 입수 액션. 오류 감지 및 재시도 로직을 위해 HTTP 상태 코드도 추적합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID 이 트랜잭션을 고유하게 식별하는 UUID입니다. 트랜잭션과 그 실행 결과, 그리고 연쇄되는 후속 트랜잭션의 연결에 사용됩니다. taskRequests List 0 ~ 100 items 소비 액션의 요청 내용 목록 sheetRequest EzAcquireAction  입수 액션의 요청 내용 taskResults List [] 0 ~ 100 items 소비 액션의 실행 결과 sheetResult string ~ 1048576자 입수 액션의 실행 결과 응답 내용 EzTransactionResult 트랜잭션 실행 결과 서버사이드 자동 실행으로 처리된 분산 트랜잭션의 실행 결과를 기록합니다. 각 단계의 구조화된 결과를 포함합니다: 검증 액션(사전 조건 확인), 소비 액션(리소스 소비), 입수 액션(리소스 지급). 각 액션 결과에는 요청, HTTP 상태 코드, 응답 페이로드가 포함됩니다. 상태 코드(비2xx)에 의한 오류 감지와, 충돌(409)이나 서버 오류(5xx)에서의 재시도가 지원됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID 이 분산 트랜잭션을 고유하게 식별하는 UUID입니다. 실행 결과 조회 및 원래 API 요청과의 연결에 사용됩니다. verifyResults List 0 ~ 100 items 검증 액션의 실행 결과 목록 consumeResults List 0 ~ 100 items 소비 액션의 실행 결과 목록 acquireResults List 0 ~ 100 items 입수 액션의 실행 결과 목록 EzDistributorModel 배포 모델 배포 모델이란 리소스 입수 시 소지 한도를 초과하여 입수했을 때의 정책을 설정하는 엔티티입니다. GS2-Distributor를 통해 입수 처리를 수행함으로써, 넘친 리소스를 GS2-Inbox의 메시지로 전송할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. inboxNamespaceId string ~ 1024자 넘친 리소스를 전송할 GS2-Inbox 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 리소스 입수가 플레이어의 소지 한도를 초과한 경우, 넘친 리소스는 지정된 GS2-Inbox 네임스페이스에 메시지로 전송됩니다. 플레이어는 이후 수신함에서 리소스를 수령할 수 있습니다. whiteListTargetIds List [] 0 ~ 1000 items GS2-Distributor를 통해 처리할 수 있는 대상 리소스 GRN의 화이트리스트 이 배포 모델을 사용하여 입수 처리를 수행할 수 있는 대상 리소스의 GRN 프리픽스를 지정합니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzDistributeResource 리소스 배포 입수 액션과 그 요청 파라미터로 구성된 단일 리소스 배포 조작을 나타냅니다. 플레이어에게 리소스를 배포할 때 어떤 GS2 API 액션을 어떤 파라미터로 실행할지 지정하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzBatchRequestPayload API 일괄 실행 요청 일괄 실행 내 단일 API 요청을 나타냅니다. 여러 배치 요청 페이로드를 함께 전송함으로써 여러 GS2 API 호출을 한 번의 라운드트립으로 실행할 수 있어, 네트워크 오버헤드와 지연 시간을 줄일 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 requestId string  ~ 128자 요청 ID 배치 내에서 이 요청에 대해 클라이언트가 할당한 식별자입니다. 배치 응답 내에서 각 요청과 대응하는 결과를 연결하는 데 사용됩니다. service 문자열 열거형 enum {   “account”,   “adReward”,   “auth”,   “buff”,   “chat”,   “datastore”,   “deploy”,   “dictionary”,   “distributor”,   “enchant”,   “enhance”,   “exchange”,   “experience”,   “formation”,   “friend”,   “gateway”,   “grade”,   “guard”,   “guild”,   “identifier”,   “idle”,   “inbox”,   “inventory”,   “jobQueue”,   “key”,   “limit”,   “lock”,   “log”,   “loginReward”,   “lottery”,   “matchmaking”,   “megaField”,   “mission”,   “money”,   “money2”,   “news”,   “quest”,   “ranking”,   “ranking2”,   “realtime”,   “schedule”,   “script”,   “seasonRating”,   “serialKey”,   “showcase”,   “skillTree”,   “stamina”,   “stateMachine”,   “version” }  마이크로서비스 이름 호출할 GS2 마이크로서비스 이름입니다(예: “inventory”, “experience”, “money”). 이 API 요청을 수신할 서비스 엔드포인트를 결정합니다. 정의 설명 account GS2-Account adReward GS2-AdReward auth GS2-Auth buff GS2-Buff chat GS2-Chat datastore GS2-Datastore deploy GS2-Deploy dictionary GS2-Dictionary distributor GS2-Distributor enchant GS2-Enchant enhance GS2-Enhance exchange GS2-Exchange experience GS2-Experience formation GS2-Formation friend GS2-Friend gateway GS2-Gateway grade GS2-Grade guard GS2-Guard guild GS2-Guild identifier GS2-Identifier idle GS2-Idle inbox GS2-Inbox inventory GS2-Inventory jobQueue GS2-JobQueue key GS2-Key limit GS2-Limit lock GS2-Lock log GS2-Log loginReward GS2-LoginReward lottery GS2-Lottery matchmaking GS2-Matchmaking megaField GS2-MegaField mission GS2-Mission money GS2-Money money2 GS2-Money2 news GS2-News quest GS2-Quest ranking GS2-Ranking ranking2 GS2-Ranking2 realtime GS2-Realtime schedule GS2-Schedule script GS2-Script seasonRating GS2-SeasonRating serialKey GS2-SerialKey showcase GS2-Showcase skillTree GS2-SkillTree stamina GS2-Stamina stateMachine GS2-StateMachine version GS2-Version methodName string  ~ 128자 메서드 이름 대상 서비스에서 호출할 API 메서드 이름입니다(예: “describeNamespaces”, “getInventory”). 지정된 서비스의 유효한 API 메서드와 일치해야 합니다. parameter string  ~ 10240자 파라미터 API 메서드의 JSON으로 직렬화된 요청 파라미터입니다. 지정된 서비스 메서드의 요청 스키마를 준수해야 합니다. EzBatchResultPayload API 일괄 실행 결과 일괄 실행 내 단일 API 요청의 결과를 나타냅니다. 각 결과는 요청 ID로 원래 요청과 연결되며, HTTP 상태 코드와 JSON 응답 페이로드를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 requestId string  ~ 128자 요청 ID 대응하는 배치 요청과 일치하는 클라이언트 할당 식별자입니다. 이 결과를 원래 요청과 연결하는 데 사용됩니다. statusCode int  100 ~ 1000 상태 코드 이 배치 요청에 대해 GS2 API가 반환한 HTTP 상태 코드입니다. 2xx는 성공, 4xx는 클라이언트 오류, 5xx는 서버 오류를 나타냅니다. resultPayload string  ~ 10240자 응답 이 배치 요청에 대해 GS2 API가 반환한 JSON 응답 본문입니다. API 메서드의 응답 데이터 또는 오류 상세 정보를 포함합니다. EzAcquireAction 입수 액션 분산 트랜잭션 내 리소스 입수 조작을 나타냅니다. 플레이어에게 리소스(아이템, 화폐, 경험치 등)를 지급하는 입수 액션에 대응합니다. GS2 API의 액션 식별자와 JSON으로 직렬화된 요청 파라미터를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzConsumeAction 소비 액션 분산 트랜잭션 내 리소스 소비 조작을 나타냅니다. 플레이어로부터 리소스(아이템, 화폐, 스태미나 등)를 소비하는 소비 액션에 대응합니다. 소비 액션은 입수 액션보다 먼저 실행되어, 플레이어가 필요한 비용을 충족하는지 확인합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyAction 검증 액션 분산 트랜잭션 내 사전 조건 검증 조작을 나타냅니다. 소비·입수 액션보다 먼저 실행되어 조건이 충족되었는지 검증합니다(예: 소지 한도 확인, 퀘스트 완료 상태 검증 등). 검증 액션 중 하나라도 실패하면 트랜잭션 전체가 중단됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzAcquireActionResult 획득 액션 실행 결과 단일 획득 액션 실행 결과를 기록합니다. 원본 요청, 성공·실패를 나타내는 HTTP 상태 코드, GS2 API로부터의 JSON 응답 페이로드를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 이 입수 액션에 대해 GS2 API가 반환한 HTTP 상태 코드입니다. 2xx는 성공, 409는 재시도가 필요한 충돌, 5xx는 서버 오류를 나타냅니다. acquireResult string ~ 1048576자 결과 내용 입수 액션 실행 후 GS2 API가 반환한 JSON 응답 본문입니다. 입수한 리소스의 상세 정보를 포함하며, 연쇄되는 트랜잭션 ID가 포함될 수도 있습니다. EzConsumeActionResult 소비 액션 실행 결과 단일 소비 액션 실행 결과를 기록합니다. 원본 요청, 성공·실패를 나타내는 HTTP 상태 코드, GS2 API로부터의 JSON 응답 페이로드를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 이 소비 액션에 대해 GS2 API가 반환한 HTTP 상태 코드입니다. 2xx는 성공, 409는 재시도가 필요한 충돌, 5xx는 서버 오류를 나타냅니다. consumeResult string ~ 1048576자 결과 내용 소비 액션 실행 후 GS2 API가 반환한 JSON 응답 본문입니다. 소비된 리소스의 상세 정보를 포함합니다. EzVerifyActionResult 검증 액션 실행 결과 단일 검증 액션 실행 결과를 기록합니다. 원본 요청, 성공·실패를 나타내는 HTTP 상태 코드, GS2 API로부터의 JSON 응답 페이로드를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 이 검증 액션에 대해 GS2 API가 반환한 HTTP 상태 코드입니다. 2xx는 검증 성공, 비2xx는 사전 조건이 충족되지 않았음을 나타냅니다. verifyResult string ~ 1048576자 결과 내용 검증 액션 실행 후 GS2 API가 반환한 JSON 응답 본문입니다. 검증 결과의 상세 정보를 포함합니다. 메서드 getDistributorModel 이름을 지정하여 배포 모델 정의를 취득한다 이름을 지정하여 배포 모델을 1건 취득합니다. 취득할 수 있는 정보에는 허용된 서비스 액션과, 오버플로 처리용으로 설정된 인박스 네임스페이스가 포함됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. distributorName string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzDistributorModel 배포 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). DistributorModel ( distributorName : \"distributor-model-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). DistributorModel ( distributorName : \"distributor-model-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e DistributorModel ( \"distributor-model-0001\" // distributorName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . distributor . namespace_ ( \"namespace-0001\" ) . distributor_model ( \"distributor-model-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). DistributorModel ( distributorName : \"distributor-model-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). DistributorModel ( distributorName : \"distributor-model-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e DistributorModel ( \"distributor-model-0001\" // distributorName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Distributor :: Model :: FDistributorModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . distributor . namespace_ ( \"namespace-0001\" ) . distributor_model ( \"distributor-model-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listDistributorModels 배포 모델 정의 목록을 취득한다 이 네임스페이스에 등록되어 있는 모든 배포 모델을 취득합니다. 배포 모델은 리소스 배포 규칙을 정의합니다. 허용할 서비스 액션이나, 플레이어의 인벤토리가 가득 찼을 때 넘친 아이템을 어디로 보낼지(예: 선물 상자 / 인박스)를 설정합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 배포 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . DistributorModelsAsync ( ). ToListAsync (); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . DistributorModels ( ); List EzDistributorModel \u003e items = new List EzDistributorModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e DistributorModels ( ); TArray Gs2 :: UE5 :: Distributor :: Model :: FEzDistributorModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeDistributorModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeDistributorModels ( callbackId ); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeDistributorModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeDistributorModels ( callbackId ); const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeDistributorModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeDistributorModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. batchExecuteApi 여러 API 호출을 일괄 실행한다 여러 GS2 API 요청을 1회의 호출로 한꺼번에 전송하고, 응답을 한꺼번에 받습니다. 통신 왕복 횟수가 줄어들어, 여러 API를 동시에 호출해야 하는 상황에서 성능이 향상됩니다. 예를 들어, 플레이어가 홈 화면을 열었을 때 인벤토리·스태미나·퀘스트 진행 상황을 한꺼번에 취득하는 경우 등에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 requestPayloads List  1 ~ 100 items 배치 요청 Result 타입 설명 results List 배치 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Distributor . Namespace ( namespaceName : null ); var result = await domain . BatchExecuteApiAsync ( requestPayloads : new List Gs2 . Unity . Gs2Distributor . Model . EzBatchRequestPayload \u003e { new Gs2 . Unity . Gs2Distributor . Model . EzBatchRequestPayload () { Service = \"inventory\" , MethodName = \"describeSimpleItems\" , Parameter = \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"accessToken\\\": \\\"accessToken-0001\\\"}\" , }, new Gs2 . Unity . Gs2Distributor . Model . EzBatchRequestPayload () { Service = \"exchange\" , MethodName = \"describeRateModels\" , Parameter = \"{\\\"namespaceName\\\": \\\"namespace-0001\\\"}\" , }, } ); var results = result . Results ; var domain = gs2 . Distributor . Namespace ( namespaceName : null ); var future = domain . BatchExecuteApiFuture ( requestPayloads : new List Gs2 . Unity . Gs2Distributor . Model . EzBatchRequestPayload \u003e { new Gs2 . Unity . Gs2Distributor . Model . EzBatchRequestPayload () { Service = \"inventory\" , MethodName = \"describeSimpleItems\" , Parameter = \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"accessToken\\\": \\\"accessToken-0001\\\"}\" , }, new Gs2 . Unity . Gs2Distributor . Model . EzBatchRequestPayload () { Service = \"exchange\" , MethodName = \"describeRateModels\" , Parameter = \"{\\\"namespaceName\\\": \\\"namespace-0001\\\"}\" , }, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var results = future . Result . Results ; const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( nullptr // namespaceName ); const auto Future = Domain -\u003e BatchExecuteApi ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Distributor :: Model :: FEzBatchRequestPayload \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Distributor :: Model :: FEzBatchRequestPayload \u003e () -\u003e WithService ( TOptional FString \u003e ( \"inventory\" )) -\u003e WithMethodName ( TOptional FString \u003e ( \"describeSimpleItems\" )) -\u003e WithParameter ( TOptional FString \u003e ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" accessToken \\\" : \\\" accessToken-0001 \\\" }\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Distributor :: Model :: FEzBatchRequestPayload \u003e () -\u003e WithService ( TOptional FString \u003e ( \"exchange\" )) -\u003e WithMethodName ( TOptional FString \u003e ( \"describeRateModels\" )) -\u003e WithParameter ( TOptional FString \u003e ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" }\" )) ); return v ; }() // requestPayloads ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); const auto Results = Result -\u003e Results ; var domain = ez . distributor . namespace_ ( null ) var async_result = await domain . batch_execute_api ( [ Gs2DistributorEzBatchRequestPayload . new () . with_service ( \"inventory\" ) . with_method_name ( \"describeSimpleItems\" ) . with_parameter ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" accessToken \\\" : \\\" accessToken-0001 \\\" }\" ), Gs2DistributorEzBatchRequestPayload . new () . with_service ( \"exchange\" ) . with_method_name ( \"describeRateModels\" ) . with_parameter ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" }\" ), ] # request_payloads ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result freezeMasterData 현재 시점의 마스터 데이터를 고정한다 현재 마스터 데이터의 스냅샷을 생성하여, 이후 트랜잭션이 이 고정된 버전을 사용하도록 합니다. 마스터 데이터가 나중에 갱신되어도 영향을 받지 않습니다. 정합성을 유지하는 데 유용합니다. 예를 들어, 플레이어가 퀘스트를 시작한 경우 보상은 클리어 시점이 아니라 시작 시점의 마스터 데이터에 기반해야 합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 newContextStack string 마스터 데이터를 고정하는 시각을 기록한 컨텍스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Distribute ( ); var result = await domain . FreezeMasterDataAsync ( accessToken : null ); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Distribute ( ); var future = domain . FreezeMasterDataFuture ( accessToken : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Distribute ( ); const auto Future = Domain -\u003e FreezeMasterData ( nullptr // accessToken ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); freezeMasterDataBySignedTimestamp 서명된 타임스탬프 시점에 마스터 데이터를 고정한다 서명된 타임스탬프를 사용하여 특정 시점의 마스터 데이터를 고정합니다. FreezeMasterData(‘지금’ 시점에서 고정)와 달리, 정확한 시각을 지정할 수 있습니다. 고정할 시점이 서버 측에서 미리 정해져 있는 경우 등에 사용합니다. 서명된 타임스탬프는 SignFreezeMasterDataTimestamp로 발행할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession body string  ~ 1024자 본문 signature string  ~ 256자 서명 keyId string  ~ 1024자 서명 계산에 사용한 GS2-Key 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 newContextStack string 마스터 데이터를 고정하는 시각을 기록한 컨텍스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Distribute ( ); var result = await domain . FreezeMasterDataBySignedTimestampAsync ( accessToken : null , body : \"body\" , signature : \"signature\" , keyId : \"key-0001\" ); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Distribute ( ); var future = domain . FreezeMasterDataBySignedTimestampFuture ( accessToken : null , body : \"body\" , signature : \"signature\" , keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Distribute ( ); const auto Future = Domain -\u003e FreezeMasterDataBySignedTimestamp ( nullptr , // accessToken \"body\" , // body \"signature\" , // signature \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); runStampSheet 획득 액션을 실행한다(리소스 부여) 트랜잭션의 일부로, 플레이어에게 리소스를 부여하는 획득 액션을 1개 실행합니다. 예를 들어, 아이템 부여, 경험치 가산, 게임 내 화폐 부여 등입니다. 일반적으로 직접 호출할 필요는 없습니다. 트랜잭션 처리 시 SDK가 자동으로 처리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. stampSheet string  ~ 5242880자 트랜잭션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN contextStack string ~ 32768자 요청 컨텍스트 Result 타입 설명 statusCode int 상태 코드 result string 응답 내용 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 runStampSheetExpress 트랜잭션 내 모든 액션을 일괄 실행한다(익스프레스 모드) 트랜잭션의 검증·소비·획득 액션을 1회의 API 호출로 한꺼번에 실행합니다. 개별로 실행하는 것보다 고속입니다. 오류가 발생한 경우에는 다시 호출해 주세요. 소비 액션이 중복 적용되지 않도록 하는 구조가 있으므로 안전하게 재시도할 수 있습니다. 일반적으로 직접 호출할 필요는 없습니다. 트랜잭션 처리 시 SDK가 자동으로 처리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. stampSheet string  ~ 5242880자 트랜잭션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 verifyTaskResultCodes List 검증 액션의 실행 상태 코드 verifyTaskResults List 검증 액션의 실행 결과 taskResultCodes List 소비 액션의 실행 상태 코드 taskResults List 소비 액션의 실행 결과 sheetResultCode int 획득 액션의 실행 상태 코드 sheetResult string 획득 액션의 실행 결과 응답 내용 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 runStampSheetExpressWithoutNamespace 네임스페이스 없이 트랜잭션 내 모든 액션을 일괄 실행한다(익스프레스 모드) 익스프레스 모드의 고속성과 네임스페이스 생략의 경량성을 결합한 버전입니다. 검증·소비·획득 액션을 1회의 호출로 한꺼번에 실행합니다. 중복 실행을 방지하는 구조가 있으므로 안전하게 재시도할 수 있습니다. 트레이드오프: 트랜잭션 로그가 GS2-Log에 기록되지 않고, 오버플로 처리를 사용할 수 없는 등의 제약이 있습니다. 일반적으로 직접 호출할 필요는 없습니다. 트랜잭션 처리 시 SDK가 자동으로 처리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 stampSheet string  ~ 5242880자 트랜잭션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 verifyTaskResultCodes List 검증 액션의 실행 상태 코드 verifyTaskResults List 검증 액션의 실행 결과 taskResultCodes List 소비 액션의 실행 상태 코드 taskResults List 소비 액션의 실행 결과 sheetResultCode int 획득 액션의 실행 상태 코드 sheetResult string 획득 액션의 실행 결과 응답 내용 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 runStampSheetWithoutNamespace 네임스페이스를 지정하지 않고 획득 액션을 실행한다 네임스페이스 지정을 생략한 RunStampSheet의 경량 버전입니다. 오버헤드는 줄어들지만, 트랜잭션 로그가 GS2-Log에 기록되지 않고 오버플로 처리를 사용할 수 없는 등의 트레이드오프가 있습니다. 일반적으로 직접 호출할 필요는 없습니다. 트랜잭션 처리 시 SDK가 자동으로 처리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 stampSheet string  ~ 5242880자 트랜잭션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN contextStack string ~ 32768자 요청 컨텍스트 Result 타입 설명 statusCode int 상태 코드 result string 응답 내용 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 runStampTask 소비 액션을 실행한다(리소스 소비) 트랜잭션의 일부로, 플레이어로부터 리소스를 차감하는 소비 액션을 1개 실행합니다. 예를 들어, 게임 내 화폐 지불, 스태미나 소비, 아이템 사용 등입니다. 일반적으로 직접 호출할 필요는 없습니다. 트랜잭션 처리 시 SDK가 자동으로 처리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. stampTask string  ~ 5242880자 소비 액션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN contextStack string ~ 32768자 요청 컨텍스트 Result 타입 설명 contextStack string 태스크 실행 결과를 반영한 ContextStack statusCode int 상태 코드 result string 응답 내용 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 runStampTaskWithoutNamespace 네임스페이스를 지정하지 않고 소비 액션을 실행한다 네임스페이스 지정을 생략한 RunStampTask의 경량 버전입니다. 오버헤드는 줄어들지만, 트랜잭션 로그가 GS2-Log에 기록되지 않고 오버플로 처리를 사용할 수 없는 등의 트레이드오프가 있습니다. 일반적으로 직접 호출할 필요는 없습니다. 트랜잭션 처리 시 SDK가 자동으로 처리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 stampTask string  ~ 5242880자 소비 액션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN contextStack string ~ 32768자 요청 컨텍스트 Result 타입 설명 contextStack string 태스크 실행 결과를 반영한 ContextStack statusCode int 상태 코드 result string 응답 내용 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 runVerifyTask 검증 액션을 실행한다(전제 조건 체크) 트랜잭션이 진행되기 전에 전제 조건이 충족되었는지를 체크하는 검증 액션을 1개 실행합니다. 예를 들어, 플레이어가 필요한 아이템을 가지고 있는지, 특정 레벨에 도달했는지 등을 검증합니다. 일반적으로 직접 호출할 필요는 없습니다. 트랜잭션 처리 시 SDK가 자동으로 처리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyTask string  ~ 5242880자 검증 액션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN contextStack string ~ 32768자 요청 컨텍스트 Result 타입 설명 contextStack string 태스크 실행 결과를 반영한 ContextStack statusCode int 상태 코드 result string 응답 내용 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 runVerifyTaskWithoutNamespace 네임스페이스를 지정하지 않고 검증 액션을 실행한다 네임스페이스 지정을 생략한 RunVerifyTask의 경량 버전입니다. 오버헤드는 줄어들지만, 트랜잭션 로그가 GS2-Log에 기록되지 않고 오버플로 처리를 사용할 수 없는 등의 트레이드오프가 있습니다. 일반적으로 직접 호출할 필요는 없습니다. 트랜잭션 처리 시 SDK가 자동으로 처리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 verifyTask string  ~ 5242880자 검증 액션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN contextStack string ~ 32768자 요청 컨텍스트 Result 타입 설명 contextStack string 태스크 실행 결과를 반영한 ContextStack statusCode int 상태 코드 result string 응답 내용 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 setDefaultConfig 트랜잭션의 기본 설정값을 등록한다 트랜잭션 발행 시 사용되는 기본 Config 값을 보유한 컨텍스트를 준비합니다. Config는 트랜잭션의 액션에 삽입할 수 있는 변수로서 기능합니다. 예를 들어, 슬롯 이름이나 수량 지정 등에 사용합니다. 여기서 기본값을 설정해 두면, 트랜잭션을 발행할 때마다 매번 지정할 필요가 없어집니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 gameSession GameSession  GameSession config List  1 ~ 1000 items 트랜잭션의 플레이스홀더에 적용하는 설정값 Result 타입 설명 newContextStack string 기본 Config를 반영하기 위한 ContextStack 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Distributor . Namespace ( namespaceName : null ); var result = await domain . SetDefaultConfigAsync ( accessToken : null , config : new List Gs2 . Unity . Gs2Distributor . Model . EzConfig \u003e { new Gs2 . Unity . Gs2Distributor . Model . EzConfig () { Key = \"key-0001\" , Value = \"value-0001\" , }, new Gs2 . Unity . Gs2Distributor . Model . EzConfig () { Key = \"key-0002\" , Value = \"value-0002\" , }, } ); var domain = gs2 . Distributor . Namespace ( namespaceName : null ); var future = domain . SetDefaultConfigFuture ( accessToken : null , config : new List Gs2 . Unity . Gs2Distributor . Model . EzConfig \u003e { new Gs2 . Unity . Gs2Distributor . Model . EzConfig () { Key = \"key-0001\" , Value = \"value-0001\" , }, new Gs2 . Unity . Gs2Distributor . Model . EzConfig () { Key = \"key-0002\" , Value = \"value-0002\" , }, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( nullptr // namespaceName ); const auto Future = Domain -\u003e SetDefaultConfig ( nullptr , // accessToken [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Distributor :: Model :: FEzConfig \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Distributor :: Model :: FEzConfig \u003e () -\u003e WithKey ( TOptional FString \u003e ( \"key-0001\" )) -\u003e WithValue ( TOptional FString \u003e ( \"value-0001\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Distributor :: Model :: FEzConfig \u003e () -\u003e WithKey ( TOptional FString \u003e ( \"key-0002\" )) -\u003e WithValue ( TOptional FString \u003e ( \"value-0002\" )) ); return v ; }() // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); getStampSheetResult 완료된 트랜잭션의 결과를 취득한다(레거시) 트랜잭션 ID를 지정하여, 과거에 완료된 트랜잭션의 실행 결과를 취득합니다. 결과에는 실행된 각 액션(검증·소비·획득)의 상태와 응답이 포함됩니다. 트랜잭션에서 무슨 일이 일어났는지 확인하기 위해 사용합니다. 예를 들어, 실제로 어떤 보상이 지급되었는지 확인하는 데 유용합니다. 이 API는 레거시(스탬프 시트 방식)의 트랜잭션 결과를 취득합니다. 새로운 트랜잭션 형식의 경우에는 GetTransactionResult를 사용해 주세요. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession transactionId string  36 ~ 36자 트랜잭션 ID 이 트랜잭션을 고유하게 식별하는 UUID입니다. 트랜잭션과 그 실행 결과, 그리고 연쇄되는 후속 트랜잭션의 연결에 사용됩니다. Result 타입 설명 item EzStampSheetResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StampSheetResult ( transactionId : \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ); var item = await domain . ModelAsync (); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StampSheetResult ( transactionId : \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e StampSheetResult ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" // transactionId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . distributor . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamp_sheet_result ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StampSheetResult ( transactionId : \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). StampSheetResult ( transactionId : \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e StampSheetResult ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" // transactionId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Distributor :: Model :: FStampSheetResult \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . distributor . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamp_sheet_result ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getTransactionResult 완료된 트랜잭션의 결과를 취득한다 트랜잭션 ID를 지정하여, 과거에 완료된 트랜잭션의 실행 결과를 취득합니다. 결과에는 실행된 각 액션(검증·소비·획득)의 상태와 응답이 포함됩니다. 트랜잭션에서 무슨 일이 일어났는지 확인하기 위해 사용합니다. 예를 들어, 실제로 어떤 보상이 지급되었는지, 어떤 리소스가 소비되었는지를 확인하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession transactionId string  36 ~ 36자 트랜잭션 ID 이 분산 트랜잭션을 고유하게 식별하는 UUID입니다. 실행 결과 조회 및 원래 API 요청과의 연결에 사용됩니다. Result 타입 설명 item EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TransactionResult ( transactionId : \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ); var item = await domain . ModelAsync (); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TransactionResult ( transactionId : \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e TransactionResult ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" // transactionId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . distributor . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . transaction_result ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TransactionResult ( transactionId : \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Distributor . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). TransactionResult ( transactionId : \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Distributor -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e TransactionResult ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" // transactionId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Distributor :: Model :: FTransactionResult \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . distributor . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . transaction_result ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. 이벤트 핸들러 OnAutoRunStampSheetNotification 트랜잭션의 자동 실행이 완료되었을 때 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID transactionId string 트랜잭션 ID 이 트랜잭션을 고유하게 식별하는 UUID입니다. 트랜잭션과 그 실행 결과, 그리고 연쇄되는 후속 트랜잭션의 연결에 사용됩니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Distributor . OnAutoRunStampSheetNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var transactionId = notification . TransactionId ; }; gs2 . Distributor . OnAutoRunStampSheetNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var transactionId = notification . TransactionId ; }; Gs2 -\u003e Distributor -\u003e OnAutoRunStampSheetNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto TransactionId = Notification -\u003e TransactionIdValue ; }); ez . distributor . auto_run_stamp_sheet_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var transaction_id = notification . transaction_id ) OnAutoRunTransactionNotification 트랜잭션의 자동 실행이 완료되었을 때 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID transactionId string 트랜잭션 ID 이 분산 트랜잭션을 고유하게 식별하는 UUID입니다. 실행 결과 조회 및 원래 API 요청과의 연결에 사용됩니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Distributor . OnAutoRunTransactionNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var transactionId = notification . TransactionId ; }; gs2 . Distributor . OnAutoRunTransactionNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var transactionId = notification . TransactionId ; }; Gs2 -\u003e Distributor -\u003e OnAutoRunTransactionNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto TransactionId = Notification -\u003e TransactionIdValue ; }); ez . distributor . auto_run_transaction_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var transaction_id = notification . transaction_id )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Distributor SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Distributor SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/distributor/game_engine/"},{"content":"모델 EzBalanceParameterStatus 밸런스 파라미터 상태 사용자가 소유한 특정 리소스에 대해 추첨된 파라미터의 실제 값을 나타냅니다. 각 상태는 밸런스 파라미터 모델과 연결되며, 추첨 처리 후 각 파라미터 슬롯에 할당된 구체적인 값을 보유합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. parameterValues List  1 ~ 10 items 밸런스 파라미터 값 리스트 추첨 처리 후 각 파라미터 슬롯에 할당된 구체적인 값입니다. 각 엔트리는 모델에서 정의된 파라미터 슬롯에 대응하며, 할당된 실제 수치를 보유합니다. 모든 값의 합계는 모델에서 지정된 합계 값과 같아집니다. EzRarityParameterStatus 레어리티 파라미터의 상태 유저가 소유한 특정 리소스에 대해 추첨된 파라미터의 실제 값을 나타냅니다. 각 상태는 레어리티 파라미터 모델에 연결되며, 부여된 각 파라미터 슬롯에 대해 가중 추첨으로 선택된 구체적인 값을 보유합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. parameterValues List 0 ~ 10 items 레어리티 파라미터의 값 목록 부여된 각 슬롯에 대해 가중 추첨으로 선택된 구체적인 파라미터 값입니다. 엔트리 수는 부여 수 추첨으로 결정되며, 각 엔트리의 값은 값 모델 풀에서 선택됩니다. 최대 파라미터 수보다 적은 엔트리 수가 될 수 있습니다. EzBalanceParameterModel 밸런스 파라미터 모델 밸런스 파라미터의 추첨 조건을 정의합니다. 밸런스 파라미터는 고정된 합계 값을 여러 파라미터 슬롯에 분배합니다. 예를 들어 합계 파워가 100인 무기에 대해 ATK=60, DEF=30, SPD=10과 같이 배분됩니다. 초기값 설정 방침에 따라 값의 할당 방법이 결정됩니다: average 는 균등하게 분배하고, lottery 는 합계 값을 무작위로 배분합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 밸런스 파라미터 모델 이름 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. totalValue long  0 ~ 9223372036854775805 합계값 모든 파라미터 슬롯에 분배되는 고정된 합계값입니다. 파라미터가 추첨될 때, 사용되는 배분 방식과 관계없이 개별 값의 합계는 항상 이 합계값이 됩니다. initialValueStrategy 문자열 열거형 enum {   “average”,   “lottery” } “average” 초기값 설정 방침 최초 할당 시 합계값을 파라미터 슬롯에 어떻게 분배할지를 결정합니다. average 는 합계값을 모든 파라미터에 균등하게 분배하고, lottery 는 합계값을 무작위로 분배하여 다양한 파라미터 조합을 만듭니다. 정의 설명 average 평균값 lottery 추첨 parameters List  1 ~ 10 items 밸런스 파라미터 값 모델 목록 이 밸런스 파라미터에서 사용 가능한 파라미터 슬롯을 정의합니다. 각 엔트리는 이름이 지정된 파라미터 슬롯(예: ATK, DEF, SPD)을 선택적 메타데이터와 함께 지정합니다. 합계값은 이 슬롯들에 분배됩니다. EzBalanceParameterValueModel 밸런스 파라미터 값 모델 밸런스 파라미터 내에서 사용 가능한 단일 파라미터 슬롯을 정의합니다. 각 엔트리는 추첨 처리 중 합계값의 일부를 받는 이름이 지정된 슬롯(예: ATK, DEF, SPD)을 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 이 파라미터 슬롯의 식별자(예: ATK, DEF, SPD)입니다. 밸런스 파라미터 모델 내에서 고유해야 합니다. 추첨된 파라미터 값을 저장·취득할 때 키로 사용됩니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzRarityParameterModel 레어리티 파라미터 모델 레어리티 파라미터의 추첨 조건을 정의합니다. 레어리티 파라미터는 가중 추첨 시스템을 사용하여 부여되는 파라미터의 수와 할당되는 구체적인 값을 모두 결정합니다. 먼저, 부여 수 모델 목록에서 가중 추첨을 통해 채울 파라미터 슬롯 수가 결정됩니다. 그런 다음, 각 슬롯의 값이 파라미터 값 모델 목록에서 가중 추첨으로 선택되어, 제어된 확률 분포에 따른 무작위 장비 속성을 제공합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 레어리티 파라미터 모델명 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParameterCount int  1 ~ 10 부여할 파라미터의 최대 수 리소스에 부여할 수 있는 파라미터 슬롯 수의 상한입니다. 실제로 부여되는 수는 부여 수 모델 목록에서의 가중 추첨으로 결정되지만, 이 값을 초과하지 않습니다. parameterCounts List  1 ~ 10 items 레어리티 파라미터의 부여 수 모델 목록 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨 엔트리를 정의합니다. 각 엔트리는 부여 수와 추첨 가중치를 지정합니다. 가중치가 클수록 해당 부여 수가 선택될 확률이 높아집니다. parameters List  1 ~ 1000 items 레어리티 파라미터 값 모델 목록 추첨 가능한 파라미터 값의 풀을 정의합니다. 각 엔트리는 파라미터 이름, 리소스 상세 정보, 추첨 가중치를 지정합니다. 파라미터 슬롯을 채울 때, 이 풀에서 중복 없이 가중 추첨으로 값이 선택됩니다. EzRarityParameterCountModel 레어리티 파라미터의 부여 수 모델 리소스에 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨의 단일 엔트리를 정의합니다. 각 엔트리는 파라미터 수와 추첨 가중치를 짝지어, 파라미터 수량의 확률 분포를 세밀하게 제어할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 count int  0 ~ 10 부여 수 이 엔트리가 추첨되었을 때 부여되는 파라미터 슬롯 수입니다. 예를 들어 부여 수가 3인 경우, 리소스는 값 모델 풀에서 선택된 3개의 파라미터 값을 받게 됩니다. weight int  1 ~ 2147483646 추첨 가중치 파라미터 부여 수를 결정하는 가중치 추첨에서 사용되는 상대적인 가중치입니다. 값이 클수록 이 부여 수가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 부여 수 모델 리스트 내 모든 가중치의 합으로 나눈 값입니다. EzRarityParameterValueModel 레어리티 파라미터 값 모델 레어리티 파라미터 값의 가중 추첨 풀 내 단일 엔트리를 정의합니다. 각 엔트리는 파라미터 이름, 게임에서 정의한 리소스 상세 정보, 그리고 풀 내 다른 엔트리에 대한 선택 확률을 결정하는 추첨 가중치를 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 이 추첨 엔트리의 식별자입니다. 레어리티 파라미터 모델의 값 풀 내에서 고유해야 합니다. 추첨되었을 때, 이 이름이 결과 레어리티 파라미터 값에 저장됩니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resourceName string  ~ 64자 게임에서 사용하는 파라미터 리소스 종류를 나타내는 이름(GS2의 동작에는 사용되지 않음) 이 파라미터 값에 연결된 게임에서 정의한 리소스 종류 이름(예: “fire_attack”, “ice_resist”)입니다. GS2는 자체 동작에 이 값을 사용하지 않으며, 추첨 결과에 그대로 전달되어 게임 로직에서 사용됩니다. resourceValue long  0 ~ 9223372036854775805 게임에서 사용하는 파라미터 리소스 값(GS2의 동작에는 사용되지 않음) 이 파라미터의 게임에서 정의한 수치(예: 공격력+50인 경우 50)입니다. GS2는 자체 동작에 이 값을 사용하지 않으며, 추첨 결과에 그대로 전달되어 게임 로직에서 사용됩니다. weight int  1 ~ 2147483646 추첨 가중치 파라미터 값을 선택하는 가중 추첨에서 사용되는 상대적 가중치입니다. 값이 클수록 이 엔트리가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 풀 내 모든 가중치의 합으로 나눈 값이 됩니다. EzBalanceParameterValue 밸런스 파라미터 값 밸런스 파라미터 상태 내의 단일 파라미터 슬롯에 할당된 실제 값을 나타냅니다. 추첨 처리 후의 슬롯 이름과 그 구체적인 수치를 보유합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 파라미터 슬롯의 이름(예: ATK, DEF, SPD)입니다. 밸런스 파라미터 값 모델에서 정의된 파라미터 슬롯에 대응합니다. value long  0 ~ 9223372036854775805 값 이 파라미터 슬롯에 할당된 수치입니다. 밸런스 파라미터가 처음 추첨될 때, 초기값 설정 방침(평균값 또는 추첨)에 따라 결정됩니다. 모든 슬롯 값의 합계는 모델에서 정의된 합계 값과 같아집니다. EzRarityParameterValue 레어리티 파라미터 값 레어리티 파라미터 상태 내의 단일 파라미터 슬롯에 할당된 실제 값을 나타냅니다. 슬롯 이름과, 값 모델 풀에서 가중 추첨으로 선택된 리소스 상세 정보(이름과 값)를 보유합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 값 모델 풀에서 선택된 파라미터 값의 이름입니다. 추첨된 레어리티 파라미터 값 모델 엔트리에서 정의된 이름에 대응합니다. resourceName string  ~ 64자 리소스의 이름 이 파라미터 값에 연결된 게임에서 정의한 리소스 종류 이름(예: “fire_attack”, “ice_resist”)입니다. 게임 로직에서 사용하기 위해 추첨된 레어리티 파라미터 값 모델 엔트리에서 복사됩니다. resourceValue long  0 ~ 9223372036854775805 리소스의 값 이 파라미터에 연결된 리소스의 수치입니다. 추첨된 레어리티 파라미터 값 모델 엔트리에서 복사됩니다. 게임 로직에서 파라미터의 효과(예: 공격력+50)를 적용하는 데 사용됩니다. EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getBalanceParameterModel 이름을 지정하여 밸런스 파라미터 정의를 조회 이름을 지정하여, 밸런스 파라미터 모델을 1건 조회합니다. 조회할 수 있는 정보에는 분배할 합계값, 파라미터 슬롯의 목록(예: ATK, DEF, SPD), 초기값의 결정 방법이 포함됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 밸런스 파라미터 모델 이름 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzBalanceParameterModel 밸런스 파라미터 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). BalanceParameterModel ( parameterName : \"rarity-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). BalanceParameterModel ( parameterName : \"rarity-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BalanceParameterModel ( \"rarity-0001\" // parameterName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . balance_parameter_model ( \"rarity-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). BalanceParameterModel ( parameterName : \"rarity-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). BalanceParameterModel ( parameterName : \"rarity-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BalanceParameterModel ( \"rarity-0001\" // parameterName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Enchant :: Model :: FBalanceParameterModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . balance_parameter_model ( \"rarity-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listBalanceParameterModels 밸런스 파라미터 모델 목록을 조회 이 네임스페이스에 등록된 모든 밸런스 파라미터 모델을 조회합니다. 밸런스 파라미터는 고정된 합계값을 여러 스탯에 분배합니다. 예를 들어 ATK·DEF·SPD 에 합계 100포인트를 나누어, 합계가 항상 100이 되도록 합니다. 사용 가능한 파라미터 타입을 표시하거나, 무기·장비 상세 화면에서 파라미터 모델의 설정을 확인할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 밸런스 파라미터 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . BalanceParameterModelsAsync ( ). ToListAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . BalanceParameterModels ( ); List EzBalanceParameterModel \u003e items = new List EzBalanceParameterModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e BalanceParameterModels ( ); TArray Gs2 :: UE5 :: Enchant :: Model :: FEzBalanceParameterModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBalanceParameterModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBalanceParameterModels ( callbackId ); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBalanceParameterModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBalanceParameterModels ( callbackId ); const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeBalanceParameterModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeBalanceParameterModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getBalanceParameterStatus 특정 아이템의 밸런스 파라미터 값을 취득합니다 플레이어가 소지한 특정 아이템(프로퍼티)에 할당된 현재 밸런스 파라미터 값을 취득합니다. 값은 아이템 생성 시(또는 마지막 재추첨 시)에 무작위로 결정되며, 모든 값의 합계는 항상 모델의 합계값과 같습니다. 아이템 상세 화면에서 개별 스탯 내역(예: ATK: 40, DEF: 35, SPD: 25)을 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. Result 타입 설명 item EzBalanceParameterStatus 밸런스 파라미터 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BalanceParameterStatus ( parameterName : \"balance-0001\" , propertyId : \"property-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BalanceParameterStatus ( parameterName : \"balance-0001\" , propertyId : \"property-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BalanceParameterStatus ( \"balance-0001\" , // parameterName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . balance_parameter_status ( \"balance-0001\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BalanceParameterStatus ( parameterName : \"balance-0001\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BalanceParameterStatus ( parameterName : \"balance-0001\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BalanceParameterStatus ( \"balance-0001\" , // parameterName \"property-0001\" // propertyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Enchant :: Model :: FBalanceParameterStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . balance_parameter_status ( \"balance-0001\" , \"property-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listBalanceParameterStatuses 플레이어의 밸런스 파라미터 값 목록을 취득합니다 플레이어의 아이템에 할당된 현재 밸런스 파라미터 값을 취득합니다. 파라미터 이름으로 필터링하여 특정 파라미터 타입의 값만 취득할 수도 있습니다. 예를 들어, 플레이어가 소지한 각 무기의 ATK/DEF/SPD 배분을 확인할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 밸런스 파라미터 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . BalanceParameterStatusesAsync ( parameterName : \"balance-0001\" ). ToListAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . BalanceParameterStatuses ( parameterName : \"balance-0001\" ); List EzBalanceParameterStatus \u003e items = new List EzBalanceParameterStatus \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e BalanceParameterStatuses ( \"balance-0001\" // parameterName ); TArray Gs2 :: UE5 :: Enchant :: Model :: FEzBalanceParameterStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBalanceParameterStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBalanceParameterStatuses ( callbackId ); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBalanceParameterStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBalanceParameterStatuses ( callbackId ); const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeBalanceParameterStatuses ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeBalanceParameterStatuses ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getRarityParameterModel 이름을 지정하여 레어리티 파라미터 정의를 취득합니다 이름을 지정하여 레어리티 파라미터 모델을 1건 취득합니다. 취득할 수 있는 정보에는 파라미터 슬롯의 최대 수, 슬롯 수의 결정 방법, 레어리티의 가중치(추첨 확률)가 부여된 후보값 목록이 포함됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzRarityParameterModel 레어리티 파라미터 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). RarityParameterModel ( parameterName : \"rarity-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). RarityParameterModel ( parameterName : \"rarity-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RarityParameterModel ( \"rarity-0001\" // parameterName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . rarity_parameter_model ( \"rarity-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). RarityParameterModel ( parameterName : \"rarity-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). RarityParameterModel ( parameterName : \"rarity-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RarityParameterModel ( \"rarity-0001\" // parameterName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Enchant :: Model :: FRarityParameterModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . rarity_parameter_model ( \"rarity-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listRarityParameterModels 레어리티 파라미터 모델 목록을 조회 이 네임스페이스에 등록된 모든 레어리티 파라미터 모델을 조회합니다. 레어리티 파라미터는 레어리티 가중 확률에 기반하여 파라미터 슬롯에 무작위로 값을 할당합니다. 예를 들어 무기에 커먼·레어·레전더리 스킬 슬롯이 붙는 방식입니다. 사용 가능한 파라미터 타입을 표시하거나, 장비 화면에서 레어리티 설정을 확인할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 레어리티 파라미터 모델의 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . RarityParameterModelsAsync ( ). ToListAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . RarityParameterModels ( ); List EzRarityParameterModel \u003e items = new List EzRarityParameterModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e RarityParameterModels ( ); TArray Gs2 :: UE5 :: Enchant :: Model :: FEzRarityParameterModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRarityParameterModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRarityParameterModels ( callbackId ); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRarityParameterModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRarityParameterModels ( callbackId ); const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeRarityParameterModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeRarityParameterModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getRarityParameterStatus 특정 아이템의 레어리티 파라미터 값을 취득합니다 플레이어가 소지한 특정 아이템(프로퍼티)에 할당된 현재 레어리티 파라미터 값을 취득합니다. 값은 아이템 생성 시(또는 마지막 재추첨 시)에 모델에서 정의된 레어리티 가중치를 기반으로 무작위로 추첨된 것입니다. 무기나 장비의 상세 화면에서 부여된 스킬이나 어빌리티를 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. Result 타입 설명 item EzRarityParameterStatus 레어리티 파라미터 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RarityParameterStatus ( parameterName : \"rarity-0001\" , propertyId : \"property-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RarityParameterStatus ( parameterName : \"rarity-0001\" , propertyId : \"property-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RarityParameterStatus ( \"rarity-0001\" , // parameterName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . rarity_parameter_status ( \"rarity-0001\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RarityParameterStatus ( parameterName : \"rarity-0001\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RarityParameterStatus ( parameterName : \"rarity-0001\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RarityParameterStatus ( \"rarity-0001\" , // parameterName \"property-0001\" // propertyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Enchant :: Model :: FRarityParameterStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . rarity_parameter_status ( \"rarity-0001\" , \"property-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listRarityParameterStatuses 플레이어의 레어리티 파라미터 값 목록을 취득합니다 플레이어의 아이템에 할당된 현재 레어리티 파라미터 값을 취득합니다. 파라미터 이름으로 필터링하여 특정 파라미터 타입의 값만 취득할 수도 있습니다. 예를 들어, 플레이어의 각 무기에 어떤 스킬 슬롯(커먼·레어·레전더리)이 붙어 있는지 확인할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 레어리티 파라미터 모델의 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . RarityParameterStatusesAsync ( parameterName : \"rarity-0001\" ). ToListAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . RarityParameterStatuses ( parameterName : \"rarity-0001\" ); List EzRarityParameterStatus \u003e items = new List EzRarityParameterStatus \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e RarityParameterStatuses ( \"rarity-0001\" // parameterName ); TArray Gs2 :: UE5 :: Enchant :: Model :: FEzRarityParameterStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRarityParameterStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRarityParameterStatuses ( callbackId ); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRarityParameterStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRarityParameterStatuses ( callbackId ); const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeRarityParameterStatuses ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeRarityParameterStatuses ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. verifyRarityParameterStatus 특정 아이템의 레어리티 파라미터를 검증합니다 특정 아이템의 레어리티 파라미터가 지정한 조건을 충족하는지 확인합니다. 3가지 체크 타입을 사용할 수 있습니다: have : 아이템이 특정 파라미터 값을 가지고 있음(예: “화염 참격” 스킬을 보유) havent : 아이템이 특정 파라미터 값을 가지고 있지 않음 count : 아이템의 파라미터 슬롯이 지정한 수만큼 채워져 있음 전제 조건으로 사용합니다. 예를 들어, 강화하기 전에 무기가 특정 스킬을 가지고 있을 것을 요구하는 경우 등에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. verifyType 문자열 열거형 enum {   “havent”,   “have”,   “count” }  검증 종류 정의 설명 havent 지정한 파라미터를 보유하고 있지 않을 것 have 지정한 파라미터를 보유하고 있을 것 count 보유하고 있는 파라미터의 수가 지정한 수와 같을 것 parameterValueName string {verifyType} in [“havent”, “have”] ※ ~ 64자 이름 이 추첨 엔트리의 식별자입니다. 레어리티 파라미터 모델의 값 풀 내에서 고유해야 합니다. 추첨되었을 때, 이 이름이 결과 레어리티 파라미터 값에 저장됩니다. ※ verifyType이(가) “havent”,“have\"이면 필수 parameterCount int {verifyType} == “count” ※ 0 ~ 10 검증할 파라미터의 수 Result 타입 설명 item EzRarityParameterStatus 레어리티 파라미터 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RarityParameterStatus ( parameterName : \"rarity-0001\" , propertyId : \"property-0001\" ); var result = await domain . VerifyRarityParameterStatusAsync ( verifyType : \"have\" , parameterValueName : \"parameter-0001\" , parameterCount : 0 ); var item = await result . ModelAsync (); var domain = gs2 . Enchant . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RarityParameterStatus ( parameterName : \"rarity-0001\" , propertyId : \"property-0001\" ); var future = domain . VerifyRarityParameterStatusFuture ( verifyType : \"have\" , parameterValueName : \"parameter-0001\" , parameterCount : 0 ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Enchant -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RarityParameterStatus ( \"rarity-0001\" , // parameterName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e VerifyRarityParameterStatus ( \"have\" , // verifyType \"parameter-0001\" , // parameterValueName 0 // parameterCount ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . enchant . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . rarity_parameter_status ( \"rarity-0001\" , \"property-0001\" ) var async_result = await domain . verify_rarity_parameter_status ( \"have\" , # verify_type \"parameter-0001\" , # parameter_value_name null # parameter_count ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Enchant SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Enchant SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/enchant/game_engine/"},{"content":"모델 EzProgress 강화 진행 상황 강화 시작 시 생성되며, 종료 시 삭제됩니다. 강화 도중에 앱을 종료한 경우에는 이 데이터가 남은 상태가 되며 엔티티가 보유한 진행 중인 강화 정보로부터 게임을 재개할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 36자 강화 진행 상황 ID 강화 진행 상황의 고유 ID를 보유합니다. ID는 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 강화 진행 상황을 식별하는 데 사용됩니다. rateName string  ~ 128자 강화 레이트 모델 이름 이 강화 조작의 파라미터를 정의하는 강화 레이트 모델의 이름입니다. 대상 인벤토리, 소재 인벤토리, 경험치 계층, 보너스 레이트를 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 강화 대상의 프로퍼티 ID 강화되는 GS2-Inventory 아이템의 프로퍼티 ID입니다. 강화 완료 시 경험치를 받는 특정 아이템 인스턴스를 식별합니다. experienceValue long  0 ~ 9223372036854775805 획득할 수 있는 경험치 소비한 소재로부터 산출된 기본 경험치입니다. 이 값은 각 소재의 메타데이터에 정의된 경험치에 소재 수량을 곱한 값의 합계로 결정됩니다. rate float  0 ~ 100.0 경험치 배율 기본 경험치에 적용되는 보너스 배율입니다. 강화 레이트 모델의 보너스 레이트에서 가중치 추첨으로 결정됩니다. 1.0은 보너스 없음을, 1.0보다 큰 값은 “대성공” 보너스를 나타냅니다(예: 1.5로 경험치 150%). EzRateModel 강화 레이트 모델 강화 레이트는 강화에 사용하는 소재와 강화 대상을 정의한 데이터입니다. 소재 데이터와 강화 대상 데이터는 모두 GS2-Inventory에서 관리되고 있어야 합니다. 강화로 얻는 경험치는 GS2-Inventory의 메타데이터에 JSON 형식으로 기록됩니다. 여기서는 메타데이터의 어느 계층에 경험치 값이 저장되어 있는지를 기재해야 합니다. 강화 시 일정 확률로 대성공 과 같은 형태로 입수할 수 있는 경험치량에 보정값을 적용할 수 있습니다. 그 추첨 확률도 이 엔티티에서 정의합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 강화 대상으로 사용할 수 있는 GS2-Inventory 인벤토리 모델의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 강화되는 아이템은 이 인벤토리 모델에 속해 있어야 합니다. acquireExperienceSuffix string  ~ 1024자 GS2-Experience에서 획득한 경험치를 저장하는 프로퍼티 ID에 부여하는 서픽스 아이템의 프로퍼티 ID 끝에 추가되어, 경험치가 저장되는 GS2-Experience의 프로퍼티 ID를 구성하는 문자열입니다. 같은 아이템에 여러 경험치 종류를 부여할 수 있습니다(예: 캐릭터 레벨의 “level”, 호감도의 “like”). materialInventoryModelId string  ~ 1024자 강화 소재로 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 사용할 수 있는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 각 소재가 제공하는 경험치는 acquireExperienceHierarchy로 지정된 JSON 계층을 사용하여 아이템 모델의 메타데이터에 정의됩니다. acquireExperienceHierarchy List 0 ~ 10 items ItemModel의 메타데이터에 저장할, 획득 경험치를 정의하는 JSON 데이터의 계층 구조 정의 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 기능이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 예를 들어, { “aaa”: { “bbb”: { “experienceValue”: 100 } } }와 같은 구조의 데이터 정의로 메타데이터에 설정하고 싶은 경우에는 [ “aaa”, “bbb”, “experienceValue” ]와 같이 지정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. experienceModelId string  ~ 1024자 강화 결과로 얻는 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화로 얻은 경험치가 기록되는 GS2-Experience의 경험치 모델을 지정합니다. 경험치는 대상 아이템의 프로퍼티 ID와 acquireExperienceSuffix를 조합하여 식별되는 프로퍼티에 가산됩니다. EzUnleashRateModel 한계돌파 레이트 모델 아이템의 한계돌파(해방) 조건을 정의합니다. GS2-Inventory에서 관리되는 아이템과 GS2-Grade의 그레이드 모델을 연결하여 그레이드 진행을 가능하게 합니다. 각 그레이드 레벨에서 소비하는 동일 종류 아이템의 수를 개별적으로 설정할 수 있어, 각 한계돌파 단계의 비용을 세밀하게 제어할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 한계돌파 대상에 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 한계돌파 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 한계돌파하는 아이템과 소재로 소비되는 동일 종류 아이템 모두 이 인벤토리 모델에 속해 있어야 합니다. gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 대상 아이템의 한계돌파 레벨을 추적하는 GS2-Grade의 그레이드 모델을 지정합니다. 한계돌파가 성공하면, 이 그레이드 모델 내에서 아이템의 그레이드가 가산됩니다. gradeEntries List  1 ~ 1000 items 그레이드 엔트리 목록 한계돌파의 각 그레이드 레벨에 대한 소재 비용을 정의합니다. 각 엔트리는 그레이드 값과, 해당 그레이드에 도달하기 위해 소비해야 하는 동일 종류 아이템 수를 매핑합니다. 예를 들어, 그레이드 1은 복제품 1개, 그레이드 2는 복제품 3개와 같이 설정할 수 있습니다. EzUnleashRateEntryModel 한계돌파 레이트 엔트리 모델 한계돌파 진행에서 단일 그레이드 레벨의 소재 비용을 정의합니다. 각 엔트리는 대상이 되는 그레이드 값과, 해당 그레이드를 달성하기 위해 소비해야 하는 동일 종류 아이템의 수를 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gradeValue long  1 ~ 1000 대상 그레이드 이 엔트리가 비용을 정의하는 그레이드 값입니다. 이 그레이드 레벨로의 한계돌파를 실행할 때, needCount로 지정된 수의 아이템이 소비됩니다. needCount int  1 ~ 1000 동일 종류의 아이템을 몇 개 소비할지 대상 그레이드로의 한계돌파를 실행하기 위해 소비해야 하는 동일 종류 아이템의 수입니다. 이 아이템들은 한계돌파되는 아이템과 동일한 아이템 모델의 것입니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzMaterial 강화 소재 강화 조작 중에 소비되는 소재 아이템을 나타냅니다. 각 소재는 특정 GS2-Inventory 아이템 세트를 참조하며, 소비할 수량을 지정합니다. 소재가 제공하는 경험치는 아이템 모델의 메타데이터로부터 결정됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 materialItemSetId string  ~ 1024자 강화 소재가 되는 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 소비되는 특정 GS2-Inventory 아이템 세트를 참조합니다. 아이템은 강화 레이트 모델에서 지정된 소재 인벤토리 모델에 속해 있어야 합니다. count int 1 0 ~ 2147483645 소비 수량 이 소재 아이템의 소비 수량입니다. 이 소재로부터 얻는 합계 경험치는, 아이템 1개당 경험치(아이템 모델의 메타데이터에서 취득)에 이 수량을 곱하여 계산됩니다. EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getRateModel 이름을 지정하여 강화 레이트 모델을 취득한다 이름을 지정하여 강화 레이트 모델을 1건 취득합니다. 취득할 수 있는 정보에는 강화 대상 아이템이 속한 인벤토리, 소재가 속한 인벤토리, 소재로부터의 경험치 계산 방법, 보너스 레이트 확률 테이블이 포함됩니다. 특정 강화 레시피의 상세 정보를 표시할 때 사용합니다. 예를 들어 무기 강화 화면에서 필요한 소재나 보너스 레이트 확률을 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item EzRateModel 강화 레이트 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). RateModel ( rateName : \"character-level\" ); var item = await domain . ModelAsync (); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). RateModel ( rateName : \"character-level\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RateModel ( \"character-level\" // rateName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . rate_model ( \"character-level\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). RateModel ( rateName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). RateModel ( rateName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RateModel ( \"character-level\" // rateName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Enhance :: Model :: FRateModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . rate_model ( \"character-level\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listRateModels 강화 레이트 모델 목록을 취득한다 이 네임스페이스에 등록되어 있는 모든 강화 레이트 모델을 취득합니다. 레이트 모델은 강화 레시피를 정의합니다. 어떤 아이템을 소재로 사용할 수 있는지, 각 소재가 얼마의 경험치를 주는지, 보너스 배율 추첨이 있는지 등을 설정합니다. 강화 UI를 구축할 때 사용합니다. 예를 들어 어떤 무기를 강화할 수 있고 어떤 소재를 받는지 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 강화 레이트 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . RateModelsAsync ( ). ToListAsync (); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . RateModels ( ); List EzRateModel \u003e items = new List EzRateModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e RateModels ( ); TArray Gs2 :: UE5 :: Enhance :: Model :: FEzRateModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRateModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRateModels ( callbackId ); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRateModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRateModels ( callbackId ); const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeRateModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeRateModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getUnleashRateModel 이름을 지정하여 한계돌파 레이트 모델을 취득한다 이름을 지정하여 한계돌파(해방) 레이트 모델을 1건 취득합니다. 취득할 수 있는 정보에는 대상 인벤토리, 아이템의 그레이드를 관리하는 그레이드 모델, 각 그레이드 레벨의 소재 요건을 정의하는 그레이드 엔트리 목록이 포함됩니다. 특정 한계돌파 레시피의 상세 정보를 표시할 때 사용합니다. 예를 들어 아이템 상세 화면에서 “그레이드 1→2: 동일 아이템 1개 필요”, “그레이드 2→3: 동일 아이템 2개 필요\"와 같이 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzUnleashRateModel 한계돌파 레이트 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). UnleashRateModel ( rateName : \"character-level\" ); var item = await domain . ModelAsync (); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). UnleashRateModel ( rateName : \"character-level\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e UnleashRateModel ( \"character-level\" // rateName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . unleash_rate_model ( \"character-level\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). UnleashRateModel ( rateName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). UnleashRateModel ( rateName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e UnleashRateModel ( \"character-level\" // rateName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Enhance :: Model :: FUnleashRateModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . unleash_rate_model ( \"character-level\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listUnleashRateModels 한계돌파 레이트 모델 목록을 취득한다 이 네임스페이스에 등록되어 있는 모든 한계돌파(해방) 레이트 모델을 취득합니다. 한계돌파 레이트 모델은 아이템의 그레이드(레벨 상한)를 올리는 방법을 정의합니다. 예를 들어 같은 무기의 복제품을 소비하여 레벨 상한을 올리는 방식입니다. 각 모델은 그레이드별로 필요한 소재를 지정할 수 있어, 아이템이 강해질수록 비용을 높일 수도 있습니다. 한계돌파 UI 구축에 사용합니다. 어떤 아이템을 한계돌파할 수 있고 어떤 소재가 필요한지 플레이어에게 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 한계돌파 레이트 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . UnleashRateModelsAsync ( ). ToListAsync (); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . UnleashRateModels ( ); List EzUnleashRateModel \u003e items = new List EzUnleashRateModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e UnleashRateModels ( ); TArray Gs2 :: UE5 :: Enhance :: Model :: FEzUnleashRateModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeUnleashRateModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeUnleashRateModels ( callbackId ); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeUnleashRateModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeUnleashRateModels ( callbackId ); const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeUnleashRateModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeUnleashRateModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. deleteProgress 진행 중인 강화를 취소한다 플레이어의 진행 중인 강화의 진행 정보를 삭제하여 강화를 취소합니다. Start에서 소비된 소재는 반환되지 않습니다. 보류 중인 경험치 부여만 취소됩니다. 플레이어가 강화를 취소하고 싶은 경우나, 다른 강화를 시작하기 전에 정리하고 싶은 경우에 사용합니다. 또는 Start 호출 시 force 를 true로 설정하면 기존 진행 정보를 자동으로 폐기할 수도 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzProgress 강화의 진행 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var result = await domain . DeleteProgressAsync ( ); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var future = domain . DeleteProgressFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); const auto Future = Domain -\u003e DeleteProgress ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . delete_progress ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result end 강화를 완료한다 (2단계 흐름) Start API로 시작한 강화 처리를 완료합니다. Start 시에 사전 계산된 경험치와 보너스 레이트를 대상 아이템에 반영합니다. 완료 후 진행 정보는 자동으로 삭제됩니다. 결과에는 획득 경험치와 보너스 레이트가 포함되므로, “강화 완료! +1200 EXP\"와 같은 최종 결과 화면을 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzProgress 강화의 진행 정보 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 지급 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 acquireExperience long 획득 경험치량 bonusRate float 경험치 보너스 배율(1.0=보너스 없음) 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var result = await domain . EndAsync ( config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var future = domain . EndFuture ( config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); const auto Future = Domain -\u003e End ( // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . end ( null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getProgress 현재 강화의 진행 정보를 취득한다 플레이어의 진행 중인 강화 진행 정보를 취득합니다. 진행 정보에는 레이트 모델 이름, 대상 아이템, 사용한 소재, 사전 계산된 경험치, 추첨된 보너스 레이트가 포함됩니다. 플레이어가 이탈했다가 돌아왔을 때 강화 확인 화면을 복원하는 데 사용합니다. 예를 들어 “+1200 EXP 획득 예정(대성공 x1.5)“을 다시 표시할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzProgress 실행 중인 강화의 진행 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var item = await domain . ModelAsync (); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Enhance :: Model :: FProgress \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. start 강화를 시작한다 (2단계 흐름) 소재를 소비하여 경험치와 보너스 레이트를 계산하지만, 경험치는 아직 반영하지 않습니다. 계산 결과는 진행 정보로 저장되므로, 플레이어에게 확인 화면을 표시할 수 있습니다. 예를 들어 “+1200 EXP 획득 예정(대성공 x1.5)“과 같은 미리보기를 보여줄 수 있습니다. 플레이어가 확인하면 End를 호출하여 실제로 대상 아이템에 경험치를 반영합니다. 이미 진행 중인 강화가 있는 경우, force 를 true로 설정하면 이를 폐기하고 새로운 강화를 시작할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 이 강화 조작의 파라미터를 정의하는 강화 레이트 모델의 이름입니다. 대상 인벤토리, 소재 인벤토리, 경험치 계층, 보너스 레이트를 지정하는 모델을 참조합니다. targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List 0 ~ 10 items 강화 소재 목록 gameSession GameSession  GameSession force bool false 이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 강화 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var result = await domain . StartAsync ( rateName : \"character-level\" , targetItemSetId : \"item-set-0001\" , materials : new List Gs2 . Unity . Gs2Enhance . Model . EzMaterial \u003e { new Gs2 . Unity . Gs2Enhance . Model . EzMaterial () { MaterialItemSetId = \"material-0001\" , Count = 1 , }, }, force : null , config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var future = domain . StartFuture ( rateName : \"character-level\" , targetItemSetId : \"item-set-0001\" , materials : new List Gs2 . Unity . Gs2Enhance . Model . EzMaterial \u003e { new Gs2 . Unity . Gs2Enhance . Model . EzMaterial () { MaterialItemSetId = \"material-0001\" , Count = 1 , }, }, force : null , config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); const auto Future = Domain -\u003e Start ( \"character-level\" , // rateName \"item-set-0001\" , // targetItemSetId [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Enhance :: Model :: FEzMaterial \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Enhance :: Model :: FEzMaterial \u003e () -\u003e WithMaterialItemSetId ( TOptional FString \u003e ( \"material-0001\" )) -\u003e WithCount ( TOptional int32 \u003e ( 1 )) ); return v ; }() // materials // force // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . start ( \"character-level\" , # rate_name \"item-set-0001\" , # target_item_set_id [ Gs2EnhanceEzMaterial . new () . with_material_item_set_id ( \"material-0001\" ) . with_count ( 1 ), ], # materials null , # force null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result enhance 아이템을 강화한다 지정한 소재를 소비하여 대상 아이템에 경험치를 부여합니다(1단계로 완료). 획득 경험치는 강화 레이트 모델을 기반으로 계산되며, 보너스 레이트 확률 테이블에서 배율이 추첨되는 경우가 있습니다. 예를 들어 “대성공\"으로 경험치가 1.5배가 되는 방식입니다. 결과에는 획득한 경험치량과 적용된 보너스 레이트가 포함되므로, “무기가 레벨업! +1200 EXP(대성공 x1.5)“와 같은 결과 화면을 표시할 수 있습니다. 이는 가장 간단한 강화 방법입니다. 플레이어에게 결과를 보여준 후 확정하고 싶은 경우에는 Start/End 흐름을 사용해 주세요. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List  1 ~ 10 items 강화 소재 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzRateModel 강화 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 강화 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 acquireExperience long 획득 경험치량 bonusRate float 경험치 보너스 배율(1.0=보너스 없음) 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Enhance ( ); var result = await domain . EnhanceAsync ( rateName : \"rate-0001\" , targetItemSetId : \"item-set-0001\" , materials : new List Gs2 . Unity . Gs2Enhance . Model . EzMaterial \u003e { new Gs2 . Unity . Gs2Enhance . Model . EzMaterial () { MaterialItemSetId = \"material-0001\" , Count = 1 , }, }, config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Enhance . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Enhance ( ); var future = domain . EnhanceFuture ( rateName : \"rate-0001\" , targetItemSetId : \"item-set-0001\" , materials : new List Gs2 . Unity . Gs2Enhance . Model . EzMaterial \u003e { new Gs2 . Unity . Gs2Enhance . Model . EzMaterial () { MaterialItemSetId = \"material-0001\" , Count = 1 , }, }, config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Enhance -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Enhance ( ); const auto Future = Domain -\u003e Enhance ( \"rate-0001\" , // rateName \"item-set-0001\" , // targetItemSetId [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Enhance :: Model :: FEzMaterial \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Enhance :: Model :: FEzMaterial \u003e () -\u003e WithMaterialItemSetId ( TOptional FString \u003e ( \"material-0001\" )) -\u003e WithCount ( TOptional int32 \u003e ( 1 )) ); return v ; }() // materials // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . enhance . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . enhance ( ) var async_result = await domain . enhance ( \"rate-0001\" , # rate_name \"item-set-0001\" , # target_item_set_id [ Gs2EnhanceEzMaterial . new () . with_material_item_set_id ( \"material-0001\" ) . with_count ( 1 ), ], # materials null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Enhance SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Enhance SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/enhance/game_engine/"},{"content":"모델 EzAwait 교환 대기 보상을 받기 전에 실시간의 경과가 필요한 교환의 실행 상태를 나타냅니다. 플레이어가 await 타이밍 타입의 교환을 시작했을 때 생성되며, 보상을 사용할 수 있게 될 때까지의 대기 기간을 추적합니다. 대기 시간을 단축하거나 없애는 스킵 기능을 지원하며, 보상 취득 시의 기본 설정값을 저장합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. skipSeconds int 0 0 ~ 2147483646 스킵 초수 대기 시간에서 차감하는 초수입니다. 스킵 초수가 적용되면 acquirableAt 타임스탬프가 이만큼 앞당겨집니다. 플레이어가 리소스를 지불하여 대기 시간을 단축하는 구조를 구현하기 위해 사용됩니다. config List [] 0 ~ 32 items 보상 취득 시 적용하는 기본 설정값 대기 완료 시 보상이 배포될 때 트랜잭션의 플레이스홀더 변수로 사용되는 키와 값의 쌍입니다. 이 값들은 교환 시작 시 설정되며, 획득 액션의 트랜잭션 파라미터에 적용됩니다. exchangedAt long 교환 시간 교환이 시작되어 대기가 생성된 타임스탬프입니다. 보상이 사용 가능해지는 시각을 계산하기 위한 기준 시각으로 사용됩니다(acquirableAt = exchangedAt + lockTime - skipSeconds). acquirableAt long 보상을 받을 수 있게 되는 시간 대기 기간이 만료되어 보상을 받을 수 있게 되는 타임스탬프입니다. exchangedAt + lockTime - skipSeconds로 계산됩니다. 현재 시각이 이 타임스탬프를 지나면 플레이어는 취득 API를 호출할 수 있게 됩니다. EzRateModel 교환 레이트 모델 교환 레이트 모델은 리소스와 리소스를 교환할 때 사용하는 레이트를 정의하는 엔티티입니다. 즉시 교환할 수 있는 레이트뿐만 아니라, 현실 시간으로 일정 시간이 경과한 후에 교환할 수 있는 레이트도 설정할 수 있습니다. 현실 시간의 경과가 필요한 교환 레이트에는 즉시 교환을 실행하는 데 필요한 리소스를 추가로 정의할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. timingType 문자열 열거형 enum {   “immediate”,   “await” } “immediate” 교환 종류 교환 실행 후 보상이 언제 전달되는지를 결정합니다. immediate 는 교환 실행 시 즉시 보상을 전달합니다. await 는 보상을 받기 전에 실시간의 경과가 필요하며, 대기 기간(예: 제작 시간)을 둡니다. 정의 설명 immediate 즉시 await 현실 시간의 경과 대기 lockTime int {timingType} == “await” ※ 0 ~ 538214400 교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분) timingType이 await 인 경우에만 적용됩니다. 교환이 시작된 후 플레이어가 보상을 받을 수 있게 되기까지 경과해야 하는 실시간 분수를 지정합니다. 대기 시간은 스킵 기능을 사용하여 단축할 수 있습니다. ※ timingType이(가) “await” 이면 필수 verifyActions List [] 0 ~ 10 items 검증 액션 리스트 교환이 실행되기 전에 모두 통과해야 하는 사전 조건 체크입니다. 검증 액션 중 하나라도 실패하면, 리소스를 소비하지 않고 교환이 중단됩니다. 레벨 요건이나 인벤토리 용량 등의 조건을 강제하기 위해 사용됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 교환을 실행하기 위해 플레이어가 지불해야 하는 리소스(코스트)를 정의합니다. 여러 개의 소비 액션을 지정할 수 있어, 골드와 아이템을 모두 필요로 하는 것과 같은 복잡한 교환 코스트를 구현할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 소비 액션으로 실행됩니다. acquireActions List [] 0 ~ 100 items 획득 액션 리스트 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 여러 개의 획득 액션을 지정하여 다양한 리소스 타입을 동시에 지급할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 획득 액션으로 실행됩니다. EzIncrementalRateModel 코스트 상승형 교환 레이트 모델 일반적인 교환 레이트는 항상 일정한 레이트로 교환을 제공합니다. 상승형 교환 레이트에서는 교환 횟수에 따라 코스트가 상승하는 레이트를 정의할 수 있습니다. 예를 들어, 첫 번째 교환에서는 1:1로 교환할 수 있지만, 두 번째 교환에서는 2:1로 교환하게 되는 것과 같은 레이트를 정의할 수 있습니다. 이러한 레이트를 정의함으로써 플레이어가 게임을 진행함에 따라 얻을 수 있는 리소스의 가치를 높일 수 있습니다. 교환 횟수는 현실 시간의 경과에 따라 리셋할 수 있습니다. 이 기능을 이용하면 매일 또는 매주 교환에 필요한 코스트를 리셋할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. calculateType 문자열 열거형 enum {   “linear”,   “power”,   “gs2_script” }  코스트 상승량 계산 방식 교환 횟수에 따라 코스트가 어떻게 상승하는지를 결정합니다. linear 는 코스트를 baseValue +（coefficientValue × 교환 횟수）로 계산합니다. power 는 코스트를 coefficientValue ×（교환 횟수 + 1）^2로 계산합니다. gs2_script 는 임의의 로직을 위해 커스텀 GS2-Script에 계산을 위임합니다. 정의 설명 linear 베이스 값 + (계수 * 교환 횟수) power 계수 * (교환 횟수 + 1) ^ 2 gs2_script GS2-Script에 의한 임의의 로직 consumeAction EzConsumeAction  소비 액션 (수량/값은 자동으로 덮어써집니다) 교환 비용으로 소비되는 리소스의 종류를 정의합니다. 실제 수량은 교환 횟수와 계산 방식(선형, 거듭제곱, 스크립트)에 기반하여 동적으로 계산됩니다. 액션 종류와 대상 리소스만 지정하면 되며, 수량 필드는 자동으로 덮어써집니다. baseValue long {calculateType} == “linear” ※ 0 ~ 9223372036854775805 베이스 값 linear 계산 방식을 사용하는 경우 첫 교환 시의 기본 코스트입니다. 합계 코스트는 baseValue +（coefficientValue × 교환 횟수）로 계산됩니다. ※ calculateType이(가) “linear” 이면 필수 coefficientValue long {calculateType} in [“linear”, “power”] ※ 0 ~ 9223372036854775805 계수 교환 횟수에 따라 코스트가 얼마나 빠르게 상승하는지를 제어하는 승수입니다. linear 모드에서는 각 교환마다 이 값이 코스트에 더해집니다. power 모드에서는 코스트가 coefficientValue ×（교환 횟수 + 1）^2로 계산됩니다. ※ calculateType이(가) “linear”,“power\"이면 필수 exchangeCountId string  ~ 1024자 교환 실행 횟수를 관리하는 GS2-Limit의 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 각 사용자가 이 코스트 상승형 교환을 몇 번 실행했는지 추적하는 GS2-Limit의 횟수 제한 모델을 참조합니다. 카운트는 상승하는 코스트 계산에 사용되며, GS2-Limit의 리셋 타이밍을 사용하여 정기적으로(예: 매일 또는 매주) 리셋할 수 있습니다. maximumExchangeCount int 2147483646 0 ~ 2147483646 교환 횟수 상한 사용자가 이 코스트 상승형 교환을 실행할 수 있는 최대 횟수입니다. 교환 횟수가 이 상한에 도달하면, GS2-Limit에 의한 카운트 리셋까지 이후의 교환이 거부됩니다. acquireActions List [] 0 ~ 100 items 획득 액션 리스트 코스트 상승형 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 보상은 교환 횟수와 관계없이 일정하며, 코스트만 교환마다 증가합니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 acquire 완료된 시간제 교환의 보상 수령 필요한 대기 시간이 경과한 시간제 교환의 보상을 수령합니다. 대기 시간이 아직 경과하지 않은 경우, 이 호출은 실패합니다. 사전에 GetAwait로 남은 시간을 확인하세요. 수령하면 대기 레코드는 소비되고, 플레이어는 레이트 모델에서 정의된 보상을 받습니다. 예를 들어 “철검” 제작으로 3시간을 기다린 후 이를 호출하면 플레이어에게 검이 지급됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. Result 타입 설명 item EzAwait 교환 대기 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 획득 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( awaitName : \"await-0001\" ); var result = await domain . AcquireAsync ( ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( awaitName : \"await-0001\" ); var future = domain . AcquireFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Await ( \"await-0001\" // awaitName ); const auto Future = Domain -\u003e Acquire ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . await_ ( \"await-0001\" ) var async_result = await domain . acquire ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result deleteAwait 대기 중인 시간제 교환 취소 대기 중인 교환 대기 레코드를 삭제하여 교환을 취소합니다. 보상은 지급되지 않으며, 교환 시작 시 지불한 리소스도 반환되지 않습니다. 플레이어가 제작 중이거나 건설 중인 주문을 취소하고 싶을 때 사용합니다. 비용이 돌아오지 않으므로 확인 대화상자를 표시하는 것을 권장합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. Result 타입 설명 item EzAwait 교환 대기 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( awaitName : \"await-0001\" ); var result = await domain . DeleteAwaitAsync ( ); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( awaitName : \"await-0001\" ); var future = domain . DeleteAwaitFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Await ( \"await-0001\" // awaitName ); const auto Future = Domain -\u003e DeleteAwait ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . await_ ( \"await-0001\" ) var async_result = await domain . delete_await ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getAwait 특정 대기 중인 시간제 교환 조회 특정 교환 대기 레코드의 상세 정보를 조회합니다. 조회할 수 있는 정보에는 교환 타입, 요청한 수량, 시작 일시, 남은 대기 시간이 포함됩니다. 특정 대기 중인 교환의 상세 화면을 표시할 때 사용합니다. 예를 들어 “철검 제작 중… 남은 시간 2시간 30분\"과 같은 표시에 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. Result 타입 설명 item EzAwait 교환 대기 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( awaitName : \"await-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( awaitName : \"await-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Await ( \"await-0001\" // awaitName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . await_ ( \"await-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( awaitName : \"await-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Await ( awaitName : \"await-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Await ( \"await-0001\" // awaitName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Exchange :: Model :: FAwait \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . await_ ( \"await-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listAwaits 대기 중인 시간제 교환 목록 조회 플레이어의 교환 대기 레코드를 조회합니다. 보상을 받기 전에 대기가 필요한 교환(제작이나 건설과 같은 구조)의 목록입니다. 레이트 이름을 지정하여 특정 교환 타입의 대기만 표시할 수도 있습니다. “제작 중인 아이템\"이나 “진행 중” 목록을 구성하는 데 사용합니다. 플레이어가 무엇을 기다리고 있고 앞으로 얼마나 걸리는지를 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 Result 타입 설명 items List 교환 대기 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . AwaitsAsync ( rateName : \"material_n_to_r\" ). ToListAsync (); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Awaits ( rateName : \"material_n_to_r\" ); List EzAwait \u003e items = new List EzAwait \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Awaits ( \"material_n_to_r\" // rateName ); TArray Gs2 :: UE5 :: Exchange :: Model :: FEzAwaitPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeAwaits ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeAwaits ( callbackId ); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeAwaits ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeAwaits ( callbackId ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeAwaits ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeAwaits ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getRateModel 이름을 지정하여 교환 레이트 모델 조회 이름을 지정하여 교환 레이트 모델을 1건 조회합니다. 조회할 수 있는 정보에는 플레이어가 지불하는 것, 받는 것, 즉시 교환인지 대기가 필요한지가 포함됩니다. 특정 교환의 상세 정보를 표시할 때 사용합니다. 예를 들어 상점의 아이템 상세 화면에서 “비용: 골드 100 → 보상: 회복 포션 1개\"와 같이 표시하는 데 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzRateModel 교환 레이트 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). RateModel ( rateName : \"character-level\" ); var item = await domain . ModelAsync (); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). RateModel ( rateName : \"character-level\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RateModel ( \"character-level\" // rateName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . rate_model ( \"character-level\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). RateModel ( rateName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). RateModel ( rateName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RateModel ( \"character-level\" // rateName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Exchange :: Model :: FRateModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . rate_model ( \"character-level\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listRateModels 교환 레이트 모델 목록 조회 이 네임스페이스에 등록되어 있는 모든 교환 레이트 모델을 조회합니다. 레이트 모델은 교환 레시피를 정의합니다. 플레이어가 무엇을 지불하고(예: 골드 100개), 무엇을 받을지(예: 회복 포션 1개)를 설정합니다. 타이밍에는 두 가지 종류가 있습니다. “즉시” 교환은 곧바로 완료되고, “대기” 교환은 플레이어가 일정 시간을 기다린 후 보상을 받습니다(제작과 같은 구조). 상점이나 제작 UI를 구성할 때, 플레이어에게 이용 가능한 교환 옵션을 표시하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 교환 레이트 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . RateModelsAsync ( ). ToListAsync (); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . RateModels ( ); List EzRateModel \u003e items = new List EzRateModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e RateModels ( ); TArray Gs2 :: UE5 :: Exchange :: Model :: FEzRateModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRateModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRateModels ( callbackId ); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRateModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRateModels ( callbackId ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeRateModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeRateModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getIncrementalRateModel 이름을 지정하여 코스트 상승형 교환 레이트 모델 조회 이름을 지정하여 코스트 상승형 교환 레이트 모델을 1건 조회합니다. 조회할 수 있는 정보에는 코스트 계산 방법(선형 계산식 또는 커스텀 스크립트), 기본 코스트, 교환마다의 코스트 증가량, 최대 교환 횟수, 플레이어가 받는 것이 포함됩니다. 특정 코스트 상승형 교환의 상세 정보를 표시할 때 사용합니다. 예를 들어 상점 화면에서 “스태미나 회복: 젬 30개(오늘 3회차, 최대 5회)“와 같이 표시하는 데 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzIncrementalRateModel 코스트 상승형 교환 레이트 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). IncrementalRateModel ( rateName : \"character-level\" ); var item = await domain . ModelAsync (); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). IncrementalRateModel ( rateName : \"character-level\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e IncrementalRateModel ( \"character-level\" // rateName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . incremental_rate_model ( \"character-level\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). IncrementalRateModel ( rateName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). IncrementalRateModel ( rateName : \"character-level\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e IncrementalRateModel ( \"character-level\" // rateName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Exchange :: Model :: FIncrementalRateModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . incremental_rate_model ( \"character-level\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listIncrementalRateModels 코스트 상승형 교환 레이트 모델 목록 조회 이 네임스페이스에 등록되어 있는 모든 코스트 상승형 교환 레이트 모델을 조회합니다. 코스트 상승형 모델은 플레이어가 사용할 때마다 가격이 오르는 교환을 정의합니다. 예를 들어 스태미나 회복 1회차는 젬 10개, 2회차는 20개, 3회차는 30개…와 같은 구조입니다. 코스트 상승은 단순한 선형 계산식(기본값 + 계수 × 횟수) 또는 커스텀 스크립트로 계산할 수 있습니다. 이용 가능한 코스트 상승형 교환과 현재 코스트를 표시하는 UI를 구성하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 코스트 상승형 교환 레이트 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . IncrementalRateModelsAsync ( ). ToListAsync (); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . IncrementalRateModels ( ); List EzIncrementalRateModel \u003e items = new List EzIncrementalRateModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e IncrementalRateModels ( ); TArray Gs2 :: UE5 :: Exchange :: Model :: FEzIncrementalRateModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeIncrementalRateModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeIncrementalRateModels ( callbackId ); var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeIncrementalRateModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeIncrementalRateModels ( callbackId ); const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeIncrementalRateModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeIncrementalRateModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. exchange 교환 실행 지정한 교환 레이트 모델을 기반으로 리소스를 교환합니다. 플레이어는 레이트 모델에서 정의된 비용을 지불하고 보상을 받습니다. 예를 들어 골드 100개를 회복 포션 1개와 교환하는 처리입니다. 횟수를 지정하여 같은 교환을 한 번에 여러 번 실행할 수도 있습니다(예: 포션 5개를 골드 500개로 구매). 레이트 모델이 “대기” 타이밍인 경우, 즉시 완료되지 않고 시간 대기형 교환이 시작됩니다(보상 수령은 Await 계열 API를 참조하세요). Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession count int  1 ~ 1073741821 교환 횟수 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzRateModel 교환 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Exchange ( ); var result = await domain . ExchangeAsync ( rateName : \"rate-0001\" , count : 1 , config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Exchange ( ); var future = domain . ExchangeFuture ( rateName : \"rate-0001\" , count : 1 , config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Exchange ( ); const auto Future = Domain -\u003e Exchange ( \"rate-0001\" , // rateName 1 // count // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . exchange ( ) var async_result = await domain . exchange ( \"rate-0001\" , # rate_name 1 , # count null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result incrementalExchange 코스트 상승형 교환 실행 사용할 때마다 코스트가 오르는 레이트 모델을 사용하여 리소스를 교환합니다. 코스트는 플레이어가 지금까지 몇 번 교환했는지를 기반으로 자동 계산됩니다. 예를 들어 스태미나 회복 1회차는 젬 10개, 2회차는 20개…와 같이 올라갑니다. 횟수를 지정하여 한 번에 교환할 수도 있습니다. 이 경우 합계 비용은 각 회차 가격의 합계가 됩니다. 매일의 스태미나 회복, 횟수 한정 상점 등 반복 이용에 따라 가격을 올리고 싶은 구조에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession count int  1 ~ 1073741821 교환 횟수 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzIncrementalRateModel 코스트 상승형 교환 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Exchange ( ); var result = await domain . IncrementalExchangeAsync ( rateName : \"rate-0001\" , count : 1 , config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Exchange . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Exchange ( ); var future = domain . IncrementalExchangeFuture ( rateName : \"rate-0001\" , count : 1 , config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Exchange -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Exchange ( ); const auto Future = Domain -\u003e IncrementalExchange ( \"rate-0001\" , // rateName 1 // count // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . exchange . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . exchange ( ) var async_result = await domain . incremental_exchange ( \"rate-0001\" , # rate_name 1 , # count null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Exchange SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Exchange SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/exchange/game_engine/"},{"content":"모델 EzStatus 스테이터스 스테이터스란 프로퍼티ID마다 존재하는 엔티티로, 현재의 경험치와 랭크 캡 값을 보유합니다. 프로퍼티ID란 스테이터스 고유의 ID로, 개발자가 임의의 값을 설정할 수 있습니다. GS2에서는 경험치를 보유한 GS2-Inventory의 아이템 세트GRN이나 GS2-Dictionary의 엔트리GRN 뒤에 경험치 모델이 되는 접미사를 추가한 값을 프로퍼티ID로 사용할 것을 권장합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 누적 획득 경험치 이 스테이터스가 축적한 총 경험치입니다. 현재 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 산출됩니다. 현재 랭크 캡에 대응하는 임계값을 초과하여 경험치를 획득할 수 없습니다. rankValue long 0 0 ~ 9223372036854775805 현재 랭크 랭크업 임계값 테이블을 사용하여 누적 경험치로부터 산출되는 랭크(레벨)입니다. 0부터 시작하며 경험치 임계값을 초과할 때마다 증가합니다. 현재 랭크 캡 값을 초과할 수 없습니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. nextRankUpExperienceValue long 0 0 ~ 9223372036854775805 다음 랭크업에 필요한 경험치량 다음 랭크에 도달하기 위해 필요한 누적 경험치의 임계값입니다. 스테이터스가 이미 랭크 캡에 도달한 경우 0을 반환합니다. 게임 UI에서 프로그레스 바나 남은 경험치를 표시하는 데 유용합니다. EzExperienceModel 경험치 모델 경험치와 랭크 시스템의 규칙을 정의합니다. 랭크업에 필요한 경험치의 임계값, 기본 랭크 캡, 최대 랭크 캡을 설정합니다. 랭크 캡은 스테이터스가 도달할 수 있는 최대 랭크를 제한하며, 스테이터스별로 최대 랭크 캡까지 인상할 수 있습니다(예: 한계돌파). 옵션으로 현재 랭크에 따라 보상 배율을 조정하는 입수 액션 레이트 테이블을 포함할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultExperience long 0 0 ~ 9223372036854775805 경험치 초기값 신규 생성된 스테이터스에 할당되는 경험치입니다. 일반적으로 플레이어가 진행의 처음부터 시작하도록 0으로 설정됩니다. 초기 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 결정됩니다. defaultRankCap long  0 ~ 9223372036854775805 랭크 캡 초기값 신규 생성된 스테이터스가 도달할 수 있는 기본 최대 랭크입니다. 이 랭크의 임계값을 초과한 경험치는 폐기되거나 오버플로 스크립트가 트리거됩니다. 랭크 캡은 한계돌파 등의 조작을 통해 스테이터스별로 maxRankCap까지 인상할 수 있습니다. maxRankCap long  0 ~ 9223372036854775805 랭크 캡의 최댓값 랭크 캡의 절대적인 상한입니다. 랭크 캡 증가 조작(한계돌파 등)을 수행하더라도 랭크 캡은 이 값을 초과할 수 없습니다. defaultRankCap 이상의 값이어야 합니다. rankThreshold EzThreshold  랭크업 임계값 각 랭크에 필요한 누적 경험치를 정의하는 임계값 테이블을 참조합니다. 임계값의 엔트리 수가 도달 가능한 최대 랭크를 결정하며, 각 엔트리의 값은 다음 랭크에 도달하는 데 필요한 경험치를 지정합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 목록 스테이터스의 랭크를 참조로 사용할 때 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 각 테이블은 랭크와 배율을 매핑하여, 동일한 액션에서도 더 높은 랭크의 캐릭터가 더 많은 보상을 받는 구조를 구현할 수 있습니다. EzThreshold 랭크업 임계값 랭크업 임계값은 경험치로부터 랭크(레벨)를 결정하는 데 필요한 수열입니다. [10, 20]이라는 값을 설정한 경우, 경험치 값이 0 9 사이면 랭크1, 10 19 사이면 랭크2, 경험치 값이 20이면 랭크3이 되며, 그 이상 경험치를 획득할 수 없게 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. values List  1 ~ 10000 items 랭크업 경험치 임계값 목록 랭크 진행을 정의하는 누적 경험치의 순서가 있는 배열입니다. 항목 수가 도달 가능한 최대 랭크를 결정합니다. 예를 들어 [10, 20]인 경우, 경험치 0 9에서 랭크1, 10 19에서 랭크2, 20 이상에서 랭크3(그 이상의 경험치 획득은 불가)이 됩니다. EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzAcquireActionRate 보상 가산 테이블 상태의 현재 랭크에 따라 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 테이블의 각 항목은 랭크에 대응하며, 입수량에 적용되는 배율을 지정합니다. 표준적인 배정밀도 부동소수점 값과, 대규모 계산용 대수 문자열 표현을 모두 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보상 가산 테이블 이름 이 보상 가산 테이블의 고유 식별자입니다. 특정 입수 액션에 적용할 배율 테이블을 지정할 때 참조됩니다. mode 문자열 열거형 enum {   “double”,   “big” } “double” 보상 가산 테이블의 종류 배율 값의 수치 정밀도를 선택합니다. 표준적인 부동소수점 수(2^48까지)에는 “double\"을, 대규모 계산이 필요한 경우에는 1024자리까지의 문자열 표현을 지원하는 “big\"을 사용합니다. 정의 설명 double 2^48 미만의 부동소수점 수 big 문자열 표기로 1024자리 미만의 부동소수점 수 rates List {mode} == “double” ※ 1 ~ 10000 items 랭크별 가산량(배율) 랭크를 인덱스로 하는 배율 값의 배열입니다. i번째 엔트리는 스테이터스가 랭크 i일 때 적용되는 보상 배율을 정의합니다. mode가 “double\"로 설정된 경우에 사용됩니다. ※ mode이(가) “double” 이면 필수 bigRates List {mode} == “big” ※ 1 ~ 10000 items 랭크별 가산량(배율) 랭크를 인덱스로 하는 문자열 표현 배율 값의 배열입니다. i번째 엔트리는 스테이터스가 랭크 i일 때 적용되는 보상 배율을 정의합니다. 대수치 정밀도가 필요한 계산에서 mode가 “big\"으로 설정된 경우에 사용됩니다. ※ mode이(가) “big” 이면 필수 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getExperienceModel 이름을 지정하여 경험치 모델을 조회하기 이름을 지정하여 경험치 모델을 1건 조회합니다. 조회할 수 있는 정보에는 각 레벨에 필요한 경험치(랭크업 임계값), 기본 최대 레벨, 절대 최대 레벨이 포함됩니다. 레벨 진행도를 계산·표시할 때 사용합니다. 예를 들어, 플레이어의 무기가 다음 레벨에 도달하는 데 앞으로 얼마나 경험치가 필요한지, 한계 돌파 후 최대 레벨은 몇인지를 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzExperienceModel 경험치 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). ExperienceModel ( experienceName : \"experience-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). ExperienceModel ( experienceName : \"experience-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ExperienceModel ( \"experience-0001\" // experienceName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . experience . namespace_ ( \"namespace-0001\" ) . experience_model ( \"experience-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). ExperienceModel ( experienceName : \"experience-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). ExperienceModel ( experienceName : \"experience-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ExperienceModel ( \"experience-0001\" // experienceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Experience :: Model :: FExperienceModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . experience . namespace_ ( \"namespace-0001\" ) . experience_model ( \"experience-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listExperienceModels 경험치 모델 목록 조회하기 이 네임스페이스에 등록된 모든 경험치 모델을 조회합니다. 경험치 모델은 레벨업 시스템을 정의합니다. 각 레벨에 필요한 경험치, 기본 최대 레벨, 절대 최대 레벨 등을 설정합니다. 레벨업 관련 UI를 구성할 때 사용합니다. 예를 들어 “다음 레벨까지: 150/500 EXP” 표시나, 캐릭터 상세 화면에서 레벨업 임계값을 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 경험치 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . ExperienceModelsAsync ( ). ToListAsync (); var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . ExperienceModels ( ); List EzExperienceModel \u003e items = new List EzExperienceModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e ExperienceModels ( ); TArray Gs2 :: UE5 :: Experience :: Model :: FEzExperienceModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeExperienceModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeExperienceModels ( callbackId ); var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeExperienceModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeExperienceModels ( callbackId ); const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeExperienceModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeExperienceModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getStatus 특정 아이템이나 캐릭터의 레벨·경험치 상태를 조회하기 플레이어가 보유한 특정 프로퍼티의 현재 레벨, 경험치, 최대 레벨을 조회합니다. 프로퍼티는 경험치 모델 이름(어떤 레벨업 시스템을 사용하는지)과 프로퍼티 ID(어떤 아이템이나 캐릭터인지)로 식별합니다. 상세 화면을 표시할 때 사용합니다. 예를 들어 “철검 Lv.15 — EXP: 3200/5000 — 최대 Lv: 50\"과 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. Result 타입 설명 item EzStatus 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( experienceName : \"character_ssr\" , propertyId : \"property-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( experienceName : \"character_ssr\" , propertyId : \"property-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"character_ssr\" , // experienceName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . experience . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"character_ssr\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( experienceName : \"character_ssr\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( experienceName : \"character_ssr\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"character_ssr\" , // experienceName \"property-0001\" // propertyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Experience :: Model :: FStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . experience . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"character_ssr\" , \"property-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getStatusWithSignature 위변조 방지 서명과 함께 레벨·경험치 상태를 조회하기 getStatus와 동일한 레벨·경험치 정보를 조회하지만, 데이터가 변조되지 않았음을 증명하는 암호 서명도 함께 반환합니다. 플레이어의 레벨을 신뢰할 수 있는 방식으로 검증해야 하는 경우에 유용합니다. 예를 들어, 다른 서비스에서 레벨을 조건으로 사용하는 경우나, 외부 시스템에 레벨 데이터를 전달하여 진위를 확인해야 하는 경우에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzStatus 상태 body string 검증 대상 오브젝트 signature string 서명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( experienceName : \"character_ssr\" , propertyId : \"property-0001\" ); var result = await domain . GetStatusWithSignatureAsync ( keyId : \"key-0001\" ); var item = await result . ModelAsync (); var body = result . Body ; var signature = result . Signature ; var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( experienceName : \"character_ssr\" , propertyId : \"property-0001\" ); var future = domain . GetStatusWithSignatureFuture ( keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var body = future . Result . Body ; var signature = future . Result . Signature ; const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"character_ssr\" , // experienceName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e GetStatusWithSignature ( \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . experience . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"character_ssr\" , \"property-0001\" ) var async_result = await domain . get_status_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listStatuses 플레이어의 레벨·경험치 상태 목록을 조회하기 플레이어가 보유한 아이템이나 캐릭터의 현재 레벨과 경험치 정보를 조회합니다. 경험치 모델 이름으로 필터링할 수도 있습니다. 생략하면 모든 경험치 타입의 상태가 반환됩니다. 각 상태에는 특정 프로퍼티(무기나 캐릭터 등)의 현재 경험치, 현재 레벨, 최대 레벨이 포함됩니다. 플레이어가 레벨을 올린 아이템의 목록 화면을 구성하는 데 사용합니다. 예를 들어 “철검 Lv.15, 불의 지팡이 Lv.8\"처럼 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string ~ 128자 경험치 모델명 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . StatusesAsync ( experienceName : \"character_ssr\" ). ToListAsync (); var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Statuses ( experienceName : \"character_ssr\" ); List EzStatus \u003e items = new List EzStatus \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Statuses ( \"character_ssr\" // experienceName ); TArray Gs2 :: UE5 :: Experience :: Model :: FEzStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStatuses ( callbackId ); var domain = gs2 . Experience . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStatuses ( callbackId ); const auto Domain = Gs2 -\u003e Experience -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeStatuses ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeStatuses ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Experience SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Experience SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/experience/game_engine/"},{"content":"모델 EzMold 폼 저장 영역 게임 플레이어가 편성한 정보를 보유하는 엔티티입니다. 편성 정보(Form)는 폼 저장 영역(Mold)마다 여러 개 보유할 수 있으며, 몇 개까지 보유할 수 있는지에 대한 캐파시티를 게임 플레이어 × 폼 저장 영역마다 개별적으로 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. EzForm 폼 폼은 편성 상태를 나타내는 엔티티입니다. 편성 가능한 영역으로 슬롯 을 정의할 수 있습니다. 무기·방어구라면 「오른손」「왼손」「몸통」「팔」과 같은 부위를 슬롯으로 하고, 파티라면 「전위」「중위」「후위」와 같은 포지션을 슬롯으로 표현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 폼 이름 이 폼이 속한 저장 영역 모델의 이름입니다. 이 폼 인스턴스에 적용되는 폼 모델(슬롯 구성)을 식별합니다. index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. slots List 0 ~ 10 items 슬롯 목록 이 폼의 현재 슬롯 할당입니다. 각 항목은 폼 모델에서 정의된 슬롯에 대응하며, 해당 포지션에 할당된 리소스의 프로퍼티 ID를 보유합니다. 슬롯 이름은 폼 모델에서 정의된 것과 일치해야 합니다. EzPropertyForm 프로퍼티 폼 프로퍼티 폼은 편성 상태를 나타내는 엔티티입니다. Mold / Form과의 차이점은, 슬롯 수를 정의하고 각 슬롯에 편성을 기록하는 것이 Mold / Form이며, 보유하고 있는 장비에 스킬을 설정하는 것처럼 수를 사전에 정하기 어려운 편성을 표현할 때 사용하는 것이 프로퍼티 폼입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 프로퍼티 폼 이름 이 프로퍼티 폼의 슬롯 구성을 정의하는 프로퍼티 폼 모델의 이름입니다. 할당 가능한 슬롯을 결정합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. slots List 0 ~ 10 items 슬롯 목록 이 프로퍼티 폼의 현재 슬롯 할당입니다. 각 항목은 프로퍼티 폼 모델에서 정의된 슬롯에 대응합니다. 예를 들어 프로퍼티 폼이 장비의 스킬 설정을 나타내는 경우, 각 슬롯은 서로 다른 스킬 할당을 보유합니다. EzFormModel 폼 모델 폼 모델은 편성 상태를 나타내는 엔티티입니다. 편성 가능한 영역으로 슬롯 을 정의할 수 있습니다. 무기·방어구라면 「오른손」「왼손」「몸통」「팔」과 같은 부위를 슬롯으로 하고, 파티라면 「전위」「중위」「후위」와 같은 포지션을 슬롯으로 표현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 리스트 이 폼을 구성하는 슬롯 정의의 순서가 있는 리스트입니다. 각 슬롯은 할당 가능한 포지션을 나타내며, 슬롯명은 폼 내에서 고유해야 합니다. 장비에서는 “weapon”, “armor”, “accessory\"와 같은 슬롯, 파티에서는 “position_1”, “position_2\"와 같은 슬롯을 생각할 수 있습니다. EzMoldModel 폼 저장 영역 모델 폼 저장 영역 모델은 파티 편성이라면 「불 속성 파티」「물 속성 파티」와 같은 형태로 저장하는 것을 상정하고 있습니다. 저장할 수 있는 영역의 수는 제한할 수 있으며, 개별적으로 확장할 수도 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. formModel EzFormModel  폼 모델 initialMaxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 초기 캐파시티 이 저장 영역에서 각 플레이어가 이용할 수 있는 기본 폼 저장 슬롯 수입니다. 예를 들어 3으로 설정하면 플레이어는 초기 상태에서 최대 3개의 서로 다른 편성(예: 「불 속성 파티」「물 속성 파티」「바람 속성 파티」)을 저장할 수 있습니다. 플레이어별로 maxCapacity까지 확장할 수 있습니다. maxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 최대 캐파시티 이 저장 영역에서 플레이어별 폼 저장 슬롯 수의 절대적인 상한입니다. 캐파시티 확장 조작을 수행하더라도 캐파시티는 이 값을 초과할 수 없습니다. initialMaxCapacity 이상의 값이어야 합니다. EzPropertyFormModel 프로퍼티 폼 모델 프로퍼티 폼 모델은 편성 상태를 나타내는 엔티티입니다. Mold / Form과의 차이점은, 슬롯 수를 정의하고 각 슬롯에 편성을 기록하는 것이 Mold / Form이며, 보유하고 있는 장비에 스킬을 설정하는 것처럼 수를 사전에 정하기 어려운 편성을 표현할 때 사용하는 것이 프로퍼티 폼 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 목록 이 프로퍼티 폼의 슬롯 정의를 순서대로 나열한 목록입니다. 캐파시티에 의해 폼 수가 제한되는 Mold/Form과 달리, 프로퍼티 폼은 프로퍼티 ID로 식별되며 보유하는 리소스마다 존재할 수 있습니다. 슬롯 이름은 폼 내에서 고유해야 합니다. EzSlotModel 슬롯 모델 폼 모델 내의 하나의 슬롯을 정의합니다. 슬롯은 게임 리소스(아이템, 캐릭터, 장비 등)를 배치할 수 있는 할당 가능한 포지션을 나타냅니다. 프로퍼티 정규 표현식에 의해 슬롯에 설정 가능한 값이 검증됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 슬롯 모델명 폼 모델 내에서 이 슬롯을 고유하게 식별하는 이름입니다. 장비 폼에서는 “right_hand”, “body\"와 같은 이름이, 파티 폼에서는 “vanguard”, “rear_guard\"와 같은 이름이 일반적으로 사용됩니다. propertyRegex string “.*” ~ 512자 프로퍼티로 설정 가능한 값의 정규 표현식 이 슬롯에 할당 가능한 프로퍼티 ID 값을 검증하는 정규 표현식 패턴입니다. 예를 들어 특정 GS2-Inventory 아이템 GRN이나 GS2-Dictionary 엔트리 GRN으로 제한할 수 있습니다. 기본값은 “.*“이며 임의의 값을 허용합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzSlot 슬롯 폼 내의 하나의 슬롯의 실제 할당 상태를 나타냅니다. 각 슬롯은 플레이어가 해당 포지션에 배치한 게임 리소스(GS2-Inventory의 아이템 세트나 GS2-Dictionary의 엔트리 등)를 참조하는 프로퍼티 ID를 보유합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 슬롯 모델명 폼 모델 내에서 이 슬롯을 고유하게 식별하는 이름입니다. 장비 폼에서는 “right_hand”, “body\"와 같은 이름이, 파티 폼에서는 “vanguard”, “rear_guard\"와 같은 이름이 일반적으로 사용됩니다. propertyId string ~ 1024자 프로퍼티 ID 이 슬롯에 할당된 게임 리소스를 참조하는 개발자 정의 식별자입니다. 일반적으로 GS2-Inventory의 아이템 세트 GRN, GS2-Dictionary의 엔트리 GRN, 또는 기타 리소스 식별자입니다. 슬롯 모델의 propertyRegex 패턴과 일치해야 합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzSlotWithSignature 서명된 슬롯 플레이어가 참조하는 리소스를 소유하고 있음을 증명하는 암호 서명을 포함한 슬롯 할당입니다. 폼 업데이트 시 플레이어가 슬롯에 배치하는 아이템, 엔트리, 또는 기타 리소스를 실제로 소유하고 있는지 검증하여 부정한 할당을 방지하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 슬롯 모델 이름 슬롯 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. propertyType 문자열 열거형 enum {   “gs2_inventory”,   “gs2_simple_inventory”,   “gs2_dictionary” }  프로퍼티 종류 이 슬롯이 참조하는 GS2 리소스의 종류를 지정합니다. 서명 검증 방법을 결정합니다. GS2-Inventory의 아이템 세트, GS2-Inventory의 심플 아이템, GS2-Dictionary의 엔트리는 각각 서로 다른 서명 형식을 가집니다. 정의 설명 gs2_inventory GS2-Inventory::ItemSet gs2_simple_inventory GS2-Inventory::SimpleItem gs2_dictionary GS2-Dictionary::Entry body string ~ 1048576자 페이로드 리소스를 소유한 GS2 서비스로부터 취득한 직렬화된 리소스 데이터입니다. 서명을 검증하고 소유권을 확인하는 데 필요한 리소스 상태 정보를 포함합니다. signature string ~ 1024자 프로퍼티 ID가 가리키는 리소스를 소유하고 있음을 증명하는 서명 리소스를 소유한 GS2 서비스에 의해 생성된 암호 서명입니다. 폼 업데이트 시 플레이어가 참조하는 아이템 세트, 심플 아이템, 또는 딕셔너리 엔트리를 소유하고 있는지 확인하기 위해 검증됩니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getMoldModel 이름을 지정하여 편성 프리셋 모델 조회 이름을 지정하여 저장 영역 모델을 1건 취득합니다. 취득할 수 있는 정보에는 연결된 폼 모델(슬롯 구성), 플레이어가 처음 저장할 수 있는 프리셋 수, 확장 후 최대 저장 개수가 포함됩니다. 특정 프리셋 카테고리의 상세 정보를 표시할 때 사용합니다. 예를 들어 편성 상세 화면에서 “장비 프리셋: 3/5 사용 중, 최대 10까지 확장 가능\"처럼 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzMoldModel 폼 저장 영역 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). MoldModel ( moldModelName : \"mold-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). MoldModel ( moldModelName : \"mold-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MoldModel ( \"mold-0001\" // moldModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . mold_model ( \"mold-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). MoldModel ( moldModelName : \"mold-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). MoldModel ( moldModelName : \"mold-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MoldModel ( \"mold-0001\" // moldModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Formation :: Model :: FMoldModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . mold_model ( \"mold-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listMoldModels 편성 프리셋 모델 목록 조회 이 네임스페이스에 등록된 모든 저장 영역 모델을 취득합니다. 저장 영역 모델은 “장비 프리셋\"이나 “파티 프리셋\"처럼 플레이어가 저장할 수 있는 편성 프리셋의 종류를 정의합니다. 초기 저장 개수와 확장 후 최대 저장 개수도 포함됩니다. 각 저장 영역 모델은 슬롯 구성을 정의하는 폼 모델과 연결되어 있습니다. 편성 관리 화면에서 “장비 세트(3/5칸 사용 중)“처럼 이용 가능한 프리셋 카테고리를 표시하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 폼 저장 영역 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . MoldModelsAsync ( ). ToListAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . MoldModels ( ); List EzMoldModel \u003e items = new List EzMoldModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e MoldModels ( ); TArray Gs2 :: UE5 :: Formation :: Model :: FEzMoldModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMoldModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMoldModels ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMoldModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMoldModels ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeMoldModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeMoldModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getMold 이름을 지정하여 편성 프리셋 저장 영역 조회 특정 저장 영역 모델에 대한 플레이어의 저장 영역 레코드를 취득합니다. 취득할 수 있는 정보에는 현재 용량(이 카테고리에서 플레이어가 사용할 수 있는 프리셋 칸 수)이 포함됩니다. 특정 프리셋 카테고리의 상태를 확인할 때 사용합니다. 예를 들어 새로운 프리셋을 만들기 전에 “장비 프리셋: 3/5칸\"처럼 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzMold 폼 저장 영역 moldModel EzMoldModel 폼 저장 영역 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Formation :: Model :: FMold \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listMolds 플레이어의 편성 프리셋 저장 영역 목록 조회 플레이어가 보유한 모든 저장 영역(프리셋 스토리지) 레코드를 취득합니다. 각 저장 영역에는 해당 카테고리에서 플레이어가 저장할 수 있는 폼 프리셋의 현재 용량이 기록되어 있습니다. 예를 들어 “장비 프리셋\"이 5칸 중 3칸 사용 중, “파티 프리셋\"이 3칸 중 1칸 사용 중인 것을 확인할 수 있습니다. 편성 관리 개요 화면에서 모든 프리셋 카테고리와 그 사용 현황을 표시하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 폼 저장 영역 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . MoldsAsync ( ). ToListAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Molds ( ); List EzMold \u003e items = new List EzMold \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Molds ( ); TArray Gs2 :: UE5 :: Formation :: Model :: FEzMoldPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMolds ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMolds ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMolds ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMolds ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeMolds ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeMolds ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getFormModel 폼의 슬롯 구성 정의 조회 특정 저장 영역 모델에 연결된 폼 모델을 취득합니다. 폼 모델은 “무기 슬롯”, “방어구 슬롯”, “액세서리 슬롯\"처럼 장비 편성이나 파티 편성을 구성하는 슬롯의 정의입니다. 각 슬롯에는 어떤 종류의 아이템(인벤토리, 심플 인벤토리, 딕셔너리)을 설정할 수 있는지가 지정되어 있습니다. 장비 편성 화면이나 포메이션 편집 화면을 구성할 때, 어떤 슬롯이 있는지 파악하기 위해 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzFormModel 폼 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). MoldModel ( moldModelName : \"mold-0001\" ). FormModel ( ); var item = await domain . ModelAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). MoldModel ( moldModelName : \"mold-0001\" ). FormModel ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MoldModel ( \"mold-0001\" // moldModelName ) -\u003e FormModel ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . mold_model ( \"mold-0001\" ) . form_model ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). MoldModel ( moldModelName : \"mold-0001\" ). FormModel ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). MoldModel ( moldModelName : \"mold-0001\" ). FormModel ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MoldModel ( \"mold-0001\" // moldModelName ) -\u003e FormModel ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Formation :: Model :: FFormModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . mold_model ( \"mold-0001\" ) . form_model ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. deleteForm 저장된 편성 프리셋 삭제 저장 영역 내 지정한 인덱스의 폼 프리셋을 삭제하고 모든 슬롯 내용을 초기화합니다. 프리셋 칸은 비워지며, 이후 새로운 편성을 저장하는 데 다시 사용할 수 있습니다. 플레이어가 저장된 프리셋을 삭제하고자 할 때 사용합니다. 예를 들어 편성 상세 화면의 “프리셋 삭제” 버튼에 사용할 수 있습니다. 이 작업은 취소할 수 없으므로 확인 대화상자를 표시하는 것을 권장합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 gameSession GameSession  GameSession index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. Result 타입 설명 item EzForm 폼 mold EzMold 폼 저장 영역 moldModel EzMoldModel 폼 저장 영역 모델 formModel EzFormModel 폼 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); var result = await domain . DeleteFormAsync ( ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); var future = domain . DeleteFormFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ) -\u003e Form ( 0 // index ); const auto Future = Domain -\u003e DeleteForm ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) var async_result = await domain . delete_form ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getForm 특정 저장된 편성 프리셋 조회 저장 영역 모델명과 프리셋 인덱스(0, 1, 2 등)를 지정하여 폼 프리셋을 1건 취득합니다. 취득할 수 있는 정보에는 각 슬롯의 내용(각 포지션에 어떤 아이템이 장착되어 있는지)이 포함됩니다. 편성 상세 화면을 표시할 때 사용합니다. 예를 들어 “프리셋 1: 무기=철검, 방어구=강철 갑옷, 액세서리=질풍의 반지\"처럼 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 gameSession GameSession  GameSession index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. Result 타입 설명 item EzForm 폼 mold EzMold 폼 저장 영역 moldModel EzMoldModel 폼 저장 영역 모델 formModel EzFormModel 폼 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); var item = await domain . ModelAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ) -\u003e Form ( 0 // index ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ) -\u003e Form ( 0 // index ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Formation :: Model :: FForm \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getFormWithSignature 위변조 방지 서명과 함께 편성 프리셋 조회 데이터가 위변조되지 않았음을 증명하는 암호 서명과 함께 폼 프리셋을 취득합니다. 클라이언트 측에서 SetForm으로 폼을 갱신할 때 이 서명이 필요합니다. 먼저 이 API로 현재 폼과 서명을 취득한 후, 변경 내용과 함께 그 서명을 전송해야 합니다. “편성 편집” 흐름의 첫 단계로 사용합니다. 현재 프리셋을 서명과 함께 취득하고, 플레이어가 변경하도록 한 후, SetForm으로 저장하는 흐름입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 gameSession GameSession  GameSession index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzForm 폼 body string 서명 대상 값 signature string 서명 mold EzMold 폼 저장 영역 moldModel EzMoldModel 폼 저장 영역 모델 formModel EzFormModel 폼 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); var result = await domain . GetFormWithSignatureAsync ( keyId : \"key-0001\" ); var item = await result . ModelAsync (); var body = result . Body ; var signature = result . Signature ; var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); var future = domain . GetFormWithSignatureFuture ( keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var body = future . Result . Body ; var signature = future . Result . Signature ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ) -\u003e Form ( 0 // index ); const auto Future = Domain -\u003e GetFormWithSignature ( \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) var async_result = await domain . get_form_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listForms 저장된 편성 프리셋 목록 조회 특정 저장 영역(프리셋 카테고리) 내에 플레이어가 저장한 모든 폼 프리셋을 취득합니다. 각 폼은 아이템 참조가 설정된 슬롯의 집합입니다. 예를 들어 프리셋 1에는 무기 슬롯에 “철검”, 방어구 슬롯에 “강철 갑옷\"이 설정되어 있는 식입니다. 프리셋 선택 화면을 구성하는 데 사용합니다. “프리셋 1: 공격형 빌드”, “프리셋 2: 방어형 빌드\"처럼 저장된 편성을 목록으로 표시하고 전환할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 폼 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ); var items = await domain . FormsAsync ( ). ToListAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ); var it = domain . Forms ( ); List EzForm \u003e items = new List EzForm \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ); const auto It = Domain -\u003e Forms ( ); TArray Gs2 :: UE5 :: Formation :: Model :: FEzFormPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeForms ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeForms ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeForms ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeForms ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeForms ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeForms ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. setForm 편성 프리셋 변경 내용 저장 폼 프리셋의 슬롯 내용을 갱신합니다. 예를 들어 무기 슬롯을 “철검\"에서 “화염검\"으로 변경하는 조작입니다. 위변조 방지를 위해 GetFormWithSignature로 취득한 서명이 필요합니다. 일반적인 흐름은 (1) GetFormWithSignature로 현재 폼과 서명을 취득, (2) 플레이어가 편성을 편집, (3) 새로운 슬롯 값과 서명을 첨부하여 이 API를 호출하는 순서입니다. 지정한 인덱스에 아직 폼이 없는 경우 새로운 프리셋이 생성됩니다(저장 영역에 여유 용량이 있는 경우). Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 gameSession GameSession  GameSession index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 목록 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzForm 폼 mold EzMold 폼 저장 영역 moldModel EzMoldModel 폼 저장 영역 모델 formModel EzFormModel 폼 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); var result = await domain . SetFormAsync ( slots : new List Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature \u003e { new Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature () { Name = \"slot-0001\" , PropertyType = \"gs2_dictionary\" , Body = \"body\" , Signature = \"signature\" , }, }, keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mold ( moldModelName : \"mold-0001\" ). Form ( index : 0 ); var future = domain . SetFormFuture ( slots : new List Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature \u003e { new Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature () { Name = \"slot-0001\" , PropertyType = \"gs2_dictionary\" , Body = \"body\" , Signature = \"signature\" , }, }, keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mold ( \"mold-0001\" // moldModelName ) -\u003e Form ( 0 // index ); const auto Future = Domain -\u003e SetForm ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Formation :: Model :: FEzSlotWithSignature \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Formation :: Model :: FEzSlotWithSignature \u003e () -\u003e WithName ( TOptional FString \u003e ( \"slot-0001\" )) -\u003e WithPropertyType ( TOptional FString \u003e ( \"gs2_dictionary\" )) -\u003e WithBody ( TOptional FString \u003e ( \"body\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"signature\" )) ); return v ; }(), // slots \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . mold ( \"mold-0001\" ) . form ( 0 ) var async_result = await domain . set_form ( [ Gs2FormationEzSlotWithSignature . new () . with_name ( \"slot-0001\" ) . with_property_type ( \"gs2_dictionary\" ) . with_body ( \"body\" ) . with_signature ( \"signature\" ), ], # slots \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getPropertyFormModel 이름을 지정하여 아이템별 폼 모델 조회 이름을 지정하여 프로퍼티 폼 모델을 1건 조회합니다. 조회되는 정보에는 슬롯 정의가 포함됩니다. 어떤 슬롯(“무기”, “방어구”, “스킬” 등)이 있고, 각 슬롯에 어떤 종류의 아이템을 설정할 수 있는지 알 수 있습니다. 특정 캐릭터나 아이템의 장비 편집 화면을 구축할 때 사용합니다. 예를 들어, 플레이어가 캐릭터를 탭하여 장비를 관리하는 화면에 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzPropertyFormModel 프로퍼티 폼 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). PropertyFormModel ( propertyFormModelName : \"form-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). PropertyFormModel ( propertyFormModelName : \"form-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e PropertyFormModel ( \"form-0001\" // propertyFormModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . property_form_model ( \"form-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). PropertyFormModel ( propertyFormModelName : \"form-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). PropertyFormModel ( propertyFormModelName : \"form-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e PropertyFormModel ( \"form-0001\" // propertyFormModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Formation :: Model :: FPropertyFormModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . property_form_model ( \"form-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listPropertyFormModels 아이템별 폼 모델 목록 조회 이 네임스페이스에 등록된 모든 프로퍼티 폼 모델을 조회합니다. 프로퍼티 폼 모델은, 번호가 매겨진 프리셋이 아닌 커스텀 프로퍼티 ID(캐릭터 ID나 무기 ID 등)로 식별되는 폼의 슬롯 구성을 정의합니다. 각 캐릭터나 아이템마다 개별 장비 세트를 갖게 하고 싶을 때 유용합니다. 예를 들어 “용사의 장비”, “마법사의 장비\"처럼, 프로퍼티 ID에 캐릭터의 고유 ID를 사용합니다. 편성 관리 화면에서 이용 가능한 아이템별 폼 종류를 표시하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 프로퍼티 폼 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . PropertyFormModelsAsync ( ). ToListAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . PropertyFormModels ( ); List EzPropertyFormModel \u003e items = new List EzPropertyFormModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e PropertyFormModels ( ); TArray Gs2 :: UE5 :: Formation :: Model :: FEzPropertyFormModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribePropertyFormModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribePropertyFormModels ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribePropertyFormModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribePropertyFormModels ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribePropertyFormModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribePropertyFormModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. deletePropertyForm 캐릭터나 아이템의 장비 세트 삭제 특정 프로퍼티 ID의 프로퍼티 폼을 삭제하고 모든 슬롯 내용을 초기화합니다. 삭제 후 해당 캐릭터나 아이템은 장비 세트를 가지지 않는 상태가 됩니다. 이후 SetPropertyForm으로 새로운 세트를 만들 수 있습니다. 플레이어가 캐릭터의 장비를 초기화하고자 할 때 사용합니다. 예를 들어 캐릭터 상세 화면의 “모든 장비 해제” 버튼에 사용할 수 있습니다. 장착 중인 아이템이 모두 해제되므로 확인 대화상자를 표시하는 것을 권장합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. Result 타입 설명 item EzPropertyForm 프로퍼티 폼 propertyFormModel EzPropertyFormModel 프로퍼티 폼 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); var result = await domain . DeletePropertyFormAsync ( ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); var future = domain . DeletePropertyFormFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PropertyForm ( \"form-0001\" , // propertyFormModelName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e DeletePropertyForm ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . property_form ( \"form-0001\" , \"property-0001\" ) var async_result = await domain . delete_property_form ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getPropertyForm 특정 캐릭터나 아이템의 장비 세트 조회 프로퍼티 폼 모델명과 프로퍼티 ID(캐릭터 ID 등)를 지정하여 프로퍼티 폼을 1건 취득합니다. 취득할 수 있는 정보에는 각 슬롯의 내용(해당 캐릭터나 아이템의 각 포지션에 어떤 아이템이 장착되어 있는지)이 포함됩니다. 캐릭터의 장비 상세 화면을 표시할 때 사용합니다. 예를 들어 “용사: 무기=화염검, 갑옷=드래곤 메일, 방패=성스러운 방패\"처럼 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. Result 타입 설명 item EzPropertyForm 프로퍼티 폼 propertyFormModel EzPropertyFormModel 폼 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PropertyForm ( \"form-0001\" , // propertyFormModelName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . property_form ( \"form-0001\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PropertyForm ( \"form-0001\" , // propertyFormModelName \"property-0001\" // propertyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Formation :: Model :: FPropertyForm \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . property_form ( \"form-0001\" , \"property-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getPropertyFormWithSignature 위변조 방지 서명과 함께 캐릭터의 장비 세트 조회 데이터가 위변조되지 않았음을 증명하는 암호 서명과 함께 프로퍼티 폼을 취득합니다. 클라이언트 측에서 SetPropertyForm으로 갱신할 때 이 서명이 필요합니다. 먼저 이 API로 현재 폼과 서명을 취득한 후, 변경 내용과 함께 그 서명을 전송해야 합니다. “캐릭터 장비 편집” 흐름의 첫 단계로 사용합니다. 현재 장비를 서명과 함께 취득하고, 플레이어가 변경하도록 한 후, SetPropertyForm으로 저장하는 흐름입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzPropertyForm 프로퍼티 폼 body string 서명 대상 값 signature string 서명 propertyFormModel EzPropertyFormModel 프로퍼티 폼 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); var result = await domain . GetPropertyFormWithSignatureAsync ( keyId : \"key-0001\" ); var item = await result . ModelAsync (); var body = result . Body ; var signature = result . Signature ; var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); var future = domain . GetPropertyFormWithSignatureFuture ( keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var body = future . Result . Body ; var signature = future . Result . Signature ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PropertyForm ( \"form-0001\" , // propertyFormModelName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e GetPropertyFormWithSignature ( \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . property_form ( \"form-0001\" , \"property-0001\" ) var async_result = await domain . get_property_form_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listPropertyForms 아이템별 장비 세트 목록 조회 특정 프로퍼티 폼 모델에 대한 플레이어의 모든 프로퍼티 폼 레코드를 취득합니다. 일반 폼(번호가 매겨진 프리셋 칸에 저장)과 달리, 프로퍼티 폼은 커스텀 프로퍼티 ID(일반적으로 캐릭터 ID나 아이템 ID)로 식별됩니다. 예를 들어 “용사의 장비”, “마법사의 장비”, “궁수의 장비\"처럼 각 캐릭터가 개별 장비 구성을 가지고 있는 경우의 목록을 취득할 수 있습니다. 모든 캐릭터와 그 장비 구성을 표시하는 개요 화면을 구성하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 프로퍼티 폼 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . PropertyFormsAsync ( propertyFormModelName : \"form-0001\" ). ToListAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . PropertyForms ( propertyFormModelName : \"form-0001\" ); List EzPropertyForm \u003e items = new List EzPropertyForm \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e PropertyForms ( \"form-0001\" // propertyFormModelName ); TArray Gs2 :: UE5 :: Formation :: Model :: FEzPropertyFormPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribePropertyForms ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribePropertyForms ( callbackId ); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribePropertyForms ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribePropertyForms ( callbackId ); const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribePropertyForms ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribePropertyForms ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. setPropertyForm 캐릭터나 아이템의 장비 세트 변경 내용 저장 프로퍼티 폼의 슬롯 내용을 갱신합니다. 예를 들어 용사의 무기를 “철검\"에서 “화염검\"으로 변경하는 조작입니다. 위변조 방지를 위해 GetPropertyFormWithSignature로 취득한 서명이 필요합니다. 일반적인 흐름은 (1) GetPropertyFormWithSignature로 현재 폼과 서명을 취득, (2) 플레이어가 장비를 편집, (3) 새로운 슬롯 값과 서명을 첨부하여 이 API를 호출하는 순서입니다. 지정한 프로퍼티 ID에 아직 프로퍼티 폼이 없는 경우 자동으로 새로 생성됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. slots List  1 ~ 10 items 슬롯 목록 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzPropertyForm 프로퍼티 폼 proeprtyFormModel EzPropertyFormModel 프로퍼티 폼 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); var result = await domain . SetPropertyFormAsync ( slots : new List Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature \u003e { new Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature () { Name = \"slot-0001\" , PropertyType = \"gs2_dictionary\" , Body = \"body\" , Signature = \"signature\" , }, }, keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Formation . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). PropertyForm ( propertyFormModelName : \"form-0001\" , propertyId : \"property-0001\" ); var future = domain . SetPropertyFormFuture ( slots : new List Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature \u003e { new Gs2 . Unity . Gs2Formation . Model . EzSlotWithSignature () { Name = \"slot-0001\" , PropertyType = \"gs2_dictionary\" , Body = \"body\" , Signature = \"signature\" , }, }, keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Formation -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e PropertyForm ( \"form-0001\" , // propertyFormModelName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e SetPropertyForm ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Formation :: Model :: FEzSlotWithSignature \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Formation :: Model :: FEzSlotWithSignature \u003e () -\u003e WithName ( TOptional FString \u003e ( \"slot-0001\" )) -\u003e WithPropertyType ( TOptional FString \u003e ( \"gs2_dictionary\" )) -\u003e WithBody ( TOptional FString \u003e ( \"body\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"signature\" )) ); return v ; }(), // slots \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . formation . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . property_form ( \"form-0001\" , \"property-0001\" ) var async_result = await domain . set_property_form ( [ Gs2FormationEzSlotWithSignature . new () . with_name ( \"slot-0001\" ) . with_property_type ( \"gs2_dictionary\" ) . with_body ( \"body\" ) . with_signature ( \"signature\" ), ], # slots \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Formation SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Formation SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/formation/game_engine/"},{"content":"모델 EzProfile 프로필 프로필은 게임 플레이어에 관한 정보를 저장합니다. 프로필은 공개 범위별로 설정할 수 있으며, 3가지 종류가 있습니다. friend 친구 관계가 성립된 상대방이 열람 가능한 내용 follow 팔로우하고 있는 상대방이 열람 가능한 내용 public 누구나 열람 가능한 내용 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 관계와 상관없이 모든 플레이어에게 표시되는 프로필 정보입니다. 일반적으로 표시 이름, 아바타, 기타 공개 가능한 정보에 사용됩니다. followerProfile string ~ 1024자 팔로워에게 공개되는 프로필 이 사용자를 팔로우하고 있는 플레이어에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보(게임플레이 통계나 상태 메시지 등)를 포함할 수 있습니다. friendProfile string ~ 1024자 친구에게 공개되는 프로필 상호 친구 관계가 성립된 플레이어에게만 표시되는 프로필 정보입니다. 가장 프라이빗한 프로필 수준으로, 연락처나 개인 메시지 등 개인 정보를 공유하기에 적합합니다. EzBlackList 블랙리스트 플레이어가 차단한 사용자의 목록을 관리합니다. 차단된 사용자는 이 플레이어에게 친구 요청을 보내거나 팔로우할 수 없게 되어, 원치 않는 상호작용을 제어하는 메커니즘을 제공합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID targetUserIds List 0 ~ 1000 items 블랙리스트의 사용자 ID 목록 이 플레이어가 차단한 사용자 ID 목록입니다. 차단된 사용자는 이 플레이어에게 친구 요청이나 팔로우 요청을 보낼 수 없습니다. EzFollowUser 팔로우 사용자 현재 사용자가 팔로우하고 있는 사용자를 나타냅니다. 팔로우 대상 사용자의 공개 프로필과 팔로워 수준의 프로필 정보에 대한 접근을 제공하며, 이는 팔로워에게는 표시되지만 일반에는 공개되지 않습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 팔로우 대상 사용자의 공개 프로필 정보로, 모든 플레이어가 접근할 수 있습니다. followerProfile string ~ 1024자 팔로워에게 공개되는 프로필 팔로워에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보를 포함할 수 있습니다. EzFriendUser 친구 사용자 현재 사용자와 상호 친구 관계가 성립된 사용자를 나타냅니다. 친구의 공개 프로필과 친구 수준의 프로필 정보에 대한 접근을 제공하며, 이는 확인된 친구에게만 표시됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 친구의 공개 프로필 정보로, 모든 플레이어가 접근할 수 있습니다. friendProfile string ~ 1024자 친구에게 공개되는 프로필 확인된 친구에게만 표시되는 친구의 프로필 정보입니다. 공개 프로필보다 프라이빗한 정보를 포함합니다. EzFriendRequest 친구 요청 두 플레이어 간의 친구 요청을 나타냅니다. 발신자의 사용자 ID, 수신자의 사용자 ID, 그리고 표시용 발신자의 공개 프로필을 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 친구 요청을 보낸 사용자 ID targetUserId string  ~ 128자 친구 요청을 받은 사용자 ID publicProfile string ~ 1024자 공개 프로필 친구 요청 발신자의 공개 프로필입니다. 수신자가 누가 친구 신청을 하고 있는지 식별할 수 있도록 표시용으로 포함됩니다. EzPublicProfile 공개 프로필 사용자의 공개 프로필 정보에 대한 읽기 전용 뷰입니다. 친구나 팔로우 관계를 필요로 하지 않으며, 임의의 사용자에 대해 조회할 수 있습니다. 검색 결과, 리더보드, 기타 공개적인 컨텍스트에서 플레이어 정보를 표시하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 사용자의 공개 프로필 내용입니다. 친구나 팔로워 관계를 필요로 하지 않고 접근할 수 있습니다. 메서드 getProfile 플레이어 자신의 프로필 가져오기 플레이어 자신의 프로필을 3가지 공개 수준 모두 포함하여 가져옵니다: 공개 프로필: 누구나 볼 수 있는 정보(플레이어 이름, 아바타 등) 팔로워 전용 프로필: 팔로우해 준 사람만 볼 수 있는 정보(플레이 스타일, 좋아하는 팀 등) 친구 전용 프로필: 상호 친구만 볼 수 있는 정보(본명, 연락처 등) “내 프로필\"이나 “프로필 편집” 화면에서 플레이어가 자신의 프로필 정보를 확인·관리할 수 있도록 하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzProfile 프로필 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Profile ( ); var item = await domain . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Profile ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Profile ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . profile ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Profile ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Profile ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Profile ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Friend :: Model :: FProfile \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . profile ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getPublicProfile 다른 플레이어의 공개 프로필 가져오기 지정한 플레이어의 프로필 중 공개 부분만 가져옵니다. 팔로우나 친구 관계와 무관하게 누구나 볼 수 있는 정보입니다. 예를 들어 표시 이름, 아바타, 레벨 등이 반환되지만, 팔로워 전용이나 친구 전용 프로필 데이터는 포함되지 않습니다. 랭킹, 채팅, 매칭 결과 등에서 다른 플레이어의 이름을 탭했을 때 플레이어 카드나 미니 프로필을 표시하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID Result 타입 설명 item EzPublicProfile 공개 프로필 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). PublicProfile ( ); var item = await domain . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). PublicProfile ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e PublicProfile ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . public_profile ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). PublicProfile ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). PublicProfile ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e PublicProfile ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Friend :: Model :: FPublicProfile \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . public_profile ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. updateProfile 플레이어 자신의 프로필 업데이트하기 플레이어의 프로필을 3가지 공개 수준으로 업데이트합니다: publicProfile: 모든 플레이어에게 표시되는 정보(표시 이름, 레벨, 아바타 아이콘 등) followerProfile: 팔로워에게만 표시되는 추가 정보(“길드 멤버 모집 중!” 등) friendProfile: 친구에게만 표시되는 프라이빗한 정보(Discord ID, 일정 등) 각 필드는 자유 형식 문자열이므로 텍스트나 JSON 데이터 등 무엇이든 저장할 수 있습니다. 설정 화면이나 프로필 편집 화면에서 플레이어가 프로필을 편집할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession publicProfile string ~ 1024자 공개되는 프로필 관계와 상관없이 모든 플레이어에게 표시되는 프로필 정보입니다. 일반적으로 표시 이름, 아바타, 기타 공개 가능한 정보에 사용됩니다. followerProfile string ~ 1024자 팔로워에게 공개되는 프로필 이 사용자를 팔로우하고 있는 플레이어에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보(게임플레이 통계나 상태 메시지 등)를 포함할 수 있습니다. friendProfile string ~ 1024자 친구에게 공개되는 프로필 상호 친구 관계가 성립된 플레이어에게만 표시되는 프로필 정보입니다. 가장 프라이빗한 프로필 수준으로, 연락처나 개인 메시지 등 개인 정보를 공유하기에 적합합니다. Result 타입 설명 item EzProfile 갱신한 프로필 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Profile ( ); var result = await domain . UpdateProfileAsync ( publicProfile : \"public\" , followerProfile : \"follower\" , friendProfile : \"friend\" ); var item = await result . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Profile ( ); var future = domain . UpdateProfileFuture ( publicProfile : \"public\" , followerProfile : \"follower\" , friendProfile : \"friend\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Profile ( ); const auto Future = Domain -\u003e UpdateProfile ( \"public\" , // publicProfile \"follower\" , // followerProfile \"friend\" // friendProfile ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . profile ( ) var async_result = await domain . update_profile ( \"public\" , # public_profile \"follower\" , # follower_profile \"friend\" # friend_profile ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result describeFollowUsers 플레이어가 팔로우하는 플레이어 목록 가져오기 현재 플레이어가 팔로우하는 모든 플레이어를 가져옵니다. 팔로우는 단방향 관계입니다. 상대방의 승인 없이 팔로우할 수 있는, SNS의 팔로우와 같은 방식입니다. withProfile을 true로 설정하면 팔로우 대상 플레이어의 팔로워 전용 프로필(팔로워에게 공개하는 추가 정보)도 함께 반환됩니다. “팔로우 중” 목록 화면을 구성하여 플레이어가 자신의 팔로우 목록을 확인할 수 있도록 하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession withProfile bool false 프로필 정보도 함께 조회할지 여부 limit int 30 1 ~ 1000 취득할 데이터 건수 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 Result 타입 설명 items List 사용자가 팔로우하는 사용자 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ); var items = await domain . FollowsAsync ( ). ToListAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ); var it = domain . Follows ( ); List EzFollowUser \u003e items = new List EzFollowUser \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Follow ( true // withProfile ); const auto It = Domain -\u003e Follows ( ); TArray Gs2 :: UE5 :: Friend :: Model :: FEzFollowUserPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } follow 다른 플레이어 팔로우하기 지정한 플레이어를 현재 플레이어의 팔로우 목록에 추가합니다. 팔로우는 상대방의 승인이 필요 없는 단방향 액션입니다. SNS의 팔로우와 같은 방식입니다. 팔로우 후에는 대상 플레이어의 팔로워 전용 프로필 정보(팔로워에게 공개하는 추가 정보)를 볼 수 있게 됩니다. 다른 플레이어의 프로필 화면, 검색 결과, 랭킹 화면 등의 “팔로우” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 팔로우하고 싶은 상대의 사용자 ID withProfile bool  false 프로필도 함께 취득할지 여부 Result 타입 설명 item EzFollowUser 팔로우한 사용자 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ); var result = await domain . FollowAsync ( targetUserId : \"user-0002\" ); var item = await result . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ); var future = domain . FollowFuture ( targetUserId : \"user-0002\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Follow ( true // withProfile ); const auto Future = Domain -\u003e Follow ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . follow ( null ) var async_result = await domain . follow ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getFollowUser 특정 플레이어를 팔로우하고 있는지 확인하기 현재 플레이어의 팔로우 목록에서 특정 플레이어를 가져옵니다. 대상 플레이어가 팔로우 목록에 있으면 해당 정보가 반환됩니다. withProfile을 true로 설정하면 팔로워 전용 프로필도 포함됩니다. 플레이어가 이미 상대방을 팔로우하고 있는지 확인하는 데 사용합니다. 예를 들어 다른 플레이어의 프로필 화면에서 “팔로우 중 / 팔로우하기” 버튼의 표시를 전환하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession withProfile bool false 프로필 정보도 함께 조회할지 여부 targetUserId string  ~ 128자 사용자ID Result 타입 설명 item EzFollowUser 팔로우 중인 사용자 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ). FollowUser ( targetUserId : \"user-0002\" ); var item = await domain . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ). FollowUser ( targetUserId : \"user-0002\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Follow ( true // withProfile ) -\u003e FollowUser ( \"user-0002\" // targetUserId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . follow ( true ) . follow_user ( \"user-0002\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ). FollowUser ( targetUserId : \"user-0002\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ). FollowUser ( targetUserId : \"user-0002\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Follow ( true // withProfile ) -\u003e FollowUser ( \"user-0002\" // targetUserId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Friend :: Model :: FFollowUser \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . follow ( true ) . follow_user ( \"user-0002\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. unfollow 플레이어 팔로우 해제하기 지정한 플레이어를 현재 플레이어의 팔로우 목록에서 삭제합니다. 팔로우 해제 후에는 대상 플레이어의 팔로워 전용 프로필 정보를 볼 수 없게 됩니다. 팔로우 중인 플레이어의 프로필 화면이나 “팔로우 중” 목록 화면의 “팔로우 해제” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 사용자ID withProfile bool  false 프로필도 함께 취득할지 여부 Result 타입 설명 item EzFollowUser 언팔로우한 사용자 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ). FollowUser ( targetUserId : \"user-0002\" ); var result = await domain . UnfollowAsync ( ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Follow ( withProfile : true ). FollowUser ( targetUserId : \"user-0002\" ); var future = domain . UnfollowFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Follow ( true // withProfile ) -\u003e FollowUser ( \"user-0002\" // targetUserId ); const auto Future = Domain -\u003e Unfollow ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . follow ( null ) . follow_user ( \"user-0002\" ) var async_result = await domain . unfollow ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result deleteFriend 친구 목록에서 플레이어 삭제하기 지정한 플레이어를 현재 플레이어의 친구 목록에서 삭제하여 상호 친구 관계를 해제합니다. 삭제 후에는 서로의 친구 전용 프로필 정보를 볼 수 없게 됩니다. 친구의 프로필 화면이나 상세 화면의 “친구 삭제” 버튼에 사용합니다. 상대방 쪽도 친구 관계가 해제되므로 확인 대화상자를 표시하는 것을 권장합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 사용자ID withProfile bool  false 프로필도 함께 취득할지 여부 Result 타입 설명 item EzFriendUser 삭제한 친구 사용자 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Friend ( withProfile : true ); var result = await domain . DeleteFriendAsync ( targetUserId : \"user-0002\" ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Friend ( withProfile : true ); var future = domain . DeleteFriendFuture ( targetUserId : \"user-0002\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Friend ( true // withProfile ); const auto Future = Domain -\u003e DeleteFriend ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . friend ( null ) var async_result = await domain . delete_friend ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result describeFriends 플레이어의 친구 목록 가져오기 현재 플레이어와 상호 친구 관계에 있는 모든 플레이어를 가져옵니다. 팔로우(단방향)와 달리, 친구는 친구 요청이 승인되어 성립되는 양방향 관계입니다. withProfile을 true로 설정하면 각 친구의 친구 전용 프로필(가장 프라이빗한 수준의 프로필 정보)도 함께 반환됩니다. “친구” 목록 화면을 구성하는 데 사용합니다. 예를 들어 친구의 이름, 아바타, 온라인 상태 등을 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession withProfile bool false 프로필 정보도 함께 조회할지 여부 limit int 30 1 ~ 1000 취득할 데이터 건수 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 Result 타입 설명 items List 친구 사용자 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . FriendsAsync ( withProfile : true ). ToListAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Friends ( withProfile : true ); List EzFriendUser \u003e items = new List EzFriendUser \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Friends ( true // withProfile ); TArray Gs2 :: UE5 :: Friend :: Model :: FEzFriendUserPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeFriends ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeFriends ( callbackId ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeFriends ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeFriends ( callbackId ); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeFriends ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeFriends ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getFriend 특정 친구의 정보 가져오기 현재 플레이어의 친구 목록에서 특정 플레이어의 정보를 가져옵니다. withProfile을 true로 설정하면 친구의 친구 전용 프로필(가장 프라이빗한 수준의 프로필 정보)도 반환됩니다. 친구 상세 화면을 표시할 때 사용합니다. 예를 들어 친구의 전체 프로필, 상태, “친구 삭제\"나 “메시지 보내기” 등의 옵션을 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 Result 타입 설명 item EzFriendUser 친구 사용자 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Friend ( withProfile : true ). FriendUser ( targetUserId : \"user-0002\" ); var item = await domain . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Friend ( withProfile : true ). FriendUser ( targetUserId : \"user-0002\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Friend ( true // withProfile ) -\u003e FriendUser ( \"user-0002\" // targetUserId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . friend ( true ) . friend_user ( \"user-0002\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Friend ( withProfile : true ). FriendUser ( targetUserId : \"user-0002\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Friend ( withProfile : true ). FriendUser ( targetUserId : \"user-0002\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Friend ( true // withProfile ) -\u003e FriendUser ( \"user-0002\" // targetUserId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Friend :: Model :: FFriendUser \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . friend ( true ) . friend_user ( \"user-0002\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. deleteRequest 전송한 친구 요청 취소하기 플레이어가 전송한 친구 요청을 상대방이 응답하기 전에 취소합니다. 요청은 발신자의 송신함과 수신자의 수신함 양쪽에서 삭제됩니다. 전송한 요청 화면이나, 이미 요청을 전송한 플레이어의 프로필 화면의 “요청 취소” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 사용자ID Result 타입 설명 item EzFriendRequest 삭제한 친구 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendFriendRequest ( targetUserId : \"user-0002\" ); var result = await domain . DeleteRequestAsync ( ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendFriendRequest ( targetUserId : \"user-0002\" ); var future = domain . DeleteRequestFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SendFriendRequest ( \"user-0002\" // targetUserId ); const auto Future = Domain -\u003e DeleteRequest ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . send_friend_request ( \"user-0002\" ) var async_result = await domain . delete_request ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result describeSendRequests 전송한 친구 요청 목록 가져오기 현재 플레이어가 전송한, 아직 응답을 기다리고 있는 친구 요청을 모두 가져옵니다. 각 요청에는 누구에게 언제 보냈는지가 표시됩니다. 플레이어는 마음이 바뀌면 전송한 요청을 취소할 수 있습니다. “전송한 요청” 화면을 구성하는 데 사용합니다. 예를 들어 “플레이어B의 응답을 기다리는 중… [취소]“와 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 친구 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . SendRequestsAsync ( ). ToListAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . SendRequests ( ); List EzFriendRequest \u003e items = new List EzFriendRequest \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e SendRequests ( ); TArray Gs2 :: UE5 :: Friend :: Model :: FEzFriendRequestPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getSendRequest 특정 전송한 친구 요청 가져오기 현재 플레이어가 특정 플레이어에게 전송한 친구 요청의 상세 정보를 가져옵니다. 특정 요청의 상태를 표시할 때 사용합니다. 예를 들어 특정 플레이어에게 보낸 요청이 아직 보류 중인지 확인하거나, 플레이어 프로필 화면에서 요청 상세 정보를 표시하는 데 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 사용자ID Result 타입 설명 item EzFriendRequest 친구 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendFriendRequest ( targetUserId : \"user-0002\" ); var item = await domain . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendFriendRequest ( targetUserId : \"user-0002\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SendFriendRequest ( \"user-0002\" // targetUserId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . send_friend_request ( \"user-0002\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendFriendRequest ( targetUserId : \"user-0002\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendFriendRequest ( targetUserId : \"user-0002\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SendFriendRequest ( \"user-0002\" // targetUserId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Friend :: Model :: FSendFriendRequest \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . send_friend_request ( \"user-0002\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. sendRequest 다른 플레이어에게 친구 요청 보내기 지정한 플레이어에게 친구 요청을 보냅니다. 요청은 상대방의 수신함에 도착하며, 승인하거나 거부할 수 있습니다. 승인되면 서로 상호 친구가 되어 친구 전용 프로필 정보를 볼 수 있게 됩니다. 주의: 이미 친구가 1000명 있는 경우 요청을 보낼 수 없습니다. 또한 미승인 요청이 존재하는 경우, 가장 오래된 미승인 요청이 자동으로 취소되고 새 요청이 전송됩니다. 다른 플레이어의 프로필 화면이나 검색 결과의 “친구 요청 보내기” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 친구가 되고 싶은 상대의 사용자 ID Result 타입 설명 item EzFriendRequest 송신한 친구 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . SendRequestAsync ( targetUserId : \"user-0002\" ); var item = await result . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . SendRequestFuture ( targetUserId : \"user-0002\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e SendRequest ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . send_request ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result accept 친구 요청 승인하기 지정한 플레이어로부터 받은 친구 요청을 승인합니다. 승인하면 상호 친구 관계가 성립되어 서로의 친구 목록에 추가되고, 친구 전용 프로필 정보를 볼 수 있게 됩니다. 친구 요청 알림이나 수신함 화면의 “승인” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession fromUserId string  ~ 128자 사용자ID Result 타입 설명 item EzFriendRequest 승낙한 친구 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( fromUserId : \"user-0002\" ); var result = await domain . AcceptAsync ( ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( fromUserId : \"user-0002\" ); var future = domain . AcceptFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e ReceiveFriendRequest ( nullptr , // targetUserId \"user-0002\" // fromUserId ); const auto Future = Domain -\u003e Accept ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_friend_request ( \"user-0002\" ) var async_result = await domain . accept ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result describeReceiveRequests 받은 친구 요청 목록 가져오기 다른 플레이어가 현재 플레이어에게 보낸, 응답을 기다리고 있는 친구 요청을 모두 가져옵니다. 각 요청에는 누가 언제 보냈는지가 표시됩니다. 플레이어는 각각 승인하거나 거부할 수 있습니다. “친구 요청” 수신함 화면을 구성하는 데 사용합니다. 예를 들어 “플레이어A님이 친구가 되고 싶어합니다! [승인] [거부]“와 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 친구 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . ReceiveRequestsAsync ( ). ToListAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . ReceiveRequests ( ); List EzFriendRequest \u003e items = new List EzFriendRequest \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e ReceiveRequests ( ); TArray Gs2 :: UE5 :: Friend :: Model :: FEzFriendRequestPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getReceiveRequest 특정 받은 친구 요청 가져오기 특정 발신자로부터 받은 친구 요청의 상세 정보를 가져옵니다. 친구 요청 상세 화면을 표시할 때 사용합니다. 예를 들어 발신자의 프로필과 요청 전송 일시를 표시하고 “승인”, “거부” 버튼을 배치하는 화면에 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession fromUserId string  ~ 128자 사용자ID Result 타입 설명 item EzFriendRequest 친구 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( targetUserId : null , fromUserId : \"user-0002\" ); var item = await domain . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( targetUserId : null , fromUserId : \"user-0002\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e ReceiveFriendRequest ( nullptr , // targetUserId \"user-0002\" // fromUserId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_friend_request ( \"user-0002\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( targetUserId : null , fromUserId : \"user-0002\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( targetUserId : null , fromUserId : \"user-0002\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e ReceiveFriendRequest ( nullptr , // targetUserId \"user-0002\" // fromUserId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Friend :: Model :: FReceiveFriendRequest \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_friend_request ( \"user-0002\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. reject 친구 요청 거부하기 지정한 플레이어로부터 받은 친구 요청을 거부합니다. 요청은 삭제되며 친구 관계는 성립되지 않습니다. 거부되었다는 사실은 발신자에게 통지되지 않습니다. 친구 요청 알림이나 수신함 화면의 “거부” 또는 “거절” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession fromUserId string  ~ 128자 사용자ID Result 타입 설명 item EzFriendRequest 거부한 친구 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( fromUserId : \"user-0002\" ); var result = await domain . RejectAsync ( ); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveFriendRequest ( fromUserId : \"user-0002\" ); var future = domain . RejectFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e ReceiveFriendRequest ( nullptr , // targetUserId \"user-0002\" // fromUserId ); const auto Future = Domain -\u003e Reject ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_friend_request ( \"user-0002\" ) var async_result = await domain . reject ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getBlackList 플레이어의 차단 목록 가져오기 현재 플레이어가 차단한 사용자 ID 목록을 가져옵니다. 차단된 플레이어는 현재 플레이어에게 친구 요청을 보내거나 팔로우할 수 없게 됩니다. “차단 중인 플레이어” 관리 화면을 구성하는 데 사용합니다. 이전에 차단한 상대를 확인하거나 차단을 해제할 수 있는 화면에 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 블랙리스트에 등록된 사용자 ID 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . BlackListUsersAsync ( ). ToListAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . BlackListUsers ( ); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e BlackListUsers ( ); for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } registerBlackList 플레이어 차단하기 지정한 플레이어를 현재 플레이어의 차단 목록에 추가합니다. 차단하면 대상 플레이어는 현재 플레이어에게 친구 요청을 보내거나 팔로우할 수 없게 됩니다. 다른 플레이어의 프로필 화면이나 신고·모더레이션 메뉴의 “차단” 버튼에 사용합니다. 플레이어가 원치 않는 상호작용으로부터 자신을 보호하는 데 도움이 됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 사용자ID Result 타입 설명 item EzBlackList 블랙리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BlackList ( ); var result = await domain . RegisterBlackListAsync ( targetUserId : \"user-0002\" ); var item = await result . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BlackList ( ); var future = domain . RegisterBlackListFuture ( targetUserId : \"user-0002\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BlackList ( ); const auto Future = Domain -\u003e RegisterBlackList ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . black_list ( ) var async_result = await domain . register_black_list ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result unregisterBlackList 플레이어 차단 해제하기 지정한 플레이어를 현재 플레이어의 차단 목록에서 삭제합니다. 차단 해제 후에는 대상 플레이어가 다시 현재 플레이어에게 친구 요청을 보내거나 팔로우할 수 있게 됩니다. 차단 중인 플레이어 관리 화면이나 차단 중인 플레이어의 프로필 화면의 “차단 해제” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 사용자ID Result 타입 설명 item EzBlackList 블랙리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BlackList ( ); var result = await domain . UnregisterBlackListAsync ( targetUserId : \"user-0002\" ); var item = await result . ModelAsync (); var domain = gs2 . Friend . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BlackList ( ); var future = domain . UnregisterBlackListFuture ( targetUserId : \"user-0002\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Friend -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BlackList ( ); const auto Future = Domain -\u003e UnregisterBlackList ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . friend . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . black_list ( ) var async_result = await domain . unregister_black_list ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 이벤트 핸들러 OnFollowNotification 팔로우되었을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID fromUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Friend . OnFollowNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var fromUserId = notification . FromUserId ; }; gs2 . Friend . OnFollowNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var fromUserId = notification . FromUserId ; }; Gs2 -\u003e Friend -\u003e OnFollowNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto FromUserId = Notification -\u003e FromUserIdValue ; }); ez . friend . follow_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var from_user_id = notification . from_user_id ) OnAcceptRequestNotification 친구 요청이 승인되었을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID targetUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Friend . OnAcceptRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var targetUserId = notification . TargetUserId ; }; gs2 . Friend . OnAcceptRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var targetUserId = notification . TargetUserId ; }; Gs2 -\u003e Friend -\u003e OnAcceptRequestNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto TargetUserId = Notification -\u003e TargetUserIdValue ; }); ez . friend . accept_request_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var target_user_id = notification . target_user_id ) OnRejectRequestNotification 친구 요청이 거절되었을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID targetUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Friend . OnRejectRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var targetUserId = notification . TargetUserId ; }; gs2 . Friend . OnRejectRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var targetUserId = notification . TargetUserId ; }; Gs2 -\u003e Friend -\u003e OnRejectRequestNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto TargetUserId = Notification -\u003e TargetUserIdValue ; }); ez . friend . reject_request_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var target_user_id = notification . target_user_id ) OnDeleteFriendNotification 친구가 삭제되었을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID fromUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Friend . OnDeleteFriendNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var fromUserId = notification . FromUserId ; }; gs2 . Friend . OnDeleteFriendNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var fromUserId = notification . FromUserId ; }; Gs2 -\u003e Friend -\u003e OnDeleteFriendNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto FromUserId = Notification -\u003e FromUserIdValue ; }); ez . friend . delete_friend_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var from_user_id = notification . from_user_id ) OnReceiveRequestNotification 친구 요청을 받았을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID fromUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Friend . OnReceiveRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var fromUserId = notification . FromUserId ; }; gs2 . Friend . OnReceiveRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var fromUserId = notification . FromUserId ; }; Gs2 -\u003e Friend -\u003e OnReceiveRequestNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto FromUserId = Notification -\u003e FromUserIdValue ; }); ez . friend . receive_request_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var from_user_id = notification . from_user_id ) OnCancelRequestNotification 받은 친구 요청이 취소되었을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID fromUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Friend . OnCancelRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var fromUserId = notification . FromUserId ; }; gs2 . Friend . OnCancelRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var fromUserId = notification . FromUserId ; }; Gs2 -\u003e Friend -\u003e OnCancelRequestNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto FromUserId = Notification -\u003e FromUserIdValue ; }); ez . friend . cancel_request_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var from_user_id = notification . from_user_id )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Friend SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Friend SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/friend/game_engine/"},{"content":"모델 EzWebSocketSession WebSocketSession WebSocket 세션은 GS2 서버와 클라이언트 간의 지속적인 연결로, 실시간 양방향 통신을 수행합니다. 서버에 대해 클라이언트 측에서 식별자로 사용자 ID를 등록합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 connectionId string  ~ 128자 커넥션 ID 이 WebSocket 접속에 할당된 고유 식별자입니다. 알림 송신 시 특정 클라이언트 접속을 식별하는 데 사용됩니다. namespaceName string  ~ 128자 네임스페이스 이름 userId string  ~ 128자 사용자ID 메서드 setUserId 서버로부터의 푸시 알림을 수신하기 위해 플레이어의 접속을 등록한다 현재 WebSocket 접속을 플레이어의 사용자 ID에 연결하여, 서버가 이 클라이언트에 실시간 푸시 알림을 전송할 수 있도록 합니다. 일반적으로 플레이어가 로그인하여 서버에 접속한 직후에 호출합니다. 이 단계를 거치지 않으면 서버는 어느 접속이 어느 플레이어의 것인지 판별할 수 없습니다. allowConcurrentAccess 플래그로 동일한 플레이어가 여러 디바이스에서 동시에 접속할 수 있는지를 제어합니다: true: 여러 동시 접속을 허용(스마트폰과 태블릿 양쪽에서 플레이하는 경우 등) false: 플레이어당 1개의 접속만 허용(중복 로그인 방지. 기존 접속은 연결 해제됩니다) 게임의 로그인·초기화 흐름의 일부로 사용합니다. 실시간 채팅 알림, 친구 요청 알림, 매치메이킹 성사 알림 등의 기능을 활성화하는 데 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 gameSession GameSession  GameSession allowConcurrentAccess bool true 동시에 다른 클라이언트로부터의 접속을 허용할지 여부 sessionId string {allowConcurrentAccess} == false ~ 128자 allowConcurrentAccess를 false로 설정한 경우에도, 기존 접속과 동일한 sessionId라면 접속을 허용하기 위해 지정합니다. Result 타입 설명 item EzWebSocketSession 갱신한 WebSocket 세션 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Gateway . Namespace ( namespaceName : \"$hash\" ). Me ( gameSession : GameSession ). WebSocketSession ( ); var result = await domain . SetUserIdAsync ( allowConcurrentAccess : true , sessionId : null ); var item = await result . ModelAsync (); var domain = gs2 . Gateway . Namespace ( namespaceName : \"$hash\" ). Me ( gameSession : GameSession ). WebSocketSession ( ); var future = domain . SetUserIdFuture ( allowConcurrentAccess : true , sessionId : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Gateway -\u003e Namespace ( \"$hash\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e WebSocketSession ( ); const auto Future = Domain -\u003e SetUserId ( true // allowConcurrentAccess // sessionId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . gateway . namespace_ ( \"$hash\" ) . me ( game_session ) . web_socket_session ( ) var async_result = await domain . set_user_id ( true , # allow_concurrent_access null # session_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Gateway SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Gateway SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/gateway/game_engine/"},{"content":"모델 EzStatus 스테이터스 스테이터스란 프로퍼티 ID마다 존재하는 엔티티로, 현재 그레이드의 값을 보유합니다. 프로퍼티 ID란 스테이터스 고유의 ID로, 개발자가 임의의 값을 설정할 수 있습니다. 연동되는 GS2-Experience의 프로퍼티 ID와 완전히 일치하는 값을 사용할 것을 강력히 권장합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 1 1 ~ 9223372036854775805 현재 그레이드 이 스테이터스의 현재 그레이드 값입니다. 연동되는 GS2-Experience 모델의 랭크 캡을 결정하기 위해 그레이드 모델의 그레이드 엔트리 배열의 인덱스로 사용됩니다. 이 값이 변경되면 관련된 경험치 스테이터스의 랭크 캡이 해당 그레이드 엔트리에서 정의된 값으로 자동 갱신됩니다. EzGradeModel 그레이드 모델 그레이드 모델이란 캐릭터나 장비의 랭크를 나타내는 엔티티로, 그레이드에 따라 GS2-Experience의 랭크 캡을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 그레이드 모델 이름 그레이드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그레이드 모델과 연동시킬 GS2-Experience의 경험치 모델의 GRN입니다. 그레이드 값이 변경되면, 그레이드 엔트리의 매핑에 기반하여 연동된 경험치 모델의 랭크 캡이 자동으로 업데이트됩니다. 이를 통해 높은 그레이드가 더 높은 랭크 캡을 해제하는 그레이드 기반 성장을 구현할 수 있습니다. gradeEntries List  1 ~ 100 items 그레이드 엔트리 모델 리스트 각 그레이드 값을 연동된 GS2-Experience 모델의 랭크 캡에 매핑하는 그레이드 엔트리의 순서가 있는 리스트입니다. 배열의 인덱스가 그레이드 값에 대응하므로, 첫 번째 항목(인덱스 0)이 그레이드 0의 랭크 캡을, 두 번째 항목이 그레이드 1의 랭크 캡을 정의합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 리스트 그레이드를 기반으로 보상량을 스케일링하기 위한 이름이 지정된 배율 테이블의 컬렉션입니다. 여러 테이블을 정의하여 서로 다른 종류의 보상(예: 경험치, 통화, 아이템)에 다른 스케일링 규칙을 적용할 수 있습니다. EzGradeEntryModel 그레이드 엔트리 모델 그레이드 값과 연동되는 GS2-Experience 모델의 랭크 캡 매핑을 정의합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rankCapValue long  0 ~ 9223372036854775805 랭크 캡 값 이 그레이드가 적용되었을 때 연동된 GS2-Experience 모델에 설정할 랭크 캡 값입니다. 플레이어의 그레이드가 이 항목에 대응하는 값으로 변경되면, 관련된 경험치 스테이터스의 랭크 캡이 이 값으로 자동 업데이트되어 도달 가능한 최대 랭크가 제어됩니다. EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzAcquireActionRate 보상 가산 테이블 현재 그레이드 값을 기준으로 보상량을 조정하는 이름이 지정된 배율 테이블을 정의합니다. 각 그레이드 값은 트랜잭션의 입수 액션에 적용되는 배율에 매핑되며, 그레이드가 높은 캐릭터나 장비일수록 더 많은 보상을 받을 수 있습니다. 표준적인 배정밀도 부동소수점수 모드와, 매우 큰 값에 대응하는 빅 넘버 모드를 모두 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보상 가산 테이블 이름 그레이드 모델 내에서 이 배율 테이블을 고유하게 식별하는 이름입니다. 트랜잭션의 특정 입수 액션에 그레이드 기반 보상 스케일링을 적용할 때 참조됩니다. mode 문자열 열거형 enum {   “double”,   “big” } “double” 보상 가산 테이블 종류 배율 값의 수치 정밀도 모드를 선택합니다. “double” 모드는 대부분의 경우에 적합한 표준 부동소수점수를 사용합니다. “big” 모드는 최대 1024자리까지의 문자열 표현 숫자를 사용하여, 매우 큰 값 계산이 필요한 게임에 대응합니다. 정의 설명 double 2^48 미만의 부동소수점 수 big 문자열 표기로 1024자리 미만의 부동소수점 수 rates List {mode} == “double” ※ 1 ~ 1000 items 그레이드별 배율 리스트 (double 모드) 그레이드 값으로 인덱싱된 보상 배율의 배열로, 배정밀도 부동소수점수를 사용합니다. 인덱스 0의 항목이 그레이드 0의 배율, 인덱스 1이 그레이드 1의 배율이 됩니다. mode가 “double\"로 설정된 경우에 사용됩니다. ※ mode이(가) “double” 이면 필수 bigRates List {mode} == “big” ※ 1 ~ 1000 items 그레이드별 배율 리스트 (big 모드) 그레이드 값으로 인덱싱된 보상 배율의 배열로, 확장된 정밀도를 위해 문자열 표현 숫자를 사용합니다. 인덱스 0의 항목이 그레이드 0의 배율, 인덱스 1이 그레이드 1의 배율이 됩니다. 매우 큰 수치 계산이 필요한 게임을 위해 mode가 “big\"으로 설정된 경우에 사용됩니다. ※ mode이(가) “big” 이면 필수 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getGradeModel 이름을 지정하여 한계돌파·각성 모델 가져오기 이름을 지정하여 그레이드 모델을 1건 가져옵니다. 가져올 수 있는 정보에는 그레이드 엔트리(각 그레이드에서 최대 레벨이 어떻게 변하는지의 정의), 기본 초기 그레이드, 보상 배율 레이트가 포함됩니다. 특정 한계돌파 시스템의 상세 정보를 표시할 때 사용합니다. 예를 들어 「철의 검: 그레이드 2 → 최대 Lv 70, 그레이드 3 → 최대 Lv 80」이나 「현재 보상 보너스: x1.5」와 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string  ~ 128자 그레이드 모델 이름 그레이드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzGradeModel 그레이드 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). GradeModel ( gradeName : \"grade-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). GradeModel ( gradeName : \"grade-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GradeModel ( \"grade-0001\" // gradeName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . grade . namespace_ ( \"namespace-0001\" ) . grade_model ( \"grade-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). GradeModel ( gradeName : \"grade-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). GradeModel ( gradeName : \"grade-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GradeModel ( \"grade-0001\" // gradeName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Grade :: Model :: FGradeModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . grade . namespace_ ( \"namespace-0001\" ) . grade_model ( \"grade-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listGradeModels 한계돌파·각성 모델 목록 가져오기 이 네임스페이스에 등록된 모든 그레이드 모델을 가져옵니다. 그레이드 모델은 「한계돌파」나 「각성」의 구조를 정의합니다. 플레이어가 그레이드를 올림으로써 아이템이나 캐릭터의 최대 레벨(랭크 캡)이 얼마나 올라가는지를 제어합니다. 예를 들어, 그레이드 0의 무기는 최대 레벨이 50이지만, 한계돌파하여 그레이드 1이 되면 최대 레벨이 60으로, 그레이드 2에서 70으로… 이렇게 올라갑니다. 보상 배율 레이트도 정의할 수 있어, 그레이드 레벨에 따라 보상량을 늘릴 수 있습니다(예: 그레이드 3의 캐릭터는 골드 획득량 1.5배). 한계돌파·각성 UI를 구축하는 데 사용합니다. 예를 들어 「그레이드 2/5 — 최대 Lv: 70 — 다음: 동일 캐릭터 3체 필요」와 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 그레이드 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . GradeModelsAsync ( ). ToListAsync (); var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . GradeModels ( ); List EzGradeModel \u003e items = new List EzGradeModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e GradeModels ( ); TArray Gs2 :: UE5 :: Grade :: Model :: FEzGradeModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGradeModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGradeModels ( callbackId ); var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGradeModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGradeModels ( callbackId ); const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeGradeModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeGradeModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. applyRankCap 현재 한계돌파 그레이드에 맞춰 최대 레벨을 동기화하기 GS2-Experience의 최대 레벨(랭크 캡)을 현재 그레이드(한계돌파 레벨)에 맞춰 업데이트합니다. 예를 들어, 캐릭터가 그레이드 2(최대 Lv 70)에서 그레이드 3(최대 Lv 80)으로 한계돌파된 경우, 이를 호출하면 Experience 시스템에 새로운 최대 레벨이 80이라는 것이 반영됩니다. 그레이드가 외부에서 변경되어 Experience의 최대 레벨과 동기화할 필요가 있을 때 유용합니다. 일반적으로 그레이드 변경 시 최대 레벨은 자동으로 업데이트되지만, 데이터가 어긋난 경우 수동으로 호출할 수도 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. Result 타입 설명 item EzStatus 상태 experienceNamespaceName string GS2-Experience 네임스페이스 이름 experienceStatus EzStatus 랭크 캡 갱신 후의 GS2-Experience 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( gradeName : \"grade-0001\" , propertyId : \"property-0001\" ); var result = await domain . ApplyRankCapAsync ( ); var item = await result . ModelAsync (); var experienceNamespaceName = result . ExperienceNamespaceName ; var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( gradeName : \"grade-0001\" , propertyId : \"property-0001\" ); var future = domain . ApplyRankCapFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var experienceNamespaceName = future . Result . ExperienceNamespaceName ; const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"grade-0001\" , // gradeName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e ApplyRankCap ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto ExperienceNamespaceName = Result -\u003e ExperienceNamespaceName ; var domain = ez . grade . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"grade-0001\" , \"property-0001\" ) var async_result = await domain . apply_rank_cap ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getStatus 특정 아이템이나 캐릭터의 한계돌파·각성 상태 가져오기 플레이어가 보유한 특정 프로퍼티의 현재 그레이드(한계돌파 레벨)를 가져옵니다. 프로퍼티는 그레이드 모델 이름(어떤 한계돌파 시스템을 사용할지)과 프로퍼티 ID(어떤 아이템이나 캐릭터인지)로 식별합니다. 한계돌파 상세 화면을 표시할 때 사용합니다. 예를 들어 “철의 검 — 그레이드: ★3 — 최대 Lv: 80 — 다음 한계돌파에는 2개 더 필요\"와 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. Result 타입 설명 item EzStatus 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( gradeName : \"grade-0001\" , propertyId : \"property-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( gradeName : \"grade-0001\" , propertyId : \"property-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"grade-0001\" , // gradeName \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . grade . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"grade-0001\" , \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( gradeName : \"grade-0001\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( gradeName : \"grade-0001\" , propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"grade-0001\" , // gradeName \"property-0001\" // propertyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Grade :: Model :: FStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . grade . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"grade-0001\" , \"property-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listStatuses 플레이어의 한계돌파·각성 상태 목록 가져오기 플레이어가 보유한 아이템이나 캐릭터의 현재 그레이드(한계돌파 레벨)를 가져옵니다. 그레이드 모델 이름으로 필터링할 수도 있습니다. 생략하면 모든 그레이드 타입의 상태가 반환됩니다. 각 상태에는 현재 그레이드 값과 그것이 어느 프로퍼티(아이템이나 캐릭터)에 속하는지가 포함됩니다. 한계돌파를 완료한 아이템의 목록을 표시하는 데 사용합니다. 예를 들어 “철의 검 ★3, 불의 지팡이 ★1, 용의 갑옷 ★5\"와 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string ~ 128자 그레이드 모델명 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . StatusesAsync ( gradeName : \"grade-0001\" ). ToListAsync (); var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Statuses ( gradeName : \"grade-0001\" ); List EzStatus \u003e items = new List EzStatus \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Statuses ( \"grade-0001\" // gradeName ); TArray Gs2 :: UE5 :: Grade :: Model :: FEzStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStatuses ( callbackId ); var domain = gs2 . Grade . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStatuses ( callbackId ); const auto Domain = Gs2 -\u003e Grade -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeStatuses ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeStatuses ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Grade SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Grade SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/grade/game_engine/"},{"content":"모델 EzGuild 길드 길드는 최대 5개의 속성을 가질 수 있으며, 길드 검색이나 길드 목록 표시 시 이용할 수 있습니다. 길드에는 참가 정책을 설정할 수 있으며, 자유 참가와 승인제를 선택할 수 있습니다. 자유 참가를 선택한 경우, 길드에 참가 요청을 하면 즉시 길드 멤버가 됩니다. 승인제를 선택한 경우, 길드에 참가 요청을 하면 길드 마스터 또는 길드 멤버가 승인할 때까지 길드 멤버가 되지 않습니다. 길드 멤버에게는 역할을 설정할 수 있으며, 길드 마스터, 길드 멤버에 더해 길드가 독자적으로 정의한 최대 10개의 커스텀 역할을 설정할 수 있습니다. 길드 멤버는 길드에 참가했을 때 기본으로 부여되는 역할을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. displayName string  ~ 64자 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. attribute1 int 0 ~ 2147483645 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. attribute2 int 0 ~ 2147483645 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute3 int 0 ~ 2147483645 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute4 int 0 ~ 2147483645 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute5 int 0 ~ 2147483645 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. metadata string ~ 1024자 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. joinPolicy 문자열 열거형 enum {   “anybody”,   “approval” }  참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다. 정의 설명 anybody 자유 참가 approval 승인제 customRoles List [] 0 ~ 10 items 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. members List [] 0 ~ 100 items 길드 멤버 목록 길드 마스터와 일반 멤버를 포함한, 이 길드의 모든 현재 멤버 목록입니다. 각 항목에는 멤버의 사용자 ID, 할당된 역할, 메타데이터, 참가 타임스탬프가 포함됩니다. 멤버 수는 currentMaximumMemberCount 를 초과할 수 없습니다. EzReceiveMemberRequest 받은 참가 요청 멤버 등록 신청을 접수한 상태임을 나타내는 엔티티입니다. 해당 길드가 받은 참가 요청입니다. 해당 길드가 승인하면 참가 요청은 삭제되고 멤버 목록에 등록됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자 ID 이 길드에 참가 요청을 보낸 플레이어의 GS2 사용자 ID입니다. 신청자를 식별하며, 승인 시 길드의 멤버 목록에 추가하거나 거부 시 통지하기 위해 사용됩니다. targetGuildName string  ~ 128자 대상 길드명 이 참가 요청을 수신한 길드의 고유한 이름(UUID)입니다. 이 보류 중인 요청을 수신함에 가지고 있는 특정 길드 인스턴스를 식별하며, 길드의 멤버 관리 조작과 요청을 대조하기 위해 사용됩니다. EzSendMemberRequest 송신한 참가 요청 멤버 등록을 신청 중인 상태를 나타내는 엔티티입니다. 해당 사용자가 길드에 대해 송신한 참가 요청입니다. 대상 길드가 승인하면 참가 요청은 삭제되고 멤버 목록에 등록됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자 ID 이 길드 참가 요청을 송신한 플레이어의 GS2 사용자 ID입니다. 요청을 보낸 사용자를 식별하며, 승인 시 길드의 멤버 목록에 추가하기 위해 사용됩니다. targetGuildName string  ~ 128자 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. EzJoinedGuild 가입 중인 길드 특정 길드에 대한 사용자의 멤버십을 나타냅니다. 사용자가 길드에 가입할 때(직접 가입 또는 신청 승인) 생성되며, 사용자가 탈퇴 또는 추방될 때 삭제됩니다. 사용자가 현재 어느 길드에 소속되어 있는지를 추적하여 maxConcurrentJoinGuilds 제한의 적용을 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 guildModelName string  ~ 128자 길드 모델 이름 가입 중인 길드가 속한 길드 모델의 이름입니다. 멤버십 제한, 롤 설정, 기타 길드 타입 설정을 포함하는 길드 모델 정의를 참조합니다. guildName string  ~ 128자 길드 이름 사용자가 가입한 길드의 고유한 이름(UUID)입니다. 길드 모델 내의 특정 길드 인스턴스를 식별하기 위해 사용됩니다. userId string  ~ 128자 사용자ID createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzIgnoreUser 거부 사용자 특정 길드에 대한 가입이 차단된 사용자를 나타냅니다. 사용자가 거부 리스트에 추가되면 참가 신청이 자동으로 거부되며, 가입 정책이 자유 가입으로 설정되어 있어도 길드에 가입할 수 없습니다. 길드 마스터가 원치 않는 멤버를 관리하기 위해 사용합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID EzLastGuildMasterActivity 마지막 길드 마스터 활동 길드 내에서 길드 마스터가 마지막으로 활동을 수행한 일시를 추적합니다. 이 타임스탬프는 비활성 기반 계승 시스템에서 사용됩니다. 길드 모델에서 설정된 inactivityPeriodDays가 길드 마스터의 활동 없이 경과하면, 리더십을 다른 멤버에게 자동으로 이양할 수 있습니다. 각 길드는 길드 마스터가 길드 조작을 수행할 때마다 업데이트되는 하나의 활동 기록을 가집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzGuildModel 길드 모델 길드 모델이란 길드에 가입 가능한 최대 인원수 설정 및 길드 내 직책별 권한 설정을 가지는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultMaximumMemberCount int  1 ~ 2147483646 기본 최대 멤버 수 새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다. maximumMemberCount int  1 ~ 2147483646 최대 멤버 수 상한 길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다. roles List  1 ~ 10 items 롤 모델 리스트 이 타입의 길드 내에서 이용 가능한 롤 정의 리스트입니다. guildMasterRole 및 guildMemberDefaultRole에서 참조되는 롤을 최소한 포함해야 합니다. 각 롤은 정책 문서를 통해 고유한 권한 집합을 정의합니다. 최대 10개의 롤을 정의할 수 있습니다. rejoinCoolTimeMinutes int 0 0 ~ 2147483646 재가입 쿨타임(분) 사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다. EzRoleModel 롤 모델 롤 모델은 길드 내에서의 역할을 정의하고, 각 역할별로 실행할 수 있는 처리에 관한 권한을 설정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. policyDocument string  ~ 10240자 정책 문서 이 역할의 권한을 정의하는 JSON 형식의 정책 문서입니다. 이 역할에 할당된 멤버에 대해 어떤 길드 조작(참가 요청 승인/거부, 멤버 추방, 길드 정보 업데이트, 멤버 역할 변경 등)이 허용되거나 거부되는지를 지정합니다. EzMember 멤버 길드 멤버 목록을 관리하는 엔티티 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID roleName string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. joinedAt long ※ 현재 시각 참가 일시 UNIX 시간·밀리초 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getGuildModel 이름을 지정하여 길드 타입 정의를 취득한다 이름을 지정하여 길드 모델을 1건 취득합니다. 취득할 수 있는 정보에는 멤버 상한, 역할 정의와 그 권한, 가입 방식 설정, 재가입 쿨다운 기간, 비활성 길드 마스터의 승계 설정이 포함됩니다. 특정 길드 타입의 규칙을 표시할 때 사용합니다. 예를 들어 길드 생성 화면이나 상세 화면에서 “최대 멤버: 30명, 가입: 승인제, 역할: 마스터 / 부길드장 / 멤버\"와 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzGuildModel 길드 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildModel ( guildModelName : \"guild-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildModel ( guildModelName : \"guild-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildModel ( \"guild-0001\" // guildModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_model ( \"guild-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildModel ( guildModelName : \"guild-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildModel ( guildModelName : \"guild-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildModel ( \"guild-0001\" // guildModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Guild :: Model :: FGuildModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_model ( \"guild-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listGuildModels 길드 타입 정의 목록을 취득한다 이 네임스페이스에 등록된 모든 길드 모델을 취득합니다. 길드 모델은 길드의 규칙을 정의합니다. 최대 멤버 수, 역할 권한(예: “부길드장은 멤버를 추방할 수 있다”), 가입 방식(자유 가입/승인제), 재가입 쿨다운, 플레이어가 동시에 소속될 수 있는 길드 수 등입니다. 길드 마스터가 장기간 로그인하지 않을 경우의 자동 교체(최고참 멤버로의 승계) 설정도 포함됩니다. 플레이어가 길드를 둘러보거나 생성할 때, 어떤 유형의 길드가 있는지 표시하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 길드 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . GuildModelsAsync ( ). ToListAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . GuildModels ( ); List EzGuildModel \u003e items = new List EzGuildModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e GuildModels ( ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzGuildModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGuildModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGuildModels ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGuildModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGuildModels ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeGuildModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeGuildModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. assume 길드의 대리로서 조작할 권한을 취득하기 길드로서 조작을 수행하기 위한 길드 액세스 토큰을 취득합니다. 길드 설정 업데이트, 참가 요청 승인, 멤버 제명 등의 조작에 필요합니다. 플레이어는 해당 길드의 멤버여야 하며, 실행할 수 있는 조작은 역할 권한에 따라 달라집니다. UpdateGuild, AcceptRequest, RejectRequest, DeleteMemberFromGuild 등의 길드 관리 API를 호출하기 전에 반드시 필요한 단계입니다. “길드 관리 모드로 전환하는” 것과 같은 이미지입니다. 이를 호출한 후, 반환된 토큰을 사용하여 이어지는 길드 조작을 수행합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. Result 타입 설명 token string 길드용 액세스 토큰 userId string 사용자ID expire long 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 NotIncludedGuildMemberException NotFoundException 길드 멤버가 아닙니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . AssumeAsync ( gatewaySetting : new GatewaySetting { gatewayNamespaceName = \"namespace-0001\" , allowConcurrentAccess = false }, guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); } catch ( Gs2 . Gs2Guild . Exception . NotIncludedGuildMemberException e ) { // You are not a member of the guild. } var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . AssumeFuture ( gatewaySetting : new GatewaySetting { gatewayNamespaceName = \"namespace-0001\" , allowConcurrentAccess = false }, guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Guild . Exception . NotIncludedGuildMemberException ) { // You are not a member of the guild. } onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e Assume ( MakeShared Gs2 :: UE5 :: Util :: FGatewaySetting \u003e ( \"namespace-0001\" , // gatewayNamespaceName false // allowConcurrentAccess ), \"guild-model-0001\" , // guildModelName \"guild-0001\" // guildName ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FNotIncludedGuildMemberError :: Class )) { // You are not a member of the guild. } return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . assume ( \"guild-model-0001\" , # guild_model_name \"guild-0001\" # guild_name ) if async_result . error != null : if async_result . error is Gs2GuildNotIncludedGuildMemberException : # 길드 멤버가 아닙니다. pass push_error ( str ( async_result . error )) return var result = async_result . result batchUpdateGuildMemberRole 여러 길드 멤버의 역할을 한꺼번에 변경하기 여러 길드 멤버의 역할을 한 번의 API 호출로 한꺼번에 업데이트합니다. 예를 들어 여러 멤버를 동시에 “임원\"으로 승격시키는 것과 같은 작업입니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 이 작업을 실행할 수 있습니다. 길드 마스터가 다수의 멤버 역할을 한 번에 재편성하고 싶을 때, 한 명씩 변경하는 대신 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할에 연결된 PolicyDocument 로 결정됩니다. 변경을 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:BatchUpdateMemberRole 권한이 필요합니다. members List  1 ~ 100 items 업데이트할 멤버 목록 Result 타입 설명 item EzGuild 업데이트한 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . BatchUpdateGuildMemberRoleAsync ( guildModelName : \"guild-model-0001\" , accessToken : null , members : new List Gs2 . Unity . Gs2Guild . Model . EzMember \u003e { new Gs2 . Unity . Gs2Guild . Model . EzMember () { UserId = \"user-0002\" , RoleName = \"role-0001\" , }, new Gs2 . Unity . Gs2Guild . Model . EzMember () { UserId = \"user-0003\" , RoleName = \"role-0002\" , }, } ); var item = await result . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . BatchUpdateGuildMemberRoleFuture ( guildModelName : \"guild-model-0001\" , accessToken : null , members : new List Gs2 . Unity . Gs2Guild . Model . EzMember \u003e { new Gs2 . Unity . Gs2Guild . Model . EzMember () { UserId = \"user-0002\" , RoleName = \"role-0001\" , }, new Gs2 . Unity . Gs2Guild . Model . EzMember () { UserId = \"user-0003\" , RoleName = \"role-0002\" , }, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e BatchUpdateGuildMemberRole ( \"guild-model-0001\" , // guildModelName nullptr , // accessToken [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Guild :: Model :: FEzMember \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Guild :: Model :: FEzMember \u003e () -\u003e WithUserId ( TOptional FString \u003e ( \"user-0002\" )) -\u003e WithRoleName ( TOptional FString \u003e ( \"role-0001\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Guild :: Model :: FEzMember \u003e () -\u003e WithUserId ( TOptional FString \u003e ( \"user-0003\" )) -\u003e WithRoleName ( TOptional FString \u003e ( \"role-0002\" )) ); return v ; }() // members ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); createGuild 길드를 신규 작성하기 플레이어를 길드 마스터(리더)로 하여 새로운 길드를 작성합니다. 길드의 표시 이름, 최대 5개의 커스텀 속성(플레이 스타일, 활동 시간, 언어 등), 메타데이터, 참가 방식(자유 참가/승인제), 커스텀 역할 정의를 설정할 수 있습니다. 길드를 작성한 플레이어는 자동으로 길드 마스터 역할을 가진 첫 번째 멤버가 됩니다. “길드 작성” 버튼이나 폼에 사용합니다. 플레이어가 새로운 길드의 이름, 규칙, 설정을 정하는 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession displayName string  ~ 64자 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. attribute1 int 0 ~ 2147483645 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. attribute2 int 0 ~ 2147483645 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute3 int 0 ~ 2147483645 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute4 int 0 ~ 2147483645 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute5 int 0 ~ 2147483645 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. metadata string ~ 1024자 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. memberMetadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. joinPolicy 문자열 열거형 enum {   “anybody”,   “approval” }  참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다. 정의 설명 anybody 자유 참가 approval 승인제 customRoles List [] 0 ~ 10 items 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. guildMemberDefaultRole string ~ 128자 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. Result 타입 설명 item EzGuild 생성한 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . CreateGuildAsync ( guildModelName : \"guild-model-0001\" , displayName : \"My Guild\" , joinPolicy : \"anybody\" , attribute1 : 1 , attribute2 : null , attribute3 : null , attribute4 : null , attribute5 : null , metadata : null , memberMetadata : null , customRoles : null , guildMemberDefaultRole : null ); var item = await result . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . CreateGuildFuture ( guildModelName : \"guild-model-0001\" , displayName : \"My Guild\" , joinPolicy : \"anybody\" , attribute1 : 1 , attribute2 : null , attribute3 : null , attribute4 : null , attribute5 : null , metadata : null , memberMetadata : null , customRoles : null , guildMemberDefaultRole : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e CreateGuild ( \"guild-model-0001\" , // guildModelName \"My Guild\" , // displayName \"anybody\" , // joinPolicy 1 // attribute1 // attribute2 // attribute3 // attribute4 // attribute5 // metadata // memberMetadata // customRoles // guildMemberDefaultRole ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . create_guild ( \"guild-model-0001\" , # guild_model_name \"My Guild\" , # display_name \"anybody\" , # join_policy 1 , # attribute1 null , # attribute2 null , # attribute3 null , # attribute4 null , # attribute5 null , # metadata null , # member_metadata null , # custom_roles null # guild_member_default_role ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result deleteGuild 길드를 해산(삭제)하기 길드를 완전히 삭제합니다. 모든 멤버가 탈퇴하며 길드는 사라집니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 일반적으로 길드 마스터만 길드를 해산할 권한을 가집니다. 길드 설정 화면의 “길드 해산” 버튼에 사용합니다. 모든 멤버에게 영향을 미치는 파괴적인 작업이므로 반드시 확인 대화상자를 표시하세요. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할에 연결된 PolicyDocument 로 결정됩니다. 삭제를 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DeleteGuild 권한이 필요합니다. Result 타입 설명 item EzGuild 삭제한 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var result = await domain . DeleteGuildAsync ( ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var future = domain . DeleteGuildFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto Future = Domain -\u003e DeleteGuild ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) var async_result = await domain . delete_guild ( guild_game_session . access_token # access_token ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result deleteMemberFromGuild 멤버를 길드에서 제명하기 지정한 플레이어를 길드의 멤버 목록에서 삭제합니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버(일반적으로 길드 마스터나 임원)만 멤버를 제명할 수 있습니다. 멤버 관리 화면의 “제명” 버튼에 사용합니다. 작업을 취소하기 어려우므로 확인 대화상자 표시를 권장합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할에 연결된 PolicyDocument 로 결정됩니다. 제명을 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DeleteMember 권한이 필요합니다. targetUserId string  ~ 128자 제명할 사용자 ID Result 타입 설명 item EzGuild 업데이트한 길드 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 GuildMasterRequiredException BadRequestException 길드 마스터 권한을 가진 멤버가 최소 1명 필요합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var result = await domain . DeleteMemberFromGuildAsync ( targetUserId : \"user-0002\" ); } catch ( Gs2 . Gs2Guild . Exception . GuildMasterRequiredException e ) { // At least one member with guild master privileges is required. } var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var future = domain . DeleteMemberFromGuildFuture ( targetUserId : \"user-0002\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Guild . Exception . GuildMasterRequiredException ) { // At least one member with guild master privileges is required. } onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto Future = Domain -\u003e DeleteMemberFromGuild ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FGuildMasterRequiredError :: Class )) { // At least one member with guild master privileges is required. } return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) var async_result = await domain . delete_member_from_guild ( guild_game_session . access_token , # access_token \"user-0002\" # target_user_id ) if async_result . error != null : if async_result . error is Gs2GuildGuildMasterRequiredException : # 길드 마스터 권한을 가진 멤버가 최소 1명 필요합니다. pass push_error ( str ( async_result . error )) return var result = async_result . result getGuild 길드의 상세 정보를 가져오기 특정 길드의 상세 정보를 가져옵니다. 표시 이름, 커스텀 속성, 메타데이터, 멤버 목록, 참가 방식 등이 포함됩니다. 반환되는 정보는 요청한 플레이어와 길드의 관계에 따라 달라집니다. 길드 멤버는 멤버 목록을 포함한 전체 정보를 볼 수 있지만, 비멤버는 공개 정보만 볼 수 있습니다. 길드 상세 화면을 표시하는 데 사용합니다. 예를 들어 “Dragon Knights — 25/30명 — 참가: 승인제\"와 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. Result 타입 설명 item EzGuild 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var item = await domain . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Guild :: Model :: FGuild \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listGuilds 참가할 수 있는 길드를 검색하기 플레이어가 참가할 수 있는 길드를 검색합니다. 표시 이름, 속성, 참가 방식으로 필터링할 수 있습니다. 최대 5개의 커스텀 속성(플레이 스타일, 언어, 활동 수준 등)과 참가 방식(자유 참가/승인제)으로 필터링할 수 있습니다. 이미 정원에 도달한 길드를 포함할지 여부도 선택할 수 있습니다. 주의: 최근 24시간 이내에 업데이트된 길드만 검색 결과에 표시됩니다. 길드를 검색 대상으로 유지하고 싶다면 변경 사항이 없어도 정기적으로 UpdateGuild를 호출하세요. “길드 찾기” 화면을 구성하여 검색 필터와 일치하는 길드 목록을 표시하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession displayName string ~ 64자 검색할 길드 표시 이름 attributes1 List 0 ~ 10 items 검색할 속성1 attributes2 List 0 ~ 10 items 검색할 속성2 attributes3 List 0 ~ 10 items 검색할 속성3 attributes4 List 0 ~ 10 items 검색할 속성4 attributes5 List 0 ~ 10 items 검색할 속성5 joinPolicies List 0 ~ 10 items 검색할 길드 참가 방법 목록 includeFullMembersGuild bool false 길드 멤버가 정원을 채운 길드를 검색 결과에 포함할지 여부 orderBy 문자열 열거형 enum {   “number_of_players”,   “attribute1_asc”,   “attribute1_desc”,   “attribute2_asc”,   “attribute2_desc”,   “attribute3_asc”,   “attribute3_desc”,   “attribute4_asc”,   “attribute4_desc”,   “attribute5_asc”,   “attribute5_desc”,   “last_updated” } “number_of_players” 정렬 순서 정의 설명 number_of_players 참가 플레이어 수 attribute1_asc 속성1 오름차순 attribute1_desc 속성1 내림차순 attribute2_asc 속성2 오름차순 attribute2_desc 속성2 내림차순 attribute3_asc 속성3 오름차순 attribute3_desc 속성3 내림차순 attribute4_asc 속성4 오름차순 attribute4_desc 속성4 내림차순 attribute5_asc 속성5 오름차순 attribute5_desc 속성5 내림차순 last_updated 최종 갱신 일시 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 길드 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . SearchGuildsAsync ( guildModelName : \"guild-model-0001\" ). ToListAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . SearchGuilds ( guildModelName : \"guild-model-0001\" ); List EzGuild \u003e items = new List EzGuild \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e SearchGuilds ( \"guild-model-0001\" // guildModelName ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzGuildPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . search_guilds ( \"guild-model-0001\" , # guild_model_name null , # display_name null , # attributes1 null , # attributes2 null , # attributes3 null , # attributes4 null , # attributes5 null , # join_policies null , # include_full_members_guild null # order_by ) . load () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result updateGuild 길드의 설정을 업데이트하기 길드의 표시 이름, 커스텀 속성, 메타데이터, 참가 방식, 역할 정의를 업데이트합니다. 이 API는 길드로서 호출합니다. 먼저 Assume으로 길드의 액세스 토큰을 취득한 후 호출하세요. 적절한 역할 권한을 가진 멤버만 길드 설정을 업데이트할 수 있습니다. 또한 이를 정기적으로 호출하면 길드가 검색 결과에 계속 표시됩니다(24시간 동안 업데이트가 없는 길드는 검색에서 숨겨집니다). “길드 설정” 화면에 사용합니다. 임원이나 길드 마스터가 길드 이름, 설명, 모집 방침을 변경하는 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할에 연결된 PolicyDocument 로 결정됩니다. 업데이트를 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:UpdateGuild 권한이 필요합니다. displayName string  ~ 64자 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. attribute1 int 0 ~ 2147483645 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. attribute2 int 0 ~ 2147483645 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute3 int 0 ~ 2147483645 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute4 int 0 ~ 2147483645 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute5 int 0 ~ 2147483645 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. metadata string ~ 1024자 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. joinPolicy 문자열 열거형 enum {   “anybody”,   “approval” }  참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다. 정의 설명 anybody 자유 참가 approval 승인제 customRoles List [] 0 ~ 10 items 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. guildMemberDefaultRole string ~ 128자 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. Result 타입 설명 item EzGuild 업데이트한 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var result = await domain . UpdateGuildAsync ( displayName : \"My Guild\" , joinPolicy : \"anybody\" , attribute1 : 1 , attribute2 : null , attribute3 : null , attribute4 : null , attribute5 : null , metadata : null , customRoles : null , guildMemberDefaultRole : null ); var item = await result . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var future = domain . UpdateGuildFuture ( displayName : \"My Guild\" , joinPolicy : \"anybody\" , attribute1 : 1 , attribute2 : null , attribute3 : null , attribute4 : null , attribute5 : null , metadata : null , customRoles : null , guildMemberDefaultRole : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto Future = Domain -\u003e UpdateGuild ( \"My Guild\" , // displayName \"anybody\" , // joinPolicy 1 // attribute1 // attribute2 // attribute3 // attribute4 // attribute5 // metadata // customRoles // guildMemberDefaultRole ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) var async_result = await domain . update_guild ( guild_game_session . access_token , # access_token \"My Guild\" , # display_name \"anybody\" , # join_policy 1 , # attribute1 null , # attribute2 null , # attribute3 null , # attribute4 null , # attribute5 null , # metadata null , # custom_roles null # guild_member_default_role ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result updateGuildMemberRole 길드 멤버의 역할을 변경하기 특정 길드 멤버의 역할을 변경합니다. 예를 들어 멤버를 “임원\"으로 승격시키거나, 임원을 “멤버\"로 강등시킬 수 있습니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 다른 멤버의 역할을 변경할 수 있습니다. “멤버 관리” 화면에 사용합니다. 길드 마스터나 임원이 멤버를 승격·강등시키는 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할에 연결된 PolicyDocument 로 결정됩니다. 역할 업데이트를 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:UpdateMemberRole 권한이 필요합니다. targetUserId string  ~ 128자 업데이트할 사용자 ID roleName string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzGuild 업데이트한 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var result = await domain . UpdateGuildMemberRoleAsync ( targetUserId : \"user-0002\" , roleName : \"role-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var future = domain . UpdateGuildMemberRoleFuture ( targetUserId : \"user-0002\" , roleName : \"role-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto Future = Domain -\u003e UpdateGuildMemberRole ( \"user-0002\" , // targetUserId \"role-0001\" // roleName ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) var async_result = await domain . update_guild_member_role ( guild_game_session . access_token , # access_token \"user-0002\" , # target_user_id \"role-0001\" # role_name ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result acceptRequest 플레이어의 가입 신청을 승인한다 보류 중인 가입 신청을 승인하여, 신청한 플레이어를 길드의 멤버 목록에 추가합니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 가입 신청을 승인할 수 있습니다. 승인 후 플레이어는 길드 모델에 정의된 기본 역할로 길드 멤버가 됩니다. 가입 신청 상세 화면이나 목록 화면의 “승인” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 승인하려면 해당 역할의 PolicyDocument 에 Gs2Guild:AcceptRequest 권한이 필요합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. fromUserId string  ~ 128자 사용자ID Result 타입 설명 item EzReceiveMemberRequest 수락한 참가 요청 guild EzGuild 길드 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 MaximumJoinedGuildsReachedException BadRequestException 길드 동시 참가 수가 최댓값에 도달했습니다. MaximumMembersReachedException BadRequestException 멤버 수가 상한에 도달했습니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : GuildGameSession ). ReceiveMemberRequest ( fromUserId : null ); var result = await domain . AcceptRequestAsync ( ); } catch ( Gs2 . Gs2Guild . Exception . MaximumJoinedGuildsReachedException e ) { // The number of guilds you can join at the same time has reached the upper limit. } catch ( Gs2 . Gs2Guild . Exception . MaximumMembersReachedException e ) { // The number of members has reached the upper limit. } var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : GuildGameSession ). ReceiveMemberRequest ( fromUserId : null ); var future = domain . AcceptRequestFuture ( ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Guild . Exception . MaximumJoinedGuildsReachedException ) { // The number of guilds you can join at the same time has reached the upper limit. } if ( future . Error is Gs2 . Gs2Guild . Exception . MaximumMembersReachedException ) { // The number of members has reached the upper limit. } onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // GuildGameSession ) -\u003e ReceiveMemberRequest ( nullptr // fromUserId ); const auto Future = Domain -\u003e AcceptRequest ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FMaximumJoinedGuildsReachedError :: Class )) { // The number of guilds you can join at the same time has reached the upper limit. } if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FMaximumMembersReachedError :: Class )) { // The number of members has reached the upper limit. } return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-0001\" , guild_game_session ) . receive_member_request ( null ) var async_result = await domain . accept_request ( guild_game_session . access_token # access_token ) if async_result . error != null : if async_result . error is Gs2GuildMaximumJoinedGuildsReachedException : # 길드 동시 참가 수가 최댓값에 도달했습니다. pass if async_result . error is Gs2GuildMaximumMembersReachedException : # 멤버 수가 상한에 도달했습니다. pass push_error ( str ( async_result . error )) return var result = async_result . result getReceiveRequest 특정 가입 신청의 상세 정보를 취득한다 발신자의 사용자 ID를 지정하여, 길드가 받은 특정 가입 신청의 상세 정보를 취득합니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 가입 신청 상세 화면을 표시하는 데 사용합니다. 예를 들어 신청자의 프로필, 메시지, “승인” / “거부” 버튼을 표시하는 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 취득하려면 해당 역할의 PolicyDocument 에 Gs2Guild:GetReceiveRequest 권한이 필요합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. fromUserId string  ~ 128자 사용자ID Result 타입 설명 item EzReceiveMemberRequest 참가 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : GuildGameSession ). ReceiveMemberRequest ( fromUserId : null ); var item = await domain . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : GuildGameSession ). ReceiveMemberRequest ( fromUserId : null ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // GuildGameSession ) -\u003e ReceiveMemberRequest ( nullptr // fromUserId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-0001\" , guild_game_session ) . receive_member_request ( null ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : GuildGameSession ). ReceiveMemberRequest ( fromUserId : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : GuildGameSession ). ReceiveMemberRequest ( fromUserId : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // GuildGameSession ) -\u003e ReceiveMemberRequest ( nullptr // fromUserId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Guild :: Model :: FReceiveMemberRequest \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-0001\" , guild_game_session ) . receive_member_request ( null ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listReceiveRequests 길드가 받은 가입 신청 목록을 취득한다 플레이어들이 이 길드에 보낸, 보류 중인 가입 신청을 모두 취득합니다. 이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득해야 합니다). 각 신청에는 발신자와 첨부된 메시지 또는 메타데이터가 포함됩니다. 길드 관리 패널의 “가입 신청” 화면을 구성하는 데 사용합니다. 예를 들어 “PlayerA가 가입을 희망(메시지: Lv50 힐러, 매일 접속)“과 같은 목록을 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 목록을 취득하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DescribeReceiveRequests 권한이 필요합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가 요청 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : GuildGameSession ); var items = await domain . ReceiveRequestsAsync ( ). ToListAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-0001\" , guildGameSession : GuildGameSession ); var it = domain . ReceiveRequests ( ); List EzReceiveMemberRequest \u003e items = new List EzReceiveMemberRequest \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto It = Domain -\u003e ReceiveRequests ( ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzReceiveMemberRequestPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } rejectRequest 플레이어의 가입 신청을 거부한다 보류 중인 가입 신청을 거부합니다. 신청한 플레이어는 길드에 추가되지 않습니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 가입 신청을 거부할 수 있습니다. 거부된 플레이어는 길드의 차단 목록(IgnoreUser)에 추가되지 않은 한, 나중에 다시 가입 신청을 보낼 수 있습니다. 가입 신청 상세 화면이나 목록 화면의 “거부” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 거부하려면 해당 역할의 PolicyDocument 에 Gs2Guild:RejectRequest 권한이 필요합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. fromUserId string  ~ 128자 사용자ID Result 타입 설명 item EzReceiveMemberRequest 거부한 참가 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession (, guildGameSession : GuildGameSession ). ReceiveMemberRequest ( guildModelName : null , fromUserId : \"user-0002\" ); var result = await domain . RejectRequestAsync ( ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession (, guildGameSession : GuildGameSession ). ReceiveMemberRequest ( guildModelName : null , fromUserId : \"user-0002\" ); var future = domain . RejectRequestFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( GuildGameSession // GuildGameSession ) -\u003e ReceiveMemberRequest ( nullptr , // guildModelName \"user-0002\" // fromUserId ); const auto Future = Domain -\u003e RejectRequest ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( null , guild_game_session ) . receive_member_request ( \"user-0002\" ) var async_result = await domain . reject_request ( guild_game_session . access_token # access_token ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result cancelRequest 플레이어가 전송한 가입 신청을 취소한다 플레이어가 이전에 길드에 보낸, 보류 중인 가입 신청을 취소(철회)합니다. 취소 후 신청은 플레이어의 전송 신청 목록과 길드의 수신 신청 목록 양쪽에서 모두 삭제됩니다. 취소 후에는 같은 길드에 새로운 가입 신청을 다시 보낼 수 있습니다. 신청 중인 요청 상세 화면의 “신청 취소”, “요청 철회” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. Result 타입 설명 item EzSendMemberRequest 삭제된 참가 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . CancelRequestAsync ( guildModelName : \"guild-0002\" , targetGuildName : \"guild-0002\" ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . CancelRequestFuture ( guildModelName : \"guild-0002\" , targetGuildName : \"guild-0002\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e CancelRequest ( \"guild-0002\" , // guildModelName \"guild-0002\" // targetGuildName ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . cancel_request ( \"guild-0002\" , # guild_model_name \"guild-0002\" # target_guild_name ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getSendRequest 플레이어가 전송한 가입 신청의 상세 정보를 취득한다 플레이어가 길드에 전송한 특정 가입 신청의 상세 정보를 취득합니다. 취득할 수 있는 정보에는 신청 대상 길드와 신청에 첨부된 메타데이터(메시지)가 포함됩니다. 신청 중인 요청의 상세 정보를 표시하는 데 사용합니다. 예를 들어 “드래곤 나이츠에 신청 중 — 메시지: Lv50 힐러\"와 “취소” 버튼을 표시하는 화면에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. Result 타입 설명 item EzSendMemberRequest 참가 요청 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendMemberRequest ( guildModelName : \"guild-0002\" , guildName : null ); var item = await domain . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendMemberRequest ( guildModelName : \"guild-0002\" , guildName : null ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SendMemberRequest ( \"guild-0002\" , // guildModelName nullptr // guildName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . send_member_request ( \"guild-0002\" , null ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendMemberRequest ( guildModelName : \"guild-0002\" , guildName : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SendMemberRequest ( guildModelName : \"guild-0002\" , guildName : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SendMemberRequest ( \"guild-0002\" , // guildModelName nullptr // guildName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Guild :: Model :: FSendMemberRequest \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . send_member_request ( \"guild-0002\" , null ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSendRequests 플레이어가 전송한 가입 신청 목록을 취득한다 플레이어가 각 길드에 전송한, 아직 보류 중인 가입 신청을 모두 취득합니다. 각 항목에는 신청을 보낸 길드와 신청에 첨부된 메타데이터(메시지)가 포함됩니다. “신청 중”, “보류 중인 신청” 화면을 구성하는 데 사용합니다. 예를 들어 “드래곤 나이츠에 신청 중(보류), 스타 얼라이언스에 신청 중(보류)“와 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . SendRequestsAsync ( guildModelName : \"guild-0002\" ). ToListAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . SendRequests ( guildModelName : \"guild-0002\" ); List EzSendMemberRequest \u003e items = new List EzSendMemberRequest \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e SendRequests ( \"guild-0002\" // guildModelName ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzSendMemberRequestPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } sendRequest 길드에 가입 신청을 전송한다 지정한 길드에 가입 신청을 전송합니다. 길드의 가입 방식이 “자유 가입\"인 경우 즉시 가입되며, “승인제\"인 경우 길드의 수신함에 심사 대기 상태로 전달됩니다. 신청에 메타데이터(예: “Lv50 힐러, 레이드 그룹을 찾고 있습니다” 같은 메시지)를 첨부할 수 있습니다. 플레이어가 길드의 차단 목록(IgnoreUser)에 등록되어 있는 경우 신청은 자동으로 거부됩니다. 길드 상세 화면의 “가입 신청”, “참가 신청” 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 전송 대상 길드 이름 metadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. Result 타입 설명 item EzGuild 참가한 길드 승인이 필요하지 않은 길드에 참가했을 때 응답됩니다 sendMemberRequest EzSendMemberRequest 보낸 참가 요청 승인이 필요한 길드에 참가 요청을 보냈을 때 응답됩니다 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 MaximumMembersReachedException BadRequestException 멤버 수가 상한에 도달했습니다. MaximumJoinedGuildsReachedException BadRequestException 길드 동시 참가 수가 최댓값에 도달했습니다. MaximumReceiveRequestsReachedException BadRequestException 길드에 대한 참가 요청 수가 상한에 도달했습니다. MaximumSendRequestsReachedException BadRequestException 자신이 보낸 참가 요청 수가 상한에 도달했습니다. DotMeetJoinRequirementsException BadRequestException 길드 참가 조건을 충족하지 않습니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . SendRequestAsync ( guildModelName : \"guild-0002\" , targetGuildName : \"guild-0002\" , metadata : null ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Guild . Exception . MaximumMembersReachedException e ) { // The number of members has reached the upper limit. } catch ( Gs2 . Gs2Guild . Exception . MaximumJoinedGuildsReachedException e ) { // The number of guilds you can join at the same time has reached the upper limit. } catch ( Gs2 . Gs2Guild . Exception . MaximumReceiveRequestsReachedException e ) { // The number of requests to join the guild has reached the upper limit. } catch ( Gs2 . Gs2Guild . Exception . MaximumSendRequestsReachedException e ) { // You have reached the maximum number of requests you can send. } catch ( Gs2 . Gs2Guild . Exception . DotMeetJoinRequirementsException e ) { // You do not meet the requirements to join the guild. } var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . SendRequestFuture ( guildModelName : \"guild-0002\" , targetGuildName : \"guild-0002\" , metadata : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Guild . Exception . MaximumMembersReachedException ) { // The number of members has reached the upper limit. } if ( future . Error is Gs2 . Gs2Guild . Exception . MaximumJoinedGuildsReachedException ) { // The number of guilds you can join at the same time has reached the upper limit. } if ( future . Error is Gs2 . Gs2Guild . Exception . MaximumReceiveRequestsReachedException ) { // The number of requests to join the guild has reached the upper limit. } if ( future . Error is Gs2 . Gs2Guild . Exception . MaximumSendRequestsReachedException ) { // You have reached the maximum number of requests you can send. } if ( future . Error is Gs2 . Gs2Guild . Exception . DotMeetJoinRequirementsException ) { // You do not meet the requirements to join the guild. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e SendRequest ( \"guild-0002\" , // guildModelName \"guild-0002\" // targetGuildName // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FMaximumMembersReachedError :: Class )) { // The number of members has reached the upper limit. } if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FMaximumJoinedGuildsReachedError :: Class )) { // The number of guilds you can join at the same time has reached the upper limit. } if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FMaximumReceiveRequestsReachedError :: Class )) { // The number of requests to join the guild has reached the upper limit. } if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FMaximumSendRequestsReachedError :: Class )) { // You have reached the maximum number of requests you can send. } if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FDotMeetJoinRequirementsError :: Class )) { // You do not meet the requirements to join the guild. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . send_request ( \"guild-0002\" , # guild_model_name \"guild-0002\" , # target_guild_name null # metadata ) if async_result . error != null : if async_result . error is Gs2GuildMaximumMembersReachedException : # 멤버 수가 상한에 도달했습니다. pass if async_result . error is Gs2GuildMaximumJoinedGuildsReachedException : # 길드 동시 참가 수가 최댓값에 도달했습니다. pass if async_result . error is Gs2GuildMaximumReceiveRequestsReachedException : # 길드에 대한 참가 요청 수가 상한에 도달했습니다. pass if async_result . error is Gs2GuildMaximumSendRequestsReachedException : # 자신이 보낸 참가 요청 수가 상한에 도달했습니다. pass if async_result . error is Gs2GuildDotMeetJoinRequirementsException : # 길드 참가 조건을 충족하지 않습니다. pass push_error ( str ( async_result . error )) return var result = async_result . result getJoinedGuild 플레이어가 소속된 특정 길드의 상세 정보를 취득한다 플레이어가 가입한 특정 길드의 멤버십 상세 정보를 취득합니다. 취득할 수 있는 정보에는 길드 이름, 플레이어의 역할, 가입일, 멤버십 메타데이터가 포함됩니다. 특정 길드에서의 플레이어 멤버십 정보를 표시하는 데 사용합니다. 예를 들어 “가입일: 2024-01-15, 역할: 부길드장, 메모: 탱커 메인\"과 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. Result 타입 설명 item EzJoinedGuild 참가 중인 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). JoinedGuild ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). JoinedGuild ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e JoinedGuild ( \"guild-model-0001\" , // guildModelName \"guild-0001\" // guildName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . joined_guild ( \"guild-model-0001\" , \"guild-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). JoinedGuild ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). JoinedGuild ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e JoinedGuild ( \"guild-model-0001\" , // guildModelName \"guild-0001\" // guildName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Guild :: Model :: FJoinedGuild \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . joined_guild ( \"guild-model-0001\" , \"guild-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listJoinedGuilds 플레이어가 소속된 길드 목록을 취득한다 플레이어가 현재 멤버로 소속되어 있는 모든 길드를 취득합니다. 길드 모델 이름으로 필터링할 수도 있습니다. 생략하면 모든 유형의 길드가 반환됩니다. 각 항목에는 길드 이름, 가입 일시, 현재 역할이 포함됩니다. “내 길드” 화면을 구성하여 플레이어의 길드 소속 현황을 표시하는 데 사용합니다. 예를 들어 “드래곤 나이츠(부길드장), 스타 얼라이언스(멤버)“와 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildModelName string ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가 중인 길드 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . JoinedGuildsAsync ( guildModelName : \"guild-model-0001\" ). ToListAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . JoinedGuilds ( guildModelName : \"guild-model-0001\" ); List EzJoinedGuild \u003e items = new List EzJoinedGuild \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e JoinedGuilds ( \"guild-model-0001\" // guildModelName ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzJoinedGuildPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeJoinedGuilds ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeJoinedGuilds ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeJoinedGuilds ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeJoinedGuilds ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeJoinedGuilds ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeJoinedGuilds ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. updateMemberMetadata 길드 내 자신의 멤버 메타데이터를 갱신한다 길드 내에서 플레이어 자신의 메타데이터를 갱신합니다. 메타데이터는 자유 형식의 텍스트로, 멤버 고유의 정보를 무엇이든 저장할 수 있습니다. 예를 들어 희망 역할(“힐러”), 자기소개(“레이드 동료 모집 중”), 플레이 스타일 설정 등을 저장할 수 있습니다. 자기 자신의 메타데이터만 갱신할 수 있으며, 다른 멤버의 메타데이터는 변경할 수 없습니다. “길드 내 프로필 편집” 기능에 사용합니다. 멤버가 길드 내에서의 상태나 메모를 설정하는 화면에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. gameSession GameSession  GameSession metadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. Result 타입 설명 item EzGuild 업데이트한 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). JoinedGuild ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); var result = await domain . UpdateMemberMetadataAsync ( metadata : \"metadata-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). JoinedGuild ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); var future = domain . UpdateMemberMetadataFuture ( metadata : \"metadata-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e JoinedGuild ( \"guild-model-0001\" , // guildModelName \"guild-0001\" // guildName ); const auto Future = Domain -\u003e UpdateMemberMetadata ( \"metadata-0001\" // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . joined_guild ( \"guild-model-0001\" , \"guild-0001\" ) var async_result = await domain . update_member_metadata ( \"metadata-0001\" # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result withdrawGuild 길드에서 자발적으로 탈퇴하기 플레이어가 현재 소속되어 있는 길드에서 탈퇴합니다. 탈퇴 후 플레이어는 길드의 멤버 목록에서 삭제됩니다. 어떤 멤버든 자신의 의지로 탈퇴할 수 있습니다. 길드 마스터의 승인은 필요하지 않습니다. 주의: 길드 모델에 재가입 쿨다운이 설정되어 있는 경우, 쿨다운 기간이 지날 때까지 동일한 길드에 재가입할 수 없습니다. 길드 상세 화면이나 설정 화면의 “길드 탈퇴” 버튼에 사용합니다. 재가입 시 쿨다운이 있을 수 있으므로 확인 대화상자 표시를 권장합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. Result 타입 설명 item EzJoinedGuild 탈퇴한 길드 guild EzGuild 길드 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 GuildMasterRequiredException BadRequestException 길드 마스터 권한을 가진 멤버가 최소 1명 필요합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). JoinedGuild ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); var result = await domain . WithdrawGuildAsync ( ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Guild . Exception . GuildMasterRequiredException e ) { // At least one member with guild master privileges is required. } var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). JoinedGuild ( guildModelName : \"guild-model-0001\" , guildName : \"guild-0001\" ); var future = domain . WithdrawGuildFuture ( ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Guild . Exception . GuildMasterRequiredException ) { // At least one member with guild master privileges is required. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e JoinedGuild ( \"guild-model-0001\" , // guildModelName \"guild-0001\" // guildName ); const auto Future = Domain -\u003e WithdrawGuild ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Guild :: Error :: FGuildMasterRequiredError :: Class )) { // At least one member with guild master privileges is required. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . joined_guild ( \"guild-model-0001\" , \"guild-0001\" ) var async_result = await domain . withdraw_guild ( ) if async_result . error != null : if async_result . error is Gs2GuildGuildMasterRequiredException : # 길드 마스터 권한을 가진 멤버가 최소 1명 필요합니다. pass push_error ( str ( async_result . error )) return var result = async_result . result addIgnoreUser 플레이어의 길드 참가를 차단한다 플레이어를 길드의 차단 목록에 추가합니다. 차단되면 해당 플레이어는 이 길드에 참가 요청을 보낼 수 없게 되고, 이후의 요청은 자동으로 거부됩니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 차단 목록을 관리할 수 있습니다. ‘차단’ 버튼에 사용합니다. 예를 들어, 문제가 있는 멤버를 제명한 후 재가입 요청을 방지하려는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 추가하려면 해당 역할의 PolicyDocument 에 Gs2Guild:AddIgnoreUser 권한이 필요합니다. userId string  ~ 128자 사용자ID Result 타입 설명 item EzIgnoreUser 참가를 거부하는 사용자 ID guild EzGuild 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var result = await domain . AddIgnoreUserAsync ( userId : \"user-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var future = domain . AddIgnoreUserFuture ( userId : \"user-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto Future = Domain -\u003e AddIgnoreUser ( \"user-0001\" // userId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) var async_result = await domain . add_ignore_user ( guild_game_session . access_token , # access_token \"user-0001\" # user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result deleteIgnoreUser 길드의 차단 목록에서 플레이어를 해제한다 플레이어를 길드의 차단 목록에서 삭제합니다. 차단 해제 후, 그 플레이어는 다시 이 길드에 참가 요청을 보낼 수 있게 됩니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 차단 목록을 관리할 수 있습니다. 차단 중인 플레이어 관리 화면의 ‘차단 해제’ 버튼에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 삭제하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DeleteIgnoreUser 권한이 필요합니다. userId string  ~ 128자 사용자ID Result 타입 설명 item EzIgnoreUser 참가를 거부하는 사용자 ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). IgnoreUser ( ); var result = await domain . DeleteIgnoreUserAsync ( userId : \"user-0001\" ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). IgnoreUser ( ); var future = domain . DeleteIgnoreUserFuture ( userId : \"user-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ) -\u003e IgnoreUser ( ); const auto Future = Domain -\u003e DeleteIgnoreUser ( \"user-0001\" // userId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) . ignore_user ( ) var async_result = await domain . delete_ignore_user ( guild_game_session . access_token , # access_token \"user-0001\" # user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getIgnoreUser 특정 플레이어가 길드의 차단 목록에 등록되어 있는지 확인한다 특정 플레이어가 이 길드에 참가하는 것이 차단되어 있는지 확인합니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). ‘차단’/‘차단 해제’ 버튼을 표시하기 전에 플레이어의 차단 상태를 확인하는 데 사용합니다. 예를 들어, 멤버 관리 화면이나 플레이어 프로필 화면에서 활용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 취득하려면 해당 역할의 PolicyDocument 에 Gs2Guild:GetIgnoreUser 권한이 필요합니다. userId string  ~ 128자 사용자ID Result 타입 설명 item EzIgnoreUser 참가를 거부하는 사용자 ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). IgnoreUser ( ); var item = await domain . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). IgnoreUser ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ) -\u003e IgnoreUser ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) . ignore_user ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). IgnoreUser ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). IgnoreUser ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ) -\u003e IgnoreUser ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Guild :: Model :: FIgnoreUser \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) . ignore_user ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listIgnoreUsers 길드의 차단 목록을 취득한다 길드가 참가를 차단하고 있는 플레이어의 목록을 취득합니다. 이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득하세요). 차단된 플레이어는 이 길드에 참가 요청을 보낼 수 없습니다. 요청은 자동으로 거부됩니다. 길드 설정의 ‘차단 중인 플레이어’ 관리 화면을 구축하는 데 사용합니다. 예를 들어, 차단 중인 플레이어의 목록과 ‘차단 해제’ 버튼을 표시하는 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 목록을 취득하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DescribeIgnoreUser 권한이 필요합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가를 거부하는 사용자 ID 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var items = await domain . IgnoreUsersAsync ( ). ToListAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var it = domain . IgnoreUsers ( ); List EzIgnoreUser \u003e items = new List EzIgnoreUser \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto It = Domain -\u003e IgnoreUsers ( ); TArray Gs2 :: UE5 :: Guild :: Model :: FEzIgnoreUserPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeIgnoreUsers ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeIgnoreUsers ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeIgnoreUsers ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeIgnoreUsers ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeIgnoreUsers ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeIgnoreUsers ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getLastGuildMasterActivity 길드 마스터의 마지막 활동 일시를 확인한다 길드 마스터의 가장 최근 활동 일시를 취득합니다. 이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득해야 합니다). 길드 마스터의 활동 상태를 표시하는 데 사용합니다. 예를 들어 “길드 마스터 마지막 로그인: 3일 전\"과 같이 표시할 수 있습니다. 이 정보는 길드 마스터가 충분히 오랫동안 비활성 상태여서 자동 교체(PromoteSeniorMember)를 실행해야 하는지 판단하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 취득하려면 해당 역할의 PolicyDocument 에 Gs2Guild:GetLastGuildMasterActivity 권한이 필요합니다. Result 타입 설명 item EzLastGuildMasterActivity 마지막 길드 마스터 활동 guild EzGuild 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). LastGuildMasterActivity ( ); var item = await domain . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). LastGuildMasterActivity ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ) -\u003e LastGuildMasterActivity ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) . last_guild_master_activity ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). LastGuildMasterActivity ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ). LastGuildMasterActivity ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ) -\u003e LastGuildMasterActivity ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Guild :: Model :: FLastGuildMasterActivity \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) . last_guild_master_activity ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. promoteSeniorMember 비활성 상태인 길드 마스터를 최고참 멤버로 교체한다 길드 모델의 비활성 설정에 정의된 기간 동안 길드 마스터가 활동하지 않은 경우, 가장 오래 소속되어 있는 멤버를 새로운 길드 마스터로 승격시킵니다. 이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 비활성 기간의 임계값은 길드 모델에서 설정됩니다. 길드 마스터가 게임을 플레이하지 않게 되었을 때 길드가 “정체\"되는 것을 방지합니다. 길드 마스터가 비활성 상태일 때 표시되는 “리더십 이어받기” 버튼에 사용합니다. 예를 들어 “길드 마스터가 30일간 로그인하지 않았습니다. 최고참 멤버로서 당신이 이어받을 수 있습니다.“와 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildGameSession GuildGameSession  ~ 128자 GuildGameSession assume 으로 취득한 GuildGameSession입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 승격하려면 해당 역할의 PolicyDocument 에 Gs2Guild:PromoteSeniorMember 권한이 필요합니다. Result 타입 설명 item EzLastGuildMasterActivity 마지막 길드 마스터 활동 guild EzGuild 길드 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var result = await domain . PromoteSeniorMemberAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Guild . Namespace ( namespaceName : \"namespace-0001\" ). GuildGameSession ( guildModelName : \"guild-model-0001\" , guildGameSession : GuildGameSession ); var future = domain . PromoteSeniorMemberFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Guild -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GuildGameSession ( \"guild-model-0001\" , // guildModelName GuildGameSession // GuildGameSession ); const auto Future = Domain -\u003e PromoteSeniorMember ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . guild . namespace_ ( \"namespace-0001\" ) . guild_game_session ( \"guild-model-0001\" , guild_game_session ) var async_result = await domain . promote_senior_member ( guild_game_session . access_token # access_token ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 이벤트 핸들러 OnReceiveRequestNotification 참가 요청을 수신했을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. fromUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Guild . OnReceiveRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var fromUserId = notification . FromUserId ; }; gs2 . Guild . OnReceiveRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var fromUserId = notification . FromUserId ; }; Gs2 -\u003e Guild -\u003e OnReceiveRequestNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GuildModelName = Notification -\u003e GuildModelNameValue ; const auto GuildName = Notification -\u003e GuildNameValue ; const auto FromUserId = Notification -\u003e FromUserIdValue ; }); ez . guild . receive_request_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var guild_model_name = notification . guild_model_name var guild_name = notification . guild_name var from_user_id = notification . from_user_id ) OnRemoveRequestNotification 참가 요청이 삭제되었을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. fromUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Guild . OnRemoveRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var fromUserId = notification . FromUserId ; }; gs2 . Guild . OnRemoveRequestNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var fromUserId = notification . FromUserId ; }; Gs2 -\u003e Guild -\u003e OnRemoveRequestNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GuildModelName = Notification -\u003e GuildModelNameValue ; const auto GuildName = Notification -\u003e GuildNameValue ; const auto FromUserId = Notification -\u003e FromUserIdValue ; }); ez . guild . remove_request_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var guild_model_name = notification . guild_model_name var guild_name = notification . guild_name var from_user_id = notification . from_user_id ) OnChangeNotification 길드 정보가 갱신되었을 때 발행되는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Guild . OnChangeNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; }; gs2 . Guild . OnChangeNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; }; Gs2 -\u003e Guild -\u003e OnChangeNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GuildModelName = Notification -\u003e GuildModelNameValue ; const auto GuildName = Notification -\u003e GuildNameValue ; }); ez . guild . change_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var guild_model_name = notification . guild_model_name var guild_name = notification . guild_name ) OnJoinNotification 길드 멤버가 추가되었을 때 발행되는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. joinedUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Guild . OnJoinNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var joinedUserId = notification . JoinedUserId ; }; gs2 . Guild . OnJoinNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var joinedUserId = notification . JoinedUserId ; }; Gs2 -\u003e Guild -\u003e OnJoinNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GuildModelName = Notification -\u003e GuildModelNameValue ; const auto GuildName = Notification -\u003e GuildNameValue ; const auto JoinedUserId = Notification -\u003e JoinedUserIdValue ; }); ez . guild . join_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var guild_model_name = notification . guild_model_name var guild_name = notification . guild_name var joined_user_id = notification . joined_user_id ) OnLeaveNotification 길드 멤버가 제외되었을 때 발행되는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. leavedUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Guild . OnLeaveNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var leavedUserId = notification . LeavedUserId ; }; gs2 . Guild . OnLeaveNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var leavedUserId = notification . LeavedUserId ; }; Gs2 -\u003e Guild -\u003e OnLeaveNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GuildModelName = Notification -\u003e GuildModelNameValue ; const auto GuildName = Notification -\u003e GuildNameValue ; const auto LeavedUserId = Notification -\u003e LeavedUserIdValue ; }); ez . guild . leave_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var guild_model_name = notification . guild_model_name var guild_name = notification . guild_name var leaved_user_id = notification . leaved_user_id ) OnChangeMemberNotification 멤버 정보가 갱신되었을 때 발행되는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. changedUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Guild . OnChangeMemberNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var changedUserId = notification . ChangedUserId ; }; gs2 . Guild . OnChangeMemberNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var guildModelName = notification . GuildModelName ; var guildName = notification . GuildName ; var changedUserId = notification . ChangedUserId ; }; Gs2 -\u003e Guild -\u003e OnChangeMemberNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GuildModelName = Notification -\u003e GuildModelNameValue ; const auto GuildName = Notification -\u003e GuildNameValue ; const auto ChangedUserId = Notification -\u003e ChangedUserIdValue ; }); ez . guild . change_member_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var guild_model_name = notification . guild_model_name var guild_name = notification . guild_name var changed_user_id = notification . changed_user_id )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Guild SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Guild SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/guild/game_engine/"},{"content":"모델 EzStatus 스테이터스 처음으로 GetIdleStatus 를 호출했을 때 생성되며, 그 시점부터 방치 시간의 카운트가 시작됩니다. 방치 시간의 카운트는 보상을 받으면 리셋됩니다. GS2-Schedule 의 이벤트가 연관되어 있는 경우, 이벤트 개최 전에는 Category 에 액세스할 수 없으며, 스테이터스를 생성할 수도 없습니다. 이벤트가 연관되어 있는 경우, 스테이터스는 이벤트의 반복 횟수를 보유합니다. 현재 이벤트ID와 스테이터스 생성 시의 이벤트ID가 일치하지 않는 경우, 현재 이벤트의 반복 횟수와 스테이터스가 보유한 반복 횟수가 일치하지 않는 경우, 또는 이벤트의 시작 시각보다 앞서 스테이터스가 생성된 경우, 대기 시간은 리셋됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. randomSeed long 0 0 ~ 9223372036854775805 난수 시드 방치 보상 계산 시 결정론적 난수 생성에 사용되는 시드 값입니다. 보상 계산이 재현 가능하고 일관성이 있음을 보장하여 서버가 보상 결과를 검증할 수 있도록 합니다. 보상을 받을 때마다 갱신됩니다. idleMinutes int  0 ~ 2147483646 방치 시간(분) 마지막 보상 수취 또는 스테이터스 생성 이후의 누적 방치 시간(분)입니다. 이 값은 idleStartedAt 으로부터의 경과 시간으로 계산되며, maximumIdleMinutes 로 상한이 설정됩니다. 이용 가능한 보상 수는 이 값을 카테고리 모델의 rewardIntervalMinutes 로 나누어 결정됩니다. maximumIdleMinutes int 0 0 ~ 2147483646 최대 방치 시간(분) 이 스테이터스가 축적할 수 있는 최대 방치 시간(분)입니다. 스테이터스 생성 시 카테고리 모델의 defaultMaximumIdleMinutes 로 초기화됩니다. 입수 액션을 통해 사용자별로 늘릴 수 있으며, 프리미엄 사용자나 이벤트 참가자가 더 많은 방치 보상을 축적할 수 있도록 합니다. EzCategoryModel 카테고리 모델 카테고리 모델이란, 방치 보상을 얻을 수 있는 대기 카테고리를 설정하는 엔티티입니다. 설정에는 대기 시간별 보상이나 최대 대기 시간 등의 정보가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rewardIntervalMinutes int  0 ~ 2147483646 보상 간격(분) 각 방치 보상 사이의 시간 간격(분)입니다. 예를 들어 60으로 설정하면, 사용자는 방치 시간 60분마다 보상 1유닛을 획득합니다. 보상의 총 개수는 (경과 방치 분수) / rewardIntervalMinutes로 계산되며, acquireActions 배열을 순환합니다. defaultMaximumIdleMinutes int  0 ~ 2147483646 기본 최대 방치 시간(분) 이 카테고리의 새로운 스테이터스에 대한 기본 최대 방치 시간(분)입니다. 이 제한을 초과하는 방치 시간은 추가 보상을 축적하지 않습니다. 이 값은 스테이터스 생성 시 각 스테이터스의 maximumIdleMinutes 에 복사되며, 입수 액션을 통해 사용자별로 확장할 수 있습니다. acquireActions List [] 1 ~ 100 items 대기 시간마다 얻을 수 있는 입수 액션 리스트 대기 시간을 “X분\"이라고 가정하면 “X / rewardIntervalMinutes\"가 보상을 받을 수 있는 횟수가 되지만, 여기서 지정한 배열의 요소를 반복함으로써 대기 시간마다 다른 보상을 부여할 수 있습니다. idlePeriodScheduleId string ~ 1024자 방치 기간 스케줄ID 방치 시간이 축적되는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 방치 시간이 카운트됩니다. 이벤트가 반복되는 경우, 스테이터스는 반복 횟수를 추적하고 새로운 사이클이 시작될 때 방치 시간을 리셋하여 이벤트 기간마다 보상이 계산되도록 합니다. receivePeriodScheduleId string ~ 1024자 수취 기간 스케줄ID 사용자가 축적된 방치 보상을 받을 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 보상 수취가 허용됩니다. 이를 통해 방치 축적 기간과는 별도의 기간 한정 보상 수취 기간을 설정할 수 있습니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzAcquireAction 입수 액션 방치 보상으로 사용되는 단일 입수 액션을 나타냅니다. 액션 타입(예: 아이템 추가, 통화 증가)과 그 요청 파라미터로 구성됩니다. 방치 보상을 수령하면 이러한 액션들이 트랜잭션으로 조합되어 실행되며, 사용자에게 보상이 지급됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzAcquireActionList 입수 액션 리스트 하나의 보상 간격에서 함께 지급되는 여러 입수 액션을 그룹화하는 래퍼입니다. 각 AcquireActionList는 카테고리 모델의 acquireActions 배열 내 하나의 보상 주기에 대응하며, 각 간격마다 서로 다른 보상 조합을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 0 ~ 100 items 입수 액션 리스트 이 보상 간격이 트리거될 때 함께 실행되는 입수 액션의 집합입니다. 여러 액션을 조합하여 하나의 방치 보상 주기에서 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 리스트당 최대 100개의 액션입니다. EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getCategoryModel 이름을 지정하여 방치 보상 카테고리 정의 조회 이름을 지정하여 방치 보상 카테고리 모델을 1건 조회합니다. 조회되는 정보에는 보상 간격(몇 분마다 보상이 누적되는지), 최대 방치 시간의 상한, 지급되는 보상 내용, 스케줄 설정이 포함됩니다. 특정 방치 보상 유형의 상세 정보를 표시하는 데 사용합니다. 예를 들어 “금광 — 30분마다 골드 10개 — 최대 누적: 8시간 — 현재: 160골드 수령 가능\"과 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzCategoryModel 카테고리 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( categoryName : \"category-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( categoryName : \"category-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CategoryModel ( \"category-0001\" // categoryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . category_model ( \"category-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( categoryName : \"category-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( categoryName : \"category-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CategoryModel ( \"category-0001\" // categoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Idle :: Model :: FCategoryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . category_model ( \"category-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listCategoryModels 방치 보상 카테고리 정의 목록 조회 이 네임스페이스에 등록된 모든 방치 보상 카테고리를 조회합니다. 카테고리 모델은 AFK(방치) 보상의 동작 방식을 정의합니다. 보상이 누적되는 간격(예: 10분마다), 최대 방치 시간(예: 최대 8시간), 플레이어가 받는 보상 내용, 수령 후 타이머를 리셋할지 여부 등입니다. 또한 카테고리를 스케줄에 연결하여 방치 보상이 활성화되는 기간을 제어할 수도 있습니다(예: 평일 이벤트 중에만 유효). 플레이어에게 어떤 종류의 방치 보상이 있는지 표시하는 데 사용합니다. 예를 들어 “금광(30분마다 골드 10개, 최대 8시간)”, “수련장(1시간마다 XP 50, 최대 24시간)“과 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 카테고리 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . CategoryModelsAsync ( ). ToListAsync (); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . CategoryModels ( ); List EzCategoryModel \u003e items = new List EzCategoryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e CategoryModels ( ); TArray Gs2 :: UE5 :: Idle :: Model :: FEzCategoryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCategoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCategoryModels ( callbackId ); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCategoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCategoryModels ( callbackId ); const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeCategoryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeCategoryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getStatus 특정 카테고리의 방치 보상 상태 조회 특정 카테고리에서 플레이어의 방치 보상 상태를 조회합니다. 상태에는 방치 타이머 시작 시각과 현재 최대 방치 시간이 포함됩니다. 상태가 아직 존재하지 않는 경우, 현재 시각을 시작 시각으로 하여 자동으로 생성됩니다. 특정 방치 보상의 진행 상황을 표시하는 데 사용합니다. 예를 들어 “금광 — 방치 중 4시간 30분 / 최대 8시간 — 90골드 수령 가능\"과 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. gameSession GameSession  GameSession Result 타입 설명 item EzStatus 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( categoryName : \"category-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( categoryName : \"category-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"category-0001\" // categoryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"category-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( categoryName : \"category-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( categoryName : \"category-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"category-0001\" // categoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Idle :: Model :: FStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"category-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listStatuses 플레이어의 방치 보상 상태 목록 조회 모든 카테고리에 걸친 플레이어의 방치 보상 상태를 모두 조회합니다. 각 상태에는 플레이어가 언제부터 방치를 시작했는지(마지막으로 보상을 수령한 시각 또는 타이머 시작 시각)와 현재 최대 방치 시간이 포함됩니다. “방치 보상” 개요 화면을 구성하는 데 사용합니다. 예를 들어 “금광: 4시간 30분 누적, 수련장: 1시간 15분 누적\"처럼 각 카테고리에 “수령” 버튼을 붙여 표시하는 화면에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . StatusesAsync ( ). ToListAsync (); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Statuses ( ); List EzStatus \u003e items = new List EzStatus \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Statuses ( ); TArray Gs2 :: UE5 :: Idle :: Model :: FEzStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStatuses ( callbackId ); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStatuses ( callbackId ); const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeStatuses ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeStatuses ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. prediction 지금 수령할 수 있는 방치 보상을 미리보기 플레이어가 지금 수령할 경우 받게 될 보상을 계산하여 반환합니다. 실제로 수령하지는 않습니다. 보상량은 플레이어가 방치한 시간을 보상 간격으로 나눈 값을 기준으로 하며, 최대 방치 시간으로 상한이 설정됩니다. 타이머 리셋이나 보상 지급은 이루어지지 않습니다. 읽기 전용 미리보기입니다. 플레이어가 “수령” 버튼을 누르기 전에 무엇을 받게 될지 표시하는 데 사용합니다. 예를 들어 “수령 예정: 골드 90개, 젬 5개\"와 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. gameSession GameSession  GameSession Result 타입 설명 items List 보상 status EzStatus 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( categoryName : \"category-0001\" ); var result = await domain . PredictionAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( categoryName : \"category-0001\" ); var future = domain . PredictionFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"category-0001\" // categoryName ); const auto Future = Domain -\u003e Prediction ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"category-0001\" ) var async_result = await domain . prediction ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result receive 누적된 방치 보상을 수령 지정한 카테고리에서 플레이어의 방치 시간을 기준으로 누적된 보상을 수령합니다. 보상량은 플레이어가 방치한 시간을 보상 간격으로 나눈 값에서 계산되며, 최대 방치 시간으로 상한이 설정됩니다. 수령 후, 방치 타이머는 리셋되고 0부터 다시 누적이 시작됩니다. 방치 보상 화면의 “보상 수령” 또는 “회수” 버튼에 사용합니다. 예를 들어 플레이어가 “회수\"를 탭하면 자리를 비운 동안 누적된 “골드 90개, 젬 5개\"를 수령하는 동작입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. gameSession GameSession  GameSession Result 타입 설명 items List 보상 status EzStatus 갱신한 스테이터스 transactionId string 발행된 트랜잭션 ID stampSheet string 퀘스트 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( categoryName : \"category-0001\" ); var result = await domain . ReceiveAsync ( ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Idle . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( categoryName : \"category-0001\" ); var future = domain . ReceiveFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Idle -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"category-0001\" // categoryName ); const auto Future = Domain -\u003e Receive ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . idle . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"category-0001\" ) var async_result = await domain . receive ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Idle SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Idle SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/idle/game_engine/"},{"content":"모델 EzMessage 메시지 게임 플레이어마다 준비되는 메시지 박스에 전달된 메시지 데이터. 메시지에는 개봉 상태가 있으며, 개봉 시 실행할 입수 액션을 설정할 수 있습니다. 메시지에는 유효 기한을 설정할 수 있으며, 유효 기한이 지난 메시지는 미읽음 상태, 개봉 후 읽음 상태와 관계없이 자동으로 삭제됩니다. 첨부된 보상을 받지 않은 경우에도 삭제됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 messageId string ※ ~ 1024자 메시지 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 발신자 정보, 표시 파라미터 등을 포함하는 JSON 문자열 등, 메시지의 내용을 나타내는 임의의 데이터입니다. GS2는 이 값을 해석하지 않으며, 메시지 UI 렌더링을 위해 게임 클라이언트에 그대로 전달됩니다. 최대 4096자입니다. isRead bool false 읽음 상태 메시지가 사용자에 의해 개봉되었는지 여부를 나타냅니다. 메시지가 개봉되면 이 플래그가 true로 설정되고, readAcquireActions가 실행되어 첨부된 보상이 지급되며, readAt 타임스탬프가 기록됩니다. 네임스페이스에서 isAutomaticDeletingEnabled가 설정되어 있는 경우, 읽음 처리 후 메시지가 삭제됩니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 입수 액션 사용자가 이 메시지를 개봉했을 때 실행되는 입수 액션 목록입니다. 아이템, 화폐, 리소스 등의 보상을 메시지에 첨부하기 위해 사용됩니다. 여러 액션을 조합하여 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 메시지당 최대 100개의 액션입니다. receivedAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 readAt long 0 개봉 일시 UNIX 시간·밀리초 expiresAt long 유효기간 일시 UNIX 시간·밀리초 EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzAcquireAction 획득 액션 보상으로 메시지에 첨부되는 단일 획득 액션을 나타냅니다. 액션 타입(예: 인벤토리에 아이템 추가, 통화 증가)과 그 요청 파라미터로 구성됩니다. 메시지가 개봉되면 이 액션들이 트랜잭션으로 조립되어 실행되고, 사용자에게 보상이 지급됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 batchRead 여러 메시지를 일괄 개봉하여 보상을 한꺼번에 받는다 최대 10건의 메시지를 한 번에 개봉하고, 첨부된 모든 보상을 한 번의 작업으로 지급합니다. 지정한 메시지 중 하나라도 이미 개봉된 경우, 오류가 반환되며 어떤 메시지도 처리되지 않습니다. 이를 통해 보상의 이중 수령이 확실히 방지됩니다. 선물 상자 화면의 “일괄 개봉”, “모두 받기” 버튼에 사용합니다. 플레이어가 버튼 하나로 대기 중인 보상을 한꺼번에 받을 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. messageNames List  1 ~ 10 items 메시지 이름 목록 gameSession GameSession  GameSession Result 타입 설명 items List 메시지 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 MessageExpiredException NotFoundException 메시지의 유효기간이 만료되었습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . BatchReadAsync ( messageNames : new List string \u003e { \"message-0001\" , \"message-0002\" , } ); } catch ( Gs2 . Gs2Inbox . Exception . MessageExpiredException e ) { // Message has expired } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . BatchReadFuture ( messageNames : new List string \u003e { \"message-0001\" , \"message-0002\" , } ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Inbox . Exception . MessageExpiredException ) { // Message has expired } onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e BatchRead ( [] { auto v = TOptional TArray FString \u003e\u003e (); v -\u003e Add ( \"message-0001\" ); v -\u003e Add ( \"message-0002\" ); return v ; }() // messageNames ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Inbox :: Error :: FMessageExpiredError :: Class )) { // Message has expired } return false ; } var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . batch_read ( [ \"message-0001\" , \"message-0002\" , ] # message_names ) if async_result . error != null : if async_result . error is Gs2InboxMessageExpiredException : # 메시지의 유효기간이 만료되었습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result delete 선물 상자에서 메시지를 삭제한다 개봉 여부와 관계없이 플레이어의 선물 상자에서 메시지를 완전히 삭제합니다. 선물 상자 설정에서 메시지 개봉 시 자동 삭제하도록 설정한 경우에는 수동으로 호출할 필요가 없습니다. 다만 자동 삭제가 비활성화된 경우(개봉된 메시지가 선물 상자에 계속 남아 있는 설정)에는 이 API로 플레이어가 받은 편지함을 정리할 수 있도록 합니다. 각 메시지의 “삭제”, “닫기” 버튼에 사용합니다. 예를 들어 오래된 개봉 메시지를 불필요한 것으로 삭제하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. Result 타입 설명 item EzMessage 삭제된 메시지 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ); var result = await domain . DeleteAsync ( ); var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ); var future = domain . DeleteFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Message ( \"message-0001\" // messageName ); const auto Future = Domain -\u003e Delete ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . message ( \"message-0001\" ) var async_result = await domain . delete ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result get 특정 메시지의 상세 정보를 취득한다 플레이어의 선물 상자에 있는 특정 메시지의 전체 상세 정보를 취득합니다. 메타데이터(제목, 본문 등), 읽음 상태, 첨부된 보상, 유효 기한이 포함됩니다. 메시지 상세 화면을 표시하는 데 사용합니다. 예를 들어 “점검 보상 — 불편을 드려 죄송합니다! 사과의 의미로 잼 100개를 보내드립니다. [개봉하기]“와 같은 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. gameSession GameSession  GameSession Result 타입 설명 item EzMessage 메시지 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Message ( \"message-0001\" // messageName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . message ( \"message-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Message ( \"message-0001\" // messageName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inbox :: Model :: FMessage \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . message ( \"message-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. list 플레이어의 선물 상자에 있는 메시지 목록을 취득한다 플레이어의 선물 상자(기프트 박스 / 받은 편지함)에 있는 모든 메시지를 최신순으로 취득합니다. 각 메시지에는 플레이어가 개봉하여 받을 수 있는 보상(아이템, 화폐 등)을 포함할 수 있습니다. 읽음 상태로 필터링할 수도 있습니다. 예를 들어 미개봉 메시지만, 또는 개봉한 메시지만 표시할 수 있습니다. “선물 상자”, “기프트” 화면을 구성하는 데 사용합니다. 예를 들어 “점검 보상(잼 x100)”, “데일리 로그인 보너스(골드 x500)“와 같은 목록에 “개봉” 버튼을 붙여 표시하는 화면에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession isRead bool 읽음 상태 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 메시지 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . MessagesAsync ( ). ToListAsync (); var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Messages ( ); List EzMessage \u003e items = new List EzMessage \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Messages ( ); TArray Gs2 :: UE5 :: Inbox :: Model :: FEzMessagePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMessages ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMessages ( callbackId ); var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMessages ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMessages ( callbackId ); const auto Domain = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeMessages ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeMessages ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. read 메시지를 개봉하여 보상을 받는다 지정한 메시지를 개봉하고, 첨부된 보상(아이템, 화폐 등)을 플레이어에게 지급합니다. 메시지는 읽음 상태가 되며, 보상 지급이 한 번의 작업으로 이루어집니다. 이미 개봉된 경우에는 보상의 이중 수령을 방지하기 위해 오류가 반환됩니다. 보상이 첨부되지 않은 메시지의 경우에는 단순히 읽음으로 표시됩니다. 선물 상자의 각 메시지에 있는 “개봉”, “받기” 버튼에 사용합니다. 예를 들어 플레이어가 “개봉\"을 탭하면 “잼 x100\"을 받는 것과 같은 동작입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. gameSession GameSession  GameSession Result 타입 설명 item EzMessage 메시지 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 MessageExpiredException NotFoundException 메시지의 유효기간이 만료되었습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ); var result = await domain . ReadAsync ( ); } catch ( Gs2 . Gs2Inbox . Exception . MessageExpiredException e ) { // Message has expired } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Message ( messageName : \"message-0001\" ); var future = domain . ReadFuture ( ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Inbox . Exception . MessageExpiredException ) { // Message has expired } onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Message ( \"message-0001\" // messageName ); const auto Future = Domain -\u003e Read ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Inbox :: Error :: FMessageExpiredError :: Class )) { // Message has expired } return false ; } var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . message ( \"message-0001\" ) var async_result = await domain . read ( ) if async_result . error != null : if async_result . error is Gs2InboxMessageExpiredException : # 메시지의 유효기간이 만료되었습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result receiveGlobalMessage 전체 플레이어 대상 메시지를 수신한다 글로벌 메시지(점검 보상이나 이벤트 보상 등, 전체 플레이어에게 일괄 전송된 메시지)를 확인하여, 아직 받지 않은 것을 플레이어의 선물 상자에 전달합니다. 각 글로벌 메시지는 플레이어의 받은 편지함에 개별 메시지로 변환됩니다. 이미 수신한 메시지는 건너뛰므로 여러 번 호출해도 안전합니다. 플레이어가 선물 상자 화면을 열 때나 로그인 시에 호출하여 모든 글로벌 메시지를 확실히 받을 수 있도록 해 주세요. 선물 상자 초기화의 일부로 사용합니다. 메시지 목록을 취득하기 전에 호출하면 플레이어가 모든 기프트를 확인할 수 있게 됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item List 수신한 메시지 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . ReceiveGlobalMessageAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Inbox . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . ReceiveGlobalMessageFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Inbox -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e ReceiveGlobalMessage ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . inbox . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . receive_global_message ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 이벤트 핸들러 OnReceiveNotification 메시지를 수신했을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID messageName string 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Inbox . OnReceiveNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var messageName = notification . MessageName ; }; gs2 . Inbox . OnReceiveNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var messageName = notification . MessageName ; }; Gs2 -\u003e Inbox -\u003e OnReceiveNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto MessageName = Notification -\u003e MessageNameValue ; }); ez . inbox . receive_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var message_name = notification . message_name )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Inbox SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Inbox SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/inbox/game_engine/"},{"content":"모델 EzInventory 인벤토리 인벤토리는 게임 플레이어가 소유한 아이템을 보관하기 위한 가방과 같은 것입니다. 가방에는 용량이 있으며, 플레이어마다 용량을 확장할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryId string ※ ~ 1024자 인벤토리 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. currentInventoryCapacityUsage int 0 0 ~ 2147483646 용량 사용량 아이템 세트에 의해 현재 사용되고 있는 인벤토리 슬롯의 수입니다. 새로운 아이템 스택이 추가될 때(예: allowMultipleStacks에 의해 새로운 슬롯이 생성될 때) 증가하고, 아이템 세트가 완전히 소비되거나 삭제될 때 감소합니다. currentInventoryMaxCapacity를 초과할 수 없습니다. currentInventoryMaxCapacity int  1 ~ 2147483646 최대 용량 이 사용자가 사용할 수 있는 인벤토리 슬롯의 현재 최대 수입니다. 인벤토리 모델의 initialCapacity로 초기화되며, 입수 액션 또는 직접적인 API 호출을 통해 모델의 maxCapacity까지 확장할 수 있습니다. EzItemSet 아이템 세트 아이템 세트는 게임 플레이어의 인벤토리 내에 저장된 소유물을 나타냅니다. 인벤토리 모델명과 아이템 모델명, 소지 수량, 유효기간 등을 보유합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 itemSetId string ※ ~ 1024자 아이템 세트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. count long  1 ~ 9223372036854775805 소지 수량 이 스택 내의 아이템 수입니다. 1부터 아이템 모델의 스택 상한까지의 범위입니다. 아이템을 입수하면 스택 상한까지 수량이 증가하고, 소비하면 감소합니다. 수량이 0이 되면 아이템 세트는 삭제되고 인벤토리 슬롯이 해제됩니다. sortValue int  0 ~ 2147483646 표시 순서 아이템 모델의 sortValue에서 복사된 숫자 값으로, 인벤토리 내에서 아이템 세트를 표시용으로 정렬하는 데 사용됩니다. 값이 작을수록 먼저 표시됩니다. expiresAt long 0 유효기간 UNIX 시간·밀리초 referenceOf List [] 0 ~ 24 items 참조원 목록 이 아이템 세트에 등록된 외부 참조입니다. 어떤 시스템이 이 아이템을 사용하고 있는지(예: 무기로 장비, 편성에 할당)를 추적하는 데 사용됩니다. 아이템 세트당 최대 24개의 참조입니다. EzSimpleItem 심플 아이템 심플 아이템은 게임 플레이어의 인벤토리 내에 저장된 소유물을 나타냅니다. 심플 아이템은 모델 이름과 소지 수량을 가집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 itemId string ※ ~ 1024자 심플 아이템 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count long  0 ~ 9223372036854775805 소지 수량 사용자가 소지한 이 아이템 종류의 수량입니다. 일반적인 인벤토리 아이템과 달리 심플 아이템에는 스택 상한이 없으며, 수량은 int64 범위 내에서 임의의 값을 가질 수 있습니다. 다른 심플 아이템과 함께 일괄 처리로 증감할 수 있습니다. EzBigItem 거대 아이템 거대 아이템은 게임 플레이어의 거대 인벤토리 내에 저장되어 있는 소유물을 나타냅니다. 거대 아이템 모델 이름과, int64 범위를 초과하는 소지 수량을 보유합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 itemId string ※ ~ 1024자 거대 아이템 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 itemName string  ~ 128자 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count string BigInteger (Unity)  ~ 1024자 소지 수량 최대 1024자리까지의 정수값 문자열 EzInventoryModel 인벤토리 모델 인벤토리는 게임 플레이어가 소유한 아이템을 담는 가방과 같은 것입니다. 인벤토리에는 용량을 설정할 수 있으며, 용량을 초과하여 소유할 수 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialCapacity int  0 ~ 2147483646 초기 크기 인벤토리가 처음 생성될 때 사용자에게 제공되는 인벤토리 칸의 수입니다. 각 칸에는 하나의 아이템 스택을 저장할 수 있습니다. 사용자는 게임 플레이 액션을 통해 maxCapacity까지 용량을 확장할 수 있습니다. maxCapacity int  0 ~ 2147483646 최대 크기 사용자가 확장할 수 있는 인벤토리 칸의 상한값입니다. 이 값을 초과하여 용량을 늘릴 수 없습니다. 모든 칸이 사용 중이고 아이템을 더 이상 스택할 수 없는 경우, 오버플로우 스크립트가 초과분을 처리하지 않는 한 입수는 실패합니다. EzItemModel 아이템 모델 아이템은 포션 ×99 처럼, 하나의 인벤토리 칸에 여러 개를 모아서 소지할 수 있습니다. 이렇게 한 칸에 여러 개를 모으는 것을 “스택\"이라고 하며, 아이템마다 스택 가능한 상한 수를 설정할 수 있습니다. 스택 상한에 도달했을 때의 동작도 아이템마다 설정할 수 있습니다. 구체적으로는 다음 중 하나를 선택할 수 있습니다: 새로운 인벤토리 칸을 추가하여 추가로 소지할 수 있도록 한다 상한에 도달했으므로 더 이상 입수할 수 없도록 한다 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 아이템 모델 이름 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 메커니즘이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. stackingLimit long  1 ~ 9223372036854775805 스택 가능한 최대 수량 하나의 인벤토리 칸(스택)에 보관할 수 있는 이 아이템의 최대 수입니다. 이 상한에 도달하면 allowMultipleStacks 설정에 따라 새로운 칸이 할당되거나 추가 입수가 차단됩니다. allowMultipleStacks bool  복수 스택 허용 활성화하면 스택 상한에 도달했을 때 새로운 인벤토리 칸이 자동으로 할당되어 이 아이템의 추가 수량을 저장합니다(추가 용량을 소비합니다). 비활성화하면 기존 칸에서 스택 상한에 도달한 시점에 입수가 차단됩니다. sortValue int  0 ~ 2147483646 표시 순서 인벤토리 내 아이템을 표시용으로 정렬하기 위한 수치입니다. 값이 작을수록 먼저 표시됩니다. 이 값은 ItemSet 레코드에도 복사되어 소지 아이템의 일관된 정렬을 가능하게 합니다. EzSimpleInventoryModel 심플 인벤토리 모델 일반적인 InventoryModel에서는 인벤토리 안에 저장할 수 있는 아이템의 용량 제한을 설정할 수 있었습니다. 하지만 심플 인벤토리에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량을 보유할 뿐입니다. 다만 심플 인벤토리에서는 여러 아이템의 증감 처리를 한 번의 처리로 실행할 수 있는 API를 사용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzSimpleItemModel 심플 아이템 모델 ItemModel에서는 스택할 수 있는 수량의 최댓값을 설정할 수 있어, 일정 수를 초과하는 경우 여러 스택으로 나누는 구현이 가능했습니다. 심플 아이템에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량만을 보관합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzBigInventoryModel 거대 인벤토리 모델 일반적인 InventoryModel이나 SimpleInventoryModel에서는 인벤토리에 저장할 수 있는 아이템의 수가 int64 범위로 제한되었습니다. 인플레이션 계열 게임에서는 더 넓은 범위의 값이 필요한 경우가 있습니다. 거대 인벤토리 모델에서는 인벤토리에 저장할 수 있는 아이템의 수가 최대 1024자리의 정수값을 가질 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzBigItemModel 거대 아이템 모델 거대 아이템 모델은 거대 인벤토리 모델에 저장되는 거대 아이템을 정의하는 모델입니다. 거대 아이템은 소지 수량을 int64 범위를 초과하여 보유할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzConsumeCount 심플 아이템의 소비 수량 타입 활성화 조건 필수 기본값 값 제한 설명 itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count long  1 ~ 9223372036854775805 소비 수량 EzAcquireCount 심플 아이템의 입수 수량 타입 활성화 조건 필수 기본값 값 제한 설명 itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count long  1 ~ 9223372036854775805 입수하는 양 메서드 getInventoryModel 이름으로 특정 인벤토리 타입 정의 조회 이름을 지정하여 인벤토리 모델을 1건 조회합니다. 조회되는 정보에는 초기 용량과 최대 용량, 아이템 보호 설정, 이 인벤토리에 속한 모든 아이템 모델이 포함됩니다. 특정 인벤토리 타입의 상세 정보를 표시할 때 사용합니다. 예를 들어 “장비 가방 — 용량: 50/100 — 아이템: 철검, 강철 방패, 가죽 갑옷…“과 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzInventoryModel 인벤토리 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e InventoryModel ( \"item\" // inventoryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . inventory_model ( \"item\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e InventoryModel ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FInventoryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . inventory_model ( \"item\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listInventoryModels 인벤토리 타입 정의 목록 조회 이 네임스페이스에 등록된 모든 인벤토리 모델을 조회합니다. 인벤토리 모델은 아이템을 담는 컨테이너의 종류를 정의합니다. “장비 가방”, “재료 주머니”, “소모품 상자” 등이 있습니다. 각 모델에는 초기 용량과 최대 용량(몇 종류의 아이템을 담을 수 있는지)이 설정되어 있으며, 담을 수 있는 아이템 모델의 목록도 포함됩니다. 플레이어가 어떤 종류의 인벤토리를 가지고 있는지 표시할 때 사용합니다. 예를 들어 “장비(50/100 슬롯)”, “재료(30/200 슬롯)“와 같은 탭 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 인벤토리 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . InventoryModelsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . InventoryModels ( ); List EzInventoryModel \u003e items = new List EzInventoryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e InventoryModels ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzInventoryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeInventoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeInventoryModels ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeInventoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeInventoryModels ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeInventoryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeInventoryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getItemModel 이름으로 특정 아이템 정의 조회 인벤토리 이름과 아이템 이름을 지정하여 아이템 모델을 1건 조회합니다. 조회되는 정보에는 최대 스택 수, 복수 스택 지원 여부(예: 유효기간이 다른 아이템은 별도 스택에 저장됨), 정렬 순서가 포함됩니다. 아이템 규칙을 표시할 때 사용합니다. 예를 들어 “회복 포션 — 스택당 최대: 99개 — 유효기간이 다른 것은 별도 스택으로 보관\"과 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델 이름 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzItemModel 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ). ItemModel ( itemName : \"item-master-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ). ItemModel ( itemName : \"item-master-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e InventoryModel ( \"item\" // inventoryName ) -\u003e ItemModel ( \"item-master-0001\" // itemName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . inventory_model ( \"item\" ) . item_model ( \"item-master-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ). ItemModel ( itemName : \"item-master-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ). ItemModel ( itemName : \"item-master-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e InventoryModel ( \"item\" // inventoryName ) -\u003e ItemModel ( \"item-master-0001\" // itemName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FItemModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . inventory_model ( \"item\" ) . item_model ( \"item-master-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listItemModels 인벤토리 내 아이템 정의 목록을 취득한다 지정한 인벤토리에 속하는 모든 아이템 모델을 취득합니다. 아이템 모델은 특정 아이템 타입의 규칙을 정의합니다. 최대 스택 수(예: 물약은 99개까지 쌓을 수 있음), 복수 스택으로 분할 가능한지, 표시 정렬 순서 등입니다. 인벤토리에 어떤 종류의 아이템이 존재할 수 있는지 표시하는 데 사용합니다. 예를 들어 “장비 가방\"의 전체 장비 타입이나 “소재 주머니\"의 전체 소재를 목록으로 표시할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 items List 아이템 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ); var items = await domain . ItemModelsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ); var it = domain . ItemModels ( ); List EzItemModel \u003e items = new List EzItemModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e InventoryModel ( \"item\" // inventoryName ); const auto It = Domain -\u003e ItemModels ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzItemModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeItemModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeItemModels ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). InventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeItemModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeItemModels ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e InventoryModel ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeItemModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeItemModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getInventory 특정 인벤토리의 상세 정보 조회 이름을 지정하여 특정 인벤토리의 상세 정보를 조회합니다. 현재 용량 사용 현황(사용 중인 슬롯 / 최대 슬롯)이 포함됩니다. 특정 인벤토리의 상태를 표시할 때 사용합니다. 예를 들어 장비 인벤토리 화면 상단에 “장비 가방 — 45 / 100 슬롯 사용 중\"이라고 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzInventory 인벤토리 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Inventory ( \"inventory-0001\" // inventoryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"inventory-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Inventory ( \"inventory-0001\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FInventory \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"inventory-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listInventories 플레이어의 인벤토리 목록 조회 플레이어가 보유한 모든 인벤토리를 조회합니다. 각 인벤토리에는 현재 용량 사용 현황(최대 용량 중 몇 종류의 아이템(슬롯)이 사용되고 있는지)이 포함됩니다. 인벤토리 개요 화면을 구성할 때 사용합니다. 예를 들어 “장비 가방: 45/100 슬롯 사용 중”, “재료 주머니: 120/200 슬롯 사용 중\"과 같이 플레이어의 아이템 컨테이너를 목록으로 표시하는 화면에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 인벤토리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . InventoriesAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Inventories ( ); List EzInventory \u003e items = new List EzInventory \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Inventories ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzInventoryPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeInventories ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeInventories ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeInventories ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeInventories ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeInventories ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeInventories ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. consume 플레이어의 인벤토리에서 아이템 사용(소비) 플레이어의 인벤토리에 있는 특정 아이템의 수량을 줄입니다. 게임 고유의 로직으로 플레이어가 아이템을 사용하거나 소비하는 경우에 사용합니다. 예를 들어, 전투에서 회복 포션을 사용하거나, 제작 재료를 소비하거나, 커스텀 게임 기능에서 아이템을 사용하는 경우입니다. 주의: 상품 구매(GS2-Showcase)나 퀘스트 시작(GS2-Quest)의 대가로 아이템을 소비하는 경우에는 해당 시스템이 자동으로 처리하므로, 이 API를 호출할 필요가 없습니다. 어느 스택(itemSetName)에서 소비할지 선택적으로 지정할 수 있습니다. 생략하면 가장 오래된 스택부터 우선적으로 소비됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. gameSession GameSession  GameSession consumeCount long  1 ~ 9223372036854775805 소비 수량 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 Result 타입 설명 items List 소비 후 아이템 세트 리스트 itemModel EzItemModel 아이템 모델 inventory EzInventory 인벤토리 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 ConflictException ConflictException 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다. InsufficientException BadRequestException 아이템 소지 수량이 부족합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : null ); var result = await domain . ConsumeAsync ( consumeCount : 1L ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Inventory . Exception . ConflictException e ) { // Item manipulation process conflicted. Retry required. } catch ( Gs2 . Gs2Inventory . Exception . InsufficientException e ) { // Insufficient quantity of items in your possession. } var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : null ); var future = domain . ConsumeFuture ( consumeCount : 1L ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Inventory . Exception . ConflictException ) { // Item manipulation process conflicted. Retry required. } if ( future . Error is Gs2 . Gs2Inventory . Exception . InsufficientException ) { // Insufficient quantity of items in your possession. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Inventory ( \"inventory-0001\" // inventoryName ) -\u003e ItemSet ( \"item-0001\" , // itemName nullptr // itemSetName ); const auto Future = Domain -\u003e Consume ( 1L // consumeCount ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Inventory :: Error :: FConflictError :: Class )) { // Item manipulation process conflicted. Retry required. } if ( e -\u003e IsChildOf ( Gs2 :: Inventory :: Error :: FInsufficientError :: Class )) { // Insufficient quantity of items in your possession. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"inventory-0001\" ) . item_set ( \"item-0001\" , null ) var async_result = await domain . consume ( 1 # consume_count ) if async_result . error != null : if async_result . error is Gs2InventoryConflictException : # 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다. pass if async_result . error is Gs2InventoryInsufficientException : # 아이템 소지 수량이 부족합니다. pass push_error ( str ( async_result . error )) return var result = async_result . result getItem 인벤토리 이름과 아이템 이름으로 특정 아이템 조회 지정한 인벤토리에서 플레이어가 소지한 특정 아이템 유형의 모든 스택을 조회합니다. 같은 아이템이라도 여러 스택(아이템 세트)으로 반환될 수 있습니다. 유효기간이 다른 아이템은 반드시 별도의 스택이 됩니다. 예를 들어 “회복 포션\"을 요청하면, 곧 만료되는 50개 스택과 나중에 만료되는 30개 스택의 두 가지가 반환될 수 있습니다. 아이템 상세 화면을 표시할 때 사용합니다. 예를 들어 “회복 포션 — 합계: 80개 — 스택 1: 50개(만료 2024-03-01), 스택 2: 30개(만료 2024-03-15)“와 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 아이템 세트 리스트 itemModel EzItemModel 아이템 모델 inventory EzInventory 인벤토리 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : \"itemSet-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : \"itemSet-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Inventory ( \"item\" // inventoryName ) -\u003e ItemSet ( \"item-0001\" , // itemName \"itemSet-0001\" // itemSetName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"item\" ) . item_set ( \"item-0001\" , \"itemSet-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : \"itemSet-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : \"itemSet-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Inventory ( \"item\" // inventoryName ) -\u003e ItemSet ( \"item-0001\" , // itemName \"itemSet-0001\" // itemSetName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FItemSet \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"item\" ) . item_set ( \"item-0001\" , \"itemSet-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getItemWithSignature 소지 증명 서명이 포함된 아이템 조회 아이템 세트와 함께, 플레이어가 API 호출 시점에 이 아이템을 소지하고 있었음을 증명하는 서버 서명을 함께 조회합니다. 외부 서버나 다른 시스템에서 아이템 소지 여부를 검증해야 할 때 유용합니다. 서명은 위변조 방지 증거로 사용됩니다. 예를 들어, 특별한 던전에 입장하기 전에 플레이어가 특정 무기를 실제로 소지하고 있는지 검증하는 데 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. gameSession GameSession  GameSession itemSetName string ~ 36자 아이템 세트를 식별하는 이름 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 items List 아이템 세트 리스트 itemModel EzItemModel 아이템 모델 inventory EzInventory 인벤토리 body string 서명 대상의 아이템 세트 정보 signature string 서명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : null ); var result = await domain . GetItemWithSignatureAsync ( keyId : \"key-0001\" ); var item = await result . ModelAsync (); var body = result . Body ; var signature = result . Signature ; var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"inventory-0001\" ). ItemSet ( itemName : \"item-0001\" , itemSetName : null ); var future = domain . GetItemWithSignatureFuture ( keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var body = future . Result . Body ; var signature = future . Result . Signature ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Inventory ( \"inventory-0001\" // inventoryName ) -\u003e ItemSet ( \"item-0001\" , // itemName nullptr // itemSetName ); const auto Future = Domain -\u003e GetItemWithSignature ( \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . inventory ( \"inventory-0001\" ) . item_set ( \"item-0001\" , null ) var async_result = await domain . get_item_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listItems 인벤토리 내 플레이어가 소지한 아이템 목록 조회 지정한 인벤토리에서 플레이어가 현재 소지하고 있는 모든 아이템을 조회합니다. 각 항목은 “아이템 세트\"로, 수량과 선택적으로 유효기간을 가지는 아이템 스택입니다. 같은 아이템 유형이라도 유효기간이 다르면 여러 스택으로 표시될 수 있습니다. 예를 들어 “회복 포션\"이 “회복 포션 x50(3일 후 만료)“과 “회복 포션 x30(7일 후 만료)“의 두 항목으로 표시될 수 있습니다. 인벤토리의 메인 아이템 목록 화면을 구성할 때 사용합니다. 소지한 모든 아이템과 그 수량을 표시하는 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 아이템 세트 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ); var items = await domain . ItemSetsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ); var it = domain . ItemSets ( ); List EzItemSet \u003e items = new List EzItemSet \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Inventory ( \"item\" // inventoryName ); const auto It = Domain -\u003e ItemSets ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzItemSetPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeItemSets ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeItemSets ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Inventory ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeItemSets ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeItemSets ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Inventory ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeItemSets ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeItemSets ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getSimpleInventoryModel 이름으로 특정 심플 인벤토리 타입 정의 조회 이름을 지정하여 심플 인벤토리 모델을 1건 조회합니다. 조회되는 정보에는 이 인벤토리에 속한 심플 아이템 모델의 목록(저장할 수 있는 아이템과 그 속성 정의)이 포함됩니다. 특정 심플 인벤토리의 내용을 표시할 때 사용합니다. 예를 들어 “화폐\"나 “재료” 인벤토리에 포함된 아이템 유형을 확인할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzSimpleInventoryModel 심플 인벤토리 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SimpleInventoryModel ( \"item\" // inventoryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . simple_inventory_model ( \"item\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SimpleInventoryModel ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FSimpleInventoryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . simple_inventory_model ( \"item\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSimpleInventoryModels 심플 인벤토리 타입 정의 목록 조회 이 네임스페이스에 등록된 모든 심플 인벤토리 모델을 조회합니다. 심플 인벤토리는 표준 인벤토리의 경량화 버전으로, 스택·유효기간·용량 제한 없이 아이템을 이름과 수량의 단순한 쌍으로 관리합니다. 화폐, 제작 재료 등 수량만 관리하면 되는 아이템에 적합합니다. 예를 들어 “골드: 5000”, “철광석: 150”, “스태미나 포션: 12\"와 같은 용도입니다. 게임에서 어떤 종류의 심플 인벤토리를 사용할 수 있는지 확인할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 심플 인벤토리 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . SimpleInventoryModelsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . SimpleInventoryModels ( ); List EzSimpleInventoryModel \u003e items = new List EzSimpleInventoryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e SimpleInventoryModels ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzSimpleInventoryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSimpleInventoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSimpleInventoryModels ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSimpleInventoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSimpleInventoryModels ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSimpleInventoryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSimpleInventoryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getSimpleItemModel 이름을 지정하여 심플 아이템 정의를 취득한다 인벤토리 이름과 아이템 이름을 지정하여 심플 아이템 모델을 1건 취득합니다. 특정 심플 아이템 타입의 정의를 표시하는 데 사용합니다. 예를 들어 게임 UI에서 “골드\"나 “철광석\"의 속성을 표시할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzSimpleItemModel 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ). SimpleItemModel ( itemName : \"item-master-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ). SimpleItemModel ( itemName : \"item-master-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SimpleInventoryModel ( \"item\" // inventoryName ) -\u003e SimpleItemModel ( \"item-master-0001\" // itemName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . simple_inventory_model ( \"item\" ) . simple_item_model ( \"item-master-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ). SimpleItemModel ( itemName : \"item-master-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ). SimpleItemModel ( itemName : \"item-master-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SimpleInventoryModel ( \"item\" // inventoryName ) -\u003e SimpleItemModel ( \"item-master-0001\" // itemName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FSimpleItemModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . simple_inventory_model ( \"item\" ) . simple_item_model ( \"item-master-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSimpleItemModels 심플 인벤토리 내 아이템 정의 목록을 취득한다 지정한 심플 인벤토리에 속하는 모든 심플 아이템 모델을 취득합니다. 심플 아이템 모델은 수량만으로 관리되는 아이템 타입을 정의합니다. 스택 규칙이나 유효 기간은 없으며, 이름과 숫자뿐입니다. 심플 인벤토리에 어떤 아이템이 존재할 수 있는지 확인하는 데 사용합니다. 예를 들어 “소재” 인벤토리 내의 “골드”, “보석”, “철광석”, “목재\"를 목록으로 표시할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 심플 아이템 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ); var items = await domain . SimpleItemModelsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ); var it = domain . SimpleItemModels ( ); List EzSimpleItemModel \u003e items = new List EzSimpleItemModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SimpleInventoryModel ( \"item\" // inventoryName ); const auto It = Domain -\u003e SimpleItemModels ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzSimpleItemModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSimpleItemModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSimpleItemModels ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). SimpleInventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSimpleItemModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSimpleItemModels ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SimpleInventoryModel ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSimpleItemModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSimpleItemModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. consumeSimpleItems 플레이어의 인벤토리에서 심플 아이템 사용(소비) 플레이어의 인벤토리에 있는 하나 이상의 심플 아이템 수량을 줄입니다. 한 번의 호출로 여러 종류의 아이템을 한꺼번에 소비할 수 있습니다. 게임 고유의 로직으로 플레이어가 리소스를 소비하는 경우에 사용합니다. 예를 들어, 무기를 제작하기 위해 제작 재료를 소비하거나 전투에서 소모품을 사용하는 경우입니다. 주의: 상품 구매(GS2-Showcase)나 퀘스트 시작(GS2-Quest)의 대가로 아이템을 소비하는 경우에는 해당 시스템이 자동으로 처리하므로, 이 API를 호출할 필요가 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession consumeCounts List  1 ~ 100 items 심플 아이템의 소비 수량 리스트 Result 타입 설명 items List 소비 후 심플 아이템 목록 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 ConflictException ConflictException 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다. InsufficientException BadRequestException 아이템 소지 수량이 부족합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"inventory-0001\" ); var result = await domain . ConsumeSimpleItemsAsync ( consumeCounts : new List Gs2 . Unity . Gs2Inventory . Model . EzConsumeCount \u003e { new Gs2 . Unity . Gs2Inventory . Model . EzConsumeCount () { ItemName = \"item-0001\" , Count = 5 , }, new Gs2 . Unity . Gs2Inventory . Model . EzConsumeCount () { ItemName = \"item-0002\" , Count = 3 , }, } ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Inventory . Exception . ConflictException e ) { // Item manipulation process conflicted. Retry required. } catch ( Gs2 . Gs2Inventory . Exception . InsufficientException e ) { // Insufficient quantity of items in your possession. } var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"inventory-0001\" ); var future = domain . ConsumeSimpleItemsFuture ( consumeCounts : new List Gs2 . Unity . Gs2Inventory . Model . EzConsumeCount \u003e { new Gs2 . Unity . Gs2Inventory . Model . EzConsumeCount () { ItemName = \"item-0001\" , Count = 5 , }, new Gs2 . Unity . Gs2Inventory . Model . EzConsumeCount () { ItemName = \"item-0002\" , Count = 3 , }, } ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Inventory . Exception . ConflictException ) { // Item manipulation process conflicted. Retry required. } if ( future . Error is Gs2 . Gs2Inventory . Exception . InsufficientException ) { // Insufficient quantity of items in your possession. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SimpleInventory ( \"inventory-0001\" // inventoryName ); const auto Future = Domain -\u003e ConsumeSimpleItems ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Inventory :: Model :: FEzConsumeCount \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Inventory :: Model :: FEzConsumeCount \u003e () -\u003e WithItemName ( TOptional FString \u003e ( \"item-0001\" )) -\u003e WithCount ( TOptional int32 \u003e ( 5 )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Inventory :: Model :: FEzConsumeCount \u003e () -\u003e WithItemName ( TOptional FString \u003e ( \"item-0002\" )) -\u003e WithCount ( TOptional int32 \u003e ( 3 )) ); return v ; }() // consumeCounts ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Inventory :: Error :: FConflictError :: Class )) { // Item manipulation process conflicted. Retry required. } if ( e -\u003e IsChildOf ( Gs2 :: Inventory :: Error :: FInsufficientError :: Class )) { // Insufficient quantity of items in your possession. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . simple_inventory ( \"inventory-0001\" ) var async_result = await domain . consume_simple_items ( [ Gs2InventoryEzConsumeCount . new () . with_item_name ( \"item-0001\" ) . with_count ( 5 ), Gs2InventoryEzConsumeCount . new () . with_item_name ( \"item-0002\" ) . with_count ( 3 ), ] # consume_counts ) if async_result . error != null : if async_result . error is Gs2InventoryConflictException : # 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다. pass if async_result . error is Gs2InventoryInsufficientException : # 아이템 소지 수량이 부족합니다. pass push_error ( str ( async_result . error )) return var result = async_result . result getSimpleItem 특정 심플 아이템의 소지 수량 조회 플레이어가 특정 심플 아이템을 현재 몇 개 소지하고 있는지 조회합니다. 특정 리소스의 수량을 확인할 때 사용합니다. 예를 들어 상점 화면에서 구매 전에 “골드: 5,000\"이라고 표시하거나, 제작 화면에서 “철광석: 150/200개 필요\"라고 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. gameSession GameSession  GameSession Result 타입 설명 item EzSimpleItem 심플 아이템 itemModel EzSimpleItemModel 심플 아이템 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ). SimpleItem ( itemName : \"item-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ). SimpleItem ( itemName : \"item-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SimpleInventory ( \"item\" // inventoryName ) -\u003e SimpleItem ( \"item-0001\" // itemName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . simple_inventory ( \"item\" ) . simple_item ( \"item-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ). SimpleItem ( itemName : \"item-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ). SimpleItem ( itemName : \"item-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SimpleInventory ( \"item\" // inventoryName ) -\u003e SimpleItem ( \"item-0001\" // itemName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FSimpleItem \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . simple_inventory ( \"item\" ) . simple_item ( \"item-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getSimpleItemWithSignature 소지 증명 서명이 포함된 심플 아이템 조회 심플 아이템과 함께, 플레이어가 API 호출 시점에 이 아이템을 소지하고 있었음을 증명하는 서버 서명을 함께 조회합니다. 외부 서버나 다른 시스템에서 아이템 소지 여부를 검증해야 할 때 유용합니다. 서명은 위변조 방지 증거로 사용됩니다. 예를 들어, 외부 마켓플레이스에서 거래를 처리하기 전에 플레이어가 충분한 화폐나 재료를 가지고 있는지 검증하는 데 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. gameSession GameSession  GameSession keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzSimpleItem 심플 아이템 simpleItemModel EzSimpleItemModel 심플 아이템 모델 body string 서명 대상 심플 아이템 정보 signature string 서명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"inventory-0001\" ). SimpleItem ( itemName : \"item-0001\" ); var result = await domain . GetSimpleItemWithSignatureAsync ( keyId : \"key-0001\" ); var item = await result . ModelAsync (); var body = result . Body ; var signature = result . Signature ; var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"inventory-0001\" ). SimpleItem ( itemName : \"item-0001\" ); var future = domain . GetSimpleItemWithSignatureFuture ( keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var body = future . Result . Body ; var signature = future . Result . Signature ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SimpleInventory ( \"inventory-0001\" // inventoryName ) -\u003e SimpleItem ( \"item-0001\" // itemName ); const auto Future = Domain -\u003e GetSimpleItemWithSignature ( \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto Body = Result -\u003e Body ; const auto Signature = Result -\u003e Signature ; var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . simple_inventory ( \"inventory-0001\" ) . simple_item ( \"item-0001\" ) var async_result = await domain . get_simple_item_with_signature ( \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listSimpleItems 인벤토리 내 플레이어가 소지한 심플 아이템 목록 조회 지정한 심플 인벤토리에서 플레이어가 현재 소지하고 있는 모든 심플 아이템을 조회합니다. 각 아이템은 이름과 수량의 단순한 쌍입니다. 예를 들어 “골드: 5000”, “철광석: 150\"과 같은 형식입니다. 표준 인벤토리 아이템과 달리, 심플 아이템에는 스택·유효기간·슬롯 제한이 없습니다. 리소스나 재료 목록을 표시할 때 사용합니다. 예를 들어 플레이어의 화폐 잔액, 제작 재료, 소모품 수량을 표시하는 화면에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 심플 아이템 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ); var items = await domain . SimpleItemsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ); var it = domain . SimpleItems ( ); List EzSimpleItem \u003e items = new List EzSimpleItem \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SimpleInventory ( \"item\" // inventoryName ); const auto It = Domain -\u003e SimpleItems ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzSimpleItemPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSimpleItems ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSimpleItems ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SimpleInventory ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSimpleItems ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSimpleItems ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SimpleInventory ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSimpleItems ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSimpleItems ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getBigInventoryModel 이름으로 특정 대형 인벤토리 타입 정의 조회 이름을 지정하여 대형 인벤토리 모델을 1건 조회합니다. 조회되는 정보에는 이 인벤토리에 속한 대형 아이템 모델의 목록이 포함됩니다. 특정 대형 인벤토리 타입의 상세 정보를 표시할 때 사용합니다. 예를 들어 “메가 화폐\"나 “누적 포인트” 인벤토리에서 추적되는 아이템을 확인할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzBigInventoryModel 거대 인벤토리 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BigInventoryModel ( \"item\" // inventoryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . big_inventory_model ( \"item\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BigInventoryModel ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FBigInventoryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . big_inventory_model ( \"item\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listBigInventoryModels 대형 인벤토리 타입 정의 목록 조회 이 네임스페이스에 등록된 모든 대형 인벤토리 모델을 조회합니다. 대형 인벤토리는 일반적인 정수로는 다룰 수 없을 만큼 매우 큰 수량(예: 수십억, 수조)을 가지는 아이템을 위해 설계되었습니다. 방치형/인크리멘탈 게임의 재화, 누적 포인트, 매우 큰 수치로 늘어나는 리소스에 유용합니다. 게임에서 어떤 종류의 대형 인벤토리를 사용할 수 있는지 확인할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 거대 인벤토리 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . BigInventoryModelsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . BigInventoryModels ( ); List EzBigInventoryModel \u003e items = new List EzBigInventoryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e BigInventoryModels ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzBigInventoryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBigInventoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBigInventoryModels ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBigInventoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBigInventoryModels ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeBigInventoryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeBigInventoryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getBigItemModel 이름으로 특정 대형 아이템 정의 조회 인벤토리 이름과 아이템 이름을 지정하여 대형 아이템 모델을 1건 조회합니다. 특정 대형 아이템 유형의 정의를 표시할 때 사용합니다. 예를 들어 게임 UI에서 “메가 골드\"나 “누적 XP\"의 속성을 표시할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzBigItemModel 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ). BigItemModel ( itemName : \"item-master-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ). BigItemModel ( itemName : \"item-master-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BigInventoryModel ( \"item\" // inventoryName ) -\u003e BigItemModel ( \"item-master-0001\" // itemName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . big_inventory_model ( \"item\" ) . big_item_model ( \"item-master-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ). BigItemModel ( itemName : \"item-master-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ). BigItemModel ( itemName : \"item-master-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BigInventoryModel ( \"item\" // inventoryName ) -\u003e BigItemModel ( \"item-master-0001\" // itemName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FBigItemModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . big_inventory_model ( \"item\" ) . big_item_model ( \"item-master-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listBigItemModels 인벤토리 내 대형 아이템 정의 목록 조회 지정한 대형 인벤토리에 속한 모든 대형 아이템 모델을 조회합니다. 대형 아이템 모델은 임의 정밀도의 수치(정수가 아닌 문자열로 저장)를 사용하여 매우 큰 수량을 가질 수 있는 아이템 유형을 정의합니다. 대형 인벤토리에 어떤 아이템이 존재할 수 있는지 확인할 때 사용합니다. 예를 들어 “메가 골드”, “누적 XP”, “총 가한 데미지량” 등의 목록 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 items List 거대 아이템 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ); var items = await domain . BigItemModelsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ); var it = domain . BigItemModels ( ); List EzBigItemModel \u003e items = new List EzBigItemModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BigInventoryModel ( \"item\" // inventoryName ); const auto It = Domain -\u003e BigItemModels ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzBigItemModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBigItemModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBigItemModels ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). BigInventoryModel ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBigItemModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBigItemModels ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BigInventoryModel ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeBigItemModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeBigItemModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. consumeBigItem 플레이어의 인벤토리에서 대형 아이템 사용(소비) 플레이어의 인벤토리에 있는 특정 대형 아이템의 수량을 줄입니다. 매우 큰 값을 지원하기 위해 소비 수량은 문자열로 지정합니다. 게임 고유의 로직으로 플레이어가 대형 수치 리소스를 소비하는 경우에 사용합니다. 예를 들어, 프레스티지 업그레이드에 “메가 골드 1,000,000,000\"을 사용하는 경우나 누적 포인트를 소비하는 경우입니다. 주의: 상품 구매(GS2-Showcase)나 퀘스트 시작(GS2-Quest)의 대가로 아이템을 소비하는 경우에는 해당 시스템이 자동으로 처리하므로, 이 API를 호출할 필요가 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. gameSession GameSession  GameSession consumeCount string  ~ 1024자 거대 아이템의 소비 수량 최대 1024자리까지의 정수값 문자열 Result 타입 설명 item EzBigItem 소비 후 거대 아이템 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 ConflictException ConflictException 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다. InsufficientException BadRequestException 아이템 소지 수량이 부족합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"inventory-0001\" ). BigItem ( itemName : \"item-0001\" ); var result = await domain . ConsumeBigItemAsync ( consumeCount : \"1234567890123456789012345678901234567890\" ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Inventory . Exception . ConflictException e ) { // Item manipulation process conflicted. Retry required. } catch ( Gs2 . Gs2Inventory . Exception . InsufficientException e ) { // Insufficient quantity of items in your possession. } var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"inventory-0001\" ). BigItem ( itemName : \"item-0001\" ); var future = domain . ConsumeBigItemFuture ( consumeCount : \"1234567890123456789012345678901234567890\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Inventory . Exception . ConflictException ) { // Item manipulation process conflicted. Retry required. } if ( future . Error is Gs2 . Gs2Inventory . Exception . InsufficientException ) { // Insufficient quantity of items in your possession. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BigInventory ( \"inventory-0001\" // inventoryName ) -\u003e BigItem ( \"item-0001\" // itemName ); const auto Future = Domain -\u003e ConsumeBigItem ( \"1234567890123456789012345678901234567890\" // consumeCount ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Inventory :: Error :: FConflictError :: Class )) { // Item manipulation process conflicted. Retry required. } if ( e -\u003e IsChildOf ( Gs2 :: Inventory :: Error :: FInsufficientError :: Class )) { // Insufficient quantity of items in your possession. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . big_inventory ( \"inventory-0001\" ) . big_item ( \"item-0001\" ) var async_result = await domain . consume_big_item ( \"1234567890123456789012345678901234567890\" # consume_count ) if async_result . error != null : if async_result . error is Gs2InventoryConflictException : # 아이템 조작 처리가 충돌했습니다. 재시도가 필요합니다. pass if async_result . error is Gs2InventoryInsufficientException : # 아이템 소지 수량이 부족합니다. pass push_error ( str ( async_result . error )) return var result = async_result . result getBigItem 특정 대형 아이템의 소지 수량 조회 플레이어가 소지한 특정 대형 아이템의 현재 수량을 조회합니다. 매우 큰 값을 지원하기 위해 수량은 문자열로 반환됩니다. 특정 대형 수치 리소스를 확인할 때 사용합니다. 예를 들어 게임의 메인 화면에서 “메가 골드: 1,234,567,890\"이라고 표시하거나, 플레이어 프로필에서 “누적 XP: 9,876,543,210\"이라고 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. gameSession GameSession  GameSession Result 타입 설명 item EzBigItem 거대 아이템 itemModel EzBigItemModel 거대 아이템 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ). BigItem ( itemName : \"item-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ). BigItem ( itemName : \"item-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BigInventory ( \"item\" // inventoryName ) -\u003e BigItem ( \"item-0001\" // itemName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . big_inventory ( \"item\" ) . big_item ( \"item-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ). BigItem ( itemName : \"item-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ). BigItem ( itemName : \"item-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BigInventory ( \"item\" // inventoryName ) -\u003e BigItem ( \"item-0001\" // itemName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Inventory :: Model :: FBigItem \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . inventory . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . big_inventory ( \"item\" ) . big_item ( \"item-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listBigItems 인벤토리 내 플레이어가 소지한 대형 아이템 목록 조회 지정한 대형 인벤토리에서 플레이어가 현재 소지하고 있는 모든 대형 아이템을 조회합니다. 각 아이템의 수량은 매우 큰 수치를 지원하기 위해 문자열로 저장됩니다(예: “1234567890123456789”). 한 번도 획득한 적이 없는 아이템은 결과에 포함되지 않습니다. 플레이어의 대형 수치 리소스를 표시할 때 사용합니다. 예를 들어 “메가 골드: 1,234,567,890”, “총 데미지: 9,876,543,210,000\"과 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 거대 아이템 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ); var items = await domain . BigItemsAsync ( ). ToListAsync (); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ); var it = domain . BigItems ( ); List EzBigItem \u003e items = new List EzBigItem \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BigInventory ( \"item\" // inventoryName ); const auto It = Domain -\u003e BigItems ( ); TArray Gs2 :: UE5 :: Inventory :: Model :: FEzBigItemPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBigItems ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBigItems ( callbackId ); var domain = gs2 . Inventory . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BigInventory ( inventoryName : \"item\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBigItems ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBigItems ( callbackId ); const auto Domain = Gs2 -\u003e Inventory -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BigInventory ( \"item\" // inventoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeBigItems ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeBigItems ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Inventory SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Inventory SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/inventory/game_engine/"},{"content":"모델 EzJob 잡 잡 큐란 즉시 처리를 완료하지 않고 처리를 지연 실행하기 위한 구조입니다. 예를 들어 캐릭터를 입수했을 때 즉시 실행해야 하는 처리는 소지품에 캐릭터를 저장하는 것입니다. 반면, 즉시 처리하지 않아도 되는 처리로는 도감에 등록한다 는 처리가 있습니다. 이처럼 즉시 처리할 필요가 없는 처리를 잡 큐를 경유하여 처리하도록 하면 장애에 강한 설계로 만들 수 있습니다. 왜냐하면 도감 서비스가 어떤 장애로 인해 정지되어 있더라도, 도감에 등록되지 않은 상태로 게임을 계속할 수 있기 때문입니다. 잡 큐에 쌓인 처리는 실패하더라도 장애가 해소된 후 재시도함으로써 결과적으로 올바른 상태로 만들 수 있습니다. GS2에서는 이러한 최종 일관성 처리를 권장하며, 다양한 상황에서 잡 큐를 이용한 지연 처리가 이루어집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 jobId string ※ ~ 1024자 잡 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 scriptId string  ~ 1024자 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN args string  ~ 5242880자 인수 잡의 실행 시 스크립트에 전달할 JSON 형식의 요청 파라미터입니다. 액션 타입이나 대상 리소스 등 구체적인 조작 내용을 포함합니다. 최대 5MB입니다. currentRetryCount int 0 0 ~ 100 현재 재시도 횟수 실패 후 이 잡이 재시도된 횟수입니다. 재시도 가능한 오류로 실행이 종료될 때마다 증가합니다. 이 횟수가 maxTryCount에 도달하면 잡은 영구적인 실패로 표시됩니다. maxTryCount int 3 1 ~ 100 최대 시도 횟수 최초 시도와 재시도를 포함하여 이 잡을 실행할 수 있는 최대 횟수입니다. 모든 시도가 실패하면 잡은 포기됩니다. 기본값은 3, 최대값은 100입니다. EzJobResult 잡 실행 결과(상세) 단일 잡 실행 시도의 결과를 기록합니다. 각 시도마다 개별 JobResult가 생성되므로, 여러 번 재시도된 잡에는 여러 개의 결과가 존재합니다. statusCode는 잡이 성공했는지 실패했는지를 나타냅니다. 타입 활성화 조건 필수 기본값 값 제한 설명 statusCode int  0 ~ 1000 상태 코드 스크립트 실행에서 반환된 HTTP 상태 코드입니다. 2xx 코드는 성공을 나타내고, 그 외의 코드는 실패를 나타냅니다. 재시도 가능한 오류인 경우 maxTryCount에 도달하지 않았다면 자동으로 재시도가 이루어질 수 있습니다. result string  ~ 5242880자 응답 내용 스크립트 실행에서 반환된 JSON 형식의 응답 본문입니다. 성공 시에는 결과 데이터를, 실패 시에는 오류 상세 정보를 포함합니다. 최대 5MB입니다. EzJobEntry 등록 잡 잡 큐에 새로운 잡을 등록하기 위한 파라미터를 나타냅니다. 실행할 스크립트, JSON 인수, 최대 재시도 횟수를 포함합니다. 잡을 큐에 푸시할 때의 입력으로 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 scriptId string  ~ 1024자 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN args string “{}” ~ 131072자 인수 잡 실행 시 스크립트에 전달할 JSON 형식의 요청 파라미터입니다. 기본값은 빈 JSON 객체 “{}” 입니다. 최대 128KB입니다. maxTryCount int 3 0 ~ 100 최대 시도 횟수 최초 시도와 재시도를 포함하여 잡을 실행할 수 있는 최대 횟수입니다. 기본값은 3이며, 최대값은 100입니다. EzJobResultBody 잡의 실행 결과 시도 번호, 상태 코드, 응답 내용, 실행 타임스탬프를 포함하는 잡 실행 결과의 경량 표현입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 tryNumber int  1 ~ 10000 시도 횟수 이 실행 결과의 일련 시도 번호로, 1부터 시작합니다. 어느 재시도 시도가 이 결과를 생성했는지 식별하는 데 사용됩니다. statusCode int  0 ~ 1000 상태 코드 스크립트 실행에서 반환된 HTTP 상태 코드입니다. 2xx 코드는 성공을 나타내고, 그 외의 코드는 실패를 나타냅니다. 재시도 가능한 오류인 경우 maxTryCount에 도달하지 않았다면 자동으로 재시도가 이루어질 수 있습니다. result string  ~ 5242880자 응답 내용 스크립트 실행에서 반환된 JSON 형식의 응답 본문입니다. 성공 시에는 결과 데이터를, 실패 시에는 오류 상세 정보를 포함합니다. 최대 5MB입니다. tryAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 메서드 run 플레이어의 잡 큐에 있는 다음 잡을 실행한다 GS2에서는 즉시 완료하지 않아도 되는 처리를 ‘잡 큐’로 지연 실행합니다. 예를 들어 캐릭터를 입수했을 때 소지품 추가는 즉시 수행하지만, 도감 등록은 잡 큐를 통해 나중에 처리할 수 있습니다. 이러한 구조 덕분에 관련 서비스가 일시적으로 중단되더라도 게임을 계속 진행할 수 있으며, 큐에 쌓인 잡은 서비스 복구 후 재시도되어 올바른 상태가 됩니다. 이 API를 호출하면 플레이어의 큐에 있는 다음 잡을 하나 실행하고 그 결과를 반환합니다. 응답에 포함된 isLastJob 플래그가 false 인 경우 아직 처리되지 않은 잡이 남아 있으므로, true 가 될 때까지 반복해서 호출하십시오. 네임스페이스에 푸시 통지를 설정해 두면 새로운 잡이 추가되는 시점에 통지를 받을 수 있으므로, 폴링하지 않고 통지를 트리거로 삼아 이 API를 호출할 수도 있습니다. 네임스페이스에서 enableAutoRun 을 활성화한 경우에는 잡이 서버 측에서 자동으로 실행되므로, 이 API를 호출할 필요가 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzJob 잡 result EzJobResultBody 잡 실행 결과 내용 isLastJob bool Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 ConflictException ConflictException 잡 큐 실행이 충돌했습니다. 재시도가 필요합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません // New Experience runs at the SDK level, so there is no need to explicitly call the API // SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 # SDK 레벨에서 실행되므로 명시적으로 API를 호출할 필요는 없습니다 getResult 완료된 잡의 실행 결과를 조회한다 잡 이름을 지정하여 해당 잡의 실행 결과를 조회합니다. 결과에는 성공·실패를 나타내는 상태 코드와 잡이 반환한 응답 내용이 포함됩니다. 도감 등록이나 보상 배포 등 지연 처리가 올바르게 완료되었는지 확인하고 싶을 때 사용합니다. 잡이 여러 번 재시도된 경우에는 시도 횟수를 지정하여 특정 시도의 결과를 확인할 수도 있습니다. ※ 잡의 실행 결과는 실행 후 일정 기간 동안만 보관되며, 자동으로 삭제될 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession jobName string  UUID ~ 36자 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. tryNumber int 0 ~ 10000 시도 횟수 Result 타입 설명 item EzJobResult 잡 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . JobQueue . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Job ( jobName : \"job-0001\" ). JobResult ( tryNumber : null ); var item = await domain . ModelAsync (); var domain = gs2 . JobQueue . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Job ( jobName : \"job-0001\" ). JobResult ( tryNumber : null ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e JobQueue -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Job ( \"job-0001\" // jobName ) -\u003e JobResult ( nullptr // tryNumber ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . job_queue . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . job ( \"job-0001\" ) . job_result ( null ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . JobQueue . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Job ( jobName : \"job-0001\" ). JobResult ( tryNumber : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . JobQueue . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Job ( jobName : \"job-0001\" ). JobResult ( tryNumber : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e JobQueue -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Job ( \"job-0001\" // jobName ) -\u003e JobResult ( nullptr // tryNumber ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: JobQueue :: Model :: FJobResult \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . job_queue . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . job ( \"job-0001\" ) . job_result ( null ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. 이벤트 핸들러 OnPushNotification 잡 큐에 잡이 등록되었을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . JobQueue . OnPushNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; }; gs2 . JobQueue . OnPushNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; }; Gs2 -\u003e JobQueue -\u003e OnPushNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; }); ez . job_queue . push_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id ) OnRunNotification 잡 큐의 잡을 실행했을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID jobName string 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . JobQueue . OnRunNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var jobName = notification . JobName ; }; gs2 . JobQueue . OnRunNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var jobName = notification . JobName ; }; Gs2 -\u003e JobQueue -\u003e OnRunNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto JobName = Notification -\u003e JobNameValue ; }); ez . job_queue . run_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var job_name = notification . job_name )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-JobQueue SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-JobQueue SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/job_queue/game_engine/"},{"content":"모델 EzCounter 사용 횟수 제한의 현재 값 각 사용자의 사용 횟수 제한 모델에 속한 특정 카운터의 현재 사용 횟수를 추적합니다. 하나의 사용 횟수 제한 모델 아래에 여러 카운터를 만들 수 있습니다(예: 1회 한정 보상을 위해 퀘스트마다 하나의 카운터). 카운트 값은 카운트업 조작 시 지정되는 최대값과 비교되며, 사용 횟수 제한 모델의 리셋 일정에 따라 자동으로 0으로 리셋됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 counterId string ※ ~ 1024자 카운터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. name string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. count int 0 0 ~ 2147483646 카운트 값 이 카운터의 현재 사용 횟수입니다. countUp 조작으로 증가하며, 이때 지정된 최대값과 비교됩니다. 사용 횟수 제한 모델의 리셋 시점에 도달하면 자동으로 0으로 리셋됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzLimitModel 횟수 제한 모델 횟수 제한 모델에는 사용 횟수를 리셋하는 타이밍을 설정할 수 있습니다. 리셋 간격은 “매일”, “매주”, “매월”, “리셋하지 않음”, “일정 일수마다” 5가지 중에서 선택할 수 있습니다. 또한, 횟수 제한의 최대값은 마스터 데이터 쪽에서는 고정하지 않습니다. 이는 게임 내 컨텍스트에 따라 허용되는 최대 횟수를 동적으로 변경할 수 있도록 하기 위함입니다. 예를 들어 스텝업 가챠처럼, 구매 횟수 카운터가 3회 미만일 때 구매할 수 있는 상품 위 상품을 구매할 수 없을 때, 구매 횟수 카운터가 5회 미만이면 구매할 수 있는 다른 상품 과 같이, 상황에 따라 “최대 횟수\"를 전환할 수 있는 설계를 상정하고 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 limitModelId string ※ ~ 1024자 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” }  리셋 타이밍 이 횟수 제한 모델 하위의 카운터 값이 자동으로 0으로 리셋되는 타이밍을 결정합니다. notReset(영구적, 리셋 없음), daily(매일 지정된 시각에 리셋), weekly(지정된 요일에 리셋), monthly(지정된 날짜에 리셋), days(기준 일시로부터 일정 일수마다 리셋) 중에서 선택합니다. 모든 시각은 UTC입니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋 날짜 resetType이 “monthly\"인 경우 카운터가 리셋되는 날짜(일)입니다. 1~31 사이의 값이 유효합니다. 지정한 날짜가 해당 월의 일수를 초과하는 경우(예: 2월의 31일), 해당 월의 마지막 날에 리셋됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋 요일 resetType이 “weekly\"인 경우 카운터가 리셋되는 요일입니다. 이 요일의 resetHour(UTC)로 지정된 시각에 리셋됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 daily, weekly, monthly 리셋 타입에서 카운터가 리셋되는 UTC 시각(0~23)입니다. 예를 들어 값이 0이면 UTC 자정에 카운터가 리셋됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋 일수 resetType이 “days\"인 경우 카운터 리셋 간격(일수)입니다. 리셋 주기는 anchorTimestamp를 기준으로 계산됩니다. 예를 들어 days가 7이고 anchorTimestamp가 월요일 정오라면, 매주 월요일 정오에 카운터가 리셋됩니다. ※ resetType이(가) “days” 이면 필수 메서드 countUp 횟수 제한 카운터 카운트업 지정한 카운터를 지정한 양만큼 증가시킵니다. 카운터가 최대값을 초과하는 경우 작업은 실패합니다. 이것이 횟수 제한이 적용되는 방식입니다. 예를 들어, 데일리 구매 제한이 3회로 설정되어 있고 플레이어가 이미 2회 구매한 경우, 1만큼 카운트업하면 성공합니다(합계: 3). 하지만 다시 카운트업하려고 하면 제한을 초과하므로 실패합니다. 증가량(countUpValue)과 허용되는 최대값(maxValue)을 모두 지정할 수 있습니다. 플레이어가 제한 액션을 실행할 때 사용합니다. 예를 들어 데일리 상점 구매나 제한된 던전 입장 시 호출합니다. 카운트업이 실패하면 플레이어가 제한에 도달했음을 의미합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. gameSession GameSession  GameSession countUpValue int 1 1 ~ 2147483646 카운트업할 양 maxValue int 1 ~ 2147483646 카운트업을 허용하는 최댓값 Result 타입 설명 item EzCounter 카운트를 증가시킨 카운터 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 OverflowException BadRequestException 횟수 제한의 상한에 도달했습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( limitName : \"daily\" , counterName : \"counter1\" ); var result = await domain . CountUpAsync ( countUpValue : 1 , maxValue : 100 ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Limit . Exception . OverflowException e ) { // The maximum number of times limit has been reached. } var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( limitName : \"daily\" , counterName : \"counter1\" ); var future = domain . CountUpFuture ( countUpValue : 1 , maxValue : 100 ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Limit . Exception . OverflowException ) { // The maximum number of times limit has been reached. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Counter ( \"daily\" , // limitName \"counter1\" // counterName ); const auto Future = Domain -\u003e CountUp ( 1 , // countUpValue 100 // maxValue ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Limit :: Error :: FOverflowError :: Class )) { // The maximum number of times limit has been reached. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . limit . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"daily\" , \"counter1\" ) var async_result = await domain . count_up ( 1 , # count_up_value 100 # max_value ) if async_result . error != null : if async_result . error is Gs2LimitOverflowException : # 횟수 제한의 상한에 도달했습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result getCounter 특정 횟수 제한 카운터 조회 횟수 제한 모델명과 카운터명을 지정하여 특정 카운터를 조회합니다. 카운터는 현재 기간 내에 플레이어가 이 특정 액션을 몇 번 실행했는지를 나타냅니다. 특정 액션의 남은 횟수를 확인하는 데 사용합니다. 예를 들어 던전 입장 화면에서 “데일리 던전: 3/5회 사용 완료 — 남은 횟수 2회\"와 같이 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. gameSession GameSession  GameSession Result 타입 설명 item EzCounter 카운터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( limitName : \"daily\" , counterName : \"counter1\" ); var item = await domain . ModelAsync (); var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( limitName : \"daily\" , counterName : \"counter1\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Counter ( \"daily\" , // limitName \"counter1\" // counterName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . limit . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"daily\" , \"counter1\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( limitName : \"daily\" , counterName : \"counter1\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( limitName : \"daily\" , counterName : \"counter1\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Counter ( \"daily\" , // limitName \"counter1\" // counterName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Limit :: Model :: FCounter \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . limit . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"daily\" , \"counter1\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listCounters 플레이어의 횟수 제한 카운터 목록 조회 플레이어의 모든 횟수 제한 카운터를 조회하여, 각 제한 액션을 몇 번 실행했는지 확인할 수 있습니다. 횟수 제한 모델명으로 필터링할 수도 있습니다. 생략하면 모든 제한 유형의 카운터가 반환됩니다. 각 카운터는 특정 액션의 현재 카운트를 추적합니다(예: “데일리 상점 구매: 오늘 2/3회 사용”). “남은 횟수” 또는 “데일리 제한” 개요 화면을 구축하는 데 사용합니다. 예를 들어 “상점 구매: 2/3회, 던전 입장: 1/5회, 무료 가챠: 0/1회\"와 같은 표시에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 카운터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . CountersAsync ( limitName : \"daily\" ). ToListAsync (); var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Counters ( limitName : \"daily\" ); List EzCounter \u003e items = new List EzCounter \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Counters ( \"daily\" // limitName ); TArray Gs2 :: UE5 :: Limit :: Model :: FEzCounterPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCounters ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCounters ( callbackId ); var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCounters ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCounters ( callbackId ); const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeCounters ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeCounters ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getLimitModel 이름을 지정하여 특정 횟수 제한 정의 조회 이름을 지정하여 횟수 제한 모델을 1건 조회합니다. 반환되는 정보에는 리셋 타입(리셋 없음 / 데일리 / 위클리 / 먼슬리)과 관련 설정이 포함됩니다. 특정 제한의 규칙을 표시하는 데 사용합니다. 예를 들어 상점 상세 화면에서 “데일리 상점 제한 — 매일 자정에 리셋\"과 같이 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzLimitModel 횟수 제한 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). LimitModel ( limitName : \"limit-model-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). LimitModel ( limitName : \"limit-model-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e LimitModel ( \"limit-model-0001\" // limitName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . limit . namespace_ ( \"namespace-0001\" ) . limit_model ( \"limit-model-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). LimitModel ( limitName : \"limit-model-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ). LimitModel ( limitName : \"limit-model-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e LimitModel ( \"limit-model-0001\" // limitName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Limit :: Model :: FLimitModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . limit . namespace_ ( \"namespace-0001\" ) . limit_model ( \"limit-model-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listLimitModels 횟수 제한 정의 목록 조회 이 네임스페이스에 등록된 모든 횟수 제한 모델을 조회합니다. 제한 모델은 사용 횟수 카운터의 동작 방식, 특히 리셋 시점을 정의합니다. 리셋 옵션은 다음과 같습니다: 리셋 없음: 카운터가 리셋되지 않음(예: 1회 한정 첫 클리어 보너스) 데일리: 매일 리셋(예: “하루 최대 3회 구매 가능”) 위클리: 매주 리셋(예: 주간 던전 도전 횟수) 먼슬리: 매월 리셋(예: 월간 보상 수령 횟수) 게임에 어떤 종류의 횟수 제한이 있는지 확인하는 데 사용합니다. 예를 들어 상점이나 활동 화면에서 “데일리 제한”, “위클리 제한” 카테고리를 표시할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 횟수 제한 모델의 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . LimitModelsAsync ( ). ToListAsync (); var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . LimitModels ( ); List EzLimitModel \u003e items = new List EzLimitModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e LimitModels ( ); TArray Gs2 :: UE5 :: Limit :: Model :: FEzLimitModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeLimitModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeLimitModels ( callbackId ); var domain = gs2 . Limit . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeLimitModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeLimitModels ( callbackId ); const auto Domain = Gs2 -\u003e Limit -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeLimitModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeLimitModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Limit SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Limit SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/limit/game_engine/"},{"content":"모델 EzMutex 뮤텍스 GS2가 제공하는 뮤텍스는 재진입 가능한 락의 일종입니다. 잠금을 획득할 때 트랜잭션 ID를 지정하며, 동일한 트랜잭션 ID를 지정한 경우에만 다시 잠금을 획득할 수 있습니다. 참조 카운터를 가지므로, 해제할 때에는 동일한 횟수만큼 잠금 해제 처리가 필요합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 mutexId string ※ ~ 1024자 뮤텍스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. transactionId string  ~ 256자 트랜잭션 ID 잠금을 획득하는 트랜잭션의 식별자입니다. 이 ID는 재진입 가능한 잠금을 구현하는 데 사용됩니다. 잠금 요청이 현재 잠금을 보유한 것과 동일한 트랜잭션 ID를 지정한 경우, 잠금은 재획득에 성공하며 참조 카운터가 증가합니다. 다른 트랜잭션 ID로의 잠금 요청은 잠금이 유지되는 동안 거부됩니다. ttlAt long 현재 시각으로부터 1시간 후의 절대 시각 유효기간 일시 UNIX 시간·밀리초 메서드 get 뮤텍스 상태 조회 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. gameSession GameSession  GameSession Result 타입 설명 item EzMutex 뮤텍스 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lock . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mutex ( propertyId : \"property-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Lock . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mutex ( propertyId : \"property-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Lock -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mutex ( \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lock . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mutex ( propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Lock . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mutex ( propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Lock -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mutex ( \"property-0001\" // propertyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Lock :: Model :: FMutex \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. lock 잠금 획득 ttl로 지정한 초 동안 프로퍼티 ID 의 리소스를 잠급니다. 잠금 시에는 트랜잭션 ID 를 지정해야 합니다. 서로 다른 트랜잭션 ID 로 동일한 프로퍼티 ID 에 대한 잠금 획득을 시도하면 실패합니다. 동일한 트랜잭션으로부터의 잠금 획득 요청인 경우에는 참조 카운터를 증가시킵니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. gameSession GameSession  GameSession transactionId string  ~ 256자 트랜잭션 ID 잠금을 획득하는 트랜잭션의 식별자입니다. 이 ID는 재진입 가능한 잠금을 구현하는 데 사용됩니다. 잠금 요청이 현재 잠금을 보유한 것과 동일한 트랜잭션 ID를 지정한 경우, 잠금은 재획득에 성공하며 참조 카운터가 증가합니다. 다른 트랜잭션 ID로의 잠금 요청은 잠금이 유지되는 동안 거부됩니다. ttl long  0 ~ 9223372036854775805 잠금 획득 기간(초) Result 타입 설명 item EzMutex 뮤텍스 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lock . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mutex ( propertyId : \"property-0001\" ); var result = await domain . LockAsync ( transactionId : \"transaction-0001\" , ttl : 100000L ); var item = await result . ModelAsync (); var domain = gs2 . Lock . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mutex ( propertyId : \"property-0001\" ); var future = domain . LockFuture ( transactionId : \"transaction-0001\" , ttl : 100000L ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Lock -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mutex ( \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Lock ( \"transaction-0001\" , // transactionId 100000L // ttl ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); unlock 잠금 해제 잠금을 해제하려면 동일한 트랜잭션 ID 로부터 해제해야 합니다. 잠금 획득 시 재진입이 이루어진 경우에는 동일한 횟수만큼 잠금 해제를 수행해야 하며, 참조 카운터가 0이 되는 시점에 실제로 해제가 이루어집니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. gameSession GameSession  GameSession transactionId string  ~ 256자 트랜잭션 ID 잠금을 획득하는 트랜잭션의 식별자입니다. 이 ID는 재진입 가능한 잠금을 구현하는 데 사용됩니다. 잠금 요청이 현재 잠금을 보유한 것과 동일한 트랜잭션 ID를 지정한 경우, 잠금은 재획득에 성공하며 참조 카운터가 증가합니다. 다른 트랜잭션 ID로의 잠금 요청은 잠금이 유지되는 동안 거부됩니다. Result 타입 설명 item EzMutex 뮤텍스 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lock . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mutex ( propertyId : \"property-0001\" ); var result = await domain . UnlockAsync ( transactionId : \"transaction-0001\" ); var domain = gs2 . Lock . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Mutex ( propertyId : \"property-0001\" ); var future = domain . UnlockFuture ( transactionId : \"transaction-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Lock -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Mutex ( \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Unlock ( \"transaction-0001\" // transactionId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result ();","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Lock SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Lock SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/lock/game_engine/"},{"content":"모델 EzInGameLog 인게임 로그 게임 클라이언트 또는 서버 사이드 스크립트에서 전송되는 커스텀 로그 엔트리입니다. GS2 API 호출로 자동 생성되는 액세스 로그와 달리, 인게임 로그는 게임 개발자가 플레이어의 행동, 게임 상태 변화, 비즈니스 메트릭 등 게임 고유의 이벤트를 기록하기 위해 명시적으로 전송합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  일시 인게임 로그가 전송된 일시입니다. userId string ~ 128자 사용자ID tags List [] 0 ~ 20 items 태그 필터링과 분류를 위해 로그 엔트리에 부여된 키-값 쌍입니다. 태그를 통해 인게임 로그의 효율적인 검색과 집계가 가능합니다(예: 이벤트 타입, 스테이지 ID, 아이템 카테고리). payload string  ~ 10485760자 페이로드 JSON 형식의 커스텀 로그 데이터입니다. 플레이어의 행동, 게임 상태, 비즈니스 메트릭 등 게임 고유의 임의의 정보를 포함할 수 있습니다. 최대 10MB까지 가능합니다. EzInGameLogTag 게임 내 로그의 태그 인게임 로그 항목의 필터링과 분류에 사용되는 키-값 쌍입니다. 각 태그 키는 하나의 로그 항목 내에서 고유해야 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 태그 이름 이 태그의 키 이름입니다. 인게임 로그를 검색할 때 필터 조건으로 사용됩니다. value string  ~ 128자 태그 값 이 태그의 값입니다. 키와 조합하여 특정 조건으로 로그를 필터링할 수 있습니다(예: key=“stageId”, value=“stage-001”). 메서드 sendInGameLog 게임 내 로그를 전송합니다 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. tags List [] 0 ~ 20 items 태그 필터링과 분류를 위해 로그 엔트리에 부여된 키-값 쌍입니다. 태그를 통해 인게임 로그의 효율적인 검색과 집계가 가능합니다(예: 이벤트 타입, 스테이지 ID, 아이템 카테고리). payload string  ~ 10485760자 페이로드 JSON 형식의 커스텀 로그 데이터입니다. 플레이어의 행동, 게임 상태, 비즈니스 메트릭 등 게임 고유의 임의의 정보를 포함할 수 있습니다. 최대 10MB까지 가능합니다. gameSession GameSession GameSession Result 타입 설명 item EzInGameLog 게임 내 로그 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Log . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . SendInGameLogAsync ( payload : \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" , tags : new List Gs2 . Unity . Gs2Log . Model . EzInGameLogTag \u003e { new Gs2 . Unity . Gs2Log . Model . EzInGameLogTag () { Key = \"tag1\" , Value = \"value1\" , }, new Gs2 . Unity . Gs2Log . Model . EzInGameLogTag () { Key = \"tag2\" , Value = \"value2\" , }, } ); var item = await result . ModelAsync (); var domain = gs2 . Log . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . SendInGameLogFuture ( payload : \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" , tags : new List Gs2 . Unity . Gs2Log . Model . EzInGameLogTag \u003e { new Gs2 . Unity . Gs2Log . Model . EzInGameLogTag () { Key = \"tag1\" , Value = \"value1\" , }, new Gs2 . Unity . Gs2Log . Model . EzInGameLogTag () { Key = \"tag2\" , Value = \"value2\" , }, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Log -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e SendInGameLog ( \"{ \\\" category \\\" : \\\" use-item \\\" , \\\" count \\\" : 1, \\\" itemId \\\" : \\\" item-0001 \\\" }\" , // payload [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Log :: Model :: FEzInGameLogTag \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Log :: Model :: FEzInGameLogTag \u003e () -\u003e WithKey ( TOptional FString \u003e ( \"tag1\" )) -\u003e WithValue ( TOptional FString \u003e ( \"value1\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Log :: Model :: FEzInGameLogTag \u003e () -\u003e WithKey ( TOptional FString \u003e ( \"tag2\" )) -\u003e WithValue ( TOptional FString \u003e ( \"value2\" )) ); return v ; }() // tags ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result ();","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Log SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Log SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/log/game_engine/"},{"content":"모델 EzReceiveStatus 수신 상태 사용자별·보너스 모델별 로그인 보너스의 수신 상태를 추적합니다. 각 항목이 해당 날짜의 보상을 수신했는지 여부를 나타내는 불리언 배열(receivedSteps)을 보유합니다. 또한 일별 수신 자격을 판정하기 위해 마지막으로 보너스를 수신한 시각(lastReceivedAt)을 기록합니다. receivedSteps는 보너스 사이클이 재시작될 때(반복이 활성화된 스트리밍 모드 등) 초기화될 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. receivedSteps List [] 0 ~ 100 items 수신 스텝 보상 목록의 각 날짜에 대응하는 순서가 있는 불리언 배열. true는 사용자가 해당 날짜의 보상을 수신했음을 나타내고, false는 놓쳤거나 아직 수신하지 않았음을 나타냅니다. 배열의 인덱스는 관련된 BonusModel의 rewards 배열과 대응합니다. 스트리밍 모드에서 반복이 활성화된 경우, 사이클이 재시작될 때 이 배열은 초기화됩니다. lastReceivedAt long 마지막 수신 시각 사용자가 마지막으로 로그인 보너스를 수신한 시각의 타임스탬프. 보너스 모델에 정의된 리셋 시각을 기준으로, 사용자가 오늘의 보너스를 이미 수신했는지 여부를 판정하는 데 사용됩니다. 수신 상태가 초기화될 때(반복 모드에서의 사이클 재시작 시 등) 0으로 재설정됩니다. EzBonusModel 로그인 보너스 모델 로그인 보너스 모델에는 로그인 보너스의 배포 스케줄을 설정합니다. 배포 스케줄에는 《스케줄 모드》와 《스트리밍 모드》가 있습니다. 스케줄 모드에서는 GS2-Schedule의 이벤트 지정이 필수이며, 해당 이벤트의 시작일로부터 경과한 일수에 따라 보너스를 배포합니다. 도중에 놓친 날짜가 발생한 경우, 그 날의 보너스는 배포되지 않습니다. 스트리밍 모드에서는 매일 보너스에 설정된 보상을 처음부터 순서대로 배포합니다. 스트리밍 모드에서는 반복 설정이 가능합니다. 이 경우 스트림의 끝에 도달하면 다시 처음부터 배포를 시작합니다. 스케줄 모드·스트리밍 모드 모두 미수령 구제 기능이 있습니다. 일정한 비용을 지불함으로써 놓친 보너스를 수령할 수 있습니다. 단, GS2-Schedule의 이벤트가 연결되어 있는 경우, 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없습니다. 미수령 구제 기능은 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 스케줄 모드·스트리밍 모드 모두, 설정 가능한 보너스의 최대 일수는 100일입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “schedule”,   “streaming” }  모드 로그인 보너스의 배포 스케줄 종류를 지정합니다. “schedule” 모드에서는 GS2-Schedule의 이벤트 시작일로부터 경과한 일수를 기준으로 보상이 배포됩니다. “streaming” 모드에서는 달력 날짜와 관계없이 매일 처음부터 순서대로 보상이 배포됩니다. 정의 설명 schedule 스케줄 모드 streaming 스트리밍 모드 periodEventId string ~ 1024자 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 로그인 보너스를 활성화할 기간을 나타내는 GS2-Schedule의 이벤트 GRN입니다. 스케줄 모드에서는 필수이며, 보상 배포의 경과 일수를 계산하는 기준이 되는 시작일을 결정합니다. 스트리밍 모드에서는 생략 가능하지만, 지정한 경우 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없게 됩니다. resetHour int {periodEventId} == \"\" ※ 0 ~ 23 리셋 시간(UTC) 수령 플래그가 리셋되는 시각(0~23, UTC)입니다. 로그인 보너스에서 날짜가 바뀌는 시점을 결정합니다. periodEventId가 지정되지 않은 경우에만 필요합니다. 이벤트가 설정되어 있는 경우, 리셋 시점은 이벤트의 스케줄을 따릅니다. ※ periodEventId이(가) \"\" 이면 필수 repeat 문자열 열거형 enum {   “enabled”,   “disabled” } {mode} == “streaming” ※ 반복 모든 보상을 배포한 후, 처음부터 다시 배포할지 여부입니다. 스트리밍 모드에서만 유효합니다. 활성화하면 마지막 보상을 배포한 후 첫 번째 보상으로 돌아가 반복됩니다. 주의: 반복이 활성화된 경우, 미수령 구제 기능은 사용할 수 없습니다. 정의 설명 enabled 활성화 disabled 비활성화 ※ mode이(가) “streaming” 이면 필수 rewards List 0 ~ 100 items 보상 목록 날짜별 보상의 순서가 지정된 목록입니다. 각 항목은 하루치 로그인 보너스에 대응하며, 인덱스 0부터 순서대로 배포됩니다. 스케줄 모드에서는 인덱스가 이벤트 시작일로부터 경과한 일수에 대응합니다. 스트리밍 모드에서는 인덱스가 로그인 일수에 대응합니다. 최대 100개 항목까지 설정할 수 있습니다. missedReceiveRelief 문자열 열거형 enum {   “enabled”,   “disabled” } “disabled” 미수령 구제 기능 놓친 보너스의 구제 기능을 활성화할지 여부입니다. 활성화하면 사용자는 지정된 비용(소비 액션)을 지불함으로써 받지 못한 보너스를 소급하여 수령할 수 있습니다. 필요에 따라 구제를 허용하기 전에 조건을 확인하는 검증 액션도 설정할 수 있습니다. 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 기본값은 “disabled\"입니다. 정의 설명 enabled 활성화 disabled 비활성화 missedReceiveReliefVerifyActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 검증 액션 목록 미수령 구제를 허용하기 전에 실행되는 검증 액션의 목록입니다. 구제 처리 전에 사용자의 자격 등 전제 조건을 확인합니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 missedReceiveReliefConsumeActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 소비 액션 목록 놓친 보너스를 구제하기 위해 사용자가 지불해야 하는 비용을 정의하는 소비 액션의 목록입니다. 예를 들어 게임 내 화폐나 아이템을 구제 비용으로 소비하도록 설정할 수 있습니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 EzReward 보상 로그인 보너스의 하루치 보상 설정을 나타냅니다. 각 Reward에는 사용자가 수신할 항목(아이템, 화폐, 경험치 등)을 정의하는 입수 액션 목록이 포함됩니다. BonusModel의 rewards 배열은 하루당 하나의 Reward를 보유하며, 순서대로 배포됩니다. 보상 값은 버프 시스템(BonusModelBuff)을 통해 실행 시점에 변경할 수 있으며, 입수 액션에 배율을 적용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List  1 ~ 10 items 입수 액션 목록 이 날짜의 보상으로 사용자에게 부여되는 리소스를 정의하는 입수 액션 목록. 각 액션은 입수 액션(아이템 추가, 화폐 부여 등)과 그 요청 파라미터를 지정합니다. 보상당 최소 1개, 최대 10개의 액션을 설정할 수 있습니다. EzConfig Config 설정 트랜잭션 변수에 적용할 설정값의 키-값 쌍입니다. Config 엔트리를 통해 실행 시점에 획득 액션의 동적인 매개변수화가 가능합니다. 예를 들어 슬롯 이름이나 그 밖의 문맥에 따라 달라지는 값을 Config 설정을 통해 트랜잭션 요청에 주입할 수 있어, 마스터 데이터를 변경하지 않고도 유연한 보상 설정을 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 키 트랜잭션 매개변수 내에서 치환되는 변수명입니다. 최대 64자. value string ~ 51200자 값 트랜잭션 매개변수 내에서 대응하는 키에 대입되는 값입니다. 최대 51,200자. EzConsumeAction 소비 액션 소비 액션의 구조를 통해 사용자로부터 리소스를 소비하는 액션을 정의합니다. 미수령 보너스 구제에서 사용자가 지불해야 하는 비용(화폐 차감, 아이템 소비 등)을 지정하는 데 사용됩니다. action 필드는 소비 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyAction 검증 액션 작업을 실행하기 전에 조건을 검증하는 액션을 정의합니다. 미수령 보너스 구제에서 구제를 허용하기 전에 전제 조건(사용자 자격, 리소스 이용 가능 여부 등)을 확인하는 데 사용됩니다. action 필드는 검증 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzAcquireAction 획득 액션 획득 액션의 구조를 통해 사용자에게 리소스를 부여하는 액션을 정의합니다. 보상 내에서 사용되며, 사용자가 받는 것(인벤토리에 아이템 추가, 화폐 부여, 경험치 부여 등)을 지정합니다. action 필드는 획득 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 missedReceive 놓친 로그인 보너스 수령 과거에 로그인하지 못해 놓친 날짜의 보너스를 나중에 수령할 수 있습니다. 이 기능을 사용하려면 보너스 모델에서 “미수령 구제\"가 활성화되어 있어야 합니다. 활성화된 경우, 플레이어는 비용을 지불하여 놓친 보상을 수령할 수 있습니다. 예를 들어 “젬 50개를 소비하여 3일차의 보상을 수령\"하는 식으로 사용할 수 있습니다. 스케줄 모드에서는 이벤트 시작일로부터 경과한 일수까지의 보상만 구제할 수 있습니다. 스트리밍 모드에서는 단계 번호를 자동으로 판정할 수 있으므로 생략할 수 있습니다. 스트리밍 모드에서 “반복\"이 활성화되어 있는 경우, 이 기능은 사용할 수 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession stepNumber int 0 ~ 100 수령할 스텝 번호. 스트리밍 모드에서는 생략할 수 있습니다 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzReceiveStatus 수령 상태 bonusModel EzBonusModel 로그인 보너스 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 로그인 보너스 수령 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 AlreadyReceivedException BadRequestException 오늘의 로그인 보너스는 이미 수령했습니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Bonus ( ); var result = await domain . MissedReceiveAsync ( bonusModelName : \"bonus-0001\" , stepNumber : 1 , config : null ); } catch ( Gs2 . Gs2LoginReward . Exception . AlreadyReceivedException e ) { // You have already received today's login bonus. } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Bonus ( ); var future = domain . MissedReceiveFuture ( bonusModelName : \"bonus-0001\" , stepNumber : 1 , config : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2LoginReward . Exception . AlreadyReceivedException ) { // You have already received today's login bonus. } onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Bonus ( ); const auto Future = Domain -\u003e MissedReceive ( \"bonus-0001\" , // bonusModelName 1 // stepNumber // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: LoginReward :: Error :: FAlreadyReceivedError :: Class )) { // You have already received today's login bonus. } return false ; } var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . bonus ( ) var async_result = await domain . missed_receive ( \"bonus-0001\" , # bonus_model_name 1 , # step_number null # config ) if async_result . error != null : if async_result . error is Gs2LoginRewardAlreadyReceivedException : # 오늘의 로그인 보너스는 이미 수령했습니다. pass push_error ( str ( async_result . error )) return var result = async_result . result receive 오늘의 로그인 보너스 수령 지정된 보너스 모델을 기준으로 오늘 분의 로그인 보너스를 수령합니다. 각 보너스 모델에는 날짜별 보상이 순서대로 정의되어 있습니다. 예를 들어 “1일차: 젬 100개, 2일차: 스태미나 회복제 5개, 3일차: 레어 가챠 티켓, …“과 같이 설정할 수 있습니다. 플레이어는 로그인할 때마다 이 API를 호출하여 보상 단계를 순서대로 진행합니다. 보너스 배포 방식에는 두 가지가 있습니다: 스케줄 모드: 특정 달력 기간에 연동되어 보상이 배포됩니다. 로그인하지 않은 날짜의 보상은 건너뜁니다. 스트리밍 모드: 달력 날짜와 관계없이 로그인할 때마다 처음부터 순서대로 보상이 배포됩니다. 이미 오늘의 보너스를 수령한 경우 오류가 발생합니다. 모든 보상을 배포한 후 “반복\"이 활성화되어 있으면(스트리밍 모드에서만) 첫 번째 보상으로 돌아가 주기가 다시 시작됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzReceiveStatus 수령 상태 bonusModel EzBonusModel 로그인 보너스 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 로그인 보너스 수령 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 AlreadyReceivedException BadRequestException 오늘의 로그인 보너스는 이미 수령했습니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Bonus ( ); var result = await domain . ReceiveAsync ( bonusModelName : \"bonus-0001\" , config : null ); } catch ( Gs2 . Gs2LoginReward . Exception . AlreadyReceivedException e ) { // You have already received today's login bonus. } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Bonus ( ); var future = domain . ReceiveFuture ( bonusModelName : \"bonus-0001\" , config : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2LoginReward . Exception . AlreadyReceivedException ) { // You have already received today's login bonus. } onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Bonus ( ); const auto Future = Domain -\u003e Receive ( \"bonus-0001\" // bonusModelName // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: LoginReward :: Error :: FAlreadyReceivedError :: Class )) { // You have already received today's login bonus. } return false ; } var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . bonus ( ) var async_result = await domain . receive ( \"bonus-0001\" , # bonus_model_name null # config ) if async_result . error != null : if async_result . error is Gs2LoginRewardAlreadyReceivedException : # 오늘의 로그인 보너스는 이미 수령했습니다. pass push_error ( str ( async_result . error )) return var result = async_result . result getBonusModel 특정 로그인 보너스의 스케줄 조회 보너스 모델명을 지정하여 하나의 로그인 보너스 모델의 상세 정보를 조회합니다. 특정 보너스의 상세 화면을 표시할 때 사용합니다. 예를 들어 7일치 보상을 목록으로 표시하고, 이미 수령한 날짜에 체크 표시를 하는 화면입니다. 반환되는 모델에는 보상 목록, 보너스 모드, 반복 설정, 미수령 구제 설정이 포함됩니다. GetReceiveStatus와 조합하면 어느 날짜의 보상을 이미 수령했는지, 어느 날짜가 아직 수령 가능한지를 파악할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzBonusModel 로그인 보너스 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). BonusModel ( bonusModelName : \"bonus-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). BonusModel ( bonusModelName : \"bonus-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BonusModel ( \"bonus-0001\" // bonusModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . bonus_model ( \"bonus-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). BonusModel ( bonusModelName : \"bonus-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). BonusModel ( bonusModelName : \"bonus-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e BonusModel ( \"bonus-0001\" // bonusModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: LoginReward :: Model :: FBonusModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . bonus_model ( \"bonus-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listBonusModels Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . BonusModelsAsync ( ). ToListAsync (); var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . BonusModels ( ); List EzBonusModel \u003e items = new List EzBonusModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e BonusModels ( ); TArray Gs2 :: UE5 :: LoginReward :: Model :: FEzBonusModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBonusModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBonusModels ( callbackId ); var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeBonusModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeBonusModels ( callbackId ); const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeBonusModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeBonusModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getReceiveStatus Request 타입 활성화 조건 필수 기본값 값 제한 설명 gameSession GameSession  GameSession Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveStatus ( bonusModelName : \"bonus-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveStatus ( bonusModelName : \"bonus-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e ReceiveStatus ( \"bonus-0001\" // bonusModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_status ( \"bonus-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveStatus ( bonusModelName : \"bonus-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). ReceiveStatus ( bonusModelName : \"bonus-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e ReceiveStatus ( \"bonus-0001\" // bonusModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: LoginReward :: Model :: FReceiveStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . login_reward . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . receive_status ( \"bonus-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listReceiveStatuss Request 타입 활성화 조건 필수 기본값 값 제한 설명 gameSession GameSession  GameSession Result 타입 설명 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . ReceiveStatusesAsync ( ). ToListAsync (); var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . ReceiveStatuses ( ); List EzReceiveStatus \u003e items = new List EzReceiveStatus \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e ReceiveStatuses ( ); TArray Gs2 :: UE5 :: LoginReward :: Model :: FEzReceiveStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeReceiveStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeReceiveStatuses ( callbackId ); var domain = gs2 . LoginReward . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeReceiveStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeReceiveStatuses ( callbackId ); const auto Domain = Gs2 -\u003e LoginReward -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeReceiveStatuses ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeReceiveStatuses ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. 로그인 보너스의 스케줄 목록 취득 네임스페이스에 설정된 모든 로그인 보너스 모델을 취득합니다. 각 모델은 보상 스케줄을 정의합니다. 1일차에 무엇을 받는지, 2일차에 무엇을 받는지와 같은 내용입니다. 로그인 보너스의 목록 화면을 만들 때 사용합니다. 예를 들어 “7일간 신규 유저 보너스\"와 “월간 로그인 보너스\"가 동시에 진행 중인 경우, 이 API로 두 정보를 모두 취득할 수 있습니다. 반환되는 모델에는 보너스 모드(스케줄 / 스트리밍), 일별 보상 목록, 반복 여부, 놓친 보너스 구제 가능 여부가 포함됩니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | items | List | 로그인 보너스 모델 목록| 특정 보너스 스케줄에 대한 플레이어의 로그인 보너스 진행 상황 조회 하나의 로그인 보너스 모델에 대한 플레이어의 수령 상태를 조회합니다. 수령 상태에는 각 날짜의 수령 완료/미수령 여부를 나타내는 불리언 값 목록(receivedSteps)이 포함됩니다. 예를 들어 [true, true, false, true, false, false, false]는 “1일차와 2일차는 수령 완료, 3일차는 미수령, 4일차는 수령 완료, 5~7일차는 아직 도달하지 않음\"을 의미합니다. GetBonusModel과 조합하여 각 날짜의 보상 내용과 수령 상태를 함께 표시하는 로그인 보너스 상세 화면을 만드는 데 사용합니다. 응답에는 보너스 모델의 상세 정보도 포함되어 있어, 한 번의 API 호출로 보상 내용과 수령 상태를 모두 표시할 수 있습니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | bonusModelName | string | |  | | ~ 128자 | 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. | | item | EzReceiveStatus | 수령 상태| | bonusModel | EzBonusModel | 로그인 보너스 모델| 모든 보너스 스케줄에 대한 플레이어의 로그인 보너스 진행 상황 조회 플레이어가 관계한 모든 로그인 보너스 모델의 수령 상태를 조회합니다. 각 상태에서 어느 날짜의 보상을 이미 수령했는지, 어느 날짜가 아직 수령 가능한지를 알 수 있습니다. 로그인 보너스 개요 화면을 만들 때 사용합니다. 예를 들어 “7일간 신규 보너스: 4/7 수령 완료”, “월간 보너스: 12/30 수령 완료\"와 같이 진행 상황을 표시할 수 있습니다. 게임 시작 시 아직 수령하지 않은 보너스가 있는지 확인하여 플레이어에게 수령을 유도하는 데에도 유용합니다. | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | items | List | 수령 상태 목록| | nextPageToken | string | 목록의 나머지를 취득하기 위한 페이지 토큰|","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-LoginReward SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-LoginReward SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/login_reward/game_engine/"},{"content":"모델 EzProbability 배출 확률 특정 경품의 산출된 배출 확률을 나타냅니다. 확률은 배출 확률 테이블 내 전체 경품 가중치의 합에 대한 이 경품의 가중치로 계산됩니다. 박스 가챠의 경우, 경품이 박스에서 배출됨에 따라 확률이 동적으로 변화합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 prize EzDrawnPrize  경품 이 확률이 대응하는 경품으로, ID와 입수 액션을 포함합니다. rate float  0 ~ 1.0 배출 확률 (0.0~1.0) 이 경품이 배출될 확률로, 0.0에서 1.0 사이의 값으로 표현됩니다. 이 경품의 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다. EzDrawnPrize 배출된 경품 추첨으로 배출된 경품을 나타냅니다. 경품 ID와 사용자에게 경품을 지급하기 위해 실행된 입수 액션을 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 prizeId string  ~ 36자 경품 ID 배출된 경품의 ID로, 배출 확률 테이블 내 경품 항목에 대응합니다. acquireActions List 0 ~ 100 items 입수 액션 리스트 이 경품을 사용자에게 지급하기 위해 실행된 입수 액션의 리스트입니다. EzBoxItems 박스 아이템 리스트 특정 사용자와 배출 확률 테이블에 대한 박스 가챠의 상태를 기록합니다. 박스 내 모든 경품과 그 잔여 수량·초기 수량의 리스트를 포함하여, 어떤 경품이 배출되었고 어떤 경품이 남아있는지 사용자가 확인할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 boxId string ※ ~ 1024자 박스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 prizeTableName string  ~ 128자 배출 확률 테이블 이름 이 박스와 연결된 배출 확률 테이블의 이름입니다. 이 레코드가 어느 박스 가챠에 속하는지를 식별합니다. items List [] 0 ~ 1000 items 아이템 리스트 박스 내 모든 경품과 그 잔여 수량·초기 수량의 리스트입니다. 각 아이템은 해당 경품이 처음 박스에 몇 개 있었는지, 몇 개 남아있는지를 나타내며, 박스 가챠의 추첨 진행 상황을 추적할 수 있게 합니다. EzLotteryModel 추첨 모델 추첨 모델은 배출 방식과 배출 테이블의 참조 방법을 정의하는 엔티티입니다. 배출 방식은 2종류가 마련되어 있으며, 일반 추첨은 매번 일정한 확률로 추첨하는 방식이고, 박스 추첨은 상자 안에 미리 정해진 수량의 경품이 들어 있어 추첨할 때마다 상자에서 경품을 꺼내는 추첨 방식입니다. 추첨 처리를 수행할 때 배출 확률 테이블을 사용하는데, GS2-Script를 사용하면 여러 번 추첨을 실행할 때 배출 확률 테이블 일부만 다른 테이블로 교체할 수 있습니다. 이 구조를 이용하면 10연 가챠에서 1회만 다른 추첨 확률 테이블을 적용하는 것이 가능해집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “normal”,   “box” }  추첨 모드 경품의 추첨 방식을 선택합니다. “normal\"은 매번 일정한 확률로 추첨을 진행합니다(경품은 반복해서 배출됩니다). “box\"는 가상의 상자에 미리 정해진 수량의 경품을 넣어두고, 추첨할 때마다 상자에서 경품을 꺼냅니다(모든 경품이 최종적으로 배출되는 것이 보장됩니다). 정의 설명 normal 일반 추첨 box 박스 추첨 prizeTableName string {method} == “prize_table” ※ ~ 128자 배출 확률 테이블 이름 이 추첨 모델에서 사용할 배출 확률 테이블의 이름입니다. 추첨 방법이 “prize_table\"인 경우 필수입니다. ※ method이(가) “prize_table” 이면 필수 EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzBoxItem 박스 아이템 박스 가챠 내 단일 경품 유형을 나타내며, 박스 내 초기 수량, 잔여 수량, 그리고 배출 시 실행되는 입수 액션을 나타냅니다. 타입 활성화 조건 필수 기본값 값 제한 설명 prizeId string  ~ 128자 경품 ID 이 박스 아이템이 대응하는 배출 확률 테이블 내 경품 ID입니다. acquireActions List [] 0 ~ 100 items 입수 액션 리스트 이 경품이 박스에서 배출되었을 때 실행할 입수 액션의 리스트입니다. remaining int  0 ~ 2147483646 잔여 수량 박스 내에 남아있는 이 경품의 수입니다. 이 경품이 배출될 때마다 1개씩 감소합니다. initial int  0 ~ 2147483646 초기 수량 처음 박스에 담긴 이 경품의 수입니다. 잔여 수량과 함께 얼마나 배출되었는지를 계산하는 데 사용됩니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 describeBoxes 플레이어가 뽑은 모든 박스 가챠의 상태를 취득한다 네임스페이스 내 모든 박스 모드 가챠에 대해 박스 상태를 취득합니다. 각 항목에는 경품별 배출 완료 수와 상자 안에 남은 수가 포함됩니다. 모든 박스 가챠의 개요 화면을 만들 때 사용합니다. 예를 들어 “초심자 박스: 15/50 배출 완료”, “프리미엄 박스: 3/100 배출 완료\"처럼 진행률 바와 함께 표시할 수 있습니다. 이 API는 박스 모드 가챠에만 적용됩니다. 일반 가챠는 경품이 무제한으로 배출되므로 박스 상태가 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 박스 상태 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . BoxesAsync ( ). ToListAsync (); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Boxes ( ); List EzBoxItems \u003e items = new List EzBoxItems \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Boxes ( ); TArray Gs2 :: UE5 :: Lottery :: Model :: FEzBoxItemsPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getBox 특정 박스 가챠의 상태를 취득한다 배출 확률 테이블 이름을 지정하여 특정 박스의 현재 상태를 취득합니다. 응답에는 박스 안의 각 경품, 배출 완료 수, 남은 수가 포함됩니다. 박스 가챠 상세 화면을 표시할 때 사용합니다. 예를 들어 남은 수와 함께 모든 경품을 목록으로 표시할 수 있습니다: “SSR 전설의 검: 0/1 배출 완료, SR 마법 지팡이: 2/5 배출 완료, R 물약: 10/30 배출 완료, …\" 플레이어가 다시 뽑을지 여부를 판단할 수 있도록, 상자 안에 무엇이 남아 있는지 확인할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 gameSession GameSession  GameSession Result 타입 설명 item EzBoxItems 박스 내 경품과 잔여 수량 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BoxItems ( prizeTableName : \"prizeTable-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BoxItems ( prizeTableName : \"prizeTable-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BoxItems ( \"prizeTable-0001\" // prizeTableName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . lottery . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . box_items ( \"prizeTable-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BoxItems ( prizeTableName : \"prizeTable-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BoxItems ( prizeTableName : \"prizeTable-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BoxItems ( \"prizeTable-0001\" // prizeTableName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Lottery :: Model :: FBoxItems \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . lottery . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . box_items ( \"prizeTable-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. resetBox 박스 가챠를 초기 상태로 리셋한다 박스를 리셋하여 모든 경품을 원래 수량으로 되돌립니다. 플레이어가 아직 한 번도 뽑지 않은 상태로 돌아갑니다. 리셋 후 모든 경품이 다시 배출 가능해집니다. 박스 가챠 UI에서 “박스 리셋” 버튼을 구현할 때 사용합니다. 플레이어가 원하는 경품을 뽑은 후 박스를 리셋하여 새 박스에서 다시 도전하는 것과 같은 사용 방법이 가능합니다. 예를 들어 SSR 아이템을 뽑은 후 박스를 리셋하여 새 박스에서 다시 SSR을 노리는 흐름입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 gameSession GameSession  GameSession Result 타입 설명 item EzBoxItems 박스 내 경품과 초기 수량 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BoxItems ( prizeTableName : \"prizeTable-0001\" ); var result = await domain . ResetBoxAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). BoxItems ( prizeTableName : \"prizeTable-0001\" ); var future = domain . ResetBoxFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e BoxItems ( \"prizeTable-0001\" // prizeTableName ); const auto Future = Domain -\u003e ResetBox ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . lottery . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . box_items ( \"prizeTable-0001\" ) var async_result = await domain . reset_box ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listProbabilities 가챠의 현재 배출 확률을 취득한다 지정된 가챠의 모든 경품과 그 현재 배출 확률 목록을 취득합니다. 많은 게임에서 플레이어에게 표시하는 “배출 확률” 또는 “가챠 상세” 화면을 만들 때 사용합니다. 반환되는 확률은 가챠 모드에 따라 다릅니다: 일반 가챠: 모든 플레이어에게 항상 동일한 확률이 반환됩니다(예: SSR: 3%, SR: 15%, R: 82%). 박스 가챠: 플레이어의 박스의 현재 상태를 반영한 확률이 반환됩니다. 경품이 배출되어 상자에서 제거되면 남은 경품들의 확률이 그에 따라 변합니다. 예를 들어 유일한 SSR이 이미 배출되었다면 SSR의 확률은 0%가 됩니다. 이 API는 가챠의 배출 확률 표시 의무 대응에도 이용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 배출 확률 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Lottery ( lotteryName : \"lottery-0001\" ); var items = await domain . ProbabilitiesAsync ( ). ToListAsync (); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Lottery ( lotteryName : \"lottery-0001\" ); var it = domain . Probabilities ( ); List EzProbability \u003e items = new List EzProbability \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Lottery ( \"lottery-0001\" // lotteryName ); const auto It = Domain -\u003e Probabilities ( ); TArray Gs2 :: UE5 :: Lottery :: Model :: FEzProbabilityPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Lottery ( lotteryName : \"lottery-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeProbabilities ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeProbabilities ( callbackId ); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Lottery ( lotteryName : \"lottery-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeProbabilities ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeProbabilities ( callbackId ); const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Lottery ( \"lottery-0001\" // lotteryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeProbabilities ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeProbabilities ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getLotteryModel 특정 가챠(추첨)의 상세 정보를 취득한다 추첨 이름을 지정하여 하나의 추첨 모델의 상세 정보를 취득합니다. 가챠 상세 화면을 표시할 때 사용합니다. 추첨 모드(일반/박스), 관련된 배출 확률 테이블 이름 등의 설정 정보를 확인할 수 있습니다. 예를 들어 플레이어가 “뽑기” 버튼을 탭하기 전에, 해당 가챠가 일반 가챠인지 박스 가챠인지를 표시하거나, ListProbabilities와 조합하여 현재 배출 확률을 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzLotteryModel 추첨 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). LotteryModel ( lotteryName : \"lotteryModel-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). LotteryModel ( lotteryName : \"lotteryModel-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e LotteryModel ( \"lotteryModel-0001\" // lotteryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . lottery . namespace_ ( \"namespace-0001\" ) . lottery_model ( \"lotteryModel-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). LotteryModel ( lotteryName : \"lotteryModel-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ). LotteryModel ( lotteryName : \"lotteryModel-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e LotteryModel ( \"lotteryModel-0001\" // lotteryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Lottery :: Model :: FLotteryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . lottery . namespace_ ( \"namespace-0001\" ) . lottery_model ( \"lotteryModel-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listLotteryModels 가챠(추첨)의 설정 목록을 취득한다 네임스페이스에 설정된 모든 추첨 모델을 취득합니다. 각 모델은 하나의 가챠(추첨)를 정의하며, 추첨 모드, 참조하는 배출 확률 테이블, 경품 선정 방법이 포함됩니다. 추첨 모드에는 2가지가 있습니다: 일반 추첨: 매번 고정된 확률 테이블을 기준으로 추첨합니다. 같은 경품이 몇 번이라도 배출됩니다. 일반적인 가챠의 동작입니다. 박스 추첨: 미리 정해진 수량의 경품이 가상의 상자에 들어 있으며, 추첨할 때마다 상자에서 경품을 하나씩 꺼냅니다. 설정된 수량 이상으로는 같은 경품이 배출되지 않으며, 상자가 비면 모든 경품을 획득한 것이 됩니다. 가챠 목록 화면을 표시할 때 사용합니다. 예를 들어 “프리미엄 가챠”, “무기 가챠”, “스텝업 가챠” 등의 목록입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 추첨 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . LotteryModelsAsync ( ). ToListAsync (); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . LotteryModels ( ); List EzLotteryModel \u003e items = new List EzLotteryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e LotteryModels ( ); TArray Gs2 :: UE5 :: Lottery :: Model :: FEzLotteryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeLotteryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeLotteryModels ( callbackId ); var domain = gs2 . Lottery . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeLotteryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeLotteryModels ( callbackId ); const auto Domain = Gs2 -\u003e Lottery -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeLotteryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeLotteryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Lottery SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Lottery SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/lottery/game_engine/"},{"content":"모델 EzGathering 개더링 매치메이킹에 의해 모인 게임 플레이어 그룹을 나타내는 엔티티입니다. 매치메이킹용 파라미터를 여러 개 가지고 있으며, 파라미터를 종합적으로 판단하여 플레이어를 그룹화합니다. 플레이어는 자신의 역할·속성값·거부 리스트(함께 플레이하고 싶지 않은 사용자)를 지정하여 개더링에 참가합니다. 참가 시에는 속성값 범위 조건, 역할의 정원, 화이트리스트 제한(allowUserIds)이 검증됩니다. 모든 역할 슬롯이 정원에 도달하면 개더링은 완성 상태가 되어 매치메이킹이 완료됩니다. 개더링 이름은 UUID 형식으로 자동 생성되며, 유효기간을 설정하여 자동 정리(클린업)하는 것도 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatheringId string ※ ~ 1024자 개더링 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. attributeRanges List [] 0 ~ 5 items 모집 조건 이 개더링에 참가하기 위해 플레이어가 충족해야 하는 속성 범위 조건의 목록입니다. 각 항목은 속성 이름과 허용되는 최소값·최대값 범위를 지정합니다. 플레이어 자신의 속성값이 이 범위 내에 있지 않으면 참가할 수 없습니다. 최대 5건. capacityOfRoles List [] 1 ~ 5 items 모집 슬롯 목록 이 개더링의 모집 슬롯을 정의합니다. 각 항목은 역할 이름, 그 별칭, 그리고 해당 역할에 참가 가능한 최대 인원수를 지정합니다. 모든 역할 슬롯이 정원에 도달하면 매치메이킹이 완료됩니다. 최소 1건, 최대 5건. allowUserIds List [] 0 ~ 100 items 참가 허용 사용자 ID 목록 이 게더링에 참가하는 것이 허용된 사용자 ID의 화이트리스트입니다. 지정한 경우, 목록에 포함된 사용자만 이 게더링의 매치메이킹에 참가할 수 있습니다. 친구 전용 매치메이킹이나 초대제 매치메이킹 시나리오에 유용합니다. 최대 100건. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. expiresAt long 게더링 유효 기간 이 게더링이 자동으로 만료되어 삭제되는 시각입니다. 이 시각까지 매치메이킹이 완료되지 않으면 게더링은 정리됩니다. 지정하지 않은 경우, 매치메이킹이 완료되거나 수동으로 삭제될 때까지 게더링이 유지됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzRating 레이팅 게임 플레이어별 현재 레이팅 값을 보유하는 엔티티입니다. 플레이어가 처음 레이팅이 적용된 매치메이킹에 참가했을 때 자동으로 생성됩니다. 레이팅은 Glicko-2 알고리즘을 사용하여 계산되며, 초기 레이트 값과 레이팅의 불확실성을 나타내는 Rating Deviation(rd)을 가집니다. 대전 횟수가 늘어남에 따라 레이트 값은 플레이어의 실제 실력에 수렴해 갑니다. 타입 활성화 조건 필수 기본값 값 제한 설명 ratingId string ※ ~ 1024자 레이팅 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이팅 이름 레이팅 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rateValue float 1500.0 0 ~ 65535.0 레이트 값 Glicko-2 알고리즘으로 계산된 플레이어의 현재 레이팅 점수입니다. RatingModel에서 정의된 초기값(일반적으로 1500.0)이 기본값입니다. 대전 결과와 상대의 상대적인 실력에 따라 값이 증감합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzJoinedSeasonGathering 참가 중인 시즌 게더링 특정 시즌과 티어에서 플레이어가 어느 시즌 게더링에 참가하고 있는지를 추적하는 레코드입니다. 플레이어가 시즌 게더링에 참가할 때 자동으로 생성되며, 플레이어의 현재 게더링을 빠르게 조회하기 위한 인덱스 역할을 합니다. 각 플레이어는 시즌과 티어의 조합마다 최대 1개의 시즌 게더링에 소속될 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. seasonGatheringName string  ~ 128자 시즌 게더링명 이 플레이어가 참가하고 있는 시즌 게더링의 이름입니다. 동일 시즌·티어 내의 특정 시즌 게더링 엔티티를 참조하기 위해 사용됩니다. EzSeasonGathering 시즌 게더링 시즌 기간 동안 플레이어를 모으는 영속적인 게더링입니다. 매치메이킹 완료 후 해산하는 일반 게더링과 달리, 시즌 게더링은 시즌 동안 계속 존속하며 참가자를 축적합니다. 플레이어는 티어(GS2-Experience의 랭크에 기반)와 시즌 번호로 그룹화되며, 각 시즌 게더링에는 SeasonModel에서 정의된 최대 참가 인원 제한이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 seasonGatheringId string ※ ~ 1024자 시즌 개더링 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. name string  UUID ~ 128자 시즌 게더링명 시즌 게더링 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. participants List [] 0 ~ 1000 items 참가자 사용자 ID 목록 이 시즌 게더링에 참가한 플레이어의 사용자 ID 목록입니다. 플레이어가 참가하면 이 목록에 추가되며, 최대 참가 인원에 도달할 때까지 시즌 동안 계속 증가합니다. EzBallot 투표용지 레이팅이 적용된 매치메이킹 게임 종료 후, 각 플레이어가 대전 결과를 보고하기 위해 발급되는 투표용지입니다. 레이팅 모델 이름, 개더링 이름, 참가 인원수 등 대전의 컨텍스트 정보를 포함합니다. 각 플레이어는 서버에서 서명된 투표용지를 받아 게임 결과를 기입하여 Vote API에 제출합니다. 투표 시스템은 레이팅 계산을 확정하기 위해 제출된 투표용지의 50%를 초과하는 합의를 필요로 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID ratingName string  ~ 128자 레이팅 이름 이 대전 후의 레이팅 계산에 사용할 RatingModel의 이름입니다. 이 대전의 결과 처리에 적용되는 레이팅 시스템의 파라미터(초기값, 변동성)를 지정합니다. gatheringName string  ~ 128자 개더링 이름 대전 결과 보고 대상이 되는 개더링의 이름입니다. 특정 매치메이킹 세션을 식별하고, 동일한 대전의 모든 참가자로부터의 투표를 연결하기 위해 사용됩니다. numberOfPlayer int  2 ~ 10 참가 인원수 이 대전에 참가한 플레이어의 총 인원수입니다. 예상되는 투표 수 결정 및 합의 검증(플레이어의 50%를 초과하는 인원이 일치하는 결과를 제출해야 함)에 사용됩니다. 2에서 10 사이의 범위로 지정합니다. EzRatingModel 레이팅 모델 GS2에서는 레이팅 알고리즘으로 Glicko-2를 채택하고 있습니다. Glicko-2에는 여러 파라미터가 있지만, GS2-Matchmaking에서는 이를 종합적으로 나타내는 변동성이라는 하나의 파라미터로 통합하고 있습니다. 변동성은 변화의 크기를 나타내는 파라미터로, 값이 클수록 레이팅 값의 변동 폭이 커집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. volatility int 100 1 ~ 20000 레이팅의 변동성 각 대전 후 레이트 값이 얼마나 변동하는지를 제어하는 Glicko-2의 파라미터입니다. 값이 클수록 레이팅의 변동 폭이 커져 더 빠르게 레이팅이 조정됩니다. 값이 작을수록 레이팅이 안정되어 완만하게 변화합니다. 기본값은 100입니다. EzSeasonModel 시즌 모델 시즌 매치메이킹에서, 일정 기간 동안 유효한 영속 개더링의 기간·최대 참가 인원수·티어 연동 설정을 정의하는 마스터 데이터입니다. GS2-Schedule을 통해 기간을 관리하며, 필요에 따라 GS2-Experience와 연동하여 동일한 티어 내에서 영속 개더링을 형성합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParticipants int  2 ~ 1000 최대 참가 인원수 하나의 시즌 개더링에 참가할 수 있는 플레이어의 최대 인원수입니다. 이 상한에 도달하면 시즌 개더링은 만원 상태가 되어 더 이상 플레이어가 참가할 수 없게 됩니다. 2에서 1000 사이의 범위로 지정합니다. experienceModelId string ~ 1024자 티어 관리용 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 플레이어의 티어를 결정하기 위해 사용하는 GS2-Experience 경험치 모델의 GRN입니다. 이 경험치 모델에서의 플레이어 랭크가 매치메이킹의 티어로 사용되어, 비슷한 레벨의 플레이어끼리 그룹화됩니다. 지정하지 않으면 티어에 의한 그룹화가 비활성화되어, 레벨에 관계없이 모든 플레이어가 매칭됩니다. challengePeriodEventId string  ~ 1024자 챌린지 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 시즌의 유효 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 이벤트가 활성화되어 있는 동안에만 시즌 개더링의 생성·참가가 가능합니다. 이벤트 기간이 종료되면 시즌이 종료되어 새로운 매치메이킹이 불가능해집니다. EzPlayer 참가자 플레이어 정보 매치메이킹에 참가하는 플레이어를 나타내며, ID, 속성, 역할, 거부 목록을 포함합니다. 게더링에 참가할 때, 플레이어의 속성값, 희망하는 역할, 함께 플레이하고 싶지 않은 사용자 목록을 가진 Player 오브젝트가 생성됩니다. 플레이어의 속성은 게더링의 속성 범위 조건과 대조되며, 거부 목록은 원치 않는 페어링을 방지하기 위해 크로스체크됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID attributes List [] 0 ~ 5 items 속성값 목록 매치메이킹 조건 평가에 사용되는 플레이어의 이름이 지정된 수치 속성입니다. 각 속성은 게더링의 AttributeRange 조건과 대조되어 참가 자격이 판정됩니다. 게더링 생성 시 범위 조건을 설정하는 경우, 플레이어 자신의 속성값도 그 범위 내에 있어야 합니다. 최대 5건. roleName string “default” ~ 128자 역할명 이 플레이어가 게더링에서 채우고자 하는 역할입니다. 역할 구분이 없는 일반적인 매치메이킹의 경우 기본값 “default\"를 사용합니다. 역할 기반 매치메이킹의 경우, 플레이어의 구체적인 역할(예: “팔라딘”, “나이트”)을 지정하며, 게더링의 정원 정의에 있는 역할명 및 별칭과 매칭됩니다. denyUserIds List [] 0 ~ 100 items 매칭 거부 사용자 ID 목록 이 플레이어가 매칭을 거부하는 사용자 ID의 블랙리스트입니다. 매치메이킹 시, 게더링에 이미 참가한 플레이어가 이 목록에 포함되어 있으면 해당 게더링에 참가할 수 없습니다. 반대로, 기존 참가자의 거부 목록에 이 플레이어가 포함되어 있는 경우에도 참가가 차단됩니다. 최대 100건. EzAttributeRange 모집 조건 게더링에 참가하기 위한 속성의 허용 범위를 정의하는 조건입니다. 플레이어가 참가를 시도할 때, 대응하는 이름의 속성값이 지정된 최소값·최대값 범위 내에 있어야 합니다. 스킬 기반 또는 레벨 기반의 매치메이킹 필터를 작성하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 속성명 이 범위 조건을 적용할 속성의 이름입니다. 조건이 평가되려면 플레이어의 속성 목록에 있는 속성명과 일치해야 합니다. min int 0 0 ~ 2147483646 속성값의 최소값 게더링에 참가하기 위해 필요한 속성값의 하한(해당 값 포함)입니다. 속성값이 이 임계값보다 낮은 플레이어는 참가할 수 없습니다. max int 0 0 ~ 2147483646 속성값의 최대값 게더링에 참가 가능한 속성값의 상한(해당 값 포함)입니다. 속성값이 이 임계값을 초과하는 플레이어는 참가할 수 없습니다. EzCapacityOfRole 모집 슬롯 개더링 내 특정 역할에 대한 모집 슬롯을 정의합니다. 각 역할은 이름, 선택적 별칭, 최대 정원, 현재 참가 중인 플레이어 목록을 가집니다. 역할 별칭을 사용하면 유연한 매칭이 가능합니다. 예를 들어 “탱크” 역할에 “팔라딘\"과 “나이트\"라는 별칭을 설정하면, 둘 중 어느 하위 역할을 지정한 플레이어도 탱크 슬롯을 채울 수 있습니다. 모든 역할의 참가자가 정원에 도달하면, 개더링의 매치메이킹이 완료됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 roleName string “default” ~ 128자 역할 이름 이 모집 슬롯의 역할 이름. 역할 구분이 없는 일반적인 매치메이킹의 경우, 기본값 “default\"를 사용합니다. 역할 기반 매치메이킹(예: “탱크”, “힐러”, “어태커”)의 경우, 여기에 역할 카테고리 이름을 지정합니다. roleAliases List [] 0 ~ 9 items 역할 이름 별칭 목록 이 모집 슬롯에서 허용되는 대체 역할 이름. 이러한 별칭 중 하나를 역할 이름으로 지정한 플레이어는 이 슬롯에 매칭됩니다. 하위 역할 매칭을 가능하게 합니다. 예: “탱크” 역할에 대한 “팔라딘\"과 “나이트” 별칭. 최대 9건. capacity int  1 ~ 256 모집 인원수 이 역할 슬롯을 채울 수 있는 플레이어의 최대 수. 참가자 수가 이 정원에 도달하면, 역할은 가득 차게 되어 더 이상 이 역할의 플레이어는 참가할 수 없습니다. 1에서 256 범위로 지정합니다. participants List [] 0 ~ 1000 items 참가자 플레이어 정보 목록 현재 이 역할 슬롯을 차지하고 있는 플레이어의 목록. 플레이어는 개더링에 참가하면 추가되고, 이탈하면 삭제됩니다. 각 플레이어 항목에는 사용자 ID, 속성, 역할 이름, 거부 목록이 포함됩니다. 사용자 ID를 기준으로 고유성이 보장됩니다. EzAttribute 속성값 매치메이킹을 위해 플레이어에게 연결된 이름이 지정된 수치 속성입니다. 어떤 플레이어가 참가할 수 있는지 필터링하기 위해 개더링의 AttributeRange 조건과 함께 사용됩니다. 예를 들어 값이 50인 “레벨” 속성을 가진 플레이어는 레벨 40~60을 요구하는 개더링에 매칭됩니다. 각 플레이어는 최대 5개의 속성을 가질 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 속성 이름 속성 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. value int 0 0 ~ 2147483646 속성값 이 플레이어의 속성 수치입니다. 매치메이킹 시 개더링의 AttributeRange 조건에서 지정된 최소값·최대값 범위와 대조됩니다. EzGameResult 대전 결과 Vote 시스템을 통한 레이팅 계산에 사용되는, 대전에서 한 플레이어의 결과를 나타냅니다. 각 GameResult 항목은 사용자 ID와 해당 대전에서의 순위(최종 순위)를 짝지어 나타냅니다. 순위 값이 작을수록 높은 성적을 나타냅니다(1위 = rank 1). 순위가 같은 플레이어는 무승부로 처리됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rank int  0 ~ 2147483646 순위 대전에서 플레이어의 최종 순위입니다. 1이 최상위(승자)입니다. Glicko-2 알고리즘에 의한 레이팅 변동 계산에 사용됩니다. 상위 플레이어는 레이팅이 상승하고, 하위 플레이어는 레이팅이 하락합니다. 순위가 같은 플레이어는 무승부로 처리됩니다. userId string  ~ 128자 사용자ID EzSignedBallot 서명된 투표용지 진위를 검증하기 위한 디지털 서명이 부여된 투표용지입니다. 매치메이킹 완료 후 서버가 플레이어에게 서명된 투표용지를 발급하여, 정당한 참가자만이 대전 결과를 제출할 수 있도록 보장합니다. 투표용지가 Vote API에 제출될 때 서명이 검증되어, 대전 컨텍스트(레이팅 이름, 개더링 이름, 참가 인원수)의 변조를 방지합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 body string  ~ 1024자 투표용지 본문 디지털 서명의 대상이 되는 직렬화된 투표용지 데이터입니다. 서명과 대조하여 검증 가능한 형식으로, 투표 컨텍스트(사용자 ID, 레이팅 이름, 개더링 이름, 참가 인원수)를 포함합니다. signature string  ~ 256자 서명 투표용지 본문의 진위성과 무결성을 검증하기 위한 디지털 서명입니다. GS2-Key의 암호화 키를 사용하여 서버에서 생성되며, 투표용지 제출 시 위조나 변조를 방지하기 위해 검증됩니다. EzTimeSpan 시간 간격(기간) 일·시간·분으로 구성된 시간의 길이를 나타냅니다. 현재 시각으로부터의 게더링 유효 기간 등, 상대적인 시간 오프셋을 지정하는 데 사용됩니다. 전체 기간은 세 구성 요소를 합산하여 계산됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 days int 0 0 ~ 365 일수 기간에서의 일수입니다. 최대 365일. 기본값은 0입니다. hours int 0 0 ~ 24 시간 기간에서의 시간 수입니다. 최대 24시간. 기본값은 0입니다. minutes int 0 0 ~ 60 분 기간에서의 분 수입니다. 최대 60분. 기본값은 0입니다. 메서드 cancelMatchmaking 매치메이킹을 취소하고 기어링에서 이탈합니다 플레이어를 현재 참가 중인 기어링에서 이탈시키고 매치메이킹을 중단합니다. 매치메이킹 대기 화면에서 “취소” 버튼을 탭했을 때 사용합니다. 주의: 취소하려는 순간 매치메이킹이 완료된 경우, 기어링이 더 이상 존재하지 않기 때문에 NotFoundException(404 오류)이 반환됩니다. 게임 측에서는 이 경우를 처리해야 합니다. 매치가 성립되었다는 의미이므로 플레이어를 그대로 게임에 진행시키면 됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. gameSession GameSession  GameSession Result 타입 설명 item EzGathering 취소한 개더링 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ); var result = await domain . CancelMatchmakingAsync ( ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ); var future = domain . CancelMatchmakingFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Gathering ( \"gathering-0001\" // gatheringName ); const auto Future = Domain -\u003e CancelMatchmaking ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . gathering ( \"gathering-0001\" ) var async_result = await domain . cancel_matchmaking ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result createGathering 매치메이킹용 방(개더링) 신규 생성 매치메이킹용 방을 생성하고 다른 플레이어의 참가를 기다립니다. 개더링 생성 시 모집 조건을 설정합니다. 예를 들어 “어태커 1명과 힐러 1명 모집, 플레이어 레벨은 10~20\"과 같은 조건을 지정할 수 있습니다. 주요 설정 항목: capacityOfRoles: 역할별 모집 인원을 정의합니다(예: DPS 2명 + 탱커 1명 + 힐러 1명). attributeRanges: 레벨이나 랭크 등 플레이어 속성에 기반한 참가 조건을 설정합니다. allowUserIds: 특정 플레이어만 참가할 수 있도록 제한합니다(친구 전용 또는 초대제 매치메이킹에 유용합니다). expiresAt: 개더링의 유효 기간을 설정합니다. 설정을 권장합니다. 유효 기간이 없으면 플레이어가 게임에서 이탈한 후에도 오래된 개더링이 계속 남아 있게 됩니다. 유효 기간을 사용하는 경우, 기간이 만료되면 플레이어에게 개더링을 다시 생성하도록 안내하는 구조로 만들어 주세요. Player 파라미터에서 자기 자신의 사용자 ID는 생략할 수 있습니다. 개더링 생성 후, 다른 플레이어는 DoMatchmaking을 호출하여 이 개더링을 찾아 참가할 수 있습니다. 모든 역할 슬롯이 채워지면 매치메이킹이 완료되고 모든 참가자에게 알림이 전송됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession player EzPlayer  자신의 플레이어 정보 attributeRanges List [] 0 ~ 5 items 모집 조건 이 개더링에 참가하기 위해 플레이어가 충족해야 하는 속성 범위 조건의 목록입니다. 각 항목은 속성 이름과 허용되는 최소값·최대값 범위를 지정합니다. 플레이어 자신의 속성값이 이 범위 내에 있지 않으면 참가할 수 없습니다. 최대 5건. capacityOfRoles List [] 1 ~ 5 items 모집 슬롯 목록 이 개더링의 모집 슬롯을 정의합니다. 각 항목은 역할 이름, 그 별칭, 그리고 해당 역할에 참가 가능한 최대 인원수를 지정합니다. 모든 역할 슬롯이 정원에 도달하면 매치메이킹이 완료됩니다. 최소 1건, 최대 5건. allowUserIds List [] 0 ~ 100 items 참가 허용 사용자 ID 목록 이 게더링에 참가하는 것이 허용된 사용자 ID의 화이트리스트입니다. 지정한 경우, 목록에 포함된 사용자만 이 게더링의 매치메이킹에 참가할 수 있습니다. 친구 전용 매치메이킹이나 초대제 매치메이킹 시나리오에 유용합니다. 최대 100건. expiresAt long 게더링 유효 기간 이 게더링이 자동으로 만료되어 삭제되는 시각입니다. 이 시각까지 매치메이킹이 완료되지 않으면 게더링은 정리됩니다. 지정하지 않은 경우, 매치메이킹이 완료되거나 수동으로 삭제될 때까지 게더링이 유지됩니다. expiresAtTimeSpan EzTimeSpan 유효기간까지 남은 시간 Result 타입 설명 item EzGathering 작성한 개더링 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . CreateGatheringAsync ( player : new Gs2 . Unity . Gs2Matchmaking . Model . EzPlayer { Attributes = new List Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute { Name = \"stage\" , Value = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute { Name = \"level\" , Value = 10 , }, }, }, attributeRanges : new List Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"stage\" , Min = 1 , Max = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"level\" , Min = 0 , Max = 10 , }, }, capacityOfRoles : new List Gs2 . Unity . Gs2Matchmaking . Model . EzCapacityOfRole \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzCapacityOfRole { RoleName = \"default\" , Capacity = 4 , }, }, allowUserIds : null , expiresAt : null , expiresAtTimeSpan : null ); var item = await result . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . CreateGatheringFuture ( player : new Gs2 . Unity . Gs2Matchmaking . Model . EzPlayer { Attributes = new List Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute { Name = \"stage\" , Value = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttribute { Name = \"level\" , Value = 10 , }, }, }, attributeRanges : new List Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"stage\" , Min = 1 , Max = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"level\" , Min = 0 , Max = 10 , }, }, capacityOfRoles : new List Gs2 . Unity . Gs2Matchmaking . Model . EzCapacityOfRole \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzCapacityOfRole { RoleName = \"default\" , Capacity = 4 , }, }, allowUserIds : null , expiresAt : null , expiresAtTimeSpan : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e CreateGathering ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzPlayer \u003e () -\u003e WithAttributes ([] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttribute \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttribute \u003e () -\u003e WithName ( TOptional FString \u003e ( \"stage\" )) -\u003e WithValue ( TOptional int32 \u003e ( 1 ))); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttribute \u003e () -\u003e WithName ( TOptional FString \u003e ( \"level\" )) -\u003e WithValue ( TOptional int32 \u003e ( 10 ))); return v ; }()) ), // player [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttributeRange \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttributeRange \u003e () -\u003e WithName ( TOptional FString \u003e ( \"stage\" )) -\u003e WithMin ( TOptional int32 \u003e ( 1 )) -\u003e WithMax ( TOptional int32 \u003e ( 1 ))); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttributeRange \u003e () -\u003e WithName ( TOptional FString \u003e ( \"level\" )) -\u003e WithMin ( TOptional int32 \u003e ( 0 )) -\u003e WithMax ( TOptional int32 \u003e ( 10 ))); return v ; }(), // attributeRanges [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Matchmaking :: Model :: FEzCapacityOfRole \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzCapacityOfRole \u003e () -\u003e WithRoleName ( TOptional FString \u003e ( \"default\" )) -\u003e WithCapacity ( TOptional int32 \u003e ( 4 ))); return v ; }() // capacityOfRoles // allowUserIds // expiresAt // expiresAtTimeSpan ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . create_gathering ( ( Gs2MatchmakingPlayer . new () . with_attributes ([ ( Gs2MatchmakingEzAttribute . new () . with_name ( \"stage\" ) . with_value ( 1 )), ( Gs2MatchmakingEzAttribute . new () . with_name ( \"level\" ) . with_value ( 10 )), ])), # player [ ( Gs2MatchmakingEzAttributeRange . new () . with_name ( \"stage\" ) . with_min ( 1 ) . with_max ( 1 )), ( Gs2MatchmakingEzAttributeRange . new () . with_name ( \"level\" ) . with_min ( 0 ) . with_max ( 10 )), ], # attribute_ranges [ ( Gs2MatchmakingEzCapacityOfRole . new () . with_role_name ( \"default\" ) . with_capacity ( 4 )), ], # capacity_of_roles null , # allow_user_ids null , # expires_at null # expires_at_time_span ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result doMatchmaking 참가 가능한 개더링을 검색하여 참가 기존 개더링 중에서 플레이어의 속성에 맞고 빈 자리가 있는 것을 검색하여 자동으로 참가합니다. 직접 매치를 만들기보다 기존 매치에 참가하고 싶은 플레이어가 사용하는 메인 API입니다. 한 번의 호출에서는 일정 시간 동안만 검색을 수행합니다. 아직 적절한 개더링을 찾지 못한 경우 matchmakingContextToken 이 반환됩니다. 다음 호출에서 이 토큰을 전달하면 이전 검색의 이어서부터 검색을 재개할 수 있습니다. 매치가 발견될 때까지 반복해서 호출해 주세요. 모든 개더링을 검색했지만 참가 가능한 것이 없었던 경우, 개더링과 토큰 모두 null 이 됩니다. 이 경우에는 CreateGathering으로 새로운 개더링을 생성해 주세요. 일반적인 매치메이킹 흐름: DoMatchmaking을 반복 호출하며 매번 토큰을 전달 개더링이 반환됨 → 매치메이킹 성공, 게임으로 진행 개더링과 토큰 모두 null → 매치를 찾지 못했으므로 새로운 개더링을 생성 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession player EzPlayer  자신의 플레이어 정보 matchmakingContextToken string ~ 5120자 검색 재개에 사용하는 매치메이킹 상태를 보유하는 토큰 Result 타입 설명 item EzGathering 참가한 개더링 matchmakingContextToken string 매치메이킹 상태를 보유하는 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . DoMatchmakingAsync ( player : new Gs2 . Unity . Gs2Matchmaking . Model . EzPlayer () { UserId = \"user-0001\" , Attributes = new List Gs2 . Unity . Gs2MatchmakingEzAttribute \u003e { new Gs2 . Unity . Gs2MatchmakingEzAttribute () { Name = \"attr1\" , Value = 1 , }, new Gs2 . Unity . Gs2MatchmakingEzAttribute () { Name = \"attr2\" , Value = 1 , }, } } ). ToListAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . DoMatchmaking ( player : new Gs2 . Unity . Gs2Matchmaking . Model . EzPlayer () { UserId = \"user-0001\" , Attributes = new List Gs2 . Unity . Gs2MatchmakingEzAttribute \u003e { new Gs2 . Unity . Gs2MatchmakingEzAttribute () { Name = \"attr1\" , Value = 1 , }, new Gs2 . Unity . Gs2MatchmakingEzAttribute () { Name = \"attr2\" , Value = 1 , }, } } ); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e DoMatchmaking ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzPlayer \u003e () -\u003e WithUserId ( TOptional FString \u003e ( \"user-0001\" )) -\u003e WithAttributes ([] { const auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttribute \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttribute \u003e () -\u003e WithName ( TOptional FString \u003e ( \"attr1\" )) -\u003e WithValue ( TOptional int32 \u003e ( 1 )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttribute \u003e () -\u003e WithName ( TOptional FString \u003e ( \"attr2\" )) -\u003e WithValue ( TOptional int32 \u003e ( 1 )) ); return v ; }() // player ); TArray Gs2 :: UE5 :: Matchmaking :: Model :: FEzGatheringPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } earlyCompleteMatchmaking 정원이 채워지지 않은 상태에서 매치메이킹을 조기 종료합니다 모든 역할 슬롯이 채워지기 전에 매치메이킹을 종료합니다. 원래 모집 인원보다 적은 인원으로 게임을 시작하고 싶을 때 사용합니다. 예를 들어 4인용 협력 던전을 3명으로 시작하는 경우입니다. 이 API를 호출할 수 있는 것은 기어링을 생성한 플레이어뿐입니다. 호출 후 매치메이킹은 완료된 것으로 처리되며, 모든 참가자에게 매치 완료 알림이 전송됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. gameSession GameSession  GameSession Result 타입 설명 item EzGathering 취소한 개더링 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ); var result = await domain . EarlyCompleteMatchmakingAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ); var future = domain . EarlyCompleteMatchmakingFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Gathering ( \"gathering-0001\" // gatheringName ); const auto Future = Domain -\u003e EarlyCompleteMatchmaking ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . gathering ( \"gathering-0001\" ) var async_result = await domain . early_complete_matchmaking ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getGathering 기어링의 현재 상태를 취득합니다 특정 기어링의 최신 정보를 취득합니다. 참가자, 모집 조건, 역할별 정원이 포함됩니다. 대기 화면을 표시할 때 사용합니다. 예를 들어 “2/4명 참가 완료, 모집 중: 탱커 1명, 힐러 1명\"과 같은 화면을 표시할 수 있습니다. 모든 역할 슬롯이 채워졌는지 확인함으로써 매치메이킹이 완료되었는지 확인하는 용도로도 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. Result 타입 설명 item EzGathering 개더링 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Gathering ( gatheringName : \"gathering-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Gathering ( gatheringName : \"gathering-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e Gathering ( \"gathering-0001\" // gatheringName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . gathering ( \"gathering-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Gathering ( gatheringName : \"gathering-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Gathering ( gatheringName : \"gathering-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e Gathering ( \"gathering-0001\" // gatheringName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Matchmaking :: Model :: FGathering \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . gathering ( \"gathering-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. ping 매치메이킹 대기 중 킵얼라이브를 전송합니다 플레이어가 아직 매치메이킹을 대기 중임을 서버에 알립니다. 플레이어가 매치메이킹 대기 화면에 있는 동안 주기적으로 호출하세요. 이를 통해 어떤 플레이어가 아직 온라인 상태로 대기 중인지 시스템이 파악할 수 있습니다. 네임스페이스에 타임아웃이 설정되어 있는 경우, 타임아웃 시간 내에 ping을 보내지 않은 플레이어는 기어링에서 자동으로 제외될 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. Result 타입 설명 item EzGathering 갱신한 개더링 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ); var result = await domain . PingAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ); var future = domain . PingFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Gathering ( \"gathering-0001\" // gatheringName ); const auto Future = Domain -\u003e Ping ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . gathering ( \"gathering-0001\" ) var async_result = await domain . ping ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result updateGathering 개더링의 모집 조건 변경 아직 플레이어를 기다리고 있는 기존 개더링의 속성 범위 조건을 변경합니다. 예를 들어 “레벨 15 20” 조건으로 플레이어가 모이지 않는 경우, “레벨 10 25\"로 범위를 넓혀 참가 가능한 플레이어 모수를 늘릴 수 있습니다. 변경할 수 있는 것은 속성 범위뿐입니다. 역할 정원이나 참가 허용 사용자 ID는 생성 후에는 변경할 수 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. gameSession GameSession  GameSession attributeRanges List [] 0 ~ 5 items 모집 조건 이 개더링에 참가하기 위해 플레이어가 충족해야 하는 속성 범위 조건의 목록입니다. 각 항목은 속성 이름과 허용되는 최소값·최대값 범위를 지정합니다. 플레이어 자신의 속성값이 이 범위 내에 있지 않으면 참가할 수 없습니다. 최대 5건. Result 타입 설명 item EzGathering 갱신한 개더링 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ); var result = await domain . UpdateGatheringAsync ( attributeRanges : new List Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"stage\" , Min = 1 , Max = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"level\" , Min = 0 , Max = 50 , }, } ); var item = await result . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Gathering ( gatheringName : \"gathering-0001\" ); var future = domain . UpdateGatheringFuture ( attributeRanges : new List Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"stage\" , Min = 1 , Max = 1 , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzAttributeRange { Name = \"level\" , Min = 0 , Max = 50 , }, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Gathering ( \"gathering-0001\" // gatheringName ); const auto Future = Domain -\u003e UpdateGathering ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttributeRange \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttributeRange \u003e () -\u003e WithName ( TOptional FString \u003e ( \"stage\" )) -\u003e WithMin ( TOptional int32 \u003e ( 1 )) -\u003e WithMax ( TOptional int32 \u003e ( 1 ))); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzAttributeRange \u003e () -\u003e WithName ( TOptional FString \u003e ( \"level\" )) -\u003e WithMin ( TOptional int32 \u003e ( 0 )) -\u003e WithMax ( TOptional int32 \u003e ( 50 ))); return v ; }() // attributeRanges ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . gathering ( \"gathering-0001\" ) var async_result = await domain . update_gathering ( [ ( Gs2MatchmakingEzAttributeRange . new () . with_name ( \"stage\" ) . with_min ( 1 ) . with_max ( 1 )), ( Gs2MatchmakingEzAttributeRange . new () . with_name ( \"level\" ) . with_min ( 0 ) . with_max ( 50 )), ] # attribute_ranges ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getRatingModel 특정 레이팅 설정의 상세 정보를 취득합니다 이름을 지정하여 하나의 레이팅 모델의 상세 정보를 취득합니다. 레이팅 시스템의 설정(초기 레이팅 값 및 변동성 파라미터)을 표시할 때 사용합니다. 변동성이 높을수록 대전마다 레이팅 변동 폭이 커지며(신규 플레이어의 실력을 빠르게 반영하는 데 적합), 변동성이 낮을수록 더 안정적이고 완만한 변화가 나타납니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. Result 타입 설명 item EzRatingModel 레이팅 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). RatingModel ( ratingName : \"mode1\" ); var item = await domain . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). RatingModel ( ratingName : \"mode1\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RatingModel ( \"mode1\" // ratingName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . rating_model ( \"mode1\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). RatingModel ( ratingName : \"mode1\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). RatingModel ( ratingName : \"mode1\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e RatingModel ( \"mode1\" // ratingName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Matchmaking :: Model :: FRatingModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . rating_model ( \"mode1\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listRatingModels 레이팅 설정 목록을 취득합니다 네임스페이스에 설정되어 있는 모든 레이팅 모델을 취득합니다. 각 레이팅 모델은 플레이어의 실력 평가 시스템에 대한 파라미터를 정의합니다. 예를 들어 “랭크 배틀”, “아레나”, “토너먼트\"별로 각각 다른 레이팅을 가질 수 있습니다. GS2에서는 레이팅 계산에 Glicko-2 알고리즘을 사용합니다. 각 모델은 초기 레이팅 값(기본값: 1500)과 변동성(대전마다 레이팅이 얼마나 크게 변하는지)을 지정합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 레이팅 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . RatingModelsAsync ( ). ToListAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . RatingModels ( ); List EzRatingModel \u003e items = new List EzRatingModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e RatingModels ( ); TArray Gs2 :: UE5 :: Matchmaking :: Model :: FEzRatingModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRatingModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRatingModels ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRatingModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRatingModels ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeRatingModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeRatingModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getRating 특정 카테고리의 플레이어 레이팅 점수를 취득합니다 지정된 레이팅 이름에 대한 플레이어의 현재 레이팅 값을 취득합니다. 하나의 레이팅을 표시할 때 사용합니다. 예를 들어 대전 결과 화면이나 로비에서 “당신의 랭크 배틀 레이팅: 1823\"과 같이 표시할 수 있습니다. 레이팅 값은 플레이어가 이기면 오르고 지면 내려갑니다. 변동 폭은 상대방의 레이팅과 변동성 설정에 따라 결정됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession ratingName string  ~ 128자 레이팅 이름 레이팅 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzRating 레이팅 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Rating ( ratingName : \"rating-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Rating ( ratingName : \"rating-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Rating ( \"rating-0001\" // ratingName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . rating ( \"rating-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Rating ( ratingName : \"rating-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Rating ( ratingName : \"rating-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Rating ( \"rating-0001\" // ratingName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Matchmaking :: Model :: FRating \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . rating ( \"rating-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listRatings 모든 레이팅 카테고리에 대한 플레이어의 레이팅 점수를 취득합니다 플레이어의 현재 레이팅 값을 모두 취득합니다. 게임에 여러 레이팅 카테고리(예: “랭크 배틀\"과 “아레나”)가 있는 경우, 각각의 점수가 반환됩니다. 프로필 화면이나 전적 화면을 만들 때 사용합니다. 예를 들어 “랭크 배틀: 1823, 아레나: 1547\"과 같이 표시할 수 있습니다. 플레이어의 레이팅은 레이팅이 적용되는 매치에 처음 참가했을 때 자동으로 생성되며, 초기값(일반적으로 1500)부터 시작합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 레이팅 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . RatingsAsync ( ). ToListAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Ratings ( ); List EzRating \u003e items = new List EzRating \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Ratings ( ); TArray Gs2 :: UE5 :: Matchmaking :: Model :: FEzRatingPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRatings ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRatings ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRatings ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRatings ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeRatings ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeRatings ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. createVote 대전 결과 보고용 서명된 투표용지를 생성합니다 대전 결과를 보고할 때 사용하는 투표용지(밸럿)를 생성합니다. 레이팅이 적용되는 대전이 끝난 후, 각 플레이어는 누가 이기고 누가 졌는지 보고해야 합니다. 이 API는 플레이어의 신원 정보와 암호 서명이 포함된 위변조 방지 투표용지를 생성합니다. 대전 결과 보고 흐름: 대전이 종료되고, 각 플레이어의 게임 클라이언트가 CreateVote를 호출하여 서명된 투표용지를 취득한다 각 플레이어가 투표용지와 대전 결과를 Vote API로 전송한다 서버가 모든 투표를 집계하여 다수결로 최종 결과를 결정한다 확정된 결과에 따라 플레이어의 레이팅이 업데이트된다 파라미터: ratingName: 이 대전이 속한 레이팅 카테고리의 이름(예: “ranked_battle”) gatheringName: 이 대전이 진행된 기어링(매치메이킹 룸)의 이름 numberOfPlayer: 대전 참가 인원 수(2~10명) keyId: 투표용지 서명에 사용할 암호화 키(커스텀 키를 설정하지 않은 경우 기본 키를 사용) 반환된 투표용지 본문과 서명은 Vote 또는 VoteMultiple API 호출에 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. gameSession GameSession  GameSession numberOfPlayer int  2 ~ 10 참가 인원 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzBallot 투표용지 body string 서명 대상 데이터 signature string 서명 데이터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( ratingName : \"rating-0001\" , gatheringName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( ratingName : \"rating-0001\" , gatheringName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Ballot ( \"rating-0001\" , // ratingName \"gathering-0001\" , // gatheringName 4 , // numberOfPlayer \"key-0001\" // keyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ballot ( \"rating-0001\" , \"gathering-0001\" , 4 , \"key-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( ratingName : \"rating-0001\" , gatheringName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( ratingName : \"rating-0001\" , gatheringName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Ballot ( \"rating-0001\" , // ratingName \"gathering-0001\" , // gatheringName 4 , // numberOfPlayer \"key-0001\" // keyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Matchmaking :: Model :: FBallot \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ballot ( \"rating-0001\" , \"gathering-0001\" , 4 , \"key-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. vote 대전 결과 투표를 제출합니다 대전 후, 각 플레이어가 이 API를 개별적으로 호출하여 누가 이기고 누가 졌는지 보고합니다. CreateVote로 취득한 투표용지 본문과 서명, 그리고 대전 결과(각 플레이어의 순위나 승패 목록)를 전달합니다. 투표 방식: 첫 번째 플레이어가 투표한 후, 다른 플레이어들이 투표할 수 있는 유예 시간은 5분입니다 5분 이내에 모든 플레이어가 투표하면 결과가 즉시 확정됩니다 5분 이내에 일부 플레이어가 투표하지 않으면, 그때까지 접수된 투표 내용으로 다수결에 따라 결과가 결정됩니다 표가 동수인 경우(예: 2명이 “플레이어 A 승리”, 2명이 “플레이어 B 승리”), 결과는 폐기되고 레이팅은 업데이트되지 않습니다(이 동작은 스크립트로 커스터마이즈할 수 있습니다) 가장 단순한 방식으로, 각 플레이어가 독립적으로 투표합니다. 단점은 결과 반영에 최대 5분이 걸릴 수 있다는 점입니다. 즉시 결과를 반영하고 싶다면 VoteMultiple을 사용하세요. 승리한 플레이어가 전원의 투표용지를 모아서 함께 전송합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ballotBody string  ~ 1024자 투표용지의 서명 대상 데이터 ballotSignature string  ~ 256자 투표용지의 서명 gameResults List 0 ~ 10 items 투표 내용. 대전을 진행한 플레이어 그룹 1에 속한 사용자 ID 리스트 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzBallot 투표용지 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . VoteAsync ( ballotBody : \"ballotBody...\" , ballotSignature : \"ballotSignature...\" , gameResults : new List Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . VoteFuture ( ballotBody : \"ballotBody...\" , ballotSignature : \"ballotSignature...\" , gameResults : new List Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e Vote ( \"ballotBody...\" , // ballotBody \"ballotSignature...\" , // ballotSignature [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 1 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0001\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0002\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0003\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 3 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0004\" )) ); return v ; }(), // gameResults \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) var async_result = await domain . vote ( \"ballotBody...\" , # ballot_body \"ballotSignature...\" , # ballot_signature [ Gs2MatchmakingEzGameResult . new () . with_rank ( 1 ) . with_user_id ( \"user-0001\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0002\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0003\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 3 ) . with_user_id ( \"user-0004\" ), ], # game_results \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result voteMultiple 모든 투표용지를 모아 한 번에 제출하여 대전 결과를 즉시 확정합니다 각 플레이어가 개별적으로 투표하는 방식(최대 5분 소요) 대신, 승리한 플레이어가 전원의 서명된 투표용지를 모아 한 번에 제출합니다. 이를 통해 결과가 즉시 확정됩니다. 권장 흐름: 대전 종료 — 각 플레이어가 CreateVote를 호출하여 서명된 투표용지를 취득한다 각 플레이어가 게임의 통신 수단(게임 서버나 P2P 통신 등)을 이용해 자신의 투표용지(본문 + 서명)를 승리한 측의 플레이어에게 전달한다 승리한 측의 플레이어가 VoteMultiple을 호출하여 수집한 모든 투표용지와 대전 결과를 전송한다 결과가 즉시 확정되고 레이팅이 업데이트된다 왜 승리한 측이 투표용지를 모으는가: 패배한 측은 이겼다고 거짓말할 이유가 없지만(얻을 것이 없으므로), 투표용지 제출을 거부할 수도 있습니다 패배한 측이 협조하지 않더라도, 과반수의 투표용지(절반 초과)만 있으면 결과는 승인됩니다 예를 들어 2대2 대전에서 승리한 2명이 투표용지를 제출하면 4명 중 2명분 — 과반수로 충분합니다 구현은 다소 복잡해지지만 결과가 즉시 반영되므로 플레이어 경험 측면에서는 더 나은 방식입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. signedBallots List 0 ~ 10 items 서명이 첨부된 투표용지 리스트 gameResults List 0 ~ 10 items 투표 내용. 대전을 진행한 플레이어 그룹 1에 속한 사용자 ID 리스트 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzBallot 투표용지 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . VoteMultipleAsync ( signedBallots : new List Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, }, gameResults : new List Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . VoteMultipleFuture ( signedBallots : new List Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, }, gameResults : new List Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2Matchmaking . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e VoteMultiple ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Matchmaking :: Model :: FEzSignedBallot \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzSignedBallot \u003e () -\u003e WithBody ( TOptional FString \u003e ( \"aaa\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"bbb\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzSignedBallot \u003e () -\u003e WithBody ( TOptional FString \u003e ( \"aaa\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"bbb\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzSignedBallot \u003e () -\u003e WithBody ( TOptional FString \u003e ( \"aaa\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"bbb\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzSignedBallot \u003e () -\u003e WithBody ( TOptional FString \u003e ( \"aaa\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"bbb\" )) ); return v ; }(), // signedBallots [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 1 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0001\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0002\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0003\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Matchmaking :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 3 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0004\" )) ); return v ; }(), // gameResults \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) var async_result = await domain . vote_multiple ( [ Gs2MatchmakingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2MatchmakingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2MatchmakingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2MatchmakingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), ], # signed_ballots [ Gs2MatchmakingEzGameResult . new () . with_rank ( 1 ) . with_user_id ( \"user-0001\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0002\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0003\" ), Gs2MatchmakingEzGameResult . new () . with_rank ( 3 ) . with_user_id ( \"user-0004\" ), ], # game_results \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getJoinedSeasonGathering 특정 시즌에서 플레이어가 참가한 시즌 개더링 조회 지정된 시즌 번호에서 플레이어가 속한 시즌 개더링을 조회합니다. 현재 시즌에서 플레이어가 어느 매치 그룹에 있는지 확인할 때 사용합니다. 예를 들어, 앱 재시작 후 매치 로비 화면을 복원하는 경우입니다. 지정된 시즌에서 플레이어가 시즌 개더링에 참가하지 않은 경우, 또는 개더링이 이미 존재하지 않는 경우 정보는 반환되지 않습니다. 이 경우에는 DoSeasonMatchmaking으로 새로운 매치메이킹 검색을 시작해 주세요. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzJoinedSeasonGathering 시즌 개더링 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ). JoinedSeasonGathering ( ); var item = await domain . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ). JoinedSeasonGathering ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Season ( \"season-0001\" , // seasonName 0 // season ) -\u003e JoinedSeasonGathering ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . season ( \"season-0001\" , 0 ) . joined_season_gathering ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ). JoinedSeasonGathering ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ). JoinedSeasonGathering ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Season ( \"season-0001\" , // seasonName 0 // season ) -\u003e JoinedSeasonGathering ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Matchmaking :: Model :: FJoinedSeasonGathering \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . season ( \"season-0001\" , 0 ) . joined_season_gathering ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listJoinedSeasonGatherings 플레이어가 참가한 시즌 개더링 목록 조회 플레이어가 현재 멤버로 속해 있는 모든 시즌 개더링을 조회합니다. 대전 이력이나 활성 대전 화면을 표시할 때 사용합니다. 예를 들어, 이번 시즌에 플레이어가 참가 중이거나 참가한 랭크전을 목록으로 표시할 수 있습니다. 시즌 이름으로 필터링하여 특정 랭크 모드(예: 「랭크 1v1」만)의 대전만 표시할 수도 있습니다. 주요 용도: 게임 실행 시 플레이어의 현재 활성 대전을 표시 대전 이력 화면을 구성 새로운 매치메이킹 검색을 시작하기 전에 플레이어가 이미 대전 중인지 확인 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 시즌 개더링 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ); var items = await domain . JoinedSeasonGatheringsAsync ( ). ToListAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ); var it = domain . JoinedSeasonGatherings ( ); List EzJoinedSeasonGathering \u003e items = new List EzJoinedSeasonGathering \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Season ( \"season-0001\" , // seasonName 0 // season ); const auto It = Domain -\u003e JoinedSeasonGatherings ( ); TArray Gs2 :: UE5 :: Matchmaking :: Model :: FEzJoinedSeasonGatheringPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeJoinedSeasonGatherings ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeJoinedSeasonGatherings ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeJoinedSeasonGatherings ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeJoinedSeasonGatherings ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Season ( \"season-0001\" , // seasonName 0 // season ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeJoinedSeasonGatherings ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeJoinedSeasonGatherings ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. doSeasonMatchmaking 참가 가능한 시즌 매치를 검색하여 참가합니다 플레이어의 티어 내에서 빈 자리가 있는 시즌 기어링(영속적인 매치메이킹 그룹)을 검색하여 자동으로 참가합니다. 플레이어의 티어는 연동된 GS2-Experience 모델의 경험치 레벨에 따라 결정되므로, 실력이 비슷한 플레이어끼리 매칭됩니다. 일반적인 DoMatchmaking과 비슷한 구조이지만, 티어에 따른 그룹 분류가 있습니다: 한 번의 호출로는 일정 시간만 검색합니다. 아직 매치를 찾지 못한 경우 matchmakingContextToken 이 반환됩니다. 다음 호출 시 이 토큰을 전달하면 이전 검색을 이어서 재개할 수 있습니다. 매치가 발견될 때까지 반복해서 호출하세요. 모든 시즌 기어링을 검색해도 빈 자리가 없는 경우, 시즌 기어링과 토큰 모두 null 로 반환됩니다. 일반 매치메이킹에서는 직접 새로운 기어링을 생성하지만, 시즌 매치메이킹에서는 필요에 따라 시스템이 자동으로 새로운 시즌 기어링을 생성합니다. 일반적인 시즌 매치메이킹 흐름: DoSeasonMatchmaking을 루프로 호출하며 매번 토큰을 전달한다 시즌 기어링이 반환됨 → 매치 성립, 게임으로 진행 둘 다 null → 현재 이용 가능한 매치가 없음. “검색 중” 화면을 표시하고 잠시 대기 후 재시도 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession matchmakingContextToken string ~ 5120자 검색 재개에 사용하는 매치메이킹 상태를 보유하는 토큰 Result 타입 설명 item EzSeasonGathering 참가한 시즌 개더링 matchmakingContextToken string 매치메이킹 상태를 보유하는 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ); var items = await domain . DoSeasonMatchmakingAsync ( ). ToListAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Season ( seasonName : \"season-0001\" , season : 0 ); var it = domain . DoSeasonMatchmaking ( ); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Season ( \"season-0001\" , // seasonName 0 // season ); const auto It = Domain -\u003e DoSeasonMatchmaking ( ); for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getSeasonGathering 시즌 기어링의 현재 상태를 취득합니다 특정 시즌 기어링의 상세 정보를 취득합니다. 참가자 목록과 소속 티어 정보가 포함됩니다. 시즌 매치의 로비나 대기 화면을 표시할 때 사용합니다. 예를 들어 “골드 티어 매치 #42: 3/4명 참가 중\"과 같은 화면을 표시할 수 있습니다. 정확한 시즌 기어링을 특정하려면 시즌 번호, 티어, 기어링 이름을 지정해야 합니다. 이 정보는 DoSeasonMatchmaking을 통해 시즌 기어링 참가에 성공했을 때 반환됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. seasonGatheringName string  UUID ~ 128자 시즌 게더링명 시즌 게더링 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzSeasonGathering 시즌 개더링 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Season ( seasonName : \"season-0001\" , season : 0 ). SeasonGathering ( tier : 0 , seasonGatheringName : \"gathering-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Season ( seasonName : \"season-0001\" , season : 0 ). SeasonGathering ( tier : 0 , seasonGatheringName : \"gathering-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e Season ( \"season-0001\" , // seasonName 0 // season ) -\u003e SeasonGathering ( 0 , // tier \"gathering-0001\" // seasonGatheringName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . season ( \"season-0001\" , 0 ) . season_gathering ( 0 , \"gathering-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Season ( seasonName : \"season-0001\" , season : 0 ). SeasonGathering ( tier : 0 , seasonGatheringName : \"gathering-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). Season ( seasonName : \"season-0001\" , season : 0 ). SeasonGathering ( tier : 0 , seasonGatheringName : \"gathering-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e Season ( \"season-0001\" , // seasonName 0 // season ) -\u003e SeasonGathering ( 0 , // tier \"gathering-0001\" // seasonGatheringName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Matchmaking :: Model :: FSeasonGathering \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . season ( \"season-0001\" , 0 ) . season_gathering ( 0 , \"gathering-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getSeasonModel 특정 시즌 매치메이킹 설정의 상세 정보를 취득합니다 이름을 지정하여 하나의 시즌 모델의 상세 정보를 취득합니다. 특정 랭크 모드의 규칙이나 설정을 표시할 때 사용합니다. 예를 들어 모드 선택 화면에서 “랭크 1대1: 최대 2명, 아레나 경험치로 티어 결정\"과 같이 표시할 수 있습니다. 응답에는 다음이 포함됩니다: maximumParticipants: 한 경기에 참가할 수 있는 인원 수 experienceModelId: 플레이어의 티어를 결정하는 데 사용되는 GS2-Experience 모델. 플레이어의 경험치 레벨이 티어에 매핑되며, 같은 티어 내의 플레이어끼리만 매칭됩니다. challengePeriodEventId: 설정되어 있는 경우, 지정된 기간 동안만 랭크전에 참가할 수 있습니다(예: 주말만, 매일 19시~22시 등) Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzSeasonModel 시즌 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). SeasonModel ( seasonName : \"season-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). SeasonModel ( seasonName : \"season-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SeasonModel ( \"season-0001\" // seasonName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . season_model ( \"season-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). SeasonModel ( seasonName : \"season-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ). SeasonModel ( seasonName : \"season-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SeasonModel ( \"season-0001\" // seasonName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Matchmaking :: Model :: FSeasonModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . matchmaking . namespace_ ( \"namespace-0001\" ) . season_model ( \"season-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSeasonModels 시즌 매치메이킹 설정 목록을 취득합니다 네임스페이스에 정의되어 있는 모든 시즌 모델을 취득합니다. 시즌 매치메이킹은 랭크전이 있는 대전 게임을 위해 설계되었습니다. “시즌 1”, “시즌 2\"와 같이 기간별로 구분하고, 플레이어를 실력에 따라 티어(등급)로 나누어 매칭합니다. 일반적인 기어링 기반 매치메이킹(임시 방을 생성하는 방식)과 달리, 시즌 매치메이킹에서는 시즌 동안 계속 유지되는 영속적인 그룹을 사용합니다. 같은 티어의 플레이어끼리 매칭되므로 공정한 대전이 가능합니다. 각 시즌 모델은 다음을 정의합니다: 한 경기당 최대 참가 인원 플레이어의 티어를 계산하는 데 사용되는 경험치 모델(GS2-Experience와 연동하여 브론즈, 실버, 골드 등의 실력대를 결정합니다) 선택적인 챌린지 기간 이벤트(GS2-Schedule과 연동하여 대전 가능한 시간대를 제한할 수 있습니다) 이용 가능한 랭크 모드 목록을 표시할 때 사용합니다. 예를 들어 “랭크 1대1”, “랭크 3대3\"과 같은 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 시즌 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . SeasonModelsAsync ( ). ToListAsync (); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . SeasonModels ( ); List EzSeasonModel \u003e items = new List EzSeasonModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e SeasonModels ( ); TArray Gs2 :: UE5 :: Matchmaking :: Model :: FEzSeasonModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSeasonModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSeasonModels ( callbackId ); var domain = gs2 . Matchmaking . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSeasonModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSeasonModels ( callbackId ); const auto Domain = Gs2 -\u003e Matchmaking -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSeasonModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSeasonModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. 이벤트 핸들러 OnJoinNotification 개더링에 새로운 참가자가 참가했을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. joinUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Matchmaking . OnJoinNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var gatheringName = notification . GatheringName ; var joinUserId = notification . JoinUserId ; }; gs2 . Matchmaking . OnJoinNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var gatheringName = notification . GatheringName ; var joinUserId = notification . JoinUserId ; }; Gs2 -\u003e Matchmaking -\u003e OnJoinNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GatheringName = Notification -\u003e GatheringNameValue ; const auto JoinUserId = Notification -\u003e JoinUserIdValue ; }); ez . matchmaking . join_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var gathering_name = notification . gathering_name var join_user_id = notification . join_user_id ) OnLeaveNotification 개더링에서 참가자가 이탈했을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. leaveUserId string 사용자ID 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Matchmaking . OnLeaveNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var gatheringName = notification . GatheringName ; var leaveUserId = notification . LeaveUserId ; }; gs2 . Matchmaking . OnLeaveNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var gatheringName = notification . GatheringName ; var leaveUserId = notification . LeaveUserId ; }; Gs2 -\u003e Matchmaking -\u003e OnLeaveNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GatheringName = Notification -\u003e GatheringNameValue ; const auto LeaveUserId = Notification -\u003e LeaveUserIdValue ; }); ez . matchmaking . leave_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var gathering_name = notification . gathering_name var leave_user_id = notification . leave_user_id ) OnCompleteNotification 매치메이킹이 성립했을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Matchmaking . OnCompleteNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var gatheringName = notification . GatheringName ; }; gs2 . Matchmaking . OnCompleteNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var gatheringName = notification . GatheringName ; }; Gs2 -\u003e Matchmaking -\u003e OnCompleteNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GatheringName = Notification -\u003e GatheringNameValue ; }); ez . matchmaking . complete_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var gathering_name = notification . gathering_name ) OnChangeRatingNotification 레이팅 값이 변동했을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string 레이팅 이름 레이팅 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID rateValue float 레이트 값 Glicko-2 알고리즘으로 계산된 플레이어의 현재 레이팅 점수입니다. RatingModel에서 정의된 초기값(일반적으로 1500.0)이 기본값입니다. 대전 결과와 상대의 상대적인 실력에 따라 값이 증감합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Matchmaking . OnChangeRatingNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var ratingName = notification . RatingName ; var userId = notification . UserId ; var rateValue = notification . RateValue ; }; gs2 . Matchmaking . OnChangeRatingNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var ratingName = notification . RatingName ; var userId = notification . UserId ; var rateValue = notification . RateValue ; }; Gs2 -\u003e Matchmaking -\u003e OnChangeRatingNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto RatingName = Notification -\u003e RatingNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto RateValue = Notification -\u003e RateValueValue ; }); ez . matchmaking . change_rating_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var rating_name = notification . rating_name var user_id = notification . user_id var rate_value = notification . rate_value )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Matchmaking SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Matchmaking SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/matchmaking/game_engine/"},{"content":"모델 EzSpatial 공간 정보 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 position EzPosition  좌표 vector EzVector  방향 EzAreaModel 에어리어는 공간을 분할하는 것으로, 같은 좌표라도 에어리어가 다르면 별도의 공간으로 취급할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 에어리어 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. layerModels List [] 0 ~ 1000 items 레이어 모델 목록 EzLayerModel 레이어는 하나의 공간 내에서 여러 개의 논리적 계층을 구현합니다. 예를 들어, 캐릭터가 대량으로 존재하는 공간에서 에너미가 보이지 않게 되는 문제를 해결합니다. 레이어 1에는 캐릭터를 배치합니다. 레이어 2에 에너미를 배치한 경우, 레이어마다 지정한 거리 내에서의 취득 수량을 지정할 수 있으므로 보이지 않게 될 걱정이 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 레이어 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzMyPosition 내 위치 정보 타입 활성화 조건 필수 기본값 값 제한 설명 position EzPosition  좌표 vector EzVector  방향 r float 1 0 ~ 10000 반경 EzPosition 좌표 타입 활성화 조건 필수 기본값 값 제한 설명 x float  -1048574 ~ 1048574 X 좌표 y float  -1048574 ~ 1048574 Y 좌표 z float  -1048574 ~ 1048574 Z 좌표 EzScope 취득할 주변 상황 타입 활성화 조건 필수 기본값 값 제한 설명 r float  1 ~ 16777214 반경 limit int  1 ~ 100 최대 개수 EzVector 좌표 타입 활성화 조건 필수 기본값 값 제한 설명 x float  -1048574 ~ 1048574 X 좌표 y float  -1048574 ~ 1048574 Y 좌표 z float  -1048574 ~ 1048574 Z 좌표 메서드 describeAreaModels 에어리어 모델 목록 조회 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 에어리어 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . AreaModelsAsync ( ). ToListAsync (); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . AreaModels ( ); List EzAreaModel \u003e items = new List EzAreaModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e AreaModels ( ); TArray Gs2 :: UE5 :: MegaField :: Model :: FEzAreaModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeAreaModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeAreaModels ( callbackId ); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeAreaModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeAreaModels ( callbackId ); const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeAreaModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeAreaModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getAreaModel 에어리어 모델 조회 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 Result 타입 설명 item EzAreaModel 에어리어 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e AreaModel ( \"area-0001\" // areaModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mega_field . namespace_ ( \"namespace-0001\" ) . area_model ( \"area-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e AreaModel ( \"area-0001\" // areaModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: MegaField :: Model :: FAreaModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . mega_field . namespace_ ( \"namespace-0001\" ) . area_model ( \"area-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. describeLayerModels 레이어 모델 목록 조회 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 Result 타입 설명 items List 레이어 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ); var items = await domain . LayerModelsAsync ( ). ToListAsync (); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ); var it = domain . LayerModels ( ); List EzLayerModel \u003e items = new List EzLayerModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e AreaModel ( \"area-0001\" // areaModelName ); const auto It = Domain -\u003e LayerModels ( ); TArray Gs2 :: UE5 :: MegaField :: Model :: FEzLayerModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeLayerModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeLayerModels ( callbackId ); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeLayerModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeLayerModels ( callbackId ); const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e AreaModel ( \"area-0001\" // areaModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeLayerModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeLayerModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getLayerModel 레이어 모델 조회 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 layerModelName string  ~ 128자 레이어 모델 이름 Result 타입 설명 item EzLayerModel 레이어 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ). LayerModel ( layerModelName : \"layer-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ). LayerModel ( layerModelName : \"layer-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e AreaModel ( \"area-0001\" // areaModelName ) -\u003e LayerModel ( \"layer-0001\" // layerModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mega_field . namespace_ ( \"namespace-0001\" ) . area_model ( \"area-0001\" ) . layer_model ( \"layer-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ). LayerModel ( layerModelName : \"layer-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). AreaModel ( areaModelName : \"area-0001\" ). LayerModel ( layerModelName : \"layer-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e AreaModel ( \"area-0001\" // areaModelName ) -\u003e LayerModel ( \"layer-0001\" // layerModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: MegaField :: Model :: FLayerModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . mega_field . namespace_ ( \"namespace-0001\" ) . area_model ( \"area-0001\" ) . layer_model ( \"layer-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. update 좌표 전송 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 position EzMyPosition  내 위치 정보 scopes List 0 ~ 10 items 다른 플레이어의 취득 범위 리스트 gameSession GameSession  GameSession Result 타입 설명 items List 물체 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Spatial ( areaModelName : \"area-0001\" , layerModelName : \"layer-0001\" ); var result = await domain . UpdateAsync ( position : null , scopes : null ); var item = await result . ModelAsync (); var domain = gs2 . MegaField . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Spatial ( areaModelName : \"area-0001\" , layerModelName : \"layer-0001\" ); var future = domain . UpdateFuture ( position : null , scopes : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e MegaField -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Spatial ( \"area-0001\" , // areaModelName \"layer-0001\" // layerModelName ); const auto Future = Domain -\u003e Update ( nullptr // position // scopes ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . mega_field . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . spatial ( \"area-0001\" , \"layer-0001\" ) var async_result = await domain . update ( null , # position null # scopes ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-MegaField SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-MegaField SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/mega_field/game_engine/"},{"content":"모델 EzComplete 미션 달성 상황 특정 미션 그룹에 대한 사용자의 미션 달성 상황과 보상 수령 상황을 추적합니다. 달성 완료된 태스크명과 보상 수령 완료된 태스크명을 각각 별도의 목록으로 관리하여, 달성된 태스크와 실제로 보상을 수령한 태스크를 구분합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. completedMissionTaskNames List [] 0 ~ 1000 items 달성 완료된 태스크명 목록 사용자가 달성한(달성 조건을 충족한) 미션 태스크의 이름입니다. 카운터가 목표값에 도달하거나 검증 액션이 성공한 시점에 이 목록에 추가됩니다. 보상 수령 여부는 관계없습니다. receivedMissionTaskNames List [] 0 ~ 1000 items 보상 수령 완료된 태스크명 목록 사용자가 달성 보상을 이미 수령한 미션 태스크의 이름입니다. 보상을 받으려면 태스크가 달성 완료 목록에 포함되어 있어야 합니다. EzCounter 카운터 카운터는 미션 진행 상황을 게임 플레이어별로 보관하는 엔티티입니다. 카운터의 값은 연결된 태스크의 기간별로 집계됩니다. 따라서 하나의 카운터는 여러 개의 값을 가집니다. 예를 들어, 퀘스트 클리어 횟수 카운터라면 이번 달 클리어 횟수, 이번 주 클리어 횟수, 오늘 클리어 횟수와 같은 식입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. values List [] 0 ~ 32 items 값 이 카운터의 스코프별 값 리스트입니다. 각 엔트리는 특정 스코프(리셋 타이밍 또는 검증 액션 조건)의 카운터 값과 다음 리셋 시각을 보관합니다. 하나의 카운터가 여러 스코프의 값을 동시에 보관합니다. EzCounterScopeModel 카운터 리셋 타이밍 모델 카운터의 스코프를 정의하고, 카운터 값의 리셋 방법과 타이밍을 결정합니다. 스코프는 리셋 타이밍(매일, 매주, 매월, 일정 일수마다, 또는 리셋 없음) 또는 검증 액션 조건 중 하나입니다. 각 카운터는 여러 스코프를 가질 수 있으며, 서로 다른 기간의 값을 추적할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프의 종류 카운터 스코프의 정의 방법을 결정합니다. “resetTiming” 은 정기적인 리셋 스케줄을 사용하고, “verifyAction” 은 검증 액션으로 카운터 값이 적용되는지 여부를 판정합니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 이 스코프의 카운터 값이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구 누계), 매일, 매주, 매월, 일정 일수마다 중에서 선택합니다. scopeType 이 “resetTiming” 인 경우에만 사용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋할 날짜 카운터 값이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType 이 “monthly” 인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋할 요일 카운터 값이 리셋되는 요일입니다. resetType 이 “weekly” 인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 카운터 값이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건명 이 검증 액션 조건 스코프를 식별하는 고유한 이름입니다. 카운터 내에서 대응하는 스코프 값을 조회하는 데 사용됩니다. scopeType 이 “verifyAction” 인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 condition EzVerifyAction {scopeType} == “verifyAction” ※ 조건 이 스코프의 카운터 값이 적용되는지 여부를 판정하는 검증 액션입니다. scopeType이 “verifyAction\"인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 카운터 값의 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 EzCounterModel 카운터 모델 카운터 모델은 미션 태스크의 달성 조건으로 설정할 수 있는 엔티티입니다. 카운터 값은 여러 미션 그룹에서 참조할 수 있기 때문에, 하나의 카운터를 위클리 미션과 데일리 미션 같은 여러 미션 그룹의 달성 조건으로 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scopes List [] 1 ~ 20 items 카운터의 리셋 타이밍 목록 이 카운터의 스코프(리셋 타이밍 또는 검증 액션 조건)를 정의합니다. 하나의 카운터에 여러 스코프를 설정할 수 있으며, 서로 다른 기간의 값(예: 데일리, 위클리, 누계를 동시에)을 추적할 수 있습니다. challengePeriodEventId string ~ 1024자 카운터를 조작할 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 카운터의 증감이 가능한 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 카운터는 언제든지 조작할 수 있습니다. EzMissionGroupModel 미션 그룹 모델 미션 그룹은 카운터의 리셋 타이밍으로 태스크를 그룹화하는 엔티티입니다. 예를 들어, 데일리 미션으로 하나의 그룹, 위클리 미션으로 하나의 그룹이 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tasks List [] 0 ~ 1000 items 미션 태스크 리스트 이 그룹에 속하는 미션 태스크입니다. 각 태스크는 달성 조건(카운터의 임계값 또는 검증 액션)과 달성 시 부여되는 보상을 정의합니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 미션 그룹의 달성 상황이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구), 매일, 매주, 매월, 기준 일시부터 일정 일수마다 중에서 선택합니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋하는 날짜 미션 그룹이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType이 “monthly\"인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋하는 요일 미션 그룹이 리셋되는 요일입니다. resetType이 “weekly\"인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 미션 그룹이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 completeNotificationNamespaceId string ~ 1024자 미션 태스크를 달성했을 때의 푸시 통지 이 그룹 내의 미션 태스크가 달성되었을 때 푸시 통지를 전송하는 데 사용되는 GS2-Gateway의 네임스페이스 GRN입니다. 게임 클라이언트에 실시간으로 통지할 수 있습니다. EzMissionTaskModel 미션 태스크 모델 미션 태스크는 연결된 카운터의 값이 일정 수준을 초과하면 보상을 받을 수 있는 조건을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyCompleteType 문자열 열거형 enum {   “counter”,   “verifyActions” } “counter” 달성 조건 종류 미션 태스크의 달성 판정 방법을 지정합니다. “counter\"는 관련된 카운터의 스코프 값이 목표 임곗값에 도달했는지 확인합니다. “verifyActions\"는 검증 액션을 사용하여 달성 조건을 확인합니다. 정의 설명 counter 카운터 verifyActions 검증 액션 targetCounter EzTargetCounterModel {verifyCompleteType} == “counter” ※ 목표 카운터 미션 태스크의 달성 판정에 사용되는 카운터, 스코프, 목표값을 정의합니다. 카운터의 스코프 값이 지정된 목표값에 도달하거나 초과한 경우, 태스크가 달성된 것으로 간주됩니다. ※ verifyCompleteType이(가) “counter” 이면 필수 verifyCompleteConsumeActions List {verifyCompleteType} == “verifyActions” [] 0 ~ 10 items 태스크 달성 판정에 사용하는 검증 액션 미션 태스크의 달성 판정에 사용되는 검증 액션의 목록입니다. 모든 검증 액션이 성공한 경우 태스크가 달성된 것으로 간주됩니다. verifyCompleteType이 “verifyActions\"인 경우에만 사용됩니다. ※ verifyCompleteType이(가) “verifyActions” 이면 활성화 completeAcquireActions List [] 0 ~ 100 items 미션 달성 시 보상 플레이어가 미션 달성 보상을 받을 때 실행되는 입수 액션의 목록입니다. challengePeriodEventId string ~ 1024자 보상을 받을 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 미션 태스크의 보상을 받을 수 있는 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 달성 후 언제든지 보상을 받을 수 있습니다. premiseMissionTaskName string ~ 128자 이 태스크에 도전하기 위해 달성해 두어야 하는 태스크의 이름 이 태스크의 보상을 받기 전에 달성해 두어야 하는, 같은 그룹 내의 전제 미션 태스크를 지정합니다. 단계적인 미션 체인을 만드는 데 사용합니다. EzTargetCounterModel 목표 카운터 미션의 달성 목표가 되는 카운터의 정보 타입 활성화 조건 필수 기본값 값 제한 설명 counterName string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 미션 달성 판정에 사용하는 카운터 스코프의 종류를 지정합니다. “resetTiming\"은 특정 리셋 기간의 카운터 값을 평가하고, “verifyAction\"은 이름이 지정된 조건의 값을 평가합니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” 목표 리셋 타이밍 목표값과 비교할 카운터의 리셋 타이밍 스코프를 지정합니다. 예를 들어 “daily\"를 선택하면 데일리 카운터 값을 확인합니다. 생략한 경우, 미션 그룹의 리셋 타이밍이 사용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 활성화 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 목표값과 비교할 검증 액션 조건 스코프의 이름입니다. 카운터 모델의 스코프에서 정의된 conditionName과 일치해야 합니다. scopeType이 “verifyAction\"인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long  0 ~ 9223372036854775805 목표값 미션 태스크가 달성된 것으로 간주되기 위해, 카운터의 스코프 값이 도달하거나 초과해야 하는 임곗값입니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyAction 검증 액션 작업을 실행하기 전에 조건을 검증하는 액션을 정의합니다. 미수령 보너스 구제에서 구제를 허용하기 전에 전제 조건(사용자 자격, 리소스 이용 가능 여부 등)을 확인하는 데 사용됩니다. action 필드는 검증 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzScopedValue 스코프 값 특정 스코프 내의 카운터 값을 나타냅니다. 각 스코프 값은 특정 리셋 타이밍(예: 매일, 매주, 매월) 또는 검증 액션 조건의 누적 카운트를 보유합니다. 리셋 타이밍이 도래하면 값은 0으로 리셋됩니다. 카운터 값에는 상한이 있으며, 증가하더라도 최댓값을 초과하지 않습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 이 스코프 값이 리셋 타이밍 스케줄에 기반한 것인지, 검증 액션 조건에 기반한 것인지를 나타냅니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” ※ 리셋 타이밍 이 스코프 값의 리셋 타이밍입니다. 카운터 값이 리셋될 때까지의 누적 기간을 결정합니다. scopeType이 “resetTiming\"인 경우에만 적용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 이 스코프 값이 대응하는 검증 액션 조건의 이름입니다. 이 값이 어느 조건 스코프에 속하는지 식별하는 데 사용됩니다. scopeType이 “verifyAction\"인 경우에만 적용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long 0 0 ~ 9223372036854775805 카운트 이 스코프의 누적 카운터 값입니다. 카운터가 증가하면 늘어나고 감소하면 줄어듭니다. 값은 최댓값으로 상한이 설정되며, 0 미만으로 내려가지 않습니다. EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 batchReceiveRewards 여러 개의 달성 미션 보상을 한꺼번에 수령합니다 같은 그룹 내의 여러 미션 태스크의 보상을 한 번의 호출로 수령합니다. 미션 UI의 “일괄 수령” 버튼에 대응합니다. 플레이어가 각 미션의 “수령하기\"를 하나씩 탭하는 대신, 한꺼번에 수령할 수 있습니다. 지정된 모든 태스크는 달성 완료 상태이며 아직 수령하지 않은 상태여야 합니다. 모든 태스크의 보상이 하나의 트랜잭션으로 합쳐집니다. 예를 들어 “전투에서 3회 승리”(보상: 젬 50개)와 “골드 500 수집”(보상: 가챠 티켓 1장)을 달성한 경우, 두 태스크 이름을 함께 지정하여 호출하면 젬 50개 + 가챠 티켓 1장이 한 번의 조작으로 지급됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. missionTaskNames List  1 ~ 100 items 태스크 이름 리스트 gameSession GameSession  GameSession config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 미션 달성 보상을 수령하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); var result = await domain . BatchReceiveRewardsAsync ( missionTaskNames : new List string \u003e { \"mission-task-0001\" , \"mission-task-0002\" , }, config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); var future = domain . BatchReceiveRewardsFuture ( missionTaskNames : new List string \u003e { \"mission-task-0001\" , \"mission-task-0002\" , }, config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e BatchReceiveRewards ( [] { auto v = TOptional TArray FString \u003e\u003e (); v -\u003e Add ( \"mission-task-0001\" ); v -\u003e Add ( \"mission-task-0002\" ); return v ; }() // missionTaskNames // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) var async_result = await domain . batch_receive_rewards ( [ \"mission-task-0001\" , \"mission-task-0002\" , ], # mission_task_names null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result evaluateComplete 미션 달성 상태를 재평가합니다 지정된 그룹 내의 모든 카운터 값을 미션 태스크 조건과 대조하여 달성 상태를 갱신합니다. 일반적으로 미션 달성 판정은 카운터가 가산될 때마다 자동으로 이루어집니다. 그러나 카운터가 이미 가산된 후에 기존 그룹에 새로운 미션 태스크를 추가한 경우, 새로운 태스크는 자동으로 평가되지 않습니다. 이러한 상황에서 이 API를 호출하면, 플레이어의 기존 카운터 값이 새로운 태스크의 조건을 이미 충족하고 있는지를 소급하여 확인할 수 있습니다. 예: 데일리 미션에 “전투에서 1회 승리\"를 새로 추가한 경우. 오늘 이미 전투에서 승리한 플레이어는 조건을 충족하는 카운터 값을 가지고 있지만, 시스템은 아직 이를 인식하지 못한 상태입니다. EvaluateComplete 를 호출하면 확인이 이루어져 달성 완료로 표시됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. gameSession GameSession  GameSession Result 타입 설명 item EzComplete 재평가 후의 달성 상황 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); var result = await domain . EvaluateCompleteAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); var future = domain . EvaluateCompleteFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e EvaluateComplete ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) var async_result = await domain . evaluate_complete ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getComplete 특정 미션 그룹에 대한 플레이어의 달성 상태를 취득합니다 지정된 미션 그룹 내에서 플레이어가 어떤 미션 태스크를 달성했고 어떤 보상을 수령했는지를 취득합니다. 특정 그룹의 미션 목록 화면을 표시할 때 사용합니다. 예를 들어 각 데일리 미션과 그 상태를 다음과 같이 표시할 수 있습니다: “전투에서 3회 승리” — 달성, 보상 수령 완료(체크 표시) “골드 500 수집” — 달성, 보상 수령 가능!(수령 버튼) “아이템 10회 사용” — 진행 중: 7/10(진행률 바) ListMissionTaskModels 나 GetMissionGroupModel 과 조합하면 태스크 정의(목표, 임계값, 보상)를 얻을 수 있고, GetCounter 와 조합하면 진행률 바 표시용 현재 카운터 값을 얻을 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. gameSession GameSession  GameSession Result 타입 설명 item EzComplete 달성 상황 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Mission :: Model :: FComplete \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listCompletes 전체 그룹에 대한 플레이어의 미션 달성 상황 조회 모든 미션 그룹의 달성 상황과 보상 수령 상황을 조회합니다. 각 항목에는 플레이어가 어떤 미션 태스크를 달성했는지(카운터의 임계값을 충족했는지)와 어떤 보상을 수령했는지가 포함됩니다. 미션 개요 화면을 만들 때 사용합니다. 예를 들어, 미수령 보상이 있는 그룹에 배지나 알림 점을 표시할 수 있습니다: 「데일리 미션(보상 2건 수령 가능!)」「위클리 미션(완료)」「업적(신규 1건!)」 미션 태스크에는 두 가지 상태가 있습니다: 달성(Completed): 카운터가 임계값을 충족한 상태(예: 「배틀에서 5회 승리」에서 5회 이상 승리한 경우) 수령(Received): 달성한 태스크의 보상을 플레이어가 수령한 상태 「달성 완료이지만 미수령」 상태의 태스크는 플레이어가 보상을 획득했지만 아직 수령하지 않았음을 의미합니다. UI에서는 이 상태를 강조 표시해야 합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 달성 상황 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . CompletesAsync ( ). ToListAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Completes ( ); List EzComplete \u003e items = new List EzComplete \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Completes ( ); TArray Gs2 :: UE5 :: Mission :: Model :: FEzCompletePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCompletes ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCompletes ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCompletes ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCompletes ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeCompletes ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeCompletes ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. receiveRewards 달성한 미션의 보상을 수령합니다 플레이어가 달성한 미션 태스크의 보상을 수령합니다. 태스크는 달성 완료(카운터가 임계값을 충족한 상태) 상태이며 아직 수령하지 않은 상태여야 합니다. 호출하면 설정된 보상이 플레이어에게 지급됩니다. 예를 들어 젬 100개, 가챠 티켓, 골드 500과 같은 보상입니다. 미션 UI의 “수령하기” “받기” 버튼에 대응합니다. 일반적인 흐름은 다음과 같습니다: 플레이어가 달성 완료되어 수령 가능한 보상이 있는 미션을 확인합니다 플레이어가 “수령하기” 버튼을 탭합니다 게임이 ReceiveRewards 를 호출합니다 보상이 지급되고 태스크가 “수령 완료\"로 표시됩니다 태스크가 아직 달성되지 않았거나 보상을 이미 수령한 경우에는 오류가 반환됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. missionTaskName string  ~ 128자 태스크 이름 태스크 고유의 이름입니다. 영숫자와 -(하이픈), _(언더스코어), .(마침표)를 사용하여 지정합니다. gameSession GameSession  GameSession config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 미션 달성 보상을 수령하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); var result = await domain . ReceiveRewardsAsync ( missionTaskName : \"mission-task-0001\" , config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Complete ( missionGroupName : \"mission-group-0001\" ); var future = domain . ReceiveRewardsFuture ( missionTaskName : \"mission-task-0001\" , config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Complete ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e ReceiveRewards ( \"mission-task-0001\" // missionTaskName // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . complete ( \"mission-group-0001\" ) var async_result = await domain . receive_rewards ( \"mission-task-0001\" , # mission_task_name null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result decreaseCounter 카운터를 감소시키기 지정한 카운터의 값을 감소시킵니다. 감소시킬 값을 지정합니다. 현재 시점에서 유효한 스코프만 감소 대상이 됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. value long  1 ~ 9223372036854775805 감산할 값 Result 타입 설명 item EzCounter 감산된 카운터 changedCompletes List 갱신된 달성 상황 리스트 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 ConflictException ConflictException 카운터 상승 처리가 충돌했습니다. 재시도가 필요합니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"counter-0001\" ); var result = await domain . DecreaseCounterAsync ( value : 1L ); var item = await result . ModelAsync (); var changedCompletes = result . ChangedCompletes ; } catch ( Gs2 . Gs2Mission . Exception . ConflictException e ) { // The counter ascent process has conflicted. Retry required. } var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"counter-0001\" ); var future = domain . DecreaseCounterFuture ( value : 1L ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Mission . Exception . ConflictException ) { // The counter ascent process has conflicted. Retry required. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var changedCompletes = future . Result . ChangedCompletes ; const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Counter ( \"counter-0001\" // counterName ); const auto Future = Domain -\u003e DecreaseCounter ( 1L // value ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Mission :: Error :: FConflictError :: Class )) { // The counter ascent process has conflicted. Retry required. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto ChangedCompletes = Result -\u003e ChangedCompletes ; var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"counter-0001\" ) var async_result = await domain . decrease_counter ( 1 # value ) if async_result . error != null : if async_result . error is Gs2MissionConflictException : # 카운터 상승 처리가 충돌했습니다. 재시도가 필요합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result deleteCounter 카운터를 완전히 삭제 플레이어의 지정된 카운터와 그 모든 스코프 값을 삭제합니다. ResetCounter(특정 스코프만 리셋)와 달리, 플레이어가 한 번도 진행 상황을 가진 적이 없었던 것처럼 카운터 전체를 삭제합니다. 특정 카운터에 대한 플레이어의 진행 상황을 완전히 초기화하고 싶을 때 사용합니다. 예를 들어, 미션의 완전 리셋 기능을 구현하는 경우 등입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. Result 타입 설명 item EzCounter 삭제한 카운터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"counter-0001\" ); var result = await domain . DeleteCounterAsync ( ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"counter-0001\" ); var future = domain . DeleteCounterFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Counter ( \"counter-0001\" // counterName ); const auto Future = Domain -\u003e DeleteCounter ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"counter-0001\" ) var async_result = await domain . delete_counter ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getCounter 특정 카운터에 대한 플레이어의 값 조회 플레이어의 특정 카운터의 현재 값을 모든 스코프 값을 포함하여 조회합니다. 예를 들어 「battle_wins」 카운터의 경우, 일간=3, 주간=12, 누계=87 과 같은 값이 반환됩니다. 특정 목표에 대한 미션 진행 상황을 표시할 때 사용합니다. 예를 들어 데일리 미션 옆에 진행률 바 「오늘의 배틀 승리 수 3/5」와 같이 표시할 수 있습니다. 각 스코프 값은 서로 다른 기간에 걸쳐 추적된 카운터를 나타내며, 단기적인 진행 상황과 장기적인 진행 상황을 모두 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. Result 타입 설명 item EzCounter 카운터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"quest_complete\" ); var item = await domain . ModelAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"quest_complete\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Counter ( \"quest_complete\" // counterName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"quest_complete\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"quest_complete\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"quest_complete\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Counter ( \"quest_complete\" // counterName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Mission :: Model :: FCounter \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"quest_complete\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listCounters 플레이어의 현재 카운터 값 조회 플레이어의 모든 카운터 값을 조회합니다. 각 카운터는 특정 플레이어 액션(배틀 승리 횟수, 아이템 수집 수, 골드 획득량 등)을 추적하며, 각 스코프(일간·주간·월간·누계)별 값을 가집니다. 플레이어의 미션 진행 상황 개요를 표시할 때 사용합니다. 예를 들어 「오늘의 배틀 승리 수: 3」이나 「퀘스트 누적 클리어 수: 42」와 같이 상태나 미션 화면에서 표시할 수 있습니다. 카운터 값은 플레이어가 게임 내에서 액션을 수행했을 때(다른 서비스의 보상 액션을 통해) 자동으로 가산되며, 미션 태스크의 임계값과 자동으로 대조됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 카운터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . CountersAsync ( ). ToListAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Counters ( ); List EzCounter \u003e items = new List EzCounter \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Counters ( ); TArray Gs2 :: UE5 :: Mission :: Model :: FEzCounterPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCounters ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCounters ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCounters ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCounters ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeCounters ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeCounters ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. resetCounter 카운터의 특정 스코프 리셋 지정된 스코프의 카운터 값만 리셋합니다. 예를 들어, 주간이나 누계 값에 영향을 주지 않고 일간 스코프만 리셋할 수 있습니다. 특정 기간의 진행 상황을 수동으로 리셋하고 싶을 때 사용합니다. 예를 들어, 플레이어가 특수 아이템을 사용해 데일리 미션을 재도전할 때 「데일리 챌린지」 카운터를 리셋하는 경우입니다. 지정된 스코프 타입과 일치하는 스코프별 값만 리셋되며, 그 외의 스코프별 값은 변경되지 않습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. scopes List  1 ~ 20 items 스코프 리스트 Result 타입 설명 item EzCounter 삭제한 카운터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"counter-0001\" ); var result = await domain . ResetCounterAsync ( scopes : new List Gs2 . Unity . Gs2Mission . Model . EzScopedValue \u003e { new Gs2 . Unity . Gs2Mission . Model . EzScopedValue () { ResetType = \"daily\" , }, new Gs2 . Unity . Gs2Mission . Model . EzScopedValue () { ResetType = \"weekly\" , }, } ); var item = await result . ModelAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Counter ( counterName : \"counter-0001\" ); var future = domain . ResetCounterFuture ( scopes : new List Gs2 . Unity . Gs2Mission . Model . EzScopedValue \u003e { new Gs2 . Unity . Gs2Mission . Model . EzScopedValue () { ResetType = \"daily\" , }, new Gs2 . Unity . Gs2Mission . Model . EzScopedValue () { ResetType = \"weekly\" , }, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Counter ( \"counter-0001\" // counterName ); const auto Future = Domain -\u003e ResetCounter ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Mission :: Model :: FEzScopedValue \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Mission :: Model :: FEzScopedValue \u003e () -\u003e WithResetType ( TOptional FString \u003e ( \"daily\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Mission :: Model :: FEzScopedValue \u003e () -\u003e WithResetType ( TOptional FString \u003e ( \"weekly\" )) ); return v ; }() // scopes ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . counter ( \"counter-0001\" ) var async_result = await domain . reset_counter ( [ Gs2MissionEzScopedValue . new () . with_reset_type ( \"daily\" ), Gs2MissionEzScopedValue . new () . with_reset_type ( \"weekly\" ), ] # scopes ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getCounterModel 특정 카운터 정의의 상세 정보를 취득합니다 카운터 이름을 지정하여 스코프와 리셋 조건을 포함한 상세 정보를 취득합니다. 카운터가 무엇을 추적하고 그 값이 어떻게 관리되는지를 파악할 때 사용합니다. 예를 들어 미션의 진행에 어떤 액션이 기여하는지를 플레이어에게 표시하는 경우 등입니다. 응답에는 이 카운터에 정의된 스코프 목록이 포함되며, 각 스코프에는 리셋 타입(일별·주별·월별·없음)과 리셋 타이밍이 설정되어 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzCounterModel 카운터 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). CounterModel ( counterName : \"counter-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). CounterModel ( counterName : \"counter-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CounterModel ( \"counter-0001\" // counterName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . counter_model ( \"counter-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). CounterModel ( counterName : \"counter-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). CounterModel ( counterName : \"counter-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CounterModel ( \"counter-0001\" // counterName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Mission :: Model :: FCounterModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . counter_model ( \"counter-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listCounterModels 카운터 정의 목록을 취득합니다 네임스페이스에 정의된 모든 카운터 모델을 취득합니다. 카운터는 플레이어의 행동을 추적하고 미션 달성 판정에 사용되는 값입니다. 예를 들어 “battle_wins” 카운터는 전투 승리 횟수를 추적하고, “gold_collected” 카운터는 획득한 골드의 합계를 추적합니다. 각 카운터 모델에서는 하나 이상의 “스코프\"를 정의합니다. 스코프는 카운터 값이 어떤 기간 단위로 추적되는지를 결정합니다: 하나의 카운터로 일별·주별·월별·누계 값을 동시에 추적할 수 있습니다 예를 들어 “battle_wins” 카운터는 오늘의 승리 수(일별 스코프), 이번 주의 승리 수(주별 스코프), 누계 승리 수(누계 스코프)를 가질 수 있습니다 서로 다른 미션 태스크가 같은 카운터의 서로 다른 스코프를 참조할 수 있습니다(예: “오늘 전투에서 3회 승리\"는 일별 스코프를, “누계 100회 승리\"는 누계 스코프를 사용) 카운터 값은 일반적으로 다른 GS2 서비스의 보상 액션으로서 자동으로 가산됩니다(예: 퀘스트 클리어 시나 아이템 구매 시)만, 게임 서버에서 수동으로 가산할 수도 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 카운터 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . CounterModelsAsync ( ). ToListAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . CounterModels ( ); List EzCounterModel \u003e items = new List EzCounterModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e CounterModels ( ); TArray Gs2 :: UE5 :: Mission :: Model :: FEzCounterModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCounterModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCounterModels ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCounterModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCounterModels ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeCounterModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeCounterModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getMissionGroupModel 특정 미션 그룹의 상세 정보를 취득합니다 미션 그룹 이름을 지정하여 리셋 타입, 리셋 타이밍 설정, 그리고 포함된 미션 태스크 목록을 포함한 상세 정보를 취득합니다. 특정 그룹 내의 미션 목록을 표시할 때 사용합니다. 예를 들어 플레이어가 “데일리 미션” 탭을 탭했을 때, 이 API를 호출하여 모든 데일리 미션 태스크와 그 상세 정보를 취득합니다. 응답에는 그룹에 정의된 미션 태스크가 포함되며, 각 태스크에는 대상 카운터 조건과 보상 설정이 있습니다. GetComplete 와 조합하면 각 태스크에 대한 플레이어의 진행 상황과 달성 상태를 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzMissionGroupModel 미션 그룹 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MissionGroupModel ( \"mission-group-0001\" // missionGroupName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . mission_group_model ( \"mission-group-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MissionGroupModel ( \"mission-group-0001\" // missionGroupName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Mission :: Model :: FMissionGroupModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . mission_group_model ( \"mission-group-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listMissionGroupModels 미션 그룹 목록을 취득합니다 네임스페이스에 정의된 모든 미션 그룹을 취득합니다. 미션 그룹은 개별 미션을 하나로 묶는 카테고리입니다. 예를 들어 “데일리 미션”, “위클리 미션”, “스토리 미션”, “업적 미션\"과 같은 것입니다. 각 그룹에는 리셋 타입이 있으며, 그룹 내 미션이 언제 리셋되는지를 결정합니다: notReset: 리셋하지 않음(“스테이지 10 클리어”, “캐릭터 100체 수집\"과 같은 영구적인 업적) daily: 매일 리셋(예: “오늘 전투에서 3회 승리”) weekly: 매주 리셋(예: “이번 주 5일 로그인”) monthly: 매월 리셋(예: “이번 달 골드 10,000 소비”) 미션의 메인 목록 화면을 만들 때 사용합니다. 예를 들어 “데일리”, “위클리”, “업적” 탭을 표시하는 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 미션 그룹 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . MissionGroupModelsAsync ( ). ToListAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . MissionGroupModels ( ); List EzMissionGroupModel \u003e items = new List EzMissionGroupModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e MissionGroupModels ( ); TArray Gs2 :: UE5 :: Mission :: Model :: FEzMissionGroupModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMissionGroupModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMissionGroupModels ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMissionGroupModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMissionGroupModels ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeMissionGroupModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeMissionGroupModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getMissionTaskModel 특정 미션 태스크의 상세 정보를 취득합니다 지정된 미션 그룹 내의 특정 미션 태스크를 이름을 지정하여 취득합니다. 특정 미션의 상세 화면을 표시할 때 사용합니다. 목표, 현재 진행 상황, 보상, 달성 여부를 표시할 수 있습니다. 응답에는 다음이 포함됩니다: 대상 카운터 이름과 임계값(플레이어가 달성해야 하는 목표) 보상 액션(수령 시 플레이어가 획득하는 것) 전제 태스크(먼저 달성이 필요한 태스크)가 있는 경우 그 정보 달성 판정의 검증 타입 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionTaskName string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzMissionTaskModel 미션 태스크 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ). MissionTaskModel ( missionTaskName : \"mission-task-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ). MissionTaskModel ( missionTaskName : \"mission-task-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MissionGroupModel ( \"mission-group-0001\" // missionGroupName ) -\u003e MissionTaskModel ( \"mission-task-0001\" // missionTaskName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . mission_group_model ( \"mission-group-0001\" ) . mission_task_model ( \"mission-task-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ). MissionTaskModel ( missionTaskName : \"mission-task-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ). MissionTaskModel ( missionTaskName : \"mission-task-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MissionGroupModel ( \"mission-group-0001\" // missionGroupName ) -\u003e MissionTaskModel ( \"mission-task-0001\" // missionTaskName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Mission :: Model :: FMissionTaskModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . mission . namespace_ ( \"namespace-0001\" ) . mission_group_model ( \"mission-group-0001\" ) . mission_task_model ( \"mission-task-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listMissionTaskModels 그룹 내 미션 태스크 목록을 취득합니다 지정된 미션 그룹 내의 모든 개별 미션 태스크를 취득합니다. 각 미션 태스크는 하나의 미션 목표를 나타냅니다. 예를 들어 “전투에서 5회 승리”, “골드 1,000 수집”, “스테이지 3 클리어\"와 같은 것입니다. 각 태스크에서는 다음이 정의됩니다: 대상 카운터와 임계값(예: 카운터 “battle_wins” 가 5 이상) 플레이어가 달성 보상을 수령했을 때 지급되는 보상(예: 젬 100개) 전제 태스크(선택 사항)(예: “전투에서 10회 승리\"는 “전투에서 5회 승리” 달성 후에만 표시됨) 미션 시스템은 다음과 같이 자동으로 동작합니다: 플레이어가 게임 내에서 어떤 행동을 하면(전투 승리, 골드 수집 등) 대응하는 카운터가 가산됩니다 시스템이 카운터 값이 태스크의 임계값을 충족하는지 확인합니다 충족하면 태스크가 “달성\"으로 표시됩니다 플레이어는 ReceiveRewards 를 사용하여 보상을 수령할 수 있습니다 그룹 내 각 태스크의 목표와 보상을 포함한 미션 목록을 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 미션 태스크 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ); var items = await domain . MissionTaskModelsAsync ( ). ToListAsync (); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ); var it = domain . MissionTaskModels ( ); List EzMissionTaskModel \u003e items = new List EzMissionTaskModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MissionGroupModel ( \"mission-group-0001\" // missionGroupName ); const auto It = Domain -\u003e MissionTaskModels ( ); TArray Gs2 :: UE5 :: Mission :: Model :: FEzMissionTaskModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMissionTaskModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMissionTaskModels ( callbackId ); var domain = gs2 . Mission . Namespace ( namespaceName : \"namespace-0001\" ). MissionGroupModel ( missionGroupName : \"mission-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeMissionTaskModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeMissionTaskModels ( callbackId ); const auto Domain = Gs2 -\u003e Mission -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e MissionGroupModel ( \"mission-group-0001\" // missionGroupName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeMissionTaskModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeMissionTaskModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. 이벤트 핸들러 OnCompleteNotification 미션 태스크를 달성했을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. groupName string 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. userId string 사용자ID taskName string 미션 태스크 이름 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Mission . OnCompleteNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var groupName = notification . GroupName ; var userId = notification . UserId ; var taskName = notification . TaskName ; }; gs2 . Mission . OnCompleteNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var groupName = notification . GroupName ; var userId = notification . UserId ; var taskName = notification . TaskName ; }; Gs2 -\u003e Mission -\u003e OnCompleteNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto GroupName = Notification -\u003e GroupNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto TaskName = Notification -\u003e TaskNameValue ; }); ez . mission . complete_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var group_name = notification . group_name var user_id = notification . user_id var task_name = notification . task_name )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Mission SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Mission SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/mission/game_engine/"},{"content":"모델 EzWallet 지갑 지갑 내 통화는 유료로 구매한 통화와 무료로 얻은 통화로 크게 나누어 관리됩니다. 유료로 구매한 통화는 다시 구매 시점의 단가별로 관리되어, 서비스가 종료되었을 때의 환불이나 자금결제법에 해당하는 잔액이 존재하는지를 집계할 수 있습니다. 지갑에는 슬롯이 있으며, 슬롯마다 서로 다른 잔액을 관리할 수 있습니다. 플랫폼 간에 잔액을 공유할 수 없는 경우에는 플랫폼마다 다른 슬롯을 사용함으로써 나누어 관리할 수 있습니다. 이때 무료로 얻은 통화는 모든 플랫폼에서 공통된 값을 사용할 수도 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. paid int 0 0 ~ 2147483646 유료 통화 보유량 이 지갑 슬롯 내 유료(구매한) 통화의 합계량입니다. 단가가 0이 아닌 모든 WalletDetail 항목의 합계입니다. 스토어 구매를 통한 충전으로 증가하고, 소비 우선순위에 따라 소비되어 감소합니다. free int 0 0 ~ 2147483646 무료 통화 보유량 이 지갑 슬롯 내 무료(지급된) 통화의 합계량입니다. 단가가 0인 WalletDetail 항목에 해당합니다. 네임스페이스에서 shareFree가 활성화된 경우, 이 값은 슬롯 0에서 모든 지갑 슬롯으로 동기화됩니다. shareFree bool false 무상 통화 공유 이 지갑의 무상 통화가 모든 슬롯 간에 공유되는지 여부입니다. 이 값은 지갑 생성 시 네임스페이스 설정에서 상속됩니다. true인 경우, 무상 통화가 슬롯 0에서 다른 모든 지갑 슬롯으로 동기화됩니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 메서드 get 플레이어의 유료 통화 지갑 잔액을 취득한다 지정한 슬롯의 플레이어 지갑을 취득하여 유료 통화와 무료 통화 각각의 현재 잔액을 확인할 수 있습니다. “유료” 통화는 플레이어가 실제 돈으로 구매한 것(예: 100 젬을 ¥120에 구매)이고, “무료” 통화는 게임 플레이를 통해 획득한 것(예: 이벤트 보상, 로그인 보너스)입니다. 일부 기능에서는 유료 통화만을 요구하는 경우가 있기 때문에(예: 특정 가챠나 특별 오퍼) 별도로 관리됩니다. 플레이어의 통화 잔액을 표시하는 데 사용합니다. 예를 들어 상점 화면이나 헤더 UI에서 “젬: 350(유료: 100, 무료: 250)“과 같이 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. Result 타입 설명 item EzWallet 지갑 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Money . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); var item = await domain . ModelAsync (); var domain = gs2 . Money . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Money -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Wallet ( 0 // slot ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . money . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Money . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Money . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Money -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Wallet ( 0 // slot ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Money :: Model :: FWallet \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . money . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. withdraw 플레이어의 지갑에서 유료 통화 소비하기 플레이어의 지갑에서 지정된 수량의 유료 통화를 차감합니다. 기본값(paidOnly = false)에서는 무료 통화가 먼저 소비되고, 부족한 만큼 유료 통화가 소비됩니다. 이를 통해 플레이어는 구매한 통화를 사용하기 전에 무료 통화를 모두 소진할 수 있습니다. paidOnly를 true로 설정하면 유료 통화만 소비됩니다. 법률상 유료 통화만 사용해야 하는 기능(예: 일부 지역의 유료 전용 가챠)에 필요합니다. 플레이어가 유료 통화로 구매할 때 사용합니다. 예를 들어 특별한 아이템을 구매하거나 가챠를 뽑기 위해 젬 100개를 소비하는 경우입니다. 참고: GS2-Showcase를 통한 상품 구매의 대가로 통화를 소비하는 경우에는 자동으로 처리되므로, 이 API를 호출할 필요가 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. count int  1 ~ 2147483646 소비할 유료 통화 수량 paidOnly bool false 유료 통화만을 대상으로 할지 여부 Result 타입 설명 item EzWallet 소비 후 지갑 price float 소비한 통화의 가격 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 ConflictException ConflictException 지갑 조작 처리가 충돌했습니다. 재시도가 필요합니다 InsufficientException BadRequestException 지갑의 잔액이 부족합니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Money . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); var result = await domain . WithdrawAsync ( count : 50 , paidOnly : null ); var item = await result . ModelAsync (); var price = result . Price ; } catch ( Gs2 . Gs2Money . Exception . ConflictException e ) { // The wallet operation process conflicted. Retry required. } catch ( Gs2 . Gs2Money . Exception . InsufficientException e ) { // Wallet balance is insufficient. } var domain = gs2 . Money . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); var future = domain . WithdrawFuture ( count : 50 , paidOnly : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Money . Exception . ConflictException ) { // The wallet operation process conflicted. Retry required. } if ( future . Error is Gs2 . Gs2Money . Exception . InsufficientException ) { // Wallet balance is insufficient. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var price = future . Result . Price ; const auto Domain = Gs2 -\u003e Money -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Wallet ( 0 // slot ); const auto Future = Domain -\u003e Withdraw ( 50 // count // paidOnly ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Money :: Error :: FConflictError :: Class )) { // The wallet operation process conflicted. Retry required. } if ( e -\u003e IsChildOf ( Gs2 :: Money :: Error :: FInsufficientError :: Class )) { // Wallet balance is insufficient. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto Price = Result -\u003e Price ; var domain = ez . money . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) var async_result = await domain . withdraw ( 50 , # count null # paid_only ) if async_result . error != null : if async_result . error is Gs2MoneyConflictException : # 지갑 조작 처리가 충돌했습니다. 재시도가 필요합니다 pass if async_result . error is Gs2MoneyInsufficientException : # 지갑의 잔액이 부족합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Money SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Money SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/money/game_engine/"},{"content":"모델 EzWallet 지갑 지갑 내 통화는 유료로 구매한 통화와 무료로 얻은 통화로 크게 나누어 관리됩니다. 유료로 구매한 통화는 다시 구매 시점의 단가별로 관리되어, 서비스가 종료되었을 때의 환불이나 자금결제법에 해당하는 잔액이 존재하는지를 집계할 수 있습니다. 지갑에는 슬롯이 있으며, 슬롯마다 서로 다른 잔액을 관리할 수 있습니다. 플랫폼 간에 잔액을 공유할 수 없는 경우에는 플랫폼마다 다른 슬롯을 사용함으로써 나누어 관리할 수 있습니다. 이때 무료로 얻은 통화는 모든 플랫폼에서 공통된 값을 사용할 수도 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). summary EzWalletSummary  지갑 상태 지갑의 현재 잔액 요약으로, 유료 통화, 무료 통화, 합계 금액으로 나누어 표시됩니다. 입금 트랜잭션으로부터 산출됩니다. sharedFreeCurrency bool  무료 통화 공유 여부 이 지갑의 무료 통화가 모든 슬롯 간에 공유되는지 여부를 나타냅니다. 지갑 생성 시 네임스페이스 설정으로부터 상속됩니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzSubscribeTransaction 구독 구매 정보 스토어 플랫폼으로부터의 구독 구매 레코드를 나타냅니다. 유효, 트라이얼, 초회 할인, 유예 기간, 해지, 기한 만료, 취소 등 라이프사이클을 통한 상세한 구독 상태를 추적합니다. 각 트랜잭션은 특정 스토어 플랫폼과 사용자에 연결됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 store 문자열 열거형 enum {   “AppleAppStore”,   “GooglePlay”,   “fake” }  스토어 구매가 이루어진 스토어 플랫폼입니다. 영수증 검증에 사용되는 검증 방법을 결정합니다. 정의 설명 AppleAppStore Apple App Store GooglePlay Google Play fake Fake transactionId string  ~ 1024자 트랜잭션 ID 스토어 플랫폼에 의해 할당된 고유한 트랜잭션 식별자입니다. 동일 구매의 중복 처리를 방지하는 데 사용됩니다. statusDetail 문자열 열거형 enum {   “active@active”,   “active@converted_from_trial”,   “active@in_trial”,   “active@in_intro_offer”,   “grace@canceled”,   “grace@grace_period”,   “grace@on_hold”,   “inactive@expired”,   “inactive@revoked” }  상태 상세한 구독 상태입니다. 간략 카테고리(active/grace/inactive) 뒤에 구체적인 상태가 이어집니다. active 상태는 구독을 사용할 수 있음을, grace 상태는 결제에 문제가 있지만 일시적으로 이용 가능함을, inactive 상태는 구독이 더 이상 유효하지 않음을 나타냅니다. 정의 설명 active@active 유효 active@converted_from_trial 무료 체험판이 종료되고 유료 플랜으로 전환됨 active@in_trial 무료 체험판 이용 중 active@in_intro_offer 최초 할인 기간 중 grace@canceled 사용자가 수동으로 해지함 grace@grace_period 결제가 실패했지만 유예 기간 이내 grace@on_hold 결제가 실패했으며, 일정 기간 내에 결제가 완료되지 않으면 이용이 제한됨 inactive@expired 구독이 만료됨 inactive@revoked 환불 등으로 강제로 취소됨 expiresAt long  유효기간 이 구독 트랜잭션이 만료되는 일시입니다. 스토어 플랫폼에 의해 구독이 갱신되면 함께 업데이트됩니다. EzSubscriptionStatus 구독 계약 상태 특정 구독 콘텐츠에 대한 사용자의 구독 계약 상태를 추적합니다. 상세한 구독 트랜잭션 상태로부터 도출된 간이 유효/무효 상태와 유효기간, 관련 구독 트랜잭션 목록을 제공합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 userId string ~ 128자 사용자ID status 문자열 열거형 enum {   “active”,   “inactive” }  상태 간이 구독 상태입니다. “active\"는 유효, 트라이얼, 초회 할인, 유예 기간 상태를 포함합니다. “inactive\"는 기한 만료와 취소 상태를 포함합니다. 정의 설명 active 유효 inactive 비활성 expiresAt long  유효기간 구독이 만료되는 일시입니다. 구독이 갱신되거나 상태가 변경될 때 업데이트됩니다. detail List [] 0 ~ 100 items 계약 상태 상세 정보 이 구독과 관련된 구독 트랜잭션 목록입니다. 각 트랜잭션은 스토어 플랫폼의 구매 레코드로, 상세한 상태 정보(유효, 트라이얼, 유예 기간, 기한 만료, 취소 등)를 가집니다. EzStoreContentModel 스토어 콘텐츠 모델 다양한 스토어 플랫폼의 콘텐츠를 저장하는 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스토어 콘텐츠 모델 이름 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. appleAppStore EzAppleAppStoreContent Apple App Store의 콘텐츠 이 스토어 콘텐츠의 Apple App Store 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. googlePlay EzGooglePlayContent Google Play의 콘텐츠 이 스토어 콘텐츠의 Google Play 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. EzWalletSummary 지갑 상태 지갑의 통화 잔액을 요약해서 보여주며, 유상 금액과 무상 금액을 구분합니다. 지갑 내 모든 입금 트랜잭션을 가격을 기준으로 집계하여 산출됩니다(가격 \u003e 0은 유상, 가격 = 0은 무상). 타입 활성화 조건 필수 기본값 값 제한 설명 paid int 0 0 ~ 2147483646 유상 통화 실제 돈으로 구매된 통화의 합계량입니다(가격 \u003e 0인 입금 트랜잭션). free int 0 0 ~ 2147483646 무상 통화 무상으로 획득한 통화의 합계량입니다(가격 = 0인 입금 트랜잭션). 로그인 보너스나 이벤트 보상 등이 포함됩니다. total int 0 0 ~ 2147483646 총수 통화 잔액의 합계(유상 + 무상)입니다. 지갑에서 이용 가능한 전체 수량을 나타냅니다. EzDepositTransaction 입금 트랜잭션 지갑 내 단일 입금 레코드를 나타냅니다. 유상 입금(가격 \u003e 0)은 정확한 환불 계산과 자금결제법 준수를 위해 단가별로 추적됩니다. 무상 입금(가격 = 0)은 별도로 추적됩니다. 출금 시에는 네임스페이스의 재화 소비 우선순위에 기반하여 입금 트랜잭션이 소비됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 price double  0.0 ~ 100000000.0 구매 가격 이 입금에 대해 현지 통화로 지급된 실제 금액입니다. 0은 무료 통화를 나타냅니다. 환불 목적의 단가 계산에 사용됩니다. currency string {price} \u003e 0 ※ ~ 8자 통화 코드 실제 결제의 ISO 통화 코드(예: “JPY”, “USD”)입니다. 유료 입금(가격 \u003e 0)의 경우에만 적용됩니다. ※ price이(가) 0 보다 크면 필수 count int  0 ~ 2147483646 과금 통화 수량 이 입금에서의 가상 통화 단위 수입니다. 지갑에서 출금되면 감소합니다. EzAppleAppStoreContent Apple App Store의 콘텐츠 인앱 결제 상품에 대응하는 Apple App Store의 프로덕트 ID를 포함합니다. 영수증 검증 시 대조에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 이 인앱 결제 아이템에 대해 App Store Connect에 등록된 Apple App Store의 프로덕트 식별자입니다. EzGooglePlayContent Google Play의 콘텐츠 인앱 결제 상품에 대응하는 Google Play의 프로덕트 ID를 포함합니다. 영수증 검증 시 대조에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 이 인앱 결제 아이템에 대해 Google Play Console에 등록되어 있는 Google Play의 프로덕트 식별자입니다. EzAppleAppStoreSubscriptionContent Apple App Store의 기간 결제 콘텐츠 구독 기반 상품의 Apple App Store 구독 그룹 식별자를 포함합니다. 자동 갱신 구독의 관리와 검증에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 subscriptionGroupIdentifier string ~ 64자 구독 그룹 ID App Store Connect에 등록된 구독 그룹 식별자입니다. 동일 그룹 내의 구독은 상호 배타적이며, 사용자는 동시에 하나만 계약할 수 있습니다. EzGooglePlaySubscriptionContent Google Play 구독 콘텐츠 구독 기반 상품의 Google Play 프로덕트 ID를 포함합니다. Google Play에서 자동 갱신 구독을 관리하고 검증하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 메서드 get 플레이어의 유료 통화 지갑 잔액을 취득한다 지정한 슬롯의 플레이어 지갑을 취득하여 유료 통화와 무료 통화 각각의 현재 잔액을 확인할 수 있습니다. “유료” 통화는 플레이어가 실제 돈으로 구매한 것(예: 100 젬을 ¥120에 구매)이고, “무료” 통화는 게임 플레이를 통해 획득한 것(예: 이벤트 보상, 로그인 보너스)입니다. 일부 기능에서는 유료 통화만을 요구하는 경우가 있기 때문에(예: 특정 가챠나 특별 오퍼) 별도로 관리됩니다. 플레이어의 통화 잔액을 표시하는 데 사용합니다. 예를 들어 상점 화면이나 헤더 UI에서 “젬: 350(유료: 100, 무료: 250)“과 같이 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). Result 타입 설명 item EzWallet 지갑 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); var item = await domain . ModelAsync (); var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Wallet ( 0 // slot ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Wallet ( 0 // slot ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Money2 :: Model :: FWallet \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. list 플레이어의 과금 통화 지갑 목록 조회 플레이어가 현재 보유한 모든 지갑을 조회합니다. 각 지갑은 독립적인 잔액을 가지며, 유상 통화와 무상 통화가 별도로 관리됩니다. “유상” 통화는 플레이어가 실제 화폐로 구매한 것(예: 100젬을 120엔에 구매)이며, “무상” 통화는 게임 플레이를 통해 획득한 것(예: 이벤트 보상, 로그인 보너스)입니다. 플레이어의 통화 전체 현황을 표시할 때 사용합니다. 예를 들어, 통화 관리 화면에서 모든 지갑 슬롯과 잔액을 목록으로 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 지갑 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . WalletsAsync ( ). ToListAsync (); var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Wallets ( ); List EzWallet \u003e items = new List EzWallet \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Wallets ( ); TArray Gs2 :: UE5 :: Money2 :: Model :: FEzWalletPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeWallets ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeWallets ( callbackId ); var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeWallets ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeWallets ( callbackId ); const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeWallets ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeWallets ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. withdraw 플레이어의 지갑에서 유료 통화 소비하기 플레이어의 지갑에서 지정된 수량의 유료 통화를 차감합니다. 기본값(paidOnly = false)에서는 무료 통화가 먼저 소비되고, 부족한 만큼 유료 통화가 소비됩니다. 이를 통해 플레이어는 구매한 통화를 사용하기 전에 무료 통화를 모두 소진할 수 있습니다. paidOnly를 true로 설정하면 유료 통화만 소비됩니다. 법률상 유료 통화만 사용해야 하는 기능(예: 일부 지역의 유료 전용 가챠)에 필요합니다. 플레이어가 유료 통화로 구매할 때 사용합니다. 예를 들어 특별한 아이템을 구매하거나 가챠를 뽑기 위해 젬 100개를 소비하는 경우입니다. 참고: GS2-Showcase를 통한 상품 구매의 대가로 통화를 소비하는 경우에는 자동으로 처리되므로, 이 API를 호출할 필요가 없습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). withdrawCount int  1 ~ 2147483646 소비할 유료 통화 수량 paidOnly bool false 유료 통화만을 대상으로 할지 여부 Result 타입 설명 item EzWallet 소비 후 지갑 withdrawTransactions List 소비한 입금 트랜잭션 목록 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 ConflictException ConflictException 지갑 조작 처리가 충돌했습니다. 재시도가 필요합니다 InsufficientException BadRequestException 지갑의 잔액이 부족합니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); var result = await domain . WithdrawAsync ( withdrawCount : 50 , paidOnly : null ); var item = await result . ModelAsync (); var withdrawTransactions = result . WithdrawTransactions ; } catch ( Gs2 . Gs2Money2 . Exception . ConflictException e ) { // The wallet operation process conflicted. Retry required. } catch ( Gs2 . Gs2Money2 . Exception . InsufficientException e ) { // Wallet balance is insufficient. } var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Wallet ( slot : 0 ); var future = domain . WithdrawFuture ( withdrawCount : 50 , paidOnly : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Money2 . Exception . ConflictException ) { // The wallet operation process conflicted. Retry required. } if ( future . Error is Gs2 . Gs2Money2 . Exception . InsufficientException ) { // Wallet balance is insufficient. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; var withdrawTransactions = future . Result . WithdrawTransactions ; const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Wallet ( 0 // slot ); const auto Future = Domain -\u003e Withdraw ( 50 // withdrawCount // paidOnly ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Money2 :: Error :: FConflictError :: Class )) { // The wallet operation process conflicted. Retry required. } if ( e -\u003e IsChildOf ( Gs2 :: Money2 :: Error :: FInsufficientError :: Class )) { // Wallet balance is insufficient. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); const auto WithdrawTransactions = Result -\u003e WithdrawTransactions ; var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . wallet ( 0 ) var async_result = await domain . withdraw ( 50 , # withdraw_count null # paid_only ) if async_result . error != null : if async_result . error is Gs2Money2ConflictException : # 지갑 조작 처리가 충돌했습니다. 재시도가 필요합니다 pass if async_result . error is Gs2Money2InsufficientException : # 지갑의 잔액이 부족합니다 pass push_error ( str ( async_result . error )) return var result = async_result . result allocateSubscriptionStatus 스토어 영수증을 사용하여 구독 등록 App Store나 Google Play의 영수증을 검증하여 구독 구매를 플레이어에게 연결합니다. 플레이어가 단말기에서 구독(예: “월정액 패스”)을 구매한 후, 스토어 영수증을 이 API에 전달하여 서버 측에서 구독을 활성화합니다. 스토어 구매를 플레이어의 계정에 연결하기 위한 필수 단계입니다. 이 호출이 없으면 서버는 플레이어가 계약했음을 인식할 수 없습니다. 구매 흐름에서 사용합니다. 예를 들어, 인앱 결제 대화상자에서 플레이어가 “월정액 패스\"를 구매한 후 영수증을 전송하여 VIP 혜택을 활성화하는 경우입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession GameSession receipt string  ~ 1024자 영수증 Result 타입 설명 item EzSubscriptionStatus 구독 계약 상태 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 AlreadyUsedException BadRequestException 이미 해당 구독 계약은 다른 사용자가 사용하고 있습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . AllocateSubscriptionStatusAsync ( receipt : \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Money2 . Exception . AlreadyUsedException e ) { // The subscription contract for that period has already been used by another user. } var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . AllocateSubscriptionStatusFuture ( receipt : \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Money2 . Exception . AlreadyUsedException ) { // The subscription contract for that period has already been used by another user. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e AllocateSubscriptionStatus ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" // receipt ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Money2 :: Error :: FAlreadyUsedError :: Class )) { // The subscription contract for that period has already been used by another user. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . allocate_subscription_status ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" # receipt ) if async_result . error != null : if async_result . error is Gs2Money2AlreadyUsedException : # 이미 해당 구독 계약은 다른 사용자가 사용하고 있습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result getSubscriptionStatus 특정 구독 계약 상태 조회 콘텐츠 이름을 지정하여 특정 구독의 계약 상태를 조회합니다. 상태에는 플레이어가 현재 계약 중인지 여부와 유효기간 등의 관련 정보가 포함됩니다. 플레이어가 특정 구독을 보유하고 있는지 확인할 때 사용합니다. 예를 들어, 데일리 보너스 보상을 지급하기 전에 “월정액 패스\"가 유효한지 확인하거나, 플레이어 프로필에 “VIP 멤버십: 유효\"라고 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession GameSession contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 Result 타입 설명 item EzSubscriptionStatus 구독 계약 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SubscriptionStatus ( contentName : \"content-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SubscriptionStatus ( contentName : \"content-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SubscriptionStatus ( \"content-0001\" // contentName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscription_status ( \"content-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SubscriptionStatus ( contentName : \"content-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SubscriptionStatus ( contentName : \"content-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SubscriptionStatus ( \"content-0001\" // contentName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Money2 :: Model :: FSubscriptionStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscription_status ( \"content-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSubscriptionStatuses 플레이어의 구독 계약 상태 목록 조회 플레이어가 계약했을 가능성이 있는 모든 구독 콘텐츠의 계약 상태를 조회합니다. 구독이란 App Store나 Google Play에서 구매하는 “월정액 패스\"나 “VIP 멤버십\"과 같은 정기 결제를 의미합니다. 각 상태는 플레이어가 해당 콘텐츠를 현재 계약하고 있는지 여부를 나타냅니다. 구독 개요를 표시할 때 사용합니다. 예를 들어, 멤버십 화면에서 “월정액 패스: 유효(3월 15일까지)”, “VIP 멤버십: 미계약\"과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession GameSession Result 타입 설명 items List 구독 계약 상태 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . SubscriptionStatusesAsync ( ). ToListAsync (); var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . SubscriptionStatuses ( ); List EzSubscriptionStatus \u003e items = new List EzSubscriptionStatus \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e SubscriptionStatuses ( ); TArray Gs2 :: UE5 :: Money2 :: Model :: FEzSubscriptionStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscriptionStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscriptionStatuses ( callbackId ); var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscriptionStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscriptionStatuses ( callbackId ); const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSubscriptionStatuses ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSubscriptionStatuses ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. takeOverSubscriptionStatus 다른 계정에서 이 플레이어에게 구독 이전 현재 다른 플레이어 계정에 연결되어 있는 구독을 이 플레이어의 계정으로 이동합니다. 플레이어가 계정 이전을 수행하는 경우에 사용합니다. 예를 들어, 기기 변경으로 새 계정을 생성한 경우, 스토어 영수증을 사용하여 기존 계정의 “월정액 패스” 구독을 새 계정으로 이전할 수 있습니다. 구독은 기존 계정에서 해제되어 새 계정에 연결되므로, 기존 계정에서는 더 이상 구독 혜택을 받을 수 없게 됩니다. 계정 이전 흐름에서 사용합니다. 예를 들어, 플레이어가 새 계정으로 로그인하여 이전을 확인한 후 호출합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession GameSession receipt string  ~ 1024자 영수증 Result 타입 설명 item EzSubscriptionStatus 구독 계약 상태 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 LockPeriodNotElapsedException BadRequestException 마지막 사용자 전환 이후 잠금 기간이 경과하지 않았습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . TakeOverSubscriptionStatusAsync ( receipt : \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Money2 . Exception . LockPeriodNotElapsedException e ) { // The lock period has not elapsed since the last user change. } var domain = gs2 . Money2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . TakeOverSubscriptionStatusFuture ( receipt : \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Money2 . Exception . LockPeriodNotElapsedException ) { // The lock period has not elapsed since the last user change. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Money2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e TakeOverSubscriptionStatus ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" // receipt ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Money2 :: Error :: FLockPeriodNotElapsedError :: Class )) { // The lock period has not elapsed since the last user change. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . money2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . take_over_subscription_status ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" # receipt ) if async_result . error != null : if async_result . error is Gs2Money2LockPeriodNotElapsedException : # 마지막 사용자 전환 이후 잠금 기간이 경과하지 않았습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result 이벤트 핸들러 OnChangeSubscriptionStatus 구독 계약 상태가 변경되었을 때 사용하는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string 사용자ID contentName string 스토어 구독 콘텐츠 모델 이름 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Money2 . OnChangeSubscriptionStatus += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var contentName = notification . ContentName ; }; gs2 . Money2 . OnChangeSubscriptionStatus += notification =\u003e { var namespaceName = notification . NamespaceName ; var userId = notification . UserId ; var contentName = notification . ContentName ; }; Gs2 -\u003e Money2 -\u003e OnChangeSubscriptionStatus (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto UserId = Notification -\u003e UserIdValue ; const auto ContentName = Notification -\u003e ContentNameValue ; }); ez . money2 . change_subscription_status . connect ( func ( notification ): var namespace_name = notification . namespace_name var user_id = notification . user_id var content_name = notification . content_name )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Money2 SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Money2 SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/money2/game_engine/"},{"content":"모델 EzNews 공지사항 게시글 Hugo 사이트 데이터로부터 생성된 개별 뉴스 게시글을 나타냅니다. 각 게시글은 섹션과 콘텐츠 경로에 속하며, 제목, 타임스탬프, Front Matter 메타데이터를 가집니다. 게시글은 필요에 따라 GS2-Schedule의 이벤트와 연결하여 표시 기간을 제어할 수 있습니다. Front Matter에는 JSON 형식의 추가 메타데이터가 포함되며, 표시 순서를 제어하기 위한 선택적 weight 필드도 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 section string  ~ 1024자 섹션 이름 이 게시글이 속한 섹션(카테고리)이며, Hugo의 콘텐츠 디렉터리 구조에 대응합니다. 게시글을 표시용 논리 그룹으로 구성하는 데 사용됩니다. content string  ~ 1024자 콘텐츠 섹션 내에서 이 게시글의 콘텐츠 경로 식별자입니다. 섹션과 함께 Hugo 콘텐츠 구조 내에서 게시글의 위치를 고유하게 식별합니다. title string  ~ 1024자 게시글 제목 뉴스 게시글의 제목이며, 일반적으로 Hugo의 Front Matter에서 정의됩니다. 플레이어에게 게시글 목록을 표시할 때 제목으로 표시됩니다. scheduleEventId string ~ 1024자 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timestamp long  타임스탬프 UNIX 시간(밀리초) frontMatter string  ~ 1024자 Front Matter 게시글에 연결된 JSON 형식의 메타데이터이며, 원래 Hugo 마크다운의 Front Matter에서 정의됩니다. weight(표시 순서 제어용), 태그, 카테고리 등 임의의 사용자 정의 속성 필드를 포함할 수 있습니다. EzSetCookieRequestEntry Cookie 설정 요청 엔트리 뉴스 게시글의 웹 콘텐츠에 접근하기 위해 브라우저/WebView에 설정해야 하는 Cookie의 키-값 쌍을 나타냅니다. 클라이언트는 게시글 URL을 불러오기 전에 이 Cookie를 설정하여 콘텐츠에 대한 인가된 접근을 보장해야 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 128자 Cookie 키 뉴스 콘텐츠에 인증된 방식으로 접근하기 위해 설정해야 하는 Cookie의 이름입니다. 최대 128자. value string  ~ 1024자 Cookie 값 뉴스 콘텐츠에 인증된 방식으로 접근하기 위해 설정해야 하는 Cookie의 값입니다. 최대 1024자. 메서드 getContentsUrl 공지사항 콘텐츠를 표시하기 위한 URL과 쿠키 조회 WebView나 브라우저에서 공지사항 게시글을 표시하는 데 필요한 정보를 조회합니다. 공지사항 콘텐츠는 웹 페이지 형태로 호스팅되므로, 이를 표시하려면 (1) 인증용 쿠키와 (2) 열어야 할 URL이 필요합니다. 응답에는 브라우저 URL(쿠키 설정이 먼저 필요)과 ZIP URL(쿠키 없이 모든 콘텐츠를 다운로드 가능 — 오프라인 이용이나 커스텀 렌더링에 유용)이 포함됩니다. 공지사항 게시글을 열기 전에 사용합니다. 예를 들어 이 API를 호출하여 반환된 쿠키를 WebView에 설정한 후, 브라우저 URL로 이동하여 게시글을 표시합니다. 또는 ZIP을 다운로드하여 게임 UI에서 네이티브로 콘텐츠를 렌더링할 수도 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 공지 웹 콘텐츠에 액세스하기 위해 설정이 필요한 쿠키 리스트 browserUrl string 공지 웹 콘텐츠에 액세스하기 위한 URL zipUrl string ZIP 형식의 공지 웹 콘텐츠에 액세스하기 위한 URL (액세스에 Cookie 설정 불필요) 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . News . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). News ( ); var result = await domain . GetContentsUrlAsync ( ); List EzSetCookieRequestEntry \u003e cookies = new List EzSetCookieRequestEntry \u003e(); var items = result . ToList (); foreach ( var item in items ) { var entry = await item . ModelAsync (); cookies . Add ( entry ); } var browserUrl = domain . BrowserUrl ; var zipUrl = domain . ZipUrl ; var domain = gs2 . News . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). News ( ); var future = domain . GetContentsUrlFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } List EzSetCookieRequestEntry \u003e cookies = new List EzSetCookieRequestEntry \u003e(); var result = future . Result ; var items = result . ToList (); foreach ( var item in items ) { var future2 = item . Model (); yield return future2 ; var entry = future2 . Result ; cookies . Add ( entry ); } var browserUrl = domain . BrowserUrl ; var zipUrl = domain . ZipUrl ; const auto Domain = Gs2 -\u003e News -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e News ( ); const auto Future = Domain -\u003e GetContentsUrl ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } TArray EzSetCookieRequestEntryPtr \u003e Cookies ; const auto It = Future -\u003e GetTask (). Result (); foreach ( auto Item in It ) { const auto Future2 = Item . Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } Cookies . Add ( Future2 -\u003e GetTask (). Result ()); } const auto BrowserUrl = Domain -\u003e BrowserUrl ; const auto ZipUrl = Domain -\u003e ZipUrl ; var domain = ez . news . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . news ( ) var async_result = await domain . get_contents_url ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listNewses 공지사항 게시글 목록 조회 플레이어를 위한 게임 내 공지사항 게시글(공지)의 목록을 조회합니다. 공지사항 게시글은 GS2에서 관리되는 HTML 기반 웹 콘텐츠입니다. 예를 들어 점검 공지, 이벤트 공지, 업데이트 패치 노트, 캠페인 정보 등이 있습니다. 응답에는 캐시 검증용 해시 값도 포함되어 있어, 이전 조회 시점 이후 콘텐츠가 변경되었는지 확인할 수 있습니다. 게임 내 공지사항 화면을 구성하는 데 사용합니다. 예를 들어 “3월 1일 점검 안내”, “신규 이벤트: 봄맞이 축제”, “버전 2.5 업데이트 노트\"와 같은 게시글 목록을 표시할 때 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 공지 기사 리스트 contentHash string 공지 기사 데이터의 해시 값 templateHash string 템플릿 데이터의 해시 값 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . News . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . NewsesAsync ( ). ToListAsync (); var domain = gs2 . News . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Newses ( ); List EzNews \u003e items = new List EzNews \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e News -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Newses ( ); TArray Gs2 :: UE5 :: News :: Model :: FEzNewsPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); }","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-News SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-News SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/news/game_engine/"},{"content":"모델 EzProgress 퀘스트 진행 상황 퀘스트 시작 시 생성되며, 종료 시 삭제됩니다. 인게임 도중 앱을 종료한 경우 이 데이터가 남은 상태가 되며 엔티티가 보유한 진행 중인 퀘스트 정보를 통해 게임을 재개할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 progressId string ※ ~ 1024자 퀘스트 진행 상황 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 transactionId string  UUID ~ 36자 트랜잭션 ID 퀘스트 트랜잭션의 고유 식별자입니다. 퀘스트 진행 상황과 보상 배포를 관리하는 트랜잭션을 연결하는 데 사용됩니다. questModelId string  ~ 1024자 퀘스트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 현재 진행 중인 퀘스트 모델의 GRN입니다. 사용자가 플레이 중인 퀘스트를 식별하며, 퀘스트 도중 앱을 종료한 경우 게임 재개를 가능하게 합니다. randomSeed long  0 ~ 9223372036854775805 난수 시드 퀘스트 시작 시 할당되는 난수 시드입니다. 이 퀘스트 시도에서 선택되는 콘텐츠 배리에이션(보상 세트)을 결정하는 데 사용되며, 재현 가능한 결과를 보장합니다. metadata string ~ 256자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rewards List [] 0 ~ 1000 items 클리어 보상 목록 퀘스트 클리어 시 지급되는 보상의 목록입니다. 난수 시드로 선택된 콘텐츠 배리에이션에 기반하여 퀘스트 시작 시 결정됩니다. failedRewards List [] 0 ~ 1000 items 실패 시 보상 목록 퀘스트 실패 시 지급되는 보상의 목록입니다. 퀘스트 시작 시 결정되며, 실패에 대한 위로 보상이나 비용 일부 반환으로 제공됩니다. EzCompletedQuestList 클리어 완료 퀘스트 목록 퀘스트 그룹 내에서 사용자가 클리어한 퀘스트를 추적합니다. 전제 퀘스트의 클리어 판정 및 최초 클리어 보너스 판정에 사용됩니다. 각 퀘스트 이름은 클리어 횟수에 관계없이 한 번만 기록됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 이 클리어 완료 퀘스트 목록이 속한 퀘스트 그룹의 이름입니다. 사용자별·퀘스트 그룹별로 하나의 CompletedQuestList가 존재합니다. completeQuestNames List [] 0 ~ 1000 items 클리어 완료 퀘스트 이름 목록 이 퀘스트 그룹 내에서 사용자가 클리어한 퀘스트 이름의 목록입니다. 최초 클리어 시 퀘스트 이름이 추가되며, 중복은 제거됩니다. 전제 퀘스트 조건 평가 및 최초 클리어 보너스 판정에 사용됩니다. EzQuestGroupModel 퀘스트 그룹 모델 퀘스트 그룹은 여러 퀘스트를 그룹화하기 위한 엔티티로, 퀘스트 진행은 그룹 내에서 동시에 하나만 실행할 수 있습니다. 즉, 퀘스트를 병렬로 진행할 수 있도록 하려면 그룹을 분리해야 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. quests List [] 0 ~ 1000 items 그룹에 속한 퀘스트 이 퀘스트 그룹에 속한 퀘스트 모델의 목록입니다. 그룹 내에서는 동시에 하나의 퀘스트만 진행할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그룹 내 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule의 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화된 기간 동안에만 퀘스트를 시작할 수 있습니다. EzQuestModel 퀘스트 모델 퀘스트 모델은 인게임 시작에 필요한 대가와 클리어했을 때 얻는 보상을 보유하는 엔티티입니다. 클리어했을 때 얻는 보상은 여러 배리에이션을 준비할 수 있으며, 퀘스트 시작 시 추첨할 수 있습니다. 예를 들어, 퀘스트 자체는 동일하더라도 레어 몬스터의 출현 여부에 따라 두 가지 콘텐츠 배리에이션을 만들 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 questModelId string ※ ~ 1024자 퀘스트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. contents List [] 1 ~ 10 items 퀘스트 내용 이 퀘스트의 콘텐츠 배리에이션 목록입니다. 퀘스트 시작 시 가중치 추첨을 통해 하나의 배리에이션이 선택됩니다. 각 배리에이션마다 서로 다른 클리어 보상을 정의할 수 있어, 동일한 퀘스트라도 다른 결과(예: 레어 몬스터의 출현)를 구현할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화되어 있는 기간에만 퀘스트를 시작할 수 있습니다. 이 설정은 퀘스트 그룹의 도전 가능 기간보다 우선됩니다. firstCompleteAcquireActions List [] 0 ~ 10 items 최초 클리어 보상 입수 액션 리스트 이 퀘스트를 처음 클리어했을 때만 실행되는 입수 액션의 리스트입니다. 일반 클리어 보상에 더해 지급되는 보너스 보상으로, 최초 클리어 보너스를 구현하는 데 사용합니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 이 퀘스트를 시작하기 위한 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공해야만 퀘스트를 시작할 수 있습니다. 레벨 확인이나 아이템 소지 등의 요건을 강제하는 데 사용합니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 퀘스트의 시작 비용으로 실행되는 소비 액션입니다. 스태미나나 통화 등의 비용이 퀘스트 시작 시 소비됩니다. failedAcquireActions List [] 0 ~ 100 items 실패 시 입수 액션 리스트 퀘스트 실패 시 실행되는 입수 액션입니다. 실패 시 위로 보상이나 퀘스트 참가 비용의 일부 반환 등에 사용합니다. premiseQuestNames List [] 0 ~ 10 items 전제 퀘스트 이름 리스트 이 퀘스트에 도전하기 전에 클리어가 필요한 같은 그룹 내 퀘스트 이름의 리스트입니다. 연속되는 퀘스트 체인이나 분기되는 퀘스트 경로 작성에 사용합니다. EzContents 콘텐츠 퀘스트 콘텐츠의 하나의 배리에이션을 나타냅니다. 각 퀘스트는 서로 다른 보상을 가진 여러 콘텐츠 배리에이션을 가질 수 있으며, 퀘스트 시작 시 가중치 추첨을 통해 하나가 선택됩니다. 메타데이터는 사용자 ID 및 컨피그 값을 이용한 템플릿 변수 치환을 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 256자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. completeAcquireActions List [] 0 ~ 10 items 클리어 보상 획득 액션 이 콘텐츠 배리에이션으로 퀘스트를 클리어했을 때 실행되는 획득 액션입니다. 플레이어가 퀘스트 클리어 시 받게 되는 실제 보상을 정의합니다. EzConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzReward 보상 퀘스트 시작 시 결정되는 개별 보상 아이템을 나타냅니다. 실행할 입수 액션, 대상 리소스, 지급할 수량을 포함합니다. Progress 엔티티에 저장되며, 퀘스트 클리어 또는 실패 시 보상 배포에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 5242880자 리퀘스트 입수 액션 실행 시 사용되는 리퀘스트 파라미터의 JSON 문자열입니다. 대상 네임스페이스, 리소스 이름, 수량 등 보상의 구체적인 세부 사항을 포함합니다. itemId string  ~ 1024자 아이템 ID 보상으로 입수하는 리소스의 GRN입니다. 플레이어에게 지급되는 아이템, 통화, 기타 리소스를 특정합니다. value int  0 ~ 2147483646 수량 보상으로 지급하는 리소스의 수량입니다. 게임 로직에 따라 동적으로 조정할 수 있습니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 deleteProgress 플레이어의 현재 퀘스트 취소 플레이어의 진행 중인 퀘스트를 삭제하여 다른 퀘스트를 시작할 수 있도록 합니다. 플레이어가 퀘스트를 포기하고자 할 때 사용합니다. 예를 들어 “이 퀘스트를 포기하시겠습니까?“라는 확인 다이얼로그를 표시하고, 플레이어가 확인했을 때 이 API를 호출합니다. 새로운 퀘스트를 시작할 때 사용하는 force 옵션의 대안입니다. 이전 퀘스트를 암묵적으로 폐기하는 대신, 플레이어에게 명시적인 “퀘스트 포기” 버튼을 제공하고자 할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzProgress 퀘스트 진행 상황 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var result = await domain . DeleteProgressAsync ( ); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var future = domain . DeleteProgressFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); const auto Future = Domain -\u003e DeleteProgress ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . delete_progress ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result end 퀘스트 완료 또는 실패 보고 플레이어가 퀘스트 플레이를 마쳤음을 서버에 알립니다. 다음 두 가지를 보고해야 합니다: isComplete : 플레이어가 퀘스트를 클리어했는지(true) 실패했는지(false). rewards : 플레이어가 퀘스트 중 실제로 획득한 보상. 퀘스트 시작 시 전달받은 최댓값을 초과해서는 안 됩니다. 플레이어가 퀘스트를 클리어한 경우(isComplete = true), 보고된 보상이 플레이어에게 지급됩니다(예: 아이템이 인벤토리에 추가, 재화가 지갑에 추가). 플레이어가 실패한 경우(isComplete = false), rewards 파라미터는 무시되며 퀘스트 정의에 설정된 실패 보상이 대신 지급됩니다. 서버는 보고된 보상을 검증합니다. 허용된 최댓값을 초과하거나 이 퀘스트에 존재하지 않는 아이템을 보고한 경우 오류가 발생합니다. 퀘스트의 게임 플레이가 끝났을 때 사용합니다. 예를 들어, 플레이어가 보스를 물리친 후나 “게임 오버” 화면이 표시된 후입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession rewards List [] 0 ~ 1000 items 퀘스트에서 실제로 획득한 보상 isComplete bool  퀘스트를 클리어했는지 여부 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzProgress 퀘스트 진행 상황 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 지급 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var result = await domain . EndAsync ( isComplete : true , rewards : null , config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var future = domain . EndFuture ( isComplete : true , rewards : null , config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); const auto Future = Domain -\u003e End ( true // isComplete // rewards // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . end ( true , # is_complete null , # rewards null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getProgress 플레이어의 현재 퀘스트 진행 상황 조회 플레이어가 현재 플레이 중인 퀘스트를 퀘스트 그룹 및 퀘스트 정의 상세 정보와 함께 조회합니다. 앱을 재시작한 후 퀘스트를 재개할 때 유용합니다. 예를 들어 플레이어가 “스테이지 1-3\"을 진행하던 도중 앱을 종료한 경우, 앱 실행 시 이 API를 호출하여 미완료 퀘스트를 감지하고 “퀘스트를 재개하시겠습니까?” 다이얼로그를 표시할 수 있습니다. 플레이어가 진행 중인 퀘스트를 가지고 있지 않은 경우, 진행 데이터는 반환되지 않습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzProgress 퀘스트 진행 상황 questGroup EzQuestGroupModel 퀘스트 그룹 모델 quest EzQuestModel 퀘스트 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var item = await domain . ModelAsync (); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Progress ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Progress ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Quest :: Model :: FProgress \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . progress ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. start 퀘스트 시작 플레이어가 퀘스트를 시작한다는 것을 서버에 알립니다. 플레이어는 퀘스트 그룹마다 동시에 하나의 퀘스트만 진행할 수 있습니다. 이미 다른 퀘스트가 진행 중인 경우 이 요청은 실패합니다 ( force = true를 지정하면 이전 퀘스트를 파기하고 새로 시작할 수 있습니다). 퀘스트가 정상적으로 시작되면 응답에는 다음 정보가 포함됩니다: 이 퀘스트에서 획득 가능한 보상의 최댓값 (예: “검 최대 3개, 골드 최대 100개”). 게임 플레이 중 플레이어가 획득할 수 있는 것을 결정하는 데 사용합니다. 재현 가능한 게임 플레이를 위한 난수 시드. 이 시드를 사용하면 동일한 조건에서 게임을 재현할 수 있어, 디버깅이나 비정상 종료 후 재개에 유용합니다. 이 퀘스트 실행을 고유하게 식별하는 트랜잭션 ID. 퀘스트 결과를 보고할 때 필요합니다. 플레이어가 퀘스트의 “시작\"을 탭했을 때 사용합니다. 예를 들어 “1장” 그룹의 “스테이지 1-3\"을 시작하는 경우입니다. 스태미나 등의 퀘스트 비용은 자동으로 소비됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 questName string  ~ 128자 퀘스트 모델 이름 gameSession GameSession  GameSession force bool false 이미 시작한 퀘스트가 있는 경우 이를 파기하고 시작할지 여부 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 퀘스트 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 InProgressException BadRequestException 퀘스트가 이미 진행 중입니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var result = await domain . StartAsync ( questGroupName : \"group-0001\" , questName : \"quest-0001\" , force : null , config : null ); } catch ( Gs2 . Gs2Quest . Exception . InProgressException e ) { // Quest is already underway. } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var future = domain . StartFuture ( questGroupName : \"group-0001\" , questName : \"quest-0001\" , force : null , config : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Quest . Exception . InProgressException ) { // Quest is already underway. } onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto Future = Domain -\u003e Start ( \"group-0001\" , // questGroupName \"quest-0001\" // questName // force // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Quest :: Error :: FInProgressError :: Class )) { // Quest is already underway. } return false ; } var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) var async_result = await domain . start ( \"group-0001\" , # quest_group_name \"quest-0001\" , # quest_name null , # force null # config ) if async_result . error != null : if async_result . error is Gs2QuestInProgressException : # 퀘스트가 이미 진행 중입니다. pass push_error ( str ( async_result . error )) return var result = async_result . result describeCompletedQuestLists 플레이어의 클리어 완료 퀘스트 기록 목록 조회 모든 퀘스트 그룹에 대한 플레이어의 클리어 완료 퀘스트 기록을 조회합니다. 각 항목은 하나의 퀘스트 그룹에 대응하며, 해당 그룹 내에서 플레이어가 클리어에 성공한 퀘스트 이름 목록을 포함합니다. 퀘스트 진행 상황 개요를 구성할 때 사용합니다. 예를 들어 퀘스트 선택 화면에서 “1장: 5/10 클리어”, “2장: 0/8 클리어”, “이벤트 던전: 3/3 클리어\"와 같이 표시할 수 있습니다. 일부 퀘스트는 특정 이전 퀘스트의 클리어를 전제 조건으로 요구하므로, 어떤 퀘스트가 해제되었는지 판단하는 데도 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클리어한 퀘스트 리스트 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . CompletedQuestListsAsync ( ). ToListAsync (); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . CompletedQuestLists ( ); List EzCompletedQuestList \u003e items = new List EzCompletedQuestList \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e CompletedQuestLists ( ); TArray Gs2 :: UE5 :: Quest :: Model :: FEzCompletedQuestListPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getCompletedQuestList 특정 그룹의 플레이어 클리어 완료 퀘스트 기록 조회 지정한 퀘스트 그룹 내에서 플레이어가 클리어한 퀘스트 이름 목록을 조회합니다. 특정 그룹 내에서 플레이어가 이미 클리어한 퀘스트를 확인할 때 사용합니다. 예를 들어 “1장\"의 각 스테이지별 클리어/미클리어 상태를 표시하거나, 다음 스테이지를 해제하기 위한 전제 퀘스트를 클리어했는지 확인하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 이 클리어 완료 퀘스트 목록이 속한 퀘스트 그룹의 이름입니다. 사용자별·퀘스트 그룹별로 하나의 CompletedQuestList가 존재합니다. gameSession GameSession  GameSession Result 타입 설명 item EzCompletedQuestList 클리어한 퀘스트 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CompletedQuestList ( questGroupName : \"main\" ); var item = await domain . ModelAsync (); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CompletedQuestList ( questGroupName : \"main\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e CompletedQuestList ( \"main\" // questGroupName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . completed_quest_list ( \"main\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CompletedQuestList ( questGroupName : \"main\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). CompletedQuestList ( questGroupName : \"main\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e CompletedQuestList ( \"main\" // questGroupName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Quest :: Model :: FCompletedQuestList \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . completed_quest_list ( \"main\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getQuestGroup 이름을 지정하여 퀘스트 그룹 정의 조회 이름을 지정하여 퀘스트 그룹을 1건 조회합니다. 조회되는 정보에는 그룹 내 퀘스트 목록과 선택적인 도전 가능 기간 설정(예: 특정 기간에만 도전 가능한 이벤트 던전)이 포함됩니다. 특정 퀘스트 카테고리의 상세 정보를 표시할 때 사용합니다. 예를 들어 “1장\"의 모든 스테이지나 “이벤트 던전” 카테고리 내에서 도전 가능한 모든 퀘스트를 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzQuestGroupModel 퀘스트 그룹 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e QuestGroupModel ( \"quest-group-0001\" // questGroupName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . quest_group_model ( \"quest-group-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e QuestGroupModel ( \"quest-group-0001\" // questGroupName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Quest :: Model :: FQuestGroupModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . quest_group_model ( \"quest-group-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listQuestGroups 퀘스트 그룹 모델 목록 조회 이 네임스페이스에 등록된 모든 퀘스트 그룹 모델을 조회합니다. 퀘스트 그룹은 관련된 퀘스트를 하나로 묶는 카테고리입니다. 예를 들어 “1장”, “이벤트 던전”, “데일리 퀘스트” 등이 있습니다. 플레이어는 그룹당 하나의 퀘스트만 동시에 진행할 수 있으므로, 그룹은 동시 진행 제한을 관리하는 수단으로도 사용됩니다. 퀘스트 선택 화면을 구성할 때 사용합니다. 예를 들어 “메인 스토리”, “서브 퀘스트”, “이벤트 던전\"과 같은 카테고리를 플레이어에게 표시하여 선택하도록 할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 퀘스트 그룹 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . QuestGroupModelsAsync ( ). ToListAsync (); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . QuestGroupModels ( ); List EzQuestGroupModel \u003e items = new List EzQuestGroupModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e QuestGroupModels ( ); TArray Gs2 :: UE5 :: Quest :: Model :: FEzQuestGroupModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeQuestGroupModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeQuestGroupModels ( callbackId ); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeQuestGroupModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeQuestGroupModels ( callbackId ); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeQuestGroupModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeQuestGroupModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getQuest 이름을 지정하여 퀘스트 정의 조회 그룹 이름과 퀘스트 이름을 지정하여 퀘스트를 1건 조회합니다. 조회되는 정보에는 퀘스트의 보상 설정, 소비 액션(시작 비용), 전제 퀘스트 조건이 포함됩니다. 플레이어가 퀘스트를 시작하기 전에 상세 정보를 표시할 때 사용합니다. 예를 들어 퀘스트 상세 화면에서 “스테이지 1-3: 보상: 검×1, 골드×100 | 비용: 스태미나×10 | 조건: 스테이지 1-2 클리어\"와 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questName string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzQuestModel 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ). QuestModel ( questName : \"quest-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ). QuestModel ( questName : \"quest-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e QuestGroupModel ( \"quest-group-0001\" // questGroupName ) -\u003e QuestModel ( \"quest-0001\" // questName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . quest_group_model ( \"quest-group-0001\" ) . quest_model ( \"quest-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ). QuestModel ( questName : \"quest-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ). QuestModel ( questName : \"quest-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e QuestGroupModel ( \"quest-group-0001\" // questGroupName ) -\u003e QuestModel ( \"quest-0001\" // questName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Quest :: Model :: FQuestModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . quest . namespace_ ( \"namespace-0001\" ) . quest_group_model ( \"quest-group-0001\" ) . quest_model ( \"quest-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listQuests 그룹 내 퀘스트 모델 목록 조회 지정한 퀘스트 그룹에 속한 모든 퀘스트 모델을 조회합니다. 각 퀘스트에는 보상(플레이어가 획득할 수 있는 것), 비용(시작에 소비되는 아이템이나 통화), 전제 조건(먼저 클리어해야 하는 퀘스트)이 정의되어 있습니다. 카테고리 내 퀘스트 목록을 표시할 때 사용합니다. 예를 들어 “1장” 그룹 내에서 “스테이지 1-1”, “스테이지 1-2”, “스테이지 1-3(잠김 — 먼저 1-2를 클리어하세요)“와 같이 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 퀘스트 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ); var items = await domain . QuestModelsAsync ( ). ToListAsync (); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ); var it = domain . QuestModels ( ); List EzQuestModel \u003e items = new List EzQuestModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e QuestGroupModel ( \"quest-group-0001\" // questGroupName ); const auto It = Domain -\u003e QuestModels ( ); TArray Gs2 :: UE5 :: Quest :: Model :: FEzQuestModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeQuestModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeQuestModels ( callbackId ); var domain = gs2 . Quest . Namespace ( namespaceName : \"namespace-0001\" ). QuestGroupModel ( questGroupName : \"quest-group-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeQuestModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeQuestModels ( callbackId ); const auto Domain = Gs2 -\u003e Quest -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e QuestGroupModel ( \"quest-group-0001\" // questGroupName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeQuestModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeQuestModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Quest SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Quest SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/quest/game_engine/"},{"content":"모델 EzScore 스코어 게임 플레이어별·카테고리별로 등록된 스코어를 보유하는 엔티티입니다. 각 스코어 엔트리는 고유 ID로 식별되며, 카테고리 및 스코어 등록 사용자와 연결됩니다. 합산 모드에서는 새로운 스코어가 별도의 엔트리를 생성하는 대신 AddScore 조작을 통해 기존 합계에 가산됩니다. 카테고리의 최소값·최대값 범위를 벗어나는 스코어는 등록 시 거부됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 categoryName string  ~ 128자 카테고리명 userId string  ~ 128자 사용자ID uniqueId string  UUID ~ 36자 고유 ID 이 스코어 엔트리를 고유하게 식별하는 UUID입니다. 생성 시 자동으로 생성됩니다. uniqueByUserId가 비활성화된 경우, 동일 사용자의 동일 카테고리 내 여러 스코어 엔트리를 구분하기 위해 사용됩니다. scorerUserId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 플레이어가 등록한 스코어 값입니다. 카테고리에 설정된 최소값·최대값 범위 내여야 합니다. 합산 모드에서는 AddScore 조작을 통해 이 값을 증가시킬 수 있습니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. EzRanking 랭킹 랭킹 리더보드의 한 항목을 나타내며, 사용자의 순위, 점수 및 관련 메타데이터를 포함합니다. 글로벌 랭킹(모든 플레이어가 공유 보드에서 배치 집계로 경쟁)과 스코프 랭킹(구독한 플레이어를 기반으로 한 사용자별 보드에서 실시간 반영)의 두 종류가 있습니다. 랭킹은 카테고리에 설정된 정렬 방향으로 정렬되며, 동일 점수인 항목은 동일한 순위를 공유하면서도 서로 다른 인덱스를 유지합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rank long  1 ~ 9223372036854775805 순위 이 항목의 랭킹 순위(1부터 시작)입니다. 동일 점수인 항목은 동일한 순위 값을 공유합니다. 예를 들어 두 사용자가 1위로 동점인 경우, 둘 다 순위 1이 되고 다음 항목은 순위 3이 됩니다. index long  0 ~ 9223372036854775805 인덱스 랭킹 목록 내의 0부터 시작하는 순차 인덱스입니다. rank 와 달리, 여러 항목이 동일 점수를 공유하더라도 인덱스는 항상 유일하며 연속됩니다. 페이지네이션이나 범위 기반 쿼리에 사용됩니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 이 랭킹 엔트리의 스코어 값입니다. 합산 모드의 경우, 등록된 모든 스코어의 누적 합계입니다. 랭킹 정렬 순서에 사용되는 값은 카테고리의 orderDirection 설정에 따라 달라집니다. metadata string ~ 512자 메타데이터 이 랭킹 엔트리에 연결된 임의의 메타데이터입니다. 스코어 등록 시 설정되며, 랭킹 결과와 함께 반환됩니다. 최대 512자. createdAt long  작성일시 UNIX 시간·밀리초 ※ 서버 측에서 자동으로 설정 EzSubscribeUser 구독 사용자 스코프 랭킹 카테고리 내 개별 구독 관계를 나타냅니다. 각 항목은 상위 사용자가 지정된 카테고리에서 대상 사용자의 점수를 구독(팔로우)하고 있음을 나타냅니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독 대상 사용자 ID 구독 대상 플레이어의 사용자 ID입니다. 이 사용자의 점수는 구독한 사용자의 지정된 카테고리에 대한 스코프 랭킹에 표시됩니다. EzCategoryModel 카테고리 모델 카테고리마다 서로 다른 랭킹을 생성할 수 있습니다. 카테고리에는 등록 가능한 스코어의 최소값·최대값을 설정할 수 있으며, 해당 범위를 벗어나는 스코어는 폐기됩니다. 랭킹을 집계할 때 스코어가 작은 것을 상위(오름차순)로 할지, 큰 것을 상위(내림차순)로 할지를 설정할 수 있습니다. 랭킹의 종류로 글로벌 과 스코프 를 선택할 수 있습니다. 글로벌은 모든 플레이어가 동일한 결과를 참조하는 것이며, 스코프는 친구 내 랭킹이나 길드 내 랭킹처럼 게임 플레이어마다 결과가 다른 랭킹입니다. 글로벌 랭킹은 카테고리별로 랭킹 집계 간격을 15분~24시간으로 설정할 수 있습니다. 스코프 랭킹은 실시간으로 집계 결과가 반영됩니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 스코어를 리셋할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scope 문자열 열거형 enum {   “global”,   “scoped” }  랭킹 종류 이 카테고리의 랭킹 타입입니다. “global” 은 모든 플레이어가 공유하는 단일 리더보드를 만들며, 설정된 간격으로 배치 집계됩니다. “scoped” 는 구독한 플레이어(친구나 길드 멤버 등)를 기반으로 한 사용자별 리더보드를 만들며, 점수가 실시간으로 반영됩니다. 정의 설명 global 글로벌 scoped 스코프 globalRankingSetting EzGlobalRankingSetting {scope} == “global” ※ 글로벌 랭킹 설정 글로벌 랭킹 모드 전용 설정입니다. 집계 간격, 고정 시각, 점수의 유니크 여부, 세대 관리, 추가 기간 한정 스코프를 포함합니다. scope 가 “global” 로 설정된 경우에만 적용됩니다. ※ scope이(가) “global” 이면 필수 entryPeriodEventId string ~ 1024자 점수 등록 기간 이벤트 ID 점수 등록을 받는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 점수 등록 요청은 거부됩니다. 설정하지 않으면 점수는 언제든지 등록할 수 있습니다. accessPeriodEventId string ~ 1024자 접근 기간 이벤트 ID 랭킹 데이터를 열람할 수 있는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 랭킹 조회 요청은 거부됩니다. 설정하지 않으면 랭킹은 언제든지 접근할 수 있습니다. EzGlobalRankingSetting 글로벌 랭킹 설정 글로벌은 모든 플레이어가 동일한 결과를 참조하는 방식입니다. 랭킹 집계 간격은 15분~24시간으로 설정할 수 있습니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 점수를 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 calculateIntervalMinutes int  15 ~ 1440 집계 간격(분) 연속되는 랭킹 재집계 사이의 간격(분)입니다. 시스템은 이 간격으로 등록된 모든 점수를 기반으로 글로벌 랭킹을 정기적으로 재집계합니다. 범위: 15 1440분(15분 24시간). additionalScopes List 0 ~ 10 items 추가 스코프 목록 추가적인 기간 한정 집계 스코프 목록입니다. 각 스코프는 지정한 일수 이내에 등록된 점수만을 대상으로 하는 별도의 랭킹을 정의합니다. 전체 기간의 글로벌 랭킹과 함께 데일리·위클리·먼슬리 등의 리더보드를 만들 수 있습니다. 최대 10건. EzScope 집계 스코프 글로벌 랭킹 모드에서의 추가적인 기간 한정 집계 스코프를 정의합니다. 일반적으로 글로벌 랭킹은 등록된 모든 스코어를 대상으로 집계됩니다. 스코프를 추가하면 지정한 일수 이내에 등록된 스코어만을 대상으로 하는 별도의 랭킹을 생성할 수 있으며, 전체 기간 랭킹과 함께 데일리·위클리·먼슬리 등의 리더보드를 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. targetDays long  1 ~ 365 집계 대상 일수 집계 윈도우에 포함할 일수입니다. 현재 시각으로부터 이 일수 이내에 등록된 스코어만 스코프 랭킹의 대상이 됩니다. 범위: 1~365일. 메서드 getCategory 특정 랭킹 카테고리의 상세 정보 취득하기 랭킹 카테고리명을 지정하여, 스코어링 규칙과 설정을 포함한 상세 정보를 취득합니다. 응답에는 다음이 포함됩니다: 스코어 범위: 등록 가능한 스코어의 최솟값과 최댓값 정렬 순서: 스코어가 높을수록 상위(내림차순)인지, 스코어가 낮을수록 상위(오름차순, 타임어택 랭킹 등에 유용)인지 스코프 타입: 글로벌 랭킹인지 스코프 랭킹(프렌드)인지 글로벌 랭킹의 경우: 계산 간격과 타이밍 설정 엔트리/액세스 기간: GS2-Schedule 이벤트와 연동되어 있는 경우, 스코어 등록이나 랭킹 열람이 가능한 기간 상세 화면에서 랭킹의 규칙이나 설정을 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzCategoryModel 카테고리 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( categoryName : \"category-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( categoryName : \"category-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CategoryModel ( \"category-0001\" // categoryName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . category_model ( \"category-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( categoryName : \"category-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). CategoryModel ( categoryName : \"category-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CategoryModel ( \"category-0001\" // categoryName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking :: Model :: FCategoryModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . category_model ( \"category-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listCategories 랭킹 카테고리 목록 취득하기 네임스페이스에 정의되어 있는 모든 랭킹 카테고리를 취득합니다. 각 카테고리는 독립된 리더보드를 나타냅니다. 예를 들어 “하이스코어”, “보스 타임어택”, “주간 배틀 승리 수” 등입니다. 랭킹에는 2가지 타입이 있습니다: 글로벌 랭킹: 모든 플레이어가 하나의 리더보드에서 순위가 매겨집니다. 랭킹은 정기적으로 재계산되기(실시간이 아님) 때문에, 스코어 등록부터 랭킹 반영까지 지연이 있습니다. 스코프 랭킹: 플레이어별로 자기 자신과 구독(팔로우)하고 있는 플레이어만 표시되는 개인화된 리더보드입니다(“프렌드 랭킹\"과 같은 것입니다). 이쪽은 실시간으로 계산됩니다. 랭킹 화면에서 이용 가능한 리더보드 목록을 표시할 때 사용합니다. 예를 들어 “세계 랭킹”, “프렌드 랭킹”, “주간 랭킹” 등의 탭을 표시하는 화면입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 카테고리 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . CategoryModelsAsync ( ). ToListAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . CategoryModels ( ); List EzCategoryModel \u003e items = new List EzCategoryModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e CategoryModels ( ); TArray Gs2 :: UE5 :: Ranking :: Model :: FEzCategoryModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCategoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCategoryModels ( callbackId ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeCategoryModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeCategoryModels ( callbackId ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeCategoryModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeCategoryModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSubscribes 프렌드 랭킹용으로 팔로우 중인 플레이어 목록 취득하기 지정된 랭킹 카테고리에서 현재 플레이어가 구독(팔로우)하고 있는 플레이어의 목록을 취득합니다. 스코프 랭킹(프렌드 랭킹)에서 사용합니다. 다른 플레이어를 구독하면 해당 플레이어의 스코어가 개인화된 프렌드 랭킹에 표시되게 됩니다. 랭킹 화면에서 “팔로우 중” 목록을 표시할 때 사용합니다. 프렌드 리더보드에 어떤 플레이어의 스코어가 포함되어 있는지 확인할 수 있습니다. 예를 들어 PlayerA, PlayerB, PlayerC를 구독하고 있는 경우, 프렌드 랭킹에는 이 3명과 자기 자신의 스코어가 표시됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 gameSession GameSession  GameSession Result 타입 설명 items List 구독 대상 사용자 정보 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var items = await domain . SubscribeUsersAsync ( ). ToListAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var it = domain . SubscribeUsers ( ); List EzSubscribeUser \u003e items = new List EzSubscribeUser \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ); const auto It = Domain -\u003e SubscribeUsers ( ); TArray Gs2 :: UE5 :: Ranking :: Model :: FEzSubscribeUserPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribeUsers ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribeUsers ( callbackId ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribeUsers ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribeUsers ( callbackId ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSubscribeUsers ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSubscribeUsers ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. subscribe 플레이어를 팔로우하여 프렌드 랭킹에 포함하기 지정된 카테고리에서 다른 플레이어를 구독하여, 해당 플레이어의 스코어가 자신의 스코프 랭킹(프렌드 랭킹)에 표시되도록 합니다. “팔로우” 기능과 같은 것입니다. 구독 후 대상 플레이어의 스코어가 개인화된 프렌드 리더보드에 표시되게 됩니다. 주요 사용 방법: 플레이어가 친구를 추가했을 때, 모든 랭킹 카테고리에서 자동으로 구독하기 플레이어 프로필 화면에 “리더보드에서 팔로우” 버튼을 배치하기 대전 후, 상대했던 플레이어를 팔로우할 수 있게 하기 자기 자신을 구독할 수는 없습니다(자신의 스코어는 프렌드 랭킹에 자동으로 포함됩니다). Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 gameSession GameSession  GameSession targetUserId string  ~ 128자 구독할 사용자 ID Result 타입 설명 item EzSubscribeUser 구독 대상 사용자 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var result = await domain . SubscribeAsync ( targetUserId : \"user-0002\" ); var item = await result . ModelAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var future = domain . SubscribeFuture ( targetUserId : \"user-0002\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ); const auto Future = Domain -\u003e Subscribe ( \"user-0002\" // targetUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) var async_result = await domain . subscribe ( \"user-0002\" # target_user_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result unsubscribe 플레이어의 팔로우를 해제하여 프렌드 랭킹에서 제외하기 지정된 랭킹 카테고리에서 지정된 플레이어의 구독을 해제합니다. 구독 해제 후, 대상 플레이어의 스코어는 스코프 랭킹(프렌드 랭킹)에 표시되지 않게 됩니다. 플레이어가 프렌드 리더보드에서 누군가의 스코어를 표시하지 않도록 하고 싶을 때 사용합니다. 예를 들어 친구 해제 시나 팔로우 해제 시입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 gameSession GameSession  GameSession targetUserId string  ~ 128자 구독 해제할 사용자 ID Result 타입 설명 item EzSubscribeUser 해제한 구독 대상 사용자 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ). SubscribeUser ( targetUserId : \"user-0002\" ); var result = await domain . UnsubscribeAsync ( ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ). SubscribeUser ( targetUserId : \"user-0002\" ); var future = domain . UnsubscribeFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ) -\u003e SubscribeUser ( \"user-0002\" // targetUserId ); const auto Future = Domain -\u003e Unsubscribe ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) . subscribe_user ( \"user-0002\" ) var async_result = await domain . unsubscribe ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getNearRanking 특정 스코어 부근의 랭킹 취득하기 지정된 스코어 값을 중심으로 한 랭킹의 일부를 취득합니다. 플레이어가 “자신이 어느 정도의 순위인지\"를 확인하는 데 편리합니다. 예를 들어 리더보드 상에서 플레이어의 스코어 전후 몇 명을 표시할 수 있습니다. 일반적인 사용 방법: 플레이어가 게임을 마친 후, 자신의 스코어와 그 부근의 랭킹을 표시: “98위: PlayerX (5,200 pt) → 당신: 5,150 pt → 99위: PlayerY (5,100 pt)\" 이 API는 글로벌 랭킹에서만 사용할 수 있습니다. 스코프 랭킹(프렌드)의 경우는 목록이 충분히 작으므로, 대신 GetRanking을 사용해 주세요. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. additionalScopeName string ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. score long  0 ~ 9223372036854775805 스코어 이 랭킹 엔트리의 스코어 값입니다. 합산 모드의 경우, 등록된 모든 스코어의 누적 합계입니다. 랭킹 정렬 순서에 사용되는 값은 카테고리의 orderDirection 설정에 따라 달라집니다. Result 타입 설명 items List 랭킹 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var items = await domain . NearRankingsAsync ( score : 1000L ). ToListAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var it = domain . NearRankings ( score : 1000L ); List EzRanking \u003e items = new List EzRanking \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ); const auto It = Domain -\u003e NearRankings ( 1000L // score ); TArray Gs2 :: UE5 :: Ranking :: Model :: FEzRankingPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getRank 특정 플레이어의 순위와 스코어 취득하기 특정 플레이어의 랭킹 정보를 순위와 스코어를 포함하여 취득합니다. 결과 화면이나 프로필 페이지에서 “당신의 순위: 42위 (8,500 pt)“와 같이 표시할 때 사용합니다. scorerUserId(순위를 조회하고 싶은 플레이어)를 지정해야 합니다. uniqueId는 카테고리가 플레이어별로 스코어를 하나만 허용하는 경우는 생략할 수 있습니다(기본값 “0”). 카테고리가 플레이어별로 여러 스코어를 허용하는 경우는, uniqueId를 지정하여 어떤 스코어를 조회할지 특정합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. additionalScopeName string ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. scorerUserId string  ~ 128자 스코어를 획득한 사용자의 사용자 ID gameSession GameSession  GameSession uniqueId string “0” ~ 36자 스코어의 고유 ID Result 타입 설명 item EzRanking 랭킹 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ). Ranking ( scorerUserId : \"user-0001\" , index : null ); var item = await domain . ModelAsync ( scorerUserId : \"user-0001\" ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ). Ranking ( scorerUserId : \"user-0001\" , index : null ); var future = domain . Model ( scorerUserId : \"user-0001\" ); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ) -\u003e Ranking ( \"user-0001\" , // scorerUserId nullptr // index ); const auto Future = Domain -\u003e Model ( \"user-0001\" // scorerUserId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) . ranking ( \"user-0001\" , null ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ). Ranking ( scorerUserId : \"user-0001\" , index : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ). Ranking ( scorerUserId : \"user-0001\" , index : null ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ) -\u003e Ranking ( \"user-0001\" , // scorerUserId nullptr // index ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking :: Model :: FRanking \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) . ranking ( \"user-0001\" , null ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getRanking 랭킹 리더보드 취득하기 지정된 카테고리의 랭킹 목록을 취득합니다. 플레이어가 스코어 순으로 나열되어 표시됩니다. 리더보드 화면을 표시하기 위한 메인 API입니다. 예를 들어 “1위: PlayerA (10,500 pt), 2위: PlayerB (9,800 pt), …“와 같은 표시입니다. startIndex를 지정하여 특정 순위부터 취득을 시작할 수 있습니다(예: startIndex=0으로 상위부터, startIndex=99로 100위 부근부터). 글로벌 랭킹의 경우, 데이터는 마지막 계산 결과에 기반하므로 스코어 등록부터 랭킹 갱신까지 지연이 있을 수 있습니다. 스코프 랭킹(프렌드)의 경우, 데이터는 실시간으로 계산됩니다. 카테고리가 추가 스코프를 지원하는 경우, additionalScopeName을 지정하여 랭킹을 더욱 좁힐 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. additionalScopeName string ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. gameSession GameSession GameSession limit int 30 1 ~ 1000 취득할 데이터 건수 pageToken string ~ 4096자 데이터 취득을 시작할 위치를 지정하는 토큰 startIndex long 0 ~ 9223372036854775805 랭킹 취득을 시작할 인덱스 Result 타입 설명 items List 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var items = await domain . RankingsAsync ( ). ToListAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var it = domain . Rankings ( ); List EzRanking \u003e items = new List EzRanking \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ); const auto It = Domain -\u003e Rankings ( ); TArray Gs2 :: UE5 :: Ranking :: Model :: FEzRankingPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRankings ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRankings ( callbackId ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRankings ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRankings ( callbackId ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeRankings ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeRankings ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. putScore 랭킹에 스코어 등록하기 지정된 랭킹 카테고리에 플레이어의 스코어를 등록합니다. 플레이어가 기록하고 싶은 스코어를 달성했을 때 호출합니다. 예를 들어 스테이지 클리어 후, 타임어택 종료 시, 대전 종료 시 등입니다. 스코어에는 메타데이터(문자열)를 옵션으로 첨부할 수 있습니다. 리더보드 상에서 스코어와 함께 표시하고 싶은 추가 정보를 저장하는 데 유용합니다. 예를 들어 플레이어의 캐릭터 이름, 팀 구성, 리플레이 데이터 등입니다. 스코어의 처리 방식은 카테고리의 타입에 따라 다릅니다: 글로벌 랭킹: 스코어가 수집되어, 다음 스케줄된 간격에서 랭킹이 재계산됩니다. 랭킹이 갱신될 때까지 지연이 있습니다. 스코프 랭킹: 스코어가 즉시 반영되어, 이 플레이어를 구독(팔로우)하고 있는 플레이어의 프렌드 랭킹에 표시됩니다. 주의: 카테고리 설정에 따라, 플레이어별로 최고 스코어(오름차순 랭킹의 경우는 최저 스코어)만 유지되는 경우와 여러 스코어가 허용되는 경우가 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession score long  0 ~ 9223372036854775805 스코어 이 랭킹 엔트리의 스코어 값입니다. 합산 모드의 경우, 등록된 모든 스코어의 누적 합계입니다. 랭킹 정렬 순서에 사용되는 값은 카테고리의 orderDirection 설정에 따라 달라집니다. metadata string ~ 512자 메타데이터 이 랭킹 엔트리에 연결된 임의의 메타데이터입니다. 스코어 등록 시 설정되며, 랭킹 결과와 함께 반환됩니다. 최대 512자. Result 타입 설명 item EzScore 등록한 스코어 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var result = await domain . PutScoreAsync ( score : 1000L , metadata : null ); var item = await result . ModelAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RankingCategory ( categoryName : \"category-0001\" , additionalScopeName : null ); var future = domain . PutScoreFuture ( score : 1000L , metadata : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RankingCategory ( \"category-0001\" , // categoryName nullptr // additionalScopeName ); const auto Future = Domain -\u003e PutScore ( 1000L // score // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ranking_category ( \"category-0001\" , null ) var async_result = await domain . put_score ( 1000 , # score null # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getScore 플레이어가 등록한 특정 스코어 취득하기 지정된 랭킹 카테고리에서 지정된 플레이어의 스코어 레코드 하나를 취득합니다. 특정 스코어의 상세 정보를 표시할 때 사용합니다. 예를 들어 스코어 값, 등록 일시, 첨부된 메타데이터(캐릭터 이름이나 리플레이 데이터 등)를 표시할 수 있습니다. uniqueId는 플레이어가 여러 스코어를 가진 경우 어떤 스코어를 취득할지 지정합니다. 카테고리가 플레이어별로 스코어를 하나만 허용하는 경우(가장 일반적인 케이스)에는 uniqueId를 생략하거나 “0\"으로 설정할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 gameSession GameSession  GameSession scorerUserId string  ~ 128자 사용자ID uniqueId string “0” ~ 36자 스코어의 고유 ID Result 타입 설명 item EzScore 스코어 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Score ( categoryName : \"category-0001\" , scorerUserId : \"user-0002\" , uniqueId : \"unique-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Score ( categoryName : \"category-0001\" , scorerUserId : \"user-0002\" , uniqueId : \"unique-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Score ( \"category-0001\" , // categoryName \"user-0002\" , // scorerUserId \"unique-0001\" // uniqueId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . score ( \"category-0001\" , \"user-0002\" , \"unique-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Score ( categoryName : \"category-0001\" , scorerUserId : \"user-0002\" , uniqueId : \"unique-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Score ( categoryName : \"category-0001\" , scorerUserId : \"user-0002\" , uniqueId : \"unique-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Score ( \"category-0001\" , // categoryName \"user-0002\" , // scorerUserId \"unique-0001\" // uniqueId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking :: Model :: FScore \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . score ( \"category-0001\" , \"user-0002\" , \"unique-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listScores 특정 플레이어가 등록한 스코어 목록 취득하기 지정된 랭킹 카테고리에서 특정 플레이어가 등록한 모든 스코어를 취득합니다. 플레이어의 스코어 이력을 표시할 때 사용합니다. 예를 들어 타임어택 스테이지의 전체 도전 기록을 목록으로 표시하는 경우입니다. 랭킹 표시(모든 플레이어를 스코어 순으로 표시)와는 달리, 이 API는 한 명의 특정 플레이어의 등록 스코어에 초점을 맞추고 있습니다. 카테고리가 플레이어별로 스코어를 하나만 허용하는 경우는 1건만 반환됩니다. 여러 스코어가 허용되는 경우(예: 여러 번의 도전)에는 모든 스코어가 반환됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 scorerUserId string  ~ 128자 사용자ID gameSession GameSession  GameSession limit int 30 1 ~ 1000 취득할 데이터 건수 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 Result 타입 설명 items List 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . ScoresAsync ( categoryName : \"category-0001\" , scorerUserId : \"user-0002\" ). ToListAsync (); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Scores ( categoryName : \"category-0001\" , scorerUserId : \"user-0002\" ); List EzScore \u003e items = new List EzScore \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Scores ( \"category-0001\" , // categoryName \"user-0002\" // scorerUserId ); TArray Gs2 :: UE5 :: Ranking :: Model :: FEzScorePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeScores ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeScores ( callbackId ); var domain = gs2 . Ranking . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeScores ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeScores ( callbackId ); const auto Domain = Gs2 -\u003e Ranking -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeScores ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeScores ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Ranking SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Ranking SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/ranking/game_engine/"},{"content":"모델 EzGlobalRankingData 글로벌 랭킹 특정 시즌의 글로벌 랭킹에서의 랭킹 엔트리를 나타냅니다. 사용자의 스코어, 0부터 시작하는 인덱스(정렬 위치), 1부터 시작하는 순위(동점을 고려)를 포함합니다. 순위는 인덱스 + 1로 계산됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. 새로운 랭킹 기간마다 증가합니다. userId string  ~ 128자 사용자ID index int 0 ~ 2147483646 인덱스 랭킹 내 이 엔트리의 0부터 시작하는 고유한 정렬 위치입니다. 순위와 달리, 스코어가 동점이어도 인덱스는 항상 고유합니다. 인덱스 기반 보상 계산에 사용됩니다. rank int 0 ~ 2147483646 순위 1부터 시작하는 랭킹 순위입니다. 스코어가 같은 플레이어는 동일한 순위를 공유합니다. 인덱스 + 1로 계산됩니다. 순위 기반 보상 계산에 사용됩니다. score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzGlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 글로벌 랭킹의 순위에 대해 보상을 설정할 수 있습니다. 보상을 설정하려면 순위 임계값과 보상 내용을 설정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. 새로운 랭킹 기간마다 증가합니다. userId string  ~ 128자 사용자ID receivedAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzGlobalRankingScore 글로벌 랭킹 스코어 특정 시즌의 글로벌 랭킹에서 사용자의 등록 스코어를 저장합니다. 합산 모드가 활성화된 경우, 여러 개의 등록 스코어가 누적됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. 새로운 랭킹 기간마다 증가합니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzClusterRankingData 클러스터 랭킹 특정 시즌·클러스터에서의 클러스터 랭킹의 랭킹 엔트리를 나타냅니다. 클러스터 내 사용자의 스코어, 0부터 시작하는 인덱스, 1부터 시작하는 순위를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 시즌이 속한 클러스터(길드, 게더링, 또는 그룹)의 이름입니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID index int 0 ~ 2147483646 인덱스 클러스터 랭킹 내에서 0부터 시작하는 고유한 정렬 위치입니다. 스코어가 동점이어도 항상 고유합니다. rank int 0 ~ 2147483646 순위 클러스터 내에서 1부터 시작하는 랭킹 순위입니다. 스코어가 같은 플레이어는 동일한 순위를 공유합니다. 인덱스 + 1로 계산됩니다. score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 클러스터 랭킹 순위에 따른 보상을 설정할 수 있습니다. 보상을 설정하려면 순위 임계값과 보상 내용을 설정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID receivedAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzClusterRankingScore 클러스터 랭킹 스코어 특정 시즌·클러스터에서의 사용자 등록 스코어를 저장합니다. 스코어 접수 전에 클러스터 타입 설정에 따라 사용자의 클러스터 소속이 검증됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 이 클러스터 내에서 사용자가 등록한 스코어 값입니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzSubscribeRankingData 구독 랭킹 특정 시즌의 사용자별 맞춤 구독 랭킹에서의 랭킹 엔트리를 나타냅니다. 구독한 사용자의 점수를 포함하며, 친구 목록 내에서 순위가 매겨집니다. 각 엔트리에는 점수를 달성한 사용자ID가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. scorerUserId string  ~ 128자 점수를 획득한 사용자ID 이 점수를 달성한 플레이어의 사용자ID입니다. 구독 랭킹에서는 구독한 사용자의 점수가 엔트리가 되므로, 이 필드는 어느 친구의 점수인지를 식별합니다. index int 0 ~ 2147483646 인덱스 구독 랭킹 내에서 0부터 시작하는 고유한 정렬 위치입니다. rank int 0 ~ 2147483646 순위 구독 랭킹 내에서 1부터 시작하는 랭킹 순위입니다. 인덱스 + 1로 계산됩니다. score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzSubscribeRankingScore 구독 랭킹 스코어 특정 시즌의 구독 랭킹에서 사용자가 등록한 점수를 저장합니다. 이 점수는 이 사용자를 구독하고 있는 사용자에게 표시되어 맞춤형 친구 랭킹을 구성합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 EzSubscribeUser 구독 대상 사용자 정보 구독 랭킹에서 두 사용자 간의 구독 관계를 나타냅니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독 대상 사용자 ID 구독 대상 플레이어의 사용자 ID입니다. 이 플레이어의 스코어가 구독자의 개인화된 랭킹에 포함됩니다. EzGlobalRankingModel 글로벌 랭킹 모델 글로벌 랭킹은 모든 플레이어를 대상으로 한 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연결하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 globalRankingModelId string ※ ~ 1024자 글로벌 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. 각 보상은 순위 임계값과 실행할 입수 액션을 정의합니다. entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 반복 사이클마다 랭킹이 초기화되어 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 일반적으로 스코어 등록 기간 사이의 간격으로 설정합니다. EzClusterRankingModel 클러스터 랭킹 모델 클러스터 랭킹은 길드나 게더링 내의 플레이어를 대상으로 하는 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연동하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 clusterRankingModelId string ※ ~ 1024자 클러스터 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. clusterType 문자열 열거형 enum {   “Raw”,   “Gs2Guild::Guild”,   “Gs2Matchmaking::SeasonGathering” }  클러스터 타입 랭킹의 세그멘테이션에 사용하는 그룹(클러스터)의 종류를 정의합니다. “Raw\"는 소속 검증 없이 임의의 클러스터 이름을 지정할 수 있으며, “Gs2Guild::Guild\"는 GS2-Guild 길드에 대한 소속을 검증하고, “Gs2Matchmaking::SeasonGathering\"은 GS2-Matchmaking 시즌 개더링에 대한 소속을 검증합니다. 정의 설명 Raw 검증 없음 Gs2Guild::Guild GS2-Guild 길드 Gs2Matchmaking::SeasonGathering GS2-Matchmaking 시즌 개더링 rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. EzSubscribeRankingModel 구독 랭킹 모델 구독한 다른 플레이어의 점수를 집계하여 랭킹을 작성하는 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeRankingModelId string ※ ~ 1024자 구독 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과를 열람할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. EzRankingReward 랭킹 보상 점수 등록 기간이 설정된 랭킹에서, 등록 기간 외 참조 기간 내에 받을 수 있는 보상을 설정합니다. 반복 설정이 유효한 경우, 가장 최근에 종료된 기간의 랭킹이 보상 수령 대상이 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 thresholdRank int  1 ~ 1001 순위 임계값 이 보상 티어의 순위 임계값입니다. 순위(또는 인덱스, rewardCalculationIndex 설정에 따라 다름)가 이 임계값 이상인 플레이어가 이 보상을 받습니다. 1001로 설정하면 랭크 외(상위 1000위 밖) 플레이어를 위한 보상을 정의할 수 있습니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. acquireActions List [] 0 ~ 100 items 입수 액션 리스트 플레이어가 이 랭킹 보상을 수령할 때 실행되는 입수 액션의 목록입니다. 이 순위 임계값을 달성한 보상으로 지급되는 아이템, 화폐, 기타 리소스를 정의합니다. EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getGlobalRankingRank 글로벌 랭킹에서 플레이어 자신의 순위 조회 플레이어 자신의 랭킹 항목을 조회합니다. 순위와 점수가 포함됩니다. 리더보드에서 플레이어의 위치를 표시할 때 사용합니다. 예를 들어 랭킹 화면 상단에서 “당신의 순위: 42위(15,000점)“과 같이 표시하거나, “10,000명 중 42위입니다\"와 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzGlobalRankingData 글로벌 랭킹 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : null , gameSession : GameSession ); var result = await domain . GetGlobalRankingRankAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : null , userId : \"user-0001\" ); var future = domain . GetGlobalRankingRankFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( nullptr , // season \"user-0001\" // userId ); const auto Future = Domain -\u003e GetGlobalRankingRank ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( null , null ) . global_ranking_data ( null ) var async_result = await domain . get_global_ranking_rank ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listGlobalRankings 글로벌 랭킹의 리더보드 조회 글로벌 랭킹의 리더보드 항목을 조회하여 점수순으로 순위가 매겨진 플레이어를 표시합니다. 각 항목에는 플레이어의 사용자 ID, 점수, 순위, 첨부된 메타데이터가 포함됩니다. 리더보드를 표시할 때 사용합니다. 예를 들어 랭킹 화면에서 “1위: Alice(25,000점), 2위: Bob(22,500점), 3위: Charlie(20,000점)“과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 글로벌 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : null , userId : \"user-0001\" ); var items = await domain . GlobalRankingsAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : null , userId : \"user-0001\" ); var it = domain . GlobalRankings ( ); List EzGlobalRankingData \u003e items = new List EzGlobalRankingData \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( nullptr , // season \"user-0001\" // userId ); const auto It = Domain -\u003e GlobalRankings ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzGlobalRankingDataPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getGlobalRankingModel 이름을 지정하여 글로벌 랭킹 정의 조회 이름을 지정하여 글로벌 랭킹 모델을 1건 조회합니다. 조회할 수 있는 정보에는 스코어 범위, 정렬 순서, 보상 설정, 시즌/참가 기간 설정이 포함됩니다. 특정 랭킹의 규칙을 표시할 때 사용합니다. 예를 들어, 랭킹 상세 화면에서 “하이스코어 랭킹 — 매월 리셋, 상위 100명에게 보상, 스코어가 높을수록 상위\"와 같이 표시하는 경우에 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzGlobalRankingModel 글로벌 랭킹 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking2 :: Model :: FGlobalRankingModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listGlobalRankingModels 글로벌 랭킹 정의 목록 조회 이 네임스페이스에 등록된 모든 글로벌 랭킹 모델을 조회합니다. 글로벌 랭킹은 게임 내 모든 플레이어가 서로 경쟁하는 리더보드입니다. 예를 들어 “월드 하이스코어”, “아레나 레이팅”, “총 데미지 랭킹” 등이 있습니다. 각 모델은 랭킹 규칙을 정의합니다: 스코어 범위, 정렬 순서(오름차순 또는 내림차순), 시즌 스케줄, 랭킹 보상. 어떤 글로벌 랭킹이 있는지 확인할 때 사용합니다. 예를 들어 “리더보드” 메뉴에서 “하이스코어 랭킹”, “스피드클리어 랭킹”, “PvP 레이팅\"의 선택지를 표시하는 경우에 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 글로벌 랭킹 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); var items = await domain . GlobalRankingModelsAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); var it = domain . GlobalRankingModels ( ); List EzGlobalRankingModel \u003e items = new List EzGlobalRankingModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( nullptr // namespaceName ); const auto It = Domain -\u003e GlobalRankingModels ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzGlobalRankingModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGlobalRankingModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGlobalRankingModels ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGlobalRankingModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGlobalRankingModels ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( nullptr // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeGlobalRankingModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeGlobalRankingModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getGlobalRankingReceivedReward 특정 글로벌 랭킹 보상을 수령했는지 확인 특정 글로벌 랭킹과 시즌의 보상 수령 기록을 조회합니다. 플레이어가 특정 랭킹 시즌의 보상을 이미 수령했는지 확인할 때 사용합니다. 예를 들어, 미수령이면 “보상 받기” 버튼을 표시하고, 수령완료면 “수령완료\"라고 표시하는 경우에 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzGlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingReceivedReward ( ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingReceivedReward ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ) -\u003e GlobalRankingReceivedReward ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( 0 , null ) . global_ranking_received_reward ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingReceivedReward ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingReceivedReward ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ) -\u003e GlobalRankingReceivedReward ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking2 :: Model :: FGlobalRankingReceivedReward \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( 0 , null ) . global_ranking_received_reward ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listGlobalRankingReceivedRewards 플레이어의 글로벌 랭킹 보상 수령 이력 목록 조회 글로벌 랭킹에서 플레이어가 수령한 랭킹 보상의 이력을 조회합니다. 각 항목에는 어떤 랭킹과 시즌의 보상을 수령했는지가 표시되며, 어떤 보상이 이미 회수되었는지 확인할 수 있습니다. 보상 수령 현황을 표시할 때 사용합니다. 예를 들어, 랭킹 보상 화면에서 “하이스코어 랭킹 시즌1: 수령완료, 시즌2: 수령완료, 시즌3: 미수령\"과 같이 표시하는 경우에 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 글로벌 랭킹 보상 수령 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); var items = await domain . GlobalRankingReceivedRewardsAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); var it = domain . GlobalRankingReceivedRewards ( ); List EzGlobalRankingReceivedReward \u003e items = new List EzGlobalRankingReceivedReward \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ); const auto It = Domain -\u003e GlobalRankingReceivedRewards ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzGlobalRankingReceivedRewardPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGlobalRankingReceivedRewards ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGlobalRankingReceivedRewards ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGlobalRankingReceivedRewards ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGlobalRankingReceivedRewards ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeGlobalRankingReceivedRewards ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeGlobalRankingReceivedRewards ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. receiveGlobalRankingReward 글로벌 랭킹 보상 받기 지정한 글로벌 랭킹과 시즌에서의 플레이어의 최종 순위에 따라 랭킹 보상을 받습니다. 보상은 플레이어의 순위와 랭킹 모델의 보상 설정에 따라 결정됩니다. 예를 들어, 상위 10명은 특별 아이템을, 상위 100명은 젬을 받도록 설정할 수 있습니다. 보상 아이템은 플레이어에게 자동으로 지급됩니다. 시즌 종료 후 랭킹 결과 화면에서 플레이어가 “보상 받기\"를 탭했을 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzGlobalRankingModel 글로벌 랭킹 모델 acquireActions List 보상 수령 시 실행되는 입수 액션 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingReceivedReward ( ); var result = await domain . ReceiveGlobalRankingRewardAsync ( config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingReceivedReward ( ); var future = domain . ReceiveGlobalRankingRewardFuture ( config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ) -\u003e GlobalRankingReceivedReward ( ); const auto Future = Domain -\u003e ReceiveGlobalRankingReward ( // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( 0 , null ) . global_ranking_received_reward ( ) var async_result = await domain . receive_global_ranking_reward ( null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getGlobalRankingScore 특정 글로벌 랭킹에 등록한 플레이어의 점수 조회 특정 글로벌 랭킹과 시즌의 플레이어 점수를 조회합니다. 특정 리더보드에서 플레이어의 현재 점수를 표시할 때 사용합니다. 예를 들어 랭킹 상세 화면에서 “당신의 점수: 15,000점(시즌 3)“과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzGlobalRankingScore 글로벌 랭킹 스코어 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingScore ( ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingScore ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ) -\u003e GlobalRankingScore ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( 0 , null ) . global_ranking_score ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingScore ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ). GlobalRankingScore ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ) -\u003e GlobalRankingScore ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking2 :: Model :: FGlobalRankingScore \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( 0 , null ) . global_ranking_score ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listGlobalRankingScores 글로벌 랭킹에 등록한 플레이어의 점수 목록 조회 플레이어가 글로벌 랭킹에 등록한 모든 점수를 조회합니다. 각 점수 항목에는 어떤 랭킹에 등록되었는지와 점수 값이 표시됩니다. 플레이어 자신의 점수를 표시할 때 사용합니다. 예를 들어 프로필 화면이나 랭킹 개요 화면에서 “당신의 하이스코어: 스테이지 클리어: 15,000점, 아레나: 2,400점\"과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 글로벌 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); var items = await domain . GlobalRankingScoresAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); var it = domain . GlobalRankingScores ( ); List EzGlobalRankingScore \u003e items = new List EzGlobalRankingScore \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ); const auto It = Domain -\u003e GlobalRankingScores ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzGlobalRankingScorePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGlobalRankingScores ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGlobalRankingScores ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeGlobalRankingScores ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeGlobalRankingScores ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeGlobalRankingScores ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeGlobalRankingScores ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. putGlobalRanking 글로벌 랭킹에 점수 등록 지정한 글로벌 랭킹에 플레이어의 점수를 등록합니다. 메타데이터(예: 리플레이 ID나 사용한 캐릭터 이름)를 첨부할 수도 있습니다. 플레이어가 이미 점수를 등록한 경우, 랭킹의 규칙에 따라 갱신됩니다(예: 최고 점수를 유지하거나 항상 최신 점수를 사용). 플레이어가 점수 대상 활동을 완료한 후에 사용합니다. 예를 들어 스테이지를 클리어한 후 클리어 타임이나 점수를 “하이스코어 랭킹\"에 등록하는 경우입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession score long  0 ~ 9223372036854775805 스코어 사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item EzGlobalRankingScore 등록한 글로벌 랭킹 스코어 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); var result = await domain . PutGlobalRankingAsync ( score : 100L , metadata : null ); var item = await result . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). GlobalRankingModel ( rankingName : \"ranking-0001\" ). GlobalRankingSeason ( season : 0 , userId : \"user-0001\" ); var future = domain . PutGlobalRankingFuture ( score : 100L , metadata : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e GlobalRankingModel ( \"ranking-0001\" // rankingName ) -\u003e GlobalRankingSeason ( 0 , // season \"user-0001\" // userId ); const auto Future = Domain -\u003e PutGlobalRanking ( 100L // score // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . global_ranking_model ( \"ranking-0001\" ) . global_ranking_season ( 0 , null ) var async_result = await domain . put_global_ranking ( 100 , # score null # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getClusterRankingRank 클러스터 랭킹에서 플레이어 자신의 순위 조회 특정 클러스터(그룹) 내에서 플레이어 자신의 랭킹 항목을 조회합니다. 순위와 점수가 포함됩니다. 그룹 내에서 플레이어의 위치를 표시할 때 사용합니다. 예를 들어 길드 랭킹 화면 상단에서 “당신의 길드 내 순위: 3위(8,500점)“과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 시즌이 속한 클러스터(길드, 게더링, 또는 그룹)의 이름입니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzClusterRankingData 클러스터 랭킹 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : null , gameSession : GameSession ); var result = await domain . GetClusterRankingRankAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : null , userId : \"user-0001\" ); var future = domain . GetClusterRankingRankFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName nullptr , // season \"user-0001\" // userId ); const auto Future = Domain -\u003e GetClusterRankingRank ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , null , null ) . cluster_ranking_data ( null ) var async_result = await domain . get_cluster_ranking_rank ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listClusterRankings 클러스터 랭킹의 리더보드 조회 특정 클러스터(그룹)의 리더보드 항목을 조회하여 해당 그룹 내에서 점수순으로 순위가 매겨진 플레이어를 표시합니다. 각 항목에는 플레이어의 사용자 ID, 점수, 순위, 첨부된 메타데이터가 포함됩니다. 그룹의 리더보드를 표시할 때 사용합니다. 예를 들어 길드 랭킹 화면에서 “1위: Alice(8,500점), 2위: Bob(7,200점), 3위: Charlie(6,800점)“과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 시즌이 속한 클러스터(길드, 게더링, 또는 그룹)의 이름입니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클러스터 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : null , userId : \"user-0001\" ); var items = await domain . ClusterRankingsAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : null , userId : \"user-0001\" ); var it = domain . ClusterRankings ( ); List EzClusterRankingData \u003e items = new List EzClusterRankingData \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName nullptr , // season \"user-0001\" // userId ); const auto It = Domain -\u003e ClusterRankings ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzClusterRankingDataPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getClusterRankingModel 이름을 지정하여 클러스터 랭킹 정의를 조회 이름을 지정하여 클러스터 랭킹 모델을 1건 조회합니다. 조회할 수 있는 정보에는 점수 범위, 정렬 순서, 클러스터 타입, 보상 설정, 시즌/참가 기간 설정이 포함됩니다. 특정 클러스터 랭킹의 규칙을 표시할 때 사용합니다. 예를 들어 랭킹 상세 화면에서 “길드 DPS 랭킹 — 주간 리셋, 길드 내에서 경쟁, 상위 10명에게 보상\"과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzClusterRankingModel 클러스터 랭킹 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking2 :: Model :: FClusterRankingModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listClusterRankingModels 클러스터 랭킹 정의 목록 조회 이 네임스페이스에 등록된 모든 클러스터 랭킹 모델을 조회합니다. 클러스터 랭킹은 특정 그룹(클러스터) 내의 리더보드입니다. 예를 들어 길드 내 랭킹, 지역별 랭킹, 게임 서버 내 랭킹 등이 있습니다. 모든 플레이어가 함께 경쟁하는 글로벌 랭킹과 달리, 클러스터 랭킹에서는 그룹 내에서 경쟁합니다. 길드 이벤트나 지역 대항전에 유용합니다. 어떤 클러스터 랭킹이 있는지 확인할 때 사용합니다. 예를 들어 랭킹 화면에서 “길드 DPS 랭킹”, “지역 점수 랭킹\"과 같은 선택지를 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 클러스터 랭킹 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); var items = await domain . ClusterRankingModelsAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); var it = domain . ClusterRankingModels ( ); List EzClusterRankingModel \u003e items = new List EzClusterRankingModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( nullptr // namespaceName ); const auto It = Domain -\u003e ClusterRankingModels ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzClusterRankingModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeClusterRankingModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeClusterRankingModels ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeClusterRankingModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeClusterRankingModels ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( nullptr // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeClusterRankingModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeClusterRankingModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getClusterRankingReceivedReward 특정 클러스터 랭킹 보상을 수령했는지 확인 특정 클러스터 랭킹, 클러스터, 시즌의 보상 수령 기록을 조회합니다. 플레이어가 이미 보상을 수령했는지 확인할 때 사용합니다. 예를 들어 길드 랭킹 결과 화면에서 미수령이면 “보상 받기” 버튼을 표시하고, 이미 수령했다면 “수령 완료\"라고 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingReceivedReward ( ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingReceivedReward ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ) -\u003e ClusterRankingReceivedReward ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , 0 , null ) . cluster_ranking_received_reward ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingReceivedReward ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingReceivedReward ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ) -\u003e ClusterRankingReceivedReward ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking2 :: Model :: FClusterRankingReceivedReward \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , 0 , null ) . cluster_ranking_received_reward ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listClusterRankingReceivedRewards 플레이어의 클러스터 랭킹 보상 수령 이력 목록 조회 클러스터 랭킹에서 플레이어가 수령한 랭킹 보상의 이력을 조회합니다. 각 항목에는 어떤 랭킹, 클러스터, 시즌의 보상을 수령했는지가 표시됩니다. 그룹 랭킹의 보상 수령 상태를 표시할 때 사용합니다. 예를 들어 길드 랭킹 보상 화면에서 “길드 DPS 랭킹 시즌 1: 수령 완료, 시즌 2: 미수령\"과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클러스터 랭킹 보상 수령 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); var items = await domain . ClusterRankingReceivedRewardsAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); var it = domain . ClusterRankingReceivedRewards ( ); List EzClusterRankingReceivedReward \u003e items = new List EzClusterRankingReceivedReward \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ); const auto It = Domain -\u003e ClusterRankingReceivedRewards ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzClusterRankingReceivedRewardPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeClusterRankingReceivedRewards ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeClusterRankingReceivedRewards ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeClusterRankingReceivedRewards ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeClusterRankingReceivedRewards ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeClusterRankingReceivedRewards ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeClusterRankingReceivedRewards ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. receiveClusterRankingReward 클러스터 랭킹 보상 수령 지정한 클러스터 랭킹, 클러스터, 시즌에서 플레이어의 최종 순위에 따라 랭킹 보상을 수령합니다. 보상은 그룹 내에서 플레이어의 순위와 랭킹 모델의 보상 설정에 따라 결정됩니다. 예를 들어 각 길드의 1위 플레이어가 특별한 길드 챔피언 아이템을 받도록 설정할 수 있습니다. 보상 아이템은 플레이어에게 자동으로 지급됩니다. 시즌 종료 후 그룹 랭킹 결과 화면에서 플레이어가 “보상 받기\"를 탭했을 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzClusterRankingModel 클러스터 랭킹 모델 acquireActions List 보상 수령 시 실행되는 입수 액션 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingReceivedReward ( ); var result = await domain . ReceiveClusterRankingRewardAsync ( config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingReceivedReward ( ); var future = domain . ReceiveClusterRankingRewardFuture ( config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ) -\u003e ClusterRankingReceivedReward ( ); const auto Future = Domain -\u003e ReceiveClusterRankingReward ( // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , 0 , null ) . cluster_ranking_received_reward ( ) var async_result = await domain . receive_cluster_ranking_reward ( null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getClusterRankingScore 특정 클러스터 랭킹에 등록한 플레이어의 점수 조회 특정 클러스터 랭킹, 클러스터, 시즌의 플레이어 점수를 조회합니다. 그룹 내에서 플레이어의 현재 점수를 표시할 때 사용합니다. 예를 들어 길드 랭킹 상세 화면에서 “Dragon Slayers 길드에서 당신의 점수: 8,500점(시즌 2)“과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzClusterRankingScore 클러스터 랭킹 스코어 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingScore ( ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingScore ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ) -\u003e ClusterRankingScore ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , 0 , null ) . cluster_ranking_score ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingScore ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ). ClusterRankingScore ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ) -\u003e ClusterRankingScore ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking2 :: Model :: FClusterRankingScore \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , 0 , null ) . cluster_ranking_score ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listClusterRankingScores 클러스터 랭킹에 등록한 플레이어의 점수 목록 조회 특정 클러스터(그룹) 내의 특정 클러스터 랭킹에 등록한 플레이어의 점수를 조회합니다. 그룹 내에서 플레이어 자신의 점수를 표시할 때 사용합니다. 예를 들어 길드 랭킹 화면에서 “당신의 길드 DPS 점수: 8,500점\"과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클러스터 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); var items = await domain . ClusterRankingScoresAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); var it = domain . ClusterRankingScores ( ); List EzClusterRankingScore \u003e items = new List EzClusterRankingScore \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ); const auto It = Domain -\u003e ClusterRankingScores ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzClusterRankingScorePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeClusterRankingScores ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeClusterRankingScores ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeClusterRankingScores ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeClusterRankingScores ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeClusterRankingScores ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeClusterRankingScores ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. putClusterRanking 클러스터 랭킹에 점수 등록 특정 클러스터(그룹) 내의 지정한 클러스터 랭킹에 플레이어의 점수를 등록합니다. 메타데이터를 첨부할 수도 있습니다. 클러스터 이름은 점수가 어느 그룹에 속하는지를 식별합니다. 예를 들어 길드 랭킹의 경우 길드 이름입니다. 플레이어가 그룹 내에서 점수 대상 활동을 완료한 후에 사용합니다. 예를 들어 길드 레이드 보스를 클리어한 후 DPS 점수를 플레이어의 길드의 “길드 DPS 랭킹\"에 등록하는 경우입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. gameSession GameSession  GameSession score long  0 ~ 9223372036854775805 스코어 이 클러스터 내에서 사용자가 등록한 스코어 값입니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item EzClusterRankingScore 등록한 클러스터 랭킹 스코어 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); var result = await domain . PutClusterRankingAsync ( score : 100L , metadata : null ); var item = await result . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). ClusterRankingModel ( rankingName : \"ranking-0001\" ). ClusterRankingSeason ( clusterName : \"cluster-0001\" , season : 0 , userId : \"user-0001\" ); var future = domain . PutClusterRankingFuture ( score : 100L , metadata : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e ClusterRankingModel ( \"ranking-0001\" // rankingName ) -\u003e ClusterRankingSeason ( \"cluster-0001\" , // clusterName 0 , // season \"user-0001\" // userId ); const auto Future = Domain -\u003e PutClusterRanking ( 100L // score // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . cluster_ranking_model ( \"ranking-0001\" ) . cluster_ranking_season ( \"cluster-0001\" , 0 , null ) var async_result = await domain . put_cluster_ranking ( 100 , # score null # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getSubscribe 특정 사용자를 구독 랭킹용으로 팔로우하고 있는지 확인 특정 대상 사용자의 구독 정보를 조회합니다. 플레이어가 특정 사용자를 이미 팔로우하고 있는지 확인할 때 사용합니다. 예를 들어, 다른 플레이어의 프로필에서 “팔로우 중”/“팔로우” 버튼을 표시하거나, 친구 리더보드에 스코어를 표시하기 전에 구독 여부를 확인하는 경우에 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetUserId string  ~ 128자 구독 대상 사용자 ID Result 타입 설명 item EzSubscribeUser 구독 대상 사용자 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( rankingName : \"ranking-0001\" ). SubscribeUser ( targetUserId : \"user-0002\" ); var result = await domain . GetSubscribeAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Subscribe ( rankingName : \"ranking-0001\" ). SubscribeUser ( targetUserId : \"user-0002\" ); var future = domain . GetSubscribeFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Subscribe ( \"ranking-0001\" // rankingName ) -\u003e SubscribeUser ( \"user-0002\" // targetUserId ); const auto Future = Domain -\u003e GetSubscribe ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . subscribe ( \"ranking-0001\" ) . subscribe_user ( \"user-0002\" ) var async_result = await domain . get_subscribe ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listSubscribes 구독 랭킹용으로 팔로우하고 있는 사용자 목록 조회 구독 랭킹을 위해 플레이어가 구독(팔로우)하고 있는 모든 사용자를 조회합니다. 구독 랭킹은 팔로우한 사용자의 스코어만 표시되므로, 이 목록이 플레이어의 친구 리더보드에 누가 표시될지를 결정합니다. 랭킹용 “팔로우 중” 목록을 표시할 때 사용합니다. 예를 들어, 친구 랭킹 관리 화면에서 “팔로우 중: Alice, Bob, Charlie\"와 같이 표시하거나, 플레이어가 몇 명의 친구를 추적하고 있는지 확인하는 경우에 편리합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 구독 대상 사용자 정보 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . SubscribesAsync ( rankingName : \"ranking-0001\" ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Subscribes ( rankingName : \"ranking-0001\" ); List EzSubscribeUser \u003e items = new List EzSubscribeUser \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Subscribes ( \"ranking-0001\" // rankingName ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzSubscribeUserPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribes ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribes ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribes ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribes ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSubscribes ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSubscribes ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getSubscribeRankingRank 구독(친구) 랭킹에서 플레이어 자신의 순위 조회 친구 간에서 플레이어 자신의 랭킹 항목을 조회합니다. 순위와 점수가 포함됩니다. 친구 리더보드에서 플레이어의 위치를 표시할 때 사용합니다. 예를 들어 친구 랭킹 화면 상단에서 “친구 내 순위: 2위(10,500점)“과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzSubscribeRankingData 구독 랭킹 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : null , userId : \"user-0001\" ). SubscribeRankingData ( scorerUserId : null ); var result = await domain . GetSubscribeRankingRankAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : null , userId : \"user-0001\" ). SubscribeRankingData ( scorerUserId : null ); var future = domain . GetSubscribeRankingRankFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( nullptr , // season \"user-0001\" // userId ) -\u003e SubscribeRankingData ( nullptr // scorerUserId ); const auto Future = Domain -\u003e GetSubscribeRankingRank ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) . subscribe_ranking_season ( null , null ) . subscribe_ranking_data ( null ) var async_result = await domain . get_subscribe_ranking_rank ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result listSubscribeRankings 구독(친구) 랭킹의 리더보드 조회 친구 리더보드를 조회합니다. 플레이어가 구독(팔로우)한 사용자의 점수만 표시됩니다. 각 항목에는 사용자 ID, 점수, 순위, 첨부된 메타데이터가 포함됩니다. 친구 리더보드를 표시할 때 사용합니다. 예를 들어 친구 랭킹 화면에서 “1위: Alice(12,000점), 2위: 나(10,500점), 3위: Bob(9,800점)“과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 구독 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : null , userId : \"user-0001\" ); var items = await domain . SubscribeRankingsAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : null , userId : \"user-0001\" ); var it = domain . SubscribeRankings ( ); List EzSubscribeRankingData \u003e items = new List EzSubscribeRankingData \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( nullptr , // season \"user-0001\" // userId ); const auto It = Domain -\u003e SubscribeRankings ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzSubscribeRankingDataPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } getSubscribeRankingModel 이름을 지정하여 구독 랭킹 정의를 조회 이름을 지정하여 구독 랭킹 모델을 1건 조회합니다. 조회할 수 있는 정보에는 점수 범위, 정렬 순서, 시즌/참가 기간 설정이 포함됩니다. 특정 구독 랭킹의 규칙을 표시할 때 사용합니다. 예를 들어 랭킹 상세 화면에서 “친구 하이스코어 — 주간 리셋, 점수가 높을수록 상위\"와 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzSubscribeRankingModel 구독 랭킹 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking2 :: Model :: FSubscribeRankingModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSubscribeRankingModels 구독 랭킹 정의 목록 조회 이 네임스페이스에 등록된 모든 구독 랭킹 모델을 조회합니다. 구독 랭킹은 친구 전용 리더보드입니다. 플레이어는 자신이 구독(팔로우)한 사용자의 점수만 표시됩니다. 친구 간의 경쟁에 최적입니다. 예를 들어 “친구 하이스코어”, “친구 위클리 챌린지\"처럼 게임 전체가 아닌 친구 간에만 경쟁하는 랭킹입니다. 어떤 구독 랭킹이 있는지 확인할 때 사용합니다. 예를 들어 친구 랭킹 화면에서 “친구 하이스코어”, “친구 스피드클리어\"와 같은 선택지를 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 구독 랭킹 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); var items = await domain . SubscribeRankingModelsAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); var it = domain . SubscribeRankingModels ( ); List EzSubscribeRankingModel \u003e items = new List EzSubscribeRankingModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( nullptr // namespaceName ); const auto It = Domain -\u003e SubscribeRankingModels ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzSubscribeRankingModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribeRankingModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribeRankingModels ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : null ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribeRankingModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribeRankingModels ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( nullptr // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSubscribeRankingModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSubscribeRankingModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getSubscribeRankingScore 특정 구독 랭킹에 등록한 플레이어의 점수 조회 특정 구독(친구) 랭킹과 시즌의 플레이어 점수를 조회합니다. 특정 친구 랭킹에서 플레이어의 현재 점수를 표시할 때 사용합니다. 예를 들어 친구 랭킹 상세 화면에서 “당신의 점수: 12,000점(이번 주)“과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 gameSession GameSession  GameSession Result 타입 설명 item EzSubscribeRankingScore 구독 랭킹 스코어 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ). SubscribeRankingScore ( ); var item = await domain . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ). SubscribeRankingScore ( ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( 0 , // season \"user-0001\" // userId ) -\u003e SubscribeRankingScore ( ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) . subscribe_ranking_season ( 0 , null ) . subscribe_ranking_score ( ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ). SubscribeRankingScore ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ). SubscribeRankingScore ( ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( 0 , // season \"user-0001\" // userId ) -\u003e SubscribeRankingScore ( ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Ranking2 :: Model :: FSubscribeRankingScore \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) . subscribe_ranking_season ( 0 , null ) . subscribe_ranking_score ( ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSubscribeRankingScores 구독 랭킹에 등록한 플레이어의 점수 목록 조회 플레이어가 구독(친구) 랭킹에 등록한 모든 점수를 조회합니다. 친구 랭킹에서 플레이어 자신의 점수를 표시할 때 사용합니다. 예를 들어 친구 랭킹 개요 화면에서 “당신의 친구 하이스코어: 12,000점\"과 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 구독 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ); var items = await domain . SubscribeRankingScoresAsync ( ). ToListAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ); var it = domain . SubscribeRankingScores ( ); List EzSubscribeRankingScore \u003e items = new List EzSubscribeRankingScore \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( 0 , // season \"user-0001\" // userId ); const auto It = Domain -\u003e SubscribeRankingScores ( ); TArray Gs2 :: UE5 :: Ranking2 :: Model :: FEzSubscribeRankingScorePtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribeRankingScores ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribeRankingScores ( callbackId ); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSubscribeRankingScores ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSubscribeRankingScores ( callbackId ); const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( 0 , // season \"user-0001\" // userId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSubscribeRankingScores ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSubscribeRankingScores ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. putSubscribeRanking 구독 랭킹에 점수 등록 지정한 구독(친구) 랭킹에 플레이어의 점수를 등록합니다. 메타데이터를 첨부할 수도 있습니다. 이 점수는 이 플레이어를 구독(팔로우)하고 있는 모든 사용자의 친구 리더보드에 표시됩니다. 플레이어가 점수 대상 활동을 완료한 후에 사용합니다. 예를 들어 스테이지를 클리어한 후 점수를 “친구 하이스코어” 랭킹에 등록하여 플레이어의 친구가 확인할 수 있도록 하는 경우입니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item EzSubscribeRankingScore 등록한 구독 랭킹 스코어 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ); var result = await domain . PutSubscribeRankingAsync ( score : 100L , metadata : null ); var item = await result . ModelAsync (); var domain = gs2 . Ranking2 . Namespace ( namespaceName : \"namespace-0001\" ). SubscribeRankingModel ( rankingName : \"ranking-0001\" ). SubscribeRankingSeason ( season : 0 , userId : \"user-0001\" ); var future = domain . PutSubscribeRankingFuture ( score : 100L , metadata : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Ranking2 -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SubscribeRankingModel ( \"ranking-0001\" // rankingName ) -\u003e SubscribeRankingSeason ( 0 , // season \"user-0001\" // userId ); const auto Future = Domain -\u003e PutSubscribeRanking ( 100L // score // metadata ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . ranking2 . namespace_ ( \"namespace-0001\" ) . subscribe_ranking_model ( \"ranking-0001\" ) . subscribe_ranking_season ( 0 , null ) var async_result = await domain . put_subscribe_ranking ( 100 , # score null # metadata ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Ranking2 SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Ranking2 SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/ranking2/game_engine/"},{"content":"모델 EzRoom 룸 멀티플레이어 대전에서 실시간 통신을 처리하기 위한 전용 게임 서버 인스턴스를 나타냅니다. 룸 생성은 비동기로 이루어지며, 요청 후 시스템이 서버를 프로비저닝하고 인스턴스 준비가 완료되면 IP 주소, 포트, 암호화 키가 할당됩니다. 클라이언트는 접속을 시도하기 전에 생성 완료 알림을 기다리거나 폴링해야 합니다. 암호화 키는 게임 클라이언트와 릴레이 서버 간의 안전한 통신 채널을 확립하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ipAddress string ~ 128자 IP 주소 프로비저닝된 게임 서버의 IP 주소. 룸의 서버 인스턴스 준비가 완료된 후 시스템에 의해 자동으로 할당됩니다. 룸 생성 직후에는 이용할 수 없습니다. 최대 128자. port int 0 ~ 65535 대기 포트 프로비저닝된 게임 서버의 대기 포트 번호. 서버 인스턴스 준비가 완료된 후 IP 주소와 함께 자동으로 할당됩니다. 범위: 0~65535. encryptionKey string ~ 256자 암호화 키 게임 클라이언트와 릴레이 서버 간의 통신을 암호화하기 위한 키. 서버 인스턴스 준비가 완료된 후 IP 주소 및 포트와 함께 자동으로 할당됩니다. 클라이언트는 릴레이 서버를 통해 송수신하는 메시지의 암호화·복호화에 이 키를 사용해야 합니다. 최대 256자. 메서드 now 현재 서버 시각 취득 GS2 서버의 현재 시각을 Unix 타임스탬프(밀리초)로 반환합니다. 게임 클라이언트의 시계를 서버와 동기화하는 데 사용합니다. 예를 들어 카운트다운 타이머, 이벤트 시작·종료 시각, 쿨다운 기간을 정확히 표시할 때 유용합니다. 클라이언트 단말의 시계는 부정확하거나 조작될 수 있으므로, 서버 시각을 사용하면 모든 플레이어에게 일관된 타이밍을 표시할 수 있습니다. 주요 사용 방법: 게임 시작 시 클라이언트와 서버의 시각 차이를 계산하여 세션 동안 계속 그 차이를 적용 기간 한정 이벤트나 랭킹 기간의 정확한 “남은 시간” 표시 타이밍에 민감한 액션을 서버로 전송하기 전에 클라이언트 측에서 검증 Request 요청 파라미터: 없음 Result 타입 설명 timestamp long 현재 시각 Unix 시간·밀리초 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Realtime ; var result = await domain . NowAsync ( ); var timestamp = result . Timestamp ; var domain = gs2 . Realtime ; var future = domain . NowFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var timestamp = future . Result . Timestamp ; const auto Domain = Gs2 -\u003e Realtime ; const auto Future = Domain -\u003e Now ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); const auto Timestamp = Result -\u003e Timestamp ; getRoom 실시간 게임 룸의 접속 정보 취득 실시간 게임 서버 룸에 접속하는 데 필요한 정보를 취득합니다. IP 주소, 포트 번호, 암호화 키가 포함됩니다. 실시간 룸은 저지연 통신이 필요한 멀티플레이어 게임플레이에 사용됩니다. 예를 들어 액션 게임, 격투 게임, 협력 던전 등입니다. 실시간 룸을 사용하는 일반적인 흐름: 플레이어가 룸 생성을 요청합니다(별도의 API로 이루어지며 비동기로 처리됩니다) 룸 준비가 완료되면 참가 플레이어에게 푸시 알림이 전송됩니다 각 플레이어가 GetRoom을 호출하여 접속 정보(IP 주소, 포트, 암호화 키)를 취득합니다 게임 클라이언트가 이 정보를 사용하여 룸 서버에 접속하고 실시간 통신을 시작합니다 암호화 키는 클라이언트와 게임 서버 간의 통신을 보호하는 데 사용됩니다. 각 룸에는 고유한 키가 할당됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzRoom 룸 정보 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Realtime . Namespace ( namespaceName : \"namespace-0001\" ). Room ( roomName : \"room-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Realtime . Namespace ( namespaceName : \"namespace-0001\" ). Room ( roomName : \"room-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Realtime -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Room ( \"room-0001\" // roomName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . realtime . namespace_ ( \"namespace-0001\" ) . room ( \"room-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Realtime . Namespace ( namespaceName : \"namespace-0001\" ). Room ( roomName : \"room-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Realtime . Namespace ( namespaceName : \"namespace-0001\" ). Room ( roomName : \"room-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Realtime -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Room ( \"room-0001\" // roomName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Realtime :: Model :: FRoom \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . realtime . namespace_ ( \"namespace-0001\" ) . room ( \"room-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. 이벤트 핸들러 OnCreateNotification 룸 생성이 완료되었을 때 전송되는 푸시 알림 이름 타입 설명 namespaceName string 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot gs2 . Realtime . OnCreateNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var roomName = notification . RoomName ; }; gs2 . Realtime . OnCreateNotification += notification =\u003e { var namespaceName = notification . NamespaceName ; var roomName = notification . RoomName ; }; Gs2 -\u003e Realtime -\u003e OnCreateNotification (). AddLambda ([]( const auto Notification ) { const auto NamespaceName = Notification -\u003e NamespaceNameValue ; const auto RoomName = Notification -\u003e RoomNameValue ; }); ez . realtime . create_notification . connect ( func ( notification ): var namespace_name = notification . namespace_name var room_name = notification . room_name )","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Realtime SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Realtime SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/realtime/game_engine/"},{"content":"모델 EzTrigger 트리거 상대 이벤트 스케줄링의 기점을 정의하여 플레이어별 이벤트 기간을 구현합니다. 플레이어에게 트리거가 발동되면 유효 기간(expiresAt)이 설정됩니다. “relative” 스케줄 타입으로 설정된 이벤트는 트리거를 이름으로 참조하며, 해당 플레이어의 이벤트 기간은 트리거가 발동된 시각부터 유효 기간까지 지속됩니다. 트리거는 갱신할 수 있으며, 유효 기간이 지나면 TTL에 의해 자동으로 정리됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerId string ※ ~ 1024자 트리거 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. triggeredAt long ※ 현재 시각 트리거 발동 일시 이 트리거가 발동된 타임스탬프입니다. 상대 이벤트 스케줄링의 기준 시작점 역할을 합니다. 명시적으로 지정하지 않으면 현재 시각이 자동으로 설정됩니다. UNIX 시간(밀리초)으로 표현됩니다. expiresAt long  유효 기간 이 트리거가 만료되어 상대 이벤트 기간이 종료되는 타임스탬프입니다. 이 시각 이후 트리거는 만료된 것으로 간주되며(IsExpire가 true를 반환), 해당 플레이어에 대한 관련 상대 이벤트는 더 이상 유효하지 않습니다. 트리거 데이터는 만료 후 DynamoDB TTL에 의해 자동으로 정리됩니다. UNIX 시간(밀리초)으로 표현됩니다. EzEvent 이벤트 이벤트의 기간에는 절대 기간과 상대 기간의 2가지 종류가 있습니다. 절대 기간은 예를 들어 YYYY년 MM월 DD일 00:00(UTC) ~ YYYY년 MM월 DD일 23:59(UTC)와 같은 고정된 기간이며, 상대 기간은 트리거를 당긴 시점부터 24시간과 같이 게임 플레이어마다 다른 기간을 이벤트 기간으로 하는 것입니다. 이벤트에는 개최 기간뿐만 아니라 반복도 설정할 수 있게 되어 있어 이벤트 기간 중 월요일 10:00 ~ 11:00만을 이벤트 기간으로 하는 설정도 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scheduleType 문자열 열거형 enum {   “absolute”,   “relative” }  스케줄 타입 이벤트 기간을 정의하는 방식을 결정합니다. “absolute\"는 모든 플레이어에게 동일하게 적용되는 고정된 시작/종료 타임스탬프를 사용합니다. “relative\"는 플레이어별 트리거를 기점으로 사용하여, 개인화된 이벤트 기간을 구현합니다(예: 각 플레이어가 처음 로그인한 시점부터 24시간). 정의 설명 absolute 고정 기간 relative 플레이어별 기간 absoluteBegin long 절대 시작 일시 절대 스케줄링에서 이벤트 기간의 고정 시작 시각입니다. 모든 플레이어가 동일한 시작 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 과거부터 시작된 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. absoluteEnd long 절대 종료 일시 절대 스케줄링에서 이벤트 기간의 고정 종료 시각입니다. 모든 플레이어가 동일한 종료 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 종료되지 않는 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. relativeTriggerName string {scheduleType} == “relative” ※ ~ 128자 이벤트 시작 트리거 이름 게임 플레이어별로 이벤트 기간을 설정하는( relative ) 경우, 이벤트 시작의 기점이 되는 트리거의 이름을 지정합니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ※ scheduleType이(가) “relative” 이면 필수 EzRepeatSchedule 반복 스케줄 상태 특정 시점에서의 이벤트 반복 사이클의 현재 상태를 나타냅니다. 반복 횟수(사이클이 발생한 횟수), 현재 활성 윈도우의 시작·종료 시각, 전회 완료된 윈도우의 종료 시각, 그리고 다음 윈도우의 시작 시각을 포함합니다. 이 정보는 이벤트의 반복 설정과 현재 시각을 토대로 동적으로 계산됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 repeatCount int  0 ~ 2147483646 반복 횟수 현재 시각까지 완료된 반복 사이클의 횟수. 반복 윈도우가 종료될 때마다 증가합니다. 시즌제나 정기 이벤트의 사이클 진행 상황을 추적하는 데 사용할 수 있습니다. currentRepeatStartAt long 현재 반복 시작 일시 현재 활성 상태인 반복 윈도우의 시작 시각. 이벤트가 현재 활성 상태인 반복 윈도우에 있지 않은 경우 null 입니다. UNIX 시간(밀리초)으로 표현됩니다. currentRepeatEndAt long 현재 반복 종료 일시 현재 활성 상태인 반복 윈도우의 종료 시각. 이벤트가 현재 활성 상태인 반복 윈도우에 있지 않은 경우 null 입니다. UNIX 시간(밀리초)으로 표현됩니다. lastRepeatEndAt long 직전 반복 종료 일시 가장 최근에 완료된 반복 윈도우의 종료 시각. 아직 반복 윈도우가 종료되지 않은 경우 null 입니다. UNIX 시간(밀리초)으로 표현됩니다. nextRepeatStartAt long 다음 반복 시작 일시 다음 반복 윈도우의 시작 시각. 이벤트 기간 내에 다음 반복 윈도우가 없는 경우 null 입니다. UNIX 시간(밀리초)으로 표현됩니다. 메서드 getTrigger 특정 트리거의 상태 조회 이름을 지정하여 특정 트리거를 조회하고, 언제 활성화되었는지, 언제 만료되는지를 확인할 수 있습니다. 특정 트리거의 상태를 확인하는 데 사용합니다. 예를 들어 “first_login” 트리거가 아직 유효한지, 만료까지 남은 시간은 얼마인지 확인하여 “초보자 보너스 종료까지 남은 3일 12시간\"과 같이 관련 이벤트의 카운트다운을 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzTrigger 트리거 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Trigger ( triggerName : \"trigger1\" ); var item = await domain . ModelAsync (); var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Trigger ( triggerName : \"trigger1\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Trigger ( \"trigger1\" // triggerName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . schedule . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . trigger ( \"trigger1\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Trigger ( triggerName : \"trigger1\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Trigger ( triggerName : \"trigger1\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Trigger ( \"trigger1\" // triggerName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Schedule :: Model :: FTrigger \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . schedule . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . trigger ( \"trigger1\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listTriggers 플레이어의 유효한 트리거 목록 조회 플레이어에 대해 현재 유효한 모든 트리거를 조회합니다. 트리거는 상대 스케줄 이벤트를 활성화하기 위한 플레이어별 타이머입니다. 트리거가 “당겨지면”(활성화되면) 카운트다운이 시작되고, 해당 트리거에 연결된 이벤트가 플레이어에 대해 활성화됩니다. 예를 들어 “first_login” 트리거가 “7일간 초보자 보너스” 이벤트를 활성화하거나, “first_purchase” 트리거가 “24시간 감사 세일” 이벤트를 활성화할 수 있습니다. 각 트리거에는 유효 기간이 있으며, 기간이 만료되면 해당 플레이어에 대한 관련 이벤트도 종료됩니다. 플레이어에게 현재 어떤 트리거가 유효한지 확인하는 데 사용합니다. 예를 들어 상태 화면에서 “초보자 보너스: 유효(남은 5일 후 만료)“와 같이 표시하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 트리거 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . TriggersAsync ( ). ToListAsync (); var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Triggers ( ); List EzTrigger \u003e items = new List EzTrigger \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Triggers ( ); TArray Gs2 :: UE5 :: Schedule :: Model :: FEzTriggerPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeTriggers ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeTriggers ( callbackId ); var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeTriggers ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeTriggers ( callbackId ); const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeTriggers ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeTriggers ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getEvent 특정 이벤트의 스케줄 상태 조회 이름을 지정하여 특정 이벤트를 플레이어에 대한 현재 스케줄 상태와 함께 조회합니다. 응답에는 이벤트가 현재 개최 중인지(inSchedule), 시작·종료 시각, 해당하는 경우 반복 스케줄 정보가 포함됩니다. 상대 스케줄 이벤트의 경우, 종료 시각은 플레이어의 트리거를 기반으로 계산되므로, 같은 이벤트라도 플레이어에 따라 종료 시각이 다를 수 있습니다. 특정 이벤트가 개최 중인지 확인하고 남은 시간을 표시하는 데 사용합니다. 예를 들어 “여름 이벤트: 남은 3일”, “초보자 보너스: 남은 12시간\"과 같이 카운트다운 타이머와 함께 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. eventName string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 item EzEvent 이벤트 inSchedule bool 현재 이벤트 기간 중인지 여부 scheduleStartAt long 이벤트 기간 시작 시각 scheduleEndAt long 이벤트 기간 종료 시각 이벤트 종류가 absolute 인 경우 EventModel 의 absoluteEnd 가 저장됩니다. 이벤트 종류가 relative 인 경우 scheduleEndAt 에는 트리거의 유효 기간 또는 EventModel 의 absoluteEnd 중 더 빨리 종료되는 쪽이 저장됩니다. repeatSchedule EzRepeatSchedule 반복 정보 isGlobalSchedule bool 이벤트가 글로벌 스케줄인지 여부 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Event ( eventName : \"event-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Event ( eventName : \"event-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Event ( \"event-0001\" // eventName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . schedule . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . event ( \"event-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Event ( eventName : \"event-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Event ( eventName : \"event-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Event ( \"event-0001\" // eventName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Schedule :: Model :: FEvent \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . schedule . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . event ( \"event-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listEvents 플레이어의 현재 개최 중인 이벤트 목록 조회 이 플레이어에 대해 현재 개최 중인 모든 이벤트를 조회합니다. 이벤트에는 2가지 종류가 있습니다: 절대 스케줄 이벤트: 모든 플레이어에게 공통되는 고정 일시 이벤트 (예: “크리스마스 이벤트: 12월 24일 25일”, “여름 세일: 7월 1일 31일”) 상대 스케줄 이벤트: 트리거가 활성화된 시점부터 플레이어별로 시작되는 이벤트 (예: 최초 로그인부터 시작되는 “7일간 초보자 보너스”, 레벨 10 도달부터 시작되는 “24시간 한정 플래시 세일”) 현재 개최 기간 중인 이벤트만 반환됩니다. 지금 어떤 이벤트가 개최 중인지 플레이어에게 표시할 때 사용합니다. 예를 들어 홈 화면에 이벤트 배너를 표시하거나 이벤트 전용 UI 요소를 활성화하는 경우 등에 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession Result 타입 설명 items List 이벤트 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . EventsAsync ( ). ToListAsync (); var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Events ( ); List EzEvent \u003e items = new List EzEvent \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Events ( ); TArray Gs2 :: UE5 :: Schedule :: Model :: FEzEventPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeEvents ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeEvents ( callbackId ); var domain = gs2 . Schedule . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeEvents ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeEvents ( callbackId ); const auto Domain = Gs2 -\u003e Schedule -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeEvents ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeEvents ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Schedule SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Schedule SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/schedule/game_engine/"},{"content":"모델 EzBallot 투표용지 특정 매치 세션에 대해 각 플레이어에게 발급되는 투표권입니다. 대전 컨텍스트(시즌, 세션, 참가 인원 수)와 플레이어의 사용자 ID를 포함합니다. 투표용지는 서버에 의해 서명되어 플레이어에게 반환되며, 플레이어는 게임 결과를 기입하여 WrittenBallot으로 다시 제출합니다. 투표 집계 시, 모든 참가자의 투표용지를 다수결로 비교하여 결과 조작을 방지합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID seasonName string  ~ 128자 시즌 이름 이 대전의 레이팅 계산에 사용되는 시즌 모델의 이름. 이 대전에 적용되는 티어 구조와 포인트 변동 규칙을 정의하는 SeasonModel을 참조합니다. sessionName string  ~ 128자 세션 이름 이 투표용지가 속한 매치 세션의 이름. 동일한 세션 내의 모든 투표용지는 투표 프로세스에서 함께 집계됩니다. numberOfPlayer int  2 ~ 10 참가 인원 수 이 대전의 총 참가자 수. 투표 완료 여부 판정에 사용됩니다. 결과 확정에는 전체 투표용지의 수집(또는 과반수 성립)이 필요합니다. 유효 범위: 2~10. EzSeasonModel 시즌 모델 시즌 기간 동안 적용되는 티어 구조와 포인트 변동 규칙을 정의하는 마스터 데이터입니다. 각 티어별 포인트 변동 범위·참가료·랭크업 보너스를 설정하고, 포인트 관리에 사용할 Experience 모델을 지정합니다. 실제 포인트 및 티어의 사용자 데이터는 GS2-Experience에 의해 관리됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tiers List  1 ~ 100 items 티어 모델 목록 시즌의 랭킹 사다리를 구성하는 티어 정의의 순서가 있는 목록. 각 티어는 고유한 포인트 변동 규칙(참가료, 최소/최대 변동량, 승급 보너스)을 정의합니다. 플레이어는 GS2-Experience에서 관리되는 누적 포인트에 따라 티어를 진행합니다. 최소 1개 티어, 최대 100개 티어. experienceModelId string  ~ 1024자 경험치 모델 ID 시즌 포인트와 티어 진행 관리에 사용되는 GS2-Experience 경험치 모델의 GRN. 경험치 모델의 랭크 임계값이 티어 경계를 결정하며, 경험치 값은 플레이어의 현재 시즌 포인트를 나타냅니다. 대전 결과에 따른 포인트 변동은 이 경험치 모델에 적용됩니다. EzTierModel 티어 모델 티어 모델은 시즌 내 각 티어의 포인트 변동 규칙을 정의하는 모델입니다. 순위에 따른 포인트 변동 범위, 참가료, 승급 시 보너스를 설정합니다. 포인트의 실제 데이터는 GS2-Experience에 의해 관리되지만, 그 증감 로직은 TierModel의 설정에 따라 결정됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. raiseRankBonus int  0 ~ 10000 랭크 승급 보너스 플레이어가 이 티어로 승급했을 때 가산되는 보너스 포인트로, 즉각적인 강등을 방지하는 완충 역할을 합니다. 예를 들어 100으로 설정하면, 승급 기준점보다 100포인트 많은 상태로 새 티어를 시작합니다. 유효 범위: 0~10000. minimumChangePoint int  -99999999 ~ -1 최소 변동 포인트 한 번의 대전 결과로 발생할 수 있는 최소(가장 음수인) 포인트 변동량으로, 일반적으로 최악의 패배 시 값을 나타냅니다. 음수 값이어야 합니다. 패배한 플레이어의 실제 포인트 변동은 이 값과 0 사이가 됩니다. 유효 범위: -99999999~-1. maximumChangePoint int  1 ~ 99999999 최대 변동 포인트 한 번의 대전 결과로 발생할 수 있는 최대(가장 양수인) 포인트 변동량으로, 일반적으로 최고의 승리 시 값을 나타냅니다. 양수 값이어야 합니다. 승리한 플레이어의 실제 포인트 변동은 0과 이 값 사이가 됩니다. 유효 범위: 1~99999999. EzGameResult 대전 결과 대전에서 한 플레이어의 결과를 나타내는 모델입니다. 플레이어의 사용자 ID와 순위를 보유합니다. WrittenBallot 내에서 모든 참가자의 결과를 보고하는 데 사용됩니다. 투표 집계 시, 제출된 모든 투표용지의 대전 결과를 다수결로 비교하여 공식 결과를 결정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rank int  0 ~ 2147483646 순위 대전에서 이 플레이어의 최종 순위. 1은 1위(승자)를 나타냅니다. 순위 값은 TierModel의 설정에 따라 포인트 변동량을 결정하는 데 사용됩니다. userId string  ~ 128자 사용자ID EzSignedBallot 서명된 투표용지 GS2-Key를 사용하여 서버가 암호 서명한 투표용지입니다. 서명을 통해 투표용지의 내용(시즌, 세션, 플레이어, 참가 인원 수)이 변조되지 않았음을 보장합니다. 투표 제출 시, 서버 측에서 서명된 투표용지를 검증한 후 게임 결과가 수락됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 body string  ~ 1024자 서명 대상 데이터 서명 대상이 되는 투표용지 데이터의 직렬화된 JSON 표현. 투표용지의 내용(사용자 ID, 시즌 이름, 세션 이름, 참가 인원 수)을 서명과 대조할 수 있는 형식으로 포함합니다. 최대 1024자. signature string  ~ 256자 서명 투표용지 본문에 대해 GS2-Key가 생성한 암호 서명. 투표용지가 서버에 의해 발급되었으며 클라이언트에 의해 변경되지 않았음을 검증하는 데 사용됩니다. Base64 인코딩, 최대 256자. EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getSeasonModel 특정 시즌 레이팅 정의의 상세 정보를 가져오기 시즌 이름을 지정하여, 티어 설정 및 규칙을 포함한 상세 정보를 가져옵니다. 응답에는 다음이 포함됩니다: 티어 정의: 레이팅 티어 목록(예: 브론즈 0포인트, 실버 1000포인트, 골드 2500포인트)과 랭크업 시 부여되는 보너스 포인트 경험치 모델 참조: 레이팅 값의 저장 및 관리에 사용되는 GS2-Experience 모델 도전 기간 이벤트: GS2-Schedule 이벤트와 연계되어 있는 경우, 경쟁 시즌이 유효하여 레이팅 대전에 참가할 수 있는 기간 랭크전 화면에서 시즌의 상세 정보를 표시할 때 사용합니다. 예를 들어 플레이어의 현재 티어, 다음 티어까지 필요한 포인트, 시즌이 현재 활성 상태인지 여부를 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item EzSeasonModel 시즌 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). SeasonModel ( seasonName : \"mode1\" ); var item = await domain . ModelAsync (); var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). SeasonModel ( seasonName : \"mode1\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SeasonModel ( \"mode1\" // seasonName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) . season_model ( \"mode1\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). SeasonModel ( seasonName : \"mode1\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). SeasonModel ( seasonName : \"mode1\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e SeasonModel ( \"mode1\" // seasonName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: SeasonRating :: Model :: FSeasonModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) . season_model ( \"mode1\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listSeasonModels 시즌 레이팅 정의의 목록을 가져오기 네임스페이스에 정의된 모든 시즌 모델을 가져옵니다. 각 시즌 모델은 독립된 경쟁 레이팅 시스템을 나타냅니다. 예를 들어 “랭크 배틀 시즌 1”, “아레나 레이팅”, “토너먼트 레이팅” 등입니다. 시즌 레이팅은 플레이어가 대전을 진행하고, 승패에 따라 레이팅이 오르내리는 시스템입니다. 레이팅은 GS2-Experience 를 사용해 저장되므로, 레이팅 값은 경험치처럼 취급됩니다. 증감하며, 랭크업(예: 브론즈 → 실버 → 골드)을 트리거할 수 있습니다. 각 시즌 모델에는 다음이 정의되어 있습니다: 레이팅 티어(예: 브론즈, 실버, 골드, 플래티넘)와 승급 임계값 레이팅 값을 저장하는 GS2-Experience 모델 선택적으로, 경쟁 시즌이 유효한 기간을 제어하는 GS2-Schedule 이벤트(도전 기간) 게임의 랭크전 화면에서 이용 가능한 경쟁 모드 목록을 표시할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 시즌 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . SeasonModelsAsync ( ). ToListAsync (); var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . SeasonModels ( ); List EzSeasonModel \u003e items = new List EzSeasonModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e SeasonModels ( ); TArray Gs2 :: UE5 :: SeasonRating :: Model :: FEzSeasonModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSeasonModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSeasonModels ( callbackId ); var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeSeasonModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeSeasonModels ( callbackId ); const auto Domain = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeSeasonModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeSeasonModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. createVote 대전 결과 보고용 서명된 투표 용지를 작성한다 플레이어가 대전 결과를 보고하는 데 사용할 서명된 투표 용지를 생성합니다. 이는 대전 결과 보고 플로우의 첫 번째 단계입니다. 대전에 참가한 각 플레이어는 자신의 투표 용지를 작성해야 합니다. 대전 결과를 보고하는 전체 흐름: 대전이 종료되고 각 플레이어의 게임 클라이언트가 CreateVote 를 호출하여 서명된 투표 용지를 가져옵니다 각 플레이어가 투표 용지와 대전 결과를 Vote 로 전송합니다(개별 투표) — 또는 승리한 쪽이 모든 투표 용지를 모아 VoteMultiple 로 한 번에 전송합니다(즉시 결과 반영) 시스템이 투표 용지를 검증하고, 다수결로 결과를 결정하며, 각 플레이어의 레이팅을 갱신합니다 파라미터: seasonName: 이 대전이 어느 시즌 레이팅 시스템에 속하는지(예: “ranked-battle-season-1”) sessionName: 이 특정 대전을 식별하는 고유 ID(같은 대전의 모든 플레이어가 공유) numberOfPlayer: 대전에 참가한 플레이어 수(2~10명) keyId: 투표 용지 서명에 사용하는 암호화 키(변조 방지) 반환되는 투표 용지에는 바디(데이터)와 시그니처(변조되지 않았다는 증명)가 포함됩니다. 투표 시에는 둘 다 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. sessionName string  UUID ~ 128자 세션 이름 세션 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. gameSession GameSession  GameSession numberOfPlayer int  2 ~ 10 참가 인원 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzBallot 투표용지 body string 서명 대상 데이터 signature string 서명 데이터 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( seasonName : \"season-0001\" , sessionName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( seasonName : \"season-0001\" , sessionName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Ballot ( \"season-0001\" , // seasonName \"gathering-0001\" , // sessionName 4 , // numberOfPlayer \"key-0001\" // keyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ballot ( \"season-0001\" , \"gathering-0001\" , 4 , \"key-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( seasonName : \"season-0001\" , sessionName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Ballot ( seasonName : \"season-0001\" , sessionName : \"gathering-0001\" , numberOfPlayer : 4 , keyId : \"key-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Ballot ( \"season-0001\" , // seasonName \"gathering-0001\" , // sessionName 4 , // numberOfPlayer \"key-0001\" // keyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: SeasonRating :: Model :: FBallot \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . ballot ( \"season-0001\" , \"gathering-0001\" , 4 , \"key-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. vote 자신의 투표용지를 제출하여 대전 결과에 투표합니다 (개별 투표) 각 플레이어가 자신의 서명된 투표용지와 대전 결과(누가 이기고 누가 졌는지)를 함께 제출합니다. 대전 결과를 보고하는 두 가지 방법 중 하나로, 각 플레이어가 독립적으로 투표하는 단순한 방식입니다. 개별 투표의 작동 방식: 대전이 종료된 후, 각 플레이어가 CreateVote를 호출하여 서명된 투표용지를 받은 다음 Vote를 호출하여 제출합니다 시스템은 첫 투표로부터 최대 5분간 모든 플레이어의 투표를 기다립니다 모든 플레이어가 투표를 완료하거나 5분이 경과하면 시스템은 다수결로 결과를 결정합니다 투표가 동수인 경우(예: 2명이 “플레이어 A 승리”, 2명이 “플레이어 B 승리\"라고 응답), 결과는 기본적으로 폐기됩니다(스크립트로 변경 가능) 결정된 결과에 따라 각 플레이어의 레이팅 포인트가 조정됩니다 이 방식은 구현이 간단하지만 지연이 발생합니다 — 모든 투표가 완료되거나 5분의 대기 시간이 지날 때까지 결과가 반영되지 않습니다. 즉시 결과를 반영하고 싶다면, 승리한 측이 모든 투표용지를 모아 한 번에 제출하는 VoteMultiple을 대신 사용하세요. 파라미터: ballotBody / ballotSignature: CreateVote로 획득한 서명된 투표용지 gameResults: 대전 결과 — 참가 플레이어와 순위(1위 = 승자, 2위 = 패자 등) 목록 keyId: 투표용지 서명을 검증하는 데 사용되는 암호화 키 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ballotBody string  ~ 1024자 투표용지의 서명 대상 데이터 ballotSignature string  ~ 256자 투표용지의 서명 gameResults List 0 ~ 10 items 대전 결과 대전을 진행한 플레이어 그룹에 속한 사용자 ID 목록 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzBallot 투표용지 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . VoteAsync ( ballotBody : \"ballotBody...\" , ballotSignature : \"ballotSignature...\" , gameResults : new List Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . VoteFuture ( ballotBody : \"ballotBody...\" , ballotSignature : \"ballotSignature...\" , gameResults : new List Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e Vote ( \"ballotBody...\" , // ballotBody \"ballotSignature...\" , // ballotSignature [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 1 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0001\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0002\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0003\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 3 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0004\" )) ); return v ; }(), // gameResults \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) var async_result = await domain . vote ( \"ballotBody...\" , # ballot_body \"ballotSignature...\" , # ballot_signature [ Gs2SeasonRatingEzGameResult . new () . with_rank ( 1 ) . with_user_id ( \"user-0001\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0002\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0003\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 3 ) . with_user_id ( \"user-0004\" ), ], # game_results \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result voteMultiple 모든 투표용지를 모아 대전 결과를 한 번에 제출합니다 (즉시 결과 반영) 승리한 측의 대표 플레이어가 모든 참가자의 서명된 투표용지를 모아 대전 결과와 함께 한 번에 제출합니다. 이 방식은 결과가 즉시 반영됩니다. 5분간의 투표 대기 시간이 없습니다. 승리한 측이 투표용지를 모아야 하는 이유: 패배한 측은 “우리가 이겼다\"고 거짓말할 유인이 있지만, 승리한 측은 승리에 대해 거짓말할 이유가 없습니다 일부 패배 플레이어가 투표용지를 제출하지 않더라도, 과반수의 투표용지만 모이면 결과를 확정할 수 있습니다 예를 들어 2대2 대전에서 4명 중 3명이 “팀 A 승리\"라는 투표용지를 제출하면 과반수로 충분합니다 일반적인 구현 방법: 대전이 종료되면 각 플레이어가 CreateVote를 호출하여 서명된 투표용지를 받습니다 각 플레이어는 게임의 통신 경로(예: 실시간 서버, P2P)를 통해 승리한 측의 대표 플레이어에게 투표용지(본문 + 서명)를 전송합니다 대표 플레이어가 수집한 모든 투표용지와 대전 결과를 VoteMultiple로 제출합니다 시스템이 즉시 투표용지를 검증하고 결과를 결정하여 모든 플레이어의 레이팅을 업데이트합니다 파라미터: signedBallots: 수집한 모든 서명된 투표용지 목록(각 플레이어의 본문 + 서명 쌍) gameResults: 대전 결과 — 참가 플레이어와 순위 목록 keyId: 투표용지 서명을 검증하는 데 사용되는 암호화 키 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. signedBallots List 0 ~ 10 items 서명이 첨부된 투표용지 리스트 gameResults List 0 ~ 10 items 투표 내용. 대전을 진행한 플레이어 그룹 1에 속한 사용자 ID 리스트 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item EzBallot 투표용지 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ); var result = await domain . VoteMultipleAsync ( signedBallots : new List Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot \u003e { new Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, }, gameResults : new List Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . SeasonRating . Namespace ( namespaceName : \"namespace-0001\" ); var future = domain . VoteMultipleFuture ( signedBallots : new List Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot \u003e { new Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzSignedBallot () { Body = \"aaa\" , Signature = \"bbb\" , }, }, gameResults : new List Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult \u003e { new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 1 , UserId = \"user-0001\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0002\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 2 , UserId = \"user-0003\" , }, new Gs2 . Unity . Gs2SeasonRating . Model . EzGameResult () { Rank = 3 , UserId = \"user-0004\" , }, }, keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e SeasonRating -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto Future = Domain -\u003e VoteMultiple ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: SeasonRating :: Model :: FEzSignedBallot \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzSignedBallot \u003e () -\u003e WithBody ( TOptional FString \u003e ( \"aaa\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"bbb\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzSignedBallot \u003e () -\u003e WithBody ( TOptional FString \u003e ( \"aaa\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"bbb\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzSignedBallot \u003e () -\u003e WithBody ( TOptional FString \u003e ( \"aaa\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"bbb\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzSignedBallot \u003e () -\u003e WithBody ( TOptional FString \u003e ( \"aaa\" )) -\u003e WithSignature ( TOptional FString \u003e ( \"bbb\" )) ); return v ; }(), // signedBallots [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 1 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0001\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0002\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 2 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0003\" )) ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: SeasonRating :: Model :: FEzGameResult \u003e () -\u003e WithRank ( TOptional int32 \u003e ( 3 )) -\u003e WithUserId ( TOptional FString \u003e ( \"user-0004\" )) ); return v ; }(), // gameResults \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . season_rating . namespace_ ( \"namespace-0001\" ) var async_result = await domain . vote_multiple ( [ Gs2SeasonRatingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2SeasonRatingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2SeasonRatingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), Gs2SeasonRatingEzSignedBallot . new () . with_body ( \"aaa\" ) . with_signature ( \"bbb\" ), ], # signed_ballots [ Gs2SeasonRatingEzGameResult . new () . with_rank ( 1 ) . with_user_id ( \"user-0001\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0002\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 2 ) . with_user_id ( \"user-0003\" ), Gs2SeasonRatingEzGameResult . new () . with_rank ( 3 ) . with_user_id ( \"user-0004\" ), ], # game_results \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-SeasonRating SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-SeasonRating SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/season_rating/game_engine/"},{"content":"모델 EzSerialKey 시리얼 코드 발급된 시리얼 코드는 한 번만 사용할 수 있습니다. 시리얼 코드는 “RPCLP-FP7N-NCDMJ-FLVA-IRI4\"와 같은 형식으로 발급되며 데이터 길이는 변경할 수 없습니다. 시리얼 코드 내에는 캠페인 종류에 대한 정보도 포함되어 있으며, 시리얼 코드를 사용할 때는 네임스페이스만 지정하면 사용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 campaignModelName string  ~ 128자 캠페인 이름 이 시리얼 코드가 속한 캠페인 모델의 이름입니다. 캠페인 정보는 시리얼 코드 자체에 포함되어 있으므로 코드를 사용할 때는 네임스페이스만 지정하면 됩니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. status 문자열 열거형 enum {   “ACTIVE”,   “USED”,   “INACTIVE” } “ACTIVE” 상태 이 시리얼 코드의 현재 사용 상태입니다. 사용자가 소비하면 ACTIVE에서 USED로 전환됩니다. 이중 사용을 방지하기 위해 낙관적 잠금(optimistic locking)으로 보호됩니다. INACTIVE 상태의 코드는 사용할 수 없습니다. 정의 설명 ACTIVE 사용 가능 USED 사용됨 INACTIVE 비활성(사용 불가) EzCampaignModel 캠페인 모델 캠페인 모델은 캠페인을 정의하고 시리얼 코드와 연결하여 관리하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 캠페인 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. enableCampaignCode bool false 캠페인 코드에 의한 교환을 허용할지 여부 활성화하면 개별 시리얼 코드가 아닌 공통 캠페인 코드(캠페인 이름)를 사용하여 보상을 교환할 수 있게 됩니다. 이를 통해 하나의 코드를 여러 사용자가 사용할 수 있습니다. 메서드 getCampaignModel 특정 시리얼 코드 캠페인의 상세 정보 조회 캠페인 이름을 지정하여 설정을 포함한 상세 정보를 조회합니다. 캠페인 모델은 동일한 목적과 설정을 공유하는 시리얼 코드의 그룹을 정의합니다. 예를 들어 “출시 기념 코드”, “잡지 프로모션 코드”, “이벤트 배포 코드” 등을 각각 별도의 캠페인으로 관리할 수 있습니다. 응답에는 다음이 포함됩니다: 캠페인 이름과 메타데이터 캠페인이 현재 활성화되어 코드 교환을 허용하고 있는지 여부 코드 입력 화면을 표시하기 전에 캠페인의 상세 정보를 확인할 때 사용합니다. 예를 들어 플레이어에게 시리얼 코드를 입력하게 하기 전에 캠페인이 활성화되어 있는지 확인할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 Result 타입 설명 item EzCampaignModel 캠페인 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). CampaignModel ( campaignModelName : \"campaign-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). CampaignModel ( campaignModelName : \"campaign-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e SerialKey -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CampaignModel ( \"campaign-0001\" // campaignModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . serial_key . namespace_ ( \"namespace-0001\" ) . campaign_model ( \"campaign-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). CampaignModel ( campaignModelName : \"campaign-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). CampaignModel ( campaignModelName : \"campaign-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e SerialKey -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e CampaignModel ( \"campaign-0001\" // campaignModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: SerialKey :: Model :: FCampaignModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . serial_key . namespace_ ( \"namespace-0001\" ) . campaign_model ( \"campaign-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. get 시리얼 코드의 상태 확인 특정 시리얼 코드의 상세 정보를 조회합니다. 사용 여부, 어떤 캠페인에 속하는지 등의 정보가 포함됩니다. 코드를 교환하기 전후에 상태를 확인할 때 사용합니다. 예를 들어: 플레이어가 이미 사용된 코드를 입력했을 때 “이 코드는 이미 사용되었습니다\"라고 표시 플레이어가 교환을 확정하기 전에 캠페인 정보(코드로 얻을 수 있는 보상)를 표시 고객 지원 목적으로 코드를 조회 코드는 “XXXXX-XXXX-XXXXX-XXXX-XXXXX\"와 같은 형식입니다. 응답에는 시리얼 코드의 상세 정보와 관련된 캠페인 모델이 포함됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. Result 타입 설명 item EzSerialKey 시리얼 코드 campaignModel EzCampaignModel 캠페인 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). SerialKey ( serialKeyCode : \"code-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). SerialKey ( serialKeyCode : \"code-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e SerialKey -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e SerialKey ( \"code-0001\" // serialKeyCode ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . serial_key . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . serial_key ( \"code-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). SerialKey ( serialKeyCode : \"code-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). User ( userId : \"user-0001\" ). SerialKey ( serialKeyCode : \"code-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e SerialKey -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e User ( \"user-0001\" // userId ) -\u003e SerialKey ( \"code-0001\" // serialKeyCode ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: SerialKey :: Model :: FSerialKey \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . serial_key . namespace_ ( \"namespace-0001\" ) . user ( \"user-0001\" ) . serial_key ( \"code-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. useSerialCode 시리얼 코드 교환 시리얼 코드를 사용(소비)하여 현재 플레이어가 교환한 것으로 표시합니다. 한 번 사용된 코드는 누구도 다시 사용할 수 없습니다. 게임 내 “시리얼 코드 입력” 기능에서 사용하는 메인 API입니다. 일반적인 흐름은 다음과 같습니다: 플레이어가 게임 내 “코드 교환” 화면을 연다 플레이어가 시리얼 코드를 입력한다(프로모션 카드, 이메일, 웹사이트 등에서 얻은 것) 게임이 입력된 코드로 UseSerialCode를 호출한다 성공하면 코드가 사용됨 상태가 된다 — 보상 지급 시스템과 조합하여 플레이어에게 보상을 지급한다 코드가 이미 사용된 경우 “사용됨” 오류가 반환된다 코드가 존재하지 않는 경우 “코드를 찾을 수 없음” 오류가 반환된다 주요 사용 사례: 상품이나 잡지에 동봉되는 프로모션 코드 이벤트나 SNS를 통해 배포되는 기프트 코드 사전 등록 특전 코드 콜라보레이션 캠페인 코드 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. Result 타입 설명 item EzSerialKey 시리얼 코드 campaignModel EzCampaignModel 캠페인 모델 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 AlreadyUsedException BadRequestException 지정된 시리얼 코드는 이미 사용되었습니다 CodeNotFoundException NotFoundException 지정된 시리얼 코드는 존재하지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SerialKey ( serialKeyCode : \"code-0001\" ); var result = await domain . UseSerialCodeAsync ( code : \"code-0001\" ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2SerialKey . Exception . AlreadyUsedException e ) { // The specified serial code has already been used. } catch ( Gs2 . Gs2SerialKey . Exception . CodeNotFoundException e ) { // The specified serial code does not exist. } var domain = gs2 . SerialKey . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). SerialKey ( serialKeyCode : \"code-0001\" ); var future = domain . UseSerialCodeFuture ( code : \"code-0001\" ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2SerialKey . Exception . AlreadyUsedException ) { // The specified serial code has already been used. } if ( future . Error is Gs2 . Gs2SerialKey . Exception . CodeNotFoundException ) { // The specified serial code does not exist. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e SerialKey -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e SerialKey ( \"code-0001\" // serialKeyCode ); const auto Future = Domain -\u003e UseSerialCode ( \"code-0001\" // code ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: SerialKey :: Error :: FAlreadyUsedError :: Class )) { // The specified serial code has already been used. } if ( e -\u003e IsChildOf ( Gs2 :: SerialKey :: Error :: FCodeNotFoundError :: Class )) { // The specified serial code does not exist. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . serial_key . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . serial_key ( \"code-0001\" ) var async_result = await domain . use_serial_code ( \"code-0001\" # code ) if async_result . error != null : if async_result . error is Gs2SerialKeyAlreadyUsedException : # 지정된 시리얼 코드는 이미 사용되었습니다 pass if async_result . error is Gs2SerialKeyCodeNotFoundException : # 지정된 시리얼 코드는 존재하지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-SerialKey SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-SerialKey SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/serial_key/game_engine/"},{"content":"모델 EzShowcase 진열대 진열대 에는 진열할 상품을 정의할 수 있습니다. 또한 진열대 의 상품 판매 기간을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. displayItems List [] 1 ~ 1000 items 진열할 상품 리스트 이 진열대에 진열되는 상품의 리스트입니다. 각 진열 상품은 단일 상품 또는 상품 그룹 중 하나입니다. 판매 기간 이벤트가 종료되었거나 유효하지 않은 상품은 진열대 조회 시 자동으로 필터링됩니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 연관된 GS2-Schedule 이벤트 기간 중에만 진열대를 이용할 수 있습니다. 이벤트가 유효하지 않은 경우, 진열대는 비어 있는 상태로 반환됩니다. EzDisplayItem 진열 상품 진열대에 표시되는 상품입니다. 단일 상품 또는 상품 그룹 중 하나를 참조할 수 있습니다. 각 진열 상품에는 진열대 전체의 판매 기간과는 독립적으로 GS2-Schedule 이벤트에 의한 개별 판매 기간을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 displayItemId string  UUID ~ 128자 진열 상품 ID 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. type 문자열 열거형 enum {   “salesItem”,   “salesItemGroup” }  종류 표시할 상품의 종류입니다. “salesItem\"은 고정된 대가와 보상을 가진 단일 상품입니다. “salesItemGroup\"은 여러 상품을 순서대로 평가하는 상품 그룹으로, 단계별 가격 인상이나 초회 한정 할인 등에 사용됩니다. 정의 설명 salesItem 상품 salesItemGroup 상품 그룹 salesItem EzSalesItem {type} == “salesItem” ※ 상품 ※ type이(가) “salesItem” 이면 필수 salesItemGroup EzSalesItemGroup {type} == “salesItemGroup” ※ 상품 그룹 ※ type이(가) “salesItemGroup” 이면 필수 EzRandomDisplayItem 랜덤 진열대에 진열된 상품 특정 사용자에게 랜덤 진열대에서 추첨·표시된 상품을 나타냅니다. 현재 로테이션 기간에서의 상품 대가, 보상 및 구매 횟수 추적 정보를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 128자 랜덤 진열 상품명 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 목록 consumeActions List [] 0 ~ 10 items 소비 액션 목록 acquireActions List [] 1 ~ 100 items 입수 액션 목록 currentPurchaseCount int  1 ~ 2147483646 현재 구매 횟수 현재 로테이션 기간 중에 이 상품이 구매된 횟수입니다. 구매할 때마다 증가하며, 로테이션 기간이 종료되면 리셋됩니다. maximumPurchaseCount int  1 ~ 2147483646 최대 구매 횟수 현재 로테이션 기간 중에 이 상품을 구매할 수 있는 최대 횟수입니다. currentPurchaseCount가 이 값에 도달하면 다음 로테이션까지 구매할 수 없게 됩니다. EzSalesItem 상품 상품을 구매하기 위해 필요한 대가와, 상품을 구매했을 때 얻을 수 있는 보상을 설정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 이름 상품 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 구매 전에 실행되는 전제 조건 체크입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 구매 자격 조건 체크에 사용할 수 있습니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 구매 대가로 리소스를 소비하는 액션입니다. 상품 그룹의 구매 횟수 제어를 위해 GS2-Limit의 CountUp 액션을 포함할 수 있습니다. acquireActions List [] 1 ~ 100 items 획득 액션 리스트 구매 보상으로 리소스를 부여하는 액션입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. EzSalesItemGroup 상품 그룹 상품 그룹은 진열대에 진열하기 위한 엔티티입니다. 상품 그룹에는 여러 상품을 소속시킬 수 있으며, 소속된 상품의 앞에서부터 순서대로 구매 가능한지를 판정하여 가장 먼저 구매 가능하다고 판정된 상품이 실제로 진열됩니다. 최초 1회만 할인되는 상품이나, 스텝업 가챠처럼 구매 횟수에 따라 상품 내용이 변화하는 구조에 사용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. salesItems List [] 2 ~ 10 items 상품 그룹에 포함할 상품 이 그룹 내 상품의 순서가 지정된 리스트입니다. GS2-Limit 카운터를 사용하여 앞에서부터 순서대로 구매 가능한지를 판정하고, 가장 먼저 구매 가능하다고 판정된 상품이 표시됩니다. 어느 것도 해당하지 않는 경우, 리스트의 마지막 상품이 폴백으로 사용됩니다. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 트랜잭션 템플릿에서 치환되는 변수명입니다. 획득 액션 파라미터 내의 플레이스홀더에 대응합니다. value string ~ 51200자 값 트랜잭션 템플릿 내의 대응하는 변수명에 치환되는 값입니다. EzConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 buy 쇼케이스의 상품 구매하기 쇼케이스에서 특정 상품을 구매합니다. 플레이어가 상품을 구매하면 시스템이 구매 흐름 전체를 자동으로 처리합니다. 조건 확인(예: 플레이어 레벨), 비용 소비(예: 젬 100개), 보상 부여(예: 레어 검)가 모두 자동으로 이루어집니다. 이 모든 처리는 하나의 트랜잭션에서 이루어지므로, 결제만 이루어지고 아이템이 지급되지 않는 상황은 발생하지 않습니다. 플레이어가 상점 상품의 “구매” 버튼을 탭했을 때 사용합니다. 예를 들어 “스타터 팩\"을 젬 500개로 구매하여 스태미나 포션 10개와 골드 상자 1개를 받는 처리에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. gameSession GameSession  GameSession displayItemId string  UUID ~ 128자 진열 상품 ID 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. quantity int 1 1 ~ 1000 구매 수량 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzSalesItem 상품 transactionId string 발행된 트랜잭션 ID stampSheet string 구매 처리를 실행하는 데 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Showcase ( showcaseName : \"showcase-0001\" ). DisplayItem ( displayItemId : \"display-item-0001\" ); var result = await domain . BuyAsync ( quantity : null , config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Showcase ( showcaseName : \"showcase-0001\" ). DisplayItem ( displayItemId : \"display-item-0001\" ); var future = domain . BuyFuture ( quantity : null , config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Showcase ( \"showcase-0001\" // showcaseName ) -\u003e DisplayItem ( \"display-item-0001\" // displayItemId ); const auto Future = Domain -\u003e Buy ( // quantity // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . showcase ( \"showcase-0001\" ) . display_item ( \"display-item-0001\" ) var async_result = await domain . buy ( null , # quantity null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getShowcase 상점 쇼케이스와 상품 가져오기 특정 쇼케이스(상점 페이지)와 해당 쇼케이스에 표시된 상품 목록을 가져옵니다. 쇼케이스는 게임 내 상점 화면과 같은 것입니다. 예를 들어 “젬 상점”, “데일리 세일”, “스페셜 오퍼” 같은 페이지에 해당합니다. 각 쇼케이스에는 상품이 진열되어 있으며, 각 상품에는 플레이어가 지불하는 것(비용)과 받는 것(보상)이 정의되어 있습니다. 쇼케이스는 스케줄 이벤트와 연결하여 특정 기간에만 표시되게 할 수도 있습니다. 예를 들어 크리스마스 기간에만 표시되는 “홀리데이 상점” 같은 방식으로 사용할 수 있습니다. 상점 UI를 구축할 때 사용합니다. 예를 들어 플레이어가 상점 화면을 열었을 때 상품 목록을 가격과 “구매” 버튼과 함께 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EzShowcase 진열대 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Showcase ( showcaseName : \"showcase-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Showcase ( showcaseName : \"showcase-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Showcase ( \"showcase-0001\" // showcaseName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . showcase ( \"showcase-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Showcase ( showcaseName : \"showcase-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Showcase ( showcaseName : \"showcase-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Showcase ( \"showcase-0001\" // showcaseName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Showcase :: Model :: FShowcase \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . showcase ( \"showcase-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getRandomShowcaseDisplayItem 랜덤 진열대의 특정 상품 조회 랜덤 진열대에 현재 표시되고 있는 특정 상품의 상세 정보를 조회합니다. 플레이어가 랜덤 상점의 특정 상품을 탭했을 때 상세 화면을 표시하는 데 사용합니다. 예를 들어, 상세 팝업에서 아이템의 설명, 가격, “구매” 버튼을 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayItemName string  UUID ~ 128자 랜덤 진열 상품명 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. Result 타입 설명 item EzRandomDisplayItem 상품 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ). RandomDisplayItem ( displayItemName : \"display-item-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ). RandomDisplayItem ( displayItemName : \"display-item-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RandomShowcase ( \"showcase-0001\" // showcaseName ) -\u003e RandomDisplayItem ( \"display-item-0001\" // displayItemName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . random_showcase ( \"showcase-0001\" ) . random_display_item ( \"display-item-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ). RandomDisplayItem ( displayItemName : \"display-item-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ). RandomDisplayItem ( displayItemName : \"display-item-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RandomShowcase ( \"showcase-0001\" // showcaseName ) -\u003e RandomDisplayItem ( \"display-item-0001\" // displayItemName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Showcase :: Model :: FRandomDisplayItem \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . random_showcase ( \"showcase-0001\" ) . random_display_item ( \"display-item-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listRandomShowcaseDisplayItems 랜덤 쇼케이스에 현재 표시되고 있는 상품 목록 가져오기 플레이어를 대상으로 랜덤 쇼케이스에 현재 표시되고 있는 상품을 가져옵니다. 랜덤 쇼케이스는 상품 풀에서 무작위로 선택된 상품이 표시되는 상점입니다. “데일리 세일\"이나 “미스터리 상점\"처럼 플레이어마다 다른 상품이 표시되거나 주기적으로 라인업이 갱신됩니다. 예를 들어 50종류의 상품 풀에서 매일 5개가 무작위로 선택되어 자정에 리프레시되는 방식입니다. 표시되는 상품은 플레이어마다 다르며, 같은 시점이라도 다른 플레이어에게는 다른 상품이 표시될 수 있습니다. 랜덤 상점 UI 구축에 사용합니다. 예를 들어 “오늘의 세일\"로 5개의 랜덤 상품과 다음 리프레시까지의 카운트다운 타이머를 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 랜덤 쇼케이스의 상품 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ); var items = await domain . RandomDisplayItemsAsync ( ). ToListAsync (); var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ); var it = domain . RandomDisplayItems ( ); List EzRandomDisplayItem \u003e items = new List EzRandomDisplayItem \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RandomShowcase ( \"showcase-0001\" // showcaseName ); const auto It = Domain -\u003e RandomDisplayItems ( ); TArray Gs2 :: UE5 :: Showcase :: Model :: FEzRandomDisplayItemPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRandomDisplayItems ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRandomDisplayItems ( callbackId ); var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeRandomDisplayItems ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeRandomDisplayItems ( callbackId ); const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RandomShowcase ( \"showcase-0001\" // showcaseName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeRandomDisplayItems ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeRandomDisplayItems ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. randomShowcaseBuy 랜덤 진열대의 상품 구매 랜덤 진열대에서 특정 상품을 구매합니다. 일반 진열대에서의 구매와 마찬가지로 조건 확인, 비용 소비, 보상 지급이 모두 하나의 트랜잭션에서 자동으로 처리됩니다. 랜덤 진열대에서 상품을 구매하면 설정에 따라 해당 상품이 품절 상태가 되어, 다음 새로고침까지 새로운 상품이 표시되지 않을 수 있습니다. 플레이어가 랜덤 상점의 상품에서 “구매” 버튼을 탭했을 때 사용합니다. 예를 들어, 데일리 세일에서 새로고침 전에 할인된 “레전더리 무기 상자\"를 구매하는 처리에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession displayItemName string  UUID ~ 128자 랜덤 진열 상품명 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. quantity int 1 1 ~ 1000 구매 수량 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item EzRandomDisplayItem 구매한 상품 transactionId string 발행된 트랜잭션 ID stampSheet string 구매 처리를 실행하는 데 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ). RandomDisplayItem ( displayItemName : \"display-item-0001\" ); var result = await domain . RandomShowcaseBuyAsync ( quantity : 1 , config : null ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . Showcase . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). RandomShowcase ( showcaseName : \"showcase-0001\" ). RandomDisplayItem ( displayItemName : \"display-item-0001\" ); var future = domain . RandomShowcaseBuyFuture ( quantity : 1 , config : null ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e Showcase -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e RandomShowcase ( \"showcase-0001\" // showcaseName ) -\u003e RandomDisplayItem ( \"display-item-0001\" // displayItemName ); const auto Future = Domain -\u003e RandomShowcaseBuy ( 1 // quantity // config ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . showcase . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . random_showcase ( \"showcase-0001\" ) . random_display_item ( \"display-item-0001\" ) var async_result = await domain . random_showcase_buy ( 1 , # quantity null # config ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Showcase SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Showcase SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/showcase/game_engine/"},{"content":"모델 EzStatus 스킬 트리 해방 상황 특정 플레이어와 프로퍼티에 대한 스킬 트리의 해방 상태를 추적하는 모델입니다. 해방(언락)된 노드명의 목록을 관리합니다. 노드는 해방(목록에 추가), 구속(목록에서 제거), 초기화(전체 삭제)할 수 있습니다. 이미 해방된 노드를 해방하려 하거나, 미해방 노드를 구속하려 하면 오류가 발생합니다. 사용자가 처음 접근했을 때 자동으로 생성됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 statusId string ※ ~ 1024자 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID releasedNodeNames List [] 0 ~ 1000 items 해제된 노드 모델명 리스트 이 스킬트리에서 플레이어가 잠금 해제한 노드 모델명 리스트입니다. 해제(추가), 구속(삭제), 리셋(전체 초기화) 작업으로 갱신됩니다. 최대 1000건. EzNodeModel 노드 모델 스킬 트리 내의 노드를 정의하는 모델로, 해방 비용·전제 조건·반환 동작을 포함합니다. 각 노드에는 검증 액션(해방 전 조건 확인), 소비 액션(지불할 비용), 먼저 해방되어야 하는 전제 노드를 설정할 수 있습니다. 노드를 구속(미해방 상태로 되돌림)하면, 소비한 리소스가 반환율에 따라 부분적으로 반환됩니다. 반환 입수 액션은 소비 액션에 반환율을 곱하여 자동으로 계산됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. releaseVerifyActions List [] 0 ~ 10 items 해방 검증 액션 목록 이 노드를 해방하기 전에 실행되어 조건이 충족되었는지 확인하는 검증 액션의 목록입니다. 예를 들어 플레이어가 특정 레벨에 도달했는지, 특정 아이템을 소지하고 있는지를 검증할 수 있습니다. 검증 액션 중 하나라도 실패하면 노드 해방이 거부됩니다. 최대 10개 액션. releaseConsumeActions List [] 1 ~ 10 items 해방 소비 액션 목록 이 노드를 해방할 때 실행되는 소비 액션의 목록으로, 해방 비용을 나타냅니다. 이 액션들은 반환 입수 액션 계산에도 사용됩니다. 노드를 구속할 때 각 소비 액션이 반환율에 따라 역산됩니다. 최소 1개의 소비 액션이 필요합니다. 최대 10개 액션. returnAcquireActions List 0 ~ 10 items 반환 입수 액션 목록 이 노드를 구속(취소)할 때 실행되는 입수 액션의 목록으로, 플레이어에게 반환되는 리소스를 나타냅니다. 이 필드는 해방 소비 액션에 반환율을 곱하여 자동 생성됩니다. 예를 들어 해방 비용이 골드 100이고 반환율이 0.8인 경우, 구속 시 골드 80이 반환됩니다. 최대 10개 액션. restrainReturnRate float 1.0 0.0 ~ 1.0 반환율 이 노드를 구속(미해방 상태로 되돌림)했을 때 소비된 리소스가 반환되는 비율입니다. 1.0은 전액 반환, 0.5는 절반 반환, 0.0은 반환 없음을 의미합니다. 기본값은 1.0(전액 반환)입니다. 유효 범위: 0.0~1.0. EzConfig 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 EzAcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 getNodeModel 특정 스킬 트리 노드의 상세 정보 취득 노드 이름을 지정하여 전제 조건, 해방 비용, 반환 설정을 포함한 상세 정보를 취득합니다. 플레이어가 스킬 트리에서 노드를 탭했을 때 상세 정보를 표시하는 데 사용합니다. 예를 들어: “파워 스트라이크” — 필요: 기본 공격(해방됨). 비용: 스킬 포인트 3. 효과: 공격력 +50% 노드의 구속 반환율이 80%라면, 이 노드를 되돌릴 때 비용의 80%가 반환됩니다 응답에는 다음이 포함됩니다: 전제 노드명: 먼저 해방되어야 하는 노드 목록 해방 시 소비 액션: 해방을 위해 필요한 비용(예: 스킬 포인트 3 소비) 해방 시 검증 액션: 해방을 허용하기 전에 확인되는 조건(예: 플레이어 레벨 \u003e= 10) 구속 반환율: 노드를 되돌릴 때 반환되는 리소스의 비율(0.0~1.0) Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. nodeModelName string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzNodeModel 노드 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). NodeModel ( nodeModelName : \"node-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). NodeModel ( nodeModelName : \"node-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e NodeModel ( \"node-0001\" // nodeModelName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . node_model ( \"node-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). NodeModel ( nodeModelName : \"node-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). NodeModel ( nodeModelName : \"node-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e NodeModel ( \"node-0001\" // nodeModelName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: SkillTree :: Model :: FNodeModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . node_model ( \"node-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listNodeModels 스킬 트리의 전체 노드 목록 조회 스킬 트리의 모든 노드 정의를 조회합니다. 각 노드는 플레이어가 리소스를 소비하여 해방(잠금 해제)할 수 있는 스킬, 능력, 또는 강화를 나타냅니다. 스킬 트리는 분기 구조이며, 노드에는 전제 조건이 있습니다. 이후 노드를 해방하려면 이전 노드를 먼저 해방해 두어야 합니다. 예를 들어 “일반 공격” → “파워 스트라이크” → “크리티컬 슬래시\"처럼, 각 노드의 해방에는 이전 노드가 필요합니다. 각 노드 정의에는 다음이 포함됩니다: 전제 노드: 이 노드를 해방하기 전에 해방되어 있어야 하는 다른 노드 해방 비용: 노드를 해방하기 위해 플레이어가 소비해야 하는 리소스(예: 스킬 포인트, 골드, 재료) 해방 조건: 추가로 충족해야 하는 요건(예: 최소 레벨) 구속 반환율: 플레이어가 나중에 이 노드를 되돌릴(잠글) 때 반환되는 리소스의 비율 스킬 트리 UI를 구축할 때 사용합니다. 모든 노드를 그리고, 전제 조건에 따라 연결하며, 어떤 노드가 해방 가능한지 표시할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 노드 모델 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . NodeModelsAsync ( ). ToListAsync (); var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . NodeModels ( ); List EzNodeModel \u003e items = new List EzNodeModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e NodeModels ( ); TArray Gs2 :: UE5 :: SkillTree :: Model :: FEzNodeModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeNodeModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeNodeModels ( callbackId ); var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeNodeModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeNodeModels ( callbackId ); const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeNodeModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeNodeModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. getStatus 플레이어의 스킬 트리 진행 상황 취득 지정된 프로퍼티 ID의 스킬 트리에서 플레이어가 어떤 노드를 해방(언락)했는지를 취득합니다. propertyId는 어떤 스킬 트리 인스턴스를 참조할지를 특정합니다. 게임이 캐릭터별로 하나의 스킬 트리를 가지는 경우, propertyId로 캐릭터 ID를 사용할 수 있습니다. 예를 들어 전사 캐릭터와 마법사 캐릭터는 각각 다른 propertyId로 별도의 스킬 트리 진행 상황이 관리됩니다. 스킬 트리 화면을 렌더링할 때 사용합니다. ListNodeModels로 트리 전체 구조를 취득한 후, 플레이어의 해방 상태를 겹쳐서 다음과 같이 표시합니다: 해방된 노드(언락됨, 하이라이트 표시) 해방 가능한 노드(전제 조건을 충족함, 다음에 해방 가능) 잠긴 노드(전제 조건을 아직 충족하지 못함, 회색 처리) Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. Result 타입 설명 item EzStatus 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"property-0001\" // propertyId ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: SkillTree :: Model :: FStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. release 스킬 트리 노드 해방 스킬 트리의 하나 이상의 노드를 해방(언락)합니다. 플레이어는 필요한 리소스를 소비하고 노드가 활성화됩니다. 스킬 트리 UI의 “스킬 습득” 또는 “언락” 버튼에 해당합니다. 플레이어가 해방하려는 노드를 탭하면: 모든 전제 노드가 이미 해방되었는지 확인합니다 해방 조건(검증 액션)을 확인합니다 — 예: 최소 플레이어 레벨 해방 비용(소비 액션)을 차감합니다 — 예: 스킬 포인트 3 소비 노드가 해방됨으로 표시됩니다 여러 노드 이름을 전달하여 한 번에 여러 노드를 해방할 수 있습니다. 각 노드에 대해 모든 전제 조건과 비용이 검증됩니다. 전제 조건이 충족되지 않았거나 플레이어의 리소스가 부족한 경우, 해방이 실패하며 리소스는 소비되지 않습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. Result 타입 설명 item EzStatus 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 해방 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); var result = await domain . ReleaseAsync ( nodeModelNames : new List string \u003e { \"node-0001\" , } ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); var future = domain . ReleaseFuture ( nodeModelNames : new List string \u003e { \"node-0001\" , } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Release ( [] { auto v = TOptional TArray FString \u003e\u003e (); v -\u003e Add ( \"node-0001\" ); return v ; }() // nodeModelNames ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) var async_result = await domain . release ( [ \"node-0001\" , ] # node_model_names ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result reset 스킬 트리 전체 초기화(전체 리스펙) 스킬 트리의 모든 해방된 노드를 한 번에 미해방 상태로 되돌립니다. 각 노드의 구속 반환율에 따라 리소스가 반환됩니다. “전체 스킬 초기화” 또는 “전체 리스펙” 버튼에 해당합니다. 플레이어는 스킬 트리를 처음부터 다시 시작합니다. 예를 들어 플레이어가 다양한 비용으로 10개의 노드를 해방한 경우, 10개 모두가 되돌려지고 설정된 반환율에 따라 각각 부분 환불이 이루어집니다. 주요 사용 사례: 플레이어가 다른 전략으로 스킬 트리를 다시 구성할 수 있는 “리스펙” 기능 모든 플레이어가 처음부터 다시 시작하는 시즌 리셋 게임 밸런스 변경으로 현재 빌드가 최적이 아니게 되었을 때 플레이어가 재조정할 수 있도록 하는 경우 Restrain(특정 노드를 선택적으로 되돌림)과 달리, Reset은 의존 관계와 관계없이 트리 전체에 영향을 줍니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. Result 타입 설명 item EzStatus 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 초기화 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); var result = await domain . ResetAsync ( ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); var future = domain . ResetFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Reset ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) var async_result = await domain . reset ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result restrain 특정 노드를 잠금 상태로 되돌리기 해방된 하나 이상의 노드를 미해방 상태로 되돌립니다. 각 노드의 구속 반환율에 따라 해방 시 소비한 리소스의 일부가 반환됩니다. “부분적인 리스펙” 기능입니다. 스킬 트리 전체를 초기화하는 대신, 특정 노드만 선택하여 취소할 수 있습니다. 예를 들어 노드 해방에 골드 100이 필요하고 구속 반환율이 0.8(80%)인 경우, 구속 시 골드 80이 반환됩니다. 중요한 규칙: 다른 해방된 노드가 의존하고 있는 노드(전제 조건으로 참조되는 노드)는 구속할 수 없습니다 다른 해방된 노드의 전제가 되는 노드를 구속하려면, 먼저 의존하는 노드를 구속해야 합니다 이를 통해 스킬 트리가 항상 유효한 상태로 유지됩니다(고립된 노드가 발생하지 않습니다) 스킬 트리 UI의 “스킬 취소” 또는 “되돌리기” 기능으로 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. Result 타입 설명 item EzStatus 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 미해방 상태로 되돌리는 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult EzTransactionResult 트랜잭션 실행 결과 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); var result = await domain . RestrainAsync ( nodeModelNames : new List string \u003e { \"node-0001\" , } ); // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. var domain = gs2 . SkillTree . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( propertyId : \"property-0001\" ); var future = domain . RestrainFuture ( nodeModelNames : new List string \u003e { \"node-0001\" , } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } // New Experience에서는 스탬프 시트가 SDK 레벨에서 자동으로 실행됩니다. // 에러가 발생하면 TransactionException이 발생합니다. // TransactionException::Retry()로 재시도할 수 있습니다. const auto Domain = Gs2 -\u003e SkillTree -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"property-0001\" // propertyId ); const auto Future = Domain -\u003e Restrain ( [] { auto v = TOptional TArray FString \u003e\u003e (); v -\u003e Add ( \"node-0001\" ); return v ; }() // nodeModelNames ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . skill_tree . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"property-0001\" ) var async_result = await domain . restrain ( [ \"node-0001\" , ] # node_model_names ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-SkillTree SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-SkillTree SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/skill_tree/game_engine/"},{"content":"모델 EzStamina 스태미나 스태미나란 현실 시간의 경과에 따라 회복되는 포인트입니다. 일반적으로 이 스태미나를 소비해야 게임을 플레이할 수 있도록 함으로써, 플레이어의 하루 플레이 횟수를 제한하고 게임의 진행 속도를 게임 제공사가 제어할 목적으로 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. value int  0 ~ 2147483646 스태미나 값 오버플로우분을 제외한, 이 사용자의 현재 스태미나 양입니다. 회복 간격과 회복량에 기반하여 시간 경과에 따라 자동으로 증가하며, maxValue까지 회복됩니다. lastRecoveredAt로부터의 경과 시간을 사용하여 recoverSteps = elapsedMinutes / recoverIntervalMinutes 식으로 계산됩니다. overflowValue int  0 ~ 2147483646 오버플로우 값 통상의 최대값(maxValue)을 초과하여 저장되어 있는 스태미나량입니다. StaminaModel의 isOverflow가 활성화된 경우에만 사용됩니다. 실효 스태미나의 합계는 value + overflowValue이며, maxCapacity가 상한입니다. 스태미나 소비 시 오버플로우분이 먼저 소비됩니다. maxValue int  1 ~ 2147483646 스태미나 최대값 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 MaxStaminaTable로 오버라이드되는 사용자별 스태미나 최대값입니다. 오버플로우가 비활성화된 경우 initialCapacity가 하한이 됩니다. 오버플로우가 활성화된 경우 maxCapacity가 상한이 됩니다. 자연 회복은 이 값에서 멈춥니다. recoverIntervalMinutes int 1 ~ 2147483646 스태미나 회복 간격(분) StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 RecoverIntervalTable로 오버라이드되는 사용자별 회복 간격(분)입니다. 테이블이 설정되어 있지 않은 경우, 모델의 기본값인 recoverIntervalMinutes로 대체됩니다. recoverValue int 1 ~ 2147483646 스태미나 회복량 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 RecoverValueTable로 오버라이드되는 사용자별 틱당 회복량입니다. 테이블이 설정되어 있지 않은 경우, 모델의 기본값인 recoverValue로 대체됩니다. nextRecoverAt long 다음 회복 시각 다음 스태미나 회복 틱이 발생하는 Unix 타임스탬프(밀리초)입니다. lastRecoveredAt + recoverIntervalMinutes * 60 * 1000으로 계산됩니다. 스태미나가 이미 maxValue인 경우, 이 필드는 설정되지 않을 수 있습니다. EzStaminaModel 스태미나 모델 스태미나의 최대값, 회복 간격, 회복량과 같은 파라미터를 정의할 수 있습니다. GS2-Experience와 연동하여 최대값이나 회복량을 제어할 수도 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. recoverIntervalMinutes int  0 ~ 2147483646 회복 간격(분) 스태미나 회복 틱의 간격(분 단위)입니다. 이 간격이 경과할 때마다 플레이어의 스태미나가 회복량만큼 증가합니다. RecoverIntervalTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 0으로 설정하면 시간 기반 자동 회복이 비활성화됩니다. recoverValue int 1 0 ~ 2147483646 회복량 회복 틱마다 회복되는 스태미나의 양입니다. 회복 간격이 경과할 때마다 최대값에 도달할 때까지 이 값만큼 스태미나가 증가합니다. RecoverValueTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 기본값은 1입니다. initialCapacity int  0 ~ 2147483646 최대값의 초기값 모든 플레이어에 대한 기본 스태미나 최대값입니다. 오버플로우가 비활성화된 경우, 사용자별 최대값의 하한으로 작용합니다. MaxStaminaTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. isOverflow bool  오버플로우 가능 여부 아이템 사용 등의 수단으로 스태미나가 초기 최대값을 초과할 수 있는지 여부입니다. 활성화된 경우, 스태미나는 initialCapacity를 초과하여 maxCapacity까지 설정할 수 있습니다. 자연 회복은 일반적인 최대값에서 정지합니다. 비활성화된 경우, 사용자별 최대값은 initialCapacity 이상으로 제한됩니다. maxCapacity int {isOverflow} == true ※ 0 ~ 2147483646 오버플로우 시 최대값 오버플로우 활성화 시 스태미나의 절대 상한값입니다. 오버플로우 상태에서도 스태미나는 이 값을 초과할 수 없습니다. isOverflow가 true인 경우에만 표시됩니다. 예를 들어 initialCapacity가 100, maxCapacity가 200인 경우, 아이템으로 스태미나를 200까지 늘릴 수 있지만 자연 회복은 100에서 정지합니다. ※ isOverflow이(가) true 이면 필수 maxStaminaTable EzMaxStaminaTable 스태미나 최대값 테이블 플레이어의 GS2-Experience 랭크에 기반하여 스태미나 최대값을 동적으로 결정하는 MaxStaminaTable에 대한 참조입니다. 설정 시, 플레이어의 최대 스태미나는 현재 랭크 인덱스로 테이블에서 참조되며, initialCapacity를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 initialCapacity를 최대값으로 공유합니다. recoverIntervalTable EzRecoverIntervalTable 회복 간격 테이블 플레이어의 GS2-Experience 랭크에 기반하여 회복 간격을 동적으로 결정하는 RecoverIntervalTable에 대한 참조입니다. 설정 시, 플레이어의 회복 간격은 현재 랭크 인덱스로 테이블에서 참조되며, recoverIntervalMinutes를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 recoverIntervalMinutes를 공유합니다. recoverValueTable EzRecoverValueTable 회복량 테이블 플레이어의 GS2-Experience 랭크에 기반하여 회복량을 동적으로 결정하는 RecoverValueTable에 대한 참조입니다. 설정 시, 플레이어의 회복량은 현재 랭크 인덱스로 테이블에서 참조되며, recoverValue를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 recoverValue를 공유합니다. EzMaxStaminaTable 스태미나 최대값 테이블 스태미나 최대값 테이블은 GS2-Experience의 랭크별로 스태미나의 최대값을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 최대값 테이블 이름 스태미나 최대값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 스태미나 최대값이 결정됩니다. values List  1 ~ 1024 items 랭크별 스태미나 최대값 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 스태미나 최대값의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 최대 스태미나로 사용됩니다. 배열 길이는 참조하는 ExperienceModel에서 정의된 랭크 수와 일치해야 합니다. EzRecoverIntervalTable 회복 간격 테이블 회복 간격 테이블은 GS2-Experience의 랭크별로 스태미나의 회복 간격을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복 간격이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복 간격 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복 간격 값(분 단위)의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 회복 간격으로 사용되며, 모델의 기본값 recoverIntervalMinutes를 오버라이드합니다. EzRecoverValueTable 스태미나 회복량 테이블 스태미나 회복량 테이블은 GS2-Experience의 랭크별로 스태미나의 회복량을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복량이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복량 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복량 값의 배열입니다. 인덱스 i의 값은 랭크 i의 플레이어에 대한 틱당 회복량으로 사용되며, 모델의 기본 recoverValue를 오버라이드합니다. 메서드 getStaminaModel 특정 스태미나 종류의 정의를 취득한다 특정 스태미나 종류의 정의를 취득합니다. 응답에는 회복 간격(얼마나 자주 회복되는가), 회복량(1회당 얼마나 회복되는가), 최대 용량, 오버플로 설정이 포함됩니다. 특정 스태미나 종류의 규칙을 표시하는 데 사용합니다. 예를 들어, 스태미나 상세 화면에서 “액션 스태미나: 5분마다 1회복, 최대 100\"과 같이 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item EzStaminaModel 스타미나 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). StaminaModel ( staminaName : \"stamina-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). StaminaModel ( staminaName : \"stamina-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e StaminaModel ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . stamina_model ( \"stamina-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). StaminaModel ( staminaName : \"stamina-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). StaminaModel ( staminaName : \"stamina-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e StaminaModel ( \"stamina-0001\" // staminaName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Stamina :: Model :: FStaminaModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . stamina_model ( \"stamina-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listStaminaModels 스태미나 종류 정의 목록을 취득한다 게임에 설정된 모든 스태미나 모델 정의를 취득합니다. 스태미나 모델은 스태미나 종류별 규칙을 정의합니다. 시간 경과에 따른 회복 속도, 1회당 회복량, 최대 용량, 최대값을 초과하는 오버플로 가능 여부 등이 포함됩니다. 예를 들어 “액션 스태미나”(5분마다 1회복, 최대 100)와 “아레나 티켓”(2시간마다 1회복, 최대 5)처럼 별도의 스태미나 모델을 준비할 수 있습니다. 일부 스태미나 모델은 플레이어 레벨(GS2-Experience 경유)과 연동시킬 수도 있어, 레벨이 높은 플레이어일수록 스태미나 상한이 늘어나거나 회복이 빨라지도록 할 수 있습니다. 도움말 화면이나 설정 화면에서 이용 가능한 스태미나의 종류와 규칙을 표시하는 데 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 스타미나 모델의 리스트 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . StaminaModelsAsync ( ). ToListAsync (); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . StaminaModels ( ); List EzStaminaModel \u003e items = new List EzStaminaModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e StaminaModels ( ); TArray Gs2 :: UE5 :: Stamina :: Model :: FEzStaminaModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStaminaModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStaminaModels ( callbackId ); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStaminaModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStaminaModels ( callbackId ); const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeStaminaModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeStaminaModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. apply 스태미나의 시간 경과에 따른 자연 회복을 적용한다 마지막 업데이트로부터의 경과 시간을 기반으로 스태미나가 얼마나 회복되었는지 계산하여 현재 값에 반영합니다. 스태미나는 시간 경과에 따라 자동으로 회복됩니다. 예를 들어, 회복 간격이 5분, 회복량이 1인 경우, 플레이어는 5분마다 스태미나가 1씩 최대값까지 회복됩니다. 일반적으로 스태미나 값을 읽을 때 서버가 자동으로 회복을 계산합니다. 이 API를 명시적으로 호출하는 것은 최신 회복 값을 서버에 확실히 기록하고 싶은 경우입니다. 예를 들어, GS2 트랜잭션으로 관리되지 않는 액션 전에 스태미나가 충분한지 확인하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. gameSession GameSession  GameSession Result 타입 설명 item EzStamina 스타미나 staminaModel EzStaminaModel 스타미나 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var result = await domain . ApplyAsync ( ); var item = await result . ModelAsync (); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var future = domain . ApplyFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e Apply ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . apply ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result consume 스태미나를 사용(소비)한다 플레이어의 현재 스태미나에서 지정한 양을 차감합니다. 스태미나가 부족한 경우 오류가 발생하며, 소비는 이루어지지 않습니다. 스태미나가 0 미만이 되는 일은 없습니다. 예를 들어, 퀘스트에 20 스태미나가 필요한데 플레이어가 15밖에 가지고 있지 않은 경우, 소비는 실패하며 “스태미나가 부족합니다\"라는 메시지를 표시할 수 있습니다. 주의: 대부분의 경우, 스태미나 소비는 GS2-Quest나 GS2-Showcase가 퀘스트 시작이나 구매 시 자동으로 처리합니다. 이 API를 직접 호출할 필요가 있는 것은 이러한 흐름 외에서 스태미나를 소비하고 싶은 경우뿐입니다. 예를 들어, 독자적인 미니 게임이나 트레이닝 기능에서 스태미나를 소비하는 경우에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. gameSession GameSession  GameSession consumeValue int  1 ~ 2147483646 소비할 스타미나 양 Result 타입 설명 item EzStamina 스타미나 staminaModel EzStaminaModel 스타미나 모델 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 InsufficientException BadRequestException 스타미나 잔량이 부족합니다. 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var result = await domain . ConsumeAsync ( consumeValue : 50 ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Stamina . Exception . InsufficientException e ) { // Insufficient remaining stamina. } var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var future = domain . ConsumeFuture ( consumeValue : 50 ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Stamina . Exception . InsufficientException ) { // Insufficient remaining stamina. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e Consume ( 50 // consumeValue ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Stamina :: Error :: FInsufficientError :: Class )) { // Insufficient remaining stamina. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . consume ( 50 # consume_value ) if async_result . error != null : if async_result . error is Gs2StaminaInsufficientException : # 스타미나 잔량이 부족합니다. pass push_error ( str ( async_result . error )) return var result = async_result . result getStamina 특정 종류의 플레이어의 현재 스태미나를 취득한다 특정 스태미나 종류에 대해 플레이어의 현재 스태미나 값을 모델 정의와 함께 취득합니다. 응답에는 현재 값, 최대 용량, 회복 간격, 회복량, 오버플로 양이 포함됩니다. 특정 스태미나 게이지를 표시하는 데 사용합니다. 예를 들어, 퀘스트 시작 화면에서 “액션 스태미나: 45/100\"을 진행 바와 함께 표시하고, “전체 회복까지 4시간 35분\"이라고 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. gameSession GameSession  GameSession Result 타입 설명 item EzStamina 스타미나 staminaModel EzStaminaModel 스타미나 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Stamina :: Model :: FStamina \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listStaminas 플레이어의 스태미나 값 목록을 취득한다 플레이어의 모든 스태미나 종류에 대한 현재 스태미나 값을 취득합니다. 각 항목에는 스태미나 종류별 현재 값, 최대 용량, 회복 상태가 포함됩니다. 스태미나 개요를 표시하는 데 사용합니다. 예를 들어, 홈 화면이나 상태 바에서 “액션 스태미나: 85/100(전체 회복까지 1시간 15분)”, “아레나 티켓: 3/5(다음 회복까지 1시간 30분)“과 같이 표시하는 데 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스태미나 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . StaminasAsync ( ). ToListAsync (); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Staminas ( ); List EzStamina \u003e items = new List EzStamina \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Staminas ( ); TArray Gs2 :: UE5 :: Stamina :: Model :: FEzStaminaPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStaminas ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStaminas ( callbackId ); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStaminas ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStaminas ( callbackId ); const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeStaminas ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeStaminas ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. setMaxValue 플레이어 레벨에 따라 스태미나 상한을 업데이트한다 GS2-Experience의 플레이어 현재 레벨(랭크)을 기반으로 스태미나 최대 용량을 업데이트합니다. 스태미나 모델에는 “스태미나 최대값 테이블\"을 설정할 수 있으며, 플레이어 레벨과 스태미나 상한을 대응시킵니다. 예를 들어, 레벨 1=상한 50, 레벨 10=상한 80, 레벨 50=상한 150과 같이 설정할 수 있습니다. 이 API를 호출하면 서명된 GS2-Experience 상태에서 플레이어의 현재 레벨을 읽어들여, 테이블에서 대응하는 스태미나 상한을 참조하여 업데이트합니다. 플레이어가 레벨업한 후 스태미나 상한을 업데이트하는 데 사용합니다. 예를 들어, 레벨업 시 이 API를 호출하여 스태미나 상한을 80에서 85로 늘리는 등의 처리에 유용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. gameSession GameSession  GameSession keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN signedStatusBody string  ~ 524288자 서명 대상인 GS2-Experience 스테이터스의 바디 signedStatusSignature string  ~ 128자 GS2-Experience 스테이터스의 서명 Result 타입 설명 item EzStamina 스타미나 old EzStamina 스타미나 staminaModel EzStaminaModel 스타미나 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var result = await domain . SetMaxValueAsync ( signedStatusBody : \"statusBody...\" , signedStatusSignature : \"statusSignature...\" , keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var future = domain . SetMaxValueFuture ( signedStatusBody : \"statusBody...\" , signedStatusSignature : \"statusSignature...\" , keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e SetMaxValue ( \"statusBody...\" , // signedStatusBody \"statusSignature...\" , // signedStatusSignature \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . set_max_value ( \"statusBody...\" , # signed_status_body \"statusSignature...\" , # signed_status_signature \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result setRecoverInterval 플레이어 레벨에 따라 스태미나 회복 간격을 업데이트한다 GS2-Experience의 플레이어 현재 레벨(랭크)을 기반으로 플레이어의 스태미나가 회복되는 빈도를 업데이트합니다. 스태미나 모델에는 “회복 간격 테이블\"을 설정할 수 있으며, 플레이어 레벨과 회복 간격(분)을 대응시킵니다. 예를 들어, 레벨 1=6분마다 회복, 레벨 20=5분마다, 레벨 50=3분마다와 같이 설정할 수 있습니다. 플레이어가 레벨업한 후 스태미나 회복 빈도를 높이는 데 사용합니다. 예를 들어, 플레이어가 레벨 20에 도달하면 회복 간격이 6분에서 5분으로 단축되어, 스태미나가 더 자주 회복하게 됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. gameSession GameSession  GameSession keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN signedStatusBody string  ~ 524288자 서명 대상인 GS2-Experience 스테이터스의 바디 signedStatusSignature string  ~ 128자 GS2-Experience 스테이터스의 서명 Result 타입 설명 item EzStamina 스타미나 old EzStamina 스타미나 staminaModel EzStaminaModel 스타미나 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var result = await domain . SetRecoverIntervalAsync ( signedStatusBody : \"statusBody...\" , signedStatusSignature : \"statusSignature...\" , keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var future = domain . SetRecoverIntervalFuture ( signedStatusBody : \"statusBody...\" , signedStatusSignature : \"statusSignature...\" , keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e SetRecoverInterval ( \"statusBody...\" , // signedStatusBody \"statusSignature...\" , // signedStatusSignature \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . set_recover_interval ( \"statusBody...\" , # signed_status_body \"statusSignature...\" , # signed_status_signature \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result setRecoverValue 플레이어 레벨에 따라 스태미나 회복량을 업데이트한다 GS2-Experience의 플레이어 현재 레벨(랭크)을 기반으로 1회당 스태미나 회복량을 업데이트합니다. 스태미나 모델에는 “회복량 테이블\"을 설정할 수 있으며, 플레이어 레벨과 회복량을 대응시킵니다. 예를 들어, 레벨 1=1회복/간격, 레벨 20=2회복, 레벨 50=3회복과 같이 설정할 수 있습니다. 플레이어가 레벨업한 후 스태미나 회복을 더 빠르게 하는 데 사용합니다. 예를 들어, 플레이어가 레벨 20에 도달하면 회복량이 1회복/간격에서 2회복/간격으로 늘어나, 스태미나가 2배 빠르게 회복하게 됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. gameSession GameSession  GameSession keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN signedStatusBody string  ~ 524288자 서명 대상인 GS2-Experience 스테이터스의 바디 signedStatusSignature string  ~ 128자 GS2-Experience 스테이터스의 서명 Result 타입 설명 item EzStamina 스타미나 old EzStamina 스타미나 staminaModel EzStaminaModel 스타미나 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var result = await domain . SetRecoverValueAsync ( signedStatusBody : \"statusBody...\" , signedStatusSignature : \"statusSignature...\" , keyId : \"key-0001\" ); var item = await result . ModelAsync (); var domain = gs2 . Stamina . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Stamina ( staminaName : \"stamina-0001\" ); var future = domain . SetRecoverValueFuture ( signedStatusBody : \"statusBody...\" , signedStatusSignature : \"statusSignature...\" , keyId : \"key-0001\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Stamina -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Stamina ( \"stamina-0001\" // staminaName ); const auto Future = Domain -\u003e SetRecoverValue ( \"statusBody...\" , // signedStatusBody \"statusSignature...\" , // signedStatusSignature \"key-0001\" // keyId ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . stamina . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . stamina ( \"stamina-0001\" ) var async_result = await domain . set_recover_value ( \"statusBody...\" , # signed_status_body \"statusSignature...\" , # signed_status_signature \"key-0001\" # key_id ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Stamina SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Stamina SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/stamina/game_engine/"},{"content":"모델 EzStatus 스테이트 머신의 상태 특정 사용자에 대한 스테이트 머신의 실행 인스턴스를 나타냅니다. 변수, 서브 스테이트 머신용 콜 스택, 전이 횟수, 난수 상태를 포함한 현재 실행 상태를 추적합니다. 스테이터스는 Running, Wait, Pass(성공), Error 상태를 전이합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 statusId string ※ ~ 1024자 스테이트 머신 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 스테이터스 이름 스테이트 머신 상태의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 스테이트 머신의 상태를 식별하는 데 사용됩니다. enableSpeculativeExecution 문자열 열거형 enum {   “enable”,   “disable” } “disable” 투기적 실행을 활성화할지 여부 활성화하면 스테이트 머신 정의와 난수 상태가 이 Status 엔티티에 포함됩니다. 이를 통해 클라이언트가 서버 확인 전에 로컬에서 전이를 시뮬레이션할 수 있어 체감 지연을 줄일 수 있습니다. 정의 설명 enable 활성화 disable 비활성화 stateMachineDefinition string {enableSpeculativeExecution} == “enable” ~ 16777216자 스테이트 머신 정의 투기적 실행을 위해 이 스테이터스에 포함된 GSL 정의입니다. enableSpeculativeExecution이 활성화된 경우에만 존재합니다. 일반적인 API 응답에서는 필터링되며, 클라이언트 측 시뮬레이션에 필요한 경우에만 포함됩니다. ※ enableSpeculativeExecution이(가) “enable” 이면 활성화 randomStatus EzRandomStatus {enableSpeculativeExecution} == “enable” 난수 상태 이 실행 인스턴스의 난수 생성 상태입니다. 투기적 실행 시 클라이언트와 서버에서 결정론적인 난수 동작을 보장하기 위해 사용됩니다. enableSpeculativeExecution이 활성화된 경우에만 존재합니다. ※ enableSpeculativeExecution이(가) “enable” 이면 활성화 stacks List [] 0 ~ 1024 items 스택 서브 스테이트 머신 호출의 콜 스택입니다. 스테이트 머신이 서브 스테이트 머신을 호출하면 호출한 쪽의 스테이트 머신 이름과 반환 태스크가 푸시됩니다. 서브 스테이트 머신이 완료되면 엔트리가 팝되고 반환 태스크에서 실행이 재개됩니다. variables List [] 0 ~ 1000 items 스테이트 머신별 상태 변수 콜 계층 내 각 스테이트 머신의 현재 변수 값입니다. 각 엔트리는 스테이트 머신 이름과, int, float, string, bool, array, map 타입을 지원하는 JSON 직렬화된 값을 보유합니다. 변수는 동일한 실행 인스턴스 내 상태 전이를 거쳐 유지됩니다. status 문자열 열거형 enum {   “Running”,   “Wait”,   “Pass”,   “Error” } “Running” 스테이터스 이 스테이트 머신 인스턴스의 현재 실행 상태입니다. “Running\"은 머신이 전이를 처리 중임을 의미합니다. “Wait\"는 머신이 외부 이벤트(emit)를 대기 중임을 의미합니다. “Pass\"는 정상적으로 완료되었음을 의미합니다. “Error\"는 에러로 종료되었음을 의미합니다. 정의 설명 Running 실행 중 Wait 대기 중 Pass 정상 종료 Error 이상 종료 lastError string ~ 1024자 마지막 에러 마지막으로 발생한 에러의 메시지입니다. 스테이터스가 “Error\"로 전이되었을 때 설정됩니다. 스테이트 머신이 이상 종료된 원인의 상세 내용을 포함합니다. transitionCount int 0 0 ~ 2147483645 전이 횟수 이 실행 인스턴스에서 수행된 상태 전이의 총 횟수입니다. 전이할 때마다 증가합니다. 이 값이 1000을 초과하면 무한 루프를 방지하기 위해 스테이트 머신은 에러로 종료됩니다. EzStackEntry 스택 엔트리 서브 스테이트 머신의 콜 스택 내 하나의 엔트리를 나타냅니다. 스테이트 머신이 서브 스테이트 머신을 호출하면 호출한 쪽의 이름과 반환 태스크가 스택에 푸시됩니다. 서브 스테이트 머신이 완료되면 팝된 엔트리의 반환 태스크에서 실행이 재개됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 stateMachineName string  ~ 128자 스테이트 머신 이름 이 스택 엔트리를 푸시한 호출 측 스테이트 머신의 이름입니다. 서브 스테이트 머신에서 돌아올 때 어떤 스테이트 머신의 컨텍스트를 복원할지 식별하는 데 사용됩니다. taskName string  ~ 128자 태스크 이름 서브 스테이트 머신이 완료되었을 때 돌아갈 태스크(상태)의 이름입니다. 호출 측 스테이트 머신의 이 태스크에서 실행이 재개됩니다. EzVariable 스테이트 머신별 상태 변수 호출 계층 내 특정 스테이트 머신의 현재 변수 상태를 보유합니다. 값은 int, float, string, bool, array, map 데이터 타입을 지원하는 JSON 직렬화 표현입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 stateMachineName string  ~ 128자 스테이트 머신 이름 이들 변수를 소유하는 스테이트 머신의 이름입니다. 중첩된 호출 계층에서는 각 스테이트 머신이 이 이름으로 식별되는 독립적인 변수 스코프를 가집니다. value string  ~ 1048576자 값 이 스테이트 머신의 JSON 직렬화된 변수 값입니다. int, float, string, bool, array, map 데이터 타입을 지원합니다. 스테이트 머신이 전이나 액션을 처리할 때 갱신됩니다. EzChangeStateEvent 상태 변경 이벤트 스테이트 머신 내에서 발생한 상태 전이를 기록합니다. 전이 대상 태스크 이름, 무결성 검증용 해시, 전이가 발생한 타임스탬프를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 taskName string  ~ 128자 태스크 이름 스테이트 머신이 전이한 대상 태스크(상태)의 이름입니다. hash string  ~ 64자 해시 상태 전이의 무결성을 검증하기 위한 해시 값입니다. 전이가 올바르게 수행되었고 상태가 일관되어 있음을 검증하는 데 사용됩니다. timestamp long  타임스탬프 EzEmitEvent 메시지 전송 이벤트 외부 액션을 트리거하기 위해 스테이트 머신이 전송하는 메시지를 나타냅니다. 이벤트 이름은 액션의 종류를 식별하고, 파라미터는 액션별 데이터를 제공합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 event string  ~ 128자 이벤트 이름 전송된 이벤트의 종류를 식별하는 이름입니다. 보상 지급이나 리소스 소비 등, 어떤 외부 액션을 호출할지 판단하는 데 사용됩니다. parameters string  ~ 1024자 파라미터 전송된 이벤트와 함께 전달되는 파라미터입니다. 이 이벤트에 의해 트리거되는 외부 액션을 설정하는 데 사용되는, 액션별 데이터를 직렬화된 형식으로 포함합니다. timestamp long  타임스탬프 EzEvent 이벤트 스테이트 머신 실행 중에 발생한 이벤트를 나타냅니다. 상태 변경 이벤트(상태 전이를 기록)이거나 emit 이벤트(외부 액션을 트리거하기 위한 메시지 전송) 중 하나입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 eventType 문자열 열거형 enum {   “change_state”,   “emit” }  이벤트 종류 이벤트의 종류입니다. “change_state\"는 스테이트 머신 내의 상태 전이를 기록합니다. “emit\"은 보상 지급이나 리소스 소비 등의 외부 액션을 트리거하기 위한 메시지 전송을 나타냅니다. 정의 설명 change_state 상태 변경 emit 메시지 전송 changeStateEvent EzChangeStateEvent {eventType} == “change_state” ※ 상태 변경 ※ eventType이(가) “change_state” 이면 필수 emitEvent EzEmitEvent {eventType} == “emit” ※ 메시지 전송 ※ eventType이(가) “emit” 이면 필수 EzRandomStatus 난수 상태 스테이트 머신 실행 인스턴스의 난수 생성 상태를 관리합니다. 시드 값과 카테고리별 사용 현황 추적을 포함합니다. 추측 실행 시 클라이언트와 서버 간에 결정론적인 난수 동작을 보장하기 위해 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 seed long  0 ~ 4294967294 난수 시드 스테이트 머신 실행 내에서 결정론적인 난수 생성을 위한 시드 값입니다. used List 0 ~ 1000 items 사용된 난수 목록 카테고리별로 소비된 난수를 추적합니다. 각 카테고리는 난수 사용의 서로 다른 목적을 나타내며, 추측 재실행 시 일관성을 유지하기 위한 독립적인 추적을 가능하게 합니다. EzRandomUsed 사용한 난수 스테이트 머신 실행 내 특정 카테고리에서 소비된 난수의 수를 추적합니다. 각 카테고리는 서로 다른 목적을 위한 독립적인 난수 추적을 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 category long  0 ~ 4294967294 카테고리 난수 사용 카테고리의 숫자 식별자입니다. 각 카테고리는 난수 소비를 독립적으로 추적하여, 스테이트 머신이 서로 다른 목적에 별도의 난수 시퀀스를 사용할 수 있도록 합니다. used long  0 ~ 4294967294 사용 횟수 이 카테고리에서 소비된 난수의 수입니다. 이 카테고리의 시퀀스에서 난수가 뽑힐 때마다 증가합니다. EzVerifyActionResult 검증 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 EzConsumeActionResult 소비 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 EzAcquireActionResult 획득 액션 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 EzTransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 메서드 emit 이벤트를 전송하여 상태 전이를 트리거한다 스테이트 머신에 이름이 지정된 이벤트를 전송하여, 정의된 전이 규칙에 따라 현재 상태에서 다음 상태로 이동시킵니다. 게임 클라이언트가 스테이트 머신을 진행시키는 주된 방법입니다. 예를 들면: 플레이어가 퀘스트 다이얼로그에서 “수락\"을 탭 → “accept” 이벤트 전송 → 상태가 “제시 중\"에서 “진행 중\"으로 변경 플레이어가 보스를 물리침 → “boss_defeated” 이벤트 전송 → 상태가 “보스 스테이지\"에서 “완료\"로 변경 플레이어가 스토리에서 선택지를 선택 → “choose_path_a” 이벤트 전송 → 선택한 분기 경로의 상태로 전이 추가 데이터를 JSON 인수(args)로 전달할 수 있습니다. 예를 들어 “submit_answer” 이벤트를 전송할 때 {“answer”: “B”}를 args에 포함할 수 있습니다. 스테이트 머신은 현재 상태에서 유효한 이벤트만 받아들입니다. 현재 상태에서 정의되지 않은 이벤트를 전송하면 오류가 반환되며 전이는 발생하지 않습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession statusName string  ~ 36자 상태 이름 eventName string  ~ 36자 이벤트 이름 args string “{}” ~ 4096자 스테이트 머신에 전달할 인자 Result 타입 설명 item EzStatus 스테이트 머신 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); var result = await domain . EmitAsync ( eventName : \"event-0001\" , args : \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ); var item = await result . ModelAsync (); var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); var future = domain . EmitFuture ( eventName : \"event-0001\" , args : \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"status-0001\" // statusName ); const auto Future = Domain -\u003e Emit ( \"event-0001\" , // eventName \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" // args ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . state_machine . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"status-0001\" ) var async_result = await domain . emit ( \"event-0001\" , # event_name \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" # args ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result exit 완료된 스테이트 머신을 정리한다 실행이 종료된 스테이트 머신 인스턴스를 삭제합니다. 스테이트 머신의 상태가 “Pass”(정상 완료) 또는 “Error”(실패)인 경우에만 호출할 수 있습니다. 스테이트 머신이 종료 상태에 도달한 후에도, Exit로 명시적으로 삭제하기 전까지는 시스템에 남아 있습니다. 이를 통해 다음과 같은 작업이 가능합니다: 플레이어에게 완료 결과를 표시(예: “퀘스트 클리어!” 화면) 최종 상태와 변수를 읽어 보상을 결정 오류 상태를 처리하고 다음 동작을 결정 일반적인 흐름: 스테이트 머신이 종료 상태에 도달 → 상태가 “Pass\"가 됨 게임이 최종 상태를 읽고 플레이어에게 보상을 부여 게임이 완료 화면을 표시 플레이어가 화면을 닫음 → 게임이 Exit를 호출하여 정리 Running 상태의 스테이트 머신에는 Exit를 호출할 수 없습니다. 실행 중인 스테이트 머신을 강제로 정지해야 하는 경우에는 서버 측 작업이 필요합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession statusName string  ~ 36자 상태 이름 Result 타입 설명 item EzStatus 종료된 스테이트 머신 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); var result = await domain . ExitAsync ( ); var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); var future = domain . ExitFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"status-0001\" // statusName ); const auto Future = Domain -\u003e Exit ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . state_machine . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"status-0001\" ) var async_result = await domain . exit ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result getStatus 특정 스테이트 머신 인스턴스의 현재 상태를 취득한다 특정 스테이트 머신 인스턴스의 상세 정보를 취득합니다. 현재 어떤 상태에 있는지, 저장된 변수 등이 포함됩니다. 워크플로의 현재 진행 상황을 플레이어에게 표시할 때 사용합니다. 예를 들면: 퀘스트 트래커에서 “현재 단계: 몬스터 3마리 처치(2/3)” 표시 튜토리얼 인디케이터로 플레이어가 어느 단계에 있는지 표시 프로세스 상태가 진행 중인지, 완료되었는지, 오류가 발생했는지 표시 응답에는 다음이 포함됩니다: 현재 상태 이름: 머신이 지금 어떤 상태에 있는지 변수: 스테이트 머신에 저장된 데이터(예: 진행 카운터, 선택 결과) 상태: 머신이 Running(동작 중), Pass(완료), Error(오류) 중 어느 것인지 스택 트레이스: 상태 전이 이력(디버깅에 유용) Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession statusName string  ~ 36자 상태 이름 Result 타입 설명 item EzStatus 스테이트 머신 상태 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"status-0001\" // statusName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . state_machine . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"status-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"status-0001\" // statusName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: StateMachine :: Model :: FStatus \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . state_machine . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"status-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listStatuses 플레이어의 스테이트 머신 인스턴스 목록을 취득한다 현재 플레이어에게 속한 모든 스테이트 머신 인스턴스를 취득합니다. 스테이트 머신은 서버에서 관리되는 워크플로로, 플레이어가 일련의 단계(상태)를 진행하는 과정을 추적합니다. 각 단계에서는 액션 실행, 플레이어 입력 대기, 조건에 따른 분기가 가능합니다. 스테이트 머신의 주요 사용 예: 퀘스트 진행: “퀘스트 수락” → “진행 중” → “보스전” → “완료” → “보상 수령” 튜토리얼 흐름: “환영” → “이동 튜토리얼” → “전투 튜토리얼” → “가챠 튜토리얼” → “완료” 기간 한정 이벤트: 제한 시간이 있는 여러 단계로 구성된 이벤트 프로세스 각 스테이트 머신 인스턴스는 다음 세 가지 상태 중 하나를 가집니다: Running: 스테이트 머신이 동작 중이며 다음 이벤트를 대기하고 있는 상태 Pass: 스테이트 머신이 정상적으로 완료된 상태(종료 상태에 도달) Error: 스테이트 머신에서 오류가 발생한 상태 상태로 필터링할 수 있습니다. 예를 들어 퀘스트 화면에 활성(Running) 상태의 스테이트 머신만 표시하거나, 정리가 필요한 완료된 것을 찾을 때 사용할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession status 문자열 열거형 enum {   “Running”,   “Wait”,   “Pass”,   “Error” } 스테이터스 이 스테이트 머신 인스턴스의 현재 실행 상태입니다. “Running\"은 머신이 전이를 처리 중임을 의미합니다. “Wait\"는 머신이 외부 이벤트(emit)를 대기 중임을 의미합니다. “Pass\"는 정상적으로 완료되었음을 의미합니다. “Error\"는 에러로 종료되었음을 의미합니다. 정의 설명 Running 실행 중 Wait 대기 중 Pass 정상 종료 Error 이상 종료 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 스테이트 머신 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . StatusesAsync ( status : \"Running\" ). ToListAsync (); var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . Statuses ( status : \"Running\" ); List EzStatus \u003e items = new List EzStatus \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e Statuses ( \"Running\" // status ); TArray Gs2 :: UE5 :: StateMachine :: Model :: FEzStatusPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStatuses ( callbackId ); var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeStatuses ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeStatuses ( callbackId ); const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeStatuses ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeStatuses ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. report 클라이언트 측 스테이트 머신 실행 결과를 서버로 전송하여 검증받는다 게임 클라이언트에서 로컬로 처리된 이벤트의 배치를 서버로 전송하여 검증을 받습니다. 이는 “추측 실행(speculative execution)“이라 불리는 최적화 기능입니다. 모든 이벤트마다 Emit을 호출하는(매번 네트워크 지연이 발생하는) 대신, 클라이언트가 로컬에서 스테이트 머신을 실행하고 여러 이벤트를 한꺼번에 처리한 뒤, 그 결과를 한 번의 호출로 서버에 전송합니다. 추측 실행의 작동 방식: 클라이언트가 스테이트 머신 정의의 로컬 사본을 보유합니다 이벤트가 연속으로 발생하는 경우(예: 게임플레이 중), 클라이언트는 서버의 응답을 기다리지 않고 로컬에서 처리합니다 이벤트를 배치 처리한 후, 클라이언트가 Report를 호출하여 모든 이벤트를 서버로 전송합니다 서버는 이벤트를 재생(replay)하고 최종 상태가 클라이언트가 보고한 내용과 일치하는지 검증합니다 상태가 일치하면 서버가 결과를 승인합니다. 일치하지 않는 경우(예: 클라이언트가 변조된 경우) StateMismatch 오류가 반환됩니다 다음과 같은 성능이 중요한 시나리오에서 유용합니다: 서버 응답을 기다리면 지연이 발생하는 빠른 템포의 게임플레이 플레이어가 일시적으로 접속이 끊길 수 있는 오프라인 지원 흐름 다수의 빠른 상태 전이를 배치 처리하는 경우 주의: 이 API를 사용하려면 네임스페이스에서 추측 실행이 활성화되어 있어야 합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession statusName string  ~ 36자 상태 이름 events List 0 ~ 1000 items 이벤트 목록 Result 타입 설명 item EzStatus 스테이트 머신 상태 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 StateMismatchException BadRequestException 리포트 검증 결과 상태가 일치하지 않습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); var result = await domain . ReportAsync ( events : new List Gs2 . Unity . Gs2StateMachine . Model . EzEvent \u003e { new Gs2 . Unity . Gs2StateMachine . Model . EzEvent () { EventType = \"emit\" , EmitEvent = new Gs2 . Unity . Gs2StateMachine . Model . EzEvent () { Event = \"message\" , Parameters = \"{\\\"payload\\\": \\\"Hello World\\\"}\" , Timestamp = 1000 , }, }, } ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2StateMachine . Exception . StateMismatchException e ) { // State of the verification result of the report is inconsistent. } var domain = gs2 . StateMachine . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Status ( statusName : \"status-0001\" ); var future = domain . ReportFuture ( events : new List Gs2 . Unity . Gs2StateMachine . Model . EzEvent \u003e { new Gs2 . Unity . Gs2StateMachine . Model . EzEvent () { EventType = \"emit\" , EmitEvent = new Gs2 . Unity . Gs2StateMachine . Model . EzEvent () { Event = \"message\" , Parameters = \"{\\\"payload\\\": \\\"Hello World\\\"}\" , Timestamp = 1000 , }, }, } ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2StateMachine . Exception . StateMismatchException ) { // State of the verification result of the report is inconsistent. } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e StateMachine -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Status ( \"status-0001\" // statusName ); const auto Future = Domain -\u003e Report ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: StateMachine :: Model :: FEzEvent \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: StateMachine :: Model :: FEzEvent \u003e () -\u003e WithEventType ( TOptional FString \u003e ( \"emit\" )) -\u003e WithEmitEvent ( MakeShared Gs2 :: UE5 :: StateMachine :: Model :: FEzEmitEvent \u003e () -\u003e WithEvent ( TOptional FString \u003e ( \"message\" )) -\u003e WithParameters ( TOptional FString \u003e ( \"{ \\\" payload \\\" : \\\" Hello World \\\" }\" )) -\u003e WithTimestamp ( TOptional int32 \u003e ( 1000 )) ); ); return v ; }() // events ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: StateMachine :: Error :: FStateMismatchError :: Class )) { // State of the verification result of the report is inconsistent. } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . state_machine . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . status ( \"status-0001\" ) var async_result = await domain . report ( [ Gs2StateMachineEzEvent . new () . with_event_type ( \"emit\" ) . with_emit_event ( Gs2StateMachineEzEmitEvent . new () . with_event ( \"message\" ) . with_parameters ( \"{ \\\" payload \\\" : \\\" Hello World \\\" }\" ) . with_timestamp ( 1000 ) ), ] # events ) if async_result . error != null : if async_result . error is Gs2StateMachineStateMismatchException : # 리포트 검증 결과 상태가 일치하지 않습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-StateMachine SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-StateMachine SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/state_machine/game_engine/"},{"content":"모델 EzAcceptVersion 승인한 버전 앱 버전이나 에셋 버전처럼 데이터에 연결된 버전이 아니라 동의한 이용약관의 버전처럼 사용자별로 버전 관리가 필요한 엔티티에서 사용합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. userId string  ~ 128자 사용자ID version EzVersion  버전 사용자가 승인 또는 거부한 버전 번호입니다. “active” 스코프의 버전 모델에서 사용되는 경우, 버전 체크 시 모델의 현재 버전과 비교됩니다. EzVersionModel 버전 모델 버전 모델에는 로그인은 허용하지만 버전 업그레이드가 가능함을 알리는 경고 버전과, 로그인을 허용하지 않는 에러 버전을 설정할 수 있습니다. 현재 버전을 클라이언트에 신고하도록 할 때, 서명 유무를 지정할 수 있습니다. 서명 있음을 선택한 경우, 클라이언트는 허위 버전을 신고할 수 없게 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. warningVersion EzVersion {type} == “simple” ※ 버전 업그레이드를 촉구하는 버전 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮은 경우에도 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 errorVersion EzVersion {type} == “simple” ※ 버전 체크에서 에러로 판정되는 버전 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 scope 문자열 열거형 enum {   “passive”,   “active” }  판정에 사용할 버전 값의 종류 버전 체크에 사용할 버전 값을 얻는 방법을 결정합니다. “passive\"는 체크 시점에 클라이언트가 현재 버전을 신고하는 방식이며, “active\"는 사용자가 과거에 명시적으로 승인한 버전(이용약관 동의 등)을 사용하는 방식입니다. 정의 설명 passive 클라이언트에서 전송 active 과거 명시적으로 승인한 버전 currentVersion EzVersion {type} == “simple” and {scope} == “active” ※ 현재 버전 이 버전 모델의 최신 버전입니다. “simple” 모드의 “active” 스코프에서만 사용되며, 사용자가 버전 업데이트를 승인·확인할 때 현재 버전을 알립니다. ※ type이(가) “simple\"이고 scope이(가) “active” 이면 필수 needSignature bool {scope} == “passive” ※ 판정할 버전 값에 서명 검증이 필요한지 여부 활성화하면 클라이언트는 버전 신고와 함께 암호 서명을 제공해야 합니다. 이를 통해 클라이언트가 버전 체크를 회피하기 위해 허위 버전을 신고하는 것을 방지합니다. 스코프가 “passive\"인 경우에만 적용됩니다. ※ scope이(가) “passive” 이면 필수 EzVersion 버전 3단계 계층(메이저, 마이너, 마이크로)으로 구성된 버전 번호를 나타냅니다. 버전 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. 버전 체크의 경고·에러 임계값 정의에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 major int  0 ~ 2147483646 메이저 버전 버전 비교에서 가장 우선순위가 높은 구성 요소입니다. 메이저 버전의 차이는 마이너 버전 및 마이크로 버전보다 우선합니다. minor int  0 ~ 2147483646 마이너 버전 버전 비교에서 두 번째로 우선순위가 높은 구성 요소입니다. 메이저 버전이 동일한 경우에만 비교됩니다. micro int  0 ~ 2147483646 마이크로 버전 버전 비교에서 가장 우선순위가 낮은 구성 요소입니다. 메이저 버전과 마이너 버전이 모두 동일한 경우에만 비교됩니다. EzStatus 버전 상태 버전 검증 결과를 나타냅니다. 체크에 사용된 버전 모델과, 클라이언트로부터 신고되었거나 사용자 승인으로부터 기록된 현재 버전을 포함합니다. 버전 체크 결과의 일부로 반환되어, 버전이 최신인지, 업그레이드 경고가 필요한지, 차단되는지를 클라이언트에 통지합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 versionModel EzVersionModel  버전 모델 이 버전 체크에 사용된 버전 모델 정의입니다. 체크 결과를 결정한 경고·오류 버전 임계값, 스코프, 기타 설정을 포함합니다. currentVersion EzVersion 현재 버전 버전 체크 시 평가된 버전입니다. “passive” 스코프의 경우 클라이언트가 신고한 버전이고, “active” 스코프의 경우 사용자가 과거에 승인한 버전입니다. 버전 정보를 사용할 수 없는 경우 존재하지 않을 수 있습니다. EzTargetVersion 검증할 버전 버전 체크를 위해 클라이언트가 전송하는 버전 신고를 나타냅니다. 서명 없음 모드에서는 버전을 직접 지정합니다. 서명 있음 모드에서는 변조 방지를 위해 암호 서명과 함께 버전이 바디에 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. version EzVersion {signature} == \"” ※ 버전 검증 대상 버전 번호입니다. 서명 검증이 필요하지 않은 경우(서명이 제공되지 않은 경우)에 사용됩니다. 서명이 제공된 경우, 버전은 서명된 바디에서 추출됩니다. ※ signature이(가) \"” 이면 필수 body string ~ 1048576자 바디 버전 정보를 포함하는 서명된 페이로드입니다. 서명 검증이 활성화된 경우(needSignature가 true)에 사용됩니다. 바디에는 서명과 대조하여 검증할 수 있는 형식으로 버전 데이터가 포함됩니다. signature string ~ 256자 서명 바디 내용을 검증하기 위한 암호 서명입니다. 제공된 경우, 서버는 버전 모델에 설정된 GS2-Key 암호화 키를 사용하여 서명을 검증한 후 신고된 버전을 받아들입니다. 메서드 getVersionModel 특정 버전 체크 정의의 상세 정보 조회 버전 이름을 지정하여 체크 규칙과 임계값을 포함한 상세 정보를 조회합니다. 응답에는 다음이 포함됩니다: 스코프: “passive” 체크(앱 버전 — 클라이언트가 버전을 보고)인지 “active” 체크(이용약관 — 플레이어가 명시적으로 동의해야 함)인지 경고 버전: 이 임계값을 밑돌면 소프트한 경고가 표시됩니다(예: “새 버전을 사용할 수 있습니다. 업데이트해 주세요.”) 에러 버전: 이 임계값을 밑돌면 강제 차단이 적용됩니다(예: “플레이를 계속하려면 업데이트가 필요합니다.”) 현재 버전: 최신 버전입니다(active 스코프의 경우, 플레이어가 동의해야 하는 버전) 스케줄 설정: GS2-Schedule과 연동된 경우, 시간 경과에 따라 변화하는 버전 임계값(예: 대규모 업데이트 이후 최소 버전을 단계적으로 인상) 버전 체크의 상세 정보를 표시하거나 커스텀 버전 체크 UI 로직을 구축할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EzVersionModel 버전 모델 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). VersionModel ( versionName : \"version-0001\" ); var item = await domain . ModelAsync (); var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). VersionModel ( versionName : \"version-0001\" ); var future = domain . ModelFuture (); yield return future ; var item = future . Result ; const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e VersionModel ( \"version-0001\" // versionName ); const auto Future = Domain -\u003e Model (); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } var domain = ez . version . namespace_ ( \"namespace-0001\" ) . version_model ( \"version-0001\" ) var async_result = await domain . model () if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). VersionModel ( versionName : \"version-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). VersionModel ( versionName : \"version-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . Subscribe ( value =\u003e { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 domain . Unsubscribe ( callbackId ); const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e VersionModel ( \"version-0001\" // versionName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e Subscribe ( []( TSharedPtr Gs2 :: Version :: Model :: FVersionModel \u003e value ) { // 값이 변화했을 때 호출됨 // value에는 변경 후의 값이 전달됨 } ); // 이벤트 핸들링 정지 Domain -\u003e Unsubscribe ( CallbackId ); var domain = ez . version . namespace_ ( \"namespace-0001\" ) . version_model ( \"version-0001\" ) # 이벤트 핸들링 시작 var callback_id = domain . subscribe_model ( func ( value ): # 값이 변화했을 때 호출됨 # value에는 변경 후의 값이 전달됩니다 pass ) # 이벤트 핸들링 정지 domain . unsubscribe_model ( callback_id ) Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. listVersionModels 버전 체크 정의 목록 조회 네임스페이스에 정의되어 있는 모든 버전 모델을 조회합니다. 각 버전 모델은 버전 체크 규칙을 나타냅니다. 예를 들어 “앱 버전”, “이용약관”, “에셋 버전” 등입니다. GS2-Version은 2가지 유형의 버전 체크를 지원합니다: 앱 버전 체크(passive 스코프): 게임 클라이언트가 자신의 버전(예: “1.2.3”)을 보고하고, 서버가 최소 요구 버전을 충족하는지 체크합니다. 클라이언트 버전이 “경고” 임계값을 밑돌면 → 업데이트 권장(플레이는 허용) 클라이언트 버전이 “오류” 임계값을 밑돌면 → 업데이트 강제(플레이 차단) 이용약관 체크(active 스코프): 플레이어가 현재 버전의 약관에 명시적으로 동의해야 합니다. 플레이어가 최신 버전에 동의하지 않은 경우 → 이용약관 다이얼로그 표시 플레이어가 이미 동의한 경우 → 체크 통과 어떤 버전 체크가 설정되어 있는지 확인하고, 적절한 시작 흐름(버전 체크 화면, 업데이트 안내, 약관 다이얼로그 등)을 구성할 때 사용합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 버전 모델 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ); var items = await domain . VersionModelsAsync ( ). ToListAsync (); var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ); var it = domain . VersionModels ( ); List EzVersionModel \u003e items = new List EzVersionModel \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ); const auto It = Domain -\u003e VersionModels ( ); TArray Gs2 :: UE5 :: Version :: Model :: FEzVersionModelPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeVersionModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeVersionModels ( callbackId ); var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeVersionModels ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeVersionModels ( callbackId ); const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeVersionModels ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeVersionModels ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. accept 버전을 승인한다(이용약관에 동의한다) 플레이어가 지정된 버전을 승인(동의)했음을 기록합니다. 이는 이용약관, 개인정보 처리방침, 또는 이와 유사한 법적 동의 사항에 대한 “동의합니다” 버튼에 해당합니다. 일반적인 흐름: 플레이어가 최신 버전에 동의하지 않았기 때문에 CheckVersion이 “terms_of_service\"에 대해 에러를 반환합니다 게임이 전문을 포함한 이용약관 다이얼로그를 표시합니다 플레이어가 내용을 읽고 “동의합니다\"를 탭합니다 게임이 표시된 버전 번호로 Accept를 호출합니다 다음 CheckVersion 호출에서 약관 체크가 통과합니다 중요: 반드시 플레이어에게 실제로 표시된 버전 번호를 전달하세요. 플레이어가 약관을 읽는 동안 서버에서 약관이 업데이트된 경우, 이전 버전을 전달하면 에러가 발생합니다 — 이를 통해 플레이어가 항상 최신 약관에 동의하도록 보장됩니다. 버전을 지정하지 않으면 최신 버전이 사용됩니다. 다만 경쟁 상태(race condition)를 방지하기 위해 버전을 명시적으로 지정하는 것을 권장합니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. version EzVersion 승인한 버전 Result 타입 설명 item EzAcceptVersion 승인한 버전 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 AcceptVersionInvalidException BadRequestException 승인 처리 도중 서버 버전이 갱신되어 오류가 발생했습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AcceptVersion ( versionName : \"eula\" ); var result = await domain . AcceptAsync ( version : new Gs2 . Unity . Gs2Version . Model . EzVersion { Major = 2 , Minor = 2 , Micro = 2 , } ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Version . Exception . AcceptVersionInvalidException e ) { // Error as a result of an updated server version during the approval process } var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AcceptVersion ( versionName : \"eula\" ); var future = domain . AcceptFuture ( version : new Gs2 . Unity . Gs2Version . Model . EzVersion { Major = 2 , Minor = 2 , Micro = 2 , } ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Version . Exception . AcceptVersionInvalidException ) { // Error as a result of an updated server version during the approval process } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e AcceptVersion ( \"eula\" // versionName ); const auto Future = Domain -\u003e Accept ( MakeShared Gs2 :: UE5 :: Version :: Model :: FEzVersion \u003e () -\u003e WithMajor ( 2 ) -\u003e WithMinor ( 2 ) -\u003e WithMicro ( 2 ) ) // version ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Version :: Error :: FAcceptVersionInvalidError :: Class )) { // Error as a result of an updated server version during the approval process } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . version . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . accept_version ( \"eula\" ) var async_result = await domain . accept ( ( Gs2VersionVersion . new () . with_major ( 2 ) . with_minor ( 2 ) . with_micro ( 2 )) # version ) if async_result . error != null : if async_result . error is Gs2VersionAcceptVersionInvalidException : # 승인 처리 도중 서버 버전이 갱신되어 오류가 발생했습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result delete 버전 승인 기록을 삭제한다 지정된 버전 모델에 대한 플레이어의 승인 또는 거부 기록을 삭제합니다. 삭제 후 다음 CheckVersion 호출에서는 플레이어가 이 버전 체크에 한 번도 응답하지 않은 것으로 처리됩니다. 사용 사례: 플레이어가 선택적 동의 사항에 대한 결정을 번복할 수 있도록 함(예: 데이터 수집 동의 철회) 테스트 또는 디버깅 목적으로 승인 상태를 초기화 버전 번호를 변경하지 않고 플레이어가 업데이트된 약관을 다시 읽도록 재승인을 강제 active 스코프 체크(이용약관)의 경우, 승인 기록을 삭제하면 플레이어는 다음 로그인 또는 버전 체크 시 다시 동의를 요청받게 됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. Result 타입 설명 item EzAcceptVersion 삭제한 승인 버전 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AcceptVersion ( versionName : \"eula\" ); var result = await domain . DeleteAsync ( ); var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AcceptVersion ( versionName : \"eula\" ); var future = domain . DeleteFuture ( ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e AcceptVersion ( \"eula\" // versionName ); const auto Future = Domain -\u003e Delete ( ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); var domain = ez . version . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . accept_version ( \"eula\" ) var async_result = await domain . delete ( ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result list 플레이어가 승인 또는 거부한 버전 목록 조회 현재 플레이어의 모든 버전 승인/거부 기록을 조회합니다. 각 기록에는 플레이어가 어떤 버전 모델에 응답했는지, 어떤 버전을 승인 또는 거부했는지가 포함됩니다. 주로 이용약관 및 개인정보 처리방침 관리에 사용됩니다. 예를 들면: 플레이어가 이미 동의한 약관과 그 버전을 표시 플레이어가 업데이트된 약관에 다시 동의해야 하는지 확인 플레이어가 동의한 내용을 확인할 수 있는 “약관 및 정책” 설정 화면 표시 앱 버전 체크(passive 스코프)에서는 승인 기록이 사용되지 않습니다. 클라이언트가 보고한 버전을 직접 비교하여 체크됩니다. 이 목록에는 active 스코프 체크(플레이어가 명시적으로 승인/거부한 경우)의 기록만 포함됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 승인한 버전 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var items = await domain . AcceptVersionsAsync ( ). ToListAsync (); var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); var it = domain . AcceptVersions ( ); List EzAcceptVersion \u003e items = new List EzAcceptVersion \u003e(); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { onError . Invoke ( it . Error , null ); break ; } if ( it . Current != null ) { items . Add ( it . Current ); } else { break ; } } const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); const auto It = Domain -\u003e AcceptVersions ( ); TArray Gs2 :: UE5 :: Version :: Model :: FEzAcceptVersionPtr \u003e Result ; for ( auto Item : * It ) { if ( Item . IsError ()) { return false ; } Result . Add ( Item . Current ()); } 값 변경 이벤트 핸들링 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeAcceptVersions ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeAcceptVersions ( callbackId ); var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ); // 이벤트 핸들링 시작 var callbackId = domain . SubscribeAcceptVersions ( () =\u003e { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 domain . UnsubscribeAcceptVersions ( callbackId ); const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ); // 이벤트 핸들링 시작 const auto CallbackId = Domain -\u003e SubscribeAcceptVersions ( []() { // 리스트의 요소가 변화했을 때 호출됨 } ); // 이벤트 핸들링 정지 Domain -\u003e UnsubscribeAcceptVersions ( CallbackId ); Warning 이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다. 로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다. 따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다. reject 버전을 거부한다(선택적 약관을 거절한다) 플레이어가 지정된 버전을 거부(거절)했음을 기록합니다. 이는 “거절합니다” 또는 “괜찮습니다” 버튼에 해당하지만, 동의가 필수가 아닌 선택적 약관에 대해서만 사용할 수 있습니다. 이 기능은 버전 모델의 승인 요건이 “optional\"로 설정된 경우에만 사용할 수 있습니다. 승인이 필수(mandatory)인 경우, 플레이어는 반드시 동의해야 하며 거부 옵션은 존재하지 않습니다. 선택적 약관의 사용 사례: 선택적 데이터 수집 동의: “게임 개선을 위해 이용 데이터를 수집해도 될까요?” → 동의함 / 거절함 선택적 마케팅 알림: “프로모션 이메일 수신을 원하십니까?” → 동의함 / 거절함 선택적 베타 기능: “실험적인 기능을 사용해 보시겠습니까?” → 동의함 / 거절함 플레이어가 거부하더라도 거부한 사실이 기록되므로, 프롬프트를 확인하고 응답했다는 것을 알 수 있습니다. 다음 CheckVersion에서는 (선택 사항이므로) 버전 체크가 통과하며, 게임은 거부 기록을 확인하여 그에 맞게 동작을 조정할 수 있습니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. version EzVersion 거부한 버전 Result 타입 설명 item EzAcceptVersion 거부한 버전 Error 이 API에는 특별한 예외가 정의되어 있습니다. GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다. 일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요. 타입 베이스 클래스 설명 AcceptVersionInvalidException BadRequestException 승인 처리 도중 서버 버전이 갱신되어 오류가 발생했습니다 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot try { var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AcceptVersion ( versionName : \"version-0001\" ); var result = await domain . RejectAsync ( version : null ); var item = await result . ModelAsync (); } catch ( Gs2 . Gs2Version . Exception . AcceptVersionInvalidException e ) { // Error as a result of an updated server version during the approval process } var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). AcceptVersion ( versionName : \"version-0001\" ); var future = domain . RejectFuture ( version : null ); yield return future ; if ( future . Error != null ) { if ( future . Error is Gs2 . Gs2Version . Exception . AcceptVersionInvalidException ) { // Error as a result of an updated server version during the approval process } onError . Invoke ( future . Error , null ); yield break ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { onError . Invoke ( future2 . Error , null ); yield break ; } var result = future2 . Result ; const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e AcceptVersion ( \"version-0001\" // versionName ); const auto Future = Domain -\u003e Reject ( // version ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { auto e = Future -\u003e GetTask (). Error (); if ( e -\u003e IsChildOf ( Gs2 :: Version :: Error :: FAcceptVersionInvalidError :: Class )) { // Error as a result of an updated server version during the approval process } return false ; } // 변경된 값 / 결과 값을 취득 const auto Future2 = Future -\u003e GetTask (). Result () -\u003e Model (); Future2 -\u003e StartSynchronousTask (); if ( Future2 -\u003e GetTask (). IsError ()) { return Future2 -\u003e GetTask (). Error (); } const auto Result = Future2 -\u003e GetTask (). Result (); var domain = ez . version . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . accept_version ( \"version-0001\" ) var async_result = await domain . reject ( null # version ) if async_result . error != null : if async_result . error is Gs2VersionAcceptVersionInvalidException : # 승인 처리 도중 서버 버전이 갱신되어 오류가 발생했습니다 pass push_error ( str ( async_result . error )) return var result = async_result . result checkVersion 모든 버전 체크를 한 번에 실행 게임 클라이언트의 버전과 플레이어의 약관 동의 상태를, 네임스페이스 내의 모든 버전 모델에 대해 체크합니다. 게임 시작 시 호출하여, 플레이어가 계속 진행할 수 있는지, 업데이트나 약관 동의가 필요한지를 판정하는 메인 API입니다. 일반적인 시작 흐름: 게임이 시작되고, 클라이언트의 현재 버전(앱 버전, 에셋 버전 등)을 전달하여 CheckVersion을 호출 서버가 각 버전 모델을 체크하고, 두 개의 목록을 반환: warnings: 체크는 통과했지만 클라이언트가 권장 버전보다 낮음(“업데이트가 있습니다” 다이얼로그 표시) errors: 체크 실패 — 클라이언트가 너무 오래되었거나 약관에 미동의(플레이어 차단) 오류가 있는 경우, 적절한 화면을 표시: 앱 버전 오류 → “App Store / Google Play에서 업데이트해 주세요\"라고 표시하고 리다이렉트 이용약관 오류 → 약관 다이얼로그를 표시하고, 플레이어가 동의하면 Accept를 호출 경고만 있는 경우(오류 없음), 플레이어를 계속 진행시키되 필요에 따라 업데이트 권장을 표시 경고도 오류도 없으면, 플레이어는 평소대로 게임에 진입 targetVersions 파라미터에는 passive 스코프의 체크(앱 버전 등)용으로 클라이언트의 현재 버전 번호를 전달합니다. active 스코프의 체크(이용약관 등)는 플레이어의 동의 이력을 기반으로 자동으로 평가됩니다. Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameSession GameSession  GameSession targetVersions List [] 0 ~ 1000 items 검증할 버전 목록 Result 타입 설명 projectToken string 로그인한 프로젝트 토큰 warnings List 버전 검증 결과 경고 목록 errors List 버전 검증 결과 오류 목록 구현 예제 Game Engine: Unity (UniTask) Unity (Vanilla) Unreal Engine 5 Godot var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Checker ( ); var result = await domain . CheckVersionAsync ( targetVersions : new List Gs2 . Unity . Gs2Version . Model . EzTargetVersion \u003e { new Gs2 . Unity . Gs2Version . Model . EzTargetVersion () { VersionName = \"app\" , Version = new Gs2 . Unity . Gs2Version . Model . EzTargetVersion () { Major = 1 , Minor = 2 , Micro = 3 , }, }, new Gs2 . Unity . Gs2Version . Model . EzTargetVersion () { VersionName = \"asset\" , Version = new Gs2 . Unity . Gs2Version . Model . EzTargetVersion () { Major = 1 , Minor = 2 , Micro = 3 , }, }, } ); var projectToken = result . ProjectToken ; var warnings = result . Warnings ; var errors = result . Errors ; var domain = gs2 . Version . Namespace ( namespaceName : \"namespace-0001\" ). Me ( gameSession : GameSession ). Checker ( ); var future = domain . CheckVersionFuture ( targetVersions : new List Gs2 . Unity . Gs2Version . Model . EzTargetVersion \u003e { new Gs2 . Unity . Gs2Version . Model . EzTargetVersion () { VersionName = \"app\" , Version = new Gs2 . Unity . Gs2Version . Model . EzTargetVersion () { Major = 1 , Minor = 2 , Micro = 3 , }, }, new Gs2 . Unity . Gs2Version . Model . EzTargetVersion () { VersionName = \"asset\" , Version = new Gs2 . Unity . Gs2Version . Model . EzTargetVersion () { Major = 1 , Minor = 2 , Micro = 3 , }, }, } ); yield return future ; if ( future . Error != null ) { onError . Invoke ( future . Error , null ); yield break ; } var projectToken = future . Result . ProjectToken ; var warnings = future . Result . Warnings ; var errors = future . Result . Errors ; const auto Domain = Gs2 -\u003e Version -\u003e Namespace ( \"namespace-0001\" // namespaceName ) -\u003e Me ( GameSession ) -\u003e Checker ( ); const auto Future = Domain -\u003e CheckVersion ( [] { auto v = MakeShared TArray TSharedPtr Gs2 :: UE5 :: Version :: Model :: FEzTargetVersion \u003e\u003e\u003e (); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Version :: Model :: FEzTargetVersion \u003e () -\u003e WithVersionName ( TOptional FString \u003e ( \"app\" )) -\u003e WithVersion ( MakeShared Gs2 :: UE5 :: Version :: Model :: FEzVersion \u003e () -\u003e WithMajor ( TOptional int32 \u003e ( 1 )) -\u003e WithMinor ( TOptional int32 \u003e ( 2 )) -\u003e WithMicro ( TOptional int32 \u003e ( 3 )) ); ); v -\u003e Add ( MakeShared Gs2 :: UE5 :: Version :: Model :: FEzTargetVersion \u003e () -\u003e WithVersionName ( TOptional FString \u003e ( \"asset\" )) -\u003e WithVersion ( MakeShared Gs2 :: UE5 :: Version :: Model :: FEzVersion \u003e () -\u003e WithMajor ( TOptional int32 \u003e ( 1 )) -\u003e WithMinor ( TOptional int32 \u003e ( 2 )) -\u003e WithMicro ( TOptional int32 \u003e ( 3 )) ); ); return v ; }() // targetVersions ); Future -\u003e StartSynchronousTask (); if ( Future -\u003e GetTask (). IsError ()) { return false ; } const auto Result = Future -\u003e GetTask (). Result (); const auto ProjectToken = Result -\u003e ProjectToken ; const auto Warnings = Result -\u003e Warnings ; const auto Errors = Result -\u003e Errors ; var domain = ez . version . namespace_ ( \"namespace-0001\" ) . me ( game_session ) . checker ( ) var async_result = await domain . check_version ( [ Gs2VersionEzTargetVersion . new () . with_version_name ( \"app\" ) . with_version ( Gs2VersionEzVersion . new () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ), Gs2VersionEzTargetVersion . new () . with_version_name ( \"asset\" ) . with_version ( Gs2VersionEzVersion . new () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ), ] # target_versions ) if async_result . error != null : push_error ( str ( async_result . error )) return var result = async_result . result","lang":"ko","section":"api_reference","summary":"게임 엔진용 GS2-Version SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Version SDK for Game Engine API 레퍼런스","url":"/ko/api_reference/version/game_engine/"},{"content":"중간까지는 일반적인 튜토리얼과 동일한 절차입니다. GS2 설정 SDK 설정 크리덴셜(API 키) 생성 로그인 처리에 필요한 리소스 준비 클라이언트 초기화 환경 정보 생성 먼저 환경 정보를 정의하는 ScriptableObject를 생성합니다. Project에서 컨텍스트 메뉴를 열어 Create \u003e Game Server Services \u003e Core \u003e Environment 를 생성합니다. 생성한 ScriptableObject에 크리덴셜(API 키) 생성 에서 생성한 clientId / clientSecret을 설정합니다. Name에는 환경 이름을 입력합니다. 클라이언트 홀더 생성 다음으로 GS2 클라이언트를 보유하는 GameObject를 생성합니다. 씬 안에 적당한 GameObject를 생성합니다. 이번에는 ‘GS2’라는 이름으로 준비했습니다. Environments에 앞서 생성한 Environment를 지정하고, 현재 유효한 환경을 결정하기 위한 Active Environment에 환경 이름을 지정합니다. 환경 전환을 쉽게 하기 위해 이러한 설정이 가능하도록 되어 있지만, 제품 출시 시에는 개발 환경 등의 ScriptableObject가 빌드 산출물에 포함되지 않도록 하는 것을 권장합니다. OnError에는 초기화에 실패했을 때 발생하는 이벤트 핸들러를 설정할 수 있습니다. GS2ClientHolder에는 에러 메시지를 덤프하는 DebugErrorHandler 함수가 마련되어 있습니다. 이번에는 에러가 발생했다는 것만 파악할 수 있으면 되므로, 이 이벤트 핸들러를 이용합니다. 이 정도의 설정만으로 게임 실행 시 자동으로 SDK 초기화가 이루어집니다. 계정 생성과 로그인 GS2 리소스 정보 생성 환경을 생성했던 것처럼 GS2에서 이용 가능한 리소스도 ScriptableObject로 선언해야 합니다. 이번에는 로그인 처리에 필요한 리소스 준비 에서 GS2-Account에 ‘game-0001’이라는 네임스페이스를 생성하고, GS2-Key에 ‘account-encryption-key-namespace’라는 이름의 네임스페이스와 ‘account-encryption-key’라는 이름의 암호화 키를 생성했으므로, 그 설정을 반영해야 합니다. 앞서와 마찬가지로 Project의 컨텍스트 메뉴에서 Create \u003e Game Server Services \u003e Account \u003e Namespace 로 ScriptableObject를 생성합니다. 생성한 ScriptableObject에 네임스페이스 이름을 입력합니다. 마찬가지로 GS2-Key의 ScriptableObject도 생성합니다. 로그인 처리 구현 구현이라고는 해도, 씬 안에 배치하기만 하면 ‘계정을 생성하고 로그인’하는 처리를 실행해 주는 Prefab이 준비되어 있습니다. Hierarchy에서 적당한 GameObject를 선택한 상태로 컨텍스트 메뉴를 열어, Game Server Services \u003e Core \u003e Action \u003e AutoLogin 을 선택합니다. 그러면 선택하고 있던 노드 아래에 Gs2AutoLogin이라는 프리팹 오브젝트가 추가됩니다. Namespace에 GS2-Account 네임스페이스의 ScriptableObject를, Key에 GS2-Key 암호화 키의 ScriptableObject를 지정합니다. 이벤트 핸들러로 OnAutoLoginComplete와 OnError가 준비되어 있습니다. 성공 시에는 OnAutoLoginComplete가 호출되어 자기 자신의 GameObject를 비활성화하는 처리가 동작합니다. 실패 시에는 OnError가 호출되어 GS2ClientHolder의 DebugErrorHandler를 호출하도록 설정되어 있습니다. 동작의 시각화 지금부터가 UIKit의 진가를 발휘할 부분입니다. 로그인 상황을 화면에 표시해 봅시다. 텍스트 노드 생성 Canvas 아래에 View라는 계층을 마련하고, 그 아래에 NotLoggedIn / LoggedIn이라는 텍스트를 배치합니다. 이처럼 화면 중앙에 두 개의 텍스트가 겹쳐서 표시된 상태입니다. 이제부터 로그인 상태에 맞춰 표시할 텍스트를 전환하도록 하겠습니다. 로그인 상태에 맞춰 노드를 표시·비표시하기 UI Kit에는 상태에 맞춰 특정 노드를 활성화하거나 비활성화할 수 있는 Enabler라는 컴포넌트가 있습니다. View 노드를 선택하고 컴포넌트를 추가합니다. 컴포넌트에는 표시 조건과 제어 대상을 설정할 수 있습니다. Logged In에 체크가 되어 있지 않은 상태 = 로그인하지 않은 상태 일 때 제어 대상 을 표시한다는 의미입니다. 컴포넌트를 2개 등록하고, 각각 로그인 상태·미로그인 상태에서 어떤 노드를 활성화할지 설정합니다. 실행 실행해 봅시다. 잠시 위와 같은 화면이 표시된 후, 곧바로 아래와 같은 화면으로 전환됩니다. 즉, AutoLogin 프리팹이 로그인 처리를 수행하고, 그 결과 로그인 상태가 변화하여 UI 표시도 자동으로 전환된 것입니다. 자신의 사용자ID 표시 앞서는 Enabler를 사용해 보았는데, 이번에는 Context와 Fetcher, Label을 사용해 봅시다. 먼저 UI를 준비합니다. LoggedIn 아래에 UserId라는 이름의 텍스트 노드를 생성합니다. 현재 로그인 중인 플레이어의 사용자ID를 이 텍스트에 반영해 봅시다. LoggedIn 노드를 선택합니다. Gs2AccountOwnAccountContext와 Gs2AccountOwnAccountFetcher 컴포넌트를 추가합니다. Gs2AccountOwnAccountContext에는 표시하고 싶은 계정 정보를 설정합니다. Own Account의 ScriptableObject를 생성합니다. Own Account는 자기 자신의 사용자ID 등 계정 정보를 컨텍스트로 다루기 위한 ScriptableObject입니다. 이 ScriptableObject를 Gs2AccountOwnAccountContext에 지정하면, LoggedIn 노드 아래에서 Account에 관한 처리를 UIKit을 사용하여 수행할 때 Context에서 지정한 오브젝트에 관한 조작으로 처리됩니다. Gs2AccountOwnAccountContext 아래에 Gs2AccountOwnAccountFetcher를 배치했습니다. 이렇게 하면 Gs2AccountOwnAccountFetcher가 로그인 중인 사용자에 관한 정보를 서버에서 가져와 보관해 줍니다. 다음으로 UserId 노드에 Gs2AccountOwnAccountLabel을 추가합니다. Format에는 텍스트에 반영할 문자열의 형식 지정 방법을 지정합니다. 이번에는 Fetcher가 가져온 계정 정보 중에서 userId 필드를 반영한 텍스트를 만듭니다. OnUpdate에 형식이 지정된 텍스트가 전달되므로, 이를 텍스트 컴포넌트에 반영합니다. 다시 한 번 실행해 봅시다. 로그인이 완료되면 오른쪽 아래에 사용자ID가 표시되었습니다. UI Kit의 사용법이 낯설게 느껴지셨나요? 작성한 코드가 위에서 아래로 처리되는 방식의 프로그래밍을 절차형 프로그래밍 이라고 부릅니다. 반면, UI Kit과 같은 방식의 프로그래밍을 선언적 프로그래밍 이라고 부릅니다. 아마 낯설게 느껴졌다면, 그동안 주로 절차형 프로그래밍 을 해 오셨기 때문일 것입니다. 절차형 프로그래밍 에 익숙한 분이라면 ‘처리의 부작용이 어떻게 발생하는지 추적하기 어렵고 사용하기 불편해 보인다’고 느꼈을지도 모릅니다. 반면, 부작용에 대해 고민할 필요 없이 최종적으로 각 GameObject가 어떻게 동작하기를 원하는지를 정의함으로써 처리 순서나 누가 실행하는지를 신경 쓰지 않아도 되는 것이 선언적 프로그래밍 의 장점입니다. 절차형 프로그래밍 과 선언적 프로그래밍 의 차이를 이해하면, UI Kit처럼 상태에 따라 UI가 어떻게 되기를 원하는지를 선언하는 작성 스타일이 Unity와 궁합이 좋다는 것을 이해할 수 있을 것입니다.","lang":"ko","section":"get_start","summary":"GS2 UIKit for Unity 사용 방법에 대하여\n","title":"GS2 UIKit for Unity 튜토리얼","url":"/ko/get_start/uikit/"},{"content":"사용자나 크리덴셜(인증 정보)의 추가는 GS2-Identifier의 관리 화면에서 수행할 수 있지만, GS2-Deploy를 이용하면 더 간단합니다. GS2-Deploy는 지속적 딜리버리 실현을 목적으로 한 서비스입니다. YAML 형식으로 작성된 코드를 사용하여 리소스의 자동 구축을 수행할 수 있습니다. 예를 들어, 사용자를 신규로 추가하는 템플릿을 사용하여 스택을 생성하면, 자동으로 신규 사용자를 GS2-Identifier에 추가할 수 있습니다. 스택에 대해서 GS2-Deploy는 템플릿(GS2 내 리소스를 어떻게 조작하고 구축할지에 대한 절차가 작성된 것)을 바탕으로, 실제로 각 서비스의 리소스를 조작합니다. 이 템플릿으로 구축한 리소스를 집약한 것을 스택이라고 합니다. 스택에 대해 내용을 변경한 템플릿을 다시 적용하면, 갱신 처리가 실행됩니다. 변경의 차이를 검출하여, 새로 생성이 필요해진 리소스는 신규 생성, 갱신이 필요한 리소스는 갱신, 삭제가 필요한 리소스는 자동으로 삭제를, 각 리소스에 대해 수행합니다. 이 구조 덕분에 개발자는 필요 없어진 리소스를 삭제하는 등의 작업을 할 필요가 없어지고, 원하는 리소스의 상태를 템플릿에 작성하는 것만으로 자동으로 구축할 수 있게 됩니다. 그럼 실제로 템플릿을 사용하여 스택을 생성해 봅시다. YAML GS2TemplateFormatVersion : \"2019-05-01\" Description : GS2 SDK identifier template Version 2019-07-10 Globals : Alias : ApplicationUserName : application Resources : IdentifierApplicationUser : Type : GS2::Identifier::User Properties : Name : ${ApplicationUserName} IdentifierApplicationUserAttachPolicy : Type : GS2::Identifier::AttachSecurityPolicy Properties : UserName : ${ApplicationUserName} SecurityPolicyId : grn:gs2::system:identifier:securityPolicy:ApplicationAccess DependsOn : - IdentifierApplicationUser IdentifierApplicationIdentifier : Type : GS2::Identifier::Identifier Properties : UserName : ${ApplicationUserName} DependsOn : - IdentifierApplicationUser Outputs : ApplicationClientId : ! GetAttr IdentifierApplicationIdentifier.Item.ClientId ApplicationClientSecret : ! GetAttr IdentifierApplicationIdentifier.ClientSecret 예시로 제시한 것은 ApplicationAccess 권한을 설정한 사용자를 생성하는 템플릿의 샘플입니다. ApplicationUserName: application 부분을 변경하면, GS2-Identifier에 생성되는 사용자 이름을 변경할 수 있습니다. 템플릿 다운로드 이 템플릿 파일을 저장합니다. 이어서 매니지먼트 콘솔의 사이드 메뉴에서 Deploy \u003e Stacks를 선택합니다. 스택 신규 생성에서 템플릿 데이터를 지정하여 스택을 생성합니다. 생성한 스택에 등록된 설정의 반영 상태는 스택의 실행 상태 항목에서 확인할 수 있습니다. 몇 초 후 CREATE_COMPLETE가 되고, 크리덴셜 설정이 완료됩니다. 반영 완료 후 아웃풋 탭을 선택하면, 크리덴셜의 클라이언트ID와 클라이언트 시크릿이 표시됩니다. 이 값은 나중에 게임 앱 측에 설정합니다.","lang":"ko","section":"get_start","summary":"GS2-Deploy를 사용하여 설정을 자동화\n","title":"GS2-Deploy","url":"/ko/get_start/tutorial/setup_credential/deploy/"},{"content":"관리 콘솔을 사용한 설정은 손쉽게 실행할 수 있다는 점이 매력입니다. 하지만 “같은 환경을 하나 더 만들어 달라\"는 요청을 받았을 때, 당신은 분명 절망하게 될 것입니다. 게임 개발에서는 일반적으로 “개발 환경”, “검증 환경”, “운영 환경\"과 같이 여러 서버 환경이 필요합니다. 각 환경에서 관리 콘솔상의 동일한 조작을 반복하며 GS2 설정을 실수 없이 수행하는 것은 불가능하다고 할 수 있습니다. GS2-Deploy 그래서 GS2 에는 환경 구축을 위한 마이크로서비스인 GS2-Deploy 가 준비되어 있습니다. 당신이 클라우드에 정통한 엔지니어라면, AWS 가 제공하는 Cloud Formation 의 GS2 버전이라고만 말해도 이 마이크로서비스의 역할을 이해할 수 있을 것입니다. 이해했다면 더 이상 이 페이지를 읽어나갈 필요는 없습니다. GS2 는 Cloud Formation 과 같은 기능을 사용하여 마이크로서비스를 오케스트레이션할 수 있습니다. 그렇지 않은 분도 안심하세요. 여기서부터 GS2-Deploy 에 대해 자세히 설명하겠습니다. Infrastructure as Code 관리 화면을 사용하여 GS2 설정을 반영하는 것이 얼마나 어리석은 일인지, 이미 당신이 이해하고 있다고 믿습니다. 이러한 어리석음에 맞서기 위해, 서버 인프라의 세계에서는 다양한 개선이 이루어져 왔습니다. 그리고 그 성과가 바로 Infrastructure as Code(IaC) 입니다. 20년 전에는 서버를 새로 세팅하게 된 인프라 엔지니어가 한 대 한 대에 명령어를 입력하여 환경을 구축했습니다. “HTTP 서버 설치”, “HTTP 서버 설정 파일 갱신”, “데이터베이스 서버 설치”, “데이터베이스에 스키마 등록” 이러한 작업은 한 대라면 문제없지만, 100대의 서버에 설정한다면 어떨까요? 1주일에 걸쳐 100대의 서버를 세팅했지만, 그중 몇 대는 설정 실수로 동작하지 않는 일이 벌어지곤 했습니다. 2006년에 Amazon 이 현대 클라우드의 기초라 할 수 있는 Elastic Compute Cloud 를 출시했습니다. 그러자 이전까지는 발주하고 나서 서버가 손에 들어오기까지 몇 개월을 기다려야 했지만, 발주 후 5분 만에 서버를 손에 넣을 수 있는 상태가 되었습니다. 이는 서버 인프라 세계에 격변을 가져왔습니다. 지금까지는 하드웨어 리드타임이 몇 개월이나 걸렸기 때문에, 서버를 세팅하고 실수가 있으면 수정하는 작업에 1주일을 들이더라도 비효율을 감출 수 있었습니다. 하지만 5분 만에 서버를 조달한 후 1주일을 들여 서버를 세팅하는 것은 뭔가 이상하다는 사실을 깨달은 사람들이 있었습니다. 그래서 서버 세팅 절차를 자동화하여 세팅에 걸리는 시간을 단축하려는 동기가 높아졌습니다. 그 결과물로 등장한 것이 서버 세팅 절차를 코드화하는 IaC 입니다. IaC 에 의해 서버 세팅 시간은 빠르고 정확해졌습니다. IaC 의 접근 방식 IaC 에는 2가지 접근 방식이 존재합니다. 첫 번째는 명령형, 두 번째는 선언형입니다. 명령형은 “apt install httpd\"와 같은 세팅 절차의 명령어를 나열하고, 이를 실행함으로써 자동화하려는 사고방식에 기반합니다. 이는 사람이 수행하던 세팅 절차를 자동화하려 할 때 자연스러운 발상입니다. 선언형은 “웹 서버가 필요하다\"는 것을 명시합니다. 이때 웹 서버를 만들기 위해 필요한 절차는 고려하지 않습니다. 자, 당신은 이 두 가지 방식 중 어느 쪽이 더 우수하다고 생각하십니까? 이 두 가지 접근 방식의 우열을 가리려면, 실무에 기반한 예시를 드는 것이 이해하기 쉬울 것입니다. 당신은 100대의 서버가 있는 서비스를 맡고 있습니다. 그런데 서비스 이용자가 줄어들어 서버 대수를 절반으로 줄이라는 요구를 받았습니다. 50대를 남기고, 나머지 50대는 전원을 껐습니다. 그 반년 후, 서비스가 호조를 보이면서 전원을 껐던 50대의 서버를 다시 사용하여 100대의 서버를 준비하라는 요구를 받습니다. 자, 반년 만에 전원을 켠 서버를 최신 상태로 만들어야 하는데, 이때 명령형과 선언형의 차이가 명확해집니다. 명령형은 지난번에 어디까지 명령을 실행했는지 알 수 없습니다. 반면 선언형은 현재 상태와 새로 선언된 상태의 차이를 알 수 있다면, 그 차이를 메우기 위한 갱신만 하면 됩니다. 이러한 과거 사례를 참고하여 GS2-Deploy 는 선언형 IaC 를 구현하고 있습니다. 템플릿 GS2-Deploy 는 템플릿 파일에 GS2 의 각 마이크로서비스에 요구하는 상태를 선언하고, 이를 적용함으로써 환경 구축을 할 수 있도록 되어 있습니다. 관리 콘솔을 통해 GS2-Inventory 에 리소스를 생성했던 절차를 그대로 템플릿으로 만들어 봅시다. YAML GS2TemplateFormatVersion : \"2019-05-01\" Resources : InventoryNamespace : Type : GS2::Inventory::Namespace Properties : Name : test InventoryMasterData : Type : GS2::Inventory::CurrentItemModelMaster Properties : NamespaceName : test Settings : { \"version\": \"2019-02-05\" , \"inventoryModels\": [ { \"name\": \"inventory\" , \"initialCapacity\": 5 , \"maxCapacity\": 10 , \"itemModels\": [ { \"name\": \"Potion\" , \"stackingLimit\": 99 , \"allowMultipleStacks\": true , \"sortValue\": 1 } ] } ] } 이것으로 test 라는 이름의 네임스페이스를 생성하고 마스터 데이터를 등록하는 템플릿이 완성되었습니다. 이 파일을 GS2-Deploy 에 업로드함으로써 환경 구축을 할 수 있으므로, 이제 환경을 새로 만드는 것도 더 이상 두렵지 않겠지요. 갱신 GS2-Deploy 는 갱신 처리에서도 영리하게 동작합니다. 이전에 업로드한 템플릿과 새로 업로드한 템플릿의 차이를 감지합니다. 늘어난 것이 있으면 생성 줄어든 것이 있으면 삭제 변경된 것이 있으면 갱신 이러한 동작 덕분에, 하나의 템플릿 파일을 여러 개발자가 편집하더라도 문제가 되지 않습니다.","lang":"ko","section":"overview","summary":"GS2-Deploy 를 사용하여 마이크로서비스에 리소스를 생성한다\n","title":"GS2-Deploy 를 사용한 설정","url":"/ko/overview/workflow/setup_gs2_resources/automation_setup/"},{"content":"계정 생성이 완료되면 프로젝트를 생성합니다. 프로젝트에는 요금제와 청구처를 설정할 수 있습니다. 즉, 하나의 계정이라도 프로젝트마다 서로 다른 청구처를 설정할 수 있습니다. 이는 퍼블리셔가 GS2 이용 요금을 부담하도록 하는 개발사에게는 유의미한 구성일 것입니다. 프로젝트 생성이 완료되면 GS2 이용을 시작하기 위한 준비가 완료됩니다.","lang":"ko","section":"overview","summary":"GS2에 프로젝트를 생성하는 방법\n","title":"GS2에 프로젝트 생성","url":"/ko/overview/workflow/setup_gs2/create_project/"},{"content":"먼저 GS2의 계정과 프로젝트의 관계에 대한 이해를 깊게 해봅시다. 계정과 프로젝트는 다음과 같은 데이터 구조를 가집니다. Gs2Account \"1\" *-- \"many\" Gs2Project Gs2Project \"1\" -- \"1\" BillingMethod Gs2Project \"1\" *-- \"many\" GS2Resources","lang":"ko","section":"overview","summary":"GS2 이용을 시작하는 방법\n","title":"GS2의 이용 시작","url":"/ko/overview/workflow/setup_gs2/"},{"content":"이 섹션에서는 Game Engine 용 SDK인 GS2 SDK for Unity, GS2 SDK for Unreal Engine 5, GS2 SDK for Godot 의 설치 절차에 대해 자세히 설명합니다. GS2 SDK for Unity 설치 절차 GS2 SDK for Unity Installer Version 2024.4.1 위 링크에서 UnityPackage 형식의 설치 프로그램을 다운로드합니다. 새로 Unity 프로젝트를 생성하거나 기존 Unity 프로젝트를 준비하여 Unity Editor 에서 엽니다. 메뉴의 『Assets \u003e Import Package \u003e Custum Packages…』 에서 gs2-unity-installer_2024.4.1.unitypackage 파일을 임포트합니다. Unity Editor 메뉴에서 『Window \u003e Game Server Services \u003e SDK Installer』 를 선택합니다. SDK 설치 프로그램 창이 표시됩니다. 『Install』 을 선택합니다. 설치가 완료되면 프로젝트의 『Packages』에 SDK가 설치되며, Package Manager에서 설치되었는지 확인할 수 있습니다. GS2 SDK for Unity 는 GS2-CSharp-SDK 와 GS2 SDK for Unity 로 구성되어 있습니다. 설치 완료 후 정상적으로 동작하지 않는 경우, Unity Editor 를 한 번 재시작해 보시기 바랍니다. GS2 UIKit for Unity 설치 절차 Unity Editor 메뉴에서 『Window \u003e Game Server Services \u003e UIKit for Unity Installer』 를 선택합니다. 설치가 완료되면 프로젝트의 『Packages』에 SDK가 설치되며, Package Manager에서 설치되었는지 확인할 수 있습니다. 설치 완료 후 정상적으로 동작하지 않는 경우, Unity Editor 를 한 번 재시작해 보시기 바랍니다. GS2 SDK for Unreal Engine 5 설치 절차 프로젝트 플러그인으로 설치 새로 Unreal 프로젝트를 생성하거나 기존 Unreal 프로젝트를 준비합니다. GitHub의 GS2 SDK for Unreal Engine 5 저장소 에서 소스 코드를 Clone합니다. 또는 Zip 형식으로 다운로드하여 임의의 폴더에 압축을 풉니다. 소스 코드 일체를 Unreal 프로젝트에 복사합니다. Unreal 프로젝트 내의 다음 폴더에 배치해 주세요. (Unreal 프로젝트)/Plugins/Gs2Plugin Plugins 폴더가 존재하지 않는 경우 새로 생성해 주세요. Plugins 폴더 내에 Gs2Plugin 폴더를 생성하고, 그 안에 다운로드한 파일 일체를 복사합니다. Unreal Editor 에서 uproject 파일을 실행합니다. 플러그인 창을 열고 GS2 플러그인에 체크하여 활성화합니다. Unreal Editor 를 재시작해 주세요. GS2 플러그인의 빌드를 확인하는 대화 상자가 표시되면 「예」 를 선택합니다. 환경에 따라 다르지만 빌드에는 상당한 시간이 걸립니다. 플러그인 빌드에 성공하면 Unreal Editor가 실행됩니다. 이상으로 설치가 완료되었습니다. 엔진 플러그인으로 설치 Unreal Engine 소스 코드를 Github 또는 Perforce 에서 가져와 엔진을 빌드하고 있는 환경에 엔진 플러그인으로 설치할 수 있습니다. GitHub의 GS2 SDK for Unreal Engine 5 저장소 에서 소스 코드를 Clone합니다. 또는 Zip 형식으로 다운로드하여 임의의 폴더에 압축을 풉니다. Unreal Engine 소스 코드 내에 다음 폴더를 생성하고, 폴더 안에 다운로드한 소스 코드 일체를 복사해 주세요. (Unreal Engine 소스 코드)/Engine/Plugins/Gs2Plugin GenerateProjectFiles.bat 를 실행하여 프로젝트 파일을 업데이트합니다. UE5.sln 파일을 열고 Unreal Engine 을 빌드합니다. 빌드가 완료되면 UnrealEditor 를 실행하고, GS2 플러그인을 활성화한 후 UnrealEditor 를 재시작해 주세요. 이상으로 설치가 완료되었습니다. GS2 SDK for Godot 설치 절차 GS2 SDK for Godot 는 Godot 4(GDScript)용 SDK 입니다. GitHub의 GS2 SDK for Godot 저장소 에서 ZIP 파일을 다운로드합니다. 다운로드한 ZIP 파일을 임의의 폴더에 압축을 풉니다. 압축을 푼 파일에 포함된 addons/gs2 폴더를 Godot 프로젝트로 복사합니다. Godot 프로젝트 내의 배치 위치는 다음과 같습니다. (Godot 프로젝트)/addons/gs2 addons 폴더가 존재하지 않는 경우 새로 생성해 주세요. Godot Editor 에서 프로젝트를 열고 FileSystem 독에 res://addons/gs2/ 가 표시되면 설치가 완료된 것입니다.","lang":"ko","section":"get_start","summary":"GS2-SDK 를 Unity, Unreal Engine, Godot 에 설치하기\n","title":"SDK 설정","url":"/ko/get_start/tutorial/setup_sdk/"},{"content":"UI 구성 먼저 씬의 전체 모습을 보여드리겠습니다. 화면 상단에 메시지 리스트, 하단에 텍스트 입력 필드와 전송 버튼을 배치했습니다. 컨텍스트 Context 배치에 대해 설명합니다. A는 GS2-Chat의 룸 컨텍스트입니다. B는 GS2-Chat의 메시지 리스트 컨텍스트입니다. C는 GS2-Chat의 메시지 컨텍스트입니다. 구현 해설 메시지 목록 조회 룸 컨텍스트에는 사전에 GS2-Chat에서 생성해 둔 룸의 정보를 설정합니다. 메시지 리스트 컨텍스트에는 2개의 컴포넌트를 붙여 두었습니다. Gs2ChatMessageListFetcher는 룸 컨텍스트에서 지정된 룸 내 메시지 목록을 조회합니다. Gs2ChatMessageList는 Fetcher가 조회한 데이터를 기반으로 GameObject를 생성합니다. Maximum Items는 리스트 내 요소를 생성하는 최대 개수입니다. 시작 시 Maximum Items 개수만큼 Prefab으로 지정한 GameObject를 복제하여 인스턴스화합니다. 리스트 아이템의 증감에 맞춰 다시 인스턴스화하는 것은 비용이 높기 때문에, 사전에 모든 GameObject를 인스턴스화하고 불필요한 것은 숨깁니다. 실행 시 상태 예시 대량으로 인스턴스화된 Message 노드. Prefab에는 메시지 컨텍스트를 가진 GameObject를 지정할 수 있으며, 표시할 때는 반드시 Fetcher가 조회한 메시지 중 하나가 설정됩니다. 실행 시 상태 예시 인스턴스화된 Message에 할당된 메시지 컨텍스트의 상태. 메시지 표시 메시지 컨텍스트에는 3개의 컴포넌트를 붙였습니다. Gs2ChatMessageContext에는 Message를 지정하지 않았습니다. 이는 Gs2ChatMessageList에 의해 값이 설정될 것을 전제로 하기 때문입니다. Gs2ChatMessageFetcher는 Gs2ChatMessageContext에 지정된 메시지의 정보를 조회하여 보관합니다. Gs2ChatMessageEnabler는 Gs2ChatMessageFetcher가 값 조회를 완료하면 Text 노드를 활성화하도록 설정되어 있습니다. Text에는 Gs2ChatMessageLabel을 지정하여, Message의 metadata 내용을 텍스트에 반영하도록 설정했습니다. 메시지 게시 메시지를 게시하려면 GS2-Chat의 Post API를 호출해야 합니다. UI Kit에는 Post를 실행하기 위한 Prefab인 Gs2ChatMessagePostAction이 준비되어 있습니다. 이 Prefab은 활성화되면 API가 호출되므로, 초기 상태에서는 비활성화해 둡니다. 게시하는 메시지에는 2개의 파라미터를 설정할 수 있습니다. 이름 설명 Category 메시지의 종류 Metadata 메시지 본문 Category에는 임의의 숫자를 지정할 수 있으며, “0\"은 텍스트 메시지, “1\"은 스티커 와 같이 분류하여 Metadata를 읽어들이는 방법을 결정하는 정보로 사용할 수 있습니다. Metadata는 메시지의 본문입니다. 이번 샘플에서는 Category는 0만 사용하고, Metadata에는 원시 문자열을 지정하기로 합니다. 성공 시에는 OnPostComplete가 호출되어, 자기 자신의 GameObject를 비활성화하고 InputField의 입력 내용을 빈 값으로 초기화합니다. InputField의 OnValueChanged로 입력 필드 값의 변경을 처리하여, Gs2ChatMessagePostAction의 Metadata에 값을 설정합니다. 전송 버튼의 OnClick 이벤트에서 Gs2ChatMessagePostAction Prefab을 활성화합니다. 동작 확인 (사전에 동작 확인을 했기 때문에 3건의 메시지가 존재합니다) ddd를 입력하고 전송 버튼을 누릅니다. 메시지 리스트에 ddd가 추가되고, InputField가 초기화됩니다. 마치며 UI Kit의 선언형 프로그래밍 의 재미가 전달되었을까요? 메시지 전송 처리를 한 후 메시지 목록을 다시 가져오는 처리를 굳이 작성하지 않아도 컴포넌트로서 “메시지 목록을 표시한다”, “메시지의 metadata 내용을 텍스트에 반영한다\"는 설정만으로 동작을 제어할 수 있습니다.","lang":"ko","section":"get_start","summary":"조금 더 고급 튜토리얼에도 도전해 봅시다","title":"UI Kit을 사용하여 텍스트 채팅 구현","url":"/ko/get_start/uikit/chat/"},{"content":"Game Server Services 를 사용한 개발의 흐름과, 그때그때 활용할 수 있는 기능에 대해 설명합니다. graph TD ProjectPlanning[\"프로젝트 입안\"] --\u003e ArchitectGs2 subgraph 설계 ArchitectGs2[\"프로젝트에서 GS2를 어떻게 활용할지 검토\"] end subgraph GS2 이용 시작 ArchitectGs2 --\u003e HasGS2Account HasGS2Account{\"이미 GS2 계정을 가지고 있다\"} -- NO --\u003e RegistrationAccount[\"GS2 계정 생성\"] --\u003e CreateGS2Project HasGS2Account -- YES --\u003e CreateGS2Project[\"GS2에 프로젝트 생성\"] end subgraph GS2에 리소스 생성 CreateGS2Project --\u003e CreateResource CreateResource[\"GS2에 리소스 생성\"] end subgraph 구현 CreateResource --\u003e CodingGame CodingGame[\"게임 개발\"] end subgraph 검증 CodingGame --\u003e QA QA[\"QA\"] end subgraph 릴리스 QA --\u003e Launch Launch[\"서비스 런칭\"] end subgraph 분석 Launch --\u003e AnalyticsGame AnalyticsGame[\"플레이어의 행동 분석\"] end AnalyticsGame --\u003e CreateResource","lang":"ko","section":"overview","summary":"Game Server Services 를 이용한 게임 개발의 흐름\n","title":"개발 흐름","url":"/ko/overview/workflow/"},{"content":"GS2 를 이용한 네트워크 기능 구현에서 에러 핸들링은 게임의 안정성과 사용자 경험(UX)에 직결됩니다. 여기서는 단순히 예외를 포착하는 데 그치지 않는 실전적인 구현 패턴을 소개합니다. 1. 에러 분류와 대응 방침 GS2 의 예외는 그 성질에 따라 크게 3가지로 분류할 수 있습니다. 분류 해당하는 예외 (예) 대응 방침 일시적인 에러 InternalServerError , ServiceUnavailable , RequestTimeout 자동 재시도 . 몇 차례 시도해도 안 되는 경우 에러 다이얼로그를 표시. 로직/설정 에러 BadRequest , NotFound 개발 중에 해결해야 할 에러 . 릴리스 후에는 버그로 간주하여 로그를 수집하고, 사용자에게는 적절한 메시지를 표시. 인증·상태 에러 Unauthorized , Conflict , QuotaLimitExceeded 특별한 복구 처리 가 필요. 재로그인이나 데이터 재동기화(도메인 재취득)를 수행. 2. 재시도 전략 구현(지수 백오프) 서버의 과부하나 일시적인 네트워크 불안정으로 인한 에러에 대해서는 즉시 재시도하는 것이 아니라, 간격을 두고 재시도하는 “지수 백오프(Exponential Backoff)“가 권장됩니다. Unity / C# 에서의 예(자동 재시도) public async Task ExecuteWithAutoRetry (Func \u003e action, int maxRetries = 3) { for (int i = 0; i 수동 재시도 판단 RecommendAutoRetry 가 false 이고 RecommendRetry 가 true 인 경우(예: ConflictException 나 QuotaLimitExceededException ), 자동으로 계속 반복하면 상황을 악화시킬 가능성이 있으므로, 사용자에게 확인을 요청하는 다이얼로그를 표시하여 재시도하게 하는 것이 일반적입니다. 3. 인증 에러( UnauthorizedException )의 자동 복구 액세스 토큰의 유효기간 만료 등으로 UnauthorizedException 이 발생한 경우, 사용자에게 타이틀 화면으로 돌아가도록 안내하는 것이 아니라, 백그라운드에서 자동으로 재로그인하여 요청을 재시도하는 것이 이상적입니다. 구현 예시 try { await gs2.Inventory.Namespace(\"...\").Me(GameSession).Inventory(\"...\").ModelAsync(); } catch (Gs2.Core.Exception.UnauthorizedException) { // 1. 백그라운드에서 재로그인 처리를 실행 GameSession = await ReLogin(); // 2. 새로운 GameSession 을 사용하여 요청을 재시도 await gs2.Inventory.Namespace(\"...\").Me(GameSession).Inventory(\"...\").ModelAsync(); } 4. 충돌( ConflictException ) 해소 스탬프 시트 실행 중에 통신이 끊긴 경우 등에 ConflictException 이 발생할 수 있습니다. 이는 “이전 처리가 아직 서버 측에서 완료되지 않았거나, 혹은 중복되고 있다\"는 것을 나타냅니다. 대응책 : 대부분의 경우 단순한 재시도로 해결됩니다. GS2 SDK 의 상위 레벨 API(Domain 오브젝트)를 사용하는 경우, 내부 캐시와 서버 상태 사이에 불일치가 있을 가능성이 있으므로 Domain 오브젝트를 다시 가져온 후 재시도할 것을 권장합니다. 5. 사용자에게 주는 피드백(UX) 모든 에러에 대해 다이얼로그를 표시하면 사용자는 스트레스를 느낍니다. 사일런트 재시도 : 일시적인 에러는 우선 백그라운드에서 1~2회 재시도합니다. 그동안 UI 에는 “통신 중…” 인디케이터만 표시합니다. 복구 가능한 다이얼로그 : 재시도해도 실패한 경우, “통신에 실패했습니다. 전파가 양호한 곳에서 다시 시도해 주세요\"와 같은 메시지와 [재시도] [타이틀로] 버튼을 표시합니다. 치명적인 에러 : 점검 중이거나 앱 버전의 강제 업데이트가 필요한 경우에는, 타이틀 화면으로 돌아가는 것 외에는 선택지가 없는 전용 다이얼로그를 표시합니다. 정리 재시도 가능한 에러에는 지수 백오프 를 적용한다. 인증 에러는 자동 재로그인 으로 감춘다. 개발 중에는 카오스 모드 를 활성화하여 이러한 핸들링이 올바르게 동작하는지 검증한다.","lang":"ko","section":"articles","summary":"GS2 를 사용한 게임 개발에서의 실전적인 에러 핸들링과 재시도 전략 모범 사례\n","title":"에러 핸들링 구현 패턴","url":"/ko/articles/tech/error/pattern/"},{"content":"게임 사이클 graph TD MainGame[\"메인 게임\"] -- 더 강해지고 싶다 --\u003e Enhance[\"캐릭터 육성\"] MainGame[\"메인 게임\"] -- 유리한 속성의 캐릭터를 갖고 싶다 --\u003e Gacha[\"가챠\"] Gacha -- 입수한 캐릭터를 육성하고 싶다 --\u003e Enhance Enhance -- 캐릭터를 육성한 성과를 보고 싶다 --\u003e MainGame 이것이 일본식 메타게임의 사이클입니다. 읽어 보면 알 수 있듯이, 모든 것의 시작점이 되는 것은 가챠입니다. 퀘스트의 적 특성에 유리한 캐릭터를 가챠로 입수하고, 입수한 캐릭터를 육성하여 고난도 퀘스트를 클리어해 나가는 게임 사이클로 되어 있습니다. 만약 여러분이 돈벌이를 할 생각이 없고 단지 플레이어의 참여도를 극대화하고 싶은 것뿐이라면, 캐릭터의 출처가 가챠가 아니어도 상관없습니다. 메인 게임의 보상(시나리오 진행에 따라 캐릭터가 합류하는 등)으로 삼아도 좋을 것입니다. 이 게임 사이클은 다음과 같은 지점에서 플레이어에게 만족감을 주고 있습니다. graph TD MainGame[\"메인 게임\"] --\u003e Enhance[\"캐릭터 육성\"] MainGame[\"메인 게임\"] --\u003e Gacha[\"가챠\"] Gacha -- 희귀 캐릭터를 손에 넣었다 --\u003e Enhance Enhance -- 클리어하지 못했던 퀘스트를 클리어할 수 있게 되었다 --\u003e MainGame 이 게임 사이클의 본질은 가챠가 아니라, 캐릭터 육성을 몇 주에서 몇 개월에 걸쳐 진행하고 그 성장에 맞춰 메인 게임이 조금씩 진행될 수 있게 된다는, 오랜 시간 두고 즐기는 게임 사이클을 실현하고 있다는 점입니다. 다만, 수익화를 고려했을 때 현재의 가챠 위치가 효과적인 위치에 있다는 점도 함께 이해해야 합니다. 캐릭터 육성 그럼 캐릭터를 육성하는 게임 디자인에 대해 조금 더 파고들어 보겠습니다. 단순히 “육성\"이라고 해도 그 구현 방법에는 다양한 접근 방식이 존재합니다. 레벨 가장 알기 쉬운 성장 요소로 캐릭터의 레벨이 있습니다. 캐릭터를 파티에 편성하여 메인 게임을 플레이함으로써 조금씩 경험치를 획득하고 레벨이 올라갑니다. 가챠가 존재하는 게임의 특징으로, 불필요한 캐릭터가 계속 늘어난다는 문제가 있습니다. 이 문제를 해결하기 위해 불필요한 캐릭터를 소재로 삼아 캐릭터에 합성함으로써 경험치를 얻을 수 있는 구조를 제공하는 것도 일반적으로 이루어지고 있습니다. 오히려 성장 수단으로서는 메인 게임을 플레이하여 경험치를 버는 것보다 이 합성으로 경험치를 버는 편이 효율적이며, 플레이어도 성장을 위해서는 메인 게임을 플레이하는 것보다 합성이 더 합리적이라고 생각하며 플레이합니다. 레벨 캡 캐릭터에는 레벨 캡이 정의되어 있습니다. 일반적으로 가챠에서 배출률이 낮은 캐릭터일수록 레벨 캡이 높게 설정됩니다. 하지만 게임에 따라서는 저희귀도 캐릭터는 초기 레벨 캡이 낮을 뿐이고, 레벨 캡을 끌어올려 가면 고희귀도 캐릭터와 같은 레벨까지 끌어올릴 수 있도록 되어 있는 경우도 있습니다. 이 부분의 설계는 게임 디자이너의 역량이 드러나는 지점이라고 생각합니다. 구체적인 레벨 캡 상승 방법은 동일 캐릭터의 합성이나 강화 소재의 합성으로 실현하는 것이 일반적입니다. 전자는 경제적인 노력, 후자는 시간적인 노력으로 실현한다고 파악하면, 플레이어에게 어떻게 보상을 줄 것인지 방침을 세우기 쉬워질 수 있습니다. 동일 캐릭터의 합성 가챠에서는 아무래도 이미 입수한 캐릭터를 다시 입수하게 되는 상황이 발생하기 마련입니다. 이미 보유하고 있는 캐릭터가 가챠에서 배출된 경우의 활용 방법으로, 캐릭터의 레벨 캡을 끌어올릴 수 있게 하는 것이 일반적입니다. 동일 캐릭터를 합성함으로써 레벨 캡을 10 끌어올릴 수 있어 해당 캐릭터가 더욱 강해질 수 있다는 것입니다. 많은 게임에서 레벨 캡 상승은 5단계 정도로 마련되어 있습니다. 강화 소재의 합성 퀘스트를 공략했을 때 확률적으로 드롭되는 강화 소재를 사용하여 레벨 캡을 끌어올릴 수 있도록 하는 것도 일반적으로 이루어집니다. 레벨 캡을 끌어올리는 데 고난도 퀘스트에서만 드롭되거나 드롭 확률이 낮은 소재를 필요로 하는 디자인이 이루어집니다. 캐릭터의 특성 캐릭터에는 다양한 특성을 마련합니다. 다양하고 개성 있는 캐릭터를 제공하여 플레이어가 지금 어떤 캐릭터를 육성해야 할지 판단하게 하는 것도 하나의 재미입니다. 속성 알기 쉬운 예로는 땅·물·불·바람과 같은 속성이 있습니다. 불 속성의 적이 출현하는 퀘스트에는 물 속성 캐릭터를 파티에 편성하여 플레이하는 것이 유리하다면, 물 속성 캐릭터를 필요로 하는 플레이어가 늘어날 것입니다. 역할 다음으로 알기 쉬운 것은 공격역·회복역·방어역과 같은 역할일 것입니다. 파티를 편성할 때 속성뿐만 아니라 역할도 고려하여 편성함으로써 게임에 깊이가 생깁니다. 스킬 다음은 스킬입니다. 회복역이라고 해도 그 스킬 설계에는 크게 3가지 종류가 있습니다. 즉시 회복 서서히 회복 배리어 회복 스킬을 사용한 순간 회복되는 타입의 회복역은 사용하기 편할 것입니다. 서서히 회복되지만 총 회복량은 즉시 회복 힐러보다 많은 스킬도, 사용 타이밍은 어려울 수 있지만 게임성을 한층 끌어올려 줄 것입니다. 배리어도 흥미롭습니다. 데미지 자체를 받지 않도록 배리어가 끊기지 않게 운용하는 테크니컬한 플레이가 가능할 것 같습니다. 캐릭터 이외의 육성 요소 캐릭터뿐만 아니라 장비도 가챠로 제공하는 것이 일반적으로 이루어지고 있습니다. 당연히 장비에도 레벨이 마련되어 캐릭터와 마찬가지로 육성할 수 있게 되어 있습니다. 다양한 육성 요소가 있는 것은 수익화 관점에서는 효과적이지만, 너무 많으면 플레이어에게 그 의도가 간파당하고 맙니다. 균형을 맞추는 것도 중요합니다. 가챠가 만들어내는 파티 편성의 게임성 가챠로 캐릭터를 입수하는 게임 사이클로 만들면 흥미로운 부작용이 발생합니다. 모든 사람이 동일한 패를 갖는 것은 아니므로, 자신이 가진 패 안에서 앞으로 도전할 퀘스트에 최적인 파티 편성은 무엇인지 고민하게 됩니다. 트레이딩 카드 게임의 덱 편성과 같은 재미를 플레이어에게 제공할 수 있습니다. 돈을 내지 않으면 게임을 즐길 수 없는가 일본식 메타게임 게임을 플레이한 경험이 적은 개발자로부터 자주 받는 질문입니다. 당연히 자유롭게 파티를 편성할 수 없으므로, 돈을 지불한 플레이어보다는 즐길 수 있는 폭이 좁아집니다. 하지만 게임 운영 방침으로서, 플레이어에게 무료로 가챠를 계속 뽑게 함으로써 이 문제에 대응하고 있습니다. 게임을 시작한 순간 30회(1만 엔 상당) 정도 무료로 가챠를 뽑게 하는 것도 일반적으로 이루어지며, 이벤트 기간 중 매일 1회 무료로 가챠를 뽑을 수 있게 함으로써 참여도를 높이는 것도 일반적으로 이루어지고 있습니다. 그 밖에도 퀘스트 진행에 맞춰 가챠를 뽑는 데 필요한 게임 내 통화를 지급하는 것도 일반적입니다. 대략 한 달간 매일 플레이하면 무과금 플레이어도 20~30회 정도 가챠를 뽑을 수 있는 게임이 많습니다. 제가 아는 한 가장 통 크게 퍼주는 게임은 그랑블루 판타지인데, 이 게임은 정기적으로 매일 10회~100회 랜덤으로 무료 가챠를 뽑을 수 있는 룰렛 이벤트를 개최하고 있습니다. 또한 게임의 메인 스토리를 진행하는 데는 고희귀도 캐릭터가 몇 명 있으면 충분하며, 고난도 엔드 콘텐츠를 즐기는 열성적인 플레이어에게는 고희귀도 캐릭터로 편성한 파티를 요구하는 게임 디자인을 함으로써 무과금이더라도 충분히 즐길 수 있는 게임을 제공할 수 있습니다. 무과금 플레이어를 늘리는 의미란? 이는 많은 사람이 의문을 가질 수 있는 부분입니다. 무과금 플레이어 중 일정 비율에서 과금 플레이어가 탄생합니다. 무과금 플레이어를 늘리지 않으면 과금 플레이어도 늘어나지 않습니다. 그 끝에 기다리고 있는 것은 플레이어 인구의 축소입니다. 장기 운영형 게임에서는 아무리 참여도를 높이는 노력을 하더라도 플레이어가 이탈하는 일은 발생합니다. 그렇기 때문에 신규 플레이어를 유입시켜 플레이어 인구를 최대화하고, 조금이라도 엔드 콘텐츠를 즐기는 플레이어를 늘려 나가는 데 큰 의미가 있습니다. 게임 매출 목표치는? 이는 사업 방침이나 지역의 경제력에 따라 크게 좌우되는 부분이지만, 일반적으로 일본에서는 게임 플레이어 1인당 월 1,000엔의 매출을 예상하고 설계합니다(ARPU 1,000엔). 여기서 말하는 게임 플레이어 1인이란 무과금 플레이어도 포함한 수치입니다. 즉, 지출이 많은 플레이어는 그보다 몇 배나 더 많이 지불하고 있다는 뜻입니다. 게임 디자인을 할 때는 한 달에 10만 엔을 지불하는 고액 과금 플레이어가 존재한다는 점도 염두에 두고 설계하는 것이 중요합니다. 원신은 출시 후 27개월 만에 5,000억 엔의 매출을 올렸습니다. 이를 ARPU 1,000엔으로 계산하면, 월평균 1,850만 명이 플레이하고 있다고 볼 수 있습니다. 스마트폰만으로도 1.1억 회 이상 다운로드되었다고 하니, 현실적인 수치라고 할 수 있습니다. (그나저나 실로 엄청난 플레이어 수다…) 2023-02-11 Kazutomo Niwa","lang":"ko","section":"design_knowledge","summary":"일본에서 탄생한 가챠를 축으로 한 메타게임에 대해","title":"가챠를 축으로 한 메타게임이란","url":"/ko/design_knowledge/japanese_metagame/"},{"content":"여기에서는 모든 마이크로서비스에 공통되는 트랜잭션 처리에 대해 설명합니다. 트랜잭션 처리는 for Game Engine과 그 외의 경우 방침이 크게 다릅니다. 원칙적으로 for Game Engine은 개발자가 더 편리하게 작업할 수 있도록 유틸리티 클래스가 충실하게 마련되어 있으며, 유틸리티 클래스를 사용해 트랜잭션 처리를 수행한다는 점이 다릅니다.","lang":"ko","section":"api_reference","summary":"여기에서는 모든 마이크로서비스에 공통되는 트랜잭션 처리에 대해 설명합니다.\n트랜잭션 처리는 for Game Engine과 그 외의 경우 방침이 크게 다릅니다. 원칙적으로 for Game Engine은 개발자가 더 편리하게 작업할 수 있도록 유틸리티 클래스가 충실하게 마련되어 있으며, 유틸리티 클래스를 사용해 트랜잭션 처리를 수행한다는 점이 다릅니다.\n","title":"트랜잭션 처리","url":"/ko/api_reference/transaction/"},{"content":"Game Server Services는 원칙적으로 pay-as-you-go(종량제) 방식의 요금을 채택하고 있습니다. 요금제 플랜 이름 대상 가격 Individual 과거 12개월간 매출액이 1,000만 엔 미만인 법인 또는 개인 무료 Professional Individual 플랜에 해당하지 않는 법인 또는 개인 이용 요금에 준함 Enterprise Individual 플랜에 해당하지 않는 법인 또는 개인 ASK Individual 플랜 유의 사항 “과거 12개월간 매출액이 1,000만 엔 미만\"이라는 정의는 GS2를 이용하는 게임의 매출뿐만 아니라 다른 사업의 매출도 포함합니다. 월평균 요청 횟수가 초당 10회를 초과하거나, 일정 기간 지속적으로 초당 요청 횟수가 100회를 초과하는 경우에는 Individual 플랜의 대상에서 제외됩니다. 대상에서 제외된 경우, 애플리케이션 수정에 필요한 시간은 고려하지만 신속하게 대응해 주시기 바랍니다. Individual 플랜을 이용하여 게임을 출시할 때는 기동 시퀀스 또는 타이틀 화면 에 GS2 로고를 게재해야 합니다. 게임 출시 일정이 확정되는 시점에 채팅을 통해 로고 데이터와 표시에 관한 가이드라인을 전달받으시기 바랍니다. 무료 사용 한도 Professional / Enterprise 플랜을 이용하는 경우에도 매월 1만 엔을 초과하기 전까지는 무료로 이용하실 수 있습니다. 1만 엔을 초과하면 초과분뿐만 아니라 전체 이용 금액에 대해 청구가 발생합니다. 이용 요금 일반 요금 API 요청 또는 리스트 API 요청으로 30건 이상의 데이터를 취득할 때 30건마다 티어 가격 - 100,000,000 0.01엔 100,000,001 - 500,000,000 0.008엔 500,000,001 - 2,500,000,000 0.006엔 2,500,000,001 - 7,500,000,000 0.004엔 7,500,000,001 - 0.003엔 연간 일시불 결제 100,000,000 요청/월 이용 커밋먼트당 연 360만 엔 월별 이용량이 커밋먼트를 밑돌더라도 환불은 없습니다. 커밋먼트를 초과한 이용 요금에 대해서는 월별 커밋먼트 수량의 티어를 기준으로 요금을 계산합니다. 요금 예시 전제 조건: 1,000,000,000 요청/월 이용을 커밋하는 경우 선불 금액: 3,600만 엔 예시 1: 500,000,000 요청/월(커밋먼트를 밑도는 경우) 월별 지불 금액: 0엔/월 총액: 3,600만 엔 + 0엔/년(0엔 × 12개월) = 3,600만 엔 일반 이용 요금으로는 420만 엔/월 = 5,040만 엔/년이 되므로, 실제 이용 요금이 커밋먼트 수량을 밑돌더라도 1,440엔/년 절약 예시 2: 3,000,000,000 요청/월(2,000,000,000 요청 초과) 월별 지불 금액: 1,500,000,000 요청 * 0.006엔 + 500,000,000 요청 * 0.004엔 = 1,100만 엔/월 총액: 3,600만 엔 + 1억 3,200만 엔(1,100만 엔 * 12개월) = 1억 6,800만 엔 일반 이용 요금으로는 1,940만 엔/월 = 2억 3,280만 엔/년이므로 6,480만 엔/년 절약 서비스별 추가 요금 GS2-Datastore 액션 단위 가격 데이터 저장 용량 1GB 10엔 데이터 다운로드 용량 1GB 30엔 GS2-Freeze 액션 단위 가격 기본 사용량 스테이지/월액 300,000엔 1개월 이전 버전을 이용 중인 스테이지(기본 사용량에 추가) 스테이지/월액 3,000,000엔 GS2-Freeze를 사용하는 경우에도 최신 버전을 추종하는 데 최대한의 리소스를 할애해 주십시오. GS2-Freeze로 GS2의 코드베이스를 고정하는 것은 안정성 향상으로 이어지지만, 취약점 대응 속도 저하로 이어질 가능성이 있습니다. GS2-Guard 액션 단위 가격 기본 이용료 네임스페이스/월액 20,000엔 API 요청 티어 가격 - 10,000,000 0.005엔 10,000,001 - 50,000,000 0.004엔 50,000,001 - 250,000,000 0.003엔 250,000,001 - 750,000,000 0.002엔 750,000,001 - 0.001엔 GS2-Log 액션 단위 가격 온디맨드 GS2-Insight 이용 1분 1엔 로그 기록 1건당 티어 가격 - 10,000,000 0.005엔 10,000,001 - 50,000,000 0.004엔 50,000,001 - 250,000,000 0.003엔 250,000,001 - 750,000,000 0.002엔 750,000,001 - 0.001엔 로그 보관 위치를 GS2로 지정한 경우의 추가 요금 액션 단위 가격 로그 기록 용량 1GB 5엔 로그 조회 시 스캔 용량 1GB 2엔 GS2-Money 일반 API 이용 요금에 더해 월간 유통액에 대한 레비뉴 셰어(수익 배분)가 적용됩니다. 월간 유통액 범위 레비뉴 ¥0 〜 ¥999,999 10% ¥1,000,000 〜 ¥9,999,999 5% ¥10,000,000 〜 ¥99,999,999 3% ¥100,000,000 〜 ¥999,999,999 1% ¥1,000,000,000 〜 ¥100,000,000,000 0% 레비뉴 셰어에는 일반적인 무료 사용 한도가 적용되지 않지만, 월간 유통액이 10,000엔에 미치지 않는 경우에는 예외적으로 이용 요금을 청구하지 않습니다. GS2-Money2 GS2 전체 이용 요금이 아래에 제시된 레비뉴 셰어를 밑도는 경우, 월간 유통액에 대한 레비뉴 셰어가 적용됩니다. 소비형 콘텐츠 월간 유통액 범위 레비뉴 ¥0 〜 ¥999,999 10% ¥1,000,000 〜 ¥9,999,999 5% ¥10,000,000 〜 ¥99,999,999 3% ¥100,000,000 〜 ¥999,999,999 1% ¥1,000,000,000 〜 ¥100,000,000,000 0% 정기 구독 콘텐츠 구독 금액의 1% 특기 사항 레비뉴 셰어에는 일반적인 무료 사용 한도가 적용되지 않지만, 월간 유통액이 10,000엔에 미치지 않는 경우에는 예외적으로 이용 요금을 청구하지 않습니다. GS2-News 액션 단위 가격 사이트 빌드 1패턴 1엔 사이트 데이터 다운로드 용량 1GB 30엔 GS2-Ranking 글로벌 랭킹 액션 단위 가격 집계 처리 랭킹 대상 스코어 1만 건 2엔 스코프 랭킹 액션 단위 가격 스코어 등록 스코어 구독 수 10건 0.01엔 GS2-Realtime 스펙 단위 가격 realtime1.nano 1분 0.04엔 realtime1.micro 1분 0.06엔 realtime1.small 1분 0.12엔 realtime1.medium 1분 0.24엔 realtime1.large 1분 0.5엔 액션 단위 가격 데이터 전송 용량(아웃바운드) 1GB 15엔 핫 스탠바이 액션 단위 가격 realtime1.nano 1대(5대~)/월 1,500엔 realtime1.micro 1대(5대~)/월 2,250엔 realtime1.small 1대(5대~)/월 5,500엔 realtime1.medium 1대(5대~)/월 11,000엔 realtime1.large 1대(5대~)/월 23,000엔 GS2-Script 액션 단위 가격 스크립트 실행 시간 1초 0.005엔 GS2-SerialKey 액션 단위 가격 시리얼 코드 발행 1건 0.005엔 모든 마이크로서비스에서의 특수 조작 액션 단위 가격 사용자 데이터 내보내기 1아이템 0.001엔 사용자 데이터 완전 삭제 1아이템 0.002엔 사용자 데이터 가져오기 1아이템 0.002엔 1아이템이란 GS2가 내부적으로 관리하는 사용자 데이터 1건을 의미합니다. 여기서 설명한 조작은 사용자ID를 지정하여 실행하지만, 이 실행 시 저장된 데이터의 건수에 따라 여러 아이템에 대한 처리가 발생합니다.","lang":"ko","section":"pricing","summary":"Game Server Services의 이용 요금에 대해\n","title":"GS2 이용 요금","url":"/ko/pricing/"},{"content":"GS2-Deploy 는 환경 구축을 위해 훌륭한 성과를 거두고 있습니다. 그러나 템플릿 작성 방법에는 아직 과제가 있었습니다. 바로 템플릿 파일을 작성할 때 입력 지원을 받을 수 없다는 점입니다. GS2-Deploy 를 설계할 때 AWS 의 Cloud Formation 을 참고했다는 것은 이미 설명한 바와 같습니다만, 2019년에 AWS 가 발표한 것이 AWS CDK(Cloud Development Kit)입니다. 이는 기존의 JSON이나 YAML로 템플릿 파일을 작성할 때 입력 지원을 받을 수 없다는 문제의 해결책으로, 다양한 프로그래밍 언어로 템플릿을 작성할 수 있도록 한 성과입니다. 2019년 서비스 개시 이후 GS2 는 줄곧 JSON/YAML을 통한 템플릿 배포 기능을 제공해 왔지만, 2022년 11월에 GS2 도 CDK 지원을 시작했습니다. CDK 는 현재 Go / Java / PHP / Python / TypeScript 를 지원합니다. 각 프로그래밍 언어별로 GS2-Inventory 의 GS2-Deploy 용 템플릿을 생성하는 코드를 작성한 예는 다음과 같습니다. Language: Go Java PHP Python TypeScript stack := core . NewStack () inventory . NewNamespace ( \u0026 stack , \"test\" , inventory . NamespaceOptions { }, ). MasterData ( [] inventory . InventoryModel { inventory . NewInventoryModel ( \"inventory\" , 5 , 10 , [] inventory . ItemModel { inventory . NewItemModel ( \"Potion\" , 99 , true , 1 , inventory . ItemModelOptions {}, ), }, inventory . InventoryModelOptions {}, ), }, ) stack . Yaml (); class SampleStack extends Stack { public SampleStack () { new io . gs2 . cdk . inventory . model . Namespace ( this , \"test\" , new io . gs2 . cdk . inventory . model . options . NamespaceOptions () ). masterData ( Arrays . asList ( new io . gs2 . cdk . inventory . model . InventoryModel ( \"inventory\" , 5 , 10 , Arrays . asList ( new io . gs2 . cdk . inventory . model . ItemModel ( \"Potion\" , 99L , true , 1 ) ) ) ) ); } } new SampleStack (). yaml (); class SampleStack extends Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Inventory\\Model\\Namespace_ ( stack : $this , name : \"test\" , )) -\u003e masterData ( [ new \\Gs2Cdk\\Inventory\\Model\\InventoryModel ( name : \"inventory\" , initialCapacity : 5 , maxCapacity : 10 , itemModels : [ new \\Gs2Cdk\\Inventory\\Model\\ItemModel ( name : \"Potion\" , stackingLimit : 99 , allowMultipleStacks : true , sortValue : 1 , ) ], ), ], ); } } ( new SampleStack ()) -\u003e yaml (); class SampleStack ( gs2_cdk . Stack ): def __init__ ( self ): super () . __init__ () inventory . Namespace ( stack = self , name = \"test\" , ) . master_data ( [ inventory . InventoryModel ( name = \"inventory\" , initial_capacity = 5 , max_capacity = 10 , item_models = [ inventory . ItemModel ( name = \"Potion\" , stacking_limit = 99 , allow_multiple_stacks = True , sort_value = 1 , ), ], ), ] ) SampleStack () . yaml () class SampleStack extends core . Stack { public constructor () { super (); new inventory . model . Namespace ( this , \"test\" , ). masterData ( [ new inventory . model . InventoryModel ( \"inventory\" , 5 , 10 , [ new inventory . model . ItemModel ( \"Potion\" , 99 , true , 1 , ) ], ), ] ); } } new SampleStack (). yaml (); 생성한 템플릿 파일을 GS2-SDK 를 사용하여 마스터 데이터로 반영하는 것까지 연결하면, GS2 의 리소스 유지 관리를 모두 프로그래밍 언어상에서 완결할 수 있게 됩니다.","lang":"ko","section":"overview","summary":"GS2-CDK 를 사용하여 GS2-Deploy 템플릿을 작성한다\n","title":"GS2-CDK 를 사용한 설정","url":"/ko/overview/workflow/setup_gs2_resources/cdk_setup/"},{"content":"중간까지는 일반적인 튜토리얼과 동일한 순서로 진행됩니다. GS2 설정 SDK 설정 크리덴셜(API 키) 생성 로그인 처리에 필요한 리소스 준비 클라이언트 초기화 GS2::Core::Action::Initialize 노드를 생성하고, clientId / clientSecret / 접속할 리전을 설정합니다. clientId / clientSecret 에는 크리덴셜(API 키) 생성 에서 생성한 값을 설정합니다. 초기화에 성공한 경우 OnSuccess 가 호출되고, 실패한 경우 OnError 가 호출됩니다. 성공 시에는 Client 에 GS2 클라이언트 객체가, 실패 시에는 Error 에 실패 사유의 에러 객체가 반환됩니다. GS2-Account 클라이언트 생성 초기화 시 얻은 Client 객체를 지정하여 GS2::Account::Service 노드를 생성합니다. Service 에 GS2-Account 의 기능을 이용하기 위한 서비스 클라이언트가 반환됩니다. Namespace 객체 생성 GS2-Account 의 서비스 클라이언트를 지정하여 GS2::Account::Namespace 노드를 생성합니다. Namespace Name 에는 로그인 처리에 필요한 리소스 준비 에서 생성한 네임스페이스 이름을 지정합니다. Namespace 에 GS2-Account 의 Namespace 객체가 반환됩니다. 익명 계정 신규 생성 GS2-Account 의 Namespace 객체를 지정하여 GS2::Account::Action::Create 노드를 생성합니다. 계정 생성에 성공한 경우 OnSuccess 가 호출되고, 실패한 경우 OnError 가 호출됩니다. 성공 시에는 Account 에 생성된 계정 객체가, 실패 시에는 Error 에 실패 사유의 에러 객체가 반환됩니다. 계정 객체에서 값 추출 계정 객체를 지정하여 GS2::Account::Fetch::GetValueOfAccount 노드를 생성합니다. 계정 값 추출에 성공한 경우 OnSuccess 가 호출되고, 실패한 경우 OnError 가 호출됩니다. 성공 시에는 Value 에 계정 객체의 값이, 실패 시에는 Error 에 실패 사유의 에러 객체가 반환됩니다. 구조체를 전개함으로써 발급된 사용자ID와 비밀번호를 추출할 수 있습니다. 로그인 로그인 처리를 실행하기 위해 GS2::Core::Action::Login 노드를 생성합니다. Login 노드는 Client 와 Authenticator 의 지정이 필요합니다. Client 에는 GS2::Core::Action::Initialize 노드로 생성한 Client 를 지정합니다. Authenticator 에는 GS2::Core::CreateGs2Authenticator 노드로 생성한 Authenticator 를 지정합니다. UserId / Password 에는 앞서 생성한 사용자ID와 비밀번호를 지정합니다. 로그인에 성공한 경우 OnSuccess 가 호출되고, 실패한 경우 OnError 가 호출됩니다. 성공 시에는 AccessToken 에 생성된 액세스 토큰 객체가, 실패 시에는 Error 에 실패 사유의 에러 객체가 반환됩니다. 액세스 토큰은 로그인이 필요한 API 호출 시 필요한 파라미터입니다. 로그인 후 호출 가능한 API 호출 로그인 후 호출 가능한 API 호출 예시로, 인계 정보 목록을 취득해 보겠습니다. 액세스 토큰 객체를 사용하여 GS2::Account::Me 로 자신의 계정 객체를 생성합니다. 그 후, 자신의 계정 객체를 사용하여 GS2::Account::Fetch::ListOfTakeOver 노드를 생성하고, 인계 정보 목록을 취득합니다. 인계 정보 목록 취득에 성공한 경우 OnSuccess 가 호출되고, 실패한 경우 OnError 가 호출됩니다. 성공 시에는 Values 에 인계 정보 배열이, 실패 시에는 Error 에 실패 사유의 에러 객체가 반환됩니다. Values 를 For Each Loop 노드로 반복하면서 값을 추출합니다.","lang":"ko","section":"get_start","summary":"GS2-SDK for UE5 Blueprint 로 계정을 생성하고 로그인하기까지를 구현해 봅시다","title":"GS2-SDK for UE5 Blueprint 튜토리얼","url":"/ko/get_start/blueprint/"},{"content":"먼저 프로젝트와 리전, 마이크로서비스의 관계에 대한 이해를 깊게 해봅시다. 프로젝트와 마이크로서비스는 다음과 같은 데이터 구조를 가집니다. Gs2Project \"1\" *-- \"many\" Region Region \"1\" *-- \"many\" Microservice Microservice \"1\" *-- \"many\" Namespace Namespace \"1\" *-- \"many\" Resource 리전 프로젝트 바로 아래에는 리전이 존재합니다. 리전은 GS2 가 마이크로서비스를 제공하는 데 사용하는 데이터센터의 지역을 나타냅니다. 마이크로서비스 소지품 관리나 매치메이킹, 게임 내 상점 등 다양한 기능이 있습니다. 이들은 리전별로 호스팅되며, 마이크로서비스의 데이터베이스는 지역별로 분리됩니다. 리얼타임 통신에서는 플레이어와 가장 가까운 지역에서 호스팅한 머신에서 동작시키는 것이 바람직하다고 여겨지지만, GS2 가 제공하는 마이크로서비스 대부분은 그 정도로 실시간성을 요구하지 않는 기능이 대부분을 차지합니다. 따라서 GS2-Realtime 만 여러 리전에 배치하고, 그 외 마이크로서비스는 한 곳의 리전에 모아서 이용하는 방법도 생각해 볼 수 있습니다. 네임스페이스 각 마이크로서비스는 여러 개의 네임스페이스를 가질 수 있습니다. 네임스페이스 간은 완전히 분리되지만, 여러 개의 스페이스를 가질 수 있습니다. GS2-Inventory 를 이용할 때 “소비형 아이템을 보유하는 네임스페이스”, “게임 내 통화를 보유하는 네임스페이스”, “획득한 캐릭터를 보유하는 네임스페이스\"와 같이 나누어 관리할 수 있습니다. 리소스 각 네임스페이스는 고유한 리소스를 가집니다. 리소스에는 크게 2가지 종류가 있습니다. 마스터 데이터 사용자 데이터 마스터 데이터 GS2-Inventory 라면 어떤 아이템이 존재하는지. GS2-Showcase 라면 어떤 상품이 판매되고 있는지. GS2-Schedule 이라면 어떤 이벤트가 예정되어 있는지. 개발자 측이 사전에 정한 데이터를 보유하는 영역입니다. 사용자 데이터 게임 플레이어가 개별적으로 보유하는 데이터입니다. GS2-Inventory 라면 아이템을 몇 개 가지고 있는지. GS2-Quest 라면 어떤 퀘스트를 클리어했는지. 게임을 운영해 나가면서 자연스럽게 늘어나는 데이터를 가리킵니다. 리소스 생성 방법 리소스를 생성하는 방법은 크게 나누어 2가지가 있습니다. 1. 관리 콘솔에서 수동으로 생성 브라우저에서 GS2 의 관리 콘솔에 로그인하여 UI 상에서 설정을 입력해 리소스를 생성합니다. 시행착오를 겪는 단계이거나 설정 항목이 적은 경우에는 간편하고 편리합니다. 2. GS2-Deploy 를 사용하여 자동 생성(권장) YAML 형식의 템플릿 파일을 작성하고, GS2-Deploy 에 업로드함으로써 리소스를 자동으로 생성합니다. 이 방법에는 다음과 같은 장점이 있으므로, 본격적인 개발에서는 이 방법이 권장됩니다. 재현성 : 동일한 설정의 리소스(개발 환경, 운영 환경 등)를 확실하게 재현할 수 있습니다. 버전 관리 : 템플릿 파일을 Git 등으로 관리함으로써, 설정 변경 이력을 남길 수 있습니다. 일괄 관리 : 여러 서비스(Inventory, Quest, Account 등)의 리소스를 한꺼번에 정의할 수 있습니다.","lang":"ko","section":"overview","summary":"GS2 의 각 마이크로서비스에 리소스를 생성한다\n","title":"GS2에 리소스 생성","url":"/ko/overview/workflow/setup_gs2_resources/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 changePasswordIfTakeOver bool false 계정 인계 시 비밀번호를 변경할지 여부 계정 인계 시 비밀번호를 변경할지 여부를 지정합니다. 이 설정을 통해 계정 인계를 실행한 후 인계 이전 디바이스로부터의 로그인을 제한할 수 있습니다. differentUserIdForLoginAndDataRetention bool false 로그인에 사용하는 사용자 ID와 데이터의 보유에 사용하는 사용자 ID를 다르게 함 로그인용 사용자 ID와 데이터 보유용 사용자 ID를 분리할지 여부를 지정합니다. 이 설정을 통해 플랫폼 제공업체가 규정하는 개인정보 보호 요건을 적은 작업량으로 충족할 수 있습니다. ※이 파라미터는 네임스페이스 생성 시에만 설정할 수 있습니다. createAccountScript ScriptSetting 계정을 신규 생성했을 때 실행할 스크립트의 설정 계정 생성의 커스텀 로직을 구현하는 데 사용됩니다. Script 트리거 레퍼런스 - createAccount authenticationScript ScriptSetting 인증했을 때 실행할 스크립트의 설정 인증 프로세스를 커스터마이즈하는 데 도움이 됩니다. Script 트리거 레퍼런스 - authentication createTakeOverScript ScriptSetting 인계 정보를 등록했을 때 실행할 스크립트의 설정 인계 정보를 처음 등록했을 때 보상을 지급하기 위해 GS2-Mission의 카운터를 증가시키는 등의 커스텀 로직을 추가하는 데 사용됩니다. Script 트리거 레퍼런스 - createTakeOver doTakeOverScript ScriptSetting 인계를 실행했을 때 실행할 스크립트의 설정 인계 처리의 추가 로직을 구현하는 데 도움이 됩니다. Script 트리거 레퍼런스 - doTakeOver banScript ScriptSetting 계정 BAN 상태를 추가했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - ban unBanScript ScriptSetting 계정 BAN 상태를 해제했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - unBan logSetting LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스 정보를 보유합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Account 게임 플레이어 계정 게임 플레이어를 식별하는 ID 정보 엔티티입니다. 게임 플레이어 계정은 익명 계정이며 사용자ID(UUID)와 비밀번호(무작위 32자 문자열)로 구성되므로, 게임 플레이어는 이메일 주소 등의 정보를 입력할 필요가 없습니다. 발급된 게임 플레이어 계정은 디바이스의 로컬 스토리지에 저장해 두고, 다음번 로그인부터 사용합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 accountId string ※ ~ 1024자 게임 플레이어 계정 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  UUID ~ 128자 사용자ID password string  ~ 128자 비밀번호 계정의 보안을 확보하기 위한 비밀번호를 저장합니다. 비밀번호는 최대 128자 길이를 가지며, 계정 보호에 중요한 역할을 합니다. timeOffset int 0 0 ~ 315360000 현재 시각에 대한 보정값(현재 시각을 기준으로 한 초 수) 시각 보정값은 서버의 현재 시각과의 차이를 초 단위로 나타냅니다. 이 값은 게임 내 이벤트나 기능이 특정 시각에 맞춰 동작해야 할 때 사용됩니다. banStatuses List [] 0 ~ 10 items 계정 BAN 상태 리스트 계정에 연결된 BAN(접근 금지) 상태의 상세 정보를 저장합니다. 각 항목에는 BAN 사유, 기간 및 기타 관련 정보가 포함됩니다. banned bool false 계정이 BAN되어 있는지 여부 계정이 현재 BAN되어 있는지 여부를 나타냅니다. true인 경우 계정은 접근 금지 상태이며, false인 경우 접근이 가능합니다. lastAuthenticatedAt long 최종 인증 시각 계정이 마지막으로 인증된 시각입니다. 이 값은 계정이 인증될 때마다 업데이트됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TakeOver 인계 정보 인계 정보란 디바이스 기종 변경이나 플랫폼 간 계정 이동·공유 시에 사용하는 정보입니다. 개인을 식별하는 고유한 문자열과 비밀번호로 구성되며, 올바른 조합을 입력함으로써 Account(익명 계정)를 취득할 수 있습니다. 하나의 Account에 대해 여러 개의 인계 정보를 설정할 수 있습니다. 여러 개의 인계 정보를 설정하려면 각각 다른 슬롯을 지정해야 합니다. 슬롯에는 0~1024를 지정할 수 있으므로, 최대 1,025종류의 인계 정보를 설정할 수 있습니다. 구체적인 예시로는 0에는 Sign in with Apple의 계정 정보를, 1에는 Google의 계정 정보를 저장하는 방식이 예상됩니다. 어디까지나 이 인계 정보는 데이터 홀더일 뿐이며, 소셜 계정과의 인증 구조는 별도로 준비해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 takeOverId string ※ ~ 1024자 인계 정보 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. userIdentifier string  ~ 1024자 인계용 사용자 ID 계정을 인계할 때 사용되는 개인을 식별하기 위한 고유 키입니다. 서로 다른 계정에서 동일한 userIdentifier를 지정한 경우, 나중에 설정한 값이 우선됩니다. password string  ~ 128자 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 PlatformId 외부 플랫폼 계정 ID X, Instagram, Facebook 등 외부 서비스의 사용자 식별자를 보유합니다. 다른 플레이어는 외부 플랫폼 계정 정보를 사용하여 GS2-Account 사용자 ID를 검색할 수 있습니다. Instagram의 팔로워나 Facebook의 친구를 게임 내 친구로 임포트할 때, GS2-Account의 계정을 특정하기 위해 사용합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 platformId string ※ ~ 1024자 외부 플랫폼 계정 ID GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 GS2-Account 사용자 ID 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string  ~ 1024자 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 DataOwner 데이터 오너 데이터 오너는 네임스페이스 설정에서 “로그인에 사용하는 사용자 ID와 데이터의 보유에 사용하는 사용자 ID를 다르게 한다\"를 지정한 경우에 사용됩니다. 사용자 ID와는 다른 데이터 오너 ID를 발급하여 GS2-Account의 인증 처리를 통해 액세스 토큰을 수신한 경우 취득할 수 있는 사용자 ID는 데이터 오너 ID가 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 dataOwnerId string ※ ~ 1024자 데이터 오너 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID name string  UUID ~ 36자 데이터 오너 ID 데이터 오너의 고유 식별자로서 기능합니다. 데이터 오너 ID는 데이터의 실제 소유자를 나타내며, 사용자 ID와는 다를 수 있습니다. 이 ID는 시스템에 의해 자동으로 생성되며, 각 데이터 오너에 대해 고유합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TakeOverTypeModel 인계 정보 타입 모델 인계 정보를 정의하는 모델입니다. 인계 정보란 디바이스 기종 변경이나 플랫폼 간 계정 이동·공유 시에 사용하는 정보입니다. 개인을 식별하는 고유한 문자열과 비밀번호로 구성되며, 그 올바른 조합을 입력함으로써 Account(익명 계정)를 취득할 수 있습니다. 하나의 Account에 대해 여러 개의 인계 정보를 설정할 수 있습니다. 여러 개의 인계 정보를 설정하려면 각각 다른 슬롯을 지정해야 합니다. 슬롯은 0~1024를 지정할 수 있으므로 최대 1,025종류의 인계 정보를 설정할 수 있습니다. 구체적인 예로는 0에는 Sign in with Apple의 계정 정보를, 1에는 Google 계정 정보를 저장하는 등의 방식이 상정되어 있습니다. 어디까지나 이 인계 정보는 데이터 홀더이며, 소셜 계정과의 인증 메커니즘은 별도로 준비해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 takeOverTypeModelId string ※ ~ 1024자 인계 정보 타입 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 type int  0 ~ 1024 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. openIdConnectSetting OpenIdConnectSetting  OpenID Connect 설정 OpenID Connect 준수 Identity Provider(IdP)와 연동하기 위한 설정입니다. 디스커버리 URL, 클라이언트 인증 정보, Apple Sign In 파라미터 등 플랫폼별 설정이 포함됩니다. OpenIdConnectSetting OpenID Connect 설정 OpenID Connect 준수 IdP의 설정을 등록함으로써 계정의 인계 정보로 IdP 연동을 이용할 수 있게 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 configurationPath string  ~ 1024자 OpenID Connect 설정 URL OpenID Connect 제공자의 디스커버리 엔드포인트 URL입니다. well-known 형식(예: https://example.com/.well-known/openid-configuration)을 따라야 합니다. clientId string  ~ 1024자 클라이언트 ID IdP에 등록된 애플리케이션의 클라이언트 ID입니다. clientSecret string {configurationPath} != “https://appleid.apple.com/.well-known/openid-configuration” ※ ~ 1024자 클라이언트 시크릿 ※ configurationPath가 “https://appleid.apple.com/.well-known/openid-configuration” 이외의 다른 IdP 연동인 경우 필수 appleTeamId string {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” ※ ~ 1024자 Apple Developer 팀 ID Apple Developer 계정의 팀 ID입니다. Sign in with Apple 인증에 필요합니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 appleKeyId string {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” ※ ~ 1024자 Apple에 등록된 키 ID Sign in with Apple용으로 Apple Developer 계정에 등록된 키 ID입니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 applePrivateKeyPem string {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” ※ ~ 10240자 Apple로부터 받은 비밀 키 Apple Developer 포털에서 다운로드한 PEM 형식의 비밀 키입니다. Sign in with Apple 인증에 필요합니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 doneEndpointUrl string ~ 1024자 인증 완료 시 이동하는 URL 지정하지 않으면 /authorization/done으로 이동합니다. 쿼리 스트링에 id_token이 부여됩니다. additionalScopeValues List [] 0 ~ 10 items OpenID Connect에서 획득하는 추가 스코프 기본 OpenID Connect 스코프 외에 IdP에 요청하는 추가 OAuth 스코프입니다. 인증 시 추가 사용자 정보를 취득할 수 있습니다. additionalReturnValues List [] 0 ~ 10 items OpenID Connect에서 획득하는 추가 반환값 ID 토큰 또는 UserInfo 응답에서 반환값에 포함할 추가 클레임 이름입니다. 지정된 클레임이 추출되어 표준 인증 결과와 함께 반환됩니다. ScopeValue 스코프 값 OpenID Connect 인증 시 취득되는 추가 OAuth 스코프 값을 나타내는 키-값 쌍입니다. 표준 OpenID Connect 클레임 외에 IdP로부터 취득한 추가 데이터를 저장하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 인증 시 IdP에 요청한 스코프 이름입니다. value string ~ 51200자 값 해당 스코프에 대해 IdP로부터 반환된 값입니다. PlatformUser 외부 플랫폼 사용자 정보 외부 플랫폼에서의 사용자 정보를 보유합니다. 플랫폼 고유의 사용자 식별자와 대응하는 GS2-Account 사용자 ID의 매핑을 포함하며, 외부 플랫폼의 계정 ID를 이용한 플레이어 검색에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string  ~ 1024자 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. userId string  ~ 128자 GS2-Account 사용자 ID 이 플랫폼 사용자에게 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. BanStatus 계정 BAN 상태 게임 플레이어 계정에 적용된 BAN(접근 금지) 상태에 관한 정보를 나타냅니다. 이 타입은 BAN이 적용된 이유, BAN의 명칭, 그리고 BAN 해제 예정 일시 등의 상세 정보를 포함합니다. BAN 상태는 부정 행위나 이용 약관 위반 등 다양한 이유로 계정에 적용될 수 있으며, 이 타입은 그 상태를 관리하는 데 도움이 됩니다. 시스템은 이 정보를 바탕으로 계정의 접근 권한을 제어하고, 필요에 따라 접근을 제한하거나 해제합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 36자 BAN 상태 이름 BAN 상태의 고유한 이름을 보유합니다. 이름에는 임의의 값을 설정할 수 있습니다. 생략할 경우 UUID(Universally Unique Identifier) 형식으로 자동 생성되어 각 BAN 상태를 식별하는 데 사용됩니다. 이 ID를 통해 여러 개의 BAN 상태를 쉽게 추적할 수 있습니다. reason string  ~ 256자 계정이 BAN된 이유 계정이 BAN된 구체적인 이유를 설명합니다. 최대 256자 길이로, 계정 BAN의 원인을 명확히 하는 데 도움이 됩니다. 이 정보는 계정 관리자나 운영팀이 참조할 뿐만 아니라, 게임 클라이언트로의 응답값에도 포함됩니다. releaseTimestamp long  BAN이 해제되는 일시 계정 BAN이 해제될 예정 일시를 나타냅니다. 이 일시가 지나면 계정은 자동으로 BAN 해제 상태가 되어 정상적인 접근이 가능해집니다. CurrentModelMaster 현재 활성화된 인계 정보 타입 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 인계 정보 타입 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Account 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 TakeOverTypeModelMaster 인계 정보 타입 모델 마스터 인계 정보 타입 모델 마스터는 게임 내에서 사용되는 인계 정보 타입 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·갱신 처리를 수행함으로써 실제로 게임에서 참조되는 인계 정보 타입 모델로 반영됩니다. 인계 정보란 디바이스 기종 변경이나 플랫폼 간 계정 이동·공유 시에 사용하는 정보입니다. 개인을 식별하는 고유한 문자열과 비밀번호로 구성되며, 올바른 조합을 입력함으로써 Account(익명 계정)를 취득할 수 있습니다. 하나의 Account에 대해 여러 개의 인계 정보를 설정할 수 있습니다. 여러 개의 인계 정보를 설정하려면 각각 다른 슬롯을 지정해야 합니다. 슬롯에는 0~1024를 지정할 수 있으므로, 최대 1,025종류의 인계 정보를 설정할 수 있습니다. 구체적인 예시로는 0에는 Sign in with Apple의 계정 정보를, 1에는 Google의 계정 정보를 저장하는 방식이 예상됩니다. 어디까지나 이 인계 정보는 데이터 홀더일 뿐이며, 소셜 계정과의 인증 구조는 별도로 준비해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 takeOverTypeModelId string ※ ~ 1024자 인계 정보 타입 모델 마스터 데이터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 type int  0 ~ 1024 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. openIdConnectSetting OpenIdConnectSetting  OpenID Connect 설정 OpenID Connect 준수 Identity Provider(IdP)와 연동하기 위한 설정입니다. 디스커버리 URL, 클라이언트 인증 정보, Apple Sign In 파라미터 등 플랫폼별 설정이 포함됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 account . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DescribeNamespacesRequest ; import io.gs2.account.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Account . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Account . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . describe_namespaces ( account . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'account' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 changePasswordIfTakeOver bool false 계정 인계 시 비밀번호를 변경할지 여부 계정 인계 시 비밀번호를 변경할지 여부를 지정합니다. 이 설정을 통해 계정 인계를 실행한 후 인계 이전 디바이스로부터의 로그인을 제한할 수 있습니다. differentUserIdForLoginAndDataRetention bool false 로그인에 사용하는 사용자 ID와 데이터의 보유에 사용하는 사용자 ID를 다르게 함 로그인용 사용자 ID와 데이터 보유용 사용자 ID를 분리할지 여부를 지정합니다. 이 설정을 통해 플랫폼 제공업체가 규정하는 개인정보 보호 요건을 적은 작업량으로 충족할 수 있습니다. ※이 파라미터는 네임스페이스 생성 시에만 설정할 수 있습니다. createAccountScript ScriptSetting 계정을 신규 생성했을 때 실행할 스크립트의 설정 계정 생성의 커스텀 로직을 구현하는 데 사용됩니다. Script 트리거 레퍼런스 - createAccount authenticationScript ScriptSetting 인증했을 때 실행할 스크립트의 설정 인증 프로세스를 커스터마이즈하는 데 도움이 됩니다. Script 트리거 레퍼런스 - authentication createTakeOverScript ScriptSetting 인계 정보를 등록했을 때 실행할 스크립트의 설정 인계 정보를 처음 등록했을 때 보상을 지급하기 위해 GS2-Mission의 카운터를 증가시키는 등의 커스텀 로직을 추가하는 데 사용됩니다. Script 트리거 레퍼런스 - createTakeOver doTakeOverScript ScriptSetting 인계를 실행했을 때 실행할 스크립트의 설정 인계 처리의 추가 로직을 구현하는 데 도움이 됩니다. Script 트리거 레퍼런스 - doTakeOver banScript ScriptSetting 계정 BAN 상태를 추가했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - ban unBanScript ScriptSetting 계정 BAN 상태를 해제했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - unBan logSetting LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스 정보를 보유합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 account . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , ChangePasswordIfTakeOver : pointy . Bool ( false ), DifferentUserIdForLoginAndDataRetention : nil , CreateAccountScript : nil , AuthenticationScript : nil , CreateTakeOverScript : nil , DoTakeOverScript : nil , BanScript : nil , UnBanScript : nil , LogSetting : \u0026 account . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withChangePasswordIfTakeOver ( false ) -\u003e withDifferentUserIdForLoginAndDataRetention ( null ) -\u003e withCreateAccountScript ( null ) -\u003e withAuthenticationScript ( null ) -\u003e withCreateTakeOverScript ( null ) -\u003e withDoTakeOverScript ( null ) -\u003e withBanScript ( null ) -\u003e withUnBanScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Account\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreateNamespaceRequest ; import io.gs2.account.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withChangePasswordIfTakeOver ( false ) . withDifferentUserIdForLoginAndDataRetention ( null ) . withCreateAccountScript ( null ) . withAuthenticationScript ( null ) . withCreateTakeOverScript ( null ) . withDoTakeOverScript ( null ) . withBanScript ( null ) . withUnBanScript ( null ) . withLogSetting ( new io . gs2 . account . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Account . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithChangePasswordIfTakeOver ( false ) . WithDifferentUserIdForLoginAndDataRetention ( null ) . WithCreateAccountScript ( null ) . WithAuthenticationScript ( null ) . WithCreateTakeOverScript ( null ) . WithDoTakeOverScript ( null ) . WithBanScript ( null ) . WithUnBanScript ( null ) . WithLogSetting ( new Gs2 . Gs2Account . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Account . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withChangePasswordIfTakeOver ( false ) . withDifferentUserIdForLoginAndDataRetention ( null ) . withCreateAccountScript ( null ) . withAuthenticationScript ( null ) . withCreateTakeOverScript ( null ) . withDoTakeOverScript ( null ) . withBanScript ( null ) . withUnBanScript ( null ) . withLogSetting ( new Gs2Account . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_namespace ( account . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_change_password_if_take_over ( False ) . with_different_user_id_for_login_and_data_retention ( None ) . with_create_account_script ( None ) . with_authentication_script ( None ) . with_create_take_over_script ( None ) . with_do_take_over_script ( None ) . with_ban_script ( None ) . with_un_ban_script ( None ) . with_log_setting ( account . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , changePasswordIfTakeOver = false , differentUserIdForLoginAndDataRetention = nil , createAccountScript = nil , authenticationScript = nil , createTakeOverScript = nil , doTakeOverScript = nil , banScript = nil , unBanScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , changePasswordIfTakeOver = false , differentUserIdForLoginAndDataRetention = nil , createAccountScript = nil , authenticationScript = nil , createTakeOverScript = nil , doTakeOverScript = nil , banScript = nil , unBanScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 account . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetNamespaceStatusRequest ; import io.gs2.account.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Account . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Account . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_namespace_status ( account . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'account' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 account . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetNamespaceRequest ; import io.gs2.account.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Account . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Account . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_namespace ( account . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 changePasswordIfTakeOver bool false 계정 인계 시 비밀번호를 변경할지 여부 계정 인계 시 비밀번호를 변경할지 여부를 지정합니다. 이 설정을 통해 계정 인계를 실행한 후 인계 이전 디바이스로부터의 로그인을 제한할 수 있습니다. createAccountScript ScriptSetting 계정을 신규 생성했을 때 실행할 스크립트의 설정 계정 생성의 커스텀 로직을 구현하는 데 사용됩니다. Script 트리거 레퍼런스 - createAccount authenticationScript ScriptSetting 인증했을 때 실행할 스크립트의 설정 인증 프로세스를 커스터마이즈하는 데 도움이 됩니다. Script 트리거 레퍼런스 - authentication createTakeOverScript ScriptSetting 인계 정보를 등록했을 때 실행할 스크립트의 설정 인계 정보를 처음 등록했을 때 보상을 지급하기 위해 GS2-Mission의 카운터를 증가시키는 등의 커스텀 로직을 추가하는 데 사용됩니다. Script 트리거 레퍼런스 - createTakeOver doTakeOverScript ScriptSetting 인계를 실행했을 때 실행할 스크립트의 설정 인계 처리의 추가 로직을 구현하는 데 도움이 됩니다. Script 트리거 레퍼런스 - doTakeOver banScript ScriptSetting 계정 BAN 상태를 추가했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - ban unBanScript ScriptSetting 계정 BAN 상태를 해제했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - unBan logSetting LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스 정보를 보유합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 account . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , ChangePasswordIfTakeOver : pointy . Bool ( true ), CreateAccountScript : \u0026 account . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ), }, AuthenticationScript : \u0026 account . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ), }, CreateTakeOverScript : \u0026 account . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ), }, DoTakeOverScript : \u0026 account . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" ), }, BanScript : nil , UnBanScript : nil , LogSetting : \u0026 account . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withChangePasswordIfTakeOver ( true ) -\u003e withCreateAccountScript (( new \\Gs2\\Account\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) -\u003e withAuthenticationScript (( new \\Gs2\\Account\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) -\u003e withCreateTakeOverScript (( new \\Gs2\\Account\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) -\u003e withDoTakeOverScript (( new \\Gs2\\Account\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" )) -\u003e withBanScript ( null ) -\u003e withUnBanScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Account\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateNamespaceRequest ; import io.gs2.account.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withChangePasswordIfTakeOver ( true ) . withCreateAccountScript ( new io . gs2 . account . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . withAuthenticationScript ( new io . gs2 . account . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . withCreateTakeOverScript ( new io . gs2 . account . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . withDoTakeOverScript ( new io . gs2 . account . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" )) . withBanScript ( null ) . withUnBanScript ( null ) . withLogSetting ( new io . gs2 . account . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Account . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithChangePasswordIfTakeOver ( true ) . WithCreateAccountScript ( new Gs2 . Gs2Account . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . WithAuthenticationScript ( new Gs2 . Gs2Account . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . WithCreateTakeOverScript ( new Gs2 . Gs2Account . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . WithDoTakeOverScript ( new Gs2 . Gs2Account . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" )) . WithBanScript ( null ) . WithUnBanScript ( null ) . WithLogSetting ( new Gs2 . Gs2Account . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Account . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withChangePasswordIfTakeOver ( true ) . withCreateAccountScript ( new Gs2Account . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . withAuthenticationScript ( new Gs2Account . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . withCreateTakeOverScript ( new Gs2Account . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . withDoTakeOverScript ( new Gs2Account . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" )) . withBanScript ( null ) . withUnBanScript ( null ) . withLogSetting ( new Gs2Account . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_namespace ( account . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_change_password_if_take_over ( True ) . with_create_account_script ( account . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002' )) . with_authentication_script ( account . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004' )) . with_create_take_over_script ( account . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006' )) . with_do_take_over_script ( account . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008' )) . with_ban_script ( None ) . with_un_ban_script ( None ) . with_log_setting ( account . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , changePasswordIfTakeOver = true , createAccountScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , }, authenticationScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , }, createTakeOverScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , }, doTakeOverScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" , }, banScript = nil , unBanScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , changePasswordIfTakeOver = true , createAccountScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , }, authenticationScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , }, createTakeOverScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , }, doTakeOverScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" , }, banScript = nil , unBanScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 account . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeleteNamespaceRequest ; import io.gs2.account.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Account . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Account . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_namespace ( account . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 account . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetServiceVersionRequest ; import io.gs2.account.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Account . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Account . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_service_version ( account . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 account . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DumpUserDataByUserIdRequest ; import io.gs2.account.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Account . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Account . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . dump_user_data_by_user_id ( account . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'account' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 account . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.account.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Account . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Account . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( account . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'account' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 account . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CleanUserDataByUserIdRequest ; import io.gs2.account.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Account . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Account . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . clean_user_data_by_user_id ( account . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'account' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 account . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.account.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Account . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Account . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( account . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'account' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 account . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.account.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Account . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Account . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( account . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'account' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 account . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.ImportUserDataByUserIdRequest ; import io.gs2.account.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Account . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Account . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . import_user_data_by_user_id ( account . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'account' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 account . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CheckImportUserDataByUserIdRequest ; import io.gs2.account.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Account . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Account . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( account . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'account' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeAccounts 게임 플레이어 계정의 목록을 취득 지정된 네임스페이스에 존재하는 모든 게임 플레이어 계정의 목록을 취득합니다. 취득되는 계정 정보에는 계정ID, 상태, 생성일시 등이 포함됩니다. 페이지네이션을 지원하며, 한 번에 취득할 수 있는 계정 수를 제한하고 다음 페이지의 토큰을 제공합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 게임 플레이어 계정의 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DescribeAccounts ( \u0026 account . DescribeAccountsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DescribeAccountsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e describeAccounts ( ( new DescribeAccountsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DescribeAccountsRequest ; import io.gs2.account.result.DescribeAccountsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DescribeAccountsResult result = client . describeAccounts ( new DescribeAccountsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Account \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DescribeAccountsResult \u003e asyncResult = null ; yield return client . DescribeAccounts ( new Gs2 . Gs2Account . Request . DescribeAccountsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . describeAccounts ( new Gs2Account . DescribeAccountsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . describe_accounts ( account . DescribeAccountsRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.describe_accounts ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'account' ) api_result_handler = client.describe_accounts_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createAccount 게임 플레이어 계정을 신규 생성 이 메서드는 새로운 게임 플레이어 계정을 생성합니다. 계정 생성 시 사용자ID, 비밀번호의 지정은 필요하지 않습니다. 사용자ID, 비밀번호는 자동으로 생성됩니다. 생성 성공 시, 새로 생성된 계정의 상세 정보가 응답으로 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Account 작성한 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreateAccount ( \u0026 account . CreateAccountRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreateAccountRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createAccount ( ( new CreateAccountRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreateAccountRequest ; import io.gs2.account.result.CreateAccountResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreateAccountResult result = client . createAccount ( new CreateAccountRequest () . withNamespaceName ( \"namespace-0001\" ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreateAccountResult \u003e asyncResult = null ; yield return client . CreateAccount ( new Gs2 . Gs2Account . Request . CreateAccountRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createAccount ( new Gs2Account . CreateAccountRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_account ( account . CreateAccountRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_account ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_account_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateTimeOffset 게임 플레이어 계정의 현재 시각에 대한 보정값을 갱신 특정 게임 플레이어 계정의 시각 보정값을 갱신합니다. 이 시각 보정은 미래의 이벤트 스케줄을 사전에 테스트하는 데 활용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffset int 0 0 ~ 315360000 현재 시각에 대한 보정값(현재 시각을 기준으로 한 초 수) 시각 보정값은 서버의 현재 시각과의 차이를 초 단위로 나타냅니다. 이 값은 게임 내 이벤트나 기능이 특정 시각에 맞춰 동작해야 할 때 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Account 갱신한 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateTimeOffset ( \u0026 account . UpdateTimeOffsetRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), TimeOffset : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateTimeOffsetRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateTimeOffset ( ( new UpdateTimeOffsetRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withTimeOffset ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateTimeOffsetRequest ; import io.gs2.account.result.UpdateTimeOffsetResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateTimeOffsetResult result = client . updateTimeOffset ( new UpdateTimeOffsetRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withTimeOffset ( null ) . withTimeOffsetToken ( null ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateTimeOffsetResult \u003e asyncResult = null ; yield return client . UpdateTimeOffset ( new Gs2 . Gs2Account . Request . UpdateTimeOffsetRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithTimeOffset ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateTimeOffset ( new Gs2Account . UpdateTimeOffsetRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withTimeOffset ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_time_offset ( account . UpdateTimeOffsetRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_time_offset ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_time_offset ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , timeOffset = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_time_offset_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , timeOffset = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateBanned 게임 플레이어 계정의 계정 BAN 상태를 갱신 특정 게임 플레이어 계정의 BAN(접근 금지) 상태를 갱신하기 위해 사용됩니다. 계정의 BAN 상태를 활성화 또는 비활성화할 수 있으며, 이를 통해 계정의 게임 내 이용을 제한할 수 있습니다. 계정ID와 새로운 BAN 상태를 지정하여 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID banned bool false 계정이 BAN되어 있는지 여부 계정이 현재 BAN되어 있는지 여부를 나타냅니다. true인 경우 계정은 접근 금지 상태이며, false인 경우 접근이 가능합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Account 갱신한 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateBanned ( \u0026 account . UpdateBannedRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), Banned : pointy . Bool ( true ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateBannedRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateBanned ( ( new UpdateBannedRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withBanned ( true ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateBannedRequest ; import io.gs2.account.result.UpdateBannedResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateBannedResult result = client . updateBanned ( new UpdateBannedRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withBanned ( true ) . withTimeOffsetToken ( null ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateBannedResult \u003e asyncResult = null ; yield return client . UpdateBanned ( new Gs2 . Gs2Account . Request . UpdateBannedRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithBanned ( true ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateBanned ( new Gs2Account . UpdateBannedRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withBanned ( true ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_banned ( account . UpdateBannedRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_banned ( True ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_banned ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , banned = true , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_banned_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , banned = true , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; addBan 게임 플레이어 계정에 계정 BAN 상태를 추가 게임 플레이어 계정에 계정 BAN 상태를 추가하기 위해 사용됩니다. 특정 계정에 대해 일시적 또는 영구적인 접근 금지를 설정할 수 있습니다. BAN을 추가하려면 계정ID와 BAN 상태(이유 및 기간 포함)를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID banStatus BanStatus  BAN 상태 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Account 갱신한 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . AddBan ( \u0026 account . AddBanRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), BanStatus : \u0026 account . BanStatus { Name : pointy . String ( \"feature1\" ), Reason : pointy . String ( \"reason\" ), ReleaseTimestamp : pointy . Int64 ( 1000000000000 ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\AddBanRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e addBan ( ( new AddBanRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withBanStatus (( new BanStatus ()) -\u003e withName ( \"feature1\" ) -\u003e withReason ( \"reason\" ) -\u003e withReleaseTimestamp ( 1000000000000 ) ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.AddBanRequest ; import io.gs2.account.result.AddBanResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { AddBanResult result = client . addBan ( new AddBanRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withBanStatus ( new BanStatus () . withName ( \"feature1\" ) . withReason ( \"reason\" ) . withReleaseTimestamp ( 1000000000000L ) ) . withTimeOffsetToken ( null ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . AddBanResult \u003e asyncResult = null ; yield return client . AddBan ( new Gs2 . Gs2Account . Request . AddBanRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithBanStatus ( new Gs2 . Gs2Account . Model . BanStatus () . WithName ( \"feature1\" ) . WithReason ( \"reason\" ) . WithReleaseTimestamp ( 1000000000000L ) ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . addBan ( new Gs2Account . AddBanRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withBanStatus ( new Gs2Account . model . BanStatus () . withName ( \"feature1\" ) . withReason ( \"reason\" ) . withReleaseTimestamp ( 1000000000000 ) ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . add_ban ( account . AddBanRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_ban_status ( account . BanStatus () . with_name ( 'feature1' ) . with_reason ( 'reason' ) . with_release_timestamp ( 1000000000000 ) ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.add_ban ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , banStatus = { name = \"feature1\" , reason = \"reason\" , release_timestamp = 1000000000000 , }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.add_ban_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , banStatus = { name = \"feature1\" , reason = \"reason\" , release_timestamp = 1000000000000 , }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; removeBan 게임 플레이어 계정의 계정 BAN 상태를 삭제 특정 게임 플레이어 계정에 적용된 계정 BAN 상태를 삭제합니다. 삭제를 수행하려면 사용자ID와 삭제할 계정 BAN 상태의 이름을 지정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID banStatusName string  ~ 36자 BAN 상태명 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Account 갱신한 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . RemoveBan ( \u0026 account . RemoveBanRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), BanStatusName : pointy . String ( \"status-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\RemoveBanRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e removeBan ( ( new RemoveBanRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withBanStatusName ( \"status-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.RemoveBanRequest ; import io.gs2.account.result.RemoveBanResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { RemoveBanResult result = client . removeBan ( new RemoveBanRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withBanStatusName ( \"status-0001\" ) . withTimeOffsetToken ( null ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . RemoveBanResult \u003e asyncResult = null ; yield return client . RemoveBan ( new Gs2 . Gs2Account . Request . RemoveBanRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithBanStatusName ( \"status-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . removeBan ( new Gs2Account . RemoveBanRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withBanStatusName ( \"status-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . remove_ban ( account . RemoveBanRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_ban_status_name ( 'status-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.remove_ban ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , banStatusName = \"status-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.remove_ban_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , banStatusName = \"status-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getAccount 게임 플레이어 계정을 취득 지정된 ID를 가진 특정 게임 플레이어 계정의 상세 정보를 취득합니다. 취득되는 정보에는 계정의 이름, 상태, 생성일시 등이 포함됩니다. 이 메서드는 계정의 상세 정보를 표시하기 위한 것입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  UUID ~ 128자 사용자ID includeLastAuthenticatedAt bool false 마지막 인증 일시 포함 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Account 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetAccount ( \u0026 account . GetAccountRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), IncludeLastAuthenticatedAt : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetAccountRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getAccount ( ( new GetAccountRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withIncludeLastAuthenticatedAt ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetAccountRequest ; import io.gs2.account.result.GetAccountResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetAccountResult result = client . getAccount ( new GetAccountRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withIncludeLastAuthenticatedAt ( null ) . withTimeOffsetToken ( null ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetAccountResult \u003e asyncResult = null ; yield return client . GetAccount ( new Gs2 . Gs2Account . Request . GetAccountRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithIncludeLastAuthenticatedAt ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getAccount ( new Gs2Account . GetAccountRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withIncludeLastAuthenticatedAt ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_account ( account . GetAccountRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_include_last_authenticated_at ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_account ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , includeLastAuthenticatedAt = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_account_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , includeLastAuthenticatedAt = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteAccount 게임 플레이어 계정을 삭제 특정 게임 플레이어 계정을 삭제하기 위해 사용됩니다. 계정을 삭제하면 해당 계정으로는 로그인할 수 없게 되지만, GS2-Account가 관리하지 않는 사용자 데이터는 계속 GS2에 남아 있습니다. 사용자 데이터도 모두 삭제해야 하는 경우에는 매니지먼트 콘솔에서 접근할 수 있는 사용자 데이터 완전 삭제 기능을 이용해 주십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  UUID ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Account 삭제한 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeleteAccount ( \u0026 account . DeleteAccountRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeleteAccountRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deleteAccount ( ( new DeleteAccountRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeleteAccountRequest ; import io.gs2.account.result.DeleteAccountResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeleteAccountResult result = client . deleteAccount ( new DeleteAccountRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withTimeOffsetToken ( null ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeleteAccountResult \u003e asyncResult = null ; yield return client . DeleteAccount ( new Gs2 . Gs2Account . Request . DeleteAccountRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deleteAccount ( new Gs2Account . DeleteAccountRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_account ( account . DeleteAccountRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_account ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_account_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; authentication 게임 플레이어 계정을 인증 게임 플레이어 계정의 인증에 사용됩니다. 사용자가 계정에 로그인할 때, 사용자 이름과 비밀번호를 대조합니다. 올바른 인증 정보가 제공되면, 계정 정보와 그 서명이 발급됩니다. 이 정보를 GS2-Auth 에 전달하면 액세스 토큰을 얻을 수 있으며, GS2 가 제공하는 다양한 마이크로서비스에 로그인한 사용자로서 접근할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN password string  ~ 128자 비밀번호 계정의 보안을 확보하기 위한 비밀번호를 저장합니다. 비밀번호는 최대 128자 길이를 가지며, 계정 보호에 중요한 역할을 합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Account 게임 플레이어 계정 banStatuses List BAN 상태 리스트 body string 서명 대상 계정 인증 정보 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . Authentication ( \u0026 account . AuthenticationRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), KeyId : pointy . String ( \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" ), Password : pointy . String ( \"password-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item banStatuses := result . BanStatuses body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\AuthenticationRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e authentication ( ( new AuthenticationRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withKeyId ( \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" ) -\u003e withPassword ( \"password-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $banStatuses = $result -\u003e getBanStatuses (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.AuthenticationRequest ; import io.gs2.account.result.AuthenticationResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { AuthenticationResult result = client . authentication ( new AuthenticationRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withKeyId ( \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" ) . withPassword ( \"password-0001\" ) . withTimeOffsetToken ( null ) ); Account item = result . getItem (); List BanStatus \u003e banStatuses = result . getBanStatuses (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . AuthenticationResult \u003e asyncResult = null ; yield return client . Authentication ( new Gs2 . Gs2Account . Request . AuthenticationRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithKeyId ( \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" ) . WithPassword ( \"password-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var banStatuses = result . BanStatuses ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . authentication ( new Gs2Account . AuthenticationRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withKeyId ( \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" ) . withPassword ( \"password-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const banStatuses = result . getBanStatuses (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . authentication ( account . AuthenticationRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_key_id ( 'grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001' ) . with_password ( 'password-0001' ) . with_time_offset_token ( None ) ) item = result . item ban_statuses = result . ban_statuses body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.authentication ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , keyId = \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" , password = \"password-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; banStatuses = result.banStatuses ; body = result.body ; signature = result.signature ; client = gs2 ( 'account' ) api_result_handler = client.authentication_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , keyId = \"grn:gs2:ap-northeast-1:owner_id:key:namespace-0001:key:key-0001\" , password = \"password-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; banStatuses = result.banStatuses ; body = result.body ; signature = result.signature ; describeTakeOvers 인계 정보 목록을 취득 현재 로그인 중인 게임 플레이어 계정에 등록된 인계 정보 목록을 취득합니다. 인계 정보는 기기 변경이나 게임 재설치 시 계정 데이터를 이전하기 위해 사용됩니다. 페이지네이션을 지원하며, 한 번에 취득하는 건수를 제한하고 다음 페이지의 토큰을 사용하여 이어서 취득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 인계 정보의 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DescribeTakeOvers ( \u0026 account . DescribeTakeOversRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DescribeTakeOversRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e describeTakeOvers ( ( new DescribeTakeOversRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DescribeTakeOversRequest ; import io.gs2.account.result.DescribeTakeOversResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DescribeTakeOversResult result = client . describeTakeOvers ( new DescribeTakeOversRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List TakeOver \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DescribeTakeOversResult \u003e asyncResult = null ; yield return client . DescribeTakeOvers ( new Gs2 . Gs2Account . Request . DescribeTakeOversRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . describeTakeOvers ( new Gs2Account . DescribeTakeOversRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . describe_take_overs ( account . DescribeTakeOversRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.describe_take_overs ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'account' ) api_result_handler = client.describe_take_overs_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeTakeOversByUserId 사용자ID를 지정하여 인계 정보 목록을 취득 지정된 게임 플레이어 계정에 등록된 인계 정보 목록을 취득합니다. 인계 정보는 기기 변경이나 게임 재설치 시 계정 데이터를 이전하기 위해 사용됩니다. 페이지네이션을 지원하며, 한 번에 취득하는 건수를 제한하고 다음 페이지의 토큰을 사용하여 이어서 취득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 인계 정보의 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DescribeTakeOversByUserId ( \u0026 account . DescribeTakeOversByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DescribeTakeOversByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e describeTakeOversByUserId ( ( new DescribeTakeOversByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DescribeTakeOversByUserIdRequest ; import io.gs2.account.result.DescribeTakeOversByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DescribeTakeOversByUserIdResult result = client . describeTakeOversByUserId ( new DescribeTakeOversByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List TakeOver \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DescribeTakeOversByUserIdResult \u003e asyncResult = null ; yield return client . DescribeTakeOversByUserId ( new Gs2 . Gs2Account . Request . DescribeTakeOversByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . describeTakeOversByUserId ( new Gs2Account . DescribeTakeOversByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . describe_take_overs_by_user_id ( account . DescribeTakeOversByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.describe_take_overs_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'account' ) api_result_handler = client.describe_take_overs_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createTakeOver 인계 정보를 신규 작성 현재 로그인 중인 게임 플레이어 계정에 새로운 인계 정보를 등록합니다. 타입 슬롯(숫자), 사용자 식별자(이메일 주소 등), 비밀번호를 지정해야 합니다. 등록한 정보는 이후 다른 단말에서 동일한 사용자 식별자와 비밀번호를 사용하여 계정을 복구할 때 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. userIdentifier string  ~ 1024자 인계용 사용자 ID 계정을 인계할 때 사용되는 개인을 식별하기 위한 고유 키입니다. 서로 다른 계정에서 동일한 userIdentifier를 지정한 경우, 나중에 설정한 값이 우선됩니다. password string  ~ 128자 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. Result 타입 설명 item TakeOver 작성한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreateTakeOver ( \u0026 account . CreateTakeOverRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"user-0001@gs2.io\" ), Password : pointy . String ( \"password-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreateTakeOverRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createTakeOver ( ( new CreateTakeOverRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"user-0001@gs2.io\" ) -\u003e withPassword ( \"password-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreateTakeOverRequest ; import io.gs2.account.result.CreateTakeOverResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreateTakeOverResult result = client . createTakeOver ( new CreateTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"user-0001@gs2.io\" ) . withPassword ( \"password-0001\" ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreateTakeOverResult \u003e asyncResult = null ; yield return client . CreateTakeOver ( new Gs2 . Gs2Account . Request . CreateTakeOverRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"user-0001@gs2.io\" ) . WithPassword ( \"password-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createTakeOver ( new Gs2Account . CreateTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"user-0001@gs2.io\" ) . withPassword ( \"password-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_take_over ( account . CreateTakeOverRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) . with_user_identifier ( 'user-0001@gs2.io' ) . with_password ( 'password-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_take_over ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , userIdentifier = \"user-0001@gs2.io\" , password = \"password-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_take_over_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , userIdentifier = \"user-0001@gs2.io\" , password = \"password-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createTakeOverByUserId 사용자ID를 지정하여 인계 정보를 신규 작성 지정된 게임 플레이어 계정에 새로운 인계 정보를 등록합니다. 타입 슬롯(숫자), 사용자 식별자(이메일 주소 등), 비밀번호를 지정해야 합니다. 등록한 정보는 이후 다른 단말에서 동일한 사용자 식별자와 비밀번호를 사용하여 계정을 복구할 때 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. userIdentifier string  ~ 1024자 인계용 사용자 ID 계정을 인계할 때 사용되는 개인을 식별하기 위한 고유 키입니다. 서로 다른 계정에서 동일한 userIdentifier를 지정한 경우, 나중에 설정한 값이 우선됩니다. password string  ~ 128자 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item TakeOver 작성한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreateTakeOverByUserId ( \u0026 account . CreateTakeOverByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"user-0001@gs2.io\" ), Password : pointy . String ( \"password-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreateTakeOverByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createTakeOverByUserId ( ( new CreateTakeOverByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"user-0001@gs2.io\" ) -\u003e withPassword ( \"password-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreateTakeOverByUserIdRequest ; import io.gs2.account.result.CreateTakeOverByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreateTakeOverByUserIdResult result = client . createTakeOverByUserId ( new CreateTakeOverByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"user-0001@gs2.io\" ) . withPassword ( \"password-0001\" ) . withTimeOffsetToken ( null ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreateTakeOverByUserIdResult \u003e asyncResult = null ; yield return client . CreateTakeOverByUserId ( new Gs2 . Gs2Account . Request . CreateTakeOverByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"user-0001@gs2.io\" ) . WithPassword ( \"password-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createTakeOverByUserId ( new Gs2Account . CreateTakeOverByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"user-0001@gs2.io\" ) . withPassword ( \"password-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_take_over_by_user_id ( account . CreateTakeOverByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_type ( 0 ) . with_user_identifier ( 'user-0001@gs2.io' ) . with_password ( 'password-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_take_over_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , userIdentifier = \"user-0001@gs2.io\" , password = \"password-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_take_over_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , userIdentifier = \"user-0001@gs2.io\" , password = \"password-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createTakeOverOpenIdConnect OpenID Connect 를 사용하여 인계 정보를 신규 작성 OpenID Connect 의 ID Token 을 사용하여, 현재 로그인 중인 게임 플레이어 계정에 새로운 인계 정보를 등록합니다. 비밀번호 대신, ID 제공자(Google, Apple 등)로부터 취득한 ID Token 을 사용합니다. 사용자 식별자(subject)는 ID Token 에서 자동으로 추출되어 계정에 연결됩니다. 대응하는 인계 타입 모델에 OpenID Connect 설정이 사전에 구성되어 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. idToken string  ~ 10240자 OpenID Connect ID Token Result 타입 설명 item TakeOver 작성한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreateTakeOverOpenIdConnect ( \u0026 account . CreateTakeOverOpenIdConnectRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), IdToken : pointy . String ( \"0123456789\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreateTakeOverOpenIdConnectRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createTakeOverOpenIdConnect ( ( new CreateTakeOverOpenIdConnectRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) -\u003e withIdToken ( \"0123456789\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreateTakeOverOpenIdConnectRequest ; import io.gs2.account.result.CreateTakeOverOpenIdConnectResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreateTakeOverOpenIdConnectResult result = client . createTakeOverOpenIdConnect ( new CreateTakeOverOpenIdConnectRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withIdToken ( \"0123456789\" ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreateTakeOverOpenIdConnectResult \u003e asyncResult = null ; yield return client . CreateTakeOverOpenIdConnect ( new Gs2 . Gs2Account . Request . CreateTakeOverOpenIdConnectRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ) . WithIdToken ( \"0123456789\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createTakeOverOpenIdConnect ( new Gs2Account . CreateTakeOverOpenIdConnectRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withIdToken ( \"0123456789\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_take_over_open_id_connect ( account . CreateTakeOverOpenIdConnectRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) . with_id_token ( '0123456789' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_take_over_open_id_connect ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , idToken = \"0123456789\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_take_over_open_id_connect_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , idToken = \"0123456789\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createTakeOverOpenIdConnectAndByUserId 사용자ID를 지정하여 OpenID Connect 를 사용해 인계 정보를 신규 작성 OpenID Connect 의 ID Token 을 사용하여, 지정된 게임 플레이어 계정에 새로운 인계 정보를 등록합니다. 비밀번호 대신, ID 제공자(Google, Apple 등)로부터 취득한 ID Token 을 사용합니다. 사용자 식별자(subject)는 ID Token 에서 자동으로 추출되어 계정에 연결됩니다. 대응하는 인계 타입 모델에 OpenID Connect 설정이 사전에 구성되어 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. idToken string  ~ 10240자 OpenID Connect ID Token timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item TakeOver 작성한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreateTakeOverOpenIdConnectAndByUserId ( \u0026 account . CreateTakeOverOpenIdConnectAndByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), Type : pointy . Int32 ( 0 ), IdToken : pointy . String ( \"0123456789\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreateTakeOverOpenIdConnectAndByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createTakeOverOpenIdConnectAndByUserId ( ( new CreateTakeOverOpenIdConnectAndByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withType ( 0 ) -\u003e withIdToken ( \"0123456789\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreateTakeOverOpenIdConnectAndByUserIdRequest ; import io.gs2.account.result.CreateTakeOverOpenIdConnectAndByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreateTakeOverOpenIdConnectAndByUserIdResult result = client . createTakeOverOpenIdConnectAndByUserId ( new CreateTakeOverOpenIdConnectAndByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withIdToken ( \"0123456789\" ) . withTimeOffsetToken ( null ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreateTakeOverOpenIdConnectAndByUserIdResult \u003e asyncResult = null ; yield return client . CreateTakeOverOpenIdConnectAndByUserId ( new Gs2 . Gs2Account . Request . CreateTakeOverOpenIdConnectAndByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithType ( 0 ) . WithIdToken ( \"0123456789\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createTakeOverOpenIdConnectAndByUserId ( new Gs2Account . CreateTakeOverOpenIdConnectAndByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withIdToken ( \"0123456789\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_take_over_open_id_connect_and_by_user_id ( account . CreateTakeOverOpenIdConnectAndByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_type ( 0 ) . with_id_token ( '0123456789' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_take_over_open_id_connect_and_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , idToken = \"0123456789\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_take_over_open_id_connect_and_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , idToken = \"0123456789\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getTakeOver 인계 정보를 취득 현재 로그인 중인 게임 플레이어 계정에 등록된, 지정된 타입의 인계 정보를 취득합니다. 취득되는 정보에는 타입 슬롯, 사용자 식별자, 생성 일시 등이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. Result 타입 설명 item TakeOver 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetTakeOver ( \u0026 account . GetTakeOverRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetTakeOverRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getTakeOver ( ( new GetTakeOverRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetTakeOverRequest ; import io.gs2.account.result.GetTakeOverResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetTakeOverResult result = client . getTakeOver ( new GetTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetTakeOverResult \u003e asyncResult = null ; yield return client . GetTakeOver ( new Gs2 . Gs2Account . Request . GetTakeOverRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getTakeOver ( new Gs2Account . GetTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_take_over ( account . GetTakeOverRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_take_over ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_take_over_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getTakeOverByUserId 사용자ID를 지정하여 인계 정보를 취득 지정된 게임 플레이어 계정에 등록된, 지정된 타입의 인계 정보를 취득합니다. 취득되는 정보에는 타입 슬롯, 사용자 식별자, 생성 일시 등이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item TakeOver 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetTakeOverByUserId ( \u0026 account . GetTakeOverByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), Type : pointy . Int32 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetTakeOverByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getTakeOverByUserId ( ( new GetTakeOverByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withType ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetTakeOverByUserIdRequest ; import io.gs2.account.result.GetTakeOverByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetTakeOverByUserIdResult result = client . getTakeOverByUserId ( new GetTakeOverByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withTimeOffsetToken ( null ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetTakeOverByUserIdResult \u003e asyncResult = null ; yield return client . GetTakeOverByUserId ( new Gs2 . Gs2Account . Request . GetTakeOverByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithType ( 0 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getTakeOverByUserId ( new Gs2Account . GetTakeOverByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_take_over_by_user_id ( account . GetTakeOverByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_type ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_take_over_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_take_over_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateTakeOver 인계 정보를 갱신 현재 로그인 중인 게임 플레이어 계정의 지정된 타입의 인계 정보 비밀번호를 갱신합니다. 새로운 비밀번호를 설정하기 전에 이전 비밀번호의 검증이 필요합니다. 이전 비밀번호가 일치하지 않을 경우, PasswordIncorrect 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. oldPassword string  ~ 128자 이전 비밀번호 password string  ~ 128자 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. Result 타입 설명 item TakeOver 갱신한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateTakeOver ( \u0026 account . UpdateTakeOverRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), OldPassword : pointy . String ( \"password-0001\" ), Password : pointy . String ( \"password-1001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateTakeOverRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateTakeOver ( ( new UpdateTakeOverRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) -\u003e withOldPassword ( \"password-0001\" ) -\u003e withPassword ( \"password-1001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateTakeOverRequest ; import io.gs2.account.result.UpdateTakeOverResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateTakeOverResult result = client . updateTakeOver ( new UpdateTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withOldPassword ( \"password-0001\" ) . withPassword ( \"password-1001\" ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateTakeOverResult \u003e asyncResult = null ; yield return client . UpdateTakeOver ( new Gs2 . Gs2Account . Request . UpdateTakeOverRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ) . WithOldPassword ( \"password-0001\" ) . WithPassword ( \"password-1001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateTakeOver ( new Gs2Account . UpdateTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withOldPassword ( \"password-0001\" ) . withPassword ( \"password-1001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_take_over ( account . UpdateTakeOverRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) . with_old_password ( 'password-0001' ) . with_password ( 'password-1001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_take_over ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , oldPassword = \"password-0001\" , password = \"password-1001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_take_over_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , oldPassword = \"password-0001\" , password = \"password-1001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateTakeOverByUserId 사용자ID를 지정하여 인계 정보를 갱신 지정된 게임 플레이어 계정의 지정된 타입의 인계 정보 비밀번호를 갱신합니다. 새로운 비밀번호를 설정하기 전에 이전 비밀번호의 검증이 필요합니다. 이전 비밀번호가 일치하지 않을 경우, PasswordIncorrect 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. oldPassword string  ~ 128자 이전 비밀번호 password string  ~ 128자 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item TakeOver 갱신한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateTakeOverByUserId ( \u0026 account . UpdateTakeOverByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), Type : pointy . Int32 ( 0 ), OldPassword : pointy . String ( \"password-0001\" ), Password : pointy . String ( \"password-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateTakeOverByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateTakeOverByUserId ( ( new UpdateTakeOverByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withType ( 0 ) -\u003e withOldPassword ( \"password-0001\" ) -\u003e withPassword ( \"password-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateTakeOverByUserIdRequest ; import io.gs2.account.result.UpdateTakeOverByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateTakeOverByUserIdResult result = client . updateTakeOverByUserId ( new UpdateTakeOverByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withOldPassword ( \"password-0001\" ) . withPassword ( \"password-0002\" ) . withTimeOffsetToken ( null ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateTakeOverByUserIdResult \u003e asyncResult = null ; yield return client . UpdateTakeOverByUserId ( new Gs2 . Gs2Account . Request . UpdateTakeOverByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithType ( 0 ) . WithOldPassword ( \"password-0001\" ) . WithPassword ( \"password-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateTakeOverByUserId ( new Gs2Account . UpdateTakeOverByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withOldPassword ( \"password-0001\" ) . withPassword ( \"password-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_take_over_by_user_id ( account . UpdateTakeOverByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_type ( 0 ) . with_old_password ( 'password-0001' ) . with_password ( 'password-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_take_over_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , oldPassword = \"password-0001\" , password = \"password-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_take_over_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , oldPassword = \"password-0001\" , password = \"password-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteTakeOver 인계 정보를 삭제 현재 로그인 중인 게임 플레이어 계정에서 지정된 타입의 인계 정보를 삭제합니다. 삭제 후에는, 삭제된 인계 정보의 사용자 식별자와 비밀번호를 사용한 계정 복구가 불가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. Result 타입 설명 item TakeOver 삭제한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeleteTakeOver ( \u0026 account . DeleteTakeOverRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeleteTakeOverRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deleteTakeOver ( ( new DeleteTakeOverRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeleteTakeOverRequest ; import io.gs2.account.result.DeleteTakeOverResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeleteTakeOverResult result = client . deleteTakeOver ( new DeleteTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeleteTakeOverResult \u003e asyncResult = null ; yield return client . DeleteTakeOver ( new Gs2 . Gs2Account . Request . DeleteTakeOverRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deleteTakeOver ( new Gs2Account . DeleteTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_take_over ( account . DeleteTakeOverRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_take_over ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_take_over_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteTakeOverByUserIdentifier 인계용 사용자ID를 지정하여 인계 정보를 삭제 GS2 의 사용자ID가 아니라, 플랫폼 측의 사용자 식별자를 사용하여 인계 정보를 검색하여 삭제합니다. 내부 GS2 사용자ID를 모르더라도, 외부 사용자 식별자(이메일 주소 등)로 삭제할 수 있습니다. 삭제 후에는, 삭제된 인계 정보의 사용자 식별자와 비밀번호를 사용한 계정 복구가 불가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. userIdentifier string ~ 1024자 인계용 사용자ID Result 타입 설명 item TakeOver 삭제한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeleteTakeOverByUserIdentifier ( \u0026 account . DeleteTakeOverByUserIdentifierRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"user-0001@gs2.io\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeleteTakeOverByUserIdentifierRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deleteTakeOverByUserIdentifier ( ( new DeleteTakeOverByUserIdentifierRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"user-0001@gs2.io\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeleteTakeOverByUserIdentifierRequest ; import io.gs2.account.result.DeleteTakeOverByUserIdentifierResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeleteTakeOverByUserIdentifierResult result = client . deleteTakeOverByUserIdentifier ( new DeleteTakeOverByUserIdentifierRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"user-0001@gs2.io\" ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeleteTakeOverByUserIdentifierResult \u003e asyncResult = null ; yield return client . DeleteTakeOverByUserIdentifier ( new Gs2 . Gs2Account . Request . DeleteTakeOverByUserIdentifierRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"user-0001@gs2.io\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deleteTakeOverByUserIdentifier ( new Gs2Account . DeleteTakeOverByUserIdentifierRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"user-0001@gs2.io\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_take_over_by_user_identifier ( account . DeleteTakeOverByUserIdentifierRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) . with_user_identifier ( 'user-0001@gs2.io' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_take_over_by_user_identifier ({ namespaceName = \"namespace-0001\" , type = 0 , userIdentifier = \"user-0001@gs2.io\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_take_over_by_user_identifier_async ({ namespaceName = \"namespace-0001\" , type = 0 , userIdentifier = \"user-0001@gs2.io\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteTakeOverByUserId 사용자ID를 지정하여 인계 정보를 삭제 GS2 사용자ID를 사용하여, 지정된 게임 플레이어 계정에서 지정된 타입의 인계 정보를 삭제합니다. 삭제 후에는, 삭제된 인계 정보의 사용자 식별자와 비밀번호를 사용한 계정 복구가 불가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item TakeOver 삭제한 인계 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeleteTakeOverByUserId ( \u0026 account . DeleteTakeOverByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), Type : pointy . Int32 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeleteTakeOverByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deleteTakeOverByUserId ( ( new DeleteTakeOverByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withType ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeleteTakeOverByUserIdRequest ; import io.gs2.account.result.DeleteTakeOverByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeleteTakeOverByUserIdResult result = client . deleteTakeOverByUserId ( new DeleteTakeOverByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withTimeOffsetToken ( null ) ); TakeOver item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeleteTakeOverByUserIdResult \u003e asyncResult = null ; yield return client . DeleteTakeOverByUserId ( new Gs2 . Gs2Account . Request . DeleteTakeOverByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithType ( 0 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deleteTakeOverByUserId ( new Gs2Account . DeleteTakeOverByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_take_over_by_user_id ( account . DeleteTakeOverByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_type ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_take_over_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_take_over_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; doTakeOver 인계를 실행 사용자 식별자와 비밀번호를 사용하여 계정 인계(복구) 처리를 실행합니다. 기기 변경이나 게임 재설치 후에 계정을 복구하고자 할 때 사용합니다. 사용자 식별자와 비밀번호가 등록된 인계 정보와 일치하는 경우, 연결된 게임 플레이어 계정이 반환됩니다. 비밀번호가 일치하지 않는 경우, PasswordIncorrect 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. userIdentifier string  ~ 1024자 인계용 사용자 ID 계정을 인계할 때 사용되는 개인을 식별하기 위한 고유 키입니다. 서로 다른 계정에서 동일한 userIdentifier를 지정한 경우, 나중에 설정한 값이 우선됩니다. password string  ~ 128자 비밀번호 보안을 고려하여 이 비밀번호는 기밀 정보로 취급되며, 해시 값만 저장되어 API 응답에는 값이 포함되지 않습니다. Result 타입 설명 item Account 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DoTakeOver ( \u0026 account . DoTakeOverRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"user-0001@gs2.io\" ), Password : pointy . String ( \"password-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DoTakeOverRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e doTakeOver ( ( new DoTakeOverRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"user-0001@gs2.io\" ) -\u003e withPassword ( \"password-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DoTakeOverRequest ; import io.gs2.account.result.DoTakeOverResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DoTakeOverResult result = client . doTakeOver ( new DoTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"user-0001@gs2.io\" ) . withPassword ( \"password-0001\" ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DoTakeOverResult \u003e asyncResult = null ; yield return client . DoTakeOver ( new Gs2 . Gs2Account . Request . DoTakeOverRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"user-0001@gs2.io\" ) . WithPassword ( \"password-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . doTakeOver ( new Gs2Account . DoTakeOverRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"user-0001@gs2.io\" ) . withPassword ( \"password-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . do_take_over ( account . DoTakeOverRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) . with_user_identifier ( 'user-0001@gs2.io' ) . with_password ( 'password-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.do_take_over ({ namespaceName = \"namespace-0001\" , type = 0 , userIdentifier = \"user-0001@gs2.io\" , password = \"password-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.do_take_over_async ({ namespaceName = \"namespace-0001\" , type = 0 , userIdentifier = \"user-0001@gs2.io\" , password = \"password-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; doTakeOverOpenIdConnect OpenID Connect 를 사용하여 인계를 실행 OpenID Connect 의 ID Token 을 사용하여 계정 인계(복구) 처리를 실행합니다. 비밀번호 대신, ID 제공자(Google, Apple 등)로부터 취득한 ID Token 을 사용하는 인계 실행의 OIDC 변형입니다. ID Token 이 검증되고, subject 를 사용하여 연결된 게임 플레이어 계정이 검색됩니다. 대응하는 인계 타입 모델에 OpenID Connect 설정이 사전에 구성되어 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. idToken string  ~ 10240자 OpenID Connect ID Token Result 타입 설명 item Account 게임 플레이어 계정 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DoTakeOverOpenIdConnect ( \u0026 account . DoTakeOverOpenIdConnectRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : nil , IdToken : pointy . String ( \"0123456789\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DoTakeOverOpenIdConnectRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e doTakeOverOpenIdConnect ( ( new DoTakeOverOpenIdConnectRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( null ) -\u003e withIdToken ( \"0123456789\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DoTakeOverOpenIdConnectRequest ; import io.gs2.account.result.DoTakeOverOpenIdConnectResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DoTakeOverOpenIdConnectResult result = client . doTakeOverOpenIdConnect ( new DoTakeOverOpenIdConnectRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( null ) . withIdToken ( \"0123456789\" ) ); Account item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DoTakeOverOpenIdConnectResult \u003e asyncResult = null ; yield return client . DoTakeOverOpenIdConnect ( new Gs2 . Gs2Account . Request . DoTakeOverOpenIdConnectRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( null ) . WithIdToken ( \"0123456789\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . doTakeOverOpenIdConnect ( new Gs2Account . DoTakeOverOpenIdConnectRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( null ) . withIdToken ( \"0123456789\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . do_take_over_open_id_connect ( account . DoTakeOverOpenIdConnectRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( None ) . with_id_token ( '0123456789' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.do_take_over_open_id_connect ({ namespaceName = \"namespace-0001\" , type = nil , idToken = \"0123456789\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.do_take_over_open_id_connect_async ({ namespaceName = \"namespace-0001\" , type = nil , idToken = \"0123456789\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getAuthorizationUrl 인증URL을 취득 지정된 인계 타입의 OpenID Connect 흐름의 인증URL을 반환합니다. 클라이언트는 이 URL을 사용하여 사용자를 ID 제공자의 인증 페이지로 리다이렉트할 수 있습니다. 이는 계정 인계를 위한 OAuth/OIDC 인증 흐름을 시작하기 위한 진입점입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. Result 타입 설명 authorizationUrl string 인증URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetAuthorizationUrl ( \u0026 account . GetAuthorizationUrlRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } authorizationUrl := result . AuthorizationUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetAuthorizationUrlRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getAuthorizationUrl ( ( new GetAuthorizationUrlRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) ); $authorizationUrl = $result -\u003e getAuthorizationUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetAuthorizationUrlRequest ; import io.gs2.account.result.GetAuthorizationUrlResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetAuthorizationUrlResult result = client . getAuthorizationUrl ( new GetAuthorizationUrlRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) ); String authorizationUrl = result . getAuthorizationUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetAuthorizationUrlResult \u003e asyncResult = null ; yield return client . GetAuthorizationUrl ( new Gs2 . Gs2Account . Request . GetAuthorizationUrlRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var authorizationUrl = result . AuthorizationUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getAuthorizationUrl ( new Gs2Account . GetAuthorizationUrlRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) ); const authorizationUrl = result . getAuthorizationUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_authorization_url ( account . GetAuthorizationUrlRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) ) authorization_url = result . authorization_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_authorization_url ({ namespaceName = \"namespace-0001\" , type = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result authorizationUrl = result.authorizationUrl ; client = gs2 ( 'account' ) api_result_handler = client.get_authorization_url_async ({ namespaceName = \"namespace-0001\" , type = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result authorizationUrl = result.authorizationUrl ; describePlatformIds 외부 플랫폼 계정 ID 목록을 가져오기 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 외부 플랫폼 계정ID 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DescribePlatformIds ( \u0026 account . DescribePlatformIdsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DescribePlatformIdsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e describePlatformIds ( ( new DescribePlatformIdsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DescribePlatformIdsRequest ; import io.gs2.account.result.DescribePlatformIdsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DescribePlatformIdsResult result = client . describePlatformIds ( new DescribePlatformIdsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List PlatformId \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DescribePlatformIdsResult \u003e asyncResult = null ; yield return client . DescribePlatformIds ( new Gs2 . Gs2Account . Request . DescribePlatformIdsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . describePlatformIds ( new Gs2Account . DescribePlatformIdsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . describe_platform_ids ( account . DescribePlatformIdsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.describe_platform_ids ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'account' ) api_result_handler = client.describe_platform_ids_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describePlatformIdsByUserId GS2-Account 사용자ID를 지정하여 외부 플랫폼의 계정ID 목록을 취득 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 외부 플랫폼 계정ID 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DescribePlatformIdsByUserId ( \u0026 account . DescribePlatformIdsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DescribePlatformIdsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e describePlatformIdsByUserId ( ( new DescribePlatformIdsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DescribePlatformIdsByUserIdRequest ; import io.gs2.account.result.DescribePlatformIdsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DescribePlatformIdsByUserIdResult result = client . describePlatformIdsByUserId ( new DescribePlatformIdsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List PlatformId \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DescribePlatformIdsByUserIdResult \u003e asyncResult = null ; yield return client . DescribePlatformIdsByUserId ( new Gs2 . Gs2Account . Request . DescribePlatformIdsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . describePlatformIdsByUserId ( new Gs2Account . DescribePlatformIdsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . describe_platform_ids_by_user_id ( account . DescribePlatformIdsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.describe_platform_ids_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'account' ) api_result_handler = client.describe_platform_ids_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createPlatformId 외부 플랫폼의 계정ID를 신규 생성 외부 플랫폼의 계정ID란, X, Instagram, Facebook 등의 외부 플랫폼에서의 ID를 보유하기 위한 정보입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string  ~ 1024자 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. Result 타입 설명 item PlatformId 생성한 외부 플랫폼의 계정ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreatePlatformId ( \u0026 account . CreatePlatformIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"123456\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreatePlatformIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createPlatformId ( ( new CreatePlatformIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"123456\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreatePlatformIdRequest ; import io.gs2.account.result.CreatePlatformIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreatePlatformIdResult result = client . createPlatformId ( new CreatePlatformIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456\" ) ); PlatformId item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreatePlatformIdResult \u003e asyncResult = null ; yield return client . CreatePlatformId ( new Gs2 . Gs2Account . Request . CreatePlatformIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"123456\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createPlatformId ( new Gs2Account . CreatePlatformIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_platform_id ( account . CreatePlatformIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) . with_user_identifier ( '123456' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_platform_id ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , userIdentifier = \"123456\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_platform_id_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , userIdentifier = \"123456\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createPlatformIdByUserId GS2-Account 사용자ID를 지정하여 외부 플랫폼의 계정ID를 신규 생성 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 GS2-Account 사용자 ID 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string  ~ 1024자 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PlatformId 생성한 외부 플랫폼의 계정ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreatePlatformIdByUserId ( \u0026 account . CreatePlatformIdByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"123456789\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreatePlatformIdByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createPlatformIdByUserId ( ( new CreatePlatformIdByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"123456789\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreatePlatformIdByUserIdRequest ; import io.gs2.account.result.CreatePlatformIdByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreatePlatformIdByUserIdResult result = client . createPlatformIdByUserId ( new CreatePlatformIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456789\" ) . withTimeOffsetToken ( null ) ); PlatformId item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreatePlatformIdByUserIdResult \u003e asyncResult = null ; yield return client . CreatePlatformIdByUserId ( new Gs2 . Gs2Account . Request . CreatePlatformIdByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"123456789\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createPlatformIdByUserId ( new Gs2Account . CreatePlatformIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456789\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_platform_id_by_user_id ( account . CreatePlatformIdByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_type ( 0 ) . with_user_identifier ( '123456789' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_platform_id_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , userIdentifier = \"123456789\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_platform_id_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , userIdentifier = \"123456789\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getPlatformId 외부 플랫폼의 계정ID를 취득 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. Result 타입 설명 item PlatformId 외부 플랫폼의 계정ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetPlatformId ( \u0026 account . GetPlatformIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetPlatformIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getPlatformId ( ( new GetPlatformIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetPlatformIdRequest ; import io.gs2.account.result.GetPlatformIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetPlatformIdResult result = client . getPlatformId ( new GetPlatformIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) ); PlatformId item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetPlatformIdResult \u003e asyncResult = null ; yield return client . GetPlatformId ( new Gs2 . Gs2Account . Request . GetPlatformIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getPlatformId ( new Gs2Account . GetPlatformIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_platform_id ( account . GetPlatformIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_platform_id ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_platform_id_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getPlatformIdByUserId 사용자ID를 지정하여 외부 플랫폼의 계정ID를 취득 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 GS2-Account 사용자 ID 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PlatformId 외부 플랫폼의 계정ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetPlatformIdByUserId ( \u0026 account . GetPlatformIdByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), Type : pointy . Int32 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetPlatformIdByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getPlatformIdByUserId ( ( new GetPlatformIdByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withType ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetPlatformIdByUserIdRequest ; import io.gs2.account.result.GetPlatformIdByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetPlatformIdByUserIdResult result = client . getPlatformIdByUserId ( new GetPlatformIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withTimeOffsetToken ( null ) ); PlatformId item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetPlatformIdByUserIdResult \u003e asyncResult = null ; yield return client . GetPlatformIdByUserId ( new Gs2 . Gs2Account . Request . GetPlatformIdByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithType ( 0 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getPlatformIdByUserId ( new Gs2Account . GetPlatformIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withType ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_platform_id_by_user_id ( account . GetPlatformIdByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_type ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_platform_id_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_platform_id_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , type = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; findPlatformId 외부 플랫폼의 계정ID를 지정하여 GS2-Account의 사용자ID를 취득 네임스페이스 설정에서 “로그인에 사용하는 사용자ID와 데이터 보유에 사용하는 사용자ID를 다르게 설정\"을 활성화한 경우에는 데이터 오너ID를 취득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string  ~ 1024자 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. Result 타입 설명 item PlatformUser 외부 플랫폼의 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . FindPlatformId ( \u0026 account . FindPlatformIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"123456\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\FindPlatformIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e findPlatformId ( ( new FindPlatformIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"123456\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.FindPlatformIdRequest ; import io.gs2.account.result.FindPlatformIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { FindPlatformIdResult result = client . findPlatformId ( new FindPlatformIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456\" ) ); PlatformUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . FindPlatformIdResult \u003e asyncResult = null ; yield return client . FindPlatformId ( new Gs2 . Gs2Account . Request . FindPlatformIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"123456\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . findPlatformId ( new Gs2Account . FindPlatformIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . find_platform_id ( account . FindPlatformIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) . with_user_identifier ( '123456' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.find_platform_id ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , userIdentifier = \"123456\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.find_platform_id_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , userIdentifier = \"123456\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; findPlatformIdByUserId GS2-Account 사용자ID를 지정하여 외부 플랫폼의 계정ID를 취득 네임스페이스 설정에서 “로그인에 사용하는 사용자ID와 데이터 보유에 사용하는 사용자ID를 다르게 설정\"을 활성화한 경우에는 데이터 오너ID를 취득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 GS2-Account 사용자 ID 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string  ~ 1024자 외부 플랫폼 사용자 ID 외부 플랫폼에서의 사용자 고유 식별자(예: 소셜 미디어의 사용자 ID나 이메일 주소)입니다. type (슬롯 번호)과 조합하여 특정 플랫폼 계정을 식별하는 데 사용됩니다. dontResolveDataOwner bool? false 로그인용과 데이터 보유용 사용자ID를 분리하는 경우 데이터 오너ID 해결을 비활성화 네임스페이스 설정에서 “로그인에 사용하는 사용자ID와 데이터 보유에 사용하는 사용자ID를 다르게 설정\"을 활성화한 경우에도 데이터 오너ID를 해결하지 않도록 하려면 true를 설정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PlatformUser 외부 플랫폼의 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . FindPlatformIdByUserId ( \u0026 account . FindPlatformIdByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"123456\" ), DontResolveDataOwner : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\FindPlatformIdByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e findPlatformIdByUserId ( ( new FindPlatformIdByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"123456\" ) -\u003e withDontResolveDataOwner ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.FindPlatformIdByUserIdRequest ; import io.gs2.account.result.FindPlatformIdByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { FindPlatformIdByUserIdResult result = client . findPlatformIdByUserId ( new FindPlatformIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456\" ) . withDontResolveDataOwner ( null ) . withTimeOffsetToken ( null ) ); PlatformUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . FindPlatformIdByUserIdResult \u003e asyncResult = null ; yield return client . FindPlatformIdByUserId ( new Gs2 . Gs2Account . Request . FindPlatformIdByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"123456\" ) . WithDontResolveDataOwner ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . findPlatformIdByUserId ( new Gs2Account . FindPlatformIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456\" ) . withDontResolveDataOwner ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . find_platform_id_by_user_id ( account . FindPlatformIdByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_type ( 0 ) . with_user_identifier ( '123456' ) . with_dont_resolve_data_owner ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.find_platform_id_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , type = 0 , userIdentifier = \"123456\" , dontResolveDataOwner = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.find_platform_id_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , type = 0 , userIdentifier = \"123456\" , dontResolveDataOwner = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deletePlatformId 외부 플랫폼의 계정ID를 삭제 현재 로그인 중인 게임 플레이어 계정에서, 지정된 타입의 외부 플랫폼 계정ID를 삭제합니다. 삭제 후, GS2 계정과 플랫폼상의 ID 간의 연결이 해제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string ~ 1024자 외부 플랫폼의 사용자ID Result 타입 설명 item PlatformId 삭제한 외부 플랫폼의 계정ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeletePlatformId ( \u0026 account . DeletePlatformIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"123456\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeletePlatformIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deletePlatformId ( ( new DeletePlatformIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"123456\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeletePlatformIdRequest ; import io.gs2.account.result.DeletePlatformIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeletePlatformIdResult result = client . deletePlatformId ( new DeletePlatformIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456\" ) ); PlatformId item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeletePlatformIdResult \u003e asyncResult = null ; yield return client . DeletePlatformId ( new Gs2 . Gs2Account . Request . DeletePlatformIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"123456\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deletePlatformId ( new Gs2Account . DeletePlatformIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_platform_id ( account . DeletePlatformIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_type ( 0 ) . with_user_identifier ( '123456' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_platform_id ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , userIdentifier = \"123456\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_platform_id_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , type = 0 , userIdentifier = \"123456\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deletePlatformIdByUserIdentifier 외부 플랫폼의 사용자ID를 지정하여 외부 플랫폼의 계정ID를 삭제 GS2의 사용자ID가 아닌, 플랫폼 측의 사용자 식별자를 사용하여 외부 플랫폼의 계정ID를 검색하여 삭제합니다. 내부의 GS2 사용자ID를 모르는 경우에도, 외부 플랫폼상의 사용자 식별자로 삭제할 수 있습니다. 삭제 후, GS2 계정과 외부 플랫폼상의 사용자ID 간의 연결이 해제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. userIdentifier string ~ 1024자 외부 플랫폼의 사용자ID Result 타입 설명 item PlatformId 삭제한 외부 플랫폼의 계정ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeletePlatformIdByUserIdentifier ( \u0026 account . DeletePlatformIdByUserIdentifierRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), UserIdentifier : pointy . String ( \"123456789\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeletePlatformIdByUserIdentifierRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deletePlatformIdByUserIdentifier ( ( new DeletePlatformIdByUserIdentifierRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) -\u003e withUserIdentifier ( \"123456789\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeletePlatformIdByUserIdentifierRequest ; import io.gs2.account.result.DeletePlatformIdByUserIdentifierResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeletePlatformIdByUserIdentifierResult result = client . deletePlatformIdByUserIdentifier ( new DeletePlatformIdByUserIdentifierRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456789\" ) ); PlatformId item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeletePlatformIdByUserIdentifierResult \u003e asyncResult = null ; yield return client . DeletePlatformIdByUserIdentifier ( new Gs2 . Gs2Account . Request . DeletePlatformIdByUserIdentifierRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ) . WithUserIdentifier ( \"123456789\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deletePlatformIdByUserIdentifier ( new Gs2Account . DeletePlatformIdByUserIdentifierRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withUserIdentifier ( \"123456789\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_platform_id_by_user_identifier ( account . DeletePlatformIdByUserIdentifierRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) . with_user_identifier ( '123456789' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_platform_id_by_user_identifier ({ namespaceName = \"namespace-0001\" , type = 0 , userIdentifier = \"123456789\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_platform_id_by_user_identifier_async ({ namespaceName = \"namespace-0001\" , type = 0 , userIdentifier = \"123456789\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deletePlatformIdByUserId GS2-Account 사용자ID를 지정하여 외부 플랫폼의 계정ID를 삭제 GS2 사용자ID를 사용하여, 지정된 게임 플레이어 계정에서 지정된 타입의 외부 플랫폼 계정ID를 삭제합니다. 삭제 후, GS2 계정과 플랫폼상의 ID 간의 연결이 해제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 GS2-Account 사용자 ID 이 외부 플랫폼 계정 ID에 연결된 GS2-Account의 사용자 ID입니다. 외부 플랫폼의 ID와 GS2-Account의 익명 계정을 대응시키는 데 사용됩니다. type int  0 ~ 1024 슬롯 번호 0에서 1024까지의 범위로 지정되며, 외부 플랫폼의 종류를 식별하는 데 사용합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PlatformId 삭제한 외부 플랫폼의 계정ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeletePlatformIdByUserId ( \u0026 account . DeletePlatformIdByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Type : pointy . Int32 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeletePlatformIdByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deletePlatformIdByUserId ( ( new DeletePlatformIdByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withType ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeletePlatformIdByUserIdRequest ; import io.gs2.account.result.DeletePlatformIdByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeletePlatformIdByUserIdResult result = client . deletePlatformIdByUserId ( new DeletePlatformIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withType ( 0 ) . withTimeOffsetToken ( null ) ); PlatformId item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeletePlatformIdByUserIdResult \u003e asyncResult = null ; yield return client . DeletePlatformIdByUserId ( new Gs2 . Gs2Account . Request . DeletePlatformIdByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithType ( 0 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deletePlatformIdByUserId ( new Gs2Account . DeletePlatformIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withType ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_platform_id_by_user_id ( account . DeletePlatformIdByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_type ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_platform_id_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , type = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_platform_id_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , type = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getDataOwnerByUserId 데이터 오너를 취득 지정된 사용자ID에 연결된 데이터 오너의 정보를 취득하기 위해 사용됩니다. 이 액션은 지정된 네임스페이스 내 특정 계정에 연결된 데이터 오너의 상세 정보를 반환합니다. 데이터 오너 정보에는 데이터 오너ID, 연결된 사용자ID, 그 외 관련 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  UUID ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataOwner 데이터 오너 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetDataOwnerByUserId ( \u0026 account . GetDataOwnerByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetDataOwnerByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getDataOwnerByUserId ( ( new GetDataOwnerByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetDataOwnerByUserIdRequest ; import io.gs2.account.result.GetDataOwnerByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetDataOwnerByUserIdResult result = client . getDataOwnerByUserId ( new GetDataOwnerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withTimeOffsetToken ( null ) ); DataOwner item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetDataOwnerByUserIdResult \u003e asyncResult = null ; yield return client . GetDataOwnerByUserId ( new Gs2 . Gs2Account . Request . GetDataOwnerByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getDataOwnerByUserId ( new Gs2Account . GetDataOwnerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_data_owner_by_user_id ( account . GetDataOwnerByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_data_owner_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_data_owner_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateDataOwnerByUserId 데이터 오너ID를 임의의 값으로 갱신 지정된 사용자ID에 연결된 데이터 오너 이름을 갱신합니다. 데이터 오너는, 네임스페이스 설정에서 「로그인에 사용하는 사용자ID와 데이터 보존에 사용하는 사용자ID를 다르게 지정」이 활성화되어 있는 경우, 로그인용 사용자ID와 데이터 보존용 사용자ID의 매핑을 관리하기 위해 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  UUID ~ 128자 사용자ID dataOwnerName string  UUID ~ 36자 데이터 오너 ID 데이터 오너의 고유 식별자로서 기능합니다. 데이터 오너 ID는 데이터의 실제 소유자를 나타내며, 사용자 ID와는 다를 수 있습니다. 이 ID는 시스템에 의해 자동으로 생성되며, 각 데이터 오너에 대해 고유합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataOwner 데이터 오너 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateDataOwnerByUserId ( \u0026 account . UpdateDataOwnerByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), DataOwnerName : pointy . String ( \"data-owner-1001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateDataOwnerByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateDataOwnerByUserId ( ( new UpdateDataOwnerByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withDataOwnerName ( \"data-owner-1001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateDataOwnerByUserIdRequest ; import io.gs2.account.result.UpdateDataOwnerByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateDataOwnerByUserIdResult result = client . updateDataOwnerByUserId ( new UpdateDataOwnerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withDataOwnerName ( \"data-owner-1001\" ) . withTimeOffsetToken ( null ) ); DataOwner item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateDataOwnerByUserIdResult \u003e asyncResult = null ; yield return client . UpdateDataOwnerByUserId ( new Gs2 . Gs2Account . Request . UpdateDataOwnerByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithDataOwnerName ( \"data-owner-1001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateDataOwnerByUserId ( new Gs2Account . UpdateDataOwnerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withDataOwnerName ( \"data-owner-1001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_data_owner_by_user_id ( account . UpdateDataOwnerByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_data_owner_name ( 'data-owner-1001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_data_owner_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , dataOwnerName = \"data-owner-1001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_data_owner_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , dataOwnerName = \"data-owner-1001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteDataOwnerByUserId 데이터 오너를 삭제 특정 사용자ID에 연결된 데이터 오너의 정보를 삭제하기 위해 사용됩니다. 이 액션은 지정된 네임스페이스 내 계정에 연결된 데이터 오너를 시스템에서 완전히 삭제합니다. 사용자ID와 데이터 오너ID의 연결이 사라지며, GS2 가 관리하는 사용자 데이터에 사용자ID가 포함되어 있지 않은 한 누구의 데이터인지 알 수 없는 상태가 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  UUID ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataOwner 삭제한 데이터 오너 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeleteDataOwnerByUserId ( \u0026 account . DeleteDataOwnerByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"userId-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeleteDataOwnerByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deleteDataOwnerByUserId ( ( new DeleteDataOwnerByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"userId-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeleteDataOwnerByUserIdRequest ; import io.gs2.account.result.DeleteDataOwnerByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeleteDataOwnerByUserIdResult result = client . deleteDataOwnerByUserId ( new DeleteDataOwnerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withTimeOffsetToken ( null ) ); DataOwner item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeleteDataOwnerByUserIdResult \u003e asyncResult = null ; yield return client . DeleteDataOwnerByUserId ( new Gs2 . Gs2Account . Request . DeleteDataOwnerByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"userId-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deleteDataOwnerByUserId ( new Gs2Account . DeleteDataOwnerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"userId-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_data_owner_by_user_id ( account . DeleteDataOwnerByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'userId-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_data_owner_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_data_owner_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"userId-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeTakeOverTypeModels 인계 정보 타입 모델의 목록을 취득 지정된 네임스페이스에서 현재 활성화되어 있는 모든 인계 정보 타입 모델을 취득합니다. 인계 정보 타입 모델은 이메일/비밀번호 기반이나 OpenID Connect 기반의 인계 등, 이용 가능한 계정 인계 방법의 종류를 정의합니다. 각 타입 모델에는 ID 프로바이더의 OpenID Connect 설정 등이 포함됩니다. 마스터 버전과는 달리, 활성화(공개)된 모델만을 반환하며 페이지네이션은 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 인계 정보 타입 모델의 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DescribeTakeOverTypeModels ( \u0026 account . DescribeTakeOverTypeModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DescribeTakeOverTypeModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e describeTakeOverTypeModels ( ( new DescribeTakeOverTypeModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DescribeTakeOverTypeModelsRequest ; import io.gs2.account.result.DescribeTakeOverTypeModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DescribeTakeOverTypeModelsResult result = client . describeTakeOverTypeModels ( new DescribeTakeOverTypeModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List TakeOverTypeModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DescribeTakeOverTypeModelsResult \u003e asyncResult = null ; yield return client . DescribeTakeOverTypeModels ( new Gs2 . Gs2Account . Request . DescribeTakeOverTypeModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . describeTakeOverTypeModels ( new Gs2Account . DescribeTakeOverTypeModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . describe_take_over_type_models ( account . DescribeTakeOverTypeModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.describe_take_over_type_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'account' ) api_result_handler = client.describe_take_over_type_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getTakeOverTypeModel 인계 정보 타입 모델을 취득 지정된 네임스페이스에서 지정된 타입의, 현재 유효한 인계 정보 타입 모델을 취득합니다. 타입 모델에는 이 인계 타입에 연결된 ID 프로바이더의 OpenID Connect 설정 및 기타 설정이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. Result 타입 설명 item TakeOverTypeModel 인계 정보 타입 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetTakeOverTypeModel ( \u0026 account . GetTakeOverTypeModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetTakeOverTypeModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getTakeOverTypeModel ( ( new GetTakeOverTypeModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetTakeOverTypeModelRequest ; import io.gs2.account.result.GetTakeOverTypeModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetTakeOverTypeModelResult result = client . getTakeOverTypeModel ( new GetTakeOverTypeModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) ); TakeOverTypeModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetTakeOverTypeModelResult \u003e asyncResult = null ; yield return client . GetTakeOverTypeModel ( new Gs2 . Gs2Account . Request . GetTakeOverTypeModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getTakeOverTypeModel ( new Gs2Account . GetTakeOverTypeModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_take_over_type_model ( account . GetTakeOverTypeModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_take_over_type_model ({ namespaceName = \"namespace-0001\" , type = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_take_over_type_model_async ({ namespaceName = \"namespace-0001\" , type = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 인계 정보 타입 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재의 인계 정보 타입 모델 마스터 데이터를 활성화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 가져오기에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentModelMaster 활성화 가능한 인계 정보 타입 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 account . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.ExportMasterRequest ; import io.gs2.account.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Account . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Account . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . export_master ( account . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentModelMaster 현재 활성화된 인계 정보 타입 모델의 마스터 데이터를 취득 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 인계 정보 타입 모델의 마스터 데이터를 취득합니다. 이는 편집 가능한 마스터 데이터와는 달리, 실제로 운영 환경에서 사용되고 있는 구성을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentModelMaster 현재 활성화된 인계 정보 타입 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetCurrentModelMaster ( \u0026 account . GetCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getCurrentModelMaster ( ( new GetCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetCurrentModelMasterRequest ; import io.gs2.account.result.GetCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetCurrentModelMasterResult result = client . getCurrentModelMaster ( new GetCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetCurrentModelMasterResult \u003e asyncResult = null ; yield return client . GetCurrentModelMaster ( new Gs2 . Gs2Account . Request . GetCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getCurrentModelMaster ( new Gs2Account . GetCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_current_model_master ( account . GetCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_current_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_current_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentModelMaster 현재 활성화된 인계 정보 타입 모델의 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우에는 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentModelMaster를 preUpload 모드로, 업로드에 사용한 토큰을 전달하여 실행하고 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentModelMaster ( \u0026 account . PreUpdateCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\PreUpdateCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentModelMaster ( ( new PreUpdateCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.PreUpdateCurrentModelMasterRequest ; import io.gs2.account.result.PreUpdateCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { PreUpdateCurrentModelMasterResult result = client . preUpdateCurrentModelMaster ( new PreUpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . PreUpdateCurrentModelMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentModelMaster ( new Gs2 . Gs2Account . Request . PreUpdateCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . preUpdateCurrentModelMaster ( new Gs2Account . PreUpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . pre_update_current_model_master ( account . PreUpdateCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.pre_update_current_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'account' ) api_result_handler = client.pre_update_current_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentModelMaster 현재 활성화된 인계 정보 타입 모델의 마스터 데이터를 갱신 지정된 네임스페이스의 인계 정보 타입 모델의 마스터 데이터를 갱신하고 활성화(공개)합니다. ‘direct’ 모드(인라인 마스터 데이터용)와 ‘preUpload’ 모드(사전에 업로드된 마스터 데이터용)의 두 가지 모드를 지원합니다. 1MB를 초과하는 마스터 데이터의 경우에는 3단계의 갱신 흐름(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))을 사용하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentModelMaster 갱신된 현재 활성화된 인계 정보 타입 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentModelMaster ( \u0026 account . UpdateCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2024-07-30\\\", \\\"takeOverTypeModels\\\": [{\\\"type\\\": 0, \\\"metadata\\\": \\\"Google\\\", \\\"openIdConnectSetting\\\": {\\\"configurationPath\\\": \\\"https://accounts.google.com/.well-known/openid-configuration\\\", \\\"clientId\\\": \\\"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\\\", \\\"clientSecret\\\": \\\"secret\\\"}}, {\\\"type\\\": 1, \\\"metadata\\\": \\\"Apple\\\", \\\"openIdConnectSetting\\\": {\\\"configurationPath\\\": \\\"https://appleid.apple.com/.well-known/openid-configuration\\\", \\\"clientId\\\": \\\"io.gs2.sample.auth\\\", \\\"appleTeamId\\\": \\\"9LX9LA85H8\\\", \\\"appleKeyId\\\": \\\"P937MLY6Z7\\\", \\\"applePrivateKeyPem\\\": \\\"-----BEGIN PRIVATE KEY-----\\\\\\\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\\\\\n-----END PRIVATE KEY-----\\\"}}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateCurrentModelMaster ( ( new UpdateCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2024-07-30 \\\" , \\\" takeOverTypeModels \\\" : [{ \\\" type \\\" : 0, \\\" metadata \\\" : \\\" Google \\\" , \\\" openIdConnectSetting \\\" : { \\\" configurationPath \\\" : \\\" https://accounts.google.com/.well-known/openid-configuration \\\" , \\\" clientId \\\" : \\\" 695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com \\\" , \\\" clientSecret \\\" : \\\" secret \\\" }}, { \\\" type \\\" : 1, \\\" metadata \\\" : \\\" Apple \\\" , \\\" openIdConnectSetting \\\" : { \\\" configurationPath \\\" : \\\" https://appleid.apple.com/.well-known/openid-configuration \\\" , \\\" clientId \\\" : \\\" io.gs2.sample.auth \\\" , \\\" appleTeamId \\\" : \\\" 9LX9LA85H8 \\\" , \\\" appleKeyId \\\" : \\\" P937MLY6Z7 \\\" , \\\" applePrivateKeyPem \\\" : \\\" -----BEGIN PRIVATE KEY----- \\\\\\\\ nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \\\\\\\\ n-----END PRIVATE KEY----- \\\" }}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateCurrentModelMasterRequest ; import io.gs2.account.result.UpdateCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateCurrentModelMasterResult result = client . updateCurrentModelMaster ( new UpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-07-30\\\", \\\"takeOverTypeModels\\\": [{\\\"type\\\": 0, \\\"metadata\\\": \\\"Google\\\", \\\"openIdConnectSetting\\\": {\\\"configurationPath\\\": \\\"https://accounts.google.com/.well-known/openid-configuration\\\", \\\"clientId\\\": \\\"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\\\", \\\"clientSecret\\\": \\\"secret\\\"}}, {\\\"type\\\": 1, \\\"metadata\\\": \\\"Apple\\\", \\\"openIdConnectSetting\\\": {\\\"configurationPath\\\": \\\"https://appleid.apple.com/.well-known/openid-configuration\\\", \\\"clientId\\\": \\\"io.gs2.sample.auth\\\", \\\"appleTeamId\\\": \\\"9LX9LA85H8\\\", \\\"appleKeyId\\\": \\\"P937MLY6Z7\\\", \\\"applePrivateKeyPem\\\": \\\"-----BEGIN PRIVATE KEY-----\\\\\\\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\\\\\n-----END PRIVATE KEY-----\\\"}}]}\" ) . withUploadToken ( null ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateCurrentModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentModelMaster ( new Gs2 . Gs2Account . Request . UpdateCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2024-07-30\\\", \\\"takeOverTypeModels\\\": [{\\\"type\\\": 0, \\\"metadata\\\": \\\"Google\\\", \\\"openIdConnectSetting\\\": {\\\"configurationPath\\\": \\\"https://accounts.google.com/.well-known/openid-configuration\\\", \\\"clientId\\\": \\\"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\\\", \\\"clientSecret\\\": \\\"secret\\\"}}, {\\\"type\\\": 1, \\\"metadata\\\": \\\"Apple\\\", \\\"openIdConnectSetting\\\": {\\\"configurationPath\\\": \\\"https://appleid.apple.com/.well-known/openid-configuration\\\", \\\"clientId\\\": \\\"io.gs2.sample.auth\\\", \\\"appleTeamId\\\": \\\"9LX9LA85H8\\\", \\\"appleKeyId\\\": \\\"P937MLY6Z7\\\", \\\"applePrivateKeyPem\\\": \\\"-----BEGIN PRIVATE KEY-----\\\\\\\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\\\\\n-----END PRIVATE KEY-----\\\"}}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateCurrentModelMaster ( new Gs2Account . UpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-07-30\\\", \\\"takeOverTypeModels\\\": [{\\\"type\\\": 0, \\\"metadata\\\": \\\"Google\\\", \\\"openIdConnectSetting\\\": {\\\"configurationPath\\\": \\\"https://accounts.google.com/.well-known/openid-configuration\\\", \\\"clientId\\\": \\\"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\\\", \\\"clientSecret\\\": \\\"secret\\\"}}, {\\\"type\\\": 1, \\\"metadata\\\": \\\"Apple\\\", \\\"openIdConnectSetting\\\": {\\\"configurationPath\\\": \\\"https://appleid.apple.com/.well-known/openid-configuration\\\", \\\"clientId\\\": \\\"io.gs2.sample.auth\\\", \\\"appleTeamId\\\": \\\"9LX9LA85H8\\\", \\\"appleKeyId\\\": \\\"P937MLY6Z7\\\", \\\"applePrivateKeyPem\\\": \\\"-----BEGIN PRIVATE KEY-----\\\\\\\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\\\\\n-----END PRIVATE KEY-----\\\"}}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_current_model_master ( account . UpdateCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2024-07-30\", \"takeOverTypeModels\": [{\"type\": 0, \"metadata\": \"Google\", \"openIdConnectSetting\": {\"configurationPath\": \"https://accounts.google.com/.well-known/openid-configuration\", \"clientId\": \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\", \"clientSecret\": \"secret\"}}, {\"type\": 1, \"metadata\": \"Apple\", \"openIdConnectSetting\": {\"configurationPath\": \"https://appleid.apple.com/.well-known/openid-configuration\", \"clientId\": \"io.gs2.sample.auth\", \"appleTeamId\": \"9LX9LA85H8\", \"appleKeyId\": \"P937MLY6Z7\", \"applePrivateKeyPem\": \"-----BEGIN PRIVATE KEY----- \\\\\\\\ nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \\\\\\\\ n-----END PRIVATE KEY-----\"}}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_current_model_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-07-30 \\\" , \\\" takeOverTypeModels \\\" : [{ \\\" type \\\" : 0, \\\" metadata \\\" : \\\" Google \\\" , \\\" openIdConnectSetting \\\" : { \\\" configurationPath \\\" : \\\" https://accounts.google.com/.well-known/openid-configuration \\\" , \\\" clientId \\\" : \\\" 695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com \\\" , \\\" clientSecret \\\" : \\\" secret \\\" }}, { \\\" type \\\" : 1, \\\" metadata \\\" : \\\" Apple \\\" , \\\" openIdConnectSetting \\\" : { \\\" configurationPath \\\" : \\\" https://appleid.apple.com/.well-known/openid-configuration \\\" , \\\" clientId \\\" : \\\" io.gs2.sample.auth \\\" , \\\" appleTeamId \\\" : \\\" 9LX9LA85H8 \\\" , \\\" appleKeyId \\\" : \\\" P937MLY6Z7 \\\" , \\\" applePrivateKeyPem \\\" : \\\" -----BEGIN PRIVATE KEY----- \\\\\\\\ nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \\\\\\\\ n-----END PRIVATE KEY----- \\\" }}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_current_model_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-07-30 \\\" , \\\" takeOverTypeModels \\\" : [{ \\\" type \\\" : 0, \\\" metadata \\\" : \\\" Google \\\" , \\\" openIdConnectSetting \\\" : { \\\" configurationPath \\\" : \\\" https://accounts.google.com/.well-known/openid-configuration \\\" , \\\" clientId \\\" : \\\" 695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com \\\" , \\\" clientSecret \\\" : \\\" secret \\\" }}, { \\\" type \\\" : 1, \\\" metadata \\\" : \\\" Apple \\\" , \\\" openIdConnectSetting \\\" : { \\\" configurationPath \\\" : \\\" https://appleid.apple.com/.well-known/openid-configuration \\\" , \\\" clientId \\\" : \\\" io.gs2.sample.auth \\\" , \\\" appleTeamId \\\" : \\\" 9LX9LA85H8 \\\" , \\\" appleKeyId \\\" : \\\" P937MLY6Z7 \\\" , \\\" applePrivateKeyPem \\\" : \\\" -----BEGIN PRIVATE KEY----- \\\\\\\\ nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \\\\\\\\ n-----END PRIVATE KEY----- \\\" }}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentModelMasterFromGitHub 현재 활성화된 인계 정보 타입 모델의 마스터 데이터를 GitHub에서 갱신 GitHub 리포지토리에서 직접 마스터 데이터를 취득하여 갱신·활성화(공개)합니다. 체크아웃 설정에는 사용할 리포지토리, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고 직접 배포하는 경우에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentModelMaster 갱신된 현재 활성화된 인계 정보 타입 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentModelMasterFromGitHub ( \u0026 account . UpdateCurrentModelMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 account . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateCurrentModelMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateCurrentModelMasterFromGitHub ( ( new UpdateCurrentModelMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateCurrentModelMasterFromGitHubRequest ; import io.gs2.account.result.UpdateCurrentModelMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateCurrentModelMasterFromGitHubResult result = client . updateCurrentModelMasterFromGitHub ( new UpdateCurrentModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateCurrentModelMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentModelMasterFromGitHub ( new Gs2 . Gs2Account . Request . UpdateCurrentModelMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Account . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateCurrentModelMasterFromGitHub ( new Gs2Account . UpdateCurrentModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Account . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_current_model_master_from_git_hub ( account . UpdateCurrentModelMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( account . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_current_model_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_current_model_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeTakeOverTypeModelMasters 인계 정보 타입 모델 마스터의 목록을 취득 지정된 네임스페이스의 인계 정보 타입 모델 마스터의 페이지네이션이 적용된 목록을 취득합니다. 인계 정보 타입 모델 마스터는 이용 가능한 계정 인계 방법의 종류를 정의하는 인계 정보 타입 모델의 편집 가능한 버전입니다. 마스터 데이터에 대한 변경은 현재 모델 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 인계 정보 타입 모델 마스터의 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DescribeTakeOverTypeModelMasters ( \u0026 account . DescribeTakeOverTypeModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DescribeTakeOverTypeModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e describeTakeOverTypeModelMasters ( ( new DescribeTakeOverTypeModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DescribeTakeOverTypeModelMastersRequest ; import io.gs2.account.result.DescribeTakeOverTypeModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DescribeTakeOverTypeModelMastersResult result = client . describeTakeOverTypeModelMasters ( new DescribeTakeOverTypeModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List TakeOverTypeModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DescribeTakeOverTypeModelMastersResult \u003e asyncResult = null ; yield return client . DescribeTakeOverTypeModelMasters ( new Gs2 . Gs2Account . Request . DescribeTakeOverTypeModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . describeTakeOverTypeModelMasters ( new Gs2Account . DescribeTakeOverTypeModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . describe_take_over_type_model_masters ( account . DescribeTakeOverTypeModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.describe_take_over_type_model_masters ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'account' ) api_result_handler = client.describe_take_over_type_model_masters_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createTakeOverTypeModelMaster 인계 정보 타입 모델 마스터를 신규 생성 계정 인계 방법의 종류를 정의하는 새로운 인계 정보 타입 모델 마스터를 생성합니다. 타입 슬롯(숫자), 설명, 메타데이터, ID 프로바이더의 OpenID Connect 설정을 구성할 수 있습니다. OpenID Connect 설정에는 ID 프로바이더 연동에 필요한 클라이언트ID, 클라이언트 시크릿, 이슈어, 기타 OIDC 설정이 포함됩니다. 변경 사항은 현재 모델 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. openIdConnectSetting OpenIdConnectSetting  OpenID Connect 설정 OpenID Connect 준수 Identity Provider(IdP)와 연동하기 위한 설정입니다. 디스커버리 URL, 클라이언트 인증 정보, Apple Sign In 파라미터 등 플랫폼별 설정이 포함됩니다. Result 타입 설명 item TakeOverTypeModelMaster 생성한 인계 정보 타입 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . CreateTakeOverTypeModelMaster ( \u0026 account . CreateTakeOverTypeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), Description : nil , Metadata : pointy . String ( \"Google\" ), OpenIdConnectSetting : \u0026 account . OpenIdConnectSetting { ConfigurationPath : pointy . String ( \"https://accounts.google.com/.well-known/openid-configuration\" ), ClientId : pointy . String ( \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" ), ClientSecret : pointy . String ( \"secret\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\CreateTakeOverTypeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e createTakeOverTypeModelMaster ( ( new CreateTakeOverTypeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) -\u003e withDescription ( null ) -\u003e withMetadata ( \"Google\" ) -\u003e withOpenIdConnectSetting (( new \\Gs2\\Account\\Model\\OpenIdConnectSetting ()) -\u003e withConfigurationPath ( \"https://accounts.google.com/.well-known/openid-configuration\" ) -\u003e withClientId ( \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" ) -\u003e withClientSecret ( \"secret\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.CreateTakeOverTypeModelMasterRequest ; import io.gs2.account.result.CreateTakeOverTypeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { CreateTakeOverTypeModelMasterResult result = client . createTakeOverTypeModelMaster ( new CreateTakeOverTypeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withDescription ( null ) . withMetadata ( \"Google\" ) . withOpenIdConnectSetting ( new io . gs2 . account . model . OpenIdConnectSetting () . withConfigurationPath ( \"https://accounts.google.com/.well-known/openid-configuration\" ) . withClientId ( \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" ) . withClientSecret ( \"secret\" )) ); TakeOverTypeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . CreateTakeOverTypeModelMasterResult \u003e asyncResult = null ; yield return client . CreateTakeOverTypeModelMaster ( new Gs2 . Gs2Account . Request . CreateTakeOverTypeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ) . WithDescription ( null ) . WithMetadata ( \"Google\" ) . WithOpenIdConnectSetting ( new Gs2 . Gs2Account . Model . OpenIdConnectSetting () . WithConfigurationPath ( \"https://accounts.google.com/.well-known/openid-configuration\" ) . WithClientId ( \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" ) . WithClientSecret ( \"secret\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . createTakeOverTypeModelMaster ( new Gs2Account . CreateTakeOverTypeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withDescription ( null ) . withMetadata ( \"Google\" ) . withOpenIdConnectSetting ( new Gs2Account . model . OpenIdConnectSetting () . withConfigurationPath ( \"https://accounts.google.com/.well-known/openid-configuration\" ) . withClientId ( \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" ) . withClientSecret ( \"secret\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . create_take_over_type_model_master ( account . CreateTakeOverTypeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) . with_description ( None ) . with_metadata ( 'Google' ) . with_open_id_connect_setting ( account . OpenIdConnectSetting () . with_configuration_path ( 'https://accounts.google.com/.well-known/openid-configuration' ) . with_client_id ( '695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com' ) . with_client_secret ( 'secret' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.create_take_over_type_model_master ({ namespaceName = \"namespace-0001\" , type = 0 , description = nil , metadata = \"Google\" , openIdConnectSetting = { configurationPath = \"https://accounts.google.com/.well-known/openid-configuration\" , clientId = \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" , clientSecret = \"secret\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.create_take_over_type_model_master_async ({ namespaceName = \"namespace-0001\" , type = 0 , description = nil , metadata = \"Google\" , openIdConnectSetting = { configurationPath = \"https://accounts.google.com/.well-known/openid-configuration\" , clientId = \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" , clientSecret = \"secret\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getTakeOverTypeModelMaster 인계 정보 타입 모델 마스터를 취득 지정된 네임스페이스에서 타입을 지정하여 특정 인계 정보 타입 모델 마스터를 취득합니다. 취득되는 정보에는 타입 슬롯, 설명, 메타데이터, OpenID Connect 설정이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. Result 타입 설명 item TakeOverTypeModelMaster 인계 정보 타입 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . GetTakeOverTypeModelMaster ( \u0026 account . GetTakeOverTypeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\GetTakeOverTypeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e getTakeOverTypeModelMaster ( ( new GetTakeOverTypeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.GetTakeOverTypeModelMasterRequest ; import io.gs2.account.result.GetTakeOverTypeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { GetTakeOverTypeModelMasterResult result = client . getTakeOverTypeModelMaster ( new GetTakeOverTypeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) ); TakeOverTypeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . GetTakeOverTypeModelMasterResult \u003e asyncResult = null ; yield return client . GetTakeOverTypeModelMaster ( new Gs2 . Gs2Account . Request . GetTakeOverTypeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . getTakeOverTypeModelMaster ( new Gs2Account . GetTakeOverTypeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . get_take_over_type_model_master ( account . GetTakeOverTypeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.get_take_over_type_model_master ({ namespaceName = \"namespace-0001\" , type = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.get_take_over_type_model_master_async ({ namespaceName = \"namespace-0001\" , type = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateTakeOverTypeModelMaster 인계 정보 타입 모델 마스터 데이터를 갱신 지정된 인계 정보 타입 모델 마스터를 갱신합니다. 설명, 메타데이터, ID 프로바이더의 OpenID Connect 설정을 변경할 수 있습니다. 변경 사항은 현재 모델 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. openIdConnectSetting OpenIdConnectSetting  OpenID Connect 설정 OpenID Connect 준수 Identity Provider(IdP)와 연동하기 위한 설정입니다. 디스커버리 URL, 클라이언트 인증 정보, Apple Sign In 파라미터 등 플랫폼별 설정이 포함됩니다. Result 타입 설명 item TakeOverTypeModelMaster 갱신한 인계 정보 타입 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . UpdateTakeOverTypeModelMaster ( \u0026 account . UpdateTakeOverTypeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"Microsoft\" ), OpenIdConnectSetting : \u0026 account . OpenIdConnectSetting { ConfigurationPath : pointy . String ( \"https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration\" ), ClientId : pointy . String ( \"io.gs2.sample.auth\" ), ClientSecret : pointy . String ( \"secret\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\UpdateTakeOverTypeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e updateTakeOverTypeModelMaster ( ( new UpdateTakeOverTypeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"Microsoft\" ) -\u003e withOpenIdConnectSetting (( new \\Gs2\\Account\\Model\\OpenIdConnectSetting ()) -\u003e withConfigurationPath ( \"https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration\" ) -\u003e withClientId ( \"io.gs2.sample.auth\" ) -\u003e withClientSecret ( \"secret\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.UpdateTakeOverTypeModelMasterRequest ; import io.gs2.account.result.UpdateTakeOverTypeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { UpdateTakeOverTypeModelMasterResult result = client . updateTakeOverTypeModelMaster ( new UpdateTakeOverTypeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withDescription ( \"description1\" ) . withMetadata ( \"Microsoft\" ) . withOpenIdConnectSetting ( new io . gs2 . account . model . OpenIdConnectSetting () . withConfigurationPath ( \"https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration\" ) . withClientId ( \"io.gs2.sample.auth\" ) . withClientSecret ( \"secret\" )) ); TakeOverTypeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . UpdateTakeOverTypeModelMasterResult \u003e asyncResult = null ; yield return client . UpdateTakeOverTypeModelMaster ( new Gs2 . Gs2Account . Request . UpdateTakeOverTypeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ) . WithDescription ( \"description1\" ) . WithMetadata ( \"Microsoft\" ) . WithOpenIdConnectSetting ( new Gs2 . Gs2Account . Model . OpenIdConnectSetting () . WithConfigurationPath ( \"https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration\" ) . WithClientId ( \"io.gs2.sample.auth\" ) . WithClientSecret ( \"secret\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . updateTakeOverTypeModelMaster ( new Gs2Account . UpdateTakeOverTypeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) . withDescription ( \"description1\" ) . withMetadata ( \"Microsoft\" ) . withOpenIdConnectSetting ( new Gs2Account . model . OpenIdConnectSetting () . withConfigurationPath ( \"https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration\" ) . withClientId ( \"io.gs2.sample.auth\" ) . withClientSecret ( \"secret\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . update_take_over_type_model_master ( account . UpdateTakeOverTypeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) . with_description ( 'description1' ) . with_metadata ( 'Microsoft' ) . with_open_id_connect_setting ( account . OpenIdConnectSetting () . with_configuration_path ( 'https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration' ) . with_client_id ( 'io.gs2.sample.auth' ) . with_client_secret ( 'secret' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.update_take_over_type_model_master ({ namespaceName = \"namespace-0001\" , type = 0 , description = \"description1\" , metadata = \"Microsoft\" , openIdConnectSetting = { configurationPath = \"https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration\" , clientId = \"io.gs2.sample.auth\" , clientSecret = \"secret\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.update_take_over_type_model_master_async ({ namespaceName = \"namespace-0001\" , type = 0 , description = \"description1\" , metadata = \"Microsoft\" , openIdConnectSetting = { configurationPath = \"https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration\" , clientId = \"io.gs2.sample.auth\" , clientSecret = \"secret\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteTakeOverTypeModelMaster 인계 정보 타입 모델 마스터 데이터를 삭제 지정된 네임스페이스에서 지정된 인계 정보 타입 모델 마스터를 삭제합니다. 삭제 후, 다음 마스터 데이터 활성화 이후부터 이 인계 타입은 이용할 수 없게 됩니다. 이 작업은 마스터 데이터에만 영향을 미치며, 마스터 데이터가 재활성화될 때까지 현재 유효한 모델은 변경되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. type int  0 ~ 1024 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. Result 타입 설명 item TakeOverTypeModelMaster 삭제한 인계 정보 타입 모델 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/account\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := account . Gs2AccountRestClient { Session : \u0026 session , } result , err := client . DeleteTakeOverTypeModelMaster ( \u0026 account . DeleteTakeOverTypeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Type : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Account\\Gs2AccountRestClient ; use Gs2\\Account\\Request\\DeleteTakeOverTypeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AccountRestClient ( $session ); try { $result = $client -\u003e deleteTakeOverTypeModelMaster ( ( new DeleteTakeOverTypeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withType ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.account.rest.Gs2AccountRestClient ; import io.gs2.account.request.DeleteTakeOverTypeModelMasterRequest ; import io.gs2.account.result.DeleteTakeOverTypeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AccountRestClient client = new Gs2AccountRestClient ( session ); try { DeleteTakeOverTypeModelMasterResult result = client . deleteTakeOverTypeModelMaster ( new DeleteTakeOverTypeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) ); TakeOverTypeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AccountRestClient ( session ); AsyncResult Gs2 . Gs2Account . Result . DeleteTakeOverTypeModelMasterResult \u003e asyncResult = null ; yield return client . DeleteTakeOverTypeModelMaster ( new Gs2 . Gs2Account . Request . DeleteTakeOverTypeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithType ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Account from '@/gs2/account' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Account . Gs2AccountRestClient ( session ); try { const result = await client . deleteTakeOverTypeModelMaster ( new Gs2Account . DeleteTakeOverTypeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withType ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import account session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = account . Gs2AccountRestClient ( session ) try : result = client . delete_take_over_type_model_master ( account . DeleteTakeOverTypeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_type ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'account' ) api_result = client.delete_take_over_type_model_master ({ namespaceName = \"namespace-0001\" , type = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'account' ) api_result_handler = client.delete_take_over_type_model_master_async ({ namespaceName = \"namespace-0001\" , type = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Account SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Account SDK API 레퍼런스","url":"/ko/api_reference/account/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 광고 시청 보상 부여 시 실행되는 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 아토믹 커밋, 비동기 처리 등의 옵션이 포함됩니다. admob AdMob AdMob 설정 AdMob에 관련된 광고 설정 및 파라미터를 관리합니다. unityAd UnityAd Unity Ads 설정 Unity Ads에 관련된 광고 설정 및 파라미터를 관리합니다. appLovinMaxes List 0 ~ 10 items AppLovin MAX 설정 AppLovin MAX에 관련된 광고 설정 및 파라미터를 관리합니다. acquirePointScript ScriptSetting 포인트 획득 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquirePoint consumePointScript ScriptSetting 포인트 소비 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - consumePoint changePointNotification NotificationSetting  광고 시청으로 포인트가 변동되었을 때의 푸시 알림 광고 시청에 의한 포인트 변동 시의 푸시 알림 설정입니다. 포인트가 변동되었을 때 게임 클라이언트에 알리기 위한 설정을 보유합니다. 이 설정을 하지 않으면, 획득한 포인트가 즉시 게임에 반영되지 않습니다. logSetting LogSetting 로그 출력 설정 로그 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 GS2-Log의 네임스페이스 정보를 보유합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Point 광고를 시청함으로써 획득한 포인트 플레이어가 광고 시청을 통해 획득한 포인트의 합계를 나타내는 모델입니다. 플레이어는 광고를 시청할 때마다 포인트를 획득하며, 이 포인트는 보상 교환이나 게임 내 특전 구매 등에 사용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 pointId string ※ ~ 1024자 광고 리워드 포인트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID point long 0 0 ~ 9223372036854775805 포인트 보유 수 사용자가 보유하고 있는 포인트 수를 나타냅니다. 이 수치는 사용자가 광고를 시청함으로써 증가하고, 보상이나 특전과 교환함으로써 감소합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 AdMob AdMob 광고 플랫폼에 관련된 설정 허용된 광고 유닛 ID 목록을 보유하며, 이를 기반으로 AdMob으로부터의 시청 완료 Webhook을 검증합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 allowAdUnitIds List  1 ~ 10 items 허용할 광고 유닛 ID 목록 AdMob으로부터의 광고 시청 완료 콜백에 포함된 광고 유닛 ID를 검증하기 위해 사용됩니다. 목록에 포함된 광고 유닛 ID는 애플리케이션 또는 게임 내에서 광고 시청이 적절하게 완료되었음을 확인하기 위한 것입니다. AdMob 플랫폼에서 전송되는 광고 시청 완료 알림에 포함된 광고 유닛 ID가 이 목록에 있는지 확인함으로써, 정당한 광고 시청 이벤트만을 수용하고 부정한 요청과 스팸을 방지할 수 있습니다. UnityAd Unity Ads 광고 플랫폼에 관련된 설정 애플리케이션이나 게임에서 사용되는 Unity Ads 관련 암호 키를 보유하기 위해 사용됩니다. 암호 키는 Unity Ads에서 발급되며, 광고 시청 완료를 검증할 때 사용합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 keys List 0 ~ 10 items 암호 키 목록 Unity Ads에서 발급된 암호 키 목록을 보유합니다. 이 키들은 Unity Ads 광고 플랫폼과의 통신 및 광고 이벤트 검증에 사용됩니다. 암호 키는 Unity Dashboard에서 취득할 수 있습니다. 목록에 포함된 각 키는 광고 시청 완료를 검증하기 위해 필요합니다. AppLovinMax AppLovin MAX 광고 플랫폼에 관련된 설정 허용된 광고 유닛 ID를 보유하며, 이를 기반으로 AppLovin MAX로부터의 시청 완료 Webhook을 검증합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 allowAdUnitId string  ~ 16자 허용할 광고 유닛 ID AppLovin MAX에서 전송되는 광고 시청 완료 콜백에 포함된 ad_unit_id를 검증하기 위해 사용됩니다. 이 설정에 등록된 광고 유닛 ID와 콜백에 포함된 ad_unit_id가 일치하는 경우에만 광고 시청이 정상적으로 완료된 것으로 간주하여 승인합니다. 이를 통해 허용되지 않은 광고 유닛으로부터의 알림이나 부정한 요청을 거부하고, 부정한 광고 보상 지급이나 스팸을 방지할 수 있습니다. eventKey string  ~ 128자 AppLovin Event Key AppLovin MAX로부터의 광고 시청 완료 콜백이 적절한 접근 경로에서 전송되었는지 검증할 때 사용합니다 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 ad_reward . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.DescribeNamespacesRequest ; import io.gs2.adReward.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2AdReward . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2AdReward . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . describe_namespaces ( ad_reward . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ad_reward' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 광고 시청 보상 부여 시 실행되는 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 아토믹 커밋, 비동기 처리 등의 옵션이 포함됩니다. admob AdMob AdMob 설정 AdMob에 관련된 광고 설정 및 파라미터를 관리합니다. unityAd UnityAd Unity Ads 설정 Unity Ads에 관련된 광고 설정 및 파라미터를 관리합니다. appLovinMaxes List 0 ~ 10 items AppLovin MAX 설정 AppLovin MAX에 관련된 광고 설정 및 파라미터를 관리합니다. acquirePointScript ScriptSetting 포인트 획득 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquirePoint consumePointScript ScriptSetting 포인트 소비 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - consumePoint changePointNotification NotificationSetting  광고 시청으로 포인트가 변동되었을 때의 푸시 알림 광고 시청에 의한 포인트 변동 시의 푸시 알림 설정입니다. 포인트가 변동되었을 때 게임 클라이언트에 알리기 위한 설정을 보유합니다. 이 설정을 하지 않으면, 획득한 포인트가 즉시 게임에 반영되지 않습니다. logSetting LogSetting 로그 출력 설정 로그 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 GS2-Log의 네임스페이스 정보를 보유합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 ad_reward . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , Admob : \u0026 adReward . AdMob { AllowAdUnitIds : [] * string { pointy . String ( \"1\" ), pointy . String ( \"2\" ), pointy . String ( \"3\" ), }, }, UnityAd : \u0026 adReward . UnityAd { Keys : [] * string { pointy . String ( \"key-0001\" ), pointy . String ( \"key-0002\" ), }, }, AppLovinMaxes : nil , AcquirePointScript : nil , ConsumePointScript : nil , ChangePointNotification : \u0026 adReward . NotificationSetting { GatewayNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" ), }, LogSetting : \u0026 adReward . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withAdmob (( new \\Gs2\\AdReward\\Model\\AdMob ()) -\u003e withAllowAdUnitIds ([ \"1\" , \"2\" , \"3\" , ])) -\u003e withUnityAd (( new \\Gs2\\AdReward\\Model\\UnityAd ()) -\u003e withKeys ([ \"key-0001\" , \"key-0002\" , ])) -\u003e withAppLovinMaxes ( null ) -\u003e withAcquirePointScript ( null ) -\u003e withConsumePointScript ( null ) -\u003e withChangePointNotification (( new \\Gs2\\AdReward\\Model\\NotificationSetting ()) -\u003e withGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" )) -\u003e withLogSetting (( new \\Gs2\\AdReward\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.CreateNamespaceRequest ; import io.gs2.adReward.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAdmob ( new io . gs2 . adReward . model . AdMob () . withAllowAdUnitIds ( Arrays . asList ( \"1\" , \"2\" , \"3\" ))) . withUnityAd ( new io . gs2 . adReward . model . UnityAd () . withKeys ( Arrays . asList ( \"key-0001\" , \"key-0002\" ))) . withAppLovinMaxes ( null ) . withAcquirePointScript ( null ) . withConsumePointScript ( null ) . withChangePointNotification ( new io . gs2 . adReward . model . NotificationSetting () . withGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" )) . withLogSetting ( new io . gs2 . adReward . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2AdReward . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithAdmob ( new Gs2 . Gs2AdReward . Model . AdMob () . WithAllowAdUnitIds ( new string [] { \"1\" , \"2\" , \"3\" , })) . WithUnityAd ( new Gs2 . Gs2AdReward . Model . UnityAd () . WithKeys ( new string [] { \"key-0001\" , \"key-0002\" , })) . WithAppLovinMaxes ( null ) . WithAcquirePointScript ( null ) . WithConsumePointScript ( null ) . WithChangePointNotification ( new Gs2 . Gs2AdReward . Model . NotificationSetting () . WithGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" )) . WithLogSetting ( new Gs2 . Gs2AdReward . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . createNamespace ( new Gs2AdReward . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAdmob ( new Gs2AdReward . model . AdMob () . withAllowAdUnitIds ([ \"1\" , \"2\" , \"3\" , ])) . withUnityAd ( new Gs2AdReward . model . UnityAd () . withKeys ([ \"key-0001\" , \"key-0002\" , ])) . withAppLovinMaxes ( null ) . withAcquirePointScript ( null ) . withConsumePointScript ( null ) . withChangePointNotification ( new Gs2AdReward . model . NotificationSetting () . withGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" )) . withLogSetting ( new Gs2AdReward . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . create_namespace ( ad_reward . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_admob ( ad_reward . AdMob () . with_allow_ad_unit_ids ([ '1' , '2' , '3' , ])) . with_unity_ad ( ad_reward . UnityAd () . with_keys ([ 'key-0001' , 'key-0002' , ])) . with_app_lovin_maxes ( None ) . with_acquire_point_script ( None ) . with_consume_point_script ( None ) . with_change_point_notification ( ad_reward . NotificationSetting () . with_gateway_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001' )) . with_log_setting ( ad_reward . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , admob = { allowAdUnitIds = { \"1\" , \"2\" , \"3\" }, }, unityAd = { keys = { \"key-0001\" , \"key-0002\" }, }, appLovinMaxes = nil , acquirePointScript = nil , consumePointScript = nil , changePointNotification = { gatewayNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , admob = { allowAdUnitIds = { \"1\" , \"2\" , \"3\" }, }, unityAd = { keys = { \"key-0001\" , \"key-0002\" }, }, appLovinMaxes = nil , acquirePointScript = nil , consumePointScript = nil , changePointNotification = { gatewayNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 ad_reward . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.GetNamespaceStatusRequest ; import io.gs2.adReward.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2AdReward . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2AdReward . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . get_namespace_status ( ad_reward . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'ad_reward' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 ad_reward . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.GetNamespaceRequest ; import io.gs2.adReward.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2AdReward . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . getNamespace ( new Gs2AdReward . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . get_namespace ( ad_reward . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 광고 시청 보상 부여 시 실행되는 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 아토믹 커밋, 비동기 처리 등의 옵션이 포함됩니다. admob AdMob AdMob 설정 AdMob에 관련된 광고 설정 및 파라미터를 관리합니다. unityAd UnityAd Unity Ads 설정 Unity Ads에 관련된 광고 설정 및 파라미터를 관리합니다. appLovinMaxes List 0 ~ 10 items AppLovin MAX 설정 AppLovin MAX에 관련된 광고 설정 및 파라미터를 관리합니다. acquirePointScript ScriptSetting 포인트 획득 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquirePoint consumePointScript ScriptSetting 포인트 소비 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - consumePoint changePointNotification NotificationSetting  광고 시청으로 포인트가 변동되었을 때의 푸시 알림 광고 시청에 의한 포인트 변동 시의 푸시 알림 설정입니다. 포인트가 변동되었을 때 게임 클라이언트에 알리기 위한 설정을 보유합니다. 이 설정을 하지 않으면, 획득한 포인트가 즉시 게임에 반영되지 않습니다. logSetting LogSetting 로그 출력 설정 로그 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 GS2-Log의 네임스페이스 정보를 보유합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 ad_reward . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , Admob : \u0026 adReward . AdMob { AllowAdUnitIds : [] * string { pointy . String ( \"2\" ), pointy . String ( \"3\" ), pointy . String ( \"4\" ), }, }, UnityAd : \u0026 adReward . UnityAd { Keys : [] * string { pointy . String ( \"key-1001\" ), pointy . String ( \"key-1002\" ), }, }, AppLovinMaxes : nil , AcquirePointScript : nil , ConsumePointScript : nil , ChangePointNotification : \u0026 adReward . NotificationSetting { GatewayNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" ), }, LogSetting : \u0026 adReward . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withAdmob (( new \\Gs2\\AdReward\\Model\\AdMob ()) -\u003e withAllowAdUnitIds ([ \"2\" , \"3\" , \"4\" , ])) -\u003e withUnityAd (( new \\Gs2\\AdReward\\Model\\UnityAd ()) -\u003e withKeys ([ \"key-1001\" , \"key-1002\" , ])) -\u003e withAppLovinMaxes ( null ) -\u003e withAcquirePointScript ( null ) -\u003e withConsumePointScript ( null ) -\u003e withChangePointNotification (( new \\Gs2\\AdReward\\Model\\NotificationSetting ()) -\u003e withGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" )) -\u003e withLogSetting (( new \\Gs2\\AdReward\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.UpdateNamespaceRequest ; import io.gs2.adReward.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAdmob ( new io . gs2 . adReward . model . AdMob () . withAllowAdUnitIds ( Arrays . asList ( \"2\" , \"3\" , \"4\" ))) . withUnityAd ( new io . gs2 . adReward . model . UnityAd () . withKeys ( Arrays . asList ( \"key-1001\" , \"key-1002\" ))) . withAppLovinMaxes ( null ) . withAcquirePointScript ( null ) . withConsumePointScript ( null ) . withChangePointNotification ( new io . gs2 . adReward . model . NotificationSetting () . withGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" )) . withLogSetting ( new io . gs2 . adReward . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2AdReward . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithAdmob ( new Gs2 . Gs2AdReward . Model . AdMob () . WithAllowAdUnitIds ( new string [] { \"2\" , \"3\" , \"4\" , })) . WithUnityAd ( new Gs2 . Gs2AdReward . Model . UnityAd () . WithKeys ( new string [] { \"key-1001\" , \"key-1002\" , })) . WithAppLovinMaxes ( null ) . WithAcquirePointScript ( null ) . WithConsumePointScript ( null ) . WithChangePointNotification ( new Gs2 . Gs2AdReward . Model . NotificationSetting () . WithGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" )) . WithLogSetting ( new Gs2 . Gs2AdReward . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2AdReward . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAdmob ( new Gs2AdReward . model . AdMob () . withAllowAdUnitIds ([ \"2\" , \"3\" , \"4\" , ])) . withUnityAd ( new Gs2AdReward . model . UnityAd () . withKeys ([ \"key-1001\" , \"key-1002\" , ])) . withAppLovinMaxes ( null ) . withAcquirePointScript ( null ) . withConsumePointScript ( null ) . withChangePointNotification ( new Gs2AdReward . model . NotificationSetting () . withGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" )) . withLogSetting ( new Gs2AdReward . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . update_namespace ( ad_reward . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_admob ( ad_reward . AdMob () . with_allow_ad_unit_ids ([ '2' , '3' , '4' , ])) . with_unity_ad ( ad_reward . UnityAd () . with_keys ([ 'key-1001' , 'key-1002' , ])) . with_app_lovin_maxes ( None ) . with_acquire_point_script ( None ) . with_consume_point_script ( None ) . with_change_point_notification ( ad_reward . NotificationSetting () . with_gateway_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001' )) . with_log_setting ( ad_reward . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , admob = { allowAdUnitIds = { \"2\" , \"3\" , \"4\" }, }, unityAd = { keys = { \"key-1001\" , \"key-1002\" }, }, appLovinMaxes = nil , acquirePointScript = nil , consumePointScript = nil , changePointNotification = { gatewayNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , admob = { allowAdUnitIds = { \"2\" , \"3\" , \"4\" }, }, unityAd = { keys = { \"key-1001\" , \"key-1002\" }, }, appLovinMaxes = nil , acquirePointScript = nil , consumePointScript = nil , changePointNotification = { gatewayNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 ad_reward . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.DeleteNamespaceRequest ; import io.gs2.adReward.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2AdReward . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2AdReward . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . delete_namespace ( ad_reward . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 ad_reward . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.GetServiceVersionRequest ; import io.gs2.adReward.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2AdReward . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2AdReward . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . get_service_version ( ad_reward . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 ad_reward . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.DumpUserDataByUserIdRequest ; import io.gs2.adReward.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2AdReward . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2AdReward . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . dump_user_data_by_user_id ( ad_reward . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ad_reward' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 ad_reward . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.adReward.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2AdReward . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2AdReward . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( ad_reward . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'ad_reward' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 ad_reward . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.CleanUserDataByUserIdRequest ; import io.gs2.adReward.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2AdReward . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2AdReward . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . clean_user_data_by_user_id ( ad_reward . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ad_reward' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 ad_reward . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.adReward.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2AdReward . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2AdReward . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( ad_reward . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ad_reward' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 ad_reward . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.adReward.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2AdReward . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2AdReward . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( ad_reward . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'ad_reward' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 ad_reward . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.ImportUserDataByUserIdRequest ; import io.gs2.adReward.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2AdReward . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2AdReward . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . import_user_data_by_user_id ( ad_reward . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ad_reward' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 ad_reward . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.CheckImportUserDataByUserIdRequest ; import io.gs2.adReward.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2AdReward . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2AdReward . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( ad_reward . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'ad_reward' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; getPoint 현재 포인트 상태 조회 현재 로그인 중인 사용자에 연결된 포인트 정보를 반환합니다. 사용자의 포인트 레코드가 존재하지 않는 경우, 0포인트의 새로운 레코드가 자동으로 생성되어 반환됩니다. 이를 통해 광고 시청 보상으로 획득한 포인트를 사용자가 현재 얼마나 보유하고 있는지 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Point 광고 시청으로 획득한 포인트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . GetPoint ( \u0026 ad_reward . GetPointRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\GetPointRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e getPoint ( ( new GetPointRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.GetPointRequest ; import io.gs2.adReward.result.GetPointResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { GetPointResult result = client . getPoint ( new GetPointRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Point item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . GetPointResult \u003e asyncResult = null ; yield return client . GetPoint ( new Gs2 . Gs2AdReward . Request . GetPointRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . getPoint ( new Gs2AdReward . GetPointRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . get_point ( ad_reward . GetPointRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.get_point ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.get_point_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getPointByUserId 사용자 ID를 지정하여 포인트 상태 조회 지정된 사용자 ID에 연결된 포인트 정보를 반환합니다. 사용자의 포인트 레코드가 존재하지 않는 경우, 0포인트의 새로운 레코드가 자동으로 생성되어 반환됩니다. 이를 통해 광고 시청 보상으로 획득한 포인트를 사용자가 현재 얼마나 보유하고 있는지 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Point 광고 시청으로 획득한 포인트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . GetPointByUserId ( \u0026 ad_reward . GetPointByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\GetPointByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e getPointByUserId ( ( new GetPointByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.GetPointByUserIdRequest ; import io.gs2.adReward.result.GetPointByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { GetPointByUserIdResult result = client . getPointByUserId ( new GetPointByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Point item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . GetPointByUserIdResult \u003e asyncResult = null ; yield return client . GetPointByUserId ( new Gs2 . Gs2AdReward . Request . GetPointByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . getPointByUserId ( new Gs2AdReward . GetPointByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . get_point_by_user_id ( ad_reward . GetPointByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.get_point_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.get_point_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquirePointByUserId 사용자 ID를 지정하여 포인트 획득 지정된 사용자 ID에 지정된 수의 포인트를 추가하고, 갱신된 포인트 정보를 반환합니다. 사용자의 포인트 레코드가 존재하지 않는 경우, 포인트 추가 전에 새로운 레코드가 자동으로 생성됩니다. 네임스페이스의 획득 스크립트 설정에 GS2-Script가 설정되어 있는 경우, 포인트 추가 전에 스크립트가 실행되어 커스텀 검증이나 획득량 변경이 가능합니다. 포인트 추가 후, 네임스페이스 설정에서 변경 알림이 구성되어 있으면 알림이 전송됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID point long  1 ~ 9223372036854775805 획득할 포인트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Point 포인트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . AcquirePointByUserId ( \u0026 ad_reward . AcquirePointByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Point : pointy . Int64 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\AcquirePointByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e acquirePointByUserId ( ( new AcquirePointByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPoint ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.AcquirePointByUserIdRequest ; import io.gs2.adReward.result.AcquirePointByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { AcquirePointByUserIdResult result = client . acquirePointByUserId ( new AcquirePointByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPoint ( 1L ) . withTimeOffsetToken ( null ) ); Point item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . AcquirePointByUserIdResult \u003e asyncResult = null ; yield return client . AcquirePointByUserId ( new Gs2 . Gs2AdReward . Request . AcquirePointByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPoint ( 1L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . acquirePointByUserId ( new Gs2AdReward . AcquirePointByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPoint ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . acquire_point_by_user_id ( ad_reward . AcquirePointByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_point ( 1 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.acquire_point_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , point = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.acquire_point_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , point = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; consumePoint 포인트 소비 현재 로그인 중인 사용자로부터 지정된 수의 포인트를 차감하고, 갱신된 포인트 정보를 반환합니다. 요청된 소비량에 대해 포인트가 부족한 경우 오류가 반환됩니다. 네임스페이스의 소비 스크립트 설정에 GS2-Script가 설정되어 있는 경우, 포인트 차감 전에 스크립트가 실행되어 커스텀 검증이나 소비량 변경이 가능합니다. 포인트 차감 후, 네임스페이스 설정에서 변경 알림이 구성되어 있으면 알림이 전송됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 point long  1 ~ 9223372036854775805 소비할 포인트 Result 타입 설명 item Point 포인트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . ConsumePoint ( \u0026 ad_reward . ConsumePointRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Point : pointy . Int64 ( 1 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\ConsumePointRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e consumePoint ( ( new ConsumePointRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPoint ( 1 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.ConsumePointRequest ; import io.gs2.adReward.result.ConsumePointResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { ConsumePointResult result = client . consumePoint ( new ConsumePointRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPoint ( 1L ) ); Point item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . ConsumePointResult \u003e asyncResult = null ; yield return client . ConsumePoint ( new Gs2 . Gs2AdReward . Request . ConsumePointRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPoint ( 1L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . consumePoint ( new Gs2AdReward . ConsumePointRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPoint ( 1 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . consume_point ( ad_reward . ConsumePointRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_point ( 1 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.consume_point ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , point = 1 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.consume_point_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , point = 1 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; consumePointByUserId 사용자 ID를 지정하여 포인트 소비 지정된 사용자 ID로부터 지정된 수의 포인트를 차감하고, 갱신된 포인트 정보를 반환합니다. 요청된 소비량에 대해 포인트가 부족한 경우 오류가 반환됩니다. 네임스페이스의 소비 스크립트 설정에 GS2-Script가 설정되어 있는 경우, 포인트 차감 전에 스크립트가 실행되어 커스텀 검증이나 소비량 변경이 가능합니다. 포인트 차감 후, 네임스페이스 설정에서 변경 알림이 구성되어 있으면 알림이 전송됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID point long  1 ~ 9223372036854775805 소비할 포인트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Point 포인트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . ConsumePointByUserId ( \u0026 ad_reward . ConsumePointByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Point : pointy . Int64 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\ConsumePointByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e consumePointByUserId ( ( new ConsumePointByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPoint ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.ConsumePointByUserIdRequest ; import io.gs2.adReward.result.ConsumePointByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { ConsumePointByUserIdResult result = client . consumePointByUserId ( new ConsumePointByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPoint ( 1L ) . withTimeOffsetToken ( null ) ); Point item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . ConsumePointByUserIdResult \u003e asyncResult = null ; yield return client . ConsumePointByUserId ( new Gs2 . Gs2AdReward . Request . ConsumePointByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPoint ( 1L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . consumePointByUserId ( new Gs2AdReward . ConsumePointByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPoint ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . consume_point_by_user_id ( ad_reward . ConsumePointByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_point ( 1 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.consume_point_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , point = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.consume_point_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , point = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deletePointByUserId 사용자 ID를 지정하여 포인트 초기화 지정된 사용자 ID의 포인트 레코드를 삭제하여 사용자의 포인트를 초기 상태(0포인트)로 재설정합니다. 이 작업은 되돌릴 수 없지만, 이후 Get 또는 Acquire 작업을 수행하면 0포인트의 새로운 포인트 레코드가 자동으로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Point 포인트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/adReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ad_reward . Gs2AdRewardRestClient { Session : \u0026 session , } result , err := client . DeletePointByUserId ( \u0026 ad_reward . DeletePointByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\AdReward\\Gs2AdRewardRestClient ; use Gs2\\AdReward\\Request\\DeletePointByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AdRewardRestClient ( $session ); try { $result = $client -\u003e deletePointByUserId ( ( new DeletePointByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.adReward.rest.Gs2AdRewardRestClient ; import io.gs2.adReward.request.DeletePointByUserIdRequest ; import io.gs2.adReward.result.DeletePointByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AdRewardRestClient client = new Gs2AdRewardRestClient ( session ); try { DeletePointByUserIdResult result = client . deletePointByUserId ( new DeletePointByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Point item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AdRewardRestClient ( session ); AsyncResult Gs2 . Gs2AdReward . Result . DeletePointByUserIdResult \u003e asyncResult = null ; yield return client . DeletePointByUserId ( new Gs2 . Gs2AdReward . Request . DeletePointByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2AdReward from '@/gs2/adReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2AdReward . Gs2AdRewardRestClient ( session ); try { const result = await client . deletePointByUserId ( new Gs2AdReward . DeletePointByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ad_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ad_reward . Gs2AdRewardRestClient ( session ) try : result = client . delete_point_by_user_id ( ad_reward . DeletePointByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ad_reward' ) api_result = client.delete_point_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ad_reward' ) api_result_handler = client.delete_point_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-AdReward SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-AdReward SDK API 레퍼런스","url":"/ko/api_reference/ad_reward/sdk/"},{"content":"모델 AccessToken 액세스 토큰 사용자 인증 후 발급되는 액세스 토큰을 관리하는 모델입니다. 액세스 토큰은 사용자가 서비스에 로그인되어 있는 동안 해당 세션의 신원을 증명하는 데 사용됩니다. 토큰에는 유효기간이 설정되어 있으며, 만료되면 재인증이 필요합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 token string  ~ 1024자 액세스 토큰 액세스를 인증하기 위한 토큰입니다. 이 토큰은 시스템에 의해 자동으로 생성되며, 사용자의 세션을 식별합니다. userId string  ~ 128자 사용자ID federationFromUserId string ~ 128자 페더레이션 원본 사용자 ID ID 페더레이션을 시작한 원본 사용자의 ID입니다. ID 페더레이션을 통해 다른 사용자로서 작업을 수행하는 경우, 이 필드에 조작을 시작한 원본 사용자의 ID가 저장됩니다. expire long 현재 시각으로부터 1시간 후의 절대 시각 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰은 무효화됩니다. UNIX 시간·밀리초 timeOffset int 0 0 ~ 315360000 현재 시각에 대한 보정값(현재 시각을 기준으로 한 초 수) 시각 보정값은 서버의 현재 시각과의 차이를 초 단위로 나타냅니다. 이 값은 게임 내 이벤트나 기능이 특정 시각에 맞춰 동작해야 할 때 사용됩니다. 메서드 login 사용자 ID를 지정하여 GS2에 로그인 지정한 사용자 ID로 GS2에 로그인하고 액세스 토큰을 취득합니다. 본 API는 신뢰할 수 있는 게임 서버에서 호출되는 것을 상정하고 있습니다. 사용자 ID 값에 대한 검증 처리가 존재하지 않으므로, 클라이언트에서 호출하는 것은 적절하지 않습니다. 옵션으로 타임 오프셋(초 단위)을 지정하면 로그인한 사용자의 현재 시각을 의사적으로 앞당길 수 있어 미래의 이벤트 일정 테스트에 활용할 수 있습니다. 반환되는 액세스 토큰에는 유효기간이 있으며, 기간이 지나면 무효가 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffset int 0 0 ~ 315360000 현재 시각에 대한 보정값(현재 시각을 기준으로 한 초 수) 시각 보정값은 서버의 현재 시각과의 차이를 초 단위로 나타냅니다. 이 값은 게임 내 이벤트나 기능이 특정 시각에 맞춰 동작해야 할 때 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 token string 액세스 토큰 액세스를 인증하기 위한 토큰입니다. 이 토큰은 시스템에 의해 자동으로 생성되며, 사용자의 세션을 식별합니다. userId string 사용자ID expire long 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/auth\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := auth . Gs2AuthRestClient { Session : \u0026 session , } result , err := client . Login ( \u0026 auth . LoginRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffset : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } token := result . Token userId := result . UserId expire := result . Expire use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Auth\\Gs2AuthRestClient ; use Gs2\\Auth\\Request\\LoginRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AuthRestClient ( $session ); try { $result = $client -\u003e login ( ( new LoginRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffset ( null ) -\u003e withTimeOffsetToken ( null ) ); $token = $result -\u003e getToken (); $userId = $result -\u003e getUserId (); $expire = $result -\u003e getExpire (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.auth.rest.Gs2AuthRestClient ; import io.gs2.auth.request.LoginRequest ; import io.gs2.auth.result.LoginResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AuthRestClient client = new Gs2AuthRestClient ( session ); try { LoginResult result = client . login ( new LoginRequest () . withUserId ( \"user-0001\" ) . withTimeOffset ( null ) . withTimeOffsetToken ( null ) ); String token = result . getToken (); String userId = result . getUserId (); long expire = result . getExpire (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AuthRestClient ( session ); AsyncResult Gs2 . Gs2Auth . Result . LoginResult \u003e asyncResult = null ; yield return client . Login ( new Gs2 . Gs2Auth . Request . LoginRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffset ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var token = result . Token ; var userId = result . UserId ; var expire = result . Expire ; import Gs2Core from '@/gs2/core' ; import * as Gs2Auth from '@/gs2/auth' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Auth . Gs2AuthRestClient ( session ); try { const result = await client . login ( new Gs2Auth . LoginRequest () . withUserId ( \"user-0001\" ) . withTimeOffset ( null ) . withTimeOffsetToken ( null ) ); const token = result . getToken (); const userId = result . getUserId (); const expire = result . getExpire (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import auth session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = auth . Gs2AuthRestClient ( session ) try : result = client . login ( auth . LoginRequest () . with_user_id ( 'user-0001' ) . with_time_offset ( None ) . with_time_offset_token ( None ) ) token = result . token user_id = result . user_id expire = result . expire except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'auth' ) api_result = client.login ({ userId = \"user-0001\" , timeOffset = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; client = gs2 ( 'auth' ) api_result_handler = client.login_async ({ userId = \"user-0001\" , timeOffset = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; loginBySignature 계정 인증 정보로 GS2에 로그인 계정 인증 정보의 서명을 검증하여 GS2에 로그인하고 액세스 토큰을 취득합니다. 계정 인증 정보의 서명 검증을 수행하므로, 본 API는 클라이언트에서 호출해도 안전합니다. body와 signature는 일반적으로 GS2-Account의 인증 API에서 취득한 값을 사용하며, keyId는 서명 검증에 사용할 GS2-Key의 암호 키를 지정합니다. 반환되는 액세스 토큰에는 유효기간이 있으며, 기간이 지나면 무효가 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN body string  ~ 524288자 서명 대상 계정 인증 정보 signature string  ~ 1024자 서명 Result 타입 설명 token string 액세스 토큰 액세스를 인증하기 위한 토큰입니다. 이 토큰은 시스템에 의해 자동으로 생성되며, 사용자의 세션을 식별합니다. userId string 사용자ID expire long 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/auth\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := auth . Gs2AuthRestClient { Session : \u0026 session , } result , err := client . LoginBySignature ( \u0026 auth . LoginBySignatureRequest { KeyId : pointy . String ( \"key-0001\" ), Body : pointy . String ( \"body\" ), Signature : pointy . String ( \"signature\" ), } ) if err != nil { panic ( \"error occurred\" ) } token := result . Token userId := result . UserId expire := result . Expire use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Auth\\Gs2AuthRestClient ; use Gs2\\Auth\\Request\\LoginBySignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AuthRestClient ( $session ); try { $result = $client -\u003e loginBySignature ( ( new LoginBySignatureRequest ()) -\u003e withKeyId ( \"key-0001\" ) -\u003e withBody ( \"body\" ) -\u003e withSignature ( \"signature\" ) ); $token = $result -\u003e getToken (); $userId = $result -\u003e getUserId (); $expire = $result -\u003e getExpire (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.auth.rest.Gs2AuthRestClient ; import io.gs2.auth.request.LoginBySignatureRequest ; import io.gs2.auth.result.LoginBySignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AuthRestClient client = new Gs2AuthRestClient ( session ); try { LoginBySignatureResult result = client . loginBySignature ( new LoginBySignatureRequest () . withKeyId ( \"key-0001\" ) . withBody ( \"body\" ) . withSignature ( \"signature\" ) ); String token = result . getToken (); String userId = result . getUserId (); long expire = result . getExpire (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AuthRestClient ( session ); AsyncResult Gs2 . Gs2Auth . Result . LoginBySignatureResult \u003e asyncResult = null ; yield return client . LoginBySignature ( new Gs2 . Gs2Auth . Request . LoginBySignatureRequest () . WithKeyId ( \"key-0001\" ) . WithBody ( \"body\" ) . WithSignature ( \"signature\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var token = result . Token ; var userId = result . UserId ; var expire = result . Expire ; import Gs2Core from '@/gs2/core' ; import * as Gs2Auth from '@/gs2/auth' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Auth . Gs2AuthRestClient ( session ); try { const result = await client . loginBySignature ( new Gs2Auth . LoginBySignatureRequest () . withKeyId ( \"key-0001\" ) . withBody ( \"body\" ) . withSignature ( \"signature\" ) ); const token = result . getToken (); const userId = result . getUserId (); const expire = result . getExpire (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import auth session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = auth . Gs2AuthRestClient ( session ) try : result = client . login_by_signature ( auth . LoginBySignatureRequest () . with_key_id ( 'key-0001' ) . with_body ( 'body' ) . with_signature ( 'signature' ) ) token = result . token user_id = result . user_id expire = result . expire except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'auth' ) api_result = client.login_by_signature ({ keyId = \"key-0001\" , body = \"body\" , signature = \"signature\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; client = gs2 ( 'auth' ) api_result_handler = client.login_by_signature_async ({ keyId = \"key-0001\" , body = \"body\" , signature = \"signature\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; federation 사용자 ID 연계 지정한 사용자 ID를 기점으로 다른 사용자 ID로 동작하기 위한 액세스 토큰을 취득합니다. 길드 마스터가 다른 멤버를 대신하여 조작을 수행하는 등, 다른 사용자로서 액션을 실행해야 하는 시나리오에서 활용할 수 있습니다. 이 액세스 토큰을 사용하여 트랜잭션을 발행하는 경우, 트랜잭션 액션 내의 #{userId}는 페더레이션 대상 사용자 ID로 치환되고 #{originalUserId}는 페더레이션 원본 사용자 ID로 치환됩니다. 정책 문서를 지정하면 페더레이션된 사용자로서 API를 호출할 때 크리덴셜이 가진 권한보다 더 엄격한 제약을 설정할 수 있습니다. 반환되는 액세스 토큰에는 유효기간이 있으며, 기간이 지나면 무효가 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 originalUserId string  ~ 128자 페더레이션 원본 사용자 ID userId string  ~ 128자 페더레이션 대상 사용자 ID policyDocument string ~ 524288자 정책 문서 timeOffset int 0 0 ~ 315360000 현재 시각에 대한 보정값(현재 시각을 기준으로 한 초 수) 시각 보정값은 서버의 현재 시각과의 차이를 초 단위로 나타냅니다. 이 값은 게임 내 이벤트나 기능이 특정 시각에 맞춰 동작해야 할 때 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 token string 액세스 토큰 액세스를 인증하기 위한 토큰입니다. 이 토큰은 시스템에 의해 자동으로 생성되며, 사용자의 세션을 식별합니다. userId string 사용자ID expire long 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/auth\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := auth . Gs2AuthRestClient { Session : \u0026 session , } result , err := client . Federation ( \u0026 auth . FederationRequest { OriginalUserId : pointy . String ( \"user-0001\" ), UserId : pointy . String ( \"user-0002\" ), PolicyDocument : pointy . String ( \"{\\n \\\"Version\\\": \\\"2016-04-01\\\",\\n \\\"Statements\\\": [\\n {\\n \\\"Effect\\\": \\\"Allow\\\",\\n \\\"Actions\\\": [\\n \\\"Gs2Inbox:SendMessage\\\"\\n ],\\n \\\"Resources\\\": [\\n \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001\\\",\\n \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001:*\\\"\\n ]\\n }\\n ]\\n}\" ), TimeOffset : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } token := result . Token userId := result . UserId expire := result . Expire use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Auth\\Gs2AuthRestClient ; use Gs2\\Auth\\Request\\FederationRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AuthRestClient ( $session ); try { $result = $client -\u003e federation ( ( new FederationRequest ()) -\u003e withOriginalUserId ( \"user-0001\" ) -\u003e withUserId ( \"user-0002\" ) -\u003e withPolicyDocument ( \"{ \\n \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\n \\\" Statements \\\" : [ \\n { \\n \\\" Effect \\\" : \\\" Allow \\\" , \\n \\\" Actions \\\" : [ \\n \\\" Gs2Inbox:SendMessage \\\"\\n ], \\n \\\" Resources \\\" : [ \\n \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001 \\\" , \\n \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001:* \\\"\\n ] \\n } \\n ] \\n }\" ) -\u003e withTimeOffset ( null ) -\u003e withTimeOffsetToken ( null ) ); $token = $result -\u003e getToken (); $userId = $result -\u003e getUserId (); $expire = $result -\u003e getExpire (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.auth.rest.Gs2AuthRestClient ; import io.gs2.auth.request.FederationRequest ; import io.gs2.auth.result.FederationResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AuthRestClient client = new Gs2AuthRestClient ( session ); try { FederationResult result = client . federation ( new FederationRequest () . withOriginalUserId ( \"user-0001\" ) . withUserId ( \"user-0002\" ) . withPolicyDocument ( \"{\\n \\\"Version\\\": \\\"2016-04-01\\\",\\n \\\"Statements\\\": [\\n {\\n \\\"Effect\\\": \\\"Allow\\\",\\n \\\"Actions\\\": [\\n \\\"Gs2Inbox:SendMessage\\\"\\n ],\\n \\\"Resources\\\": [\\n \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001\\\",\\n \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001:*\\\"\\n ]\\n }\\n ]\\n}\" ) . withTimeOffset ( null ) . withTimeOffsetToken ( null ) ); String token = result . getToken (); String userId = result . getUserId (); long expire = result . getExpire (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AuthRestClient ( session ); AsyncResult Gs2 . Gs2Auth . Result . FederationResult \u003e asyncResult = null ; yield return client . Federation ( new Gs2 . Gs2Auth . Request . FederationRequest () . WithOriginalUserId ( \"user-0001\" ) . WithUserId ( \"user-0002\" ) . WithPolicyDocument ( \"{\\n \\\"Version\\\": \\\"2016-04-01\\\",\\n \\\"Statements\\\": [\\n {\\n \\\"Effect\\\": \\\"Allow\\\",\\n \\\"Actions\\\": [\\n \\\"Gs2Inbox:SendMessage\\\"\\n ],\\n \\\"Resources\\\": [\\n \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001\\\",\\n \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001:*\\\"\\n ]\\n }\\n ]\\n}\" ) . WithTimeOffset ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var token = result . Token ; var userId = result . UserId ; var expire = result . Expire ; import Gs2Core from '@/gs2/core' ; import * as Gs2Auth from '@/gs2/auth' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Auth . Gs2AuthRestClient ( session ); try { const result = await client . federation ( new Gs2Auth . FederationRequest () . withOriginalUserId ( \"user-0001\" ) . withUserId ( \"user-0002\" ) . withPolicyDocument ( \"{\\n \\\"Version\\\": \\\"2016-04-01\\\",\\n \\\"Statements\\\": [\\n {\\n \\\"Effect\\\": \\\"Allow\\\",\\n \\\"Actions\\\": [\\n \\\"Gs2Inbox:SendMessage\\\"\\n ],\\n \\\"Resources\\\": [\\n \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001\\\",\\n \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001:*\\\"\\n ]\\n }\\n ]\\n}\" ) . withTimeOffset ( null ) . withTimeOffsetToken ( null ) ); const token = result . getToken (); const userId = result . getUserId (); const expire = result . getExpire (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import auth session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = auth . Gs2AuthRestClient ( session ) try : result = client . federation ( auth . FederationRequest () . with_original_user_id ( 'user-0001' ) . with_user_id ( 'user-0002' ) . with_policy_document ( '{ \\n \"Version\": \"2016-04-01\", \\n \"Statements\": [ \\n { \\n \"Effect\": \"Allow\", \\n \"Actions\": [ \\n \"Gs2Inbox:SendMessage\" \\n ], \\n \"Resources\": [ \\n \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001\", \\n \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001:*\" \\n ] \\n } \\n ] \\n }' ) . with_time_offset ( None ) . with_time_offset_token ( None ) ) token = result . token user_id = result . user_id expire = result . expire except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'auth' ) api_result = client.federation ({ originalUserId = \"user-0001\" , userId = \"user-0002\" , policyDocument = \"{ \\n \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\n \\\" Statements \\\" : [ \\n { \\n \\\" Effect \\\" : \\\" Allow \\\" , \\n \\\" Actions \\\" : [ \\n \\\" Gs2Inbox:SendMessage \\\"\\n ], \\n \\\" Resources \\\" : [ \\n \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001 \\\" , \\n \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001:* \\\"\\n ] \\n } \\n ] \\n }\" , timeOffset = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; client = gs2 ( 'auth' ) api_result_handler = client.federation_async ({ originalUserId = \"user-0001\" , userId = \"user-0002\" , policyDocument = \"{ \\n \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\n \\\" Statements \\\" : [ \\n { \\n \\\" Effect \\\" : \\\" Allow \\\" , \\n \\\" Actions \\\" : [ \\n \\\" Gs2Inbox:SendMessage \\\"\\n ], \\n \\\" Resources \\\" : [ \\n \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001 \\\" , \\n \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:namespace-0001:* \\\"\\n ] \\n } \\n ] \\n }\" , timeOffset = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; issueTimeOffsetTokenByUserId 지정한 사용자 ID로 사용 가능한 타임 오프셋 토큰 발행 타임 오프셋 토큰 을 사용자 ID를 지정하여 실행하는 API에 전달하면, 지정한 사용자의 현재 시각을 가상으로 앞당긴 상태로 API 처리를 실행할 수 있습니다. 예를 들어 timeOffset에 86400(24시간)을 지정하여 발행한 토큰을 이용하면, 서버는 “현재 시각 + 24시간\"의 상태로 요청을 처리합니다. 이 구조를 통해 기간 한정 이벤트, 데일리 퀘스트, 스태미나 회복 등 시각에 의존하는 게임 기능을 실제 시간 경과를 기다리지 않고 검증할 수 있습니다. 액세스 토큰을 사용하는 API에서 타임 오프셋을 사용하고 싶은 경우, 액세스 토큰 발행 시 timeOffsetToken을 지정하면 이후 요청에서도 동일한 시각 보정이 적용된 상태로 처리를 실행할 수 있습니다. 타임 오프셋 토큰에는 유효기간이 있으며, 발행 후 1시간이 지나면 무효가 됩니다. 또한 토큰은 발행 대상 사용자 ID에 연결되어 있으며, 다른 사용자 ID의 요청에는 사용할 수 없습니다. 주로 테스트·디버그 용도를 상정하고 있으며, 예정된 이벤트나 기간 한정 콘텐츠의 사전 검증에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffset int 0 0 ~ 315360000 현재 시각에 대한 보정값(현재 시각을 기준으로 한 초 수) 시각 보정값은 서버의 현재 시각과의 차이를 초 단위로 나타냅니다. 이 값은 게임 내 이벤트나 기능이 특정 시각에 맞춰 동작해야 할 때 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 token string 타임 오프셋 토큰 발행된 타임 오프셋 토큰입니다. 이후 요청의 timeOffsetToken에 전달하면 지정한 오프셋만큼 시각을 조정한 상태로 조작을 실행할 수 있습니다. userId string 사용자ID expire long 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/auth\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := auth . Gs2AuthRestClient { Session : \u0026 session , } result , err := client . IssueTimeOffsetTokenByUserId ( \u0026 auth . IssueTimeOffsetTokenByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffset : pointy . Int32 ( 1000 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } token := result . Token userId := result . UserId expire := result . Expire use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Auth\\Gs2AuthRestClient ; use Gs2\\Auth\\Request\\IssueTimeOffsetTokenByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AuthRestClient ( $session ); try { $result = $client -\u003e issueTimeOffsetTokenByUserId ( ( new IssueTimeOffsetTokenByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffset ( 1000 ) -\u003e withTimeOffsetToken ( null ) ); $token = $result -\u003e getToken (); $userId = $result -\u003e getUserId (); $expire = $result -\u003e getExpire (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.auth.rest.Gs2AuthRestClient ; import io.gs2.auth.request.IssueTimeOffsetTokenByUserIdRequest ; import io.gs2.auth.result.IssueTimeOffsetTokenByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AuthRestClient client = new Gs2AuthRestClient ( session ); try { IssueTimeOffsetTokenByUserIdResult result = client . issueTimeOffsetTokenByUserId ( new IssueTimeOffsetTokenByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffset ( 1000 ) . withTimeOffsetToken ( null ) ); String token = result . getToken (); String userId = result . getUserId (); long expire = result . getExpire (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AuthRestClient ( session ); AsyncResult Gs2 . Gs2Auth . Result . IssueTimeOffsetTokenByUserIdResult \u003e asyncResult = null ; yield return client . IssueTimeOffsetTokenByUserId ( new Gs2 . Gs2Auth . Request . IssueTimeOffsetTokenByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffset ( 1000 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var token = result . Token ; var userId = result . UserId ; var expire = result . Expire ; import Gs2Core from '@/gs2/core' ; import * as Gs2Auth from '@/gs2/auth' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Auth . Gs2AuthRestClient ( session ); try { const result = await client . issueTimeOffsetTokenByUserId ( new Gs2Auth . IssueTimeOffsetTokenByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffset ( 1000 ) . withTimeOffsetToken ( null ) ); const token = result . getToken (); const userId = result . getUserId (); const expire = result . getExpire (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import auth session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = auth . Gs2AuthRestClient ( session ) try : result = client . issue_time_offset_token_by_user_id ( auth . IssueTimeOffsetTokenByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset ( 1000 ) . with_time_offset_token ( None ) ) token = result . token user_id = result . user_id expire = result . expire except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'auth' ) api_result = client.issue_time_offset_token_by_user_id ({ userId = \"user-0001\" , timeOffset = 1000 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; client = gs2 ( 'auth' ) api_result_handler = client.issue_time_offset_token_by_user_id_async ({ userId = \"user-0001\" , timeOffset = 1000 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/auth\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := auth . Gs2AuthRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 auth . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Auth\\Gs2AuthRestClient ; use Gs2\\Auth\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2AuthRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.auth.rest.Gs2AuthRestClient ; import io.gs2.auth.request.GetServiceVersionRequest ; import io.gs2.auth.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2AuthRestClient client = new Gs2AuthRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2AuthRestClient ( session ); AsyncResult Gs2 . Gs2Auth . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Auth . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Auth from '@/gs2/auth' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Auth . Gs2AuthRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Auth . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import auth session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = auth . Gs2AuthRestClient ( session ) try : result = client . get_service_version ( auth . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'auth' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'auth' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Auth SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Auth SDK API 레퍼런스","url":"/ko/api_reference/auth/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 버프 적용 결과에 기반하여 실행되는 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션이 포함됩니다. applyBuffScript ScriptSetting 버프를 적용할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - apply logSetting LogSetting 로그 출력 설정 버프 조작 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. API 요청·응답 로그를 수집하는 GS2-Log의 네임스페이스를 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 BuffTargetModel 버프 적용 대상 모델 버프 적용의 대상이 되는 GS2 리소스 모델과 필드를 정의합니다. 어떤 모델의 어떤 필드 값을 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 targetModelName 문자열 열거형 enum { }  버프를 적용할 모델의 종류 targetFieldName string  ~ 64자 버프 적용 대상 필드명 버프에 의해 값이 변경되는 대상 모델 상의 수치 필드명입니다. 예를 들어 경험치나 공격력 등의 수치 속성을 나타내는 필드가 대상이 됩니다. conditionGrns List  1 ~ 10 items 버프 적용 조건 GRN 목록 버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다. rate float  0 ~ 1000000 보정 레이트 적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add\"의 경우 기본 레이트에 가산, “Mul\"의 경우 현재 레이트에 곱셈, “Value Add\"의 경우 레이트 계산 후의 필드 값에 직접 가산됩니다. BuffEntryModel 버프 엔트리 모델 버프의 적용량은 버프 엔트리 모델로 관리하며, 동일한 대상에 대해 여러 버프 엔트리 모델을 연결할 수 있습니다. 버프 엔트리 모델의 적용 순서는 버프 엔트리 모델의 priority 로 관리하며, priority 값이 작을수록 우선순위가 높아집니다. 버프의 적용 방식은 3종류가 있으며 “Rate Add”, “Mul”, “Value Add\"가 있습니다. Rate Add 는 버프의 적용 레이트에 가산하는 명령이며, Mul 은 버프의 적용 레이트에 곱하는 명령입니다. Value Add 는 버프 보정 계산 후의 값에 가산을 수행하는 명령입니다. 예를 들어 기본 레이트가 1.0 이고 Rate Add 0.2 를 설정하면 버프 적용 레이트는 1.2 가 됩니다. Mul 0.5 를 설정하면 버프 적용 레이트는 현재 레이트의 0.5배가 됩니다. 버프 엔트리 모델에는 GS2-Schedule 의 이벤트를 연결할 수 있으며, 이벤트 개최 기간 중에만 버프를 적용하도록 설정하는 것도 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 buffEntryModelId string ※ ~ 1024자 버프 엔트리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. expression 문자열 열거형 enum {   “rate_add”,   “mul”,   “value_add” }  버프의 적용 타입 버프 값을 대상에 어떻게 적용할지를 지정합니다. “Rate Add\"는 보정 레이트에 가산(예: 1.0 + 0.2 = 1.2), “Mul\"은 보정 레이트에 곱함(예: 레이트 * 0.5), “Value Add\"는 레이트 기반 보정 계산 후의 값에 직접 가산합니다. 정의 설명 rate_add 보정 레이트에 가산 mul 보정 레이트에 곱함 value_add 값을 직접 가산(모델이나 액션의 숫자 값만) targetType 문자열 열거형 enum {   “model”,   “action” }  버프를 적용할 대상의 종류 버프를 모델의 필드 값에 적용할지, 액션의 파라미터에 적용할지를 지정합니다. “Model\"은 GS2 리소스 모델의 필드를 대상으로 하며, “Action\"은 GS2 액션(예: 획득량이나 소비량)의 파라미터를 대상으로 합니다. 정의 설명 model 모델 action 액션 targetModel BuffTargetModel {targetType} == “model” ※ 버프를 적용할 대상 모델 버프를 적용할 GS2 리소스 모델과 필드를 지정합니다. 모델 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “model” 이면 필수 targetAction BuffTargetAction {targetType} == “action” ※ 버프를 적용할 대상 액션 버프를 적용할 GS2 액션과 파라미터를 지정합니다. 액션 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “action” 이면 필수 priority int  0 ~ 2147483646 버프의 적용 우선순위 버프 엔트리 모델이 평가되는 순서를 결정합니다. 값이 작을수록 먼저 평가됩니다. 동일한 필드를 대상으로 하는 여러 버프가 있는 경우, Rate Add 와 Mul 연산의 상호작용으로 인해 적용 순서가 최종 결과에 영향을 미칩니다. applyPeriodScheduleEventId string ~ 1024자 버프를 적용할 이벤트의 개최 기간 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버프의 유효 기간을 제어하는 GS2-Schedule 이벤트의 GRN입니다. 지정한 경우, 이벤트 개최 기간 중에만 버프가 적용됩니다. 지정하지 않은 경우, 버프는 항상 유효합니다. BuffTargetAction 버프 적용 대상 액션 버프 적용의 대상이 되는 GS2 액션과 파라미터를 정의합니다. 어떤 액션의 어떤 파라미터를 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 targetActionName 문자열 열거형 enum { \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SubExperience\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:ConsumeItemSet\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeSimpleItems\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:ConsumeBigItem\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2Limit:CountUp\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:Withdraw\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Money2:Withdraw\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Stamina:ConsumeStamina\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , }  버프를 적용할 액션의 종류 targetFieldName string  ~ 64자 버프 적용 대상 필드명 버프에 의해 값이 변경되는 대상 액션 상의 수치 파라미터명입니다. 예를 들어 입수 수량, 소비량, 보상 수량 등을 나타내는 파라미터가 대상이 됩니다. conditionGrns List  1 ~ 10 items 버프 적용 조건 GRN 목록 버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다. rate float  0 ~ 1000000 보정 레이트 적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add\"의 경우 기본 레이트에 가산, “Mul\"의 경우 현재 레이트에 곱셈, “Value Add\"의 경우 레이트 계산 후의 파라미터 값에 직접 가산됩니다. BuffTargetGrn 버프 적용 조건이 되는 리소스의 GRN 패턴 버프가 유효해지는 리소스 인스턴스를 좁히기 위한 조건 GRN 패턴입니다. targetModelName 으로 GS2 서비스 모델의 종류를 특정하며, targetGrn 에는 런타임에 해결되는 컨텍스트 변수({region}, {ownerId})를 포함할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 targetModelName string  ~ 64자 버프 적용 조건의 모델 이름 조건 GRN을 해결하기 위해 사용되는 GS2 서비스 모델의 이름입니다. GRN 패턴이 어느 서비스의 리소스 모델을 참조하는지를 특정합니다. targetGrn string  ~ 1024자 버프의 적용 조건 GRN 런타임에 해결되는 컨텍스트 플레이스홀더(예: {region}, {ownerId})를 포함한 GRN 템플릿입니다. 버프의 대상이 되는 특정 리소스 인스턴스를 특정하기 위해 사용됩니다. OverrideBuffRate 버프 적용 레이트 오버라이드 모델 버프 적용 시 특정 BuffEntryModel의 레이트 값을 오버라이드하기 위한 모델입니다. 버프 엔트리 이름과 커스텀 레이트를 지정함으로써 BuffEntryModel에 정의된 기본 레이트를 특정 요청에서 다른 값으로 대체할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rate float  0 ~ 100 레이트 BuffEntryModel에 정의된 기본 레이트 대신 사용할 오버라이드 레이트 값입니다. CurrentBuffMaster 현재 활성화된 버프 엔트리 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 버프 엔트리 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여, 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Buff 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 BuffEntryModelMaster 버프 엔트리 모델 마스터 버프 엔트리 모델 마스터는 게임 내에서 사용되는 버프 엔트리 모델의 편집·관리용 데이터이며, 매니지먼트 콘솔의 마스터 데이터 에디터에 임시로 보관됩니다. 임포트·업데이트 처리를 수행하면 실제로 게임에서 참조되는 버프 엔트리 모델로 반영됩니다. 버프의 적용량은 버프 엔트리 모델로 관리하며, 동일한 대상에 대해 여러 버프 엔트리 모델을 연결할 수 있습니다. 버프 엔트리 모델의 적용 순서는 버프 엔트리 모델의 priority 로 관리하며, priority 값이 작을수록 우선순위가 높아집니다. 버프의 적용 방식은 3종류가 있으며 “Rate Add”, “Mul”, “Value Add\"가 있습니다. Rate Add 는 버프의 적용 레이트에 가산하는 명령이며, Mul 은 버프의 적용 레이트에 곱하는 명령입니다. Value Add 는 버프 보정 계산 후의 값에 가산을 수행하는 명령입니다. 예를 들어 기본 레이트가 1.0 이고 Rate Add 0.2 를 설정하면 버프 적용 레이트는 1.2 가 됩니다. Mul 0.5 를 설정하면 버프 적용 레이트는 현재 레이트의 0.5배가 됩니다. 버프 엔트리 모델에는 GS2-Schedule 의 이벤트를 연결할 수 있으며, 이벤트 개최 기간 중에만 버프를 적용하도록 설정하는 것도 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 buffEntryModelId string ※ ~ 1024자 버프 엔트리 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. expression 문자열 열거형 enum {   “rate_add”,   “mul”,   “value_add” }  버프의 적용 타입 버프 값을 대상에 어떻게 적용할지를 지정합니다. “Rate Add\"는 보정 레이트에 가산(예: 1.0 + 0.2 = 1.2), “Mul\"은 보정 레이트에 곱함(예: 레이트 * 0.5), “Value Add\"는 레이트 기반 보정 계산 후의 값에 직접 가산합니다. 정의 설명 rate_add Rate Add mul Mul value_add Value Add targetType 문자열 열거형 enum {   “model”,   “action” }  버프를 적용할 대상의 종류 버프를 모델의 필드 값에 적용할지, 액션의 파라미터에 적용할지를 지정합니다. “Model\"은 GS2 리소스 모델의 필드를 대상으로 하며, “Action\"은 GS2 액션(예: 획득량이나 소비량)의 파라미터를 대상으로 합니다. 정의 설명 model 모델 action 액션 targetModel BuffTargetModel {targetType} == “model” ※ 버프를 적용할 대상 모델 버프를 적용할 GS2 리소스 모델과 필드를 지정합니다. 모델 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “model” 이면 필수 targetAction BuffTargetAction {targetType} == “action” ※ 버프를 적용할 대상 액션 버프를 적용할 GS2 액션과 파라미터를 지정합니다. 액션 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “action” 이면 필수 priority int  0 ~ 2147483646 버프의 적용 우선순위 버프 엔트리 모델이 평가되는 순서를 결정합니다. 값이 작을수록 먼저 평가됩니다. 동일한 필드를 대상으로 하는 여러 버프가 있는 경우, Rate Add 와 Mul 연산의 상호작용으로 인해 적용 순서가 최종 결과에 영향을 미칩니다. applyPeriodScheduleEventId string ~ 1024자 버프를 적용할 이벤트의 개최 기간 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버프의 유효 기간을 제어하는 GS2-Schedule 이벤트의 GRN입니다. 지정한 경우, 이벤트 개최 기간 중에만 버프가 적용됩니다. 지정하지 않은 경우, 버프는 항상 유효합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 buff . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.DescribeNamespacesRequest ; import io.gs2.buff.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Buff . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Buff . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . describe_namespaces ( buff . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'buff' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 버프 적용 결과에 기반하여 실행되는 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션이 포함됩니다. applyBuffScript ScriptSetting 버프를 적용할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - apply logSetting LogSetting 로그 출력 설정 버프 조작 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. API 요청·응답 로그를 수집하는 GS2-Log의 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 buff . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , ApplyBuffScript : nil , LogSetting : \u0026 buff . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withApplyBuffScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Buff\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.CreateNamespaceRequest ; import io.gs2.buff.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withApplyBuffScript ( null ) . withLogSetting ( new io . gs2 . buff . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Buff . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithApplyBuffScript ( null ) . WithLogSetting ( new Gs2 . Gs2Buff . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Buff . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withApplyBuffScript ( null ) . withLogSetting ( new Gs2Buff . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . create_namespace ( buff . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_apply_buff_script ( None ) . with_log_setting ( buff . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , applyBuffScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , applyBuffScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 buff . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.GetNamespaceStatusRequest ; import io.gs2.buff.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Buff . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Buff . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . get_namespace_status ( buff . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'buff' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 buff . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.GetNamespaceRequest ; import io.gs2.buff.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Buff . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Buff . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . get_namespace ( buff . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 버프 적용 결과에 기반하여 실행되는 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션이 포함됩니다. applyBuffScript ScriptSetting 버프를 적용할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - apply logSetting LogSetting 로그 출력 설정 버프 조작 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. API 요청·응답 로그를 수집하는 GS2-Log의 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 buff . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , ApplyBuffScript : nil , LogSetting : \u0026 buff . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withApplyBuffScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Buff\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.UpdateNamespaceRequest ; import io.gs2.buff.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withApplyBuffScript ( null ) . withLogSetting ( new io . gs2 . buff . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Buff . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithApplyBuffScript ( null ) . WithLogSetting ( new Gs2 . Gs2Buff . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Buff . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withApplyBuffScript ( null ) . withLogSetting ( new Gs2Buff . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . update_namespace ( buff . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_apply_buff_script ( None ) . with_log_setting ( buff . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , applyBuffScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , applyBuffScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 buff . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.DeleteNamespaceRequest ; import io.gs2.buff.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Buff . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Buff . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . delete_namespace ( buff . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 buff . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.GetServiceVersionRequest ; import io.gs2.buff.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Buff . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Buff . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . get_service_version ( buff . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 buff . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.DumpUserDataByUserIdRequest ; import io.gs2.buff.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Buff . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Buff . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . dump_user_data_by_user_id ( buff . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'buff' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 buff . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.buff.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Buff . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Buff . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( buff . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'buff' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 buff . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.CleanUserDataByUserIdRequest ; import io.gs2.buff.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Buff . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Buff . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . clean_user_data_by_user_id ( buff . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'buff' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 buff . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.buff.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Buff . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Buff . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( buff . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'buff' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 buff . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.buff.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Buff . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Buff . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( buff . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'buff' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 buff . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.ImportUserDataByUserIdRequest ; import io.gs2.buff.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Buff . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Buff . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . import_user_data_by_user_id ( buff . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'buff' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 buff . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.CheckImportUserDataByUserIdRequest ; import io.gs2.buff.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Buff . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Buff . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( buff . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'buff' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; applyBuff 버프 적용 지정된 네임스페이스 내의 모든 버프 엔트리 모델을 평가하여, 현재 로그인 중인 사용자에게 해당하는 버프를 적용합니다. 버프는 우선순위(값이 작을수록 먼저 평가)에 따라 평가되며, Rate Add(보정 레이트에 가산), Mul(보정 레이트에 곱셈), Value Add(값에 직접 가산)의 3가지 적용 방식을 지원합니다. 버프 엔트리 모델이 GS2-Schedule의 이벤트와 연결되어 있는 경우, 이벤트 개최 기간 중에만 적용됩니다. 적용된 버프의 목록과, 버프의 적용 상태를 기록한 업데이트된 컨텍스트 스택이 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 items List 적용한 버프 목록 newContextStack string 버프의 적용 상태를 기록한 컨텍스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . ApplyBuff ( \u0026 buff . ApplyBuffRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items newContextStack := result . NewContextStack use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\ApplyBuffRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e applyBuff ( ( new ApplyBuffRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); $newContextStack = $result -\u003e getNewContextStack (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.ApplyBuffRequest ; import io.gs2.buff.result.ApplyBuffResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { ApplyBuffResult result = client . applyBuff ( new ApplyBuffRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List BuffEntryModel \u003e items = result . getItems (); String newContextStack = result . getNewContextStack (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . ApplyBuffResult \u003e asyncResult = null ; yield return client . ApplyBuff ( new Gs2 . Gs2Buff . Request . ApplyBuffRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var newContextStack = result . NewContextStack ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . applyBuff ( new Gs2Buff . ApplyBuffRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); const newContextStack = result . getNewContextStack (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . apply_buff ( buff . ApplyBuffRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items new_context_stack = result . new_context_stack except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.apply_buff ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; newContextStack = result.newContextStack ; client = gs2 ( 'buff' ) api_result_handler = client.apply_buff_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; newContextStack = result.newContextStack ; applyBuffByUserId 사용자 ID를 지정하여 버프 적용 지정된 네임스페이스 내의 모든 버프 엔트리 모델을 평가하여, 지정된 사용자에게 해당하는 버프를 적용합니다. 버프는 우선순위(값이 작을수록 먼저 평가)에 따라 평가되며, Rate Add(보정 레이트에 가산), Mul(보정 레이트에 곱셈), Value Add(값에 직접 가산)의 3가지 적용 방식을 지원합니다. 버프 엔트리 모델이 GS2-Schedule의 이벤트와 연결되어 있는 경우, 이벤트 개최 기간 중에만 적용됩니다. 적용된 버프의 목록과, 버프의 적용 상태를 기록한 업데이트된 컨텍스트 스택이 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 적용한 버프 목록 newContextStack string 버프의 적용 상태를 기록한 컨텍스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . ApplyBuffByUserId ( \u0026 buff . ApplyBuffByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items newContextStack := result . NewContextStack use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\ApplyBuffByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e applyBuffByUserId ( ( new ApplyBuffByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $newContextStack = $result -\u003e getNewContextStack (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.ApplyBuffByUserIdRequest ; import io.gs2.buff.result.ApplyBuffByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { ApplyBuffByUserIdResult result = client . applyBuffByUserId ( new ApplyBuffByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List BuffEntryModel \u003e items = result . getItems (); String newContextStack = result . getNewContextStack (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . ApplyBuffByUserIdResult \u003e asyncResult = null ; yield return client . ApplyBuffByUserId ( new Gs2 . Gs2Buff . Request . ApplyBuffByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var newContextStack = result . NewContextStack ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . applyBuffByUserId ( new Gs2Buff . ApplyBuffByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const newContextStack = result . getNewContextStack (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . apply_buff_by_user_id ( buff . ApplyBuffByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items new_context_stack = result . new_context_stack except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.apply_buff_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; newContextStack = result.newContextStack ; client = gs2 ( 'buff' ) api_result_handler = client.apply_buff_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; newContextStack = result.newContextStack ; describeBuffEntryModels 버프 엔트리 모델 목록 취득 지정된 네임스페이스에서 현재 활성화되어 있는 모든 버프 엔트리 모델을 취득합니다. 버프 엔트리 모델은 게임 데이터에 적용 가능한 버프 효과를 정의하며, 적용 방식(Rate Add, Mul, Value Add), 대상(모델 또는 액션), 우선순위 등이 포함됩니다. 마스터판과 달리 활성화(공개)된 모델만 반환하며, 페이지네이션은 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 버프 엔트리 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . DescribeBuffEntryModels ( \u0026 buff . DescribeBuffEntryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\DescribeBuffEntryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e describeBuffEntryModels ( ( new DescribeBuffEntryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.DescribeBuffEntryModelsRequest ; import io.gs2.buff.result.DescribeBuffEntryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { DescribeBuffEntryModelsResult result = client . describeBuffEntryModels ( new DescribeBuffEntryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List BuffEntryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . DescribeBuffEntryModelsResult \u003e asyncResult = null ; yield return client . DescribeBuffEntryModels ( new Gs2 . Gs2Buff . Request . DescribeBuffEntryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . describeBuffEntryModels ( new Gs2Buff . DescribeBuffEntryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . describe_buff_entry_models ( buff . DescribeBuffEntryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.describe_buff_entry_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'buff' ) api_result_handler = client.describe_buff_entry_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getBuffEntryModel 버프 엔트리 모델 조회 지정된 네임스페이스에서 지정된 이름의 현재 활성화된 버프 엔트리 모델을 조회합니다. 조회되는 정보에는 적용 방식(Rate Add, Mul, Value Add), 대상 종류(모델 또는 액션), 대상 상세 정보, 우선순위, 그리고 설정되어 있는 경우 연관된 GS2-Schedule 이벤트 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. buffEntryName string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item BuffEntryModel 버프 엔트리 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . GetBuffEntryModel ( \u0026 buff . GetBuffEntryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BuffEntryName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\GetBuffEntryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e getBuffEntryModel ( ( new GetBuffEntryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBuffEntryName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.GetBuffEntryModelRequest ; import io.gs2.buff.result.GetBuffEntryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { GetBuffEntryModelResult result = client . getBuffEntryModel ( new GetBuffEntryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withBuffEntryName ( \"character-level\" ) ); BuffEntryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . GetBuffEntryModelResult \u003e asyncResult = null ; yield return client . GetBuffEntryModel ( new Gs2 . Gs2Buff . Request . GetBuffEntryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBuffEntryName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . getBuffEntryModel ( new Gs2Buff . GetBuffEntryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withBuffEntryName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . get_buff_entry_model ( buff . GetBuffEntryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_buff_entry_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.get_buff_entry_model ({ namespaceName = \"namespace-0001\" , buffEntryName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.get_buff_entry_model_async ({ namespaceName = \"namespace-0001\" , buffEntryName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 버프 엔트리 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 버프 엔트리 모델 마스터 데이터를 활성화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 가져오기에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentBuffMaster 활성화 가능한 버프 엔트리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 buff . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.ExportMasterRequest ; import io.gs2.buff.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentBuffMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Buff . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Buff . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . export_master ( buff . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentBuffMaster 현재 활성화된 버프 엔트리 모델의 마스터 데이터를 취득 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 버프 엔트리 모델의 마스터 데이터를 조회합니다. 이는 편집 가능한 마스터 데이터와 달리, 실제로 운영 환경에서 사용되고 있는 구성을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentBuffMaster 현재 활성화된 버프 엔트리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . GetCurrentBuffMaster ( \u0026 buff . GetCurrentBuffMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\GetCurrentBuffMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e getCurrentBuffMaster ( ( new GetCurrentBuffMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.GetCurrentBuffMasterRequest ; import io.gs2.buff.result.GetCurrentBuffMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { GetCurrentBuffMasterResult result = client . getCurrentBuffMaster ( new GetCurrentBuffMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentBuffMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . GetCurrentBuffMasterResult \u003e asyncResult = null ; yield return client . GetCurrentBuffMaster ( new Gs2 . Gs2Buff . Request . GetCurrentBuffMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . getCurrentBuffMaster ( new Gs2Buff . GetCurrentBuffMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . get_current_buff_master ( buff . GetCurrentBuffMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.get_current_buff_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.get_current_buff_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentBuffMaster 현재 활성화된 버프 엔트리 모델의 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. 업로드로 취득한 토큰을 전달하여 UpdateCurrentBuffMaster를 실행함으로써 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentBuffMaster ( \u0026 buff . PreUpdateCurrentBuffMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\PreUpdateCurrentBuffMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentBuffMaster ( ( new PreUpdateCurrentBuffMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.PreUpdateCurrentBuffMasterRequest ; import io.gs2.buff.result.PreUpdateCurrentBuffMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { PreUpdateCurrentBuffMasterResult result = client . preUpdateCurrentBuffMaster ( new PreUpdateCurrentBuffMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . PreUpdateCurrentBuffMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentBuffMaster ( new Gs2 . Gs2Buff . Request . PreUpdateCurrentBuffMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . preUpdateCurrentBuffMaster ( new Gs2Buff . PreUpdateCurrentBuffMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . pre_update_current_buff_master ( buff . PreUpdateCurrentBuffMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.pre_update_current_buff_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'buff' ) api_result_handler = client.pre_update_current_buff_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentBuffMaster 현재 활성화된 버프 엔트리 모델의 마스터 데이터를 갱신 지정된 네임스페이스의 버프 엔트리 모델의 마스터 데이터를 갱신하고 활성화(공개)합니다. 2가지 모드를 지원합니다: 인라인 마스터 데이터를 위한 ‘direct’ 모드와, 사전에 업로드된 마스터 데이터를 위한 ‘preUpload’ 모드입니다. 1MB를 초과하는 마스터 데이터의 경우, 3단계 갱신 흐름(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))을 사용해 주세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentBuffMaster 갱신된 현재 활성화된 버프 엔트리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentBuffMaster ( \u0026 buff . UpdateCurrentBuffMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2024-04-15\\\", \\\"buffEntryModels\\\": [{\\\"name\\\": \\\"buff-0001\\\", \\\"metadata\\\": \\\"BUFF_0001\\\", \\\"targetType\\\": \\\"model\\\", \\\"targetModel\\\": {\\\"targetModelName\\\": \\\"Gs2Experience:Status\\\", \\\"targetFieldName\\\": \\\"rankCapValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}, {\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\\\"}], \\\"rate\\\": 1.0}, \\\"expression\\\": \\\"rate_add\\\", \\\"priority\\\": 1}, {\\\"name\\\": \\\"buff-0002\\\", \\\"metadata\\\": \\\"BUFF_0002\\\", \\\"targetType\\\": \\\"action\\\", \\\"targetAction\\\": {\\\"targetActionName\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"targetFieldName\\\": \\\"experienceValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}], \\\"rate\\\": 2.0}, \\\"expression\\\": \\\"mul\\\", \\\"priority\\\": 2}, {\\\"name\\\": \\\"buff-0003\\\", \\\"metadata\\\": \\\"BUFF_0003\\\", \\\"targetType\\\": \\\"model\\\", \\\"targetModel\\\": {\\\"targetModelName\\\": \\\"Gs2Experience:Status\\\", \\\"targetFieldName\\\": \\\"rankCapValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}], \\\"rate\\\": 3.0}, \\\"expression\\\": \\\"mul\\\", \\\"priority\\\": 3}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\UpdateCurrentBuffMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e updateCurrentBuffMaster ( ( new UpdateCurrentBuffMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2024-04-15 \\\" , \\\" buffEntryModels \\\" : [{ \\\" name \\\" : \\\" buff-0001 \\\" , \\\" metadata \\\" : \\\" BUFF_0001 \\\" , \\\" targetType \\\" : \\\" model \\\" , \\\" targetModel \\\" : { \\\" targetModelName \\\" : \\\" Gs2Experience:Status \\\" , \\\" targetFieldName \\\" : \\\" rankCapValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }, { \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002 \\\" }], \\\" rate \\\" : 1.0}, \\\" expression \\\" : \\\" rate_add \\\" , \\\" priority \\\" : 1}, { \\\" name \\\" : \\\" buff-0002 \\\" , \\\" metadata \\\" : \\\" BUFF_0002 \\\" , \\\" targetType \\\" : \\\" action \\\" , \\\" targetAction \\\" : { \\\" targetActionName \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" targetFieldName \\\" : \\\" experienceValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }], \\\" rate \\\" : 2.0}, \\\" expression \\\" : \\\" mul \\\" , \\\" priority \\\" : 2}, { \\\" name \\\" : \\\" buff-0003 \\\" , \\\" metadata \\\" : \\\" BUFF_0003 \\\" , \\\" targetType \\\" : \\\" model \\\" , \\\" targetModel \\\" : { \\\" targetModelName \\\" : \\\" Gs2Experience:Status \\\" , \\\" targetFieldName \\\" : \\\" rankCapValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }], \\\" rate \\\" : 3.0}, \\\" expression \\\" : \\\" mul \\\" , \\\" priority \\\" : 3}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.UpdateCurrentBuffMasterRequest ; import io.gs2.buff.result.UpdateCurrentBuffMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { UpdateCurrentBuffMasterResult result = client . updateCurrentBuffMaster ( new UpdateCurrentBuffMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-04-15\\\", \\\"buffEntryModels\\\": [{\\\"name\\\": \\\"buff-0001\\\", \\\"metadata\\\": \\\"BUFF_0001\\\", \\\"targetType\\\": \\\"model\\\", \\\"targetModel\\\": {\\\"targetModelName\\\": \\\"Gs2Experience:Status\\\", \\\"targetFieldName\\\": \\\"rankCapValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}, {\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\\\"}], \\\"rate\\\": 1.0}, \\\"expression\\\": \\\"rate_add\\\", \\\"priority\\\": 1}, {\\\"name\\\": \\\"buff-0002\\\", \\\"metadata\\\": \\\"BUFF_0002\\\", \\\"targetType\\\": \\\"action\\\", \\\"targetAction\\\": {\\\"targetActionName\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"targetFieldName\\\": \\\"experienceValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}], \\\"rate\\\": 2.0}, \\\"expression\\\": \\\"mul\\\", \\\"priority\\\": 2}, {\\\"name\\\": \\\"buff-0003\\\", \\\"metadata\\\": \\\"BUFF_0003\\\", \\\"targetType\\\": \\\"model\\\", \\\"targetModel\\\": {\\\"targetModelName\\\": \\\"Gs2Experience:Status\\\", \\\"targetFieldName\\\": \\\"rankCapValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}], \\\"rate\\\": 3.0}, \\\"expression\\\": \\\"mul\\\", \\\"priority\\\": 3}]}\" ) . withUploadToken ( null ) ); CurrentBuffMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . UpdateCurrentBuffMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentBuffMaster ( new Gs2 . Gs2Buff . Request . UpdateCurrentBuffMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2024-04-15\\\", \\\"buffEntryModels\\\": [{\\\"name\\\": \\\"buff-0001\\\", \\\"metadata\\\": \\\"BUFF_0001\\\", \\\"targetType\\\": \\\"model\\\", \\\"targetModel\\\": {\\\"targetModelName\\\": \\\"Gs2Experience:Status\\\", \\\"targetFieldName\\\": \\\"rankCapValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}, {\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\\\"}], \\\"rate\\\": 1.0}, \\\"expression\\\": \\\"rate_add\\\", \\\"priority\\\": 1}, {\\\"name\\\": \\\"buff-0002\\\", \\\"metadata\\\": \\\"BUFF_0002\\\", \\\"targetType\\\": \\\"action\\\", \\\"targetAction\\\": {\\\"targetActionName\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"targetFieldName\\\": \\\"experienceValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}], \\\"rate\\\": 2.0}, \\\"expression\\\": \\\"mul\\\", \\\"priority\\\": 2}, {\\\"name\\\": \\\"buff-0003\\\", \\\"metadata\\\": \\\"BUFF_0003\\\", \\\"targetType\\\": \\\"model\\\", \\\"targetModel\\\": {\\\"targetModelName\\\": \\\"Gs2Experience:Status\\\", \\\"targetFieldName\\\": \\\"rankCapValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}], \\\"rate\\\": 3.0}, \\\"expression\\\": \\\"mul\\\", \\\"priority\\\": 3}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . updateCurrentBuffMaster ( new Gs2Buff . UpdateCurrentBuffMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-04-15\\\", \\\"buffEntryModels\\\": [{\\\"name\\\": \\\"buff-0001\\\", \\\"metadata\\\": \\\"BUFF_0001\\\", \\\"targetType\\\": \\\"model\\\", \\\"targetModel\\\": {\\\"targetModelName\\\": \\\"Gs2Experience:Status\\\", \\\"targetFieldName\\\": \\\"rankCapValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}, {\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\\\"}], \\\"rate\\\": 1.0}, \\\"expression\\\": \\\"rate_add\\\", \\\"priority\\\": 1}, {\\\"name\\\": \\\"buff-0002\\\", \\\"metadata\\\": \\\"BUFF_0002\\\", \\\"targetType\\\": \\\"action\\\", \\\"targetAction\\\": {\\\"targetActionName\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"targetFieldName\\\": \\\"experienceValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}], \\\"rate\\\": 2.0}, \\\"expression\\\": \\\"mul\\\", \\\"priority\\\": 2}, {\\\"name\\\": \\\"buff-0003\\\", \\\"metadata\\\": \\\"BUFF_0003\\\", \\\"targetType\\\": \\\"model\\\", \\\"targetModel\\\": {\\\"targetModelName\\\": \\\"Gs2Experience:Status\\\", \\\"targetFieldName\\\": \\\"rankCapValue\\\", \\\"conditionGrns\\\": [{\\\"targetModelName\\\": \\\"Gs2Experience:ExperienceModel\\\", \\\"targetGrn\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\"}], \\\"rate\\\": 3.0}, \\\"expression\\\": \\\"mul\\\", \\\"priority\\\": 3}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . update_current_buff_master ( buff . UpdateCurrentBuffMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2024-04-15\", \"buffEntryModels\": [{\"name\": \"buff-0001\", \"metadata\": \"BUFF_0001\", \"targetType\": \"model\", \"targetModel\": {\"targetModelName\": \"Gs2Experience:Status\", \"targetFieldName\": \"rankCapValue\", \"conditionGrns\": [{\"targetModelName\": \"Gs2Experience:ExperienceModel\", \"targetGrn\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\"}, {\"targetModelName\": \"Gs2Experience:ExperienceModel\", \"targetGrn\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\"}], \"rate\": 1.0}, \"expression\": \"rate_add\", \"priority\": 1}, {\"name\": \"buff-0002\", \"metadata\": \"BUFF_0002\", \"targetType\": \"action\", \"targetAction\": {\"targetActionName\": \"Gs2Experience:AddExperienceByUserId\", \"targetFieldName\": \"experienceValue\", \"conditionGrns\": [{\"targetModelName\": \"Gs2Experience:ExperienceModel\", \"targetGrn\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\"}], \"rate\": 2.0}, \"expression\": \"mul\", \"priority\": 2}, {\"name\": \"buff-0003\", \"metadata\": \"BUFF_0003\", \"targetType\": \"model\", \"targetModel\": {\"targetModelName\": \"Gs2Experience:Status\", \"targetFieldName\": \"rankCapValue\", \"conditionGrns\": [{\"targetModelName\": \"Gs2Experience:ExperienceModel\", \"targetGrn\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\"}], \"rate\": 3.0}, \"expression\": \"mul\", \"priority\": 3}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.update_current_buff_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-04-15 \\\" , \\\" buffEntryModels \\\" : [{ \\\" name \\\" : \\\" buff-0001 \\\" , \\\" metadata \\\" : \\\" BUFF_0001 \\\" , \\\" targetType \\\" : \\\" model \\\" , \\\" targetModel \\\" : { \\\" targetModelName \\\" : \\\" Gs2Experience:Status \\\" , \\\" targetFieldName \\\" : \\\" rankCapValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }, { \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002 \\\" }], \\\" rate \\\" : 1.0}, \\\" expression \\\" : \\\" rate_add \\\" , \\\" priority \\\" : 1}, { \\\" name \\\" : \\\" buff-0002 \\\" , \\\" metadata \\\" : \\\" BUFF_0002 \\\" , \\\" targetType \\\" : \\\" action \\\" , \\\" targetAction \\\" : { \\\" targetActionName \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" targetFieldName \\\" : \\\" experienceValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }], \\\" rate \\\" : 2.0}, \\\" expression \\\" : \\\" mul \\\" , \\\" priority \\\" : 2}, { \\\" name \\\" : \\\" buff-0003 \\\" , \\\" metadata \\\" : \\\" BUFF_0003 \\\" , \\\" targetType \\\" : \\\" model \\\" , \\\" targetModel \\\" : { \\\" targetModelName \\\" : \\\" Gs2Experience:Status \\\" , \\\" targetFieldName \\\" : \\\" rankCapValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }], \\\" rate \\\" : 3.0}, \\\" expression \\\" : \\\" mul \\\" , \\\" priority \\\" : 3}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.update_current_buff_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-04-15 \\\" , \\\" buffEntryModels \\\" : [{ \\\" name \\\" : \\\" buff-0001 \\\" , \\\" metadata \\\" : \\\" BUFF_0001 \\\" , \\\" targetType \\\" : \\\" model \\\" , \\\" targetModel \\\" : { \\\" targetModelName \\\" : \\\" Gs2Experience:Status \\\" , \\\" targetFieldName \\\" : \\\" rankCapValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }, { \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002 \\\" }], \\\" rate \\\" : 1.0}, \\\" expression \\\" : \\\" rate_add \\\" , \\\" priority \\\" : 1}, { \\\" name \\\" : \\\" buff-0002 \\\" , \\\" metadata \\\" : \\\" BUFF_0002 \\\" , \\\" targetType \\\" : \\\" action \\\" , \\\" targetAction \\\" : { \\\" targetActionName \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" targetFieldName \\\" : \\\" experienceValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }], \\\" rate \\\" : 2.0}, \\\" expression \\\" : \\\" mul \\\" , \\\" priority \\\" : 2}, { \\\" name \\\" : \\\" buff-0003 \\\" , \\\" metadata \\\" : \\\" BUFF_0003 \\\" , \\\" targetType \\\" : \\\" model \\\" , \\\" targetModel \\\" : { \\\" targetModelName \\\" : \\\" Gs2Experience:Status \\\" , \\\" targetFieldName \\\" : \\\" rankCapValue \\\" , \\\" conditionGrns \\\" : [{ \\\" targetModelName \\\" : \\\" Gs2Experience:ExperienceModel \\\" , \\\" targetGrn \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" }], \\\" rate \\\" : 3.0}, \\\" expression \\\" : \\\" mul \\\" , \\\" priority \\\" : 3}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentBuffMasterFromGitHub 현재 활성화된 버프 엔트리 모델의 마스터 데이터를 GitHub에서 갱신 GitHub 리포지토리에서 마스터 데이터를 직접 가져와 갱신하고 활성화(공개)합니다. 체크아웃 설정에는 사용할 리포지토리, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고 직접 배포하는 경우에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentBuffMaster 갱신된 현재 활성화된 버프 엔트리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentBuffMasterFromGitHub ( \u0026 buff . UpdateCurrentBuffMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 buff . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\UpdateCurrentBuffMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e updateCurrentBuffMasterFromGitHub ( ( new UpdateCurrentBuffMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.UpdateCurrentBuffMasterFromGitHubRequest ; import io.gs2.buff.result.UpdateCurrentBuffMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { UpdateCurrentBuffMasterFromGitHubResult result = client . updateCurrentBuffMasterFromGitHub ( new UpdateCurrentBuffMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentBuffMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . UpdateCurrentBuffMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentBuffMasterFromGitHub ( new Gs2 . Gs2Buff . Request . UpdateCurrentBuffMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Buff . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . updateCurrentBuffMasterFromGitHub ( new Gs2Buff . UpdateCurrentBuffMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Buff . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . update_current_buff_master_from_git_hub ( buff . UpdateCurrentBuffMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( buff . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.update_current_buff_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.update_current_buff_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeBuffEntryModelMasters 버프 엔트리 모델 마스터 목록 조회 지정된 네임스페이스의 버프 엔트리 모델 마스터의 페이지네이션 목록을 조회합니다. 버프 엔트리 모델 마스터는 게임 데이터에 적용 가능한 버프 효과를 정의하는 버프 엔트리 모델의 편집 가능한 버전입니다. 마스터 데이터에 대한 변경 사항은 현재 버프 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 버프 엔트리 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 버프 엔트리 모델 마스터의 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . DescribeBuffEntryModelMasters ( \u0026 buff . DescribeBuffEntryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\DescribeBuffEntryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e describeBuffEntryModelMasters ( ( new DescribeBuffEntryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.DescribeBuffEntryModelMastersRequest ; import io.gs2.buff.result.DescribeBuffEntryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { DescribeBuffEntryModelMastersResult result = client . describeBuffEntryModelMasters ( new DescribeBuffEntryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List BuffEntryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . DescribeBuffEntryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeBuffEntryModelMasters ( new Gs2 . Gs2Buff . Request . DescribeBuffEntryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . describeBuffEntryModelMasters ( new Gs2Buff . DescribeBuffEntryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . describe_buff_entry_model_masters ( buff . DescribeBuffEntryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.describe_buff_entry_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'buff' ) api_result_handler = client.describe_buff_entry_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createBuffEntryModelMaster 버프 엔트리 모델 마스터를 신규 생성 게임 데이터에 적용 가능한 버프 효과를 정의하는 새로운 버프 엔트리 모델 마스터를 생성합니다. 이름, 적용 방식(Rate Add, Mul, Value Add), 대상 종류(모델 또는 액션), 대상 상세 정보, 우선순위를 설정할 수 있으며, 선택적으로 GS2-Schedule 이벤트와 연동하여 버프를 특정 기간으로 제한할 수도 있습니다. 동일한 대상에 여러 버프가 적용되는 경우, 우선순위 값이 작은 버프가 먼저 평가됩니다. 변경 사항은 현재 버프 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. expression 문자열 열거형 enum {   “rate_add”,   “mul”,   “value_add” }  버프의 적용 타입 버프 값을 대상에 어떻게 적용할지를 지정합니다. “Rate Add\"는 보정 레이트에 가산(예: 1.0 + 0.2 = 1.2), “Mul\"은 보정 레이트에 곱함(예: 레이트 * 0.5), “Value Add\"는 레이트 기반 보정 계산 후의 값에 직접 가산합니다. 정의 설명 rate_add Rate Add mul Mul value_add Value Add targetType 문자열 열거형 enum {   “model”,   “action” }  버프를 적용할 대상의 종류 버프를 모델의 필드 값에 적용할지, 액션의 파라미터에 적용할지를 지정합니다. “Model\"은 GS2 리소스 모델의 필드를 대상으로 하며, “Action\"은 GS2 액션(예: 획득량이나 소비량)의 파라미터를 대상으로 합니다. 정의 설명 model 모델 action 액션 targetModel BuffTargetModel {targetType} == “model” ※ 버프를 적용할 대상 모델 버프를 적용할 GS2 리소스 모델과 필드를 지정합니다. 모델 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “model” 이면 필수 targetAction BuffTargetAction {targetType} == “action” ※ 버프를 적용할 대상 액션 버프를 적용할 GS2 액션과 파라미터를 지정합니다. 액션 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “action” 이면 필수 priority int  0 ~ 2147483646 버프의 적용 우선순위 버프 엔트리 모델이 평가되는 순서를 결정합니다. 값이 작을수록 먼저 평가됩니다. 동일한 필드를 대상으로 하는 여러 버프가 있는 경우, Rate Add 와 Mul 연산의 상호작용으로 인해 적용 순서가 최종 결과에 영향을 미칩니다. applyPeriodScheduleEventId string ~ 1024자 버프를 적용할 이벤트의 개최 기간 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버프의 유효 기간을 제어하는 GS2-Schedule 이벤트의 GRN입니다. 지정한 경우, 이벤트 개최 기간 중에만 버프가 적용됩니다. 지정하지 않은 경우, 버프는 항상 유효합니다. Result 타입 설명 item BuffEntryModelMaster 생성한 버프 엔트리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . CreateBuffEntryModelMaster ( \u0026 buff . CreateBuffEntryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"buff-0001\" ), Description : nil , Metadata : nil , Expression : pointy . String ( \"add\" ), TargetType : pointy . String ( \"model\" ), TargetModel : \u0026 buff . BuffTargetModel { TargetModelName : pointy . String ( \"Gs2Experience:Status\" ), TargetFieldName : pointy . String ( \"rankCapValue\" ), ConditionGrns : [] buff . BuffTargetGrn { buff . BuffTargetGrn { TargetModelName : pointy . String ( \"Gs2Experience:RateModel\" ), TargetGrn : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ), }, }, Rate : pointy . Float32 ( 1.0 ), }, TargetAction : nil , Priority : pointy . Int32 ( 1 ), ApplyPeriodScheduleEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\CreateBuffEntryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e createBuffEntryModelMaster ( ( new CreateBuffEntryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"buff-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withExpression ( \"add\" ) -\u003e withTargetType ( \"model\" ) -\u003e withTargetModel (( new \\Gs2\\Buff\\Model\\BuffTargetModel ()) -\u003e withTargetModelName ( \"Gs2Experience:Status\" ) -\u003e withTargetFieldName ( \"rankCapValue\" ) -\u003e withConditionGrns ([ ( new \\Gs2\\Buff\\Model\\BuffTargetGrn ()) -\u003e withTargetModelName ( \"Gs2Experience:RateModel\" ) -\u003e withTargetGrn ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ), ]) -\u003e withRate ( 1.0 )) -\u003e withTargetAction ( null ) -\u003e withPriority ( 1 ) -\u003e withApplyPeriodScheduleEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.CreateBuffEntryModelMasterRequest ; import io.gs2.buff.result.CreateBuffEntryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { CreateBuffEntryModelMasterResult result = client . createBuffEntryModelMaster ( new CreateBuffEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"buff-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withExpression ( \"add\" ) . withTargetType ( \"model\" ) . withTargetModel ( new io . gs2 . buff . model . BuffTargetModel () . withTargetModelName ( \"Gs2Experience:Status\" ) . withTargetFieldName ( \"rankCapValue\" ) . withConditionGrns ( Arrays . asList ( new io . gs2 . buff . model . BuffTargetGrn () . withTargetModelName ( \"Gs2Experience:RateModel\" ) . withTargetGrn ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ) )) . withRate ( 1 . 0f )) . withTargetAction ( null ) . withPriority ( 1 ) . withApplyPeriodScheduleEventId ( null ) ); BuffEntryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . CreateBuffEntryModelMasterResult \u003e asyncResult = null ; yield return client . CreateBuffEntryModelMaster ( new Gs2 . Gs2Buff . Request . CreateBuffEntryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"buff-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithExpression ( \"add\" ) . WithTargetType ( \"model\" ) . WithTargetModel ( new Gs2 . Gs2Buff . Model . BuffTargetModel () . WithTargetModelName ( \"Gs2Experience:Status\" ) . WithTargetFieldName ( \"rankCapValue\" ) . WithConditionGrns ( new Gs2 . Gs2Buff . Model . BuffTargetGrn [] { new Gs2 . Gs2Buff . Model . BuffTargetGrn () . WithTargetModelName ( \"Gs2Experience:RateModel\" ) . WithTargetGrn ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ), }) . WithRate ( 1.0f )) . WithTargetAction ( null ) . WithPriority ( 1 ) . WithApplyPeriodScheduleEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . createBuffEntryModelMaster ( new Gs2Buff . CreateBuffEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"buff-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withExpression ( \"add\" ) . withTargetType ( \"model\" ) . withTargetModel ( new Gs2Buff . model . BuffTargetModel () . withTargetModelName ( \"Gs2Experience:Status\" ) . withTargetFieldName ( \"rankCapValue\" ) . withConditionGrns ([ new Gs2Buff . model . BuffTargetGrn () . withTargetModelName ( \"Gs2Experience:RateModel\" ) . withTargetGrn ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ), ]) . withRate ( 1.0 )) . withTargetAction ( null ) . withPriority ( 1 ) . withApplyPeriodScheduleEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . create_buff_entry_model_master ( buff . CreateBuffEntryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'buff-0001' ) . with_description ( None ) . with_metadata ( None ) . with_expression ( 'add' ) . with_target_type ( 'model' ) . with_target_model ( buff . BuffTargetModel () . with_target_model_name ( 'Gs2Experience:Status' ) . with_target_field_name ( 'rankCapValue' ) . with_condition_grns ([ buff . BuffTargetGrn () . with_target_model_name ( 'Gs2Experience:RateModel' ) . with_target_grn ( 'grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001' ), ]) . with_rate ( 1.0 )) . with_target_action ( None ) . with_priority ( 1 ) . with_apply_period_schedule_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.create_buff_entry_model_master ({ namespaceName = \"namespace-0001\" , name = \"buff-0001\" , description = nil , metadata = nil , expression = \"add\" , targetType = \"model\" , targetModel = { targetModelName = \"Gs2Experience:Status\" , targetFieldName = \"rankCapValue\" , conditionGrns = { { targetModelName = \"Gs2Experience:RateModel\" , targetGrn = \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" , } }, rate = 1.0 , }, targetAction = nil , priority = 1 , applyPeriodScheduleEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.create_buff_entry_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"buff-0001\" , description = nil , metadata = nil , expression = \"add\" , targetType = \"model\" , targetModel = { targetModelName = \"Gs2Experience:Status\" , targetFieldName = \"rankCapValue\" , conditionGrns = { { targetModelName = \"Gs2Experience:RateModel\" , targetGrn = \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" , } }, rate = 1.0 , }, targetAction = nil , priority = 1 , applyPeriodScheduleEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBuffEntryModelMaster 버프 엔트리 모델 마스터를 취득 지정된 네임스페이스에서 이름을 지정하여 특정 버프 엔트리 모델 마스터를 조회합니다. 조회되는 정보에는 적용 방식, 대상 종류, 대상 상세 정보, 우선순위, 메타데이터, 그리고 설정되어 있는 경우 연관된 GS2-Schedule 이벤트 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. buffEntryName string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item BuffEntryModelMaster 버프 엔트리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . GetBuffEntryModelMaster ( \u0026 buff . GetBuffEntryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BuffEntryName : pointy . String ( \"buff-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\GetBuffEntryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e getBuffEntryModelMaster ( ( new GetBuffEntryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBuffEntryName ( \"buff-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.GetBuffEntryModelMasterRequest ; import io.gs2.buff.result.GetBuffEntryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { GetBuffEntryModelMasterResult result = client . getBuffEntryModelMaster ( new GetBuffEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBuffEntryName ( \"buff-0001\" ) ); BuffEntryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . GetBuffEntryModelMasterResult \u003e asyncResult = null ; yield return client . GetBuffEntryModelMaster ( new Gs2 . Gs2Buff . Request . GetBuffEntryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBuffEntryName ( \"buff-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . getBuffEntryModelMaster ( new Gs2Buff . GetBuffEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBuffEntryName ( \"buff-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . get_buff_entry_model_master ( buff . GetBuffEntryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_buff_entry_name ( 'buff-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.get_buff_entry_model_master ({ namespaceName = \"namespace-0001\" , buffEntryName = \"buff-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.get_buff_entry_model_master_async ({ namespaceName = \"namespace-0001\" , buffEntryName = \"buff-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateBuffEntryModelMaster 버프 엔트리 모델 마스터를 갱신 지정된 버프 엔트리 모델 마스터를 갱신합니다. 설명, 메타데이터, 적용 방식(Rate Add, Mul, Value Add), 대상 종류, 대상 상세 정보, 우선순위, 그리고 연관된 GS2-Schedule 이벤트를 변경할 수 있습니다. 변경 사항은 현재 버프 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. buffEntryName string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. expression 문자열 열거형 enum {   “rate_add”,   “mul”,   “value_add” }  버프의 적용 타입 버프 값을 대상에 어떻게 적용할지를 지정합니다. “Rate Add\"는 보정 레이트에 가산(예: 1.0 + 0.2 = 1.2), “Mul\"은 보정 레이트에 곱함(예: 레이트 * 0.5), “Value Add\"는 레이트 기반 보정 계산 후의 값에 직접 가산합니다. 정의 설명 rate_add Rate Add mul Mul value_add Value Add targetType 문자열 열거형 enum {   “model”,   “action” }  버프를 적용할 대상의 종류 버프를 모델의 필드 값에 적용할지, 액션의 파라미터에 적용할지를 지정합니다. “Model\"은 GS2 리소스 모델의 필드를 대상으로 하며, “Action\"은 GS2 액션(예: 획득량이나 소비량)의 파라미터를 대상으로 합니다. 정의 설명 model 모델 action 액션 targetModel BuffTargetModel {targetType} == “model” ※ 버프를 적용할 대상 모델 버프를 적용할 GS2 리소스 모델과 필드를 지정합니다. 모델 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “model” 이면 필수 targetAction BuffTargetAction {targetType} == “action” ※ 버프를 적용할 대상 액션 버프를 적용할 GS2 액션과 파라미터를 지정합니다. 액션 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “action” 이면 필수 priority int  0 ~ 2147483646 버프의 적용 우선순위 버프 엔트리 모델이 평가되는 순서를 결정합니다. 값이 작을수록 먼저 평가됩니다. 동일한 필드를 대상으로 하는 여러 버프가 있는 경우, Rate Add 와 Mul 연산의 상호작용으로 인해 적용 순서가 최종 결과에 영향을 미칩니다. applyPeriodScheduleEventId string ~ 1024자 버프를 적용할 이벤트의 개최 기간 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버프의 유효 기간을 제어하는 GS2-Schedule 이벤트의 GRN입니다. 지정한 경우, 이벤트 개최 기간 중에만 버프가 적용됩니다. 지정하지 않은 경우, 버프는 항상 유효합니다. Result 타입 설명 item BuffEntryModelMaster 갱신한 버프 엔트리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . UpdateBuffEntryModelMaster ( \u0026 buff . UpdateBuffEntryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BuffEntryName : pointy . String ( \"buff-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"BUFF_0001\" ), Expression : pointy . String ( \"mul\" ), TargetType : pointy . String ( \"action\" ), TargetModel : nil , TargetAction : \u0026 buff . BuffTargetAction { TargetActionName : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), TargetFieldName : pointy . String ( \"experienceValue\" ), ConditionGrns : [] buff . BuffTargetGrn { buff . BuffTargetGrn { TargetModelName : pointy . String ( \"Gs2Experience:RateModel\" ), TargetGrn : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ), }, }, Rate : pointy . Float32 ( 1.5 ), }, Priority : pointy . Int32 ( 2 ), ApplyPeriodScheduleEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\UpdateBuffEntryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e updateBuffEntryModelMaster ( ( new UpdateBuffEntryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBuffEntryName ( \"buff-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"BUFF_0001\" ) -\u003e withExpression ( \"mul\" ) -\u003e withTargetType ( \"action\" ) -\u003e withTargetModel ( null ) -\u003e withTargetAction (( new \\Gs2\\Buff\\Model\\BuffTargetAction ()) -\u003e withTargetActionName ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withTargetFieldName ( \"experienceValue\" ) -\u003e withConditionGrns ([ ( new \\Gs2\\Buff\\Model\\BuffTargetGrn ()) -\u003e withTargetModelName ( \"Gs2Experience:RateModel\" ) -\u003e withTargetGrn ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ), ]) -\u003e withRate ( 1.5 )) -\u003e withPriority ( 2 ) -\u003e withApplyPeriodScheduleEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.UpdateBuffEntryModelMasterRequest ; import io.gs2.buff.result.UpdateBuffEntryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { UpdateBuffEntryModelMasterResult result = client . updateBuffEntryModelMaster ( new UpdateBuffEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBuffEntryName ( \"buff-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"BUFF_0001\" ) . withExpression ( \"mul\" ) . withTargetType ( \"action\" ) . withTargetModel ( null ) . withTargetAction ( new io . gs2 . buff . model . BuffTargetAction () . withTargetActionName ( \"Gs2Experience:AddExperienceByUserId\" ) . withTargetFieldName ( \"experienceValue\" ) . withConditionGrns ( Arrays . asList ( new io . gs2 . buff . model . BuffTargetGrn () . withTargetModelName ( \"Gs2Experience:RateModel\" ) . withTargetGrn ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ) )) . withRate ( 1 . 5f )) . withPriority ( 2 ) . withApplyPeriodScheduleEventId ( null ) ); BuffEntryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . UpdateBuffEntryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateBuffEntryModelMaster ( new Gs2 . Gs2Buff . Request . UpdateBuffEntryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBuffEntryName ( \"buff-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"BUFF_0001\" ) . WithExpression ( \"mul\" ) . WithTargetType ( \"action\" ) . WithTargetModel ( null ) . WithTargetAction ( new Gs2 . Gs2Buff . Model . BuffTargetAction () . WithTargetActionName ( \"Gs2Experience:AddExperienceByUserId\" ) . WithTargetFieldName ( \"experienceValue\" ) . WithConditionGrns ( new Gs2 . Gs2Buff . Model . BuffTargetGrn [] { new Gs2 . Gs2Buff . Model . BuffTargetGrn () . WithTargetModelName ( \"Gs2Experience:RateModel\" ) . WithTargetGrn ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ), }) . WithRate ( 1.5f )) . WithPriority ( 2 ) . WithApplyPeriodScheduleEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . updateBuffEntryModelMaster ( new Gs2Buff . UpdateBuffEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBuffEntryName ( \"buff-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"BUFF_0001\" ) . withExpression ( \"mul\" ) . withTargetType ( \"action\" ) . withTargetModel ( null ) . withTargetAction ( new Gs2Buff . model . BuffTargetAction () . withTargetActionName ( \"Gs2Experience:AddExperienceByUserId\" ) . withTargetFieldName ( \"experienceValue\" ) . withConditionGrns ([ new Gs2Buff . model . BuffTargetGrn () . withTargetModelName ( \"Gs2Experience:RateModel\" ) . withTargetGrn ( \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" ), ]) . withRate ( 1.5 )) . withPriority ( 2 ) . withApplyPeriodScheduleEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . update_buff_entry_model_master ( buff . UpdateBuffEntryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_buff_entry_name ( 'buff-0001' ) . with_description ( 'description1' ) . with_metadata ( 'BUFF_0001' ) . with_expression ( 'mul' ) . with_target_type ( 'action' ) . with_target_model ( None ) . with_target_action ( buff . BuffTargetAction () . with_target_action_name ( 'Gs2Experience:AddExperienceByUserId' ) . with_target_field_name ( 'experienceValue' ) . with_condition_grns ([ buff . BuffTargetGrn () . with_target_model_name ( 'Gs2Experience:RateModel' ) . with_target_grn ( 'grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001' ), ]) . with_rate ( 1.5 )) . with_priority ( 2 ) . with_apply_period_schedule_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.update_buff_entry_model_master ({ namespaceName = \"namespace-0001\" , buffEntryName = \"buff-0001\" , description = \"description1\" , metadata = \"BUFF_0001\" , expression = \"mul\" , targetType = \"action\" , targetModel = nil , targetAction = { targetActionName = \"Gs2Experience:AddExperienceByUserId\" , targetFieldName = \"experienceValue\" , conditionGrns = { { targetModelName = \"Gs2Experience:RateModel\" , targetGrn = \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" , } }, rate = 1.5 , }, priority = 2 , applyPeriodScheduleEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.update_buff_entry_model_master_async ({ namespaceName = \"namespace-0001\" , buffEntryName = \"buff-0001\" , description = \"description1\" , metadata = \"BUFF_0001\" , expression = \"mul\" , targetType = \"action\" , targetModel = nil , targetAction = { targetActionName = \"Gs2Experience:AddExperienceByUserId\" , targetFieldName = \"experienceValue\" , conditionGrns = { { targetModelName = \"Gs2Experience:RateModel\" , targetGrn = \"grn:gs2:ap-northeast-1:YourOwnerId:exchange:namespace-0001:model:rate-0001\" , } }, rate = 1.5 , }, priority = 2 , applyPeriodScheduleEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteBuffEntryModelMaster 버프 엔트리 모델 마스터를 삭제 지정된 네임스페이스에서 지정된 버프 엔트리 모델 마스터를 삭제합니다. 삭제 후에는 다음 마스터 데이터 활성화 이후부터 이 버프 엔트리를 사용할 수 없게 됩니다. 이 작업은 마스터 데이터에만 영향을 미치며, 마스터 데이터가 재활성화될 때까지 현재 활성화된 모델은 변경되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. buffEntryName string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item BuffEntryModelMaster 삭제한 버프 엔트리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/buff\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := buff . Gs2BuffRestClient { Session : \u0026 session , } result , err := client . DeleteBuffEntryModelMaster ( \u0026 buff . DeleteBuffEntryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BuffEntryName : pointy . String ( \"buff-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Buff\\Gs2BuffRestClient ; use Gs2\\Buff\\Request\\DeleteBuffEntryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2BuffRestClient ( $session ); try { $result = $client -\u003e deleteBuffEntryModelMaster ( ( new DeleteBuffEntryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBuffEntryName ( \"buff-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.buff.rest.Gs2BuffRestClient ; import io.gs2.buff.request.DeleteBuffEntryModelMasterRequest ; import io.gs2.buff.result.DeleteBuffEntryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2BuffRestClient client = new Gs2BuffRestClient ( session ); try { DeleteBuffEntryModelMasterResult result = client . deleteBuffEntryModelMaster ( new DeleteBuffEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBuffEntryName ( \"buff-0001\" ) ); BuffEntryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2BuffRestClient ( session ); AsyncResult Gs2 . Gs2Buff . Result . DeleteBuffEntryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteBuffEntryModelMaster ( new Gs2 . Gs2Buff . Request . DeleteBuffEntryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBuffEntryName ( \"buff-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Buff from '@/gs2/buff' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Buff . Gs2BuffRestClient ( session ); try { const result = await client . deleteBuffEntryModelMaster ( new Gs2Buff . DeleteBuffEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBuffEntryName ( \"buff-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import buff session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = buff . Gs2BuffRestClient ( session ) try : result = client . delete_buff_entry_model_master ( buff . DeleteBuffEntryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_buff_entry_name ( 'buff-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'buff' ) api_result = client.delete_buff_entry_model_master ({ namespaceName = \"namespace-0001\" , buffEntryName = \"buff-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'buff' ) api_result_handler = client.delete_buff_entry_model_master_async ({ namespaceName = \"namespace-0001\" , buffEntryName = \"buff-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Buff SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Buff SDK API 레퍼런스","url":"/ko/api_reference/buff/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 채팅 서비스 내에서 트랜잭션 처리 방법을 제어하기 위한 설정입니다. allowCreateRoom bool true 게임 플레이어에 의한 룸 생성을 허용할지 여부 게임 운영 측이 미리 룸을 생성해 두고 게임 플레이어는 그 룸을 구독하는 형식인 경우에는 “false\"를 지정합니다. 반대로, 게임 플레이어가 자유롭게 룸을 생성하여 다른 플레이어를 초대해 플레이하는 형식인 경우에는 “true\"를 지정합니다. messageLifeTimeDays int 1 1 ~ 30 메시지 보관 기간(일수) 룸 내의 메시지를 보관하는 일수입니다. postMessageScript ScriptSetting 메시지를 게시했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - postMessage createRoomScript ScriptSetting 룸을 생성했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - createRoom deleteRoomScript ScriptSetting 룸을 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteRoom subscribeRoomScript ScriptSetting 룸을 구독했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - subscribeRoom unsubscribeRoomScript ScriptSetting 룸 구독을 해제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - unsubscribeRoom postNotification NotificationSetting  구독 중인 룸에 새 게시물이 등록되었을 때의 푸시 알림 구독 중인 룸에 새로운 메시지가 게시되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 이 설정이 없으면, 클라이언트는 새로운 메시지를 감지하기 위해 룸을 폴링해야 합니다. logSetting LogSetting 로그 출력 설정 로그 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 GS2-Log의 네임스페이스 정보를 보유합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Room 룸 룸은 채팅 메시지를 전달할 수 있는 범위를 나타냅니다. GS2-Chat의 룸에는 참가라는 개념이 없습니다. 따라서 메시지를 수신하려면 룸의 이름만 알고 있으면 되며, 룸에 참가하거나 멤버로 등록할 필요가 없습니다. 룸의 메시지를 열람할 수 있는 게임 플레이어를 제한하고 싶은 경우 두 가지 방법이 있습니다. 첫 번째는 룸에 비밀번호를 설정하는 것입니다. 두 번째는 룸에 설정 가능한 화이트리스트에 게임 플레이어의 사용자 ID를 설정하여 제한하는 것입니다. 비밀번호를 설정한 경우, 비밀번호를 모르면 게임 관리자라도 메시지를 가져올 수 없게 된다는 점에 주의하십시오. 이는 일본국 헌법에서 정한 통신의 비밀 에 해당할 가능성이 있기 때문입니다. 룸을 구독하면, 룸에 새로운 메시지가 전송되었을 때 GS2-Gateway의 푸시 알림을 받을 수 있습니다. 이 알림 기능을 이용함으로써, 룸에 대해 폴링하지 않고도 새로운 메시지의 유무를 알 수 있게 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 roomId string ※ ~ 1024자 룸 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 오너 사용자 ID 룸 오너의 사용자 ID입니다. 설정하면, 오너만 룸을 삭제할 수 있게 됩니다. 오너 설정은 선택 사항입니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. whiteListUserIds List [] 0 ~ 1000 items 룸에 액세스 가능한 사용자 ID 리스트 설정하면, 리스트에 포함된 사용자만 룸의 메시지를 가져오거나 게시할 수 있게 됩니다. 비어 있는 경우, 사용자 ID에 의한 액세스 제한은 적용되지 않습니다(단, 비밀번호가 별도로 필요할 수 있습니다). createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Message 메시지 메시지는 룸에 게시된 데이터입니다. 카테고리라는 필드를 가지고 있어 메시지를 분류할 수 있습니다. 예를 들어, 카테고리가 0인 경우는 일반적인 텍스트 메시지로 해석하고, 1인 경우는 스탬프(스티커)로 처리하도록 클라이언트를 구현할 수 있습니다. 게시된 메시지는 게시 후, Chat Namespace의 messageLifeTimeDays에서 설정한 메시지 보관 기간이 경과하면 자동으로 삭제됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 messageId string ※ ~ 1024자 메시지 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID category int 0 0 ~ 2147483645 메시지 분류용 카테고리 번호 메시지를 분류하기 위한 숫자 값입니다. 예를 들어, 0은 텍스트 메시지, 1은 스탬프(스티커), 그 외의 값은 커스텀 메시지 타입으로 사용할 수 있습니다. 카테고리에 따라 메시지에 적용되는 CategoryModel의 규칙이 결정됩니다. metadata string  ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Subscribe 룸 구독 룸을 구독하면 해당 룸에 대한 신규 메시지의 존재를 즉시 알 수 있게 됩니다. 구독할 때 메시지의 카테고리를 지정할 수 있습니다. 이 기능을 잘 활용하면 중요도가 높은 메시지만 수신하는 설정도 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeId string ※ ~ 1024자 구독 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID roomName string  ~ 128자 구독할 룸 이름 구독할 채팅 룸의 이름입니다. 구독하면, 이 룸에 새로운 메시지가 게시될 때마다 GS2-Gateway를 통해 푸시 알림이 전송됩니다. notificationTypes List [] 0 ~ 100 items 신규 메시지 알림을 받을 카테고리 리스트 푸시 알림을 트리거하는 메시지 카테고리를 필터링합니다. 비어 있는 경우, 모든 카테고리에 대해 알림이 전송됩니다. 각 항목은 카테고리 번호와 선택적인 모바일 푸시 알림 전달 여부를 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 CategoryModel 메시지 카테고리 모델 메시지 카테고리 모델은 채팅 룸에 게시되는 메시지를 분류하기 위한 카테고리를 정의합니다. 각 카테고리는 숫자로 식별되며, 카테고리별로 플레이어의 액세스 토큰을 사용한 게시를 허용할지 거부할지 설정할 수 있습니다. 이를 통해 서버만 게시할 수 있는 시스템 안내 카테고리 등의 사용 사례를 구현할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 메시지 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. rejectAccessTokenPost 문자열 열거형 enum {   “Enabled”,   “Disabled” } 플레이어의 액세스 토큰을 이용한 게시를 거부한다 활성화하면, 이 카테고리에서는 서버 사이드 API 호출(사용자 ID 지정)만으로 메시지를 게시할 수 있습니다. 플레이어가 직접 게시해서는 안 되는 시스템 안내나 서버 생성 메시지에 유용합니다. 정의 설명 Enabled 액세스 토큰을 이용한 게시를 거부한다 Disabled 액세스 토큰을 이용한 게시를 허용한다 NotificationType 알림 타입 신규 메시지 알림을 받을 카테고리 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 category int 0 0 ~ 2147483646 신규 메시지 알림을 받을 카테고리 알림을 필터링하기 위한 카테고리의 숫자 식별자입니다. 이 카테고리와 일치하는 메시지만 구독에 대한 푸시 알림을 트리거합니다. enableTransferMobilePushNotification bool false 오프라인 상태였을 때 모바일 푸시 알림으로 전달할지 여부 활성화하면, 알림 시점에 수신 대상 기기가 오프라인 상태였던 경우 모바일 푸시 알림 서비스로 전달됩니다. 이를 통해 게임이 실행되고 있지 않은 상태에서도 플레이어에게 신규 메시지를 알릴 수 있습니다. CurrentModelMaster 현재 활성화된 메시지 카테고리 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 메시지 카테고리 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한, 게임 운영에 더 적합한 도구를 제작하여 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Chat 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 CategoryModelMaster 메시지 카테고리 모델 마스터 메시지 카테고리 모델 마스터는 게임 내에서 사용되는 메시지 카테고리 모델을 편집 및 관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 임시로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 메시지 카테고리 모델로 반영됩니다. 메시지 카테고리 모델이란 룸에 게시하는 카테고리에 관한 설정입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 메시지 카테고리 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. description string ~ 1024자 설명문 rejectAccessTokenPost 문자열 열거형 enum {   “Enabled”,   “Disabled” } 플레이어의 액세스 토큰을 이용한 게시를 거부한다 활성화하면, 이 카테고리에서는 서버 사이드 API 호출(사용자 ID 지정)만으로 메시지를 게시할 수 있습니다. 플레이어가 직접 게시해서는 안 되는 시스템 안내나 서버 생성 메시지에 유용합니다. 정의 설명 Enabled 플레이어의 액세스 토큰을 이용한 게시를 거부한다 Disabled 플레이어의 액세스 토큰을 이용한 게시를 허용한다 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 chat . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeNamespacesRequest ; import io.gs2.chat.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Chat . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Chat . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_namespaces ( chat . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'chat' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 채팅 서비스 내에서 트랜잭션 처리 방법을 제어하기 위한 설정입니다. allowCreateRoom bool true 게임 플레이어에 의한 룸 생성을 허용할지 여부 게임 운영 측이 미리 룸을 생성해 두고 게임 플레이어는 그 룸을 구독하는 형식인 경우에는 “false\"를 지정합니다. 반대로, 게임 플레이어가 자유롭게 룸을 생성하여 다른 플레이어를 초대해 플레이하는 형식인 경우에는 “true\"를 지정합니다. messageLifeTimeDays int 1 1 ~ 30 메시지 보관 기간(일수) 룸 내의 메시지를 보관하는 일수입니다. postMessageScript ScriptSetting 메시지를 게시했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - postMessage createRoomScript ScriptSetting 룸을 생성했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - createRoom deleteRoomScript ScriptSetting 룸을 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteRoom subscribeRoomScript ScriptSetting 룸을 구독했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - subscribeRoom unsubscribeRoomScript ScriptSetting 룸 구독을 해제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - unsubscribeRoom postNotification NotificationSetting  구독 중인 룸에 새 게시물이 등록되었을 때의 푸시 알림 구독 중인 룸에 새로운 메시지가 게시되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 이 설정이 없으면, 클라이언트는 새로운 메시지를 감지하기 위해 룸을 폴링해야 합니다. logSetting LogSetting 로그 출력 설정 로그 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 GS2-Log의 네임스페이스 정보를 보유합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 chat . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , AllowCreateRoom : nil , MessageLifeTimeDays : nil , PostMessageScript : nil , CreateRoomScript : nil , DeleteRoomScript : nil , SubscribeRoomScript : nil , UnsubscribeRoomScript : nil , PostNotification : nil , LogSetting : \u0026 chat . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withAllowCreateRoom ( null ) -\u003e withMessageLifeTimeDays ( null ) -\u003e withPostMessageScript ( null ) -\u003e withCreateRoomScript ( null ) -\u003e withDeleteRoomScript ( null ) -\u003e withSubscribeRoomScript ( null ) -\u003e withUnsubscribeRoomScript ( null ) -\u003e withPostNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Chat\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.CreateNamespaceRequest ; import io.gs2.chat.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAllowCreateRoom ( null ) . withMessageLifeTimeDays ( null ) . withPostMessageScript ( null ) . withCreateRoomScript ( null ) . withDeleteRoomScript ( null ) . withSubscribeRoomScript ( null ) . withUnsubscribeRoomScript ( null ) . withPostNotification ( null ) . withLogSetting ( new io . gs2 . chat . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Chat . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithAllowCreateRoom ( null ) . WithMessageLifeTimeDays ( null ) . WithPostMessageScript ( null ) . WithCreateRoomScript ( null ) . WithDeleteRoomScript ( null ) . WithSubscribeRoomScript ( null ) . WithUnsubscribeRoomScript ( null ) . WithPostNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Chat . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Chat . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAllowCreateRoom ( null ) . withMessageLifeTimeDays ( null ) . withPostMessageScript ( null ) . withCreateRoomScript ( null ) . withDeleteRoomScript ( null ) . withSubscribeRoomScript ( null ) . withUnsubscribeRoomScript ( null ) . withPostNotification ( null ) . withLogSetting ( new Gs2Chat . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . create_namespace ( chat . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_allow_create_room ( None ) . with_message_life_time_days ( None ) . with_post_message_script ( None ) . with_create_room_script ( None ) . with_delete_room_script ( None ) . with_subscribe_room_script ( None ) . with_unsubscribe_room_script ( None ) . with_post_notification ( None ) . with_log_setting ( chat . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , allowCreateRoom = nil , messageLifeTimeDays = nil , postMessageScript = nil , createRoomScript = nil , deleteRoomScript = nil , subscribeRoomScript = nil , unsubscribeRoomScript = nil , postNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , allowCreateRoom = nil , messageLifeTimeDays = nil , postMessageScript = nil , createRoomScript = nil , deleteRoomScript = nil , subscribeRoomScript = nil , unsubscribeRoomScript = nil , postNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 chat . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetNamespaceStatusRequest ; import io.gs2.chat.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Chat . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Chat . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_namespace_status ( chat . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'chat' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 chat . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetNamespaceRequest ; import io.gs2.chat.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Chat . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Chat . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_namespace ( chat . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 채팅 서비스 내에서 트랜잭션 처리 방법을 제어하기 위한 설정입니다. allowCreateRoom bool true 게임 플레이어에 의한 룸 생성을 허용할지 여부 게임 운영 측이 미리 룸을 생성해 두고 게임 플레이어는 그 룸을 구독하는 형식인 경우에는 “false\"를 지정합니다. 반대로, 게임 플레이어가 자유롭게 룸을 생성하여 다른 플레이어를 초대해 플레이하는 형식인 경우에는 “true\"를 지정합니다. messageLifeTimeDays int 1 1 ~ 30 메시지 보관 기간(일수) 룸 내의 메시지를 보관하는 일수입니다. postMessageScript ScriptSetting 메시지를 게시했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - postMessage createRoomScript ScriptSetting 룸을 생성했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - createRoom deleteRoomScript ScriptSetting 룸을 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteRoom subscribeRoomScript ScriptSetting 룸을 구독했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - subscribeRoom unsubscribeRoomScript ScriptSetting 룸 구독을 해제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - unsubscribeRoom postNotification NotificationSetting  구독 중인 룸에 새 게시물이 등록되었을 때의 푸시 알림 구독 중인 룸에 새로운 메시지가 게시되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 이 설정이 없으면, 클라이언트는 새로운 메시지를 감지하기 위해 룸을 폴링해야 합니다. logSetting LogSetting 로그 출력 설정 로그 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 GS2-Log의 네임스페이스 정보를 보유합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 chat . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , AllowCreateRoom : pointy . Bool ( false ), MessageLifeTimeDays : nil , PostMessageScript : nil , CreateRoomScript : nil , DeleteRoomScript : nil , SubscribeRoomScript : nil , UnsubscribeRoomScript : nil , PostNotification : nil , LogSetting : \u0026 chat . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withAllowCreateRoom ( false ) -\u003e withMessageLifeTimeDays ( null ) -\u003e withPostMessageScript ( null ) -\u003e withCreateRoomScript ( null ) -\u003e withDeleteRoomScript ( null ) -\u003e withSubscribeRoomScript ( null ) -\u003e withUnsubscribeRoomScript ( null ) -\u003e withPostNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Chat\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UpdateNamespaceRequest ; import io.gs2.chat.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAllowCreateRoom ( false ) . withMessageLifeTimeDays ( null ) . withPostMessageScript ( null ) . withCreateRoomScript ( null ) . withDeleteRoomScript ( null ) . withSubscribeRoomScript ( null ) . withUnsubscribeRoomScript ( null ) . withPostNotification ( null ) . withLogSetting ( new io . gs2 . chat . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Chat . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithAllowCreateRoom ( false ) . WithMessageLifeTimeDays ( null ) . WithPostMessageScript ( null ) . WithCreateRoomScript ( null ) . WithDeleteRoomScript ( null ) . WithSubscribeRoomScript ( null ) . WithUnsubscribeRoomScript ( null ) . WithPostNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Chat . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Chat . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAllowCreateRoom ( false ) . withMessageLifeTimeDays ( null ) . withPostMessageScript ( null ) . withCreateRoomScript ( null ) . withDeleteRoomScript ( null ) . withSubscribeRoomScript ( null ) . withUnsubscribeRoomScript ( null ) . withPostNotification ( null ) . withLogSetting ( new Gs2Chat . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . update_namespace ( chat . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_allow_create_room ( False ) . with_message_life_time_days ( None ) . with_post_message_script ( None ) . with_create_room_script ( None ) . with_delete_room_script ( None ) . with_subscribe_room_script ( None ) . with_unsubscribe_room_script ( None ) . with_post_notification ( None ) . with_log_setting ( chat . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , allowCreateRoom = false , messageLifeTimeDays = nil , postMessageScript = nil , createRoomScript = nil , deleteRoomScript = nil , subscribeRoomScript = nil , unsubscribeRoomScript = nil , postNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , allowCreateRoom = false , messageLifeTimeDays = nil , postMessageScript = nil , createRoomScript = nil , deleteRoomScript = nil , subscribeRoomScript = nil , unsubscribeRoomScript = nil , postNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 chat . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DeleteNamespaceRequest ; import io.gs2.chat.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Chat . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Chat . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . delete_namespace ( chat . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 chat . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetServiceVersionRequest ; import io.gs2.chat.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Chat . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Chat . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_service_version ( chat . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 chat . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DumpUserDataByUserIdRequest ; import io.gs2.chat.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Chat . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Chat . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . dump_user_data_by_user_id ( chat . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'chat' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 chat . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.chat.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Chat . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Chat . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( chat . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'chat' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 chat . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.CleanUserDataByUserIdRequest ; import io.gs2.chat.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Chat . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Chat . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . clean_user_data_by_user_id ( chat . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'chat' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 chat . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.chat.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Chat . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Chat . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( chat . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'chat' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 chat . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.chat.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Chat . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Chat . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( chat . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'chat' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 chat . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.ImportUserDataByUserIdRequest ; import io.gs2.chat.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Chat . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Chat . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . import_user_data_by_user_id ( chat . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'chat' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 chat . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.CheckImportUserDataByUserIdRequest ; import io.gs2.chat.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Chat . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Chat . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( chat . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'chat' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeRooms 룸 정보 목록 취득 페이지 토큰과 취득 건수 제한을 지정하여, 룸 정보 목록을 취득할 수 있습니다. 이를 통해 존재하는 룸의 개요를 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 룸 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 룸 정보 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeRooms ( \u0026 chat . DescribeRoomsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeRoomsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeRooms ( ( new DescribeRoomsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeRoomsRequest ; import io.gs2.chat.result.DescribeRoomsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeRoomsResult result = client . describeRooms ( new DescribeRoomsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Room \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeRoomsResult \u003e asyncResult = null ; yield return client . DescribeRooms ( new Gs2 . Gs2Chat . Request . DescribeRoomsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeRooms ( new Gs2Chat . DescribeRoomsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_rooms ( chat . DescribeRoomsRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_rooms ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'chat' ) api_result_handler = client.describe_rooms_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createRoom 룸 생성 룸 이름, 사용자 ID, 메타데이터, 비밀번호, 화이트리스트에 등록될 사용자 ID를 지정하여 룸을 생성할 수 있습니다. 룸 이름은 생략 가능하며, 생략한 경우 UUID(Universally Unique Identifier)가 자동으로 부여됩니다. 새로운 커뮤니케이션 공간을 마련하기 위해 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 룸 오너의 사용자 ID입니다. 설정하면, 오너만 룸을 삭제할 수 있게 됩니다. 오너 설정은 선택 사항입니다. name string UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. whiteListUserIds List [] 0 ~ 1000 items 룸에 액세스 가능한 사용자 ID 리스트 설정하면, 리스트에 포함된 사용자만 룸의 메시지를 가져오거나 게시할 수 있게 됩니다. 비어 있는 경우, 사용자 ID에 의한 액세스 제한은 적용되지 않습니다(단, 비밀번호가 별도로 필요할 수 있습니다). Result 타입 설명 item Room 생성한 룸 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . CreateRoom ( \u0026 chat . CreateRoomRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Name : pointy . String ( \"room-0001\" ), Metadata : nil , Password : nil , WhiteListUserIds : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\CreateRoomRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e createRoom ( ( new CreateRoomRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withName ( \"room-0001\" ) -\u003e withMetadata ( null ) -\u003e withPassword ( null ) -\u003e withWhiteListUserIds ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.CreateRoomRequest ; import io.gs2.chat.result.CreateRoomResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { CreateRoomResult result = client . createRoom ( new CreateRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withName ( \"room-0001\" ) . withMetadata ( null ) . withPassword ( null ) . withWhiteListUserIds ( null ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . CreateRoomResult \u003e asyncResult = null ; yield return client . CreateRoom ( new Gs2 . Gs2Chat . Request . CreateRoomRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithName ( \"room-0001\" ) . WithMetadata ( null ) . WithPassword ( null ) . WithWhiteListUserIds ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . createRoom ( new Gs2Chat . CreateRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withName ( \"room-0001\" ) . withMetadata ( null ) . withPassword ( null ) . withWhiteListUserIds ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . create_room ( chat . CreateRoomRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_name ( 'room-0001' ) . with_metadata ( None ) . with_password ( None ) . with_white_list_user_ids ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.create_room ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , name = \"room-0001\" , metadata = nil , password = nil , whiteListUserIds = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.create_room_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , name = \"room-0001\" , metadata = nil , password = nil , whiteListUserIds = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createRoomFromBackend 백엔드에서 룸 생성 이 API는 게임 플레이어가 호출하는 것이 아니라, 시스템 관련 처리에서 룸을 생성할 때 사용합니다. 룸 이름, 사용자 ID, 메타데이터, 비밀번호, 화이트리스트에 등록될 사용자 ID를 지정하여 룸을 생성할 수 있습니다. 룸 이름은 생략 가능하며, 생략한 경우 UUID(Universally Unique Identifier)가 자동으로 부여됩니다. 새로운 커뮤니케이션 공간을 마련하기 위해 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 오너 사용자 ID 룸 오너의 사용자 ID입니다. 설정하면, 오너만 룸을 삭제할 수 있게 됩니다. 오너 설정은 선택 사항입니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. whiteListUserIds List [] 0 ~ 1000 items 룸에 액세스 가능한 사용자 ID 리스트 설정하면, 리스트에 포함된 사용자만 룸의 메시지를 가져오거나 게시할 수 있게 됩니다. 비어 있는 경우, 사용자 ID에 의한 액세스 제한은 적용되지 않습니다(단, 비밀번호가 별도로 필요할 수 있습니다). timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Room 생성한 룸 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . CreateRoomFromBackend ( \u0026 chat . CreateRoomFromBackendRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"room-0001\" ), UserId : nil , Metadata : nil , Password : nil , WhiteListUserIds : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\CreateRoomFromBackendRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e createRoomFromBackend ( ( new CreateRoomFromBackendRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"room-0001\" ) -\u003e withUserId ( null ) -\u003e withMetadata ( null ) -\u003e withPassword ( null ) -\u003e withWhiteListUserIds ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.CreateRoomFromBackendRequest ; import io.gs2.chat.result.CreateRoomFromBackendResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { CreateRoomFromBackendResult result = client . createRoomFromBackend ( new CreateRoomFromBackendRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"room-0001\" ) . withUserId ( null ) . withMetadata ( null ) . withPassword ( null ) . withWhiteListUserIds ( null ) . withTimeOffsetToken ( null ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . CreateRoomFromBackendResult \u003e asyncResult = null ; yield return client . CreateRoomFromBackend ( new Gs2 . Gs2Chat . Request . CreateRoomFromBackendRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"room-0001\" ) . WithUserId ( null ) . WithMetadata ( null ) . WithPassword ( null ) . WithWhiteListUserIds ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . createRoomFromBackend ( new Gs2Chat . CreateRoomFromBackendRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"room-0001\" ) . withUserId ( null ) . withMetadata ( null ) . withPassword ( null ) . withWhiteListUserIds ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . create_room_from_backend ( chat . CreateRoomFromBackendRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'room-0001' ) . with_user_id ( None ) . with_metadata ( None ) . with_password ( None ) . with_white_list_user_ids ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.create_room_from_backend ({ namespaceName = \"namespace-0001\" , name = \"room-0001\" , userId = nil , metadata = nil , password = nil , whiteListUserIds = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.create_room_from_backend_async ({ namespaceName = \"namespace-0001\" , name = \"room-0001\" , userId = nil , metadata = nil , password = nil , whiteListUserIds = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRoom 룸 정보 취득 지정된 네임스페이스의 룸 이름을 지정하여, 특정 룸의 상세 정보를 취득합니다. 취득되는 정보에는 룸의 메타데이터, 작성자의 사용자 ID, 화이트리스트 설정이 포함됩니다. 이 작업에는 비밀번호 검증이 필요하지 않습니다. 비밀번호는 응답에 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Room 룸 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetRoom ( \u0026 chat . GetRoomRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetRoomRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getRoom ( ( new GetRoomRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetRoomRequest ; import io.gs2.chat.result.GetRoomResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetRoomResult result = client . getRoom ( new GetRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetRoomResult \u003e asyncResult = null ; yield return client . GetRoom ( new Gs2 . Gs2Chat . Request . GetRoomRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getRoom ( new Gs2Chat . GetRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_room ( chat . GetRoomRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_room ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_room_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRoom 룸 갱신 지정된 룸의 메타데이터, 비밀번호, 화이트리스트 설정을 갱신합니다. 룸의 작성자(원래 룸을 생성한 사용자) 또는 화이트리스트에 등록된 사용자만 이 작업을 수행할 수 있습니다. 현재 로그인한 사용자에게 룸에 대한 쓰기 권한이 없는 경우, 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. whiteListUserIds List [] 0 ~ 1000 items 룸에 액세스 가능한 사용자 ID 리스트 설정하면, 리스트에 포함된 사용자만 룸의 메시지를 가져오거나 게시할 수 있게 됩니다. 비어 있는 경우, 사용자 ID에 의한 액세스 제한은 적용되지 않습니다(단, 비밀번호가 별도로 필요할 수 있습니다). accessToken string  ~ 128자 액세스 토큰 룸 오너의 사용자 ID입니다. 설정하면, 오너만 룸을 삭제할 수 있게 됩니다. 오너 설정은 선택 사항입니다. Result 타입 설명 item Room 갱신한 룸 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UpdateRoom ( \u0026 chat . UpdateRoomRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), Metadata : nil , Password : pointy . String ( \"password-0002\" ), WhiteListUserIds : [] * string { pointy . String ( \"user-0001\" ), pointy . String ( \"user-0002\" ), pointy . String ( \"user-0003\" ), }, AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UpdateRoomRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e updateRoom ( ( new UpdateRoomRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withMetadata ( null ) -\u003e withPassword ( \"password-0002\" ) -\u003e withWhiteListUserIds ([ \"user-0001\" , \"user-0002\" , \"user-0003\" , ]) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UpdateRoomRequest ; import io.gs2.chat.result.UpdateRoomResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UpdateRoomResult result = client . updateRoom ( new UpdateRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withMetadata ( null ) . withPassword ( \"password-0002\" ) . withWhiteListUserIds ( Arrays . asList ( \"user-0001\" , \"user-0002\" , \"user-0003\" )) . withAccessToken ( \"accessToken-0001\" ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UpdateRoomResult \u003e asyncResult = null ; yield return client . UpdateRoom ( new Gs2 . Gs2Chat . Request . UpdateRoomRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithMetadata ( null ) . WithPassword ( \"password-0002\" ) . WithWhiteListUserIds ( new string [] { \"user-0001\" , \"user-0002\" , \"user-0003\" , }) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . updateRoom ( new Gs2Chat . UpdateRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withMetadata ( null ) . withPassword ( \"password-0002\" ) . withWhiteListUserIds ([ \"user-0001\" , \"user-0002\" , \"user-0003\" , ]) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . update_room ( chat . UpdateRoomRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_metadata ( None ) . with_password ( 'password-0002' ) . with_white_list_user_ids ([ 'user-0001' , 'user-0002' , 'user-0003' , ]) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.update_room ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , metadata = nil , password = \"password-0002\" , whiteListUserIds = { \"user-0001\" , \"user-0002\" , \"user-0003\" }, accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.update_room_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , metadata = nil , password = \"password-0002\" , whiteListUserIds = { \"user-0001\" , \"user-0002\" , \"user-0003\" }, accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRoomFromBackend 백엔드에서 룸 갱신 서버 사이드에서 지정된 룸의 메타데이터, 비밀번호, 화이트리스트 설정을 갱신합니다. 플레이어용 갱신 API와 달리, 시스템 레벨의 작업을 목적으로 하므로, 액세스 토큰에 대한 쓰기 권한 검증은 수행하지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. whiteListUserIds List [] 0 ~ 1000 items 룸에 액세스 가능한 사용자 ID 리스트 설정하면, 리스트에 포함된 사용자만 룸의 메시지를 가져오거나 게시할 수 있게 됩니다. 비어 있는 경우, 사용자 ID에 의한 액세스 제한은 적용되지 않습니다(단, 비밀번호가 별도로 필요할 수 있습니다). userId string ~ 128자 오너 사용자 ID 룸 오너의 사용자 ID입니다. 설정하면, 오너만 룸을 삭제할 수 있게 됩니다. 오너 설정은 선택 사항입니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Room 갱신한 룸 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UpdateRoomFromBackend ( \u0026 chat . UpdateRoomFromBackendRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), Metadata : pointy . String ( \"ROOM_0001\" ), Password : pointy . String ( \"password-0003\" ), WhiteListUserIds : [] * string { pointy . String ( \"user-0001\" ), pointy . String ( \"user-0002\" ), pointy . String ( \"user-0003\" ), }, UserId : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UpdateRoomFromBackendRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e updateRoomFromBackend ( ( new UpdateRoomFromBackendRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withMetadata ( \"ROOM_0001\" ) -\u003e withPassword ( \"password-0003\" ) -\u003e withWhiteListUserIds ([ \"user-0001\" , \"user-0002\" , \"user-0003\" , ]) -\u003e withUserId ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UpdateRoomFromBackendRequest ; import io.gs2.chat.result.UpdateRoomFromBackendResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UpdateRoomFromBackendResult result = client . updateRoomFromBackend ( new UpdateRoomFromBackendRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withMetadata ( \"ROOM_0001\" ) . withPassword ( \"password-0003\" ) . withWhiteListUserIds ( Arrays . asList ( \"user-0001\" , \"user-0002\" , \"user-0003\" )) . withUserId ( null ) . withTimeOffsetToken ( null ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UpdateRoomFromBackendResult \u003e asyncResult = null ; yield return client . UpdateRoomFromBackend ( new Gs2 . Gs2Chat . Request . UpdateRoomFromBackendRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithMetadata ( \"ROOM_0001\" ) . WithPassword ( \"password-0003\" ) . WithWhiteListUserIds ( new string [] { \"user-0001\" , \"user-0002\" , \"user-0003\" , }) . WithUserId ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . updateRoomFromBackend ( new Gs2Chat . UpdateRoomFromBackendRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withMetadata ( \"ROOM_0001\" ) . withPassword ( \"password-0003\" ) . withWhiteListUserIds ([ \"user-0001\" , \"user-0002\" , \"user-0003\" , ]) . withUserId ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . update_room_from_backend ( chat . UpdateRoomFromBackendRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_metadata ( 'ROOM_0001' ) . with_password ( 'password-0003' ) . with_white_list_user_ids ([ 'user-0001' , 'user-0002' , 'user-0003' , ]) . with_user_id ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.update_room_from_backend ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , metadata = \"ROOM_0001\" , password = \"password-0003\" , whiteListUserIds = { \"user-0001\" , \"user-0002\" , \"user-0003\" }, userId = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.update_room_from_backend_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , metadata = \"ROOM_0001\" , password = \"password-0003\" , whiteListUserIds = { \"user-0001\" , \"user-0002\" , \"user-0003\" }, userId = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRoom 룸 삭제 지정된 네임스페이스에서 룸을 삭제합니다. 룸의 작성자 또는 화이트리스트에 등록된 사용자만 이 작업을 수행할 수 있습니다. 현재 로그인한 사용자에게 룸에 대한 쓰기 권한이 없는 경우, 오류가 반환됩니다. 룸을 삭제하면, 관련된 모든 메시지와 구독 정보도 함께 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 룸 오너의 사용자 ID입니다. 설정하면, 오너만 룸을 삭제할 수 있게 됩니다. 오너 설정은 선택 사항입니다. Result 타입 설명 item Room 삭제한 룸 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DeleteRoom ( \u0026 chat . DeleteRoomRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DeleteRoomRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e deleteRoom ( ( new DeleteRoomRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DeleteRoomRequest ; import io.gs2.chat.result.DeleteRoomResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DeleteRoomResult result = client . deleteRoom ( new DeleteRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DeleteRoomResult \u003e asyncResult = null ; yield return client . DeleteRoom ( new Gs2 . Gs2Chat . Request . DeleteRoomRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . deleteRoom ( new Gs2Chat . DeleteRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . delete_room ( chat . DeleteRoomRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.delete_room ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.delete_room_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRoomFromBackend 백엔드에서 룸 삭제 서버 사이드에서 지정된 룸을 삭제합니다. 플레이어용 삭제 API와 달리, 시스템 레벨의 작업을 목적으로 하므로, 액세스 토큰에 대한 쓰기 권한 검증은 수행하지 않습니다. 룸을 삭제하면, 관련된 모든 메시지와 구독 정보도 함께 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 오너 사용자 ID 룸 오너의 사용자 ID입니다. 설정하면, 오너만 룸을 삭제할 수 있게 됩니다. 오너 설정은 선택 사항입니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Room 삭제한 룸 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DeleteRoomFromBackend ( \u0026 chat . DeleteRoomFromBackendRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), UserId : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DeleteRoomFromBackendRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e deleteRoomFromBackend ( ( new DeleteRoomFromBackendRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withUserId ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DeleteRoomFromBackendRequest ; import io.gs2.chat.result.DeleteRoomFromBackendResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DeleteRoomFromBackendResult result = client . deleteRoomFromBackend ( new DeleteRoomFromBackendRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( null ) . withTimeOffsetToken ( null ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DeleteRoomFromBackendResult \u003e asyncResult = null ; yield return client . DeleteRoomFromBackend ( new Gs2 . Gs2Chat . Request . DeleteRoomFromBackendRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithUserId ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . deleteRoomFromBackend ( new Gs2Chat . DeleteRoomFromBackendRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . delete_room_from_backend ( chat . DeleteRoomFromBackendRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_user_id ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.delete_room_from_backend ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.delete_room_from_backend_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeMessages 메시지 목록 취득 지정된 룸 내의 메시지를, 지정된 시작 시각부터 현재 시각까지 시간순으로 취득합니다. 옵션으로 카테고리 번호를 지정하여, 특정 종류의 메시지(텍스트 메시지, 스탬프 등)만 취득할 수 있습니다. 룸에 비밀번호가 설정되어 있는 경우에는, 올바른 비밀번호를 제공해야 합니다. 룸에 화이트리스트가 설정되어 있는 경우, 액세스는 목록에 있는 사용자로 제한됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. category int 0 ~ 2147483645 메시지 분류용 카테고리 번호 accessToken string  ~ 128자 액세스 토큰 startAt long 현재 시각으로부터 1시간 전의 절대 시각 메시지 취득을 시작하는 시각 UNIX 시간·밀리초 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 메시지 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeMessages ( \u0026 chat . DescribeMessagesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), Password : nil , Category : nil , AccessToken : pointy . String ( \"accessToken-0001\" ), StartAt : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeMessagesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeMessages ( ( new DescribeMessagesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withPassword ( null ) -\u003e withCategory ( null ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStartAt ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeMessagesRequest ; import io.gs2.chat.result.DescribeMessagesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeMessagesResult result = client . describeMessages ( new DescribeMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPassword ( null ) . withCategory ( null ) . withAccessToken ( \"accessToken-0001\" ) . withStartAt ( null ) . withLimit ( null ) ); List Message \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeMessagesResult \u003e asyncResult = null ; yield return client . DescribeMessages ( new Gs2 . Gs2Chat . Request . DescribeMessagesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithPassword ( null ) . WithCategory ( null ) . WithAccessToken ( \"accessToken-0001\" ) . WithStartAt ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeMessages ( new Gs2Chat . DescribeMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPassword ( null ) . withCategory ( null ) . withAccessToken ( \"accessToken-0001\" ) . withStartAt ( null ) . withLimit ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_messages ( chat . DescribeMessagesRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_password ( None ) . with_category ( None ) . with_access_token ( 'accessToken-0001' ) . with_start_at ( None ) . with_limit ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_messages ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , password = nil , category = nil , accessToken = \"accessToken-0001\" , startAt = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'chat' ) api_result_handler = client.describe_messages_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , password = nil , category = nil , accessToken = \"accessToken-0001\" , startAt = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeMessagesByUserId 사용자 ID를 지정하여 메시지 목록 취득 지정된 룸 내의 메시지를, 지정된 시작 시각부터 현재 시각까지 시간순으로 취득합니다. 옵션으로 카테고리 번호를 지정하여, 특정 종류의 메시지(텍스트 메시지, 스탬프 등)만 취득할 수 있습니다. 룸에 비밀번호가 설정되어 있는 경우에는, 올바른 비밀번호를 제공해야 합니다. 룸에 화이트리스트가 설정되어 있는 경우, 액세스는 목록에 있는 사용자로 제한됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. category int 0 ~ 2147483645 메시지 분류용 카테고리 번호 userId string  ~ 128자 사용자ID startAt long 현재 시각으로부터 1시간 전의 절대 시각 메시지 취득을 시작하는 시각 UNIX 시간·밀리초 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 메시지 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeMessagesByUserId ( \u0026 chat . DescribeMessagesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), Password : nil , Category : nil , UserId : pointy . String ( \"user-0002\" ), StartAt : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeMessagesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeMessagesByUserId ( ( new DescribeMessagesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withPassword ( null ) -\u003e withCategory ( null ) -\u003e withUserId ( \"user-0002\" ) -\u003e withStartAt ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeMessagesByUserIdRequest ; import io.gs2.chat.result.DescribeMessagesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeMessagesByUserIdResult result = client . describeMessagesByUserId ( new DescribeMessagesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPassword ( null ) . withCategory ( null ) . withUserId ( \"user-0002\" ) . withStartAt ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Message \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeMessagesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeMessagesByUserId ( new Gs2 . Gs2Chat . Request . DescribeMessagesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithPassword ( null ) . WithCategory ( null ) . WithUserId ( \"user-0002\" ) . WithStartAt ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeMessagesByUserId ( new Gs2Chat . DescribeMessagesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPassword ( null ) . withCategory ( null ) . withUserId ( \"user-0002\" ) . withStartAt ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_messages_by_user_id ( chat . DescribeMessagesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_password ( None ) . with_category ( None ) . with_user_id ( 'user-0002' ) . with_start_at ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_messages_by_user_id ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , password = nil , category = nil , userId = \"user-0002\" , startAt = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'chat' ) api_result_handler = client.describe_messages_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , password = nil , category = nil , userId = \"user-0002\" , startAt = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeLatestMessages 최신 메시지 목록 취득 지정된 룸 내의 최신 메시지를 페이지네이션과 함께, 새로운 것부터 순서대로 취득합니다. 채팅 타임라인에서 최신 메시지를 먼저 표시하는 경우에 유용합니다. 옵션으로 카테고리 번호를 지정하여, 특정 종류의 메시지만 취득할 수 있습니다. 룸에 비밀번호가 설정되어 있는 경우에는, 올바른 비밀번호를 제공해야 합니다. 룸에 화이트리스트가 설정되어 있는 경우, 액세스는 목록에 있는 사용자로 제한됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. category int 0 ~ 2147483645 메시지 분류용 카테고리 번호 accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 메시지 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeLatestMessages ( \u0026 chat . DescribeLatestMessagesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), Password : nil , Category : nil , AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeLatestMessagesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeLatestMessages ( ( new DescribeLatestMessagesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withPassword ( null ) -\u003e withCategory ( null ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeLatestMessagesRequest ; import io.gs2.chat.result.DescribeLatestMessagesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeLatestMessagesResult result = client . describeLatestMessages ( new DescribeLatestMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPassword ( null ) . withCategory ( null ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Message \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeLatestMessagesResult \u003e asyncResult = null ; yield return client . DescribeLatestMessages ( new Gs2 . Gs2Chat . Request . DescribeLatestMessagesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithPassword ( null ) . WithCategory ( null ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeLatestMessages ( new Gs2Chat . DescribeLatestMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPassword ( null ) . withCategory ( null ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_latest_messages ( chat . DescribeLatestMessagesRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_password ( None ) . with_category ( None ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_latest_messages ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , password = nil , category = nil , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'chat' ) api_result_handler = client.describe_latest_messages_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , password = nil , category = nil , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeLatestMessagesByUserId 사용자 ID를 지정하여 최신 메시지 목록 취득 지정된 룸 내의 최신 메시지를 페이지네이션을 지원하여 새로운 순서로 취득합니다. 채팅 타임라인에서 최신 메시지를 먼저 표시할 때 유용합니다. 옵션으로 카테고리 번호를 지정하여 특정 종류의 메시지만 취득할 수 있습니다. 룸에 비밀번호가 설정되어 있는 경우 올바른 비밀번호를 제공해야 합니다. 룸에 화이트리스트가 설정되어 있는 경우 접근은 목록에 있는 사용자로 제한됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  UUID ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. password string ~ 128자 룸에 액세스하기 위해 필요한 비밀번호 설정하면, 메시지를 가져오거나 게시할 때 비밀번호 입력이 필요해집니다. 설정한 비밀번호는 다시 확인할 수 없습니다. 통신의 비밀에 해당할 가능성이 있어, 게임 관리자라도 비밀번호를 모르면 메시지에 액세스할 수 없게 됩니다. category int 0 ~ 2147483645 메시지 분류용 카테고리 번호 userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 메시지 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeLatestMessagesByUserId ( \u0026 chat . DescribeLatestMessagesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), Password : nil , Category : nil , UserId : pointy . String ( \"user-0002\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeLatestMessagesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeLatestMessagesByUserId ( ( new DescribeLatestMessagesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withPassword ( null ) -\u003e withCategory ( null ) -\u003e withUserId ( \"user-0002\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeLatestMessagesByUserIdRequest ; import io.gs2.chat.result.DescribeLatestMessagesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeLatestMessagesByUserIdResult result = client . describeLatestMessagesByUserId ( new DescribeLatestMessagesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPassword ( null ) . withCategory ( null ) . withUserId ( \"user-0002\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Message \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeLatestMessagesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeLatestMessagesByUserId ( new Gs2 . Gs2Chat . Request . DescribeLatestMessagesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithPassword ( null ) . WithCategory ( null ) . WithUserId ( \"user-0002\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeLatestMessagesByUserId ( new Gs2Chat . DescribeLatestMessagesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPassword ( null ) . withCategory ( null ) . withUserId ( \"user-0002\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_latest_messages_by_user_id ( chat . DescribeLatestMessagesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_password ( None ) . with_category ( None ) . with_user_id ( 'user-0002' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_latest_messages_by_user_id ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , password = nil , category = nil , userId = \"user-0002\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'chat' ) api_result_handler = client.describe_latest_messages_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , password = nil , category = nil , userId = \"user-0002\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; post 메시지 게시 현재 로그인한 사용자로서 지정된 룸에 메시지를 게시합니다. 카테고리 번호를 지정하여 메시지의 종류(예: 0은 텍스트, 1은 스탬프/스티커)를 분류하고, 메타데이터에 메시지 내용을 포함할 수 있습니다. 메시지 카테고리 모델에서 rejectAccessTokenPost 플래그가 활성화되어 있는 경우, 액세스 토큰을 통한 게시는 거부되며 오류가 반환됩니다. 이 경우 서버 사이드의 PostByUserId API를 사용하세요. 룸에 비밀번호가 설정되어 있는 경우 올바른 비밀번호를 제공해야 합니다. 룸에 화이트리스트가 있는 경우 접근은 목록에 있는 사용자로 제한됩니다. 게시 후, 메시지의 카테고리 알림 설정과 일치하는 룸 구독 사용자 전원에게 자동으로 알림이 전송됩니다. 메시지의 TTL은 네임스페이스의 messageLifeTimeDays 설정에 따라 결정됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 category int 0 0 ~ 2147483645 메시지 분류용 카테고리 번호 메시지를 분류하기 위한 숫자 값입니다. 예를 들어, 0은 텍스트 메시지, 1은 스탬프(스티커), 그 외의 값은 커스텀 메시지 타입으로 사용할 수 있습니다. 카테고리에 따라 메시지에 적용되는 CategoryModel의 규칙이 결정됩니다. metadata string  ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 비밀번호 Result 타입 설명 item Message 게시한 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . Post ( \u0026 chat . PostRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Category : nil , Metadata : pointy . String ( \"MESSAGE_0001\" ), Password : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\PostRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e post ( ( new PostRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCategory ( null ) -\u003e withMetadata ( \"MESSAGE_0001\" ) -\u003e withPassword ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.PostRequest ; import io.gs2.chat.result.PostResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { PostResult result = client . post ( new PostRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategory ( null ) . withMetadata ( \"MESSAGE_0001\" ) . withPassword ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . PostResult \u003e asyncResult = null ; yield return client . Post ( new Gs2 . Gs2Chat . Request . PostRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCategory ( null ) . WithMetadata ( \"MESSAGE_0001\" ) . WithPassword ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . post ( new Gs2Chat . PostRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategory ( null ) . withMetadata ( \"MESSAGE_0001\" ) . withPassword ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . post ( chat . PostRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_access_token ( 'accessToken-0001' ) . with_category ( None ) . with_metadata ( 'MESSAGE_0001' ) . with_password ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.post ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , category = nil , metadata = \"MESSAGE_0001\" , password = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.post_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , category = nil , metadata = \"MESSAGE_0001\" , password = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; postByUserId 사용자 ID를 지정하여 메시지 게시 서버 사이드에서 지정된 사용자로서 지정된 룸에 메시지를 게시합니다. 액세스 토큰을 통한 게시와 달리, 카테고리의 rejectAccessTokenPost 제한을 받지 않으므로 시스템 메시지나 공지사항 게시에 적합합니다. 룸에 비밀번호가 설정되어 있는 경우 올바른 비밀번호를 제공해야 합니다. 룸에 화이트리스트가 있는 경우 접근은 목록에 있는 사용자로 제한됩니다. 게시 후, 메시지의 카테고리 알림 설정과 일치하는 룸 구독 사용자 전원에게 자동으로 알림이 전송됩니다. 메시지의 TTL은 네임스페이스의 messageLifeTimeDays 설정에 따라 결정됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID category int 0 0 ~ 2147483645 메시지 분류용 카테고리 번호 메시지를 분류하기 위한 숫자 값입니다. 예를 들어, 0은 텍스트 메시지, 1은 스탬프(스티커), 그 외의 값은 커스텀 메시지 타입으로 사용할 수 있습니다. 카테고리에 따라 메시지에 적용되는 CategoryModel의 규칙이 결정됩니다. metadata string  ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. password string ~ 128자 비밀번호 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 게시한 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . PostByUserId ( \u0026 chat . PostByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0002\" ), UserId : pointy . String ( \"user-0002\" ), Category : nil , Metadata : pointy . String ( \"MESSAGE_0003\" ), Password : pointy . String ( \"password-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\PostByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e postByUserId ( ( new PostByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0002\" ) -\u003e withUserId ( \"user-0002\" ) -\u003e withCategory ( null ) -\u003e withMetadata ( \"MESSAGE_0003\" ) -\u003e withPassword ( \"password-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.PostByUserIdRequest ; import io.gs2.chat.result.PostByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { PostByUserIdResult result = client . postByUserId ( new PostByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0002\" ) . withUserId ( \"user-0002\" ) . withCategory ( null ) . withMetadata ( \"MESSAGE_0003\" ) . withPassword ( \"password-0002\" ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . PostByUserIdResult \u003e asyncResult = null ; yield return client . PostByUserId ( new Gs2 . Gs2Chat . Request . PostByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0002\" ) . WithUserId ( \"user-0002\" ) . WithCategory ( null ) . WithMetadata ( \"MESSAGE_0003\" ) . WithPassword ( \"password-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . postByUserId ( new Gs2Chat . PostByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0002\" ) . withUserId ( \"user-0002\" ) . withCategory ( null ) . withMetadata ( \"MESSAGE_0003\" ) . withPassword ( \"password-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . post_by_user_id ( chat . PostByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0002' ) . with_user_id ( 'user-0002' ) . with_category ( None ) . with_metadata ( 'MESSAGE_0003' ) . with_password ( 'password-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.post_by_user_id ({ namespaceName = \"namespace-0001\" , roomName = \"room-0002\" , userId = \"user-0002\" , category = nil , metadata = \"MESSAGE_0003\" , password = \"password-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.post_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0002\" , userId = \"user-0002\" , category = nil , metadata = \"MESSAGE_0003\" , password = \"password-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMessage 메시지 취득 지정된 룸에서 메시지 이름을 지정하여 특정 메시지를 취득합니다. 룸에 비밀번호가 설정되어 있는 경우 올바른 비밀번호를 제공해야 합니다. 룸에 화이트리스트가 있는 경우 접근은 목록에 있는 사용자로 제한됩니다. 취득되는 정보에는 메시지의 카테고리, 메타데이터(내용), 게시 사용자 ID, 생성 타임스탬프가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. password string ~ 128자 비밀번호 accessToken string ~ 128자 액세스 토큰 Result 타입 설명 item Message 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetMessage ( \u0026 chat . GetMessageRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), MessageName : pointy . String ( \"message-0001\" ), Password : nil , AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetMessageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getMessage ( ( new GetMessageRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withPassword ( null ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetMessageRequest ; import io.gs2.chat.result.GetMessageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetMessageResult result = client . getMessage ( new GetMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withMessageName ( \"message-0001\" ) . withPassword ( null ) . withAccessToken ( \"accessToken-0001\" ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetMessageResult \u003e asyncResult = null ; yield return client . GetMessage ( new Gs2 . Gs2Chat . Request . GetMessageRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithMessageName ( \"message-0001\" ) . WithPassword ( null ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getMessage ( new Gs2Chat . GetMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withMessageName ( \"message-0001\" ) . withPassword ( null ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_message ( chat . GetMessageRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_message_name ( 'message-0001' ) . with_password ( None ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_message ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , messageName = \"message-0001\" , password = nil , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_message_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , messageName = \"message-0001\" , password = nil , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMessageByUserId 사용자 ID를 지정하여 메시지 취득 서버 사이드의 사용자 ID를 사용하여, 지정된 룸에서 메시지 이름을 지정해 특정 메시지를 취득합니다. 룸에 비밀번호가 설정되어 있는 경우 올바른 비밀번호를 제공해야 합니다. 룸에 화이트리스트가 있는 경우 접근은 목록에 있는 사용자로 제한됩니다. 취득되는 정보에는 메시지의 카테고리, 메타데이터(내용), 게시 사용자 ID, 생성 타임스탬프가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. password string ~ 128자 비밀번호 userId string ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetMessageByUserId ( \u0026 chat . GetMessageByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), MessageName : pointy . String ( \"message-0001\" ), Password : nil , UserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetMessageByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getMessageByUserId ( ( new GetMessageByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withPassword ( null ) -\u003e withUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetMessageByUserIdRequest ; import io.gs2.chat.result.GetMessageByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetMessageByUserIdResult result = client . getMessageByUserId ( new GetMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withMessageName ( \"message-0001\" ) . withPassword ( null ) . withUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetMessageByUserIdResult \u003e asyncResult = null ; yield return client . GetMessageByUserId ( new Gs2 . Gs2Chat . Request . GetMessageByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithMessageName ( \"message-0001\" ) . WithPassword ( null ) . WithUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getMessageByUserId ( new Gs2Chat . GetMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withMessageName ( \"message-0001\" ) . withPassword ( null ) . withUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_message_by_user_id ( chat . GetMessageByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_message_name ( 'message-0001' ) . with_password ( None ) . with_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_message_by_user_id ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , messageName = \"message-0001\" , password = nil , userId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_message_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , messageName = \"message-0001\" , password = nil , userId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMessage 메시지 삭제 지정된 룸에서 특정 메시지를 삭제합니다. 이 작업은 메시지를 완전히 삭제하며, 복원할 수 없습니다. 게시 사용자에 관계없이 임의의 메시지를 삭제할 수 있는 관리용 API입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 삭제한 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DeleteMessage ( \u0026 chat . DeleteMessageRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), UserId : pointy . String ( \"user-0001\" ), MessageName : pointy . String ( \"message-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DeleteMessageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e deleteMessage ( ( new DeleteMessageRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DeleteMessageRequest ; import io.gs2.chat.result.DeleteMessageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DeleteMessageResult result = client . deleteMessage ( new DeleteMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DeleteMessageResult \u003e asyncResult = null ; yield return client . DeleteMessage ( new Gs2 . Gs2Chat . Request . DeleteMessageRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithUserId ( \"user-0001\" ) . WithMessageName ( \"message-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . deleteMessage ( new Gs2Chat . DeleteMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . delete_message ( chat . DeleteMessageRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_user_id ( 'user-0001' ) . with_message_name ( 'message-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.delete_message ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.delete_message_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSubscribes 룸 구독 목록 취득 페이지 토큰과 취득 건수 제한을 지정하여 구독 중인 룸의 목록을 취득할 수 있습니다. 이를 통해 사용자가 구독 중인 룸의 개요를 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomNamePrefix string ~ 64자 구독 중인 룸 이름의 필터 접두사 accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 룸 구독 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeSubscribes ( \u0026 chat . DescribeSubscribesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomNamePrefix : nil , AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeSubscribesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeSubscribes ( ( new DescribeSubscribesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomNamePrefix ( null ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeSubscribesRequest ; import io.gs2.chat.result.DescribeSubscribesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeSubscribesResult result = client . describeSubscribes ( new DescribeSubscribesRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomNamePrefix ( null ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Subscribe \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeSubscribesResult \u003e asyncResult = null ; yield return client . DescribeSubscribes ( new Gs2 . Gs2Chat . Request . DescribeSubscribesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomNamePrefix ( null ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeSubscribes ( new Gs2Chat . DescribeSubscribesRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomNamePrefix ( null ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_subscribes ( chat . DescribeSubscribesRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name_prefix ( None ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_subscribes ({ namespaceName = \"namespace-0001\" , roomNamePrefix = nil , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'chat' ) api_result_handler = client.describe_subscribes_async ({ namespaceName = \"namespace-0001\" , roomNamePrefix = nil , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeSubscribesByUserId 사용자 ID를 지정하여 룸 구독의 목록 취득 페이지 토큰과 취득 건수 제한을 지정하여 구독 목록을 취득할 수 있습니다. 이를 통해 사용자가 구독 중인 룸의 개요를 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomNamePrefix string ~ 64자 구독 중인 룸 이름의 필터 접두사 userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 룸 구독 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeSubscribesByUserId ( \u0026 chat . DescribeSubscribesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomNamePrefix : nil , UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeSubscribesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeSubscribesByUserId ( ( new DescribeSubscribesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomNamePrefix ( null ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeSubscribesByUserIdRequest ; import io.gs2.chat.result.DescribeSubscribesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeSubscribesByUserIdResult result = client . describeSubscribesByUserId ( new DescribeSubscribesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomNamePrefix ( null ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Subscribe \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeSubscribesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeSubscribesByUserId ( new Gs2 . Gs2Chat . Request . DescribeSubscribesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomNamePrefix ( null ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeSubscribesByUserId ( new Gs2Chat . DescribeSubscribesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomNamePrefix ( null ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_subscribes_by_user_id ( chat . DescribeSubscribesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name_prefix ( None ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_subscribes_by_user_id ({ namespaceName = \"namespace-0001\" , roomNamePrefix = nil , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'chat' ) api_result_handler = client.describe_subscribes_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomNamePrefix = nil , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeSubscribesByRoomName 룸 이름을 지정하여 구독 중인 사용자의 목록 취득 페이지 토큰과 취득 건수 제한을 지정하여 해당 룸을 구독 중인 사용자 목록을 취득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독할 룸 이름 구독할 채팅 룸의 이름입니다. 구독하면, 이 룸에 새로운 메시지가 게시될 때마다 GS2-Gateway를 통해 푸시 알림이 전송됩니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 룸 구독 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeSubscribesByRoomName ( \u0026 chat . DescribeSubscribesByRoomNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeSubscribesByRoomNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeSubscribesByRoomName ( ( new DescribeSubscribesByRoomNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeSubscribesByRoomNameRequest ; import io.gs2.chat.result.DescribeSubscribesByRoomNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeSubscribesByRoomNameResult result = client . describeSubscribesByRoomName ( new DescribeSubscribesByRoomNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Subscribe \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeSubscribesByRoomNameResult \u003e asyncResult = null ; yield return client . DescribeSubscribesByRoomName ( new Gs2 . Gs2Chat . Request . DescribeSubscribesByRoomNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeSubscribesByRoomName ( new Gs2Chat . DescribeSubscribesByRoomNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_subscribes_by_room_name ( chat . DescribeSubscribesByRoomNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_subscribes_by_room_name ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'chat' ) api_result_handler = client.describe_subscribes_by_room_name_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; subscribe 룸을 구독 지정된 룸에 새로운 메시지가 게시되었을 때 알림을 받을 수 있도록, 현재 로그인한 사용자를 구독 등록합니다. 알림 타입을 지정하여 알림 설정을 구성할 수 있으며, 메시지 카테고리별로 알림을 필터링할 수 있습니다. 구독 중인 룸에 메시지가 게시되면, 카테고리 필터가 일치하는 모든 구독자에게 알림이 전달됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독할 룸 이름 구독할 채팅 룸의 이름입니다. 구독하면, 이 룸에 새로운 메시지가 게시될 때마다 GS2-Gateway를 통해 푸시 알림이 전송됩니다. accessToken string  ~ 128자 액세스 토큰 notificationTypes List [] 0 ~ 100 items 신규 메시지 알림을 받을 카테고리 리스트 푸시 알림을 트리거하는 메시지 카테고리를 필터링합니다. 비어 있는 경우, 모든 카테고리에 대해 알림이 전송됩니다. 각 항목은 카테고리 번호와 선택적인 모바일 푸시 알림 전달 여부를 지정합니다. Result 타입 설명 item Subscribe 룸 구독 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . Subscribe ( \u0026 chat . SubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), NotificationTypes : [] chat . NotificationType { chat . NotificationType { }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\SubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e subscribe ( ( new SubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withNotificationTypes ([ ( new \\Gs2\\Chat\\Model\\NotificationType ()), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.SubscribeRequest ; import io.gs2.chat.result.SubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { SubscribeResult result = client . subscribe ( new SubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withNotificationTypes ( Arrays . asList ( new io . gs2 . chat . model . NotificationType () )) ); Subscribe item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . SubscribeResult \u003e asyncResult = null ; yield return client . Subscribe ( new Gs2 . Gs2Chat . Request . SubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithNotificationTypes ( new Gs2 . Gs2Chat . Model . NotificationType [] { new Gs2 . Gs2Chat . Model . NotificationType (), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . subscribe ( new Gs2Chat . SubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withNotificationTypes ([ new Gs2Chat . model . NotificationType (), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . subscribe ( chat . SubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_access_token ( 'accessToken-0001' ) . with_notification_types ([ chat . NotificationType (), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.subscribe ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , notificationTypes = { { } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.subscribe_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , notificationTypes = { { } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; subscribeByUserId 사용자 ID를 지정하여 룸을 구독 지정된 룸에 새로운 메시지가 게시되었을 때 알림을 받을 수 있도록, 지정된 사용자를 구독 등록합니다. 알림 타입을 지정하여 알림 설정을 구성할 수 있으며, 메시지 카테고리별로 알림을 필터링할 수 있습니다. 구독 중인 룸에 메시지가 게시되면, 카테고리 필터가 일치하는 모든 구독자에게 알림이 전달됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독할 룸 이름 구독할 채팅 룸의 이름입니다. 구독하면, 이 룸에 새로운 메시지가 게시될 때마다 GS2-Gateway를 통해 푸시 알림이 전송됩니다. userId string  ~ 128자 사용자ID notificationTypes List [] 0 ~ 100 items 신규 메시지 알림을 받을 카테고리 리스트 푸시 알림을 트리거하는 메시지 카테고리를 필터링합니다. 비어 있는 경우, 모든 카테고리에 대해 알림이 전송됩니다. 각 항목은 카테고리 번호와 선택적인 모바일 푸시 알림 전달 여부를 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Subscribe 룸 구독 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . SubscribeByUserId ( \u0026 chat . SubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), UserId : pointy . String ( \"user-0001\" ), NotificationTypes : [] chat . NotificationType { * . NotificationType (), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\SubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e subscribeByUserId ( ( new SubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withNotificationTypes ([ NotificationType (), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.SubscribeByUserIdRequest ; import io.gs2.chat.result.SubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { SubscribeByUserIdResult result = client . subscribeByUserId ( new SubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withNotificationTypes ( Arrays . asList ( new NotificationType () )) . withTimeOffsetToken ( null ) ); Subscribe item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . SubscribeByUserIdResult \u003e asyncResult = null ; yield return client . SubscribeByUserId ( new Gs2 . Gs2Chat . Request . SubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithUserId ( \"user-0001\" ) . WithNotificationTypes ( new Gs2 . Gs2Chat . Model . NotificationType [] { new Gs2 . Gs2Chat . Model . NotificationType (), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . subscribeByUserId ( new Gs2Chat . SubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withNotificationTypes ([ new NotificationType (), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . subscribe_by_user_id ( chat . SubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_user_id ( 'user-0001' ) . with_notification_types ([ NotificationType (), ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.subscribe_by_user_id ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , notificationTypes = { {} }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.subscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , notificationTypes = { {} }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribe 룸 구독 정보 취득 현재 로그인한 사용자의, 지정된 룸에 대한 구독 정보를 취득합니다. 취득되는 정보에는 이 구독에 설정된 알림 타입 설정이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독할 룸 이름 구독할 채팅 룸의 이름입니다. 구독하면, 이 룸에 새로운 메시지가 게시될 때마다 GS2-Gateway를 통해 푸시 알림이 전송됩니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Subscribe 룸 구독 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetSubscribe ( \u0026 chat . GetSubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetSubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getSubscribe ( ( new GetSubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetSubscribeRequest ; import io.gs2.chat.result.GetSubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetSubscribeResult result = client . getSubscribe ( new GetSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Subscribe item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetSubscribeResult \u003e asyncResult = null ; yield return client . GetSubscribe ( new Gs2 . Gs2Chat . Request . GetSubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getSubscribe ( new Gs2Chat . GetSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_subscribe ( chat . GetSubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_subscribe ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_subscribe_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribeByUserId 사용자 ID를 지정하여 룸 구독 정보 취득 지정된 사용자의, 지정된 룸에 대한 구독 정보를 취득합니다. 취득되는 정보에는 이 구독에 설정된 알림 타입 설정이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독할 룸 이름 구독할 채팅 룸의 이름입니다. 구독하면, 이 룸에 새로운 메시지가 게시될 때마다 GS2-Gateway를 통해 푸시 알림이 전송됩니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Subscribe 룸 구독 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetSubscribeByUserId ( \u0026 chat . GetSubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetSubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getSubscribeByUserId ( ( new GetSubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetSubscribeByUserIdRequest ; import io.gs2.chat.result.GetSubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetSubscribeByUserIdResult result = client . getSubscribeByUserId ( new GetSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Subscribe item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetSubscribeByUserIdResult \u003e asyncResult = null ; yield return client . GetSubscribeByUserId ( new Gs2 . Gs2Chat . Request . GetSubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getSubscribeByUserId ( new Gs2Chat . GetSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_subscribe_by_user_id ( chat . GetSubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_subscribe_by_user_id ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_subscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNotificationType 알림 방법을 갱신 현재 로그인한 사용자의, 지정된 룸에 대한 구독의 알림 타입 설정을 갱신합니다. 알림 타입을 설정함으로써, 어떤 메시지 카테고리가 사용자에게 푸시 알림을 발생시킬지 제어할 수 있습니다. 예를 들어, 특정 카테고리 번호의 알림만 수신하도록 설정하거나, 특정 카테고리의 알림을 비활성화할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독 중인 룸 이름 알림 설정을 변경할 대상 구독 중 채팅 룸 이름입니다. accessToken string  ~ 128자 액세스 토큰 notificationTypes List [] 0 ~ 100 items 신규 메시지 알림을 받을 카테고리 리스트 푸시 알림을 트리거하는 메시지 카테고리를 필터링합니다. 비어 있는 경우, 모든 카테고리에 대해 알림이 전송됩니다. 각 항목은 카테고리 번호와 선택적인 모바일 푸시 알림 전달 여부를 지정합니다. Result 타입 설명 item Subscribe 갱신한 룸 구독 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UpdateNotificationType ( \u0026 chat . UpdateNotificationTypeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), NotificationTypes : [] chat . NotificationType { * . NotificationType (), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UpdateNotificationTypeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e updateNotificationType ( ( new UpdateNotificationTypeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withNotificationTypes ([ NotificationType (), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UpdateNotificationTypeRequest ; import io.gs2.chat.result.UpdateNotificationTypeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UpdateNotificationTypeResult result = client . updateNotificationType ( new UpdateNotificationTypeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withNotificationTypes ( Arrays . asList ( new NotificationType () )) ); Subscribe item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UpdateNotificationTypeResult \u003e asyncResult = null ; yield return client . UpdateNotificationType ( new Gs2 . Gs2Chat . Request . UpdateNotificationTypeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithNotificationTypes ( new Gs2 . Gs2Chat . Model . NotificationType [] { new Gs2 . Gs2Chat . Model . NotificationType (), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . updateNotificationType ( new Gs2Chat . UpdateNotificationTypeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withNotificationTypes ([ new NotificationType (), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . update_notification_type ( chat . UpdateNotificationTypeRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_access_token ( 'accessToken-0001' ) . with_notification_types ([ NotificationType (), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.update_notification_type ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , notificationTypes = { {} }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.update_notification_type_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , notificationTypes = { {} }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNotificationTypeByUserId 사용자 ID를 지정하여 알림 방법을 갱신 지정된 사용자의, 지정된 룸에 대한 구독의 알림 타입 설정을 갱신합니다. 알림 타입을 설정함으로써, 어떤 메시지 카테고리가 사용자에게 푸시 알림을 발생시킬지 제어할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 구독 중인 룸 이름 알림 설정을 변경할 대상 구독 중 채팅 룸 이름입니다. userId string  ~ 128자 사용자ID notificationTypes List [] 0 ~ 100 items 신규 메시지 알림을 받을 카테고리 리스트 푸시 알림을 트리거하는 메시지 카테고리를 필터링합니다. 비어 있는 경우, 모든 카테고리에 대해 알림이 전송됩니다. 각 항목은 카테고리 번호와 선택적인 모바일 푸시 알림 전달 여부를 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Subscribe 갱신한 룸 구독 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UpdateNotificationTypeByUserId ( \u0026 chat . UpdateNotificationTypeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), UserId : pointy . String ( \"user-0001\" ), NotificationTypes : [] chat . NotificationType { * . NotificationType (), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UpdateNotificationTypeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e updateNotificationTypeByUserId ( ( new UpdateNotificationTypeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withNotificationTypes ([ NotificationType (), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UpdateNotificationTypeByUserIdRequest ; import io.gs2.chat.result.UpdateNotificationTypeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UpdateNotificationTypeByUserIdResult result = client . updateNotificationTypeByUserId ( new UpdateNotificationTypeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withNotificationTypes ( Arrays . asList ( new NotificationType () )) . withTimeOffsetToken ( null ) ); Subscribe item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UpdateNotificationTypeByUserIdResult \u003e asyncResult = null ; yield return client . UpdateNotificationTypeByUserId ( new Gs2 . Gs2Chat . Request . UpdateNotificationTypeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithUserId ( \"user-0001\" ) . WithNotificationTypes ( new Gs2 . Gs2Chat . Model . NotificationType [] { new Gs2 . Gs2Chat . Model . NotificationType (), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . updateNotificationTypeByUserId ( new Gs2Chat . UpdateNotificationTypeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withNotificationTypes ([ new NotificationType (), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . update_notification_type_by_user_id ( chat . UpdateNotificationTypeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_user_id ( 'user-0001' ) . with_notification_types ([ NotificationType (), ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.update_notification_type_by_user_id ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , notificationTypes = { {} }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.update_notification_type_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , notificationTypes = { {} }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unsubscribe 룸 구독 해제 현재 로그인한 사용자의, 지정된 룸에 대한 구독을 해제합니다. 구독 해제 후에는, 이 룸에 새로운 메시지가 게시되어도 알림을 수신하지 않습니다. 구독 레코드는 완전히 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 구독을 해제할 룸 이름 구독을 해제할 채팅 룸의 이름입니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Subscribe 해제한 룸 구독 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . Unsubscribe ( \u0026 chat . UnsubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UnsubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e unsubscribe ( ( new UnsubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UnsubscribeRequest ; import io.gs2.chat.result.UnsubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UnsubscribeResult result = client . unsubscribe ( new UnsubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Subscribe item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UnsubscribeResult \u003e asyncResult = null ; yield return client . Unsubscribe ( new Gs2 . Gs2Chat . Request . UnsubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . unsubscribe ( new Gs2Chat . UnsubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . unsubscribe ( chat . UnsubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.unsubscribe ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.unsubscribe_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unsubscribeByUserId 사용자 ID를 지정하여 룸 구독 해제 지정된 사용자의, 지정된 룸에 대한 구독을 해제합니다. 구독 해제 후에는, 이 룸에 새로운 메시지가 게시되어도 알림을 수신하지 않습니다. 구독 레코드는 완전히 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 구독을 해제할 룸 이름 구독을 해제할 채팅 룸의 이름입니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Subscribe 해제한 룸 구독 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UnsubscribeByUserId ( \u0026 chat . UnsubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UnsubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e unsubscribeByUserId ( ( new UnsubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UnsubscribeByUserIdRequest ; import io.gs2.chat.result.UnsubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UnsubscribeByUserIdResult result = client . unsubscribeByUserId ( new UnsubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Subscribe item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UnsubscribeByUserIdResult \u003e asyncResult = null ; yield return client . UnsubscribeByUserId ( new Gs2 . Gs2Chat . Request . UnsubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . unsubscribeByUserId ( new Gs2Chat . UnsubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . unsubscribe_by_user_id ( chat . UnsubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.unsubscribe_by_user_id ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.unsubscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCategoryModels 메시지 카테고리 모델 목록 취득 지정된 네임스페이스에서 현재 유효화되어 있는 모든 메시지 카테고리 모델을 취득합니다. 메시지 카테고리 모델은 메시지의 카테고리(일반 텍스트 메시지, 스탬프/스티커 등)를 정의하며, 카테고리별 게시 권한을 제어합니다. 마스터 버전과 달리, 유효화(공개)된 모델만 반환하며 페이지네이션은 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 메시지 카테고리 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeCategoryModels ( \u0026 chat . DescribeCategoryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeCategoryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeCategoryModels ( ( new DescribeCategoryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeCategoryModelsRequest ; import io.gs2.chat.result.DescribeCategoryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeCategoryModelsResult result = client . describeCategoryModels ( new DescribeCategoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List CategoryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeCategoryModelsResult \u003e asyncResult = null ; yield return client . DescribeCategoryModels ( new Gs2 . Gs2Chat . Request . DescribeCategoryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeCategoryModels ( new Gs2Chat . DescribeCategoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_category_models ( chat . DescribeCategoryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_category_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'chat' ) api_result_handler = client.describe_category_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getCategoryModel 메시지 카테고리 모델 취득 지정된 네임스페이스에서 지정된 카테고리 번호의, 현재 유효한 메시지 카테고리 모델을 취득합니다. 취득되는 정보에는 액세스 토큰 인증 사용자가 이 카테고리에 게시하는 것이 제한되어 있는지 여부(rejectAccessTokenPost 플래그)가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. Result 타입 설명 item CategoryModel 메시지 카테고리 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetCategoryModel ( \u0026 chat . GetCategoryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Category : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetCategoryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getCategoryModel ( ( new GetCategoryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategory ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetCategoryModelRequest ; import io.gs2.chat.result.GetCategoryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetCategoryModelResult result = client . getCategoryModel ( new GetCategoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) ); CategoryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetCategoryModelResult \u003e asyncResult = null ; yield return client . GetCategoryModel ( new Gs2 . Gs2Chat . Request . GetCategoryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategory ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getCategoryModel ( new Gs2Chat . GetCategoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_category_model ( chat . GetCategoryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_category ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_category_model ({ namespaceName = \"namespace-0001\" , category = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_category_model_async ({ namespaceName = \"namespace-0001\" , category = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 메시지 카테고리 모델 마스터를 유효화 가능한 마스터 데이터 형식으로 내보내기 현재의 메시지 카테고리 모델 마스터 데이터를 유효화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 가져오기에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentModelMaster 유효화 가능한 메시지 카테고리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 chat . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.ExportMasterRequest ; import io.gs2.chat.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Chat . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Chat . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . export_master ( chat . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentModelMaster 현재 활성화된 메시지 카테고리 모델의 마스터 데이터 취득 지정된 네임스페이스에서 현재 유효화(공개)되어 있는 메시지 카테고리 모델의 마스터 데이터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentModelMaster 현재 활성화된 메시지 카테고리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetCurrentModelMaster ( \u0026 chat . GetCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getCurrentModelMaster ( ( new GetCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetCurrentModelMasterRequest ; import io.gs2.chat.result.GetCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetCurrentModelMasterResult result = client . getCurrentModelMaster ( new GetCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetCurrentModelMasterResult \u003e asyncResult = null ; yield return client . GetCurrentModelMaster ( new Gs2 . Gs2Chat . Request . GetCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getCurrentModelMaster ( new Gs2Chat . GetCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_current_model_master ( chat . GetCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_current_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_current_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentModelMaster 현재 활성화된 메시지 카테고리 모델의 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우에는, 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentModelMaster 에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentModelMaster ( \u0026 chat . PreUpdateCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\PreUpdateCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentModelMaster ( ( new PreUpdateCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.PreUpdateCurrentModelMasterRequest ; import io.gs2.chat.result.PreUpdateCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { PreUpdateCurrentModelMasterResult result = client . preUpdateCurrentModelMaster ( new PreUpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . PreUpdateCurrentModelMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentModelMaster ( new Gs2 . Gs2Chat . Request . PreUpdateCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . preUpdateCurrentModelMaster ( new Gs2Chat . PreUpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . pre_update_current_model_master ( chat . PreUpdateCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.pre_update_current_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'chat' ) api_result_handler = client.pre_update_current_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentModelMaster 현재 활성화된 메시지 카테고리 모델의 마스터 데이터 갱신 지정된 네임스페이스의 메시지 카테고리 모델의 마스터 데이터를 갱신하고 유효화(공개)합니다. 2가지 모드를 지원합니다: 인라인 마스터 데이터용 ‘direct’ 모드와, 사전에 업로드된 마스터 데이터용 ‘preUpload’ 모드입니다. 1MB를 초과하는 마스터 데이터의 경우에는, 3단계 갱신 흐름(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))을 사용해 주세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentModelMaster 갱신된 현재 활성화된 메시지 카테고리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentModelMaster ( \u0026 chat . UpdateCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2020-04-30\\\", \\\"categoryModels\\\": [{\\\"category\\\": 0, \\\"rejectAccessTokenPost\\\": \\\"Disabled\\\"}, {\\\"category\\\": 1, \\\"rejectAccessTokenPost\\\": \\\"Disabled\\\"}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UpdateCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e updateCurrentModelMaster ( ( new UpdateCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2020-04-30 \\\" , \\\" categoryModels \\\" : [{ \\\" category \\\" : 0, \\\" rejectAccessTokenPost \\\" : \\\" Disabled \\\" }, { \\\" category \\\" : 1, \\\" rejectAccessTokenPost \\\" : \\\" Disabled \\\" }]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UpdateCurrentModelMasterRequest ; import io.gs2.chat.result.UpdateCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UpdateCurrentModelMasterResult result = client . updateCurrentModelMaster ( new UpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2020-04-30\\\", \\\"categoryModels\\\": [{\\\"category\\\": 0, \\\"rejectAccessTokenPost\\\": \\\"Disabled\\\"}, {\\\"category\\\": 1, \\\"rejectAccessTokenPost\\\": \\\"Disabled\\\"}]}\" ) . withUploadToken ( null ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UpdateCurrentModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentModelMaster ( new Gs2 . Gs2Chat . Request . UpdateCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2020-04-30\\\", \\\"categoryModels\\\": [{\\\"category\\\": 0, \\\"rejectAccessTokenPost\\\": \\\"Disabled\\\"}, {\\\"category\\\": 1, \\\"rejectAccessTokenPost\\\": \\\"Disabled\\\"}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . updateCurrentModelMaster ( new Gs2Chat . UpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2020-04-30\\\", \\\"categoryModels\\\": [{\\\"category\\\": 0, \\\"rejectAccessTokenPost\\\": \\\"Disabled\\\"}, {\\\"category\\\": 1, \\\"rejectAccessTokenPost\\\": \\\"Disabled\\\"}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . update_current_model_master ( chat . UpdateCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2020-04-30\", \"categoryModels\": [{\"category\": 0, \"rejectAccessTokenPost\": \"Disabled\"}, {\"category\": 1, \"rejectAccessTokenPost\": \"Disabled\"}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.update_current_model_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2020-04-30 \\\" , \\\" categoryModels \\\" : [{ \\\" category \\\" : 0, \\\" rejectAccessTokenPost \\\" : \\\" Disabled \\\" }, { \\\" category \\\" : 1, \\\" rejectAccessTokenPost \\\" : \\\" Disabled \\\" }]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.update_current_model_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2020-04-30 \\\" , \\\" categoryModels \\\" : [{ \\\" category \\\" : 0, \\\" rejectAccessTokenPost \\\" : \\\" Disabled \\\" }, { \\\" category \\\" : 1, \\\" rejectAccessTokenPost \\\" : \\\" Disabled \\\" }]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentModelMasterFromGitHub 현재 활성화된 메시지 카테고리 모델의 마스터 데이터를 GitHub에서 갱신 GitHub 리포지토리에서 직접 마스터 데이터를 가져와 갱신·유효화(공개)합니다. 체크아웃 설정에는, 사용할 리포지토리, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고, 직접 배포하는 경우에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentModelMaster 갱신된 현재 활성화된 메시지 카테고리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentModelMasterFromGitHub ( \u0026 chat . UpdateCurrentModelMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 chat . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UpdateCurrentModelMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e updateCurrentModelMasterFromGitHub ( ( new UpdateCurrentModelMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UpdateCurrentModelMasterFromGitHubRequest ; import io.gs2.chat.result.UpdateCurrentModelMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UpdateCurrentModelMasterFromGitHubResult result = client . updateCurrentModelMasterFromGitHub ( new UpdateCurrentModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UpdateCurrentModelMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentModelMasterFromGitHub ( new Gs2 . Gs2Chat . Request . UpdateCurrentModelMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Chat . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . updateCurrentModelMasterFromGitHub ( new Gs2Chat . UpdateCurrentModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Chat . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . update_current_model_master_from_git_hub ( chat . UpdateCurrentModelMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( chat . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.update_current_model_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.update_current_model_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCategoryModelMasters 메시지 카테고리 모델 마스터 목록 취득 지정된 네임스페이스의 메시지 카테고리 모델 마스터를 페이지네이션을 지원하여 취득합니다. 메시지 카테고리 모델 마스터는 메시지의 카테고리와 그 게시 권한을 정의하는 메시지 카테고리 모델의 편집 가능한 버전입니다. 마스터 데이터에 대한 변경 사항은 현재 모델 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 메시지 카테고리 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DescribeCategoryModelMasters ( \u0026 chat . DescribeCategoryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DescribeCategoryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e describeCategoryModelMasters ( ( new DescribeCategoryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DescribeCategoryModelMastersRequest ; import io.gs2.chat.result.DescribeCategoryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DescribeCategoryModelMastersResult result = client . describeCategoryModelMasters ( new DescribeCategoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List CategoryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DescribeCategoryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeCategoryModelMasters ( new Gs2 . Gs2Chat . Request . DescribeCategoryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . describeCategoryModelMasters ( new Gs2Chat . DescribeCategoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . describe_category_model_masters ( chat . DescribeCategoryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.describe_category_model_masters ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'chat' ) api_result_handler = client.describe_category_model_masters_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createCategoryModelMaster 메시지 카테고리 모델 마스터를 신규 작성 메시지의 카테고리와 그 게시 권한을 정의하는 새로운 메시지 카테고리 모델 마스터를 작성합니다. 카테고리 번호, 설명, 그리고 rejectAccessTokenPost 플래그를 설정할 수 있습니다. 이 플래그는 액세스 토큰 인증 사용자(게임 플레이어)가 이 카테고리에 메시지를 게시할 수 있는지 여부를 제어합니다. rejectAccessTokenPost를 활성화하면, 이 카테고리에서는 서버 사이드(사용자 ID 지정)로부터의 게시만 허용되어 시스템 메시지나 공지사항에 적합합니다. 변경 사항은 현재 모델 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. description string ~ 1024자 설명문 rejectAccessTokenPost 문자열 열거형 enum {   “Enabled”,   “Disabled” } 플레이어의 액세스 토큰을 이용한 게시를 거부한다 활성화하면, 이 카테고리에서는 서버 사이드 API 호출(사용자 ID 지정)만으로 메시지를 게시할 수 있습니다. 플레이어가 직접 게시해서는 안 되는 시스템 안내나 서버 생성 메시지에 유용합니다. 정의 설명 Enabled 플레이어의 액세스 토큰을 이용한 게시를 거부한다 Disabled 플레이어의 액세스 토큰을 이용한 게시를 허용한다 Result 타입 설명 item CategoryModelMaster 작성한 메시지 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . CreateCategoryModelMaster ( \u0026 chat . CreateCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Category : pointy . Int32 ( 0 ), Description : nil , RejectAccessTokenPost : pointy . String ( \"Disabled\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\CreateCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e createCategoryModelMaster ( ( new CreateCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategory ( 0 ) -\u003e withDescription ( null ) -\u003e withRejectAccessTokenPost ( \"Disabled\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.CreateCategoryModelMasterRequest ; import io.gs2.chat.result.CreateCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { CreateCategoryModelMasterResult result = client . createCategoryModelMaster ( new CreateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) . withDescription ( null ) . withRejectAccessTokenPost ( \"Disabled\" ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . CreateCategoryModelMasterResult \u003e asyncResult = null ; yield return client . CreateCategoryModelMaster ( new Gs2 . Gs2Chat . Request . CreateCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategory ( 0 ) . WithDescription ( null ) . WithRejectAccessTokenPost ( \"Disabled\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . createCategoryModelMaster ( new Gs2Chat . CreateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) . withDescription ( null ) . withRejectAccessTokenPost ( \"Disabled\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . create_category_model_master ( chat . CreateCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category ( 0 ) . with_description ( None ) . with_reject_access_token_post ( 'Disabled' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.create_category_model_master ({ namespaceName = \"namespace-0001\" , category = 0 , description = nil , rejectAccessTokenPost = \"Disabled\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.create_category_model_master_async ({ namespaceName = \"namespace-0001\" , category = 0 , description = nil , rejectAccessTokenPost = \"Disabled\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCategoryModelMaster 메시지 카테고리 모델 마스터를 취득 지정된 네임스페이스에서 카테고리 번호를 지정하여 특정 메시지 카테고리 모델 마스터를 취득합니다. 취득되는 정보에는 설명 및 rejectAccessTokenPost 플래그가 포함되어 있어 편집 용도로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. Result 타입 설명 item CategoryModelMaster 메시지 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . GetCategoryModelMaster ( \u0026 chat . GetCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Category : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\GetCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e getCategoryModelMaster ( ( new GetCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategory ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.GetCategoryModelMasterRequest ; import io.gs2.chat.result.GetCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { GetCategoryModelMasterResult result = client . getCategoryModelMaster ( new GetCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . GetCategoryModelMasterResult \u003e asyncResult = null ; yield return client . GetCategoryModelMaster ( new Gs2 . Gs2Chat . Request . GetCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategory ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . getCategoryModelMaster ( new Gs2Chat . GetCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . get_category_model_master ( chat . GetCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.get_category_model_master ({ namespaceName = \"namespace-0001\" , category = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.get_category_model_master_async ({ namespaceName = \"namespace-0001\" , category = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCategoryModelMaster 메시지 카테고리 모델 마스터를 갱신 지정된 메시지 카테고리 모델 마스터를 갱신합니다. 설명 및, 액세스 토큰 인증 사용자가 이 카테고리에 게시할 수 있는지 여부를 제어하는 rejectAccessTokenPost 플래그를 변경할 수 있습니다. 변경 사항은 현재 모델 마스터를 통해 활성화(공개)될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. description string ~ 1024자 설명문 rejectAccessTokenPost 문자열 열거형 enum {   “Enabled”,   “Disabled” } 플레이어의 액세스 토큰을 이용한 게시를 거부한다 활성화하면, 이 카테고리에서는 서버 사이드 API 호출(사용자 ID 지정)만으로 메시지를 게시할 수 있습니다. 플레이어가 직접 게시해서는 안 되는 시스템 안내나 서버 생성 메시지에 유용합니다. 정의 설명 Enabled 플레이어의 액세스 토큰을 이용한 게시를 거부한다 Disabled 플레이어의 액세스 토큰을 이용한 게시를 허용한다 Result 타입 설명 item CategoryModelMaster 갱신한 메시지 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . UpdateCategoryModelMaster ( \u0026 chat . UpdateCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Category : pointy . Int32 ( 0 ), Description : pointy . String ( \"description1\" ), RejectAccessTokenPost : pointy . String ( \"Enabled\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\UpdateCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e updateCategoryModelMaster ( ( new UpdateCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategory ( 0 ) -\u003e withDescription ( \"description1\" ) -\u003e withRejectAccessTokenPost ( \"Enabled\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.UpdateCategoryModelMasterRequest ; import io.gs2.chat.result.UpdateCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { UpdateCategoryModelMasterResult result = client . updateCategoryModelMaster ( new UpdateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) . withDescription ( \"description1\" ) . withRejectAccessTokenPost ( \"Enabled\" ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . UpdateCategoryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCategoryModelMaster ( new Gs2 . Gs2Chat . Request . UpdateCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategory ( 0 ) . WithDescription ( \"description1\" ) . WithRejectAccessTokenPost ( \"Enabled\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . updateCategoryModelMaster ( new Gs2Chat . UpdateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) . withDescription ( \"description1\" ) . withRejectAccessTokenPost ( \"Enabled\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . update_category_model_master ( chat . UpdateCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category ( 0 ) . with_description ( 'description1' ) . with_reject_access_token_post ( 'Enabled' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.update_category_model_master ({ namespaceName = \"namespace-0001\" , category = 0 , description = \"description1\" , rejectAccessTokenPost = \"Enabled\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.update_category_model_master_async ({ namespaceName = \"namespace-0001\" , category = 0 , description = \"description1\" , rejectAccessTokenPost = \"Enabled\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCategoryModelMaster 메시지 카테고리 모델 마스터를 삭제 지정된 네임스페이스에서 지정된 메시지 카테고리 모델 마스터를 삭제합니다. 삭제 후, 다음 마스터 데이터 활성화 이후부터 이 카테고리는 사용할 수 없게 됩니다. 이 작업은 마스터 데이터에만 영향을 미치며, 마스터 데이터가 재활성화될 때까지 현재 활성화된 모델은 변경되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. Result 타입 설명 item CategoryModelMaster 삭제한 메시지 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/chat\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := chat . Gs2ChatRestClient { Session : \u0026 session , } result , err := client . DeleteCategoryModelMaster ( \u0026 chat . DeleteCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Category : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Chat\\Gs2ChatRestClient ; use Gs2\\Chat\\Request\\DeleteCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ChatRestClient ( $session ); try { $result = $client -\u003e deleteCategoryModelMaster ( ( new DeleteCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategory ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.chat.rest.Gs2ChatRestClient ; import io.gs2.chat.request.DeleteCategoryModelMasterRequest ; import io.gs2.chat.result.DeleteCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ChatRestClient client = new Gs2ChatRestClient ( session ); try { DeleteCategoryModelMasterResult result = client . deleteCategoryModelMaster ( new DeleteCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ChatRestClient ( session ); AsyncResult Gs2 . Gs2Chat . Result . DeleteCategoryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteCategoryModelMaster ( new Gs2 . Gs2Chat . Request . DeleteCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategory ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Chat from '@/gs2/chat' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Chat . Gs2ChatRestClient ( session ); try { const result = await client . deleteCategoryModelMaster ( new Gs2Chat . DeleteCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategory ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import chat session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = chat . Gs2ChatRestClient ( session ) try : result = client . delete_category_model_master ( chat . DeleteCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'chat' ) api_result = client.delete_category_model_master ({ namespaceName = \"namespace-0001\" , category = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'chat' ) api_result_handler = client.delete_category_model_master_async ({ namespaceName = \"namespace-0001\" , category = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Chat SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Chat SDK API 레퍼런스","url":"/ko/api_reference/chat/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 데이터스토어 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. doneUploadScript ScriptSetting 업로드 완료 보고 시 실행할 스크립트의 설정 Script 트리거 레퍼런스 - doneUpload logSetting LogSetting 로그의 출력 설정 데이터스토어 조작의 로그 데이터를 GS2-Log 로 출력하기 위한 설정입니다. GS2-Log 의 네임스페이스를 지정하면 데이터 오브젝트의 업로드·다운로드·접근 권한 변경 등의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그의 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log 의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청·응답 로그 데이터가 대상 GS2-Log 로 출력됩니다. GS2-Log 에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. DataObject 데이터 오브젝트 데이터 오브젝트는 게임 플레이어가 업로드한 데이터입니다. 데이터는 세대 관리되며, 30일분의 과거 데이터도 보관됩니다. 데이터에는 접근 권한을 설정할 수 있습니다. 스코프에는 3종류가 있으며, 누구나 접근할 수 있는 public 지정한 사용자 ID의 게임 플레이어만 접근할 수 있는 protected 본인만 접근할 수 있는 private 가 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 dataObjectId string ※ ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. userId string  ~ 128자 사용자ID scope 문자열 열거형 enum {   “public”,   “protected”,   “private” } “private” 파일 접근 권한 이 데이터 오브젝트에 접근할 수 있는 사용자를 제어합니다. public 은 누구나 접근 가능, protected 는 allowUserIds에 지정된 사용자 ID만 접근 가능, private 은 오너 본인만 접근 가능합니다. 정의 설명 public 공개 protected 지정한 사용자에게만 공개 private 비공개 allowUserIds List {scope} == “protected” [] 0 ~ 100 items 공개할 사용자 ID 목록 스코프가 protected 로 설정되어 있는 경우, 이 데이터 오브젝트에 접근할 수 있는 사용자를 지정합니다. 이 목록에 포함된 사용자 ID를 가진 사용자만 읽기 접근이 허용됩니다. ※ scope이(가) “protected” 이면 활성화 status 문자열 열거형 enum {   “ACTIVE”,   “UPLOADING”,   “DELETED” }  상태 데이터 오브젝트의 현재 라이프사이클 상태입니다. ACTIVE 는 데이터에 접근 가능함을 나타내고, UPLOADING 은 새로운 버전이 업로드 중임을 나타내며, DELETED 는 삭제 예정으로 표시된 상태임을 나타냅니다(실제 삭제는 30일 후에 이루어집니다). 정의 설명 ACTIVE 유효 UPLOADING 업로드 중 DELETED 삭제됨(삭제 처리로부터 30일 후에 실제로 삭제) generation string ~ 128자 데이터의 세대 업로드된 데이터의 현재 버전을 나타내는 식별자입니다. 데이터가 재업로드될 때마다 새로운 세대 ID가 할당됩니다. previousGeneration string ~ 128자 이전에 유효했던 데이터의 세대 현재 업로드 이전에 활성 상태였던 데이터 버전의 세대 ID입니다. 업로드 중(UPLOADING 상태)에는 새로운 업로드가 완료될 때까지 데이터의 지속적인 접근을 보장하기 위해 이전 세대에 계속 접근할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 DataObjectHistory 데이터 오브젝트 이력 데이터 오브젝트의 업데이트 이력을 확인할 수 있습니다. 데이터 오브젝트가 재업로드될 때마다 세대 ID와 파일 크기를 포함한 이력 레코드가 생성됩니다. 이력 데이터는 30일간 보관되며, 이전 버전으로의 롤백 및 감사가 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 dataObjectHistoryId string ※ ~ 1024자 데이터 오브젝트 이력 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. generation string  ~ 128자 세대 ID 업로드 시점의 데이터 오브젝트의 특정 버전을 나타내는 고유 식별자입니다. DataObject 의 generation 필드에 해당하며, PrepareDownloadByGeneration 에서 이 특정 버전을 다운로드할 때 사용할 수 있습니다. contentLength long  0 ~ 10485760 데이터 크기 이 세대의 업로드 데이터 크기(바이트 단위)입니다. 최대 파일 크기는 10 MB(10,485,760 바이트)입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 datastore . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DescribeNamespacesRequest ; import io.gs2.datastore.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Datastore . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Datastore . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . describe_namespaces ( datastore . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'datastore' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 데이터스토어 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. logSetting LogSetting 로그의 출력 설정 데이터스토어 조작의 로그 데이터를 GS2-Log 로 출력하기 위한 설정입니다. GS2-Log 의 네임스페이스를 지정하면 데이터 오브젝트의 업로드·다운로드·접근 권한 변경 등의 API 요청·응답 로그를 수집할 수 있습니다. doneUploadScript ScriptSetting 업로드 완료 보고 시 실행할 스크립트의 설정 Script 트리거 레퍼런스 - doneUpload Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 datastore . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , LogSetting : \u0026 datastore . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, DoneUploadScript : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Datastore\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) -\u003e withDoneUploadScript ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.CreateNamespaceRequest ; import io.gs2.datastore.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . datastore . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) . withDoneUploadScript ( null ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Datastore . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Datastore . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) . WithDoneUploadScript ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Datastore . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Datastore . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) . withDoneUploadScript ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . create_namespace ( datastore . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_log_setting ( datastore . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) . with_done_upload_script ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, doneUploadScript = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, doneUploadScript = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스 상태 정의 설명 “ACTIVE” 활성 “DELETED” 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 datastore . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.GetNamespaceStatusRequest ; import io.gs2.datastore.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Datastore . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Datastore . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . get_namespace_status ( datastore . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'datastore' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 datastore . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.GetNamespaceRequest ; import io.gs2.datastore.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Datastore . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Datastore . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . get_namespace ( datastore . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 데이터스토어 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. logSetting LogSetting 로그의 출력 설정 데이터스토어 조작의 로그 데이터를 GS2-Log 로 출력하기 위한 설정입니다. GS2-Log 의 네임스페이스를 지정하면 데이터 오브젝트의 업로드·다운로드·접근 권한 변경 등의 API 요청·응답 로그를 수집할 수 있습니다. doneUploadScript ScriptSetting 업로드 완료 보고 시 실행할 스크립트의 설정 Script 트리거 레퍼런스 - doneUpload Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 datastore . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , LogSetting : \u0026 datastore . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, DoneUploadScript : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Datastore\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) -\u003e withDoneUploadScript ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.UpdateNamespaceRequest ; import io.gs2.datastore.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . datastore . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) . withDoneUploadScript ( null ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Datastore . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Datastore . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) . WithDoneUploadScript ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Datastore . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Datastore . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) . withDoneUploadScript ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . update_namespace ( datastore . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_log_setting ( datastore . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) . with_done_upload_script ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, doneUploadScript = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, doneUploadScript = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 datastore . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DeleteNamespaceRequest ; import io.gs2.datastore.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Datastore . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Datastore . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . delete_namespace ( datastore . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 datastore . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.GetServiceVersionRequest ; import io.gs2.datastore.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Datastore . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Datastore . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . get_service_version ( datastore . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 datastore . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DumpUserDataByUserIdRequest ; import io.gs2.datastore.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Datastore . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Datastore . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . dump_user_data_by_user_id ( datastore . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'datastore' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 datastore . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.datastore.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Datastore . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Datastore . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( datastore . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'datastore' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 datastore . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.CleanUserDataByUserIdRequest ; import io.gs2.datastore.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Datastore . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Datastore . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . clean_user_data_by_user_id ( datastore . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'datastore' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 datastore . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.datastore.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Datastore . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Datastore . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( datastore . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'datastore' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 datastore . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.datastore.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Datastore . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Datastore . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( datastore . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 datastore . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.ImportUserDataByUserIdRequest ; import io.gs2.datastore.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Datastore . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Datastore . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . import_user_data_by_user_id ( datastore . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'datastore' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 datastore . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.CheckImportUserDataByUserIdRequest ; import io.gs2.datastore.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Datastore . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Datastore . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( datastore . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'datastore' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeDataObjects 데이터 오브젝트 목록 조회 지정된 네임스페이스에서 현재 로그인한 사용자가 소유한 데이터 오브젝트의 페이지네이션 지원 목록을 조회합니다. 선택적으로 상태(ACTIVE, UPLOADING, DELETED)를 지정하여 특정 상태의 오브젝트만 조회할 수 있습니다. 상태 필터를 지정하지 않으면 상태와 관계없이 모든 데이터 오브젝트가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 status 문자열 열거형 enum {   “ACTIVE”,   “UPLOADING”,   “DELETED” } 상태 정의 설명 ACTIVE 유효 UPLOADING 업로드 중 DELETED 삭제됨(삭제 처리로부터 30일 후 실제 삭제) pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 데이터 오브젝트 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DescribeDataObjects ( \u0026 datastore . DescribeDataObjectsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Status : pointy . String ( \"ACTIVE\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DescribeDataObjectsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e describeDataObjects ( ( new DescribeDataObjectsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStatus ( \"ACTIVE\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DescribeDataObjectsRequest ; import io.gs2.datastore.result.DescribeDataObjectsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DescribeDataObjectsResult result = client . describeDataObjects ( new DescribeDataObjectsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatus ( \"ACTIVE\" ) . withPageToken ( null ) . withLimit ( null ) ); List DataObject \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DescribeDataObjectsResult \u003e asyncResult = null ; yield return client . DescribeDataObjects ( new Gs2 . Gs2Datastore . Request . DescribeDataObjectsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStatus ( \"ACTIVE\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . describeDataObjects ( new Gs2Datastore . DescribeDataObjectsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatus ( \"ACTIVE\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . describe_data_objects ( datastore . DescribeDataObjectsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_status ( 'ACTIVE' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.describe_data_objects ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , status = \"ACTIVE\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'datastore' ) api_result_handler = client.describe_data_objects_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , status = \"ACTIVE\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeDataObjectsByUserId 사용자 ID를 지정하여 데이터 오브젝트 목록 조회 지정된 네임스페이스에서 지정된 사용자가 소유한 데이터 오브젝트의 페이지네이션 지원 목록을 조회합니다. 선택적으로 상태(ACTIVE, UPLOADING, DELETED)를 지정하여 특정 상태의 오브젝트만 조회할 수 있습니다. 상태 필터를 지정하지 않으면 상태와 관계없이 모든 데이터 오브젝트가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID status 문자열 열거형 enum {   “ACTIVE”,   “UPLOADING”,   “DELETED” } 상태 정의 설명 ACTIVE 유효 UPLOADING 업로드 중 DELETED 삭제됨(삭제 처리로부터 30일 후 실제 삭제) pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 데이터 오브젝트 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DescribeDataObjectsByUserId ( \u0026 datastore . DescribeDataObjectsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Status : pointy . String ( \"ACTIVE\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DescribeDataObjectsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e describeDataObjectsByUserId ( ( new DescribeDataObjectsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStatus ( \"ACTIVE\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DescribeDataObjectsByUserIdRequest ; import io.gs2.datastore.result.DescribeDataObjectsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DescribeDataObjectsByUserIdResult result = client . describeDataObjectsByUserId ( new DescribeDataObjectsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatus ( \"ACTIVE\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List DataObject \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DescribeDataObjectsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeDataObjectsByUserId ( new Gs2 . Gs2Datastore . Request . DescribeDataObjectsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStatus ( \"ACTIVE\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . describeDataObjectsByUserId ( new Gs2Datastore . DescribeDataObjectsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatus ( \"ACTIVE\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . describe_data_objects_by_user_id ( datastore . DescribeDataObjectsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_status ( 'ACTIVE' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.describe_data_objects_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , status = \"ACTIVE\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'datastore' ) api_result_handler = client.describe_data_objects_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , status = \"ACTIVE\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; prepareUpload 데이터 오브젝트의 업로드를 준비한다 새로운 데이터 오브젝트를 생성하고, 파일 업로드용 서명된 클라우드 스토리지 URL을 생성합니다. 데이터 오브젝트 이름은 생략할 수 있으며, 생략한 경우 UUID가 자동으로 할당됩니다. 접근 범위(public / protected / private) 설정과 오브젝트에 대한 접근을 허용할 사용자 ID 목록을 지정할 수 있습니다. updateIfExists가 true이고 동일한 이름의 오브젝트가 이미 존재하는 경우, 기존 오브젝트의 범위와 권한이 업데이트되며 오류 대신 재업로드용 URL이 생성됩니다. 반환된 서명된 URL을 사용하여 파일 데이터를 직접 PUT하십시오. 업로드 후 DoneUpload를 호출하여 데이터 오브젝트를 확정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 name string ~ 128자 데이터 오브젝트의 이름 지정하지 않으면 자동으로 UUID가 할당됩니다. contentType string “application/octet-stream” ~ 256자 업로드할 데이터의 MIME-Type scope 문자열 열거형 enum {   “public”,   “protected”,   “private” } “private” 파일 접근 권한 이 데이터 오브젝트에 접근할 수 있는 사용자를 제어합니다. public 은 누구나 접근 가능, protected 는 allowUserIds에 지정된 사용자 ID만 접근 가능, private 은 오너 본인만 접근 가능합니다. 정의 설명 public 공개 protected 지정한 사용자에게만 공개 private 비공개 allowUserIds List {scope} == “protected” [] 0 ~ 100 items 공개할 사용자 ID 목록 스코프가 protected 로 설정되어 있는 경우, 이 데이터 오브젝트에 접근할 수 있는 사용자를 지정합니다. 이 목록에 포함된 사용자 ID를 가진 사용자만 읽기 접근이 허용됩니다. ※ scope이(가) “protected” 이면 활성화 updateIfExists bool false 이미 데이터가 존재하는 경우 오류로 처리할지, 데이터를 업데이트할지 여부 Result 타입 설명 item DataObject 데이터 오브젝트 uploadUrl string 업로드 처리를 실행하는 데 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareUpload ( \u0026 datastore . PrepareUploadRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Name : pointy . String ( \"dataObject-0001\" ), ContentType : pointy . String ( \"application/octet-stream\" ), Scope : pointy . String ( \"public\" ), AllowUserIds : nil , UpdateIfExists : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareUploadRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareUpload ( ( new PrepareUploadRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withName ( \"dataObject-0001\" ) -\u003e withContentType ( \"application/octet-stream\" ) -\u003e withScope ( \"public\" ) -\u003e withAllowUserIds ( null ) -\u003e withUpdateIfExists ( null ) ); $item = $result -\u003e getItem (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareUploadRequest ; import io.gs2.datastore.result.PrepareUploadResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareUploadResult result = client . prepareUpload ( new PrepareUploadRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withName ( \"dataObject-0001\" ) . withContentType ( \"application/octet-stream\" ) . withScope ( \"public\" ) . withAllowUserIds ( null ) . withUpdateIfExists ( null ) ); DataObject item = result . getItem (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareUploadResult \u003e asyncResult = null ; yield return client . PrepareUpload ( new Gs2 . Gs2Datastore . Request . PrepareUploadRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithName ( \"dataObject-0001\" ) . WithContentType ( \"application/octet-stream\" ) . WithScope ( \"public\" ) . WithAllowUserIds ( null ) . WithUpdateIfExists ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareUpload ( new Gs2Datastore . PrepareUploadRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withName ( \"dataObject-0001\" ) . withContentType ( \"application/octet-stream\" ) . withScope ( \"public\" ) . withAllowUserIds ( null ) . withUpdateIfExists ( null ) ); const item = result . getItem (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_upload ( datastore . PrepareUploadRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_name ( 'dataObject-0001' ) . with_content_type ( 'application/octet-stream' ) . with_scope ( 'public' ) . with_allow_user_ids ( None ) . with_update_if_exists ( None ) ) item = result . item upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_upload ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , name = \"dataObject-0001\" , contentType = \"application/octet-stream\" , scope = \"public\" , allowUserIds = nil , updateIfExists = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; uploadUrl = result.uploadUrl ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_upload_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , name = \"dataObject-0001\" , contentType = \"application/octet-stream\" , scope = \"public\" , allowUserIds = nil , updateIfExists = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; uploadUrl = result.uploadUrl ; prepareUploadByUserId 사용자 ID를 지정하여 데이터 오브젝트의 업로드를 준비한다 지정된 사용자의 새로운 데이터 오브젝트를 생성하고, 파일 업로드용 서명된 클라우드 스토리지 URL을 생성합니다. 데이터 오브젝트 이름은 생략할 수 있으며, 생략한 경우 UUID가 자동으로 할당됩니다. 접근 범위(public / protected / private) 설정과 오브젝트에 대한 접근을 허용할 사용자 ID 목록을 지정할 수 있습니다. updateIfExists가 true이고 동일한 이름의 오브젝트가 이미 존재하는 경우, 기존 오브젝트의 범위와 권한이 업데이트되며 오류 대신 재업로드용 URL이 생성됩니다. 반환된 서명된 URL을 사용하여 파일 데이터를 직접 PUT하십시오. 업로드 후 DoneUpload를 호출하여 데이터 오브젝트를 확정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID name string ~ 128자 데이터 오브젝트의 이름 지정하지 않으면 자동으로 UUID가 할당됩니다. contentType string “application/octet-stream” ~ 256자 업로드할 데이터의 MIME-Type scope 문자열 열거형 enum {   “public”,   “protected”,   “private” } “private” 파일 접근 권한 이 데이터 오브젝트에 접근할 수 있는 사용자를 제어합니다. public 은 누구나 접근 가능, protected 는 allowUserIds에 지정된 사용자 ID만 접근 가능, private 은 오너 본인만 접근 가능합니다. 정의 설명 public 공개 protected 지정한 사용자에게만 공개 private 비공개 allowUserIds List {scope} == “protected” [] 0 ~ 100 items 공개할 사용자 ID 목록 스코프가 protected 로 설정되어 있는 경우, 이 데이터 오브젝트에 접근할 수 있는 사용자를 지정합니다. 이 목록에 포함된 사용자 ID를 가진 사용자만 읽기 접근이 허용됩니다. ※ scope이(가) “protected” 이면 활성화 updateIfExists bool false 이미 데이터가 존재하는 경우 오류로 처리할지, 데이터를 업데이트할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 uploadUrl string 업로드 처리를 실행하는 데 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareUploadByUserId ( \u0026 datastore . PrepareUploadByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Name : pointy . String ( \"dataObject-0001\" ), ContentType : pointy . String ( \"application/octet-stream\" ), Scope : pointy . String ( \"public\" ), AllowUserIds : nil , UpdateIfExists : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareUploadByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareUploadByUserId ( ( new PrepareUploadByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withName ( \"dataObject-0001\" ) -\u003e withContentType ( \"application/octet-stream\" ) -\u003e withScope ( \"public\" ) -\u003e withAllowUserIds ( null ) -\u003e withUpdateIfExists ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareUploadByUserIdRequest ; import io.gs2.datastore.result.PrepareUploadByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareUploadByUserIdResult result = client . prepareUploadByUserId ( new PrepareUploadByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withName ( \"dataObject-0001\" ) . withContentType ( \"application/octet-stream\" ) . withScope ( \"public\" ) . withAllowUserIds ( null ) . withUpdateIfExists ( null ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareUploadByUserIdResult \u003e asyncResult = null ; yield return client . PrepareUploadByUserId ( new Gs2 . Gs2Datastore . Request . PrepareUploadByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithName ( \"dataObject-0001\" ) . WithContentType ( \"application/octet-stream\" ) . WithScope ( \"public\" ) . WithAllowUserIds ( null ) . WithUpdateIfExists ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareUploadByUserId ( new Gs2Datastore . PrepareUploadByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withName ( \"dataObject-0001\" ) . withContentType ( \"application/octet-stream\" ) . withScope ( \"public\" ) . withAllowUserIds ( null ) . withUpdateIfExists ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_upload_by_user_id ( datastore . PrepareUploadByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_name ( 'dataObject-0001' ) . with_content_type ( 'application/octet-stream' ) . with_scope ( 'public' ) . with_allow_user_ids ( None ) . with_update_if_exists ( None ) . with_time_offset_token ( None ) ) item = result . item upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_upload_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , name = \"dataObject-0001\" , contentType = \"application/octet-stream\" , scope = \"public\" , allowUserIds = nil , updateIfExists = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; uploadUrl = result.uploadUrl ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_upload_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , name = \"dataObject-0001\" , contentType = \"application/octet-stream\" , scope = \"public\" , allowUserIds = nil , updateIfExists = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; uploadUrl = result.uploadUrl ; updateDataObject 데이터 오브젝트를 업데이트 현재 로그인한 사용자가 소유한 기존 데이터 오브젝트의 메타데이터를 업데이트합니다. 접근 범위(public / protected / private)와 오브젝트에 대한 접근을 허용할 사용자 ID 목록을 변경할 수 있습니다. 이 작업은 접근 제어 설정만 업데이트하며, 파일 내용 자체는 변경되지 않습니다. 파일 내용을 업데이트하려면 대신 PrepareReUpload를 사용하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 scope 문자열 열거형 enum {   “public”,   “protected”,   “private” } “private” 파일 접근 권한 이 데이터 오브젝트에 접근할 수 있는 사용자를 제어합니다. public 은 누구나 접근 가능, protected 는 allowUserIds에 지정된 사용자 ID만 접근 가능, private 은 오너 본인만 접근 가능합니다. 정의 설명 public 공개 protected 지정한 사용자에게만 공개 private 비공개 allowUserIds List {scope} == “protected” [] 0 ~ 100 items 공개할 사용자 ID 목록 스코프가 protected 로 설정되어 있는 경우, 이 데이터 오브젝트에 접근할 수 있는 사용자를 지정합니다. 이 목록에 포함된 사용자 ID를 가진 사용자만 읽기 접근이 허용됩니다. ※ scope이(가) “protected” 이면 활성화 Result 타입 설명 item DataObject 데이터 오브젝트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . UpdateDataObject ( \u0026 datastore . UpdateDataObjectRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Scope : pointy . String ( \"public\" ), AllowUserIds : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\UpdateDataObjectRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e updateDataObject ( ( new UpdateDataObjectRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withScope ( \"public\" ) -\u003e withAllowUserIds ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.UpdateDataObjectRequest ; import io.gs2.datastore.result.UpdateDataObjectResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { UpdateDataObjectResult result = client . updateDataObject ( new UpdateDataObjectRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScope ( \"public\" ) . withAllowUserIds ( null ) ); DataObject item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . UpdateDataObjectResult \u003e asyncResult = null ; yield return client . UpdateDataObject ( new Gs2 . Gs2Datastore . Request . UpdateDataObjectRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithScope ( \"public\" ) . WithAllowUserIds ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . updateDataObject ( new Gs2Datastore . UpdateDataObjectRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScope ( \"public\" ) . withAllowUserIds ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . update_data_object ( datastore . UpdateDataObjectRequest () . with_namespace_name ( 'namespace-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_access_token ( 'accessToken-0001' ) . with_scope ( 'public' ) . with_allow_user_ids ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.update_data_object ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , accessToken = \"accessToken-0001\" , scope = \"public\" , allowUserIds = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.update_data_object_async ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , accessToken = \"accessToken-0001\" , scope = \"public\" , allowUserIds = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateDataObjectByUserId 사용자 ID를 지정하여 데이터 오브젝트를 업데이트 지정된 사용자가 소유한 기존 데이터 오브젝트의 메타데이터를 업데이트합니다. 접근 범위(public / protected / private)와 오브젝트에 대한 접근을 허용할 사용자 ID 목록을 변경할 수 있습니다. 이 작업은 접근 제어 설정만 업데이트하며, 파일 내용 자체는 변경되지 않습니다. 파일 내용을 업데이트하려면 대신 PrepareReUpload를 사용하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. userId string  ~ 128자 사용자ID scope 문자열 열거형 enum {   “public”,   “protected”,   “private” } “private” 파일 접근 권한 이 데이터 오브젝트에 접근할 수 있는 사용자를 제어합니다. public 은 누구나 접근 가능, protected 는 allowUserIds에 지정된 사용자 ID만 접근 가능, private 은 오너 본인만 접근 가능합니다. 정의 설명 public 공개 protected 지정한 사용자에게만 공개 private 비공개 allowUserIds List {scope} == “protected” [] 0 ~ 100 items 공개할 사용자 ID 목록 스코프가 protected 로 설정되어 있는 경우, 이 데이터 오브젝트에 접근할 수 있는 사용자를 지정합니다. 이 목록에 포함된 사용자 ID를 가진 사용자만 읽기 접근이 허용됩니다. ※ scope이(가) “protected” 이면 활성화 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . UpdateDataObjectByUserId ( \u0026 datastore . UpdateDataObjectByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), UserId : pointy . String ( \"user-0001\" ), Scope : pointy . String ( \"public\" ), AllowUserIds : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\UpdateDataObjectByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e updateDataObjectByUserId ( ( new UpdateDataObjectByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withScope ( \"public\" ) -\u003e withAllowUserIds ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.UpdateDataObjectByUserIdRequest ; import io.gs2.datastore.result.UpdateDataObjectByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { UpdateDataObjectByUserIdResult result = client . updateDataObjectByUserId ( new UpdateDataObjectByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withUserId ( \"user-0001\" ) . withScope ( \"public\" ) . withAllowUserIds ( null ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . UpdateDataObjectByUserIdResult \u003e asyncResult = null ; yield return client . UpdateDataObjectByUserId ( new Gs2 . Gs2Datastore . Request . UpdateDataObjectByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithUserId ( \"user-0001\" ) . WithScope ( \"public\" ) . WithAllowUserIds ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . updateDataObjectByUserId ( new Gs2Datastore . UpdateDataObjectByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withUserId ( \"user-0001\" ) . withScope ( \"public\" ) . withAllowUserIds ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . update_data_object_by_user_id ( datastore . UpdateDataObjectByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_user_id ( 'user-0001' ) . with_scope ( 'public' ) . with_allow_user_ids ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.update_data_object_by_user_id ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , userId = \"user-0001\" , scope = \"public\" , allowUserIds = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.update_data_object_by_user_id_async ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , userId = \"user-0001\" , scope = \"public\" , allowUserIds = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; prepareReUpload 데이터 오브젝트의 재업로드를 준비한다 기존 데이터 오브젝트의 파일 내용을 재업로드하기 위한 새로운 서명된 클라우드 스토리지 URL을 생성합니다. 데이터 오브젝트의 상태는 UPLOADING으로 변경되며, 새로운 세대 번호가 할당됩니다. 이전 버전의 파일은 데이터 오브젝트 이력에 보관되며, 세대 번호를 지정하여 이전 버전을 다운로드할 수 있습니다. 반환된 URL에 새 파일을 업로드한 후, DoneUpload를 호출하여 업데이트를 확정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 contentType string “application/octet-stream” ~ 256자 업로드할 데이터 오브젝트의 MIME-Type Result 타입 설명 item DataObject 데이터 오브젝트 uploadUrl string 업로드 처리를 실행하는 데 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareReUpload ( \u0026 datastore . PrepareReUploadRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ContentType : pointy . String ( \"application/octet-stream\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareReUploadRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareReUpload ( ( new PrepareReUploadRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withContentType ( \"application/octet-stream\" ) ); $item = $result -\u003e getItem (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareReUploadRequest ; import io.gs2.datastore.result.PrepareReUploadResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareReUploadResult result = client . prepareReUpload ( new PrepareReUploadRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withContentType ( \"application/octet-stream\" ) ); DataObject item = result . getItem (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareReUploadResult \u003e asyncResult = null ; yield return client . PrepareReUpload ( new Gs2 . Gs2Datastore . Request . PrepareReUploadRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithContentType ( \"application/octet-stream\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareReUpload ( new Gs2Datastore . PrepareReUploadRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withContentType ( \"application/octet-stream\" ) ); const item = result . getItem (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_re_upload ( datastore . PrepareReUploadRequest () . with_namespace_name ( 'namespace-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_access_token ( 'accessToken-0001' ) . with_content_type ( 'application/octet-stream' ) ) item = result . item upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_re_upload ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , accessToken = \"accessToken-0001\" , contentType = \"application/octet-stream\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; uploadUrl = result.uploadUrl ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_re_upload_async ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , accessToken = \"accessToken-0001\" , contentType = \"application/octet-stream\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; uploadUrl = result.uploadUrl ; prepareReUploadByUserId 사용자 ID를 지정하여 데이터 오브젝트의 재업로드를 준비한다 지정된 사용자가 소유한 기존 데이터 오브젝트의 파일 내용을 재업로드하기 위한 새로운 서명된 클라우드 스토리지 URL을 생성합니다. 데이터 오브젝트의 상태는 UPLOADING으로 변경되며, 새로운 세대 번호가 할당됩니다. 이전 버전의 파일은 데이터 오브젝트 이력에 보관됩니다. 반환된 URL에 새 파일을 업로드한 후, DoneUpload를 호출하여 업데이트를 확정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. userId string  ~ 128자 사용자ID contentType string “application/octet-stream” ~ 256자 업로드할 데이터 오브젝트의 MIME-Type timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 uploadUrl string 업로드 처리를 실행하는 데 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareReUploadByUserId ( \u0026 datastore . PrepareReUploadByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), UserId : pointy . String ( \"user-0001\" ), ContentType : pointy . String ( \"application/octet-stream\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareReUploadByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareReUploadByUserId ( ( new PrepareReUploadByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withContentType ( \"application/octet-stream\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareReUploadByUserIdRequest ; import io.gs2.datastore.result.PrepareReUploadByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareReUploadByUserIdResult result = client . prepareReUploadByUserId ( new PrepareReUploadByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withUserId ( \"user-0001\" ) . withContentType ( \"application/octet-stream\" ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareReUploadByUserIdResult \u003e asyncResult = null ; yield return client . PrepareReUploadByUserId ( new Gs2 . Gs2Datastore . Request . PrepareReUploadByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithUserId ( \"user-0001\" ) . WithContentType ( \"application/octet-stream\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareReUploadByUserId ( new Gs2Datastore . PrepareReUploadByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withUserId ( \"user-0001\" ) . withContentType ( \"application/octet-stream\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_re_upload_by_user_id ( datastore . PrepareReUploadByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_user_id ( 'user-0001' ) . with_content_type ( 'application/octet-stream' ) . with_time_offset_token ( None ) ) item = result . item upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_re_upload_by_user_id ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , userId = \"user-0001\" , contentType = \"application/octet-stream\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; uploadUrl = result.uploadUrl ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_re_upload_by_user_id_async ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , userId = \"user-0001\" , contentType = \"application/octet-stream\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; uploadUrl = result.uploadUrl ; doneUpload 데이터 오브젝트의 업로드 완료를 보고 PrepareUpload 또는 PrepareReUpload로 취득한 서명된 URL에 파일이 업로드된 후, 데이터 오브젝트를 확정합니다. 데이터 오브젝트의 상태가 UPLOADING에서 ACTIVE로 변경되며, 파일 메타데이터(크기, 세대)가 기록됩니다. 네임스페이스 설정에서 doneUploadScript가 설정되어 있는 경우, 업로드 확인 후 훅으로 스크립트가 실행됩니다. 데이터 오브젝트가 UPLOADING 상태가 아니거나 업로드된 파일을 찾을 수 없는 경우 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DoneUpload ( \u0026 datastore . DoneUploadRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DoneUploadRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e doneUpload ( ( new DoneUploadRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DoneUploadRequest ; import io.gs2.datastore.result.DoneUploadResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DoneUploadResult result = client . doneUpload ( new DoneUploadRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); DataObject item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DoneUploadResult \u003e asyncResult = null ; yield return client . DoneUpload ( new Gs2 . Gs2Datastore . Request . DoneUploadRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . doneUpload ( new Gs2Datastore . DoneUploadRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . done_upload ( datastore . DoneUploadRequest () . with_namespace_name ( 'namespace-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.done_upload ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.done_upload_async ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; doneUploadByUserId 사용자 ID를 지정하여 데이터 오브젝트의 업로드 완료를 보고 PrepareUpload 또는 PrepareReUpload로 취득한 서명된 URL에 파일이 업로드된 후, 데이터 오브젝트를 확정합니다. 데이터 오브젝트의 상태가 UPLOADING에서 ACTIVE로 변경되며, 파일 메타데이터(크기, 세대)가 기록됩니다. 네임스페이스 설정에서 doneUploadScript가 설정되어 있는 경우, 업로드 확인 후 훅으로 스크립트가 실행됩니다. 데이터 오브젝트가 UPLOADING 상태가 아니거나 업로드된 파일을 찾을 수 없는 경우 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DoneUploadByUserId ( \u0026 datastore . DoneUploadByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DoneUploadByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e doneUploadByUserId ( ( new DoneUploadByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DoneUploadByUserIdRequest ; import io.gs2.datastore.result.DoneUploadByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DoneUploadByUserIdResult result = client . doneUploadByUserId ( new DoneUploadByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DoneUploadByUserIdResult \u003e asyncResult = null ; yield return client . DoneUploadByUserId ( new Gs2 . Gs2Datastore . Request . DoneUploadByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . doneUploadByUserId ( new Gs2Datastore . DoneUploadByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . done_upload_by_user_id ( datastore . DoneUploadByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.done_upload_by_user_id ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.done_upload_by_user_id_async ({ namespaceName = \"namespace-0001\" , dataObjectName = \"dataObject-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteDataObject 데이터 오브젝트의 삭제 지정된 데이터 오브젝트를 삭제 대상으로 표시합니다. 현재 로그인한 사용자가 소유한 데이터 오브젝트가 대상입니다. 실제 파일 데이터는 30일 후에 삭제됩니다. 데이터 오브젝트가 삭제 가능한 상태가 아닌 경우(예: 업로드 중)에는 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. Result 타입 설명 item DataObject 데이터 오브젝트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DeleteDataObject ( \u0026 datastore . DeleteDataObjectRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DeleteDataObjectRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e deleteDataObject ( ( new DeleteDataObjectRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DeleteDataObjectRequest ; import io.gs2.datastore.result.DeleteDataObjectResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DeleteDataObjectResult result = client . deleteDataObject ( new DeleteDataObjectRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) ); DataObject item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DeleteDataObjectResult \u003e asyncResult = null ; yield return client . DeleteDataObject ( new Gs2 . Gs2Datastore . Request . DeleteDataObjectRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . deleteDataObject ( new Gs2Datastore . DeleteDataObjectRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . delete_data_object ( datastore . DeleteDataObjectRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_data_object_name ( 'dataObject-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.delete_data_object ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.delete_data_object_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteDataObjectByUserId 사용자 ID를 지정하여 데이터 오브젝트의 삭제 지정된 사용자가 소유한 지정된 데이터 오브젝트를 삭제 대상으로 표시합니다. 실제 파일 데이터는 30일 후에 삭제됩니다. 데이터 오브젝트가 삭제 가능한 상태가 아닌 경우(예: 업로드 중)에는 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DeleteDataObjectByUserId ( \u0026 datastore . DeleteDataObjectByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DeleteDataObjectByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e deleteDataObjectByUserId ( ( new DeleteDataObjectByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DeleteDataObjectByUserIdRequest ; import io.gs2.datastore.result.DeleteDataObjectByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DeleteDataObjectByUserIdResult result = client . deleteDataObjectByUserId ( new DeleteDataObjectByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DeleteDataObjectByUserIdResult \u003e asyncResult = null ; yield return client . DeleteDataObjectByUserId ( new Gs2 . Gs2Datastore . Request . DeleteDataObjectByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . deleteDataObjectByUserId ( new Gs2Datastore . DeleteDataObjectByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . delete_data_object_by_user_id ( datastore . DeleteDataObjectByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.delete_data_object_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.delete_data_object_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; prepareDownload 데이터 오브젝트의 다운로드 준비 지정된 데이터 오브젝트의 최신 버전을 다운로드하기 위한 서명된 클라우드 스토리지 URL을 생성합니다. 데이터 오브젝트는 GRN(dataObjectId)으로 지정합니다. 접근 제어가 적용되어 데이터 소유자 또는 allowUserIds에 등록된 사용자만 다운로드할 수 있습니다. 서명된 다운로드 URL과 파일 크기(콘텐츠 길이)가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 dataObjectId string  ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item DataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareDownload ( \u0026 datastore . PrepareDownloadRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DataObjectId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item fileUrl := result . FileUrl contentLength := result . ContentLength use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareDownloadRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareDownload ( ( new PrepareDownloadRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) ); $item = $result -\u003e getItem (); $fileUrl = $result -\u003e getFileUrl (); $contentLength = $result -\u003e getContentLength (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareDownloadRequest ; import io.gs2.datastore.result.PrepareDownloadResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareDownloadResult result = client . prepareDownload ( new PrepareDownloadRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) ); DataObject item = result . getItem (); String fileUrl = result . getFileUrl (); long contentLength = result . getContentLength (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareDownloadResult \u003e asyncResult = null ; yield return client . PrepareDownload ( new Gs2 . Gs2Datastore . Request . PrepareDownloadRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareDownload ( new Gs2Datastore . PrepareDownloadRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) ); const item = result . getItem (); const fileUrl = result . getFileUrl (); const contentLength = result . getContentLength (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_download ( datastore . PrepareDownloadRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_data_object_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001' ) ) item = result . item file_url = result . file_url content_length = result . content_length except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_download ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_download_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; prepareDownloadByUserId 사용자 ID를 지정하여 데이터 오브젝트의 다운로드 준비 지정된 데이터 오브젝트의 최신 버전을 다운로드하기 위한 서명된 클라우드 스토리지 URL을 생성합니다. 데이터 오브젝트는 GRN(dataObjectId)으로 지정합니다. 접근 제어가 적용되어 데이터 소유자 또는 allowUserIds에 등록된 사용자만 다운로드할 수 있습니다. 서명된 다운로드 URL과 파일 크기(콘텐츠 길이)가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectId string  ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareDownloadByUserId ( \u0026 datastore . PrepareDownloadByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), DataObjectId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item fileUrl := result . FileUrl contentLength := result . ContentLength use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareDownloadByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareDownloadByUserId ( ( new PrepareDownloadByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $fileUrl = $result -\u003e getFileUrl (); $contentLength = $result -\u003e getContentLength (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareDownloadByUserIdRequest ; import io.gs2.datastore.result.PrepareDownloadByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareDownloadByUserIdResult result = client . prepareDownloadByUserId ( new PrepareDownloadByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); String fileUrl = result . getFileUrl (); long contentLength = result . getContentLength (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareDownloadByUserIdResult \u003e asyncResult = null ; yield return client . PrepareDownloadByUserId ( new Gs2 . Gs2Datastore . Request . PrepareDownloadByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareDownloadByUserId ( new Gs2Datastore . PrepareDownloadByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const fileUrl = result . getFileUrl (); const contentLength = result . getContentLength (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_download_by_user_id ( datastore . PrepareDownloadByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_data_object_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001' ) . with_time_offset_token ( None ) ) item = result . item file_url = result . file_url content_length = result . content_length except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_download_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_download_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; prepareDownloadByGeneration 데이터 오브젝트를 세대를 지정하여 다운로드 준비 데이터 오브젝트의 특정 버전(세대)을 다운로드하기 위한 서명된 클라우드 스토리지 URL을 생성합니다. 데이터를 재업로드할 때 보관된 이전 버전의 파일에 접근할 수 있습니다. 접근 제어가 적용되어 데이터 소유자 또는 allowUserIds에 등록된 사용자만 다운로드할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 dataObjectId string  ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN generation string  ~ 128자 데이터의 세대 Result 타입 설명 item DataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareDownloadByGeneration ( \u0026 datastore . PrepareDownloadByGenerationRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DataObjectId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ), Generation : pointy . String ( \"generation-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item fileUrl := result . FileUrl contentLength := result . ContentLength use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareDownloadByGenerationRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareDownloadByGeneration ( ( new PrepareDownloadByGenerationRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) -\u003e withGeneration ( \"generation-0001\" ) ); $item = $result -\u003e getItem (); $fileUrl = $result -\u003e getFileUrl (); $contentLength = $result -\u003e getContentLength (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareDownloadByGenerationRequest ; import io.gs2.datastore.result.PrepareDownloadByGenerationResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareDownloadByGenerationResult result = client . prepareDownloadByGeneration ( new PrepareDownloadByGenerationRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) ); DataObject item = result . getItem (); String fileUrl = result . getFileUrl (); long contentLength = result . getContentLength (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareDownloadByGenerationResult \u003e asyncResult = null ; yield return client . PrepareDownloadByGeneration ( new Gs2 . Gs2Datastore . Request . PrepareDownloadByGenerationRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . WithGeneration ( \"generation-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareDownloadByGeneration ( new Gs2Datastore . PrepareDownloadByGenerationRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) ); const item = result . getItem (); const fileUrl = result . getFileUrl (); const contentLength = result . getContentLength (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_download_by_generation ( datastore . PrepareDownloadByGenerationRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_data_object_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001' ) . with_generation ( 'generation-0001' ) ) item = result . item file_url = result . file_url content_length = result . content_length except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_download_by_generation ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , generation = \"generation-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_download_by_generation_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , generation = \"generation-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; prepareDownloadByGenerationAndUserId 사용자 ID를 지정하여 데이터 오브젝트의 세대를 지정하여 다운로드 준비 데이터 오브젝트의 특정 버전(세대)을 다운로드하기 위한 서명된 클라우드 스토리지 URL을 생성합니다. 데이터를 재업로드할 때 보관된 이전 버전의 파일에 접근할 수 있습니다. 접근 제어가 적용되어 데이터 소유자 또는 allowUserIds에 등록된 사용자만 다운로드할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectId string  ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN generation string  ~ 128자 데이터의 세대 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareDownloadByGenerationAndUserId ( \u0026 datastore . PrepareDownloadByGenerationAndUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), DataObjectId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ), Generation : pointy . String ( \"generation-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item fileUrl := result . FileUrl contentLength := result . ContentLength use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareDownloadByGenerationAndUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareDownloadByGenerationAndUserId ( ( new PrepareDownloadByGenerationAndUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) -\u003e withGeneration ( \"generation-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $fileUrl = $result -\u003e getFileUrl (); $contentLength = $result -\u003e getContentLength (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareDownloadByGenerationAndUserIdRequest ; import io.gs2.datastore.result.PrepareDownloadByGenerationAndUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareDownloadByGenerationAndUserIdResult result = client . prepareDownloadByGenerationAndUserId ( new PrepareDownloadByGenerationAndUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); String fileUrl = result . getFileUrl (); long contentLength = result . getContentLength (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareDownloadByGenerationAndUserIdResult \u003e asyncResult = null ; yield return client . PrepareDownloadByGenerationAndUserId ( new Gs2 . Gs2Datastore . Request . PrepareDownloadByGenerationAndUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . WithGeneration ( \"generation-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareDownloadByGenerationAndUserId ( new Gs2Datastore . PrepareDownloadByGenerationAndUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const fileUrl = result . getFileUrl (); const contentLength = result . getContentLength (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_download_by_generation_and_user_id ( datastore . PrepareDownloadByGenerationAndUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_data_object_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001' ) . with_generation ( 'generation-0001' ) . with_time_offset_token ( None ) ) item = result . item file_url = result . file_url content_length = result . content_length except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_download_by_generation_and_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , generation = \"generation-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_download_by_generation_and_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , generation = \"generation-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; prepareDownloadOwnData 이름을 지정하여 자신의 데이터 오브젝트 다운로드 준비 GRN(dataObjectId) 대신 이름을 지정하여, 현재 로그인한 사용자 자신의 데이터 오브젝트를 다운로드하기 위한 간편 API입니다. 서명된 다운로드 URL과 파일 크기(콘텐츠 길이)가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. Result 타입 설명 item DataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareDownloadOwnData ( \u0026 datastore . PrepareDownloadOwnDataRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item fileUrl := result . FileUrl contentLength := result . ContentLength use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareDownloadOwnDataRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareDownloadOwnData ( ( new PrepareDownloadOwnDataRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) ); $item = $result -\u003e getItem (); $fileUrl = $result -\u003e getFileUrl (); $contentLength = $result -\u003e getContentLength (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareDownloadOwnDataRequest ; import io.gs2.datastore.result.PrepareDownloadOwnDataResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareDownloadOwnDataResult result = client . prepareDownloadOwnData ( new PrepareDownloadOwnDataRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) ); DataObject item = result . getItem (); String fileUrl = result . getFileUrl (); long contentLength = result . getContentLength (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareDownloadOwnDataResult \u003e asyncResult = null ; yield return client . PrepareDownloadOwnData ( new Gs2 . Gs2Datastore . Request . PrepareDownloadOwnDataRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareDownloadOwnData ( new Gs2Datastore . PrepareDownloadOwnDataRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) ); const item = result . getItem (); const fileUrl = result . getFileUrl (); const contentLength = result . getContentLength (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_download_own_data ( datastore . PrepareDownloadOwnDataRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_data_object_name ( 'dataObject-0001' ) ) item = result . item file_url = result . file_url content_length = result . content_length except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_download_own_data ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_download_own_data_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; prepareDownloadByUserIdAndDataObjectName 사용자 ID와 오브젝트 이름을 지정하여 데이터 오브젝트 다운로드 준비 GRN（dataObjectId）대신 사용자 ID와 오브젝트 이름을 지정하여 사용자의 데이터 오브젝트를 다운로드하기 위한 간편 API입니다. 접근 제어가 적용되어 데이터 소유자 또는 allowUserIds에 등록된 사용자만 다운로드할 수 있습니다. 서명된 다운로드 URL과 파일 크기(콘텐츠 길이)가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareDownloadByUserIdAndDataObjectName ( \u0026 datastore . PrepareDownloadByUserIdAndDataObjectNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item fileUrl := result . FileUrl contentLength := result . ContentLength use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareDownloadByUserIdAndDataObjectNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareDownloadByUserIdAndDataObjectName ( ( new PrepareDownloadByUserIdAndDataObjectNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $fileUrl = $result -\u003e getFileUrl (); $contentLength = $result -\u003e getContentLength (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareDownloadByUserIdAndDataObjectNameRequest ; import io.gs2.datastore.result.PrepareDownloadByUserIdAndDataObjectNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareDownloadByUserIdAndDataObjectNameResult result = client . prepareDownloadByUserIdAndDataObjectName ( new PrepareDownloadByUserIdAndDataObjectNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); String fileUrl = result . getFileUrl (); long contentLength = result . getContentLength (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareDownloadByUserIdAndDataObjectNameResult \u003e asyncResult = null ; yield return client . PrepareDownloadByUserIdAndDataObjectName ( new Gs2 . Gs2Datastore . Request . PrepareDownloadByUserIdAndDataObjectNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareDownloadByUserIdAndDataObjectName ( new Gs2Datastore . PrepareDownloadByUserIdAndDataObjectNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const fileUrl = result . getFileUrl (); const contentLength = result . getContentLength (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_download_by_user_id_and_data_object_name ( datastore . PrepareDownloadByUserIdAndDataObjectNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_time_offset_token ( None ) ) item = result . item file_url = result . file_url content_length = result . content_length except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_download_by_user_id_and_data_object_name ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_download_by_user_id_and_data_object_name_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; prepareDownloadOwnDataByGeneration 자신의 데이터 오브젝트의 세대를 지정하여 다운로드 준비 GRN 대신 이름을 지정하여, 현재 로그인한 사용자 자신의 데이터 오브젝트의 특정 버전(세대)을 다운로드하기 위한 간편 API입니다. 데이터가 재업로드될 때 보관된 이전 버전의 파일에 접근할 수 있습니다. 서명된 다운로드 URL과 파일 크기(콘텐츠 길이)가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. generation string  ~ 128자 데이터의 세대 Result 타입 설명 item DataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareDownloadOwnDataByGeneration ( \u0026 datastore . PrepareDownloadOwnDataByGenerationRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), Generation : pointy . String ( \"generation-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item fileUrl := result . FileUrl contentLength := result . ContentLength use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareDownloadOwnDataByGenerationRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareDownloadOwnDataByGeneration ( ( new PrepareDownloadOwnDataByGenerationRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withGeneration ( \"generation-0001\" ) ); $item = $result -\u003e getItem (); $fileUrl = $result -\u003e getFileUrl (); $contentLength = $result -\u003e getContentLength (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareDownloadOwnDataByGenerationRequest ; import io.gs2.datastore.result.PrepareDownloadOwnDataByGenerationResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareDownloadOwnDataByGenerationResult result = client . prepareDownloadOwnDataByGeneration ( new PrepareDownloadOwnDataByGenerationRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) ); DataObject item = result . getItem (); String fileUrl = result . getFileUrl (); long contentLength = result . getContentLength (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareDownloadOwnDataByGenerationResult \u003e asyncResult = null ; yield return client . PrepareDownloadOwnDataByGeneration ( new Gs2 . Gs2Datastore . Request . PrepareDownloadOwnDataByGenerationRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithGeneration ( \"generation-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareDownloadOwnDataByGeneration ( new Gs2Datastore . PrepareDownloadOwnDataByGenerationRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) ); const item = result . getItem (); const fileUrl = result . getFileUrl (); const contentLength = result . getContentLength (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_download_own_data_by_generation ( datastore . PrepareDownloadOwnDataByGenerationRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_generation ( 'generation-0001' ) ) item = result . item file_url = result . file_url content_length = result . content_length except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_download_own_data_by_generation ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , generation = \"generation-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_download_own_data_by_generation_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , generation = \"generation-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; prepareDownloadByUserIdAndDataObjectNameAndGeneration 사용자 ID·오브젝트 이름·세대를 지정하여 데이터 오브젝트의 다운로드 준비 GRN 대신 사용자 ID와 오브젝트 이름을 지정하여 사용자의 데이터 오브젝트의 특정 버전(세대)을 다운로드하기 위한 간편 API입니다. 데이터가 재업로드될 때 보관된 이전 버전의 파일에 접근할 수 있습니다. 접근 제어가 적용되어 데이터 소유자 또는 allowUserIds에 등록된 사용자만 다운로드할 수 있습니다. 서명된 다운로드 URL과 파일 크기(콘텐츠 길이)가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. generation string  ~ 128자 데이터의 세대 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObject 데이터 오브젝트 fileUrl string 파일을 다운로드하기 위한 URL contentLength long 파일 용량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . PrepareDownloadByUserIdAndDataObjectNameAndGeneration ( \u0026 datastore . PrepareDownloadByUserIdAndDataObjectNameAndGenerationRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), Generation : pointy . String ( \"generation-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item fileUrl := result . FileUrl contentLength := result . ContentLength use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\PrepareDownloadByUserIdAndDataObjectNameAndGenerationRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e prepareDownloadByUserIdAndDataObjectNameAndGeneration ( ( new PrepareDownloadByUserIdAndDataObjectNameAndGenerationRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withGeneration ( \"generation-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $fileUrl = $result -\u003e getFileUrl (); $contentLength = $result -\u003e getContentLength (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.PrepareDownloadByUserIdAndDataObjectNameAndGenerationRequest ; import io.gs2.datastore.result.PrepareDownloadByUserIdAndDataObjectNameAndGenerationResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { PrepareDownloadByUserIdAndDataObjectNameAndGenerationResult result = client . prepareDownloadByUserIdAndDataObjectNameAndGeneration ( new PrepareDownloadByUserIdAndDataObjectNameAndGenerationRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) . withTimeOffsetToken ( null ) ); DataObject item = result . getItem (); String fileUrl = result . getFileUrl (); long contentLength = result . getContentLength (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . PrepareDownloadByUserIdAndDataObjectNameAndGenerationResult \u003e asyncResult = null ; yield return client . PrepareDownloadByUserIdAndDataObjectNameAndGeneration ( new Gs2 . Gs2Datastore . Request . PrepareDownloadByUserIdAndDataObjectNameAndGenerationRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithGeneration ( \"generation-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var fileUrl = result . FileUrl ; var contentLength = result . ContentLength ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . prepareDownloadByUserIdAndDataObjectNameAndGeneration ( new Gs2Datastore . PrepareDownloadByUserIdAndDataObjectNameAndGenerationRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const fileUrl = result . getFileUrl (); const contentLength = result . getContentLength (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . prepare_download_by_user_id_and_data_object_name_and_generation ( datastore . PrepareDownloadByUserIdAndDataObjectNameAndGenerationRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_generation ( 'generation-0001' ) . with_time_offset_token ( None ) ) item = result . item file_url = result . file_url content_length = result . content_length except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.prepare_download_by_user_id_and_data_object_name_and_generation ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , generation = \"generation-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; client = gs2 ( 'datastore' ) api_result_handler = client.prepare_download_by_user_id_and_data_object_name_and_generation_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , generation = \"generation-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fileUrl = result.fileUrl ; contentLength = result.contentLength ; restoreDataObject 데이터 오브젝트의 관리 정보 복구 데이터 오브젝트에 저장된 메타데이터를 실제 파일 상태와 대조합니다. 기록되어 있는 세대 번호나 콘텐츠 길이가 실제 파일과 다른 경우, 메타데이터가 일치하도록 업데이트됩니다. 업로드 중 발생한 부분적인 장애로 인해 생길 수 있는 불일치로부터 복구할 때 유용합니다. ACTIVE 상태의 데이터 오브젝트만 복구할 수 있으며, 그 외의 상태에서는 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dataObjectId string  ~ 1024자 데이터 오브젝트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item DataObject 데이터 오브젝트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . RestoreDataObject ( \u0026 datastore . RestoreDataObjectRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DataObjectId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\RestoreDataObjectRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e restoreDataObject ( ( new RestoreDataObjectRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.RestoreDataObjectRequest ; import io.gs2.datastore.result.RestoreDataObjectResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { RestoreDataObjectResult result = client . restoreDataObject ( new RestoreDataObjectRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) ); DataObject item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . RestoreDataObjectResult \u003e asyncResult = null ; yield return client . RestoreDataObject ( new Gs2 . Gs2Datastore . Request . RestoreDataObjectRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . restoreDataObject ( new Gs2Datastore . RestoreDataObjectRequest () . withNamespaceName ( \"namespace-0001\" ) . withDataObjectId ( \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . restore_data_object ( datastore . RestoreDataObjectRequest () . with_namespace_name ( 'namespace-0001' ) . with_data_object_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.restore_data_object ({ namespaceName = \"namespace-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.restore_data_object_async ({ namespaceName = \"namespace-0001\" , dataObjectId = \"grn:gs2:ap-northeast-1:YourOwnerId:datastore:namespace-0001:user:user-0001:data:dataObject-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeDataObjectHistories 데이터 오브젝트 이력 목록 조회 현재 로그인한 사용자가 소유한 특정 데이터 오브젝트의 전체 버전 이력(세대)을 목록으로 조회합니다. PrepareReUpload와 DoneUpload를 통해 데이터 오브젝트의 파일 내용이 재업로드될 때마다 새로운 세대가 생성되고, 이전 버전이 이력에 기록됩니다. 이력 항목에는 각 세대의 콘텐츠 크기나 생성 타임스탬프 등의 메타데이터가 포함됩니다. 페이지 토큰과 취득 건수 제한을 사용하여 결과를 페이지네이션할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 데이터 오브젝트 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DescribeDataObjectHistories ( \u0026 datastore . DescribeDataObjectHistoriesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DescribeDataObjectHistoriesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e describeDataObjectHistories ( ( new DescribeDataObjectHistoriesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DescribeDataObjectHistoriesRequest ; import io.gs2.datastore.result.DescribeDataObjectHistoriesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DescribeDataObjectHistoriesResult result = client . describeDataObjectHistories ( new DescribeDataObjectHistoriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List DataObjectHistory \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DescribeDataObjectHistoriesResult \u003e asyncResult = null ; yield return client . DescribeDataObjectHistories ( new Gs2 . Gs2Datastore . Request . DescribeDataObjectHistoriesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . describeDataObjectHistories ( new Gs2Datastore . DescribeDataObjectHistoriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . describe_data_object_histories ( datastore . DescribeDataObjectHistoriesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.describe_data_object_histories ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'datastore' ) api_result_handler = client.describe_data_object_histories_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeDataObjectHistoriesByUserId 사용자 ID를 지정하여 데이터 오브젝트 이력 목록 조회 지정된 사용자가 소유한 특정 데이터 오브젝트의 전체 버전 이력(세대)을 목록으로 조회합니다. PrepareReUpload와 DoneUpload를 통해 데이터 오브젝트의 파일 내용이 재업로드될 때마다 새로운 세대가 생성되고, 이전 버전이 이력에 기록됩니다. 이력 항목에는 각 세대의 콘텐츠 크기나 생성 타임스탬프 등의 메타데이터가 포함됩니다. 페이지 토큰과 취득 건수 제한을 사용하여 결과를 페이지네이션할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 데이터 오브젝트 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . DescribeDataObjectHistoriesByUserId ( \u0026 datastore . DescribeDataObjectHistoriesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\DescribeDataObjectHistoriesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e describeDataObjectHistoriesByUserId ( ( new DescribeDataObjectHistoriesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.DescribeDataObjectHistoriesByUserIdRequest ; import io.gs2.datastore.result.DescribeDataObjectHistoriesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { DescribeDataObjectHistoriesByUserIdResult result = client . describeDataObjectHistoriesByUserId ( new DescribeDataObjectHistoriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List DataObjectHistory \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . DescribeDataObjectHistoriesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeDataObjectHistoriesByUserId ( new Gs2 . Gs2Datastore . Request . DescribeDataObjectHistoriesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . describeDataObjectHistoriesByUserId ( new Gs2Datastore . DescribeDataObjectHistoriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . describe_data_object_histories_by_user_id ( datastore . DescribeDataObjectHistoriesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.describe_data_object_histories_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'datastore' ) api_result_handler = client.describe_data_object_histories_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getDataObjectHistory 데이터 오브젝트 이력 조회 현재 로그인한 사용자가 소유한 데이터 오브젝트의 특정 세대에 대한 이력 항목을 조회합니다. 세대 번호를 지정함으로써, 데이터 오브젝트의 특정 버전에 관한 메타데이터(콘텐츠 크기, 생성 타임스탬프 등)에 접근할 수 있습니다. PrepareDownloadByGeneration으로 과거 버전을 다운로드하기 전에, 해당 버전의 정보를 확인하는 데 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. generation string  ~ 128자 세대 ID 업로드 시점의 데이터 오브젝트의 특정 버전을 나타내는 고유 식별자입니다. DataObject 의 generation 필드에 해당하며, PrepareDownloadByGeneration 에서 이 특정 버전을 다운로드할 때 사용할 수 있습니다. Result 타입 설명 item DataObjectHistory 데이터 오브젝트 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . GetDataObjectHistory ( \u0026 datastore . GetDataObjectHistoryRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), Generation : pointy . String ( \"1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\GetDataObjectHistoryRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e getDataObjectHistory ( ( new GetDataObjectHistoryRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withGeneration ( \"1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.GetDataObjectHistoryRequest ; import io.gs2.datastore.result.GetDataObjectHistoryResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { GetDataObjectHistoryResult result = client . getDataObjectHistory ( new GetDataObjectHistoryRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withGeneration ( \"1\" ) ); DataObjectHistory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . GetDataObjectHistoryResult \u003e asyncResult = null ; yield return client . GetDataObjectHistory ( new Gs2 . Gs2Datastore . Request . GetDataObjectHistoryRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithGeneration ( \"1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . getDataObjectHistory ( new Gs2Datastore . GetDataObjectHistoryRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withGeneration ( \"1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . get_data_object_history ( datastore . GetDataObjectHistoryRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_generation ( '1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.get_data_object_history ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , generation = \"1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.get_data_object_history_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , dataObjectName = \"dataObject-0001\" , generation = \"1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getDataObjectHistoryByUserId 사용자 ID를 지정하여 데이터 오브젝트 이력 조회 지정된 사용자가 소유한 데이터 오브젝트의 특정 세대에 대한 이력 항목을 조회합니다. 세대 번호를 지정함으로써, 데이터 오브젝트의 특정 버전에 관한 메타데이터(콘텐츠 크기, 생성 타임스탬프 등)에 접근할 수 있습니다. PrepareDownloadByGeneration으로 과거 버전을 다운로드하기 전에, 해당 버전의 정보를 확인하는 데 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID dataObjectName string  UUID ~ 128자 데이터 오브젝트의 이름 데이터 오브젝트를 식별하는 고유한 이름입니다. 기본적으로 UUID 형식으로 자동 생성됩니다. 네임스페이스 내에서 업로드된 데이터를 참조·관리하는 데 사용됩니다. generation string  ~ 128자 세대 ID 업로드 시점의 데이터 오브젝트의 특정 버전을 나타내는 고유 식별자입니다. DataObject 의 generation 필드에 해당하며, PrepareDownloadByGeneration 에서 이 특정 버전을 다운로드할 때 사용할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item DataObjectHistory 데이터 오브젝트 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/datastore\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := datastore . Gs2DatastoreRestClient { Session : \u0026 session , } result , err := client . GetDataObjectHistoryByUserId ( \u0026 datastore . GetDataObjectHistoryByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), DataObjectName : pointy . String ( \"dataObject-0001\" ), Generation : pointy . String ( \"generation-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Datastore\\Gs2DatastoreRestClient ; use Gs2\\Datastore\\Request\\GetDataObjectHistoryByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DatastoreRestClient ( $session ); try { $result = $client -\u003e getDataObjectHistoryByUserId ( ( new GetDataObjectHistoryByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDataObjectName ( \"dataObject-0001\" ) -\u003e withGeneration ( \"generation-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.datastore.rest.Gs2DatastoreRestClient ; import io.gs2.datastore.request.GetDataObjectHistoryByUserIdRequest ; import io.gs2.datastore.result.GetDataObjectHistoryByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DatastoreRestClient client = new Gs2DatastoreRestClient ( session ); try { GetDataObjectHistoryByUserIdResult result = client . getDataObjectHistoryByUserId ( new GetDataObjectHistoryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) . withTimeOffsetToken ( null ) ); DataObjectHistory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DatastoreRestClient ( session ); AsyncResult Gs2 . Gs2Datastore . Result . GetDataObjectHistoryByUserIdResult \u003e asyncResult = null ; yield return client . GetDataObjectHistoryByUserId ( new Gs2 . Gs2Datastore . Request . GetDataObjectHistoryByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithDataObjectName ( \"dataObject-0001\" ) . WithGeneration ( \"generation-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Datastore from '@/gs2/datastore' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Datastore . Gs2DatastoreRestClient ( session ); try { const result = await client . getDataObjectHistoryByUserId ( new Gs2Datastore . GetDataObjectHistoryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withDataObjectName ( \"dataObject-0001\" ) . withGeneration ( \"generation-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import datastore session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = datastore . Gs2DatastoreRestClient ( session ) try : result = client . get_data_object_history_by_user_id ( datastore . GetDataObjectHistoryByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_data_object_name ( 'dataObject-0001' ) . with_generation ( 'generation-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'datastore' ) api_result = client.get_data_object_history_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , generation = \"generation-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'datastore' ) api_result_handler = client.get_data_object_history_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , dataObjectName = \"dataObject-0001\" , generation = \"generation-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Datastore SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Datastore SDK API 레퍼런스","url":"/ko/api_reference/datastore/sdk/"},{"content":"모델 GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 GitHub 리포지토리에서 템플릿 또는 마스터 데이터 파일을 직접 가져오기 위한 설정입니다. 커밋 해시, 브랜치 이름, 태그 이름으로 참조하는 것을 지원하며, 인증을 위해 GS2-Key의 GitHub API 키가 필요합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 파일을 가져올 GitHub 리포지토리 이름입니다. “owner/repo” 형식으로 지정합니다. sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 리포지토리 내 대상 파일의 파일 경로입니다. 예를 들어 “data/master.json\"이나 “deploy/template.yaml\"과 같이 지정합니다. referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 취득 방식 파일을 체크아웃하는 데 사용할 Git 참조 유형입니다. commit_hash 는 재현성을 위해 특정 커밋에서 가져오고, branch 는 브랜치의 최신 상태를 가져오며, tag 는 태그가 지정된 릴리스에서 가져옵니다. 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 체크아웃할 Git 커밋의 전체 SHA입니다. 항상 동일한 버전의 파일이 취득되도록 보장하여 배포의 재현성을 제공합니다. ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 체크아웃할 Git 브랜치 이름입니다. 이 브랜치의 최신 커밋을 사용하여 파일을 가져옵니다. ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 체크아웃할 Git 태그 이름입니다. 태그는 일반적으로 릴리스 버전을 표시하는 데 사용되며, 배포를 위한 안정적인 참조 지점을 제공합니다. ※ referenceType이(가) “tag” 이면 필수 Resource 리소스 리소스는 스택에서 관리하는 개별 GS2 서비스 엔티티를 나타냅니다. 각 리소스는 스택 템플릿에서 정의된 GS2 API 리소스(네임스페이스나 모델 등)에 대응합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 resourceId string ※ ~ 1024자 리소스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 type string  ~ 1024자 리소스 유형 GS2 리소스 유형 식별자입니다(예: “GS2::Inventory::Namespace”, “GS2::Experience::ExperienceModel”). 이 리소스를 생성, 업데이트, 삭제할 때 어떤 GS2 API가 호출되는지를 결정합니다. name string  ~ 128자 리소스 이름 스택 템플릿에서 이 리소스에 할당된 논리적 이름입니다. 템플릿 내에서 종속성 해결과 아웃풋 필드 매핑을 위해 리소스를 참조하는 데 사용됩니다. request string  ~ 1048576자 리퀘스트 파라미터 이 리소스를 생성 또는 업데이트하는 데 사용되는 JSON으로 직렬화된 API 리퀘스트 파라미터입니다. response string  ~ 1048576자 리소스 생성/업데이트에 대한 레스폰스 리소스 생성 또는 업데이트 시 반환된 JSON으로 직렬화된 API 레스폰스입니다. 생성된 ID나 기본값을 포함한 실제 리소스 상태가 저장됩니다. rollbackContext 문자열 열거형 enum {   “create”,   “update”,   “delete” } 롤백 작업의 종류 이 리소스를 롤백할 때 수행할 작업의 종류입니다. create 는 리소스가 새로 생성되었으므로 롤백 시 삭제됨을, update 는 리소스가 변경되었으므로 원래대로 되돌림을, delete 는 리소스가 삭제되었으므로 다시 생성됨을 의미합니다. 정의 설명 create Create update Update delete Delete rollbackRequest string ~ 1048576자 롤백용 리퀘스트 파라미터 이 리소스를 롤백할 때 사용하는 JSON으로 직렬화된 API 리퀘스트 파라미터입니다. 업데이트된 리소스의 경우 복원할 이전 상태가, 삭제된 리소스의 경우 다시 생성하기 위한 생성 파라미터가 저장됩니다. rollbackAfter List [] 0 ~ 1000 items 롤백 시 의존하고 있는 리소스의 이름 이 리소스보다 먼저 롤백해야 하는 리소스 이름의 목록입니다. 정합성을 유지하기 위해 롤백 작업이 올바른 종속 순서로 실행되도록 보장합니다. outputFields List [] 0 ~ 1000 items 리소스를 생성했을 때 Output에 기록할 필드 API 레스폰스에서 어떤 필드를 추출하여 스택의 아웃풋으로 저장할지 지정합니다. 각 항목은 아웃풋 이름을 레스폰스 내 필드 경로에 매핑하여, 다른 스택이나 외부 시스템이 생성된 리소스의 값을 참조할 수 있도록 합니다. workId string  ~ 1024자 이 리소스가 생성되었을 때의 실행 ID 이 리소스를 프로비저닝한 스택 작업(생성/업데이트)의 고유 식별자입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 Event 이벤트 스택 내 리소스의 생성, 업데이트, 삭제 등의 작업이 수행될 때 정보를 제공하기 위해 이벤트가 생성됩니다. 개발자는 스택의 배포 프로세스와 리소스 변경이 어떻게 진행되고 있는지 모니터링하고 필요한 조치를 취할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 eventId string ※ ~ 1024자 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 이벤트 이름 각 이벤트의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 이벤트를 식별하는 데 사용됩니다. resourceName string  ~ 128자 리소스 이름 스택 템플릿에서 이 리소스에 할당된 논리적 이름입니다. 템플릿 내에서 종속성 해결과 아웃풋 필드 매핑을 위해 리소스를 참조하는 데 사용됩니다. type 문자열 열거형 enum {   “CREATE_IN_PROGRESS”,   “CREATE_COMPLETE”,   “CREATE_FAILED”,   “UPDATE_IN_PROGRESS”,   “UPDATE_COMPLETE”,   “UPDATE_FAILED”,   “CLEAN_IN_PROGRESS”,   “CLEAN_COMPLETE”,   “CLEAN_FAILED”,   “DELETE_IN_PROGRESS”,   “DELETE_COMPLETE”,   “DELETE_FAILED”,   “ROLLBACK_IN_PROGRESS”,   “ROLLBACK_COMPLETE”,   “ROLLBACK_FAILED” }  상태 리소스 작업의 현재 상태를 나타내는 이벤트 유형입니다. 개별 리소스에 대한 생성, 업데이트, 클린, 삭제, 롤백 작업의 진행 중, 완료, 실패 상태를 추적합니다. 정의 설명 CREATE_IN_PROGRESS 생성 중 CREATE_COMPLETE 생성 완료 CREATE_FAILED 생성 실패 UPDATE_IN_PROGRESS 업데이트 중 UPDATE_COMPLETE 업데이트 완료 UPDATE_FAILED 업데이트 실패 CLEAN_IN_PROGRESS 리소스 삭제 중 CLEAN_COMPLETE 리소스 삭제 완료 CLEAN_FAILED 리소스 삭제 실패 DELETE_IN_PROGRESS 삭제 중 DELETE_COMPLETE 삭제 완료 DELETE_FAILED 삭제 실패 ROLLBACK_IN_PROGRESS 롤백 중 ROLLBACK_COMPLETE 롤백 완료 ROLLBACK_FAILED 롤백 실패 message string ~ 5242880자 메시지 이벤트를 설명하는 상세 메시지입니다. 작업이 실패한 경우 리소스 작업이 실패한 이유를 설명하는 오류 메시지가 포함됩니다. 작업이 성공한 경우 완료된 작업에 관한 추가 컨텍스트가 포함될 수 있습니다. eventAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Output 스택에 의해 생성되는 출력 스택의 Outputs 섹션에 기록하고 싶은 데이터를 기재함으로써 이 모델을 사용하여 출력을 생성할 수 있습니다. 예를 들어 크리덴셜을 작성할 때 클라이언트 시크릿은 작성한 순간에만 확인할 수 있지만, 그 내용을 출력으로 기록해 두면 나중에 클라이언트 시크릿의 값을 참조할 수 있게 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 outputId string ※ ~ 1024자 아웃풋 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 1024자 아웃풋 이름 스택 템플릿의 Outputs 섹션에 정의된 아웃풋의 논리적 이름입니다. 다른 스택이나 외부 시스템에서 이 아웃풋 값을 참조하기 위해 사용됩니다. value string ~ 1048576자 값 리소스의 API 응답에서 추출된 실제 아웃풋 값입니다. 예를 들어 리소스 생성 시 생성된 클라이언트 시크릿이나 리소스 ARN 등, 이후 참조 가능한 값이 저장됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 Stack 스택 스택이란 GS2-Deploy를 이용하여 GS2 상의 리소스를 설정하는 엔티티입니다. 스택에는 템플릿 파일을 지정하도록 되어 있으며, 템플릿 파일에는 GS2 상에서 필요한 리소스를 정의합니다. GS2-Deploy는 스택을 신규 작성 또는 업데이트할 때 템플릿 파일의 변경 사항을 감지하여, 추가된 항목이 있으면 리소스를 생성하고, 변경된 항목이 있으면 리소스를 업데이트하며, 삭제된 항목이 있으면 리소스를 삭제합니다. 이 메커니즘을 이용함으로써 GS2 상의 리소스를 선언적으로 기술하고, 재현 가능한 상태로 관리할 수 있게 됩니다. 이러한 재현성이 있으면 개발 환경에서 프로덕션 환경으로 설정을 이관할 때 등에 실수 없이 실행할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 stackId string ※ ~ 1024자 스택 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. description string ~ 1024자 설명문 template string  ~ 5242880자 템플릿 데이터 프로비저닝할 GS2 리소스를 선언적으로 정의하는 YAML 또는 JSON 문서입니다. GS2-Deploy는 현재와 이전 템플릿의 차이를 감지하여 필요에 따라 리소스를 생성·업데이트·삭제합니다. 최대 크기는 5MB입니다. status 문자열 열거형 enum {   “CREATE_PROCESSING”,   “CREATE_COMPLETE”,   “UPDATE_PROCESSING”,   “UPDATE_COMPLETE”,   “CLEAN_PROCESSING”,   “CLEAN_COMPLETE”,   “DELETE_PROCESSING”,   “DELETE_COMPLETE”,   “ROLLBACK_INITIALIZING”,   “ROLLBACK_PROCESSING”,   “ROLLBACK_COMPLETE” } “CREATE_PROCESSING” 실행 상태 스택 조작의 현재 라이프사이클 상태입니다. 생성·업데이트·클린(리소스 삭제)·삭제·롤백 조작의 처리 중 및 완료 상태를 전이합니다. 조작이 실패하면 롤백이 트리거되어 이전 상태로 복원되는 경우가 있습니다. 정의 설명 CREATE_PROCESSING 생성 중 CREATE_COMPLETE 생성 완료 UPDATE_PROCESSING 업데이트 중 UPDATE_COMPLETE 업데이트 완료 CLEAN_PROCESSING 리소스 삭제 중 CLEAN_COMPLETE 리소스 삭제 완료 DELETE_PROCESSING 삭제 중 DELETE_COMPLETE 삭제 완료 ROLLBACK_INITIALIZING 롤백 초기화 중 ROLLBACK_PROCESSING 롤백 중 ROLLBACK_COMPLETE 롤백 완료 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 OutputField 아웃풋 필드 리소스의 API 레스폰스 필드에서 이름이 지정된 스택 아웃풋으로의 매핑을 정의합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 1024자 이름 추출된 값이 저장되는 아웃풋의 키 이름입니다. 스택의 Outputs에서 아웃풋 값을 참조할 때 이 이름이 사용됩니다. fieldName string  ~ 1024자 필드 이름 값을 추출할 리소스의 API 레스폰스 내 필드 경로입니다. 생성 또는 업데이트된 리소스의 어떤 속성을 아웃풋으로 기록할지 지정합니다. ChangeSet 변경 내용 현재 스택 템플릿과 새 템플릿을 비교했을 때 감지된 단일 리소스 변경 사항을 나타냅니다. 스택 업데이트를 실제로 실행하기 전에 어떤 리소스가 생성, 업데이트, 삭제되는지 미리 보기 위한 밸리데이션 작업에서 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 resourceName string  ~ 128자 리소스 이름 이 변경의 영향을 받는, 스택 템플릿에서 정의된 리소스의 논리적 이름입니다. resourceType string  ~ 128자 리소스 유형 변경되는 리소스의 GS2 리소스 유형 식별자입니다(예: “GS2::Inventory::Namespace”). operation 문자열 열거형 enum {   “create”,   “update”,   “delete” }  변경 내용 이 리소스에 적용되는 변경의 종류입니다. create 는 새 리소스가 프로비저닝됨을, update 는 기존 리소스가 변경됨을, delete 는 리소스가 삭제됨을 나타냅니다. 정의 설명 create 생성 update 업데이트 delete 삭제 메서드 describeResources 리소스 목록 조회 지정된 스택에서 관리하는 리소스의 페이지네이션 목록을 조회합니다. 각 리소스는 스택의 템플릿에 의해 프로비저닝된 GS2 서비스 컴포넌트(네임스페이스, 모델, 구성 등)를 나타냅니다. 리소스 정보에는 유형, 이름, 현재 리퀘스트 바디, 관련 속성이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 리소스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . DescribeResources ( \u0026 deploy . DescribeResourcesRequest { StackName : pointy . String ( \"stack-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\DescribeResourcesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e describeResources ( ( new DescribeResourcesRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.DescribeResourcesRequest ; import io.gs2.deploy.result.DescribeResourcesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { DescribeResourcesResult result = client . describeResources ( new DescribeResourcesRequest () . withStackName ( \"stack-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Resource \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . DescribeResourcesResult \u003e asyncResult = null ; yield return client . DescribeResources ( new Gs2 . Gs2Deploy . Request . DescribeResourcesRequest () . WithStackName ( \"stack-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . describeResources ( new Gs2Deploy . DescribeResourcesRequest () . withStackName ( \"stack-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . describe_resources ( deploy . DescribeResourcesRequest () . with_stack_name ( 'stack-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.describe_resources ({ stackName = \"stack-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'deploy' ) api_result_handler = client.describe_resources_async ({ stackName = \"stack-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getResource 리소스 조회 스택에서 관리하는 특정 리소스의 상세 정보를 조회합니다. 리소스 상세 정보에는 유형, 이름, 프로비저닝에 사용된 리퀘스트 바디, 생성 후 반환된 레스폰스 속성이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. resourceName string  ~ 128자 리소스 이름 스택 템플릿에서 이 리소스에 할당된 논리적 이름입니다. 템플릿 내에서 종속성 해결과 아웃풋 필드 매핑을 위해 리소스를 참조하는 데 사용됩니다. Result 타입 설명 item Resource 리소스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . GetResource ( \u0026 deploy . GetResourceRequest { StackName : pointy . String ( \"stack-0001\" ), ResourceName : pointy . String ( \"resource-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\GetResourceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e getResource ( ( new GetResourceRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withResourceName ( \"resource-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.GetResourceRequest ; import io.gs2.deploy.result.GetResourceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { GetResourceResult result = client . getResource ( new GetResourceRequest () . withStackName ( \"stack-0001\" ) . withResourceName ( \"resource-0001\" ) ); Resource item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . GetResourceResult \u003e asyncResult = null ; yield return client . GetResource ( new Gs2 . Gs2Deploy . Request . GetResourceRequest () . WithStackName ( \"stack-0001\" ) . WithResourceName ( \"resource-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . getResource ( new Gs2Deploy . GetResourceRequest () . withStackName ( \"stack-0001\" ) . withResourceName ( \"resource-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . get_resource ( deploy . GetResourceRequest () . with_stack_name ( 'stack-0001' ) . with_resource_name ( 'resource-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.get_resource ({ stackName = \"stack-0001\" , resourceName = \"resource-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.get_resource_async ({ stackName = \"stack-0001\" , resourceName = \"resource-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeEvents 이벤트 목록 조회 스택 작업(생성, 업데이트, 삭제) 중에 발생한 이벤트의 페이지네이션 목록을 조회합니다. 이벤트에는 각 리소스 작업의 진행 상황과 결과(리소스 유형, 수행된 작업, 오류 메시지 등)가 기록됩니다. 진행 중인 작업 상태를 모니터링하거나 완료된 작업의 이력을 확인하는 데 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 이벤트 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . DescribeEvents ( \u0026 deploy . DescribeEventsRequest { StackName : pointy . String ( \"stack-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\DescribeEventsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e describeEvents ( ( new DescribeEventsRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.DescribeEventsRequest ; import io.gs2.deploy.result.DescribeEventsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { DescribeEventsResult result = client . describeEvents ( new DescribeEventsRequest () . withStackName ( \"stack-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Event \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . DescribeEventsResult \u003e asyncResult = null ; yield return client . DescribeEvents ( new Gs2 . Gs2Deploy . Request . DescribeEventsRequest () . WithStackName ( \"stack-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . describeEvents ( new Gs2Deploy . DescribeEventsRequest () . withStackName ( \"stack-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . describe_events ( deploy . DescribeEventsRequest () . with_stack_name ( 'stack-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.describe_events ({ stackName = \"stack-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'deploy' ) api_result_handler = client.describe_events_async ({ stackName = \"stack-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getEvent 이벤트 조회 스택 내 특정 이벤트의 상세 정보를 조회합니다. 이벤트에는 리소스 유형, 작업(생성/업데이트/삭제), 상태, 작업 중에 발생한 오류 메시지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. eventName string  UUID ~ 36자 이벤트 이름 각 이벤트의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 이벤트를 식별하는 데 사용됩니다. Result 타입 설명 item Event 이벤트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . GetEvent ( \u0026 deploy . GetEventRequest { StackName : pointy . String ( \"stack-0001\" ), EventName : pointy . String ( \"event-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\GetEventRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e getEvent ( ( new GetEventRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withEventName ( \"event-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.GetEventRequest ; import io.gs2.deploy.result.GetEventResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { GetEventResult result = client . getEvent ( new GetEventRequest () . withStackName ( \"stack-0001\" ) . withEventName ( \"event-0001\" ) ); Event item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . GetEventResult \u003e asyncResult = null ; yield return client . GetEvent ( new Gs2 . Gs2Deploy . Request . GetEventRequest () . WithStackName ( \"stack-0001\" ) . WithEventName ( \"event-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . getEvent ( new Gs2Deploy . GetEventRequest () . withStackName ( \"stack-0001\" ) . withEventName ( \"event-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . get_event ( deploy . GetEventRequest () . with_stack_name ( 'stack-0001' ) . with_event_name ( 'event-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.get_event ({ stackName = \"stack-0001\" , eventName = \"event-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.get_event_async ({ stackName = \"stack-0001\" , eventName = \"event-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeOutputs 아웃풋 목록 조회 스택의 생성 또는 업데이트가 성공한 후 생성된 아웃풋 값의 페이지네이션 목록을 조회합니다. 아웃풋은 템플릿에서 정의된 키-값 쌍으로, 스택 프로비저닝 중에 생성된 리소스 식별자, 엔드포인트, 구성 값 등의 중요한 정보를 공개합니다. 아웃풋은 스택이 _COMPLETE 상태인 경우에만 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 아웃풋 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . DescribeOutputs ( \u0026 deploy . DescribeOutputsRequest { StackName : pointy . String ( \"stack-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\DescribeOutputsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e describeOutputs ( ( new DescribeOutputsRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.DescribeOutputsRequest ; import io.gs2.deploy.result.DescribeOutputsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { DescribeOutputsResult result = client . describeOutputs ( new DescribeOutputsRequest () . withStackName ( \"stack-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Output \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . DescribeOutputsResult \u003e asyncResult = null ; yield return client . DescribeOutputs ( new Gs2 . Gs2Deploy . Request . DescribeOutputsRequest () . WithStackName ( \"stack-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . describeOutputs ( new Gs2Deploy . DescribeOutputsRequest () . withStackName ( \"stack-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . describe_outputs ( deploy . DescribeOutputsRequest () . with_stack_name ( 'stack-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.describe_outputs ({ stackName = \"stack-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'deploy' ) api_result_handler = client.describe_outputs_async ({ stackName = \"stack-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getOutput 아웃풋 조회 스택에서 이름을 지정하여 특정 아웃풋 값을 조회합니다. 아웃풋에는 키 이름과 스택 프로비저닝 중에 생성된 해당 값이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. outputName string  ~ 1024자 아웃풋 이름 스택 템플릿의 Outputs 섹션에 정의된 아웃풋의 논리적 이름입니다. 다른 스택이나 외부 시스템에서 이 아웃풋 값을 참조하기 위해 사용됩니다. Result 타입 설명 item Output 아웃풋 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . GetOutput ( \u0026 deploy . GetOutputRequest { StackName : pointy . String ( \"stack-0001\" ), OutputName : pointy . String ( \"output-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\GetOutputRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e getOutput ( ( new GetOutputRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withOutputName ( \"output-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.GetOutputRequest ; import io.gs2.deploy.result.GetOutputResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { GetOutputResult result = client . getOutput ( new GetOutputRequest () . withStackName ( \"stack-0001\" ) . withOutputName ( \"output-0001\" ) ); Output item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . GetOutputResult \u003e asyncResult = null ; yield return client . GetOutput ( new Gs2 . Gs2Deploy . Request . GetOutputRequest () . WithStackName ( \"stack-0001\" ) . WithOutputName ( \"output-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . getOutput ( new Gs2Deploy . GetOutputRequest () . withStackName ( \"stack-0001\" ) . withOutputName ( \"output-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . get_output ( deploy . GetOutputRequest () . with_stack_name ( 'stack-0001' ) . with_output_name ( 'output-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.get_output ({ stackName = \"stack-0001\" , outputName = \"output-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.get_output_async ({ stackName = \"stack-0001\" , outputName = \"output-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStacks 스택 목록 조회 이름 접두사에 의한 필터링을 지정하여 스택 목록을 조회합니다. 페이지 토큰과 조회 건수 제한을 사용하여 결과를 점진적으로 조회할 수 있습니다. 목록의 각 스택에는 현재 상태, 이름, 설명, 템플릿 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 스택 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스택 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . DescribeStacks ( \u0026 deploy . DescribeStacksRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\DescribeStacksRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e describeStacks ( ( new DescribeStacksRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.DescribeStacksRequest ; import io.gs2.deploy.result.DescribeStacksResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { DescribeStacksResult result = client . describeStacks ( new DescribeStacksRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Stack \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . DescribeStacksResult \u003e asyncResult = null ; yield return client . DescribeStacks ( new Gs2 . Gs2Deploy . Request . DescribeStacksRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . describeStacks ( new Gs2Deploy . DescribeStacksRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . describe_stacks ( deploy . DescribeStacksRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.describe_stacks ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'deploy' ) api_result_handler = client.describe_stacks_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; preCreateStack 스택 신규 생성 준비(사전 업로드) 템플릿 파일을 업로드하기 위한 업로드 토큰과 서명된 URL을 획득합니다. 템플릿이 1MB를 초과하는 경우, 다음과 같은 3단계 흐름이 필요합니다: 1) 이 API를 호출하여 업로드 URL을 획득, 2) 템플릿을 해당 URL에 업로드, 3) preUpload 모드로 업로드 토큰을 지정하여 CreateStack을 호출. 서명된 URL의 유효기간은 60분입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . PreCreateStack ( \u0026 deploy . PreCreateStackRequest { } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\PreCreateStackRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e preCreateStack ( ( new PreCreateStackRequest ()) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.PreCreateStackRequest ; import io.gs2.deploy.result.PreCreateStackResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { PreCreateStackResult result = client . preCreateStack ( new PreCreateStackRequest () ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . PreCreateStackResult \u003e asyncResult = null ; yield return client . PreCreateStack ( new Gs2 . Gs2Deploy . Request . PreCreateStackRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . preCreateStack ( new Gs2Deploy . PreCreateStackRequest () ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . pre_create_stack ( deploy . PreCreateStackRequest () ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.pre_create_stack ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'deploy' ) api_result_handler = client.pre_create_stack_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; createStack 스택 신규 생성 이름, 설명, 템플릿을 지정하여 새로운 스택을 생성합니다. 템플릿을 요청 본문에 인라인으로 전달하는 ‘direct’ 모드와, PreCreateStack API로 사전에 업로드한 템플릿을 사용하는 ‘preUpload’ 모드, 두 가지 모드를 지원합니다. 템플릿은 스택 생성 전에 검증됩니다. 검증에 실패하면 오류가 반환됩니다. 생성 후, 스택은 CREATE_PROCESSING 상태가 되며 리소스 프로비저닝이 비동기로 시작됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. description string ~ 1024자 설명문 mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 template string {mode} == “direct” ※ ~ 5242880자 템플릿 데이터 프로비저닝할 GS2 리소스를 선언적으로 정의하는 YAML 또는 JSON 문서입니다. GS2-Deploy는 현재와 이전 템플릿의 차이를 감지하여 필요에 따라 리소스를 생성·업데이트·삭제합니다. 최대 크기는 5MB입니다. ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item Stack 생성한 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . CreateStack ( \u0026 deploy . CreateStackRequest { Name : pointy . String ( \"stack-0001\" ), Description : nil , Mode : nil , Template : pointy . String ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\CreateStackRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e createStack ( ( new CreateStackRequest ()) -\u003e withName ( \"stack-0001\" ) -\u003e withDescription ( null ) -\u003e withMode ( null ) -\u003e withTemplate ( \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.CreateStackRequest ; import io.gs2.deploy.result.CreateStackResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { CreateStackResult result = client . createStack ( new CreateStackRequest () . withName ( \"stack-0001\" ) . withDescription ( null ) . withMode ( null ) . withTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . withUploadToken ( null ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . CreateStackResult \u003e asyncResult = null ; yield return client . CreateStack ( new Gs2 . Gs2Deploy . Request . CreateStackRequest () . WithName ( \"stack-0001\" ) . WithDescription ( null ) . WithMode ( null ) . WithTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . createStack ( new Gs2Deploy . CreateStackRequest () . withName ( \"stack-0001\" ) . withDescription ( null ) . withMode ( null ) . withTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . create_stack ( deploy . CreateStackRequest () . with_name ( 'stack-0001' ) . with_description ( None ) . with_mode ( None ) . with_template ( ' \\n GS2TemplateFormatVersion: \"2019-05-01\" \\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n ' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.create_stack ({ name = \"stack-0001\" , description = nil , mode = nil , template = \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.create_stack_async ({ name = \"stack-0001\" , description = nil , mode = nil , template = \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createStackFromGitHub GitHub에서 스택 신규 생성 GitHub 리포지토리에서 템플릿을 직접 가져와 새로운 스택을 생성합니다. 체크아웃 설정에는 템플릿의 리포지토리, 브랜치 또는 태그, 파일 경로를 지정합니다. 가져온 템플릿은 스택 생성 전에 검증됩니다. 템플릿을 버전 관리로 관리하고, 리포지토리에서 직접 인프라스트럭처를 배포하는 경우에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. description string ~ 1024자 설명문 checkoutSetting GitHubCheckoutSetting  GitHub에서 템플릿 파일을 체크아웃해 오는 설정 Result 타입 설명 item Stack 생성한 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . CreateStackFromGitHub ( \u0026 deploy . CreateStackFromGitHubRequest { Name : pointy . String ( \"stack-0001\" ), Description : nil , CheckoutSetting : \u0026 deploy . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\CreateStackFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e createStackFromGitHub ( ( new CreateStackFromGitHubRequest ()) -\u003e withName ( \"stack-0001\" ) -\u003e withDescription ( null ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.CreateStackFromGitHubRequest ; import io.gs2.deploy.result.CreateStackFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { CreateStackFromGitHubResult result = client . createStackFromGitHub ( new CreateStackFromGitHubRequest () . withName ( \"stack-0001\" ) . withDescription ( null ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . CreateStackFromGitHubResult \u003e asyncResult = null ; yield return client . CreateStackFromGitHub ( new Gs2 . Gs2Deploy . Request . CreateStackFromGitHubRequest () . WithName ( \"stack-0001\" ) . WithDescription ( null ) . WithCheckoutSetting ( new Gs2 . Gs2Deploy . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . createStackFromGitHub ( new Gs2Deploy . CreateStackFromGitHubRequest () . withName ( \"stack-0001\" ) . withDescription ( null ) . withCheckoutSetting ( new Gs2Deploy . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . create_stack_from_git_hub ( deploy . CreateStackFromGitHubRequest () . with_name ( 'stack-0001' ) . with_description ( None ) . with_checkout_setting ( deploy . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.create_stack_from_git_hub ({ name = \"stack-0001\" , description = nil , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.create_stack_from_git_hub_async ({ name = \"stack-0001\" , description = nil , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preValidate 템플릿 검증 준비(사전 업로드) 검증할 템플릿 파일을 업로드하기 위한 업로드 토큰과 서명된 URL을 획득합니다. 템플릿이 1MB를 초과하는 경우, 다음과 같은 3단계 흐름이 필요합니다: 1) 이 API를 호출하여 업로드 URL을 획득, 2) 템플릿을 해당 URL에 업로드, 3) preUpload 모드로 업로드 토큰을 지정하여 Validate를 호출. 서명된 URL의 유효기간은 60분입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . PreValidate ( \u0026 deploy . PreValidateRequest { } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\PreValidateRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e preValidate ( ( new PreValidateRequest ()) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.PreValidateRequest ; import io.gs2.deploy.result.PreValidateResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { PreValidateResult result = client . preValidate ( new PreValidateRequest () ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . PreValidateResult \u003e asyncResult = null ; yield return client . PreValidate ( new Gs2 . Gs2Deploy . Request . PreValidateRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . preValidate ( new Gs2Deploy . PreValidateRequest () ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . pre_validate ( deploy . PreValidateRequest () ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.pre_validate ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'deploy' ) api_result_handler = client.pre_validate_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; validate 템플릿 검증 실제로 스택을 생성·갱신하지 않고, 템플릿의 구조와 구문을 검증합니다. 템플릿을 인라인으로 전달하는 ‘direct’ 모드와, PreValidate API로 사전에 업로드한 템플릿을 사용하는 ‘preUpload’ 모드, 두 가지 모드를 지원합니다. 이 API는 구조적인 검증만을 수행합니다. 검증을 통과하더라도, 실제 스택 생성·갱신 시 런타임 오류가 발생할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 template string {mode} == “direct” ※ ~ 5242880자 템플릿 데이터 프로비저닝할 GS2 리소스를 선언적으로 정의하는 YAML 또는 JSON 문서입니다. GS2-Deploy는 현재와 이전 템플릿의 차이를 감지하여 필요에 따라 리소스를 생성·업데이트·삭제합니다. 최대 크기는 5MB입니다. ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . Validate ( \u0026 deploy . ValidateRequest { Mode : nil , Template : pointy . String ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\ValidateRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e validate ( ( new ValidateRequest ()) -\u003e withMode ( null ) -\u003e withTemplate ( \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" ) -\u003e withUploadToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.ValidateRequest ; import io.gs2.deploy.result.ValidateResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { ValidateResult result = client . validate ( new ValidateRequest () . withMode ( null ) . withTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . withUploadToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . ValidateResult \u003e asyncResult = null ; yield return client . Validate ( new Gs2 . Gs2Deploy . Request . ValidateRequest () . WithMode ( null ) . WithTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . validate ( new Gs2Deploy . ValidateRequest () . withMode ( null ) . withTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . withUploadToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . validate ( deploy . ValidateRequest () . with_mode ( None ) . with_template ( ' \\n GS2TemplateFormatVersion: \"2019-05-01\" \\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n ' ) . with_upload_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.validate ({ mode = nil , template = \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'deploy' ) api_result_handler = client.validate_async ({ mode = nil , template = \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result getStackStatus 스택 상태 조회 지정된 스택의 현재 상태만을 조회합니다. 이 API는 상태 문자열만을 반환하며, 스택 작업의 진행 상황을 폴링하는 경우에 적합합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. Result 타입 설명 status string 스택 상태 정의 설명 “CREATE_IN_PROGRESS” 생성 중 “CREATE_COMPLETE” 생성 완료 “CREATE_FAILED” 생성 실패 “UPDATE_IN_PROGRESS” 업데이트 중 “UPDATE_COMPLETE” 업데이트 완료 “UPDATE_FAILED” 업데이트 실패 “CLEAN_IN_PROGRESS” 리소스 삭제 중 “CLEAN_COMPLETE” 리소스 삭제 완료 “CLEAN_FAILED” 리소스 삭제 실패 “DELETE_IN_PROGRESS” 삭제 중 “DELETE_COMPLETE” 삭제 완료 “DELETE_FAILED” 삭제 실패 “ROLLBACK_IN_PROGRESS” 롤백 중 “ROLLBACK_COMPLETE” 롤백 완료 “ROLLBACK_FAILED” 롤백 실패 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . GetStackStatus ( \u0026 deploy . GetStackStatusRequest { StackName : pointy . String ( \"stack-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\GetStackStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e getStackStatus ( ( new GetStackStatusRequest ()) -\u003e withStackName ( \"stack-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.GetStackStatusRequest ; import io.gs2.deploy.result.GetStackStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { GetStackStatusResult result = client . getStackStatus ( new GetStackStatusRequest () . withStackName ( \"stack-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . GetStackStatusResult \u003e asyncResult = null ; yield return client . GetStackStatus ( new Gs2 . Gs2Deploy . Request . GetStackStatusRequest () . WithStackName ( \"stack-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . getStackStatus ( new Gs2Deploy . GetStackStatusRequest () . withStackName ( \"stack-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . get_stack_status ( deploy . GetStackStatusRequest () . with_stack_name ( 'stack-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.get_stack_status ({ stackName = \"stack-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'deploy' ) api_result_handler = client.get_stack_status_async ({ stackName = \"stack-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getStack 스택 조회 지정된 스택의 상세 정보(이름, 설명, 템플릿, 상태, 연관된 리소스 등)를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. Result 타입 설명 item Stack 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . GetStack ( \u0026 deploy . GetStackRequest { StackName : pointy . String ( \"stack-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\GetStackRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e getStack ( ( new GetStackRequest ()) -\u003e withStackName ( \"stack-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.GetStackRequest ; import io.gs2.deploy.result.GetStackResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { GetStackResult result = client . getStack ( new GetStackRequest () . withStackName ( \"stack-0001\" ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . GetStackResult \u003e asyncResult = null ; yield return client . GetStack ( new Gs2 . Gs2Deploy . Request . GetStackRequest () . WithStackName ( \"stack-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . getStack ( new Gs2Deploy . GetStackRequest () . withStackName ( \"stack-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . get_stack ( deploy . GetStackRequest () . with_stack_name ( 'stack-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.get_stack ({ stackName = \"stack-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.get_stack_async ({ stackName = \"stack-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateStack 스택 갱신 준비(사전 업로드) 스택을 갱신하기 위한 새로운 템플릿 파일을 업로드하기 위한 업로드 토큰과 서명된 URL을 획득합니다. 템플릿이 1MB를 초과하는 경우, 다음과 같은 3단계 흐름이 필요합니다: 1) 이 API를 호출하여 업로드 URL을 획득, 2) 템플릿을 해당 URL에 업로드, 3) preUpload 모드로 업로드 토큰을 지정하여 UpdateStack을 호출. 서명된 URL의 유효기간은 60분입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . PreUpdateStack ( \u0026 deploy . PreUpdateStackRequest { StackName : pointy . String ( \"stack-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\PreUpdateStackRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e preUpdateStack ( ( new PreUpdateStackRequest ()) -\u003e withStackName ( \"stack-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.PreUpdateStackRequest ; import io.gs2.deploy.result.PreUpdateStackResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { PreUpdateStackResult result = client . preUpdateStack ( new PreUpdateStackRequest () . withStackName ( \"stack-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . PreUpdateStackResult \u003e asyncResult = null ; yield return client . PreUpdateStack ( new Gs2 . Gs2Deploy . Request . PreUpdateStackRequest () . WithStackName ( \"stack-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . preUpdateStack ( new Gs2Deploy . PreUpdateStackRequest () . withStackName ( \"stack-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . pre_update_stack ( deploy . PreUpdateStackRequest () . with_stack_name ( 'stack-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.pre_update_stack ({ stackName = \"stack-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'deploy' ) api_result_handler = client.pre_update_stack_async ({ stackName = \"stack-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateStack 스택 갱신 새로운 템플릿과 설명으로 기존 스택을 갱신합니다. 갱신하려면 스택이 _COMPLETE 상태(CREATE_COMPLETE, UPDATE_COMPLETE 등)여야 합니다. 처리 중인 스택을 갱신하려 하면 오류가 반환됩니다. 템플릿을 인라인으로 전달하는 ‘direct’ 모드와, PreUpdateStack API로 사전에 업로드한 템플릿을 사용하는 ‘preUpload’ 모드, 두 가지 모드를 지원합니다. 갱신 시작 전에 새로운 템플릿이 검증됩니다. 갱신이 시작되면, 스택은 UPDATE_PROCESSING 상태가 되며 변경 세트에 따라 리소스가 비동기로 변경됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. description string ~ 1024자 설명문 mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 template string {mode} == “direct” ※ ~ 5242880자 템플릿 데이터 프로비저닝할 GS2 리소스를 선언적으로 정의하는 YAML 또는 JSON 문서입니다. GS2-Deploy는 현재와 이전 템플릿의 차이를 감지하여 필요에 따라 리소스를 생성·업데이트·삭제합니다. 최대 크기는 5MB입니다. ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item Stack 업데이트한 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . UpdateStack ( \u0026 deploy . UpdateStackRequest { StackName : pointy . String ( \"stack-0001\" ), Description : nil , Mode : nil , Template : pointy . String ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\UpdateStackRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e updateStack ( ( new UpdateStackRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withDescription ( null ) -\u003e withMode ( null ) -\u003e withTemplate ( \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.UpdateStackRequest ; import io.gs2.deploy.result.UpdateStackResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { UpdateStackResult result = client . updateStack ( new UpdateStackRequest () . withStackName ( \"stack-0001\" ) . withDescription ( null ) . withMode ( null ) . withTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . withUploadToken ( null ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . UpdateStackResult \u003e asyncResult = null ; yield return client . UpdateStack ( new Gs2 . Gs2Deploy . Request . UpdateStackRequest () . WithStackName ( \"stack-0001\" ) . WithDescription ( null ) . WithMode ( null ) . WithTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . updateStack ( new Gs2Deploy . UpdateStackRequest () . withStackName ( \"stack-0001\" ) . withDescription ( null ) . withMode ( null ) . withTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . update_stack ( deploy . UpdateStackRequest () . with_stack_name ( 'stack-0001' ) . with_description ( None ) . with_mode ( None ) . with_template ( ' \\n GS2TemplateFormatVersion: \"2019-05-01\" \\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n ' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.update_stack ({ stackName = \"stack-0001\" , description = nil , mode = nil , template = \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.update_stack_async ({ stackName = \"stack-0001\" , description = nil , mode = nil , template = \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preChangeSet 변경 세트 조회 준비(사전 업로드) 변경 내용을 미리 보기 위한 새로운 템플릿 파일을 업로드하기 위한 업로드 토큰과 서명된 URL을 획득합니다. 템플릿이 1MB를 초과하는 경우, 다음과 같은 3단계 흐름이 필요합니다: 1) 이 API를 호출하여 업로드 URL을 획득, 2) 템플릿을 해당 URL에 업로드, 3) preUpload 모드로 업로드 토큰을 지정하여 ChangeSet을 호출. 서명된 URL의 유효기간은 60분입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . PreChangeSet ( \u0026 deploy . PreChangeSetRequest { StackName : pointy . String ( \"stack-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\PreChangeSetRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e preChangeSet ( ( new PreChangeSetRequest ()) -\u003e withStackName ( \"stack-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.PreChangeSetRequest ; import io.gs2.deploy.result.PreChangeSetResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { PreChangeSetResult result = client . preChangeSet ( new PreChangeSetRequest () . withStackName ( \"stack-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . PreChangeSetResult \u003e asyncResult = null ; yield return client . PreChangeSet ( new Gs2 . Gs2Deploy . Request . PreChangeSetRequest () . WithStackName ( \"stack-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . preChangeSet ( new Gs2Deploy . PreChangeSetRequest () . withStackName ( \"stack-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . pre_change_set ( deploy . PreChangeSetRequest () . with_stack_name ( 'stack-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.pre_change_set ({ stackName = \"stack-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'deploy' ) api_result_handler = client.pre_change_set_async ({ stackName = \"stack-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; changeSet 변경 세트 조회 현재 스택 템플릿과 새로운 템플릿을 비교하여, 적용될 변경 사항의 목록을 반환합니다. 이를 통해 실제로 갱신을 실행하기 전에 영향을 미리 확인할 수 있습니다. 템플릿을 인라인으로 전달하는 ‘direct’ 모드와, PreChangeSet API로 사전에 업로드한 템플릿을 사용하는 ‘preUpload’ 모드, 두 가지 모드를 지원합니다. 반환되는 변경 세트에는 생성, 갱신, 삭제될 리소스가 각각 나열됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 template string {mode} == “direct” ※ ~ 5242880자 템플릿 데이터 프로비저닝할 GS2 리소스를 선언적으로 정의하는 YAML 또는 JSON 문서입니다. GS2-Deploy는 현재와 이전 템플릿의 차이를 감지하여 필요에 따라 리소스를 생성·업데이트·삭제합니다. 최대 크기는 5MB입니다. ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 items List 스택 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . ChangeSet ( \u0026 deploy . ChangeSetRequest { StackName : pointy . String ( \"stack-0001\" ), Mode : nil , Template : pointy . String ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\ChangeSetRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e changeSet ( ( new ChangeSetRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withMode ( null ) -\u003e withTemplate ( \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" ) -\u003e withUploadToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.ChangeSetRequest ; import io.gs2.deploy.result.ChangeSetResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { ChangeSetResult result = client . changeSet ( new ChangeSetRequest () . withStackName ( \"stack-0001\" ) . withMode ( null ) . withTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . withUploadToken ( null ) ); List ChangeSet \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . ChangeSetResult \u003e asyncResult = null ; yield return client . ChangeSet ( new Gs2 . Gs2Deploy . Request . ChangeSetRequest () . WithStackName ( \"stack-0001\" ) . WithMode ( null ) . WithTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . changeSet ( new Gs2Deploy . ChangeSetRequest () . withStackName ( \"stack-0001\" ) . withMode ( null ) . withTemplate ( \"\\nGS2TemplateFormatVersion: \\\"2019-05-01\\\"\\nDescription: Template Sample\\n\\nResources:\\n IdentifierAuthUser:\\n Type: GS2::Identifier::User\\n Properties:\\n Name: auth\\n\\nOutputs:\\n SecretKey: !GetAttr IdentifierAuthUser.Name\\n\" ) . withUploadToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . change_set ( deploy . ChangeSetRequest () . with_stack_name ( 'stack-0001' ) . with_mode ( None ) . with_template ( ' \\n GS2TemplateFormatVersion: \"2019-05-01\" \\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n ' ) . with_upload_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.change_set ({ stackName = \"stack-0001\" , mode = nil , template = \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'deploy' ) api_result_handler = client.change_set_async ({ stackName = \"stack-0001\" , mode = nil , template = \" \\n GS2TemplateFormatVersion: \\\" 2019-05-01 \\\"\\n Description: Template Sample \\n\\n Resources: \\n IdentifierAuthUser: \\n Type: GS2::Identifier::User \\n Properties: \\n Name: auth \\n\\n Outputs: \\n SecretKey: !GetAttr IdentifierAuthUser.Name \\n \" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; updateStackFromGitHub GitHub에서 스택 갱신 GitHub 리포지토리에서 새로운 템플릿을 직접 가져와 기존 스택을 갱신합니다. 갱신하려면 스택이 _COMPLETE 상태여야 합니다. 체크아웃 설정에는 템플릿의 리포지토리, 브랜치 또는 태그, 파일 경로를 지정합니다. 가져온 템플릿은 갱신 시작 전에 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. description string ~ 1024자 설명문 checkoutSetting GitHubCheckoutSetting  GitHub에서 템플릿 파일을 체크아웃해 오는 설정 Result 타입 설명 item Stack 업데이트한 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . UpdateStackFromGitHub ( \u0026 deploy . UpdateStackFromGitHubRequest { StackName : pointy . String ( \"stack-0001\" ), Description : nil , CheckoutSetting : \u0026 deploy . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\UpdateStackFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e updateStackFromGitHub ( ( new UpdateStackFromGitHubRequest ()) -\u003e withStackName ( \"stack-0001\" ) -\u003e withDescription ( null ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.UpdateStackFromGitHubRequest ; import io.gs2.deploy.result.UpdateStackFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { UpdateStackFromGitHubResult result = client . updateStackFromGitHub ( new UpdateStackFromGitHubRequest () . withStackName ( \"stack-0001\" ) . withDescription ( null ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . UpdateStackFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateStackFromGitHub ( new Gs2 . Gs2Deploy . Request . UpdateStackFromGitHubRequest () . WithStackName ( \"stack-0001\" ) . WithDescription ( null ) . WithCheckoutSetting ( new Gs2 . Gs2Deploy . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . updateStackFromGitHub ( new Gs2Deploy . UpdateStackFromGitHubRequest () . withStackName ( \"stack-0001\" ) . withDescription ( null ) . withCheckoutSetting ( new Gs2Deploy . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . update_stack_from_git_hub ( deploy . UpdateStackFromGitHubRequest () . with_stack_name ( 'stack-0001' ) . with_description ( None ) . with_checkout_setting ( deploy . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.update_stack_from_git_hub ({ stackName = \"stack-0001\" , description = nil , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.update_stack_from_git_hub_async ({ stackName = \"stack-0001\" , description = nil , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteStack 스택 삭제 스택에 의해 생성된 리소스를 삭제하고, 성공하면 스택 엔티티를 삭제합니다. 삭제하려면 스택이 _COMPLETE 상태여야 합니다. 스택이 이미 DELETE_COMPLETE 상태인 경우, 스택 엔티티만 삭제됩니다. 그 외의 경우, 스택은 DELETE_PROCESSING 상태가 되며 리소스 정리가 비동기로 시작됩니다. 어떠한 이유로 리소스 삭제에 실패한 경우, 재시도하거나 ForceDelete를 사용할 수 있도록 스택 엔티티가 남아 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. Result 타입 설명 item Stack 삭제한 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . DeleteStack ( \u0026 deploy . DeleteStackRequest { StackName : pointy . String ( \"stack-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\DeleteStackRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e deleteStack ( ( new DeleteStackRequest ()) -\u003e withStackName ( \"stack-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.DeleteStackRequest ; import io.gs2.deploy.result.DeleteStackResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { DeleteStackResult result = client . deleteStack ( new DeleteStackRequest () . withStackName ( \"stack-0001\" ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . DeleteStackResult \u003e asyncResult = null ; yield return client . DeleteStack ( new Gs2 . Gs2Deploy . Request . DeleteStackRequest () . WithStackName ( \"stack-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . deleteStack ( new Gs2Deploy . DeleteStackRequest () . withStackName ( \"stack-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . delete_stack ( deploy . DeleteStackRequest () . with_stack_name ( 'stack-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.delete_stack ({ stackName = \"stack-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.delete_stack_async ({ stackName = \"stack-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; forceDeleteStack 스택 강제 삭제 현재 상태나 리소스 잔존 여부와 관계없이 스택 엔티티를 강제로 삭제합니다. 일반적인 Delete API와 달리, 스택이 생성한 리소스의 정리는 수행하지 않습니다. 남아 있는 리소스는 고아 상태가 되며, 수동으로 관리해야 합니다. 일반적인 삭제 프로세스가 실패했거나 스택이 복구 불가능한 상태에 빠진 경우의 최후 수단으로 사용하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. Result 타입 설명 item Stack 삭제한 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . ForceDeleteStack ( \u0026 deploy . ForceDeleteStackRequest { StackName : pointy . String ( \"stack-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\ForceDeleteStackRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e forceDeleteStack ( ( new ForceDeleteStackRequest ()) -\u003e withStackName ( \"stack-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.ForceDeleteStackRequest ; import io.gs2.deploy.result.ForceDeleteStackResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { ForceDeleteStackResult result = client . forceDeleteStack ( new ForceDeleteStackRequest () . withStackName ( \"stack-0001\" ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . ForceDeleteStackResult \u003e asyncResult = null ; yield return client . ForceDeleteStack ( new Gs2 . Gs2Deploy . Request . ForceDeleteStackRequest () . WithStackName ( \"stack-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . forceDeleteStack ( new Gs2Deploy . ForceDeleteStackRequest () . withStackName ( \"stack-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . force_delete_stack ( deploy . ForceDeleteStackRequest () . with_stack_name ( 'stack-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.force_delete_stack ({ stackName = \"stack-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.force_delete_stack_async ({ stackName = \"stack-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteStackResources 스택 리소스 삭제 스택 엔티티와 템플릿을 유지하면서, 스택이 생성한 리소스만을 삭제합니다. 빈 템플릿으로 스택을 갱신하는 것과 유사하게 동작하며, 스택은 DELETE_PROCESSING 상태가 되며 리소스 정리가 비동기로 시작됩니다. 원본 템플릿이 스택 엔티티에 남아 있기 때문에, 동일한 템플릿 또는 새로운 템플릿으로 스택을 다시 갱신함으로써 리소스를 복원할 수 있습니다. 이는 오조작 시 완전한 스택 삭제보다 안전한 대안이 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. Result 타입 설명 item Stack 리소스를 삭제한 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . DeleteStackResources ( \u0026 deploy . DeleteStackResourcesRequest { StackName : pointy . String ( \"stack-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\DeleteStackResourcesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e deleteStackResources ( ( new DeleteStackResourcesRequest ()) -\u003e withStackName ( \"stack-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.DeleteStackResourcesRequest ; import io.gs2.deploy.result.DeleteStackResourcesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { DeleteStackResourcesResult result = client . deleteStackResources ( new DeleteStackResourcesRequest () . withStackName ( \"stack-0001\" ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . DeleteStackResourcesResult \u003e asyncResult = null ; yield return client . DeleteStackResources ( new Gs2 . Gs2Deploy . Request . DeleteStackResourcesRequest () . WithStackName ( \"stack-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . deleteStackResources ( new Gs2Deploy . DeleteStackResourcesRequest () . withStackName ( \"stack-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . delete_stack_resources ( deploy . DeleteStackResourcesRequest () . with_stack_name ( 'stack-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.delete_stack_resources ({ stackName = \"stack-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.delete_stack_resources_async ({ stackName = \"stack-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteStackEntity 스택 최종 삭제 모든 리소스가 정상적으로 정리된 후 스택 엔티티를 삭제합니다. 일반적으로 스택 리소스의 삭제(Clean) API가 완료되어 스택이 DELETE_COMPLETE 상태가 된 후에 사용합니다. 스택에 아직 남아 있는 리소스가 있는 경우 오류가 반환됩니다. 먼저 스택 리소스의 삭제 API를 사용하여 리소스를 제거하세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stackName string  ~ 128자 스택 이름 스택을 식별하는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. 생성·업데이트·삭제 조작 시 스택을 참조하기 위해 사용됩니다. Result 타입 설명 item Stack 삭제한 스택 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . DeleteStackEntity ( \u0026 deploy . DeleteStackEntityRequest { StackName : pointy . String ( \"stack-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\DeleteStackEntityRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e deleteStackEntity ( ( new DeleteStackEntityRequest ()) -\u003e withStackName ( \"stack-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.DeleteStackEntityRequest ; import io.gs2.deploy.result.DeleteStackEntityResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { DeleteStackEntityResult result = client . deleteStackEntity ( new DeleteStackEntityRequest () . withStackName ( \"stack-0001\" ) ); Stack item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . DeleteStackEntityResult \u003e asyncResult = null ; yield return client . DeleteStackEntity ( new Gs2 . Gs2Deploy . Request . DeleteStackEntityRequest () . WithStackName ( \"stack-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . deleteStackEntity ( new Gs2Deploy . DeleteStackEntityRequest () . withStackName ( \"stack-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . delete_stack_entity ( deploy . DeleteStackEntityRequest () . with_stack_name ( 'stack-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.delete_stack_entity ({ stackName = \"stack-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.delete_stack_entity_async ({ stackName = \"stack-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/deploy\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := deploy . Gs2DeployRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 deploy . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Deploy\\Gs2DeployRestClient ; use Gs2\\Deploy\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DeployRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.deploy.rest.Gs2DeployRestClient ; import io.gs2.deploy.request.GetServiceVersionRequest ; import io.gs2.deploy.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DeployRestClient client = new Gs2DeployRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DeployRestClient ( session ); AsyncResult Gs2 . Gs2Deploy . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Deploy . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Deploy from '@/gs2/deploy' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Deploy . Gs2DeployRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Deploy . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import deploy session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = deploy . Gs2DeployRestClient ( session ) try : result = client . get_service_version ( deploy . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'deploy' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'deploy' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Deploy SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Deploy SDK API 레퍼런스","url":"/ko/api_reference/deploy/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 도감 엔트리 등록 처리 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. entryScript ScriptSetting 엔트리 등록 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - entry duplicateEntryScript string ~ 1024자 이미 등록된 엔트리를 다시 등록하려고 할 때 실행할 스크립트 GRN Script 트리거 레퍼런스 - duplicateEntry logSetting LogSetting 로그 출력 설정 도감 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 엔트리 등록, 즐겨찾기 조작 등 도감 관련 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·경합 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue에 의한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그의 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log 의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청·응답 로그 데이터가 대상 GS2-Log 로 출력됩니다. GS2-Log 에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Entry 게임 플레이어가 획득한 엔트리 게임 플레이어가 수집한 도감 엔트리 1건을 나타냅니다. 각 엔트리는 EntryModel에 대응하며, 획득 일시를 기록합니다. 보유 상태는 ‘존재함(수집됨) / 존재하지 않음’의 2가지 값으로 관리되며, 수량의 개념은 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 entryId string ※ ~ 1024자 엔트리 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string ~ 128자 사용자ID name string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. acquiredAt long ※ 현재 시각 획득 일시 이 엔트리가 게임 플레이어에 의해 처음 수집된 일시입니다. 등록 시 현재 시각이 자동으로 설정되며, 이후 변경할 수 없습니다. Like 즐겨찾기로 등록한 엔트리 게임 플레이어가 즐겨찾기(좋아요)로 등록한 도감 엔트리를 나타냅니다. 플레이어가 도감 내 특정 엔트리를 북마크하여 빠르게 접근할 수 있도록 합니다. 각 즐겨찾기는 EntryModel을 이름으로 참조하며, 사용자별로 고유합니다. 동일한 엔트리를 중복하여 즐겨찾기에 등록할 수 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 likeId string ※ ~ 1024자 즐겨찾기 엔트리 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string ~ 128자 사용자ID name string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. EntryModel 엔트리 모델 엔트리 모델은 GS2-Dictionary에서 도감에 기록 가능한 대상을 정의하는 마스터 데이터입니다. 각 엔트리 모델은 몬스터, 아이템, 아바타 파츠 등 도감에 기록되는 엔티티의 종류를 나타냅니다. 엔트리의 보유 상태는 ‘기록됨 / 미기록’의 2가지 값으로 관리되며, 동일한 엔트리 모델에 대해 수량이나 스택의 개념은 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 entryModelId string ※ ~ 1024자 엔트리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 엔트리 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Config 설정 분산 트랜잭션 실행 시 트랜잭션 변수에 적용되는 키와 값의 쌍입니다. 실행 시점에 트랜잭션 파라미터 내의 플레이스홀더 값을 동적으로 치환할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 트랜잭션 파라미터 내에서 플레이스홀더 키로 사용되는 변수 이름입니다. 트랜잭션 템플릿에 정의된 플레이스홀더와 일치해야 합니다. value string ~ 51200자 값 트랜잭션 실행 시 플레이스홀더 키에 대입할 값입니다. 트랜잭션 파라미터 내의 해당 플레이스홀더가 이 값으로 치환됩니다. CurrentEntryMaster 현재 활성화된 엔트리 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 엔트리 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한, 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Dictionary 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 EntryModelMaster 엔트리 모델 마스터 엔트리 모델 마스터는 게임 내에서 사용되는 엔트리 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 엔트리 모델로 반영됩니다. 엔트리 모델은 GS2-Dictionary에서 도감에 기록 가능한 대상을 정의하는 마스터 데이터입니다. 각 엔트리 모델은 몬스터, 아이템, 아바타 파츠 등 도감에 기록되는 엔티티의 종류를 나타냅니다. 엔트리의 보유 상태는 ‘기록됨 / 미기록’의 2가지 값으로 관리되며, 동일한 엔트리 모델에 대해 수량이나 스택의 개념은 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 entryModelId string ※ ~ 1024자 엔트리 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 dictionary . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DescribeNamespacesRequest ; import io.gs2.dictionary.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Dictionary . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Dictionary . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . describe_namespaces ( dictionary . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'dictionary' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 도감 엔트리 등록 처리 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. entryScript ScriptSetting 엔트리 등록 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - entry duplicateEntryScript string ~ 1024자 이미 등록된 엔트리를 다시 등록하려고 할 때 실행할 스크립트 GRN Script 트리거 레퍼런스 - duplicateEntry logSetting LogSetting 로그 출력 설정 도감 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 엔트리 등록, 즐겨찾기 조작 등 도감 관련 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 dictionary . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , EntryScript : nil , DuplicateEntryScript : nil , LogSetting : \u0026 dictionary . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withEntryScript ( null ) -\u003e withDuplicateEntryScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Dictionary\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.CreateNamespaceRequest ; import io.gs2.dictionary.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withEntryScript ( null ) . withDuplicateEntryScript ( null ) . withLogSetting ( new io . gs2 . dictionary . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Dictionary . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithEntryScript ( null ) . WithDuplicateEntryScript ( null ) . WithLogSetting ( new Gs2 . Gs2Dictionary . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Dictionary . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withEntryScript ( null ) . withDuplicateEntryScript ( null ) . withLogSetting ( new Gs2Dictionary . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . create_namespace ( dictionary . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_entry_script ( None ) . with_duplicate_entry_script ( None ) . with_log_setting ( dictionary . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , entryScript = nil , duplicateEntryScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , entryScript = nil , duplicateEntryScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스 상태 정의 설명 “ACTIVE” 활성 “DELETED” 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 dictionary . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetNamespaceStatusRequest ; import io.gs2.dictionary.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Dictionary . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Dictionary . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_namespace_status ( dictionary . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 dictionary . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetNamespaceRequest ; import io.gs2.dictionary.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Dictionary . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Dictionary . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_namespace ( dictionary . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 도감 엔트리 등록 처리 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. entryScript ScriptSetting 엔트리 등록 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - entry duplicateEntryScript string ~ 1024자 이미 등록된 엔트리를 다시 등록하려고 할 때 실행할 스크립트 GRN Script 트리거 레퍼런스 - duplicateEntry logSetting LogSetting 로그 출력 설정 도감 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 엔트리 등록, 즐겨찾기 조작 등 도감 관련 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 dictionary . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , EntryScript : nil , DuplicateEntryScript : nil , LogSetting : \u0026 dictionary . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withEntryScript ( null ) -\u003e withDuplicateEntryScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Dictionary\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.UpdateNamespaceRequest ; import io.gs2.dictionary.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withEntryScript ( null ) . withDuplicateEntryScript ( null ) . withLogSetting ( new io . gs2 . dictionary . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Dictionary . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithEntryScript ( null ) . WithDuplicateEntryScript ( null ) . WithLogSetting ( new Gs2 . Gs2Dictionary . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Dictionary . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withEntryScript ( null ) . withDuplicateEntryScript ( null ) . withLogSetting ( new Gs2Dictionary . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . update_namespace ( dictionary . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_entry_script ( None ) . with_duplicate_entry_script ( None ) . with_log_setting ( dictionary . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , entryScript = nil , duplicateEntryScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , entryScript = nil , duplicateEntryScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 dictionary . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DeleteNamespaceRequest ; import io.gs2.dictionary.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Dictionary . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Dictionary . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . delete_namespace ( dictionary . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 dictionary . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetServiceVersionRequest ; import io.gs2.dictionary.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Dictionary . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Dictionary . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_service_version ( dictionary . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 dictionary . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DumpUserDataByUserIdRequest ; import io.gs2.dictionary.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Dictionary . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Dictionary . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . dump_user_data_by_user_id ( dictionary . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 dictionary . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.dictionary.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Dictionary . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Dictionary . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( dictionary . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'dictionary' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 dictionary . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.CleanUserDataByUserIdRequest ; import io.gs2.dictionary.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Dictionary . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Dictionary . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . clean_user_data_by_user_id ( dictionary . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 dictionary . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.dictionary.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Dictionary . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Dictionary . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( dictionary . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 dictionary . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.dictionary.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Dictionary . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Dictionary . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( dictionary . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'dictionary' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 dictionary . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.ImportUserDataByUserIdRequest ; import io.gs2.dictionary.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Dictionary . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Dictionary . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . import_user_data_by_user_id ( dictionary . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 dictionary . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.CheckImportUserDataByUserIdRequest ; import io.gs2.dictionary.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Dictionary . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Dictionary . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( dictionary . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'dictionary' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeEntries 엔트리 목록 조회 현재 로그인한 사용자가 수집한 엔트리의 페이지네이션 목록을 조회합니다. 각 엔트리는 사용자가 잠금 해제하거나 획득한 도감 아이템을 나타냅니다. 페이지 토큰과 조회 건수 제한을 사용하여 결과를 점진적으로 조회할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 10000 취득할 데이터 건수 Result 타입 설명 items List 엔트리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DescribeEntries ( \u0026 dictionary . DescribeEntriesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DescribeEntriesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e describeEntries ( ( new DescribeEntriesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DescribeEntriesRequest ; import io.gs2.dictionary.result.DescribeEntriesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DescribeEntriesResult result = client . describeEntries ( new DescribeEntriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Entry \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DescribeEntriesResult \u003e asyncResult = null ; yield return client . DescribeEntries ( new Gs2 . Gs2Dictionary . Request . DescribeEntriesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . describeEntries ( new Gs2Dictionary . DescribeEntriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . describe_entries ( dictionary . DescribeEntriesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.describe_entries ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'dictionary' ) api_result_handler = client.describe_entries_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeEntriesByUserId 사용자 ID를 지정하여 엔트리 목록 조회 지정한 사용자가 수집한 엔트리의 페이지네이션 목록을 조회합니다. 각 엔트리는 사용자가 잠금 해제하거나 획득한 도감 아이템을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 10000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 엔트리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DescribeEntriesByUserId ( \u0026 dictionary . DescribeEntriesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DescribeEntriesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e describeEntriesByUserId ( ( new DescribeEntriesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DescribeEntriesByUserIdRequest ; import io.gs2.dictionary.result.DescribeEntriesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DescribeEntriesByUserIdResult result = client . describeEntriesByUserId ( new DescribeEntriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Entry \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DescribeEntriesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeEntriesByUserId ( new Gs2 . Gs2Dictionary . Request . DescribeEntriesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . describeEntriesByUserId ( new Gs2Dictionary . DescribeEntriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . describe_entries_by_user_id ( dictionary . DescribeEntriesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.describe_entries_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'dictionary' ) api_result_handler = client.describe_entries_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; addEntriesByUserId 사용자 ID를 지정하여 엔트리 등록 지정한 사용자의 도감에 하나 이상의 엔트리를 등록합니다. 일괄 작업으로 여러 엔트리 모델 이름을 한 번에 지정할 수 있습니다. 이미 등록된 엔트리는 오류 없이 건너뜁니다. 반환되는 목록에는 새로 추가된 엔트리만 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 등록한 엔트리 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . AddEntriesByUserId ( \u0026 dictionary . AddEntriesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EntryModelNames : [] * string { pointy . String ( \"entry-0001\" ), pointy . String ( \"entry-0002\" ), pointy . String ( \"entry-0003\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\AddEntriesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e addEntriesByUserId ( ( new AddEntriesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.AddEntriesByUserIdRequest ; import io.gs2.dictionary.result.AddEntriesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { AddEntriesByUserIdResult result = client . addEntriesByUserId ( new AddEntriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelNames ( Arrays . asList ( \"entry-0001\" , \"entry-0002\" , \"entry-0003\" )) . withTimeOffsetToken ( null ) ); List Entry \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . AddEntriesByUserIdResult \u003e asyncResult = null ; yield return client . AddEntriesByUserId ( new Gs2 . Gs2Dictionary . Request . AddEntriesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEntryModelNames ( new string [] { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . addEntriesByUserId ( new Gs2Dictionary . AddEntriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . add_entries_by_user_id ( dictionary . AddEntriesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_entry_model_names ([ 'entry-0001' , 'entry-0002' , 'entry-0003' , ]) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.add_entries_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'dictionary' ) api_result_handler = client.add_entries_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getEntry 엔트리 조회 현재 로그인한 사용자가 엔트리 모델 이름으로 지정된 특정 엔트리를 수집했는지 여부를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item Entry 엔트리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetEntry ( \u0026 dictionary . GetEntryRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), EntryModelName : pointy . String ( \"entry-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetEntryRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getEntry ( ( new GetEntryRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withEntryModelName ( \"entry-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetEntryRequest ; import io.gs2.dictionary.result.GetEntryResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetEntryResult result = client . getEntry ( new GetEntryRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelName ( \"entry-0001\" ) ); Entry item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetEntryResult \u003e asyncResult = null ; yield return client . GetEntry ( new Gs2 . Gs2Dictionary . Request . GetEntryRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithEntryModelName ( \"entry-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getEntry ( new Gs2Dictionary . GetEntryRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelName ( \"entry-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_entry ( dictionary . GetEntryRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_entry_model_name ( 'entry-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_entry ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelName = \"entry-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_entry_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelName = \"entry-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getEntryByUserId 사용자 ID를 지정하여 엔트리 조회 지정한 사용자가 엔트리 모델 이름으로 지정된 특정 엔트리를 수집했는지 여부를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Entry 엔트리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetEntryByUserId ( \u0026 dictionary . GetEntryByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EntryModelName : pointy . String ( \"entry-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetEntryByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getEntryByUserId ( ( new GetEntryByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEntryModelName ( \"entry-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetEntryByUserIdRequest ; import io.gs2.dictionary.result.GetEntryByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetEntryByUserIdResult result = client . getEntryByUserId ( new GetEntryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withTimeOffsetToken ( null ) ); Entry item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetEntryByUserIdResult \u003e asyncResult = null ; yield return client . GetEntryByUserId ( new Gs2 . Gs2Dictionary . Request . GetEntryByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEntryModelName ( \"entry-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getEntryByUserId ( new Gs2Dictionary . GetEntryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_entry_by_user_id ( dictionary . GetEntryByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_entry_model_name ( 'entry-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_entry_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelName = \"entry-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_entry_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelName = \"entry-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getEntryWithSignature 서명과 함께 엔트리 조회 현재 로그인한 사용자의 엔트리를 암호 서명과 함께 조회합니다. 엔트리 데이터는 JSON으로 직렬화되고, 지정한 암호화 키를 사용하여 서명됩니다. 응답에는 엔트리 아이템, 직렬화된 본문, 서명 문자열이 포함되며, 외부 시스템에서 위변조 검증에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Entry 엔트리 body string 서명 대상 엔트리 정보 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetEntryWithSignature ( \u0026 dictionary . GetEntryWithSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), EntryModelName : pointy . String ( \"entry-0001\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetEntryWithSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getEntryWithSignature ( ( new GetEntryWithSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withEntryModelName ( \"entry-0001\" ) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetEntryWithSignatureRequest ; import io.gs2.dictionary.result.GetEntryWithSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetEntryWithSignatureResult result = client . getEntryWithSignature ( new GetEntryWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withKeyId ( \"key-0001\" ) ); Entry item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetEntryWithSignatureResult \u003e asyncResult = null ; yield return client . GetEntryWithSignature ( new Gs2 . Gs2Dictionary . Request . GetEntryWithSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithEntryModelName ( \"entry-0001\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getEntryWithSignature ( new Gs2Dictionary . GetEntryWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_entry_with_signature ( dictionary . GetEntryWithSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_entry_model_name ( 'entry-0001' ) . with_key_id ( 'key-0001' ) ) item = result . item body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_entry_with_signature ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelName = \"entry-0001\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_entry_with_signature_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelName = \"entry-0001\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; getEntryWithSignatureByUserId 사용자 ID를 지정하여 서명과 함께 엔트리 조회 지정한 사용자의 엔트리를 암호 서명과 함께 조회합니다. 엔트리 데이터는 JSON으로 직렬화되고, 지정한 암호화 키를 사용하여 서명됩니다. 응답에는 엔트리 아이템, 직렬화된 본문, 서명 문자열이 포함되며, 외부 시스템에서 위변조 검증에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Entry 엔트리 body string 서명 대상 엔트리 정보 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetEntryWithSignatureByUserId ( \u0026 dictionary . GetEntryWithSignatureByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EntryModelName : pointy . String ( \"entry-0001\" ), KeyId : pointy . String ( \"key-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetEntryWithSignatureByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getEntryWithSignatureByUserId ( ( new GetEntryWithSignatureByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEntryModelName ( \"entry-0001\" ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetEntryWithSignatureByUserIdRequest ; import io.gs2.dictionary.result.GetEntryWithSignatureByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetEntryWithSignatureByUserIdResult result = client . getEntryWithSignatureByUserId ( new GetEntryWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); Entry item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetEntryWithSignatureByUserIdResult \u003e asyncResult = null ; yield return client . GetEntryWithSignatureByUserId ( new Gs2 . Gs2Dictionary . Request . GetEntryWithSignatureByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEntryModelName ( \"entry-0001\" ) . WithKeyId ( \"key-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getEntryWithSignatureByUserId ( new Gs2Dictionary . GetEntryWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_entry_with_signature_by_user_id ( dictionary . GetEntryWithSignatureByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_entry_model_name ( 'entry-0001' ) . with_key_id ( 'key-0001' ) . with_time_offset_token ( None ) ) item = result . item body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_entry_with_signature_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelName = \"entry-0001\" , keyId = \"key-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_entry_with_signature_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelName = \"entry-0001\" , keyId = \"key-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; resetByUserId 엔트리 초기화 지정한 사용자가 수집한 모든 엔트리를 삭제하고, 도감을 빈 상태로 초기화합니다. 수집된 모든 엔트리가 일괄로 삭제됩니다. 이 작업은 되돌릴 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . ResetByUserId ( \u0026 dictionary . ResetByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\ResetByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e resetByUserId ( ( new ResetByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.ResetByUserIdRequest ; import io.gs2.dictionary.result.ResetByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { ResetByUserIdResult result = client . resetByUserId ( new ResetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . ResetByUserIdResult \u003e asyncResult = null ; yield return client . ResetByUserId ( new Gs2 . Gs2Dictionary . Request . ResetByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . resetByUserId ( new Gs2Dictionary . ResetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . reset_by_user_id ( dictionary . ResetByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.reset_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.reset_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result verifyEntry 엔트리 검증 현재 로그인한 사용자가 특정 엔트리를 수집했는지 여부를 검증합니다. 검증 타입으로 조건을 지정합니다：‘have’는 사용자가 엔트리를 보유하고 있는지 확인하고, ‘havent’는 보유하고 있지 않은지 확인합니다. 검증에 실패한 경우, 오류가 반환됩니다. 전제 조건 구현(예: 특정 엔트리를 보유하고 있어야 퀘스트에 도전할 수 있도록 하는 경우)에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “havent”,   “have” }  검증 종류 정의 설명 havent 지정한 엔트리를 보유하고 있지 않을 것 have 지정한 엔트리를 보유하고 있을 것 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . VerifyEntry ( \u0026 dictionary . VerifyEntryRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), EntryModelName : pointy . String ( \"entry-0001\" ), VerifyType : pointy . String ( \"havent\" ), } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\VerifyEntryRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e verifyEntry ( ( new VerifyEntryRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withEntryModelName ( \"entry-0001\" ) -\u003e withVerifyType ( \"havent\" ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.VerifyEntryRequest ; import io.gs2.dictionary.result.VerifyEntryResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { VerifyEntryResult result = client . verifyEntry ( new VerifyEntryRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withVerifyType ( \"havent\" ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . VerifyEntryResult \u003e asyncResult = null ; yield return client . VerifyEntry ( new Gs2 . Gs2Dictionary . Request . VerifyEntryRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithEntryModelName ( \"entry-0001\" ) . WithVerifyType ( \"havent\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . verifyEntry ( new Gs2Dictionary . VerifyEntryRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withVerifyType ( \"havent\" ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . verify_entry ( dictionary . VerifyEntryRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_entry_model_name ( 'entry-0001' ) . with_verify_type ( 'havent' ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.verify_entry ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelName = \"entry-0001\" , verifyType = \"havent\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.verify_entry_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelName = \"entry-0001\" , verifyType = \"havent\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result verifyEntryByUserId 사용자 ID를 지정하여 엔트리 검증 지정한 사용자가 특정 엔트리를 수집했는지 여부를 검증합니다. 검증 타입으로 조건을 지정합니다：‘have’는 사용자가 엔트리를 보유하고 있는지 확인하고, ‘havent’는 보유하고 있지 않은지 확인합니다. 검증에 실패한 경우, 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “havent”,   “have” }  검증 종류 정의 설명 havent 지정한 엔트리를 보유하고 있지 않을 것 have 지정한 엔트리를 보유하고 있을 것 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . VerifyEntryByUserId ( \u0026 dictionary . VerifyEntryByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EntryModelName : pointy . String ( \"entry-0001\" ), VerifyType : pointy . String ( \"havent\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\VerifyEntryByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e verifyEntryByUserId ( ( new VerifyEntryByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEntryModelName ( \"entry-0001\" ) -\u003e withVerifyType ( \"havent\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.VerifyEntryByUserIdRequest ; import io.gs2.dictionary.result.VerifyEntryByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { VerifyEntryByUserIdResult result = client . verifyEntryByUserId ( new VerifyEntryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withVerifyType ( \"havent\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . VerifyEntryByUserIdResult \u003e asyncResult = null ; yield return client . VerifyEntryByUserId ( new Gs2 . Gs2Dictionary . Request . VerifyEntryByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEntryModelName ( \"entry-0001\" ) . WithVerifyType ( \"havent\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . verifyEntryByUserId ( new Gs2Dictionary . VerifyEntryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withVerifyType ( \"havent\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . verify_entry_by_user_id ( dictionary . VerifyEntryByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_entry_model_name ( 'entry-0001' ) . with_verify_type ( 'havent' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.verify_entry_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelName = \"entry-0001\" , verifyType = \"havent\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.verify_entry_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelName = \"entry-0001\" , verifyType = \"havent\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result deleteEntries 엔트리 삭제 엔트리 모델 이름의 목록을 지정하여, 현재 로그인한 사용자의 도감에서 특정 엔트리를 삭제합니다. 일괄 작업으로 여러 엔트리를 한 번에 삭제할 수 있습니다. 반환되는 목록에는 실제로 삭제된 엔트리가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 Result 타입 설명 items List 삭제한 엔트리 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DeleteEntries ( \u0026 dictionary . DeleteEntriesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), EntryModelNames : [] * string { pointy . String ( \"entry-0001\" ), pointy . String ( \"entry-0002\" ), pointy . String ( \"entry-0003\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DeleteEntriesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e deleteEntries ( ( new DeleteEntriesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DeleteEntriesRequest ; import io.gs2.dictionary.result.DeleteEntriesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DeleteEntriesResult result = client . deleteEntries ( new DeleteEntriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelNames ( Arrays . asList ( \"entry-0001\" , \"entry-0002\" , \"entry-0003\" )) ); List Entry \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DeleteEntriesResult \u003e asyncResult = null ; yield return client . DeleteEntries ( new Gs2 . Gs2Dictionary . Request . DeleteEntriesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithEntryModelNames ( new string [] { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . deleteEntries ( new Gs2Dictionary . DeleteEntriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . delete_entries ( dictionary . DeleteEntriesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_entry_model_names ([ 'entry-0001' , 'entry-0002' , 'entry-0003' , ]) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.delete_entries ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'dictionary' ) api_result_handler = client.delete_entries_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; deleteEntriesByUserId 사용자 ID를 지정하여 엔트리 삭제 엔트리 모델 이름의 목록을 지정하여, 지정한 사용자의 도감에서 특정 엔트리를 삭제합니다. 일괄 작업으로 여러 엔트리를 한 번에 삭제할 수 있습니다. 반환되는 목록에는 실제로 삭제된 엔트리가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 삭제한 엔트리 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DeleteEntriesByUserId ( \u0026 dictionary . DeleteEntriesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EntryModelNames : [] * string { pointy . String ( \"entry-0001\" ), pointy . String ( \"entry-0002\" ), pointy . String ( \"entry-0003\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DeleteEntriesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e deleteEntriesByUserId ( ( new DeleteEntriesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DeleteEntriesByUserIdRequest ; import io.gs2.dictionary.result.DeleteEntriesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DeleteEntriesByUserIdResult result = client . deleteEntriesByUserId ( new DeleteEntriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelNames ( Arrays . asList ( \"entry-0001\" , \"entry-0002\" , \"entry-0003\" )) . withTimeOffsetToken ( null ) ); List Entry \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DeleteEntriesByUserIdResult \u003e asyncResult = null ; yield return client . DeleteEntriesByUserId ( new Gs2 . Gs2Dictionary . Request . DeleteEntriesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEntryModelNames ( new string [] { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . deleteEntriesByUserId ( new Gs2Dictionary . DeleteEntriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . delete_entries_by_user_id ( dictionary . DeleteEntriesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_entry_model_names ([ 'entry-0001' , 'entry-0002' , 'entry-0003' , ]) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.delete_entries_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'dictionary' ) api_result_handler = client.delete_entries_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeLikes 즐겨찾기 엔트리 목록을 취득 현재 로그인한 사용자가 즐겨찾기 등록한 엔트리의 페이지네이션 목록을 취득합니다. 즐겨찾기는 엔트리 수집과는 별도로 관리되며, 특정 도감 아이템에 대한 사용자의 선호를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 즐겨찾기 엔트리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DescribeLikes ( \u0026 dictionary . DescribeLikesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DescribeLikesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e describeLikes ( ( new DescribeLikesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DescribeLikesRequest ; import io.gs2.dictionary.result.DescribeLikesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DescribeLikesResult result = client . describeLikes ( new DescribeLikesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Like \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DescribeLikesResult \u003e asyncResult = null ; yield return client . DescribeLikes ( new Gs2 . Gs2Dictionary . Request . DescribeLikesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . describeLikes ( new Gs2Dictionary . DescribeLikesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . describe_likes ( dictionary . DescribeLikesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.describe_likes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'dictionary' ) api_result_handler = client.describe_likes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeLikesByUserId 사용자 ID를 지정하여 즐겨찾기 엔트리 목록을 취득 지정된 사용자가 즐겨찾기 등록한 엔트리의 페이지네이션 목록을 취득합니다. 즐겨찾기는 엔트리 수집과는 별도로 관리되며, 특정 도감 아이템에 대한 사용자의 선호를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 즐겨찾기 엔트리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DescribeLikesByUserId ( \u0026 dictionary . DescribeLikesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DescribeLikesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e describeLikesByUserId ( ( new DescribeLikesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DescribeLikesByUserIdRequest ; import io.gs2.dictionary.result.DescribeLikesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DescribeLikesByUserIdResult result = client . describeLikesByUserId ( new DescribeLikesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Like \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DescribeLikesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeLikesByUserId ( new Gs2 . Gs2Dictionary . Request . DescribeLikesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . describeLikesByUserId ( new Gs2Dictionary . DescribeLikesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . describe_likes_by_user_id ( dictionary . DescribeLikesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.describe_likes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'dictionary' ) api_result_handler = client.describe_likes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; addLikes 즐겨찾기 엔트리를 추가 현재 로그인한 사용자의 즐겨찾기로 하나 이상의 엔트리를 등록합니다. 배치 작업으로 여러 엔트리 모델 이름을 한 번에 지정할 수 있습니다. 이미 즐겨찾기 등록된 엔트리는 오류 없이 건너뜁니다. 반환되는 목록에는 새로 추가된 즐겨찾기만 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 Result 타입 설명 items List 등록한 즐겨찾기 엔트리 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . AddLikes ( \u0026 dictionary . AddLikesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), EntryModelNames : [] * string { pointy . String ( \"entry-0001\" ), pointy . String ( \"entry-0002\" ), pointy . String ( \"entry-0003\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\AddLikesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e addLikes ( ( new AddLikesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.AddLikesRequest ; import io.gs2.dictionary.result.AddLikesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { AddLikesResult result = client . addLikes ( new AddLikesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelNames ( Arrays . asList ( \"entry-0001\" , \"entry-0002\" , \"entry-0003\" )) ); List Like \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . AddLikesResult \u003e asyncResult = null ; yield return client . AddLikes ( new Gs2 . Gs2Dictionary . Request . AddLikesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithEntryModelNames ( new string [] { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . addLikes ( new Gs2Dictionary . AddLikesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . add_likes ( dictionary . AddLikesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_entry_model_names ([ 'entry-0001' , 'entry-0002' , 'entry-0003' , ]) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.add_likes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'dictionary' ) api_result_handler = client.add_likes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; addLikesByUserId 사용자 ID를 지정하여 즐겨찾기 엔트리를 추가 지정된 사용자의 즐겨찾기로 하나 이상의 엔트리를 등록합니다. 배치 작업으로 여러 엔트리 모델 이름을 한 번에 지정할 수 있습니다. 이미 즐겨찾기 등록된 엔트리는 오류 없이 건너뜁니다. 반환되는 목록에는 새로 추가된 즐겨찾기만 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 등록한 즐겨찾기 엔트리 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . AddLikesByUserId ( \u0026 dictionary . AddLikesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EntryModelNames : [] * string { pointy . String ( \"entry-0001\" ), pointy . String ( \"entry-0002\" ), pointy . String ( \"entry-0003\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\AddLikesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e addLikesByUserId ( ( new AddLikesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.AddLikesByUserIdRequest ; import io.gs2.dictionary.result.AddLikesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { AddLikesByUserIdResult result = client . addLikesByUserId ( new AddLikesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelNames ( Arrays . asList ( \"entry-0001\" , \"entry-0002\" , \"entry-0003\" )) . withTimeOffsetToken ( null ) ); List Like \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . AddLikesByUserIdResult \u003e asyncResult = null ; yield return client . AddLikesByUserId ( new Gs2 . Gs2Dictionary . Request . AddLikesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEntryModelNames ( new string [] { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . addLikesByUserId ( new Gs2Dictionary . AddLikesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . add_likes_by_user_id ( dictionary . AddLikesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_entry_model_names ([ 'entry-0001' , 'entry-0002' , 'entry-0003' , ]) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.add_likes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'dictionary' ) api_result_handler = client.add_likes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getLike 즐겨찾기 엔트리를 취득 현재 로그인한 사용자가 엔트리 모델 이름으로 지정된 특정 엔트리를 즐겨찾기 등록했는지 여부를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item Like 즐겨찾기 엔트리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetLike ( \u0026 dictionary . GetLikeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), EntryModelName : pointy . String ( \"entry-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetLikeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getLike ( ( new GetLikeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withEntryModelName ( \"entry-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetLikeRequest ; import io.gs2.dictionary.result.GetLikeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetLikeResult result = client . getLike ( new GetLikeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelName ( \"entry-0001\" ) ); Like item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetLikeResult \u003e asyncResult = null ; yield return client . GetLike ( new Gs2 . Gs2Dictionary . Request . GetLikeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithEntryModelName ( \"entry-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getLike ( new Gs2Dictionary . GetLikeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelName ( \"entry-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_like ( dictionary . GetLikeRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_entry_model_name ( 'entry-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_like ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelName = \"entry-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_like_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelName = \"entry-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getLikeByUserId 사용자 ID를 지정하여 즐겨찾기 엔트리를 취득 지정된 사용자가 엔트리 모델 이름으로 지정된 특정 엔트리를 즐겨찾기 등록했는지 여부를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Like 즐겨찾기 엔트리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetLikeByUserId ( \u0026 dictionary . GetLikeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EntryModelName : pointy . String ( \"entry-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetLikeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getLikeByUserId ( ( new GetLikeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEntryModelName ( \"entry-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetLikeByUserIdRequest ; import io.gs2.dictionary.result.GetLikeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetLikeByUserIdResult result = client . getLikeByUserId ( new GetLikeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withTimeOffsetToken ( null ) ); Like item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetLikeByUserIdResult \u003e asyncResult = null ; yield return client . GetLikeByUserId ( new Gs2 . Gs2Dictionary . Request . GetLikeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEntryModelName ( \"entry-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getLikeByUserId ( new Gs2Dictionary . GetLikeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelName ( \"entry-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_like_by_user_id ( dictionary . GetLikeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_entry_model_name ( 'entry-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_like_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelName = \"entry-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_like_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelName = \"entry-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; resetLikes 즐겨찾기 엔트리를 초기화 현재 로그인한 사용자의 모든 즐겨찾기를 삭제하여 즐겨찾기를 빈 상태로 초기화합니다. 모든 즐겨찾기 엔트리가 일괄로 삭제됩니다. 이 작업은 되돌릴 수 없습니다. 엔트리의 수집 상태에는 영향을 미치지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . ResetLikes ( \u0026 dictionary . ResetLikesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\ResetLikesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e resetLikes ( ( new ResetLikesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.ResetLikesRequest ; import io.gs2.dictionary.result.ResetLikesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { ResetLikesResult result = client . resetLikes ( new ResetLikesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . ResetLikesResult \u003e asyncResult = null ; yield return client . ResetLikes ( new Gs2 . Gs2Dictionary . Request . ResetLikesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . resetLikes ( new Gs2Dictionary . ResetLikesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . reset_likes ( dictionary . ResetLikesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.reset_likes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.reset_likes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result resetLikesByUserId 사용자 ID를 지정하여 즐겨찾기 엔트리 초기화 지정한 사용자의 모든 즐겨찾기를 삭제하고, 즐겨찾기를 빈 상태로 초기화합니다. 모든 즐겨찾기 엔트리가 일괄로 삭제됩니다. 이 작업은 되돌릴 수 없습니다. 엔트리의 수집 상태에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . ResetLikesByUserId ( \u0026 dictionary . ResetLikesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\ResetLikesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e resetLikesByUserId ( ( new ResetLikesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.ResetLikesByUserIdRequest ; import io.gs2.dictionary.result.ResetLikesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { ResetLikesByUserIdResult result = client . resetLikesByUserId ( new ResetLikesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . ResetLikesByUserIdResult \u003e asyncResult = null ; yield return client . ResetLikesByUserId ( new Gs2 . Gs2Dictionary . Request . ResetLikesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . resetLikesByUserId ( new Gs2Dictionary . ResetLikesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . reset_likes_by_user_id ( dictionary . ResetLikesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.reset_likes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'dictionary' ) api_result_handler = client.reset_likes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result deleteLikes 즐겨찾기 엔트리 삭제 엔트리 모델 이름의 목록을 지정하여, 현재 로그인한 사용자의 특정 즐겨찾기를 삭제합니다. 일괄 작업으로 여러 개의 즐겨찾기를 한 번에 삭제할 수 있습니다. 반환되는 목록에는 실제로 삭제된 즐겨찾기가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 Result 타입 설명 items List 삭제한 즐겨찾기 엔트리 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DeleteLikes ( \u0026 dictionary . DeleteLikesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), EntryModelNames : [] * string { pointy . String ( \"entry-0001\" ), pointy . String ( \"entry-0002\" ), pointy . String ( \"entry-0003\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DeleteLikesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e deleteLikes ( ( new DeleteLikesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DeleteLikesRequest ; import io.gs2.dictionary.result.DeleteLikesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DeleteLikesResult result = client . deleteLikes ( new DeleteLikesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelNames ( Arrays . asList ( \"entry-0001\" , \"entry-0002\" , \"entry-0003\" )) ); List Like \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DeleteLikesResult \u003e asyncResult = null ; yield return client . DeleteLikes ( new Gs2 . Gs2Dictionary . Request . DeleteLikesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithEntryModelNames ( new string [] { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . deleteLikes ( new Gs2Dictionary . DeleteLikesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . delete_likes ( dictionary . DeleteLikesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_entry_model_names ([ 'entry-0001' , 'entry-0002' , 'entry-0003' , ]) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.delete_likes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'dictionary' ) api_result_handler = client.delete_likes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; deleteLikesByUserId 사용자 ID를 지정하여 즐겨찾기 엔트리 삭제 엔트리 모델 이름의 목록을 지정하여, 지정한 사용자의 특정 즐겨찾기를 삭제합니다. 일괄 작업으로 여러 개의 즐겨찾기를 한 번에 삭제할 수 있습니다. 반환되는 목록에는 실제로 삭제된 즐겨찾기가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 삭제한 즐겨찾기 엔트리 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DeleteLikesByUserId ( \u0026 dictionary . DeleteLikesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EntryModelNames : [] * string { pointy . String ( \"entry-0001\" ), pointy . String ( \"entry-0002\" ), pointy . String ( \"entry-0003\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DeleteLikesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e deleteLikesByUserId ( ( new DeleteLikesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DeleteLikesByUserIdRequest ; import io.gs2.dictionary.result.DeleteLikesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DeleteLikesByUserIdResult result = client . deleteLikesByUserId ( new DeleteLikesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelNames ( Arrays . asList ( \"entry-0001\" , \"entry-0002\" , \"entry-0003\" )) . withTimeOffsetToken ( null ) ); List Like \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DeleteLikesByUserIdResult \u003e asyncResult = null ; yield return client . DeleteLikesByUserId ( new Gs2 . Gs2Dictionary . Request . DeleteLikesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEntryModelNames ( new string [] { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . deleteLikesByUserId ( new Gs2Dictionary . DeleteLikesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEntryModelNames ([ \"entry-0001\" , \"entry-0002\" , \"entry-0003\" , ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . delete_likes_by_user_id ( dictionary . DeleteLikesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_entry_model_names ([ 'entry-0001' , 'entry-0002' , 'entry-0003' , ]) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.delete_likes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'dictionary' ) api_result_handler = client.delete_likes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , entryModelNames = { \"entry-0001\" , \"entry-0002\" , \"entry-0003\" }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeEntryModels 엔트리 모델 목록 조회 지정한 네임스페이스에서 현재 활성화(공개)되어 있는 모든 엔트리 모델을 조회합니다. 엔트리 모델은 사용자가 수집할 수 있는 도감 아이템의 종류를 정의합니다. 현재 마스터 데이터를 통해 활성화된 모델만 반환되며, 편집 가능한 마스터 데이터는 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 엔트리 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DescribeEntryModels ( \u0026 dictionary . DescribeEntryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DescribeEntryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e describeEntryModels ( ( new DescribeEntryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DescribeEntryModelsRequest ; import io.gs2.dictionary.result.DescribeEntryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DescribeEntryModelsResult result = client . describeEntryModels ( new DescribeEntryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List EntryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DescribeEntryModelsResult \u003e asyncResult = null ; yield return client . DescribeEntryModels ( new Gs2 . Gs2Dictionary . Request . DescribeEntryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . describeEntryModels ( new Gs2Dictionary . DescribeEntryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . describe_entry_models ( dictionary . DescribeEntryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.describe_entry_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'dictionary' ) api_result_handler = client.describe_entry_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getEntryModel 엔트리 모델 조회 이름을 지정하여 특정 활성화된 엔트리 모델의 상세 정보를 조회합니다. 반환되는 정보에는 모델의 이름, 메타데이터, 설명이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. entryName string  ~ 128자 엔트리 모델 이름 Result 타입 설명 item EntryModel 엔트리 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetEntryModel ( \u0026 dictionary . GetEntryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EntryName : pointy . String ( \"entry-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetEntryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getEntryModel ( ( new GetEntryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEntryName ( \"entry-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetEntryModelRequest ; import io.gs2.dictionary.result.GetEntryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetEntryModelResult result = client . getEntryModel ( new GetEntryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withEntryName ( \"entry-0001\" ) ); EntryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetEntryModelResult \u003e asyncResult = null ; yield return client . GetEntryModel ( new Gs2 . Gs2Dictionary . Request . GetEntryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEntryName ( \"entry-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getEntryModel ( new Gs2Dictionary . GetEntryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withEntryName ( \"entry-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_entry_model ( dictionary . GetEntryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_entry_name ( 'entry-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_entry_model ({ namespaceName = \"namespace-0001\" , entryName = \"entry-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_entry_model_async ({ namespaceName = \"namespace-0001\" , entryName = \"entry-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 엔트리 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재의 엔트리 모델 마스터 데이터를 활성화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 임포트에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentEntryMaster 활성화 가능한 엔트리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 dictionary . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.ExportMasterRequest ; import io.gs2.dictionary.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentEntryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Dictionary . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Dictionary . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . export_master ( dictionary . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentEntryMaster 현재 활성화된 엔트리 모델의 마스터 데이터를 취득 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 엔트리 모델의 마스터 데이터를 취득합니다. 이는 편집 가능한 마스터 데이터와는 달리, 실제로 운영 환경에서 사용되고 있는 구성을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentEntryMaster 현재 활성화된 엔트리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetCurrentEntryMaster ( \u0026 dictionary . GetCurrentEntryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetCurrentEntryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getCurrentEntryMaster ( ( new GetCurrentEntryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetCurrentEntryMasterRequest ; import io.gs2.dictionary.result.GetCurrentEntryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetCurrentEntryMasterResult result = client . getCurrentEntryMaster ( new GetCurrentEntryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentEntryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetCurrentEntryMasterResult \u003e asyncResult = null ; yield return client . GetCurrentEntryMaster ( new Gs2 . Gs2Dictionary . Request . GetCurrentEntryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getCurrentEntryMaster ( new Gs2Dictionary . GetCurrentEntryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_current_entry_master ( dictionary . GetCurrentEntryMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_current_entry_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_current_entry_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentEntryMaster 현재 활성화된 엔트리 모델의 마스터 데이터를 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우에는 3단계로 업데이트를 진행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentEntryMaster 에 업로드로 취득한 토큰을 전달하여 실행함으로써 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentEntryMaster ( \u0026 dictionary . PreUpdateCurrentEntryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\PreUpdateCurrentEntryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentEntryMaster ( ( new PreUpdateCurrentEntryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.PreUpdateCurrentEntryMasterRequest ; import io.gs2.dictionary.result.PreUpdateCurrentEntryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { PreUpdateCurrentEntryMasterResult result = client . preUpdateCurrentEntryMaster ( new PreUpdateCurrentEntryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . PreUpdateCurrentEntryMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentEntryMaster ( new Gs2 . Gs2Dictionary . Request . PreUpdateCurrentEntryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . preUpdateCurrentEntryMaster ( new Gs2Dictionary . PreUpdateCurrentEntryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . pre_update_current_entry_master ( dictionary . PreUpdateCurrentEntryMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.pre_update_current_entry_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'dictionary' ) api_result_handler = client.pre_update_current_entry_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentEntryMaster 현재 활성화된 엔트리 모델의 마스터 데이터를 업데이트 지정된 네임스페이스의 엔트리 모델 마스터 데이터를 업데이트하고 활성화(공개)합니다. 두 가지 모드를 지원합니다: 인라인 마스터 데이터용 ‘direct’ 모드와, 사전에 업로드된 마스터 데이터용 ‘preUpload’ 모드입니다. 1MB를 초과하는 마스터 데이터의 경우에는 3단계 업데이트 플로우(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))를 사용해 주세요. 업로드된 마스터 데이터는 적용 전에 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentEntryMaster 업데이트된 현재 활성화된 엔트리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentEntryMaster ( \u0026 dictionary . UpdateCurrentEntryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2020-04-30\\\",\\n \\\"entryModels\\\": [\\n {\\n \\\"name\\\": \\\"monster-0001\\\",\\n \\\"metadata\\\": \\\"MONSTER-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"monster-0002\\\",\\n \\\"metadata\\\": \\\"MONSTER-0002\\\"\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\UpdateCurrentEntryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e updateCurrentEntryMaster ( ( new UpdateCurrentEntryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2020-04-30 \\\" , \\n \\\" entryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" monster-0001 \\\" , \\n \\\" metadata \\\" : \\\" MONSTER-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" monster-0002 \\\" , \\n \\\" metadata \\\" : \\\" MONSTER-0002 \\\"\\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.UpdateCurrentEntryMasterRequest ; import io.gs2.dictionary.result.UpdateCurrentEntryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { UpdateCurrentEntryMasterResult result = client . updateCurrentEntryMaster ( new UpdateCurrentEntryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2020-04-30\\\",\\n \\\"entryModels\\\": [\\n {\\n \\\"name\\\": \\\"monster-0001\\\",\\n \\\"metadata\\\": \\\"MONSTER-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"monster-0002\\\",\\n \\\"metadata\\\": \\\"MONSTER-0002\\\"\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentEntryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . UpdateCurrentEntryMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentEntryMaster ( new Gs2 . Gs2Dictionary . Request . UpdateCurrentEntryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2020-04-30\\\",\\n \\\"entryModels\\\": [\\n {\\n \\\"name\\\": \\\"monster-0001\\\",\\n \\\"metadata\\\": \\\"MONSTER-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"monster-0002\\\",\\n \\\"metadata\\\": \\\"MONSTER-0002\\\"\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . updateCurrentEntryMaster ( new Gs2Dictionary . UpdateCurrentEntryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2020-04-30\\\",\\n \\\"entryModels\\\": [\\n {\\n \\\"name\\\": \\\"monster-0001\\\",\\n \\\"metadata\\\": \\\"MONSTER-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"monster-0002\\\",\\n \\\"metadata\\\": \\\"MONSTER-0002\\\"\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . update_current_entry_master ( dictionary . UpdateCurrentEntryMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2020-04-30\", \\n \"entryModels\": [ \\n { \\n \"name\": \"monster-0001\", \\n \"metadata\": \"MONSTER-0001\" \\n }, \\n { \\n \"name\": \"monster-0002\", \\n \"metadata\": \"MONSTER-0002\" \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.update_current_entry_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2020-04-30 \\\" , \\n \\\" entryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" monster-0001 \\\" , \\n \\\" metadata \\\" : \\\" MONSTER-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" monster-0002 \\\" , \\n \\\" metadata \\\" : \\\" MONSTER-0002 \\\"\\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.update_current_entry_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2020-04-30 \\\" , \\n \\\" entryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" monster-0001 \\\" , \\n \\\" metadata \\\" : \\\" MONSTER-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" monster-0002 \\\" , \\n \\\" metadata \\\" : \\\" MONSTER-0002 \\\"\\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentEntryMasterFromGitHub 현재 활성화된 엔트리 모델의 마스터 데이터를 GitHub에서 업데이트 GitHub 리포지토리에서 직접 마스터 데이터를 취득하여 업데이트·활성화(공개)합니다. 체크아웃 설정에는 사용할 리포지토리, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하며 직접 배포하는 경우에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentEntryMaster 업데이트된 현재 활성화된 엔트리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentEntryMasterFromGitHub ( \u0026 dictionary . UpdateCurrentEntryMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 dictionary . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\UpdateCurrentEntryMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e updateCurrentEntryMasterFromGitHub ( ( new UpdateCurrentEntryMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.UpdateCurrentEntryMasterFromGitHubRequest ; import io.gs2.dictionary.result.UpdateCurrentEntryMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { UpdateCurrentEntryMasterFromGitHubResult result = client . updateCurrentEntryMasterFromGitHub ( new UpdateCurrentEntryMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentEntryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . UpdateCurrentEntryMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentEntryMasterFromGitHub ( new Gs2 . Gs2Dictionary . Request . UpdateCurrentEntryMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Dictionary . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . updateCurrentEntryMasterFromGitHub ( new Gs2Dictionary . UpdateCurrentEntryMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Dictionary . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . update_current_entry_master_from_git_hub ( dictionary . UpdateCurrentEntryMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( dictionary . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.update_current_entry_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.update_current_entry_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeEntryModelMasters 엔트리 모델 마스터 목록 조회 이름 접두사 필터링이 가능한, 편집 가능한 엔트리 모델 마스터의 페이지네이션 목록을 조회합니다. 엔트리 모델 마스터는 도감 아이템 종류의 편집 가능한 정의입니다. 마스터에 대한 변경 사항은 CurrentEntryMaster API로 마스터 데이터를 활성화하기 전까지는 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 엔트리 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 엔트리 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DescribeEntryModelMasters ( \u0026 dictionary . DescribeEntryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DescribeEntryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e describeEntryModelMasters ( ( new DescribeEntryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DescribeEntryModelMastersRequest ; import io.gs2.dictionary.result.DescribeEntryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DescribeEntryModelMastersResult result = client . describeEntryModelMasters ( new DescribeEntryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List EntryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DescribeEntryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeEntryModelMasters ( new Gs2 . Gs2Dictionary . Request . DescribeEntryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . describeEntryModelMasters ( new Gs2Dictionary . DescribeEntryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . describe_entry_model_masters ( dictionary . DescribeEntryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.describe_entry_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'dictionary' ) api_result_handler = client.describe_entry_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createEntryModelMaster 엔트리 모델 마스터 신규 작성 이름, 설명, 메타데이터를 지정하여 새로운 편집 가능한 엔트리 모델 마스터 정의를 작성합니다. 작성된 마스터는 사용자가 수집할 수 있는 도감 아이템 종류를 정의합니다. 변경 사항은 CurrentEntryMaster API로 마스터 데이터를 활성화하기 전까지는 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item EntryModelMaster 작성한 엔트리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . CreateEntryModelMaster ( \u0026 dictionary . CreateEntryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"monster-0001\" ), Description : nil , Metadata : pointy . String ( \"MONSTER-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\CreateEntryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e createEntryModelMaster ( ( new CreateEntryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"monster-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( \"MONSTER-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.CreateEntryModelMasterRequest ; import io.gs2.dictionary.result.CreateEntryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { CreateEntryModelMasterResult result = client . createEntryModelMaster ( new CreateEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"monster-0001\" ) . withDescription ( null ) . withMetadata ( \"MONSTER-0001\" ) ); EntryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . CreateEntryModelMasterResult \u003e asyncResult = null ; yield return client . CreateEntryModelMaster ( new Gs2 . Gs2Dictionary . Request . CreateEntryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"monster-0001\" ) . WithDescription ( null ) . WithMetadata ( \"MONSTER-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . createEntryModelMaster ( new Gs2Dictionary . CreateEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"monster-0001\" ) . withDescription ( null ) . withMetadata ( \"MONSTER-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . create_entry_model_master ( dictionary . CreateEntryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'monster-0001' ) . with_description ( None ) . with_metadata ( 'MONSTER-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.create_entry_model_master ({ namespaceName = \"namespace-0001\" , name = \"monster-0001\" , description = nil , metadata = \"MONSTER-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.create_entry_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"monster-0001\" , description = nil , metadata = \"MONSTER-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getEntryModelMaster 엔트리 모델 마스터 조회 이름을 지정하여 특정 편집 가능한 엔트리 모델 마스터의 상세 정보를 조회합니다. 활성화 전 마스터 정의를 확인하고 편집할 때 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. entryName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EntryModelMaster 엔트리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . GetEntryModelMaster ( \u0026 dictionary . GetEntryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EntryName : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\GetEntryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e getEntryModelMaster ( ( new GetEntryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEntryName ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.GetEntryModelMasterRequest ; import io.gs2.dictionary.result.GetEntryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { GetEntryModelMasterResult result = client . getEntryModelMaster ( new GetEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEntryName ( null ) ); EntryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . GetEntryModelMasterResult \u003e asyncResult = null ; yield return client . GetEntryModelMaster ( new Gs2 . Gs2Dictionary . Request . GetEntryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEntryName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . getEntryModelMaster ( new Gs2Dictionary . GetEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEntryName ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . get_entry_model_master ( dictionary . GetEntryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_entry_name ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.get_entry_model_master ({ namespaceName = \"namespace-0001\" , entryName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.get_entry_model_master_async ({ namespaceName = \"namespace-0001\" , entryName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateEntryModelMaster 엔트리 모델 마스터 갱신 기존 엔트리 모델 마스터의 설명과 메타데이터를 갱신합니다. 엔트리 모델 이름은 작성 후에는 변경할 수 없습니다. 변경 사항은 CurrentEntryMaster API로 마스터 데이터를 다시 활성화하기 전까지는 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. entryName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item EntryModelMaster 갱신한 엔트리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . UpdateEntryModelMaster ( \u0026 dictionary . UpdateEntryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EntryName : nil , Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"MONSTER-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\UpdateEntryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e updateEntryModelMaster ( ( new UpdateEntryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEntryName ( null ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"MONSTER-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.UpdateEntryModelMasterRequest ; import io.gs2.dictionary.result.UpdateEntryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { UpdateEntryModelMasterResult result = client . updateEntryModelMaster ( new UpdateEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEntryName ( null ) . withDescription ( \"description1\" ) . withMetadata ( \"MONSTER-0001\" ) ); EntryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . UpdateEntryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateEntryModelMaster ( new Gs2 . Gs2Dictionary . Request . UpdateEntryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEntryName ( null ) . WithDescription ( \"description1\" ) . WithMetadata ( \"MONSTER-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . updateEntryModelMaster ( new Gs2Dictionary . UpdateEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEntryName ( null ) . withDescription ( \"description1\" ) . withMetadata ( \"MONSTER-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . update_entry_model_master ( dictionary . UpdateEntryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_entry_name ( None ) . with_description ( 'description1' ) . with_metadata ( 'MONSTER-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.update_entry_model_master ({ namespaceName = \"namespace-0001\" , entryName = nil , description = \"description1\" , metadata = \"MONSTER-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.update_entry_model_master_async ({ namespaceName = \"namespace-0001\" , entryName = nil , description = \"description1\" , metadata = \"MONSTER-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteEntryModelMaster 엔트리 모델 마스터 삭제 편집 가능한 엔트리 모델 마스터 정의를 삭제합니다. 마스터 데이터만 영향을 받으며, 현재 활성화(공개)되어 있는 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 삭제된 모델과 연관된 기존 사용자 엔트리는 자동으로 삭제되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. entryName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item EntryModelMaster 삭제한 엔트리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/dictionary\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := dictionary . Gs2DictionaryRestClient { Session : \u0026 session , } result , err := client . DeleteEntryModelMaster ( \u0026 dictionary . DeleteEntryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EntryName : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Dictionary\\Gs2DictionaryRestClient ; use Gs2\\Dictionary\\Request\\DeleteEntryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DictionaryRestClient ( $session ); try { $result = $client -\u003e deleteEntryModelMaster ( ( new DeleteEntryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEntryName ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.dictionary.rest.Gs2DictionaryRestClient ; import io.gs2.dictionary.request.DeleteEntryModelMasterRequest ; import io.gs2.dictionary.result.DeleteEntryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DictionaryRestClient client = new Gs2DictionaryRestClient ( session ); try { DeleteEntryModelMasterResult result = client . deleteEntryModelMaster ( new DeleteEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEntryName ( null ) ); EntryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DictionaryRestClient ( session ); AsyncResult Gs2 . Gs2Dictionary . Result . DeleteEntryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteEntryModelMaster ( new Gs2 . Gs2Dictionary . Request . DeleteEntryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEntryName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Dictionary from '@/gs2/dictionary' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Dictionary . Gs2DictionaryRestClient ( session ); try { const result = await client . deleteEntryModelMaster ( new Gs2Dictionary . DeleteEntryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEntryName ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import dictionary session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = dictionary . Gs2DictionaryRestClient ( session ) try : result = client . delete_entry_model_master ( dictionary . DeleteEntryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_entry_name ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'dictionary' ) api_result = client.delete_entry_model_master ({ namespaceName = \"namespace-0001\" , entryName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'dictionary' ) api_result_handler = client.delete_entry_model_master_async ({ namespaceName = \"namespace-0001\" , entryName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Dictionary SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Dictionary SDK API 레퍼런스","url":"/ko/api_reference/dictionary/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 리소스 배포 처리 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. assumeUserId string ~ 1024자 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN autoRunStampSheetNotification NotificationSetting  트랜잭션 자동 실행이 완료되었을 때의 푸시 알림(구 사양) 트랜잭션이 서버사이드에서 자동 실행 완료되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 이는 구 사양이며, 신 사양에서는 autoRunTransactionNotification을 사용하세요. autoRunTransactionNotification NotificationSetting  트랜잭션 자동 실행이 완료되었을 때의 푸시 알림 분산 트랜잭션이 서버사이드에서 자동 실행 완료되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 트랜잭션 결과를 클라이언트에 통지하여 로컬 상태를 적절히 갱신할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 디스트리뷰터 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 리소스 배포·입수 액션 실행·트랜잭션 처리의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그의 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log 의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청·응답 로그 데이터가 대상 GS2-Log 로 출력됩니다. GS2-Log 에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 StampSheetResult 트랜잭션 실행 결과(레거시) 서버사이드 자동 실행으로 처리된 트랜잭션의 실행 결과를 기록합니다. 각 단계의 요청 내용과 응답 결과를 포함합니다: 검증 액션(사전 조건 확인), 소비 액션, 입수 액션. 오류 감지 및 재시도 로직을 위해 HTTP 상태 코드도 추적합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 stampSheetResultId string ※ ~ 1024자 트랜잭션 실행 결과 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID transactionId string  36 ~ 36자 트랜잭션 ID 이 트랜잭션을 고유하게 식별하는 UUID입니다. 트랜잭션과 그 실행 결과, 그리고 연쇄되는 후속 트랜잭션의 연결에 사용됩니다. verifyTaskRequests List 0 ~ 100 items 검증 액션의 요청 내용 목록 taskRequests List 0 ~ 100 items 소비 액션의 요청 내용 목록 sheetRequest AcquireAction  입수 액션의 요청 내용 verifyTaskResultCodes List [] 0 ~ 100 items 검증 액션의 실행 상태 코드 verifyTaskResults List [] 0 ~ 100 items 검증 액션의 실행 결과 taskResultCodes List [] 0 ~ 100 items 소비 액션의 실행 상태 코드 taskResults List [] 0 ~ 100 items 소비 액션의 실행 결과 sheetResultCode int 0 ~ 999 획득 액션의 실행 상태 코드 sheetResult string ~ 1048576자 입수 액션의 실행 결과 응답 내용 nextTransactionId string 36 ~ 36자 트랜잭션 실행에 의해 새로 발급된 트랜잭션의 트랜잭션 ID 입수 액션의 결과에 새로운 트랜잭션 ID가 포함되어 있는 경우, 여기에 추출되어 저장됩니다. 이를 통해 하나의 트랜잭션 완료가 다른 트랜잭션을 트리거하는 트랜잭션 체인이 가능해집니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionResult 트랜잭션 실행 결과 서버사이드 자동 실행으로 처리된 분산 트랜잭션의 실행 결과를 기록합니다. 각 단계의 구조화된 결과를 포함합니다: 검증 액션(사전 조건 확인), 소비 액션(리소스 소비), 입수 액션(리소스 지급). 각 액션 결과에는 요청, HTTP 상태 코드, 응답 페이로드가 포함됩니다. 상태 코드(비2xx)에 의한 오류 감지와, 충돌(409)이나 서버 오류(5xx)에서의 재시도가 지원됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionResultId string ※ ~ 1024자 트랜잭션 실행 결과 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID transactionId string  36 ~ 36자 트랜잭션 ID 이 분산 트랜잭션을 고유하게 식별하는 UUID입니다. 실행 결과 조회 및 원래 API 요청과의 연결에 사용됩니다. verifyResults List 0 ~ 100 items 검증 액션의 실행 결과 목록 consumeResults List 0 ~ 100 items 소비 액션의 실행 결과 목록 acquireResults List 0 ~ 100 items 입수 액션의 실행 결과 목록 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 어느 하나의 액션(검증, 소비, 입수)이 비2xx 상태 코드를 반환한 경우 true로 설정됩니다. true인 경우, 클라이언트는 개별 액션 결과를 확인하여 실패 원인을 파악해야 합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 DistributorModel 배포 모델 배포 모델이란 리소스 입수 시 소지 한도를 초과하여 입수했을 때의 정책을 설정하는 엔티티입니다. GS2-Distributor를 통해 입수 처리를 수행함으로써, 넘친 리소스를 GS2-Inbox의 메시지로 전송할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 distributorModelId string ※ ~ 1024자 배포 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. inboxNamespaceId string ~ 1024자 넘친 리소스를 전송할 GS2-Inbox 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 리소스 입수가 플레이어의 소지 한도를 초과한 경우, 넘친 리소스는 지정된 GS2-Inbox 네임스페이스에 메시지로 전송됩니다. 플레이어는 이후 수신함에서 리소스를 수령할 수 있습니다. whiteListTargetIds List [] 0 ~ 1000 items GS2-Distributor를 통해 처리할 수 있는 대상 리소스 GRN의 화이트리스트 이 배포 모델을 사용하여 입수 처리를 수행할 수 있는 대상 리소스의 GRN 프리픽스를 지정합니다. BatchRequestPayload API 일괄 실행 요청 일괄 실행 내 단일 API 요청을 나타냅니다. 여러 배치 요청 페이로드를 함께 전송함으로써 여러 GS2 API 호출을 한 번의 라운드트립으로 실행할 수 있어, 네트워크 오버헤드와 지연 시간을 줄일 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 requestId string  ~ 128자 요청 ID 배치 내에서 이 요청에 대해 클라이언트가 할당한 식별자입니다. 배치 응답 내에서 각 요청과 대응하는 결과를 연결하는 데 사용됩니다. service 문자열 열거형 enum {   “account”,   “adReward”,   “auth”,   “buff”,   “chat”,   “datastore”,   “deploy”,   “dictionary”,   “distributor”,   “enchant”,   “enhance”,   “exchange”,   “experience”,   “formation”,   “friend”,   “gateway”,   “grade”,   “guard”,   “guild”,   “identifier”,   “idle”,   “inbox”,   “inventory”,   “jobQueue”,   “key”,   “limit”,   “lock”,   “log”,   “loginReward”,   “lottery”,   “matchmaking”,   “megaField”,   “mission”,   “money”,   “money2”,   “news”,   “quest”,   “ranking”,   “ranking2”,   “realtime”,   “schedule”,   “script”,   “seasonRating”,   “serialKey”,   “showcase”,   “skillTree”,   “stamina”,   “stateMachine”,   “version” }  마이크로서비스 이름 호출할 GS2 마이크로서비스 이름입니다(예: “inventory”, “experience”, “money”). 이 API 요청을 수신할 서비스 엔드포인트를 결정합니다. 정의 설명 account GS2-Account adReward GS2-AdReward auth GS2-Auth buff GS2-Buff chat GS2-Chat datastore GS2-Datastore deploy GS2-Deploy dictionary GS2-Dictionary distributor GS2-Distributor enchant GS2-Enchant enhance GS2-Enhance exchange GS2-Exchange experience GS2-Experience formation GS2-Formation friend GS2-Friend gateway GS2-Gateway grade GS2-Grade guard GS2-Guard guild GS2-Guild identifier GS2-Identifier idle GS2-Idle inbox GS2-Inbox inventory GS2-Inventory jobQueue GS2-JobQueue key GS2-Key limit GS2-Limit lock GS2-Lock log GS2-Log loginReward GS2-LoginReward lottery GS2-Lottery matchmaking GS2-Matchmaking megaField GS2-MegaField mission GS2-Mission money GS2-Money money2 GS2-Money2 news GS2-News quest GS2-Quest ranking GS2-Ranking ranking2 GS2-Ranking2 realtime GS2-Realtime schedule GS2-Schedule script GS2-Script seasonRating GS2-SeasonRating serialKey GS2-SerialKey showcase GS2-Showcase skillTree GS2-SkillTree stamina GS2-Stamina stateMachine GS2-StateMachine version GS2-Version methodName string  ~ 128자 메서드 이름 대상 서비스에서 호출할 API 메서드 이름입니다(예: “describeNamespaces”, “getInventory”). 지정된 서비스의 유효한 API 메서드와 일치해야 합니다. parameter string  ~ 10240자 파라미터 API 메서드의 JSON으로 직렬화된 요청 파라미터입니다. 지정된 서비스 메서드의 요청 스키마를 준수해야 합니다. BatchResultPayload API 일괄 실행 결과 일괄 실행 내 단일 API 요청의 결과를 나타냅니다. 각 결과는 요청 ID로 원래 요청과 연결되며, HTTP 상태 코드와 JSON 응답 페이로드를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 requestId string  ~ 128자 요청 ID 대응하는 배치 요청과 일치하는 클라이언트 할당 식별자입니다. 이 결과를 원래 요청과 연결하는 데 사용됩니다. statusCode int  100 ~ 1000 상태 코드 이 배치 요청에 대해 GS2 API가 반환한 HTTP 상태 코드입니다. 2xx는 성공, 4xx는 클라이언트 오류, 5xx는 서버 오류를 나타냅니다. resultPayload string  ~ 10240자 응답 이 배치 요청에 대해 GS2 API가 반환한 JSON 응답 본문입니다. API 메서드의 응답 데이터 또는 오류 상세 정보를 포함합니다. AcquireAction 입수 액션 분산 트랜잭션 내 리소스 입수 조작을 나타냅니다. 플레이어에게 리소스(아이템, 화폐, 경험치 등)를 지급하는 입수 액션에 대응합니다. GS2 API의 액션 식별자와 JSON으로 직렬화된 요청 파라미터를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 분산 트랜잭션 내 리소스 소비 조작을 나타냅니다. 플레이어로부터 리소스(아이템, 화폐, 스태미나 등)를 소비하는 소비 액션에 대응합니다. 소비 액션은 입수 액션보다 먼저 실행되어, 플레이어가 필요한 비용을 충족하는지 확인합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 분산 트랜잭션 내 사전 조건 검증 조작을 나타냅니다. 소비·입수 액션보다 먼저 실행되어 조건이 충족되었는지 검증합니다(예: 소지 한도 확인, 퀘스트 완료 상태 검증 등). 검증 액션 중 하나라도 실패하면 트랜잭션 전체가 중단됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireActionResult 입수 액션의 실행 결과 단일 입수 액션 실행 결과를 기록합니다. 액션 식별자, 원래 요청, 성공·실패를 나타내는 HTTP 상태 코드, GS2 API로부터의 JSON 응답 페이로드를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 이 입수 액션에 대해 GS2 API가 반환한 HTTP 상태 코드입니다. 2xx는 성공, 409는 재시도가 필요한 충돌, 5xx는 서버 오류를 나타냅니다. acquireResult string ~ 1048576자 결과 내용 입수 액션 실행 후 GS2 API가 반환한 JSON 응답 본문입니다. 입수한 리소스의 상세 정보를 포함하며, 연쇄되는 트랜잭션 ID가 포함될 수도 있습니다. ConsumeActionResult 소비 액션의 실행 결과 단일 소비 액션 실행 결과를 기록합니다. 액션 식별자, 원래 요청, 성공·실패를 나타내는 HTTP 상태 코드, GS2 API로부터의 JSON 응답 페이로드를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 이 소비 액션에 대해 GS2 API가 반환한 HTTP 상태 코드입니다. 2xx는 성공, 409는 재시도가 필요한 충돌, 5xx는 서버 오류를 나타냅니다. consumeResult string ~ 1048576자 결과 내용 소비 액션 실행 후 GS2 API가 반환한 JSON 응답 본문입니다. 소비된 리소스의 상세 정보를 포함합니다. VerifyActionResult 검증 액션의 실행 결과 단일 검증 액션 실행 결과를 기록합니다. 액션 식별자, 원래 요청, 성공·실패를 나타내는 HTTP 상태 코드, GS2 API로부터의 JSON 응답 페이로드를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 이 검증 액션에 대해 GS2 API가 반환한 HTTP 상태 코드입니다. 2xx는 검증 성공, 비2xx는 사전 조건이 충족되지 않았음을 나타냅니다. verifyResult string ~ 1048576자 결과 내용 검증 액션 실행 후 GS2 API가 반환한 JSON 응답 본문입니다. 검증 결과의 상세 정보를 포함합니다. Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 DistributeResource 리소스 배포 입수 액션과 그 요청 파라미터로 구성된 단일 리소스 배포 조작을 나타냅니다. 플레이어에게 리소스를 배포할 때 어떤 GS2 API 액션을 어떤 파라미터로 실행할지 지정하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 CurrentDistributorMaster 현재 활성화된 배포 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 배포 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 작성함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Distributor 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 DistributorModelMaster 배포 모델 마스터 배포 모델 마스터는 게임 내에서 사용되는 배포 모델의 편집·관리용 데이터로, 관리 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·갱신 처리를 수행함으로써 실제로 게임에서 참조되는 배포 모델로 반영됩니다. 배포 모델이란 리소스를 입수할 때 보유 한도를 초과하여 입수했을 경우의 정책을 설정하는 엔티티입니다. GS2-Distributor를 통해 입수 처리를 수행함으로써, 넘친 리소스를 GS2-Inbox의 메시지로 전달할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 distributorModelId string ※ ~ 1024자 배포 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. inboxNamespaceId string ~ 1024자 넘친 리소스를 전송할 GS2-Inbox 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 리소스 입수가 플레이어의 소지 한도를 초과한 경우, 넘친 리소스는 지정된 GS2-Inbox 네임스페이스에 메시지로 전송됩니다. 플레이어는 이후 수신함에서 리소스를 수령할 수 있습니다. whiteListTargetIds List [] 0 ~ 1000 items GS2-Distributor를 통해 처리할 수 있는 대상 리소스 GRN의 화이트리스트 이 배포 모델을 사용하여 입수 처리를 수행할 수 있는 대상 리소스의 GRN 프리픽스를 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 distributor . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.DescribeNamespacesRequest ; import io.gs2.distributor.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Distributor . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Distributor . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . describe_namespaces ( distributor . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'distributor' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 리소스 배포 처리 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. assumeUserId string ~ 1024자 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN autoRunStampSheetNotification NotificationSetting  트랜잭션 자동 실행이 완료되었을 때의 푸시 알림(구 사양) 트랜잭션이 서버사이드에서 자동 실행 완료되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 이는 구 사양이며, 신 사양에서는 autoRunTransactionNotification을 사용하세요. autoRunTransactionNotification NotificationSetting  트랜잭션 자동 실행이 완료되었을 때의 푸시 알림 분산 트랜잭션이 서버사이드에서 자동 실행 완료되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 트랜잭션 결과를 클라이언트에 통지하여 로컬 상태를 적절히 갱신할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 디스트리뷰터 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 리소스 배포·입수 액션 실행·트랜잭션 처리의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 distributor . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , AssumeUserId : pointy . String ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ), AutoRunStampSheetNotification : nil , AutoRunTransactionNotification : nil , LogSetting : \u0026 distributor . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) -\u003e withAutoRunStampSheetNotification ( null ) -\u003e withAutoRunTransactionNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Distributor\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.CreateNamespaceRequest ; import io.gs2.distributor.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . withAutoRunStampSheetNotification ( null ) . withAutoRunTransactionNotification ( null ) . withLogSetting ( new io . gs2 . distributor . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Distributor . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . WithAutoRunStampSheetNotification ( null ) . WithAutoRunTransactionNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Distributor . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Distributor . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . withAutoRunStampSheetNotification ( null ) . withAutoRunTransactionNotification ( null ) . withLogSetting ( new Gs2Distributor . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . create_namespace ( distributor . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_assume_user_id ( 'grn:gs2::YourOwnerId:identifier:user:user-0001' ) . with_auto_run_stamp_sheet_notification ( None ) . with_auto_run_transaction_notification ( None ) . with_log_setting ( distributor . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , autoRunStampSheetNotification = nil , autoRunTransactionNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , autoRunStampSheetNotification = nil , autoRunTransactionNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 distributor . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetNamespaceStatusRequest ; import io.gs2.distributor.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Distributor . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Distributor . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_namespace_status ( distributor . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'distributor' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 distributor . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetNamespaceRequest ; import io.gs2.distributor.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Distributor . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Distributor . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_namespace ( distributor . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 리소스 배포 처리 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. assumeUserId string ~ 1024자 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN autoRunStampSheetNotification NotificationSetting  트랜잭션 자동 실행이 완료되었을 때의 푸시 알림(구 사양) 트랜잭션이 서버사이드에서 자동 실행 완료되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 이는 구 사양이며, 신 사양에서는 autoRunTransactionNotification을 사용하세요. autoRunTransactionNotification NotificationSetting  트랜잭션 자동 실행이 완료되었을 때의 푸시 알림 분산 트랜잭션이 서버사이드에서 자동 실행 완료되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 트랜잭션 결과를 클라이언트에 통지하여 로컬 상태를 적절히 갱신할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 디스트리뷰터 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 리소스 배포·입수 액션 실행·트랜잭션 처리의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 distributor . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , AssumeUserId : pointy . String ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ), AutoRunStampSheetNotification : nil , AutoRunTransactionNotification : nil , LogSetting : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) -\u003e withAutoRunStampSheetNotification ( null ) -\u003e withAutoRunTransactionNotification ( null ) -\u003e withLogSetting ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.UpdateNamespaceRequest ; import io.gs2.distributor.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . withAutoRunStampSheetNotification ( null ) . withAutoRunTransactionNotification ( null ) . withLogSetting ( null ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Distributor . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . WithAutoRunStampSheetNotification ( null ) . WithAutoRunTransactionNotification ( null ) . WithLogSetting ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Distributor . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . withAutoRunStampSheetNotification ( null ) . withAutoRunTransactionNotification ( null ) . withLogSetting ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . update_namespace ( distributor . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_assume_user_id ( 'grn:gs2::YourOwnerId:identifier:user:user-0001' ) . with_auto_run_stamp_sheet_notification ( None ) . with_auto_run_transaction_notification ( None ) . with_log_setting ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , autoRunStampSheetNotification = nil , autoRunTransactionNotification = nil , logSetting = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , autoRunStampSheetNotification = nil , autoRunTransactionNotification = nil , logSetting = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 distributor . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.DeleteNamespaceRequest ; import io.gs2.distributor.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Distributor . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Distributor . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . delete_namespace ( distributor . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 distributor . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetServiceVersionRequest ; import io.gs2.distributor.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Distributor . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Distributor . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_service_version ( distributor . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; distribute 소지품 배포 배포 리소스에 지정된 액션을 기반으로 사용자에게 리소스를 배포합니다. 대응 서비스에는 Inventory, Stamina, Experience, Inbox, Money 등이 포함됩니다. 배포로 인해 사용자의 소지품이 용량을 초과하는 경우, 초과분은 배포 모델에 설정된 프레젠트박스의 네임스페이스로 자동 전송됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. distributorName string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID distributeResource DistributeResource  가산할 리소스 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 distributeResource DistributeResource 처리한 DistributeResource inboxNamespaceId string 소지품이 용량을 초과했을 때 전달할 GS2-Inbox 네임스페이스의 GRN result string 응답 내용 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . Distribute ( \u0026 distributor . DistributeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DistributorName : pointy . String ( \"distributor-0001\" ), UserId : pointy . String ( \"user-0001\" ), DistributeResource : \u0026 distributor . DistributeResource { Action : pointy . String ( \"Gs2Money:DepositWallet\" ), Request : pointy . String ( \"{}\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } distributeResource := result . DistributeResource inboxNamespaceId := result . InboxNamespaceId result := result . Result use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\DistributeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e distribute ( ( new DistributeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDistributorName ( \"distributor-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDistributeResource (( new DistributeResource ()) -\u003e withAction ( \"Gs2Money:DepositWallet\" ) -\u003e withRequest ( \"{}\" ) ) -\u003e withTimeOffsetToken ( null ) ); $distributeResource = $result -\u003e getDistributeResource (); $inboxNamespaceId = $result -\u003e getInboxNamespaceId (); $result = $result -\u003e getResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.DistributeRequest ; import io.gs2.distributor.result.DistributeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { DistributeResult result = client . distribute ( new DistributeRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-0001\" ) . withUserId ( \"user-0001\" ) . withDistributeResource ( new DistributeResource () . withAction ( \"Gs2Money:DepositWallet\" ) . withRequest ( \"{}\" ) ) . withTimeOffsetToken ( null ) ); DistributeResource distributeResource = result . getDistributeResource (); String inboxNamespaceId = result . getInboxNamespaceId (); String result = result . getResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . DistributeResult \u003e asyncResult = null ; yield return client . Distribute ( new Gs2 . Gs2Distributor . Request . DistributeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDistributorName ( \"distributor-0001\" ) . WithUserId ( \"user-0001\" ) . WithDistributeResource ( new Gs2 . Gs2Distributor . Model . DistributeResource () . WithAction ( \"Gs2Money:DepositWallet\" ) . WithRequest ( \"{}\" ) ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var distributeResource = result . DistributeResource ; var inboxNamespaceId = result . InboxNamespaceId ; var result = result . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . distribute ( new Gs2Distributor . DistributeRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-0001\" ) . withUserId ( \"user-0001\" ) . withDistributeResource ( new Gs2Distributor . model . DistributeResource () . withAction ( \"Gs2Money:DepositWallet\" ) . withRequest ( \"{}\" ) ) . withTimeOffsetToken ( null ) ); const distributeResource = result . getDistributeResource (); const inboxNamespaceId = result . getInboxNamespaceId (); const result = result . getResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . distribute ( distributor . DistributeRequest () . with_namespace_name ( 'namespace-0001' ) . with_distributor_name ( 'distributor-0001' ) . with_user_id ( 'user-0001' ) . with_distribute_resource ( distributor . DistributeResource () . with_action ( 'Gs2Money:DepositWallet' ) . with_request ( ' {} ' ) ) . with_time_offset_token ( None ) ) distribute_resource = result . distribute_resource inbox_namespace_id = result . inbox_namespace_id result = result . result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.distribute ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-0001\" , userId = \"user-0001\" , distributeResource = { action = \"Gs2Money:DepositWallet\" , request = \"{}\" , }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result distributeResource = result.distributeResource ; inboxNamespaceId = result.inboxNamespaceId ; result = result.result ; client = gs2 ( 'distributor' ) api_result_handler = client.distribute_async ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-0001\" , userId = \"user-0001\" , distributeResource = { action = \"Gs2Money:DepositWallet\" , request = \"{}\" , }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result distributeResource = result.distributeResource ; inboxNamespaceId = result.inboxNamespaceId ; result = result.result ; distributeWithoutOverflowProcess 소지품 배포(초과 시 구제 조치 없음) 초과 처리 없이 사용자에게 리소스를 배포합니다. 일반적인 배포 조작과 달리, 배포로 인해 사용자의 소지품이 용량을 초과하는 경우 초과분은 그대로 폐기되며 프레젠트박스로의 전송은 이루어지지 않습니다. 이 방식에서는 네임스페이스 지정이 필요하지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID distributeResource DistributeResource  가산할 리소스 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 distributeResource DistributeResource 처리한 DistributeResource result string 응답 내용 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . DistributeWithoutOverflowProcess ( \u0026 distributor . DistributeWithoutOverflowProcessRequest { UserId : pointy . String ( \"user-0001\" ), DistributeResource : \u0026 distributor . DistributeResource { Action : pointy . String ( \"Gs2Money:DepositWallet\" ), Request : pointy . String ( \"{}\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } distributeResource := result . DistributeResource result := result . Result use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\DistributeWithoutOverflowProcessRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e distributeWithoutOverflowProcess ( ( new DistributeWithoutOverflowProcessRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withDistributeResource (( new DistributeResource ()) -\u003e withAction ( \"Gs2Money:DepositWallet\" ) -\u003e withRequest ( \"{}\" ) ) -\u003e withTimeOffsetToken ( null ) ); $distributeResource = $result -\u003e getDistributeResource (); $result = $result -\u003e getResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.DistributeWithoutOverflowProcessRequest ; import io.gs2.distributor.result.DistributeWithoutOverflowProcessResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { DistributeWithoutOverflowProcessResult result = client . distributeWithoutOverflowProcess ( new DistributeWithoutOverflowProcessRequest () . withUserId ( \"user-0001\" ) . withDistributeResource ( new DistributeResource () . withAction ( \"Gs2Money:DepositWallet\" ) . withRequest ( \"{}\" ) ) . withTimeOffsetToken ( null ) ); DistributeResource distributeResource = result . getDistributeResource (); String result = result . getResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . DistributeWithoutOverflowProcessResult \u003e asyncResult = null ; yield return client . DistributeWithoutOverflowProcess ( new Gs2 . Gs2Distributor . Request . DistributeWithoutOverflowProcessRequest () . WithUserId ( \"user-0001\" ) . WithDistributeResource ( new Gs2 . Gs2Distributor . Model . DistributeResource () . WithAction ( \"Gs2Money:DepositWallet\" ) . WithRequest ( \"{}\" ) ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var distributeResource = result . DistributeResource ; var result = result . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . distributeWithoutOverflowProcess ( new Gs2Distributor . DistributeWithoutOverflowProcessRequest () . withUserId ( \"user-0001\" ) . withDistributeResource ( new Gs2Distributor . model . DistributeResource () . withAction ( \"Gs2Money:DepositWallet\" ) . withRequest ( \"{}\" ) ) . withTimeOffsetToken ( null ) ); const distributeResource = result . getDistributeResource (); const result = result . getResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . distribute_without_overflow_process ( distributor . DistributeWithoutOverflowProcessRequest () . with_user_id ( 'user-0001' ) . with_distribute_resource ( distributor . DistributeResource () . with_action ( 'Gs2Money:DepositWallet' ) . with_request ( ' {} ' ) ) . with_time_offset_token ( None ) ) distribute_resource = result . distribute_resource result = result . result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.distribute_without_overflow_process ({ userId = \"user-0001\" , distributeResource = { action = \"Gs2Money:DepositWallet\" , request = \"{}\" , }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result distributeResource = result.distributeResource ; result = result.result ; client = gs2 ( 'distributor' ) api_result_handler = client.distribute_without_overflow_process_async ({ userId = \"user-0001\" , distributeResource = { action = \"Gs2Money:DepositWallet\" , request = \"{}\" , }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result distributeResource = result.distributeResource ; result = result.result ; runVerifyTask 트랜잭션의 검증 액션을 실행한다 트랜잭션 내의 단일 검증 태스크를 실행하여 전제 조건을 확인합니다. 반환되는 컨텍스트 스택은 검증 결과를 반영하며, 트랜잭션 내 후속 태스크로 전달됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyTask string  ~ 5242880자 검증 액션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 contextStack string 태스크 실행 결과를 반영한 ContextStack statusCode int 상태 코드 result string 응답 내용 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . RunVerifyTask ( \u0026 distributor . RunVerifyTaskRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VerifyTask : pointy . String ( \"stampTask\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } contextStack := result . ContextStack statusCode := result . StatusCode result := result . Result use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\RunVerifyTaskRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e runVerifyTask ( ( new RunVerifyTaskRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVerifyTask ( \"stampTask\" ) -\u003e withKeyId ( \"key-0001\" ) ); $contextStack = $result -\u003e getContextStack (); $statusCode = $result -\u003e getStatusCode (); $result = $result -\u003e getResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.RunVerifyTaskRequest ; import io.gs2.distributor.result.RunVerifyTaskResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { RunVerifyTaskResult result = client . runVerifyTask ( new RunVerifyTaskRequest () . withNamespaceName ( \"namespace-0001\" ) . withVerifyTask ( \"stampTask\" ) . withKeyId ( \"key-0001\" ) ); String contextStack = result . getContextStack (); int statusCode = result . getStatusCode (); String result = result . getResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . RunVerifyTaskResult \u003e asyncResult = null ; yield return client . RunVerifyTask ( new Gs2 . Gs2Distributor . Request . RunVerifyTaskRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVerifyTask ( \"stampTask\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var contextStack = result . ContextStack ; var statusCode = result . StatusCode ; var result = result . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . runVerifyTask ( new Gs2Distributor . RunVerifyTaskRequest () . withNamespaceName ( \"namespace-0001\" ) . withVerifyTask ( \"stampTask\" ) . withKeyId ( \"key-0001\" ) ); const contextStack = result . getContextStack (); const statusCode = result . getStatusCode (); const result = result . getResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . run_verify_task ( distributor . RunVerifyTaskRequest () . with_namespace_name ( 'namespace-0001' ) . with_verify_task ( 'stampTask' ) . with_key_id ( 'key-0001' ) ) context_stack = result . context_stack status_code = result . status_code result = result . result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.run_verify_task ({ namespaceName = \"namespace-0001\" , verifyTask = \"stampTask\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result contextStack = result.contextStack ; statusCode = result.statusCode ; result = result.result ; client = gs2 ( 'distributor' ) api_result_handler = client.run_verify_task_async ({ namespaceName = \"namespace-0001\" , verifyTask = \"stampTask\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result contextStack = result.contextStack ; statusCode = result.statusCode ; result = result.result ; runStampSheetExpress 트랜잭션을 실행한다 트랜잭션의 세 단계를 순서대로 실행합니다: 검증 액션, 소비 액션, 입수 액션. 이는 RunVerifyTask, RunStampTask, RunStampSheet를 한 번의 호출로 결합한 편의 API입니다. 각 검증 태스크, 소비 액션, 입수 액션의 개별 상태 코드와 응답 내용을 포함하여, 모든 단계의 결과가 함께 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. stampSheet string  ~ 5242880자 트랜잭션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 verifyTaskResultCodes List 검증 액션의 실행 상태 코드 verifyTaskResults List 검증 액션의 실행 결과 taskResultCodes List 소비 액션의 실행 상태 코드 taskResults List 소비 액션의 실행 결과 sheetResultCode int 획득 액션의 실행 상태 코드 sheetResult string 획득 액션의 실행 결과 응답 내용 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . RunStampSheetExpress ( \u0026 distributor . RunStampSheetExpressRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StampSheet : pointy . String ( \"stampSheet\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } verifyTaskResultCodes := result . VerifyTaskResultCodes verifyTaskResults := result . VerifyTaskResults taskResultCodes := result . TaskResultCodes taskResults := result . TaskResults sheetResultCode := result . SheetResultCode sheetResult := result . SheetResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\RunStampSheetExpressRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e runStampSheetExpress ( ( new RunStampSheetExpressRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStampSheet ( \"stampSheet\" ) -\u003e withKeyId ( \"key-0001\" ) ); $verifyTaskResultCodes = $result -\u003e getVerifyTaskResultCodes (); $verifyTaskResults = $result -\u003e getVerifyTaskResults (); $taskResultCodes = $result -\u003e getTaskResultCodes (); $taskResults = $result -\u003e getTaskResults (); $sheetResultCode = $result -\u003e getSheetResultCode (); $sheetResult = $result -\u003e getSheetResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.RunStampSheetExpressRequest ; import io.gs2.distributor.result.RunStampSheetExpressResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { RunStampSheetExpressResult result = client . runStampSheetExpress ( new RunStampSheetExpressRequest () . withNamespaceName ( \"namespace-0001\" ) . withStampSheet ( \"stampSheet\" ) . withKeyId ( \"key-0001\" ) ); List int \u003e verifyTaskResultCodes = result . getVerifyTaskResultCodes (); List String \u003e verifyTaskResults = result . getVerifyTaskResults (); List int \u003e taskResultCodes = result . getTaskResultCodes (); List String \u003e taskResults = result . getTaskResults (); int sheetResultCode = result . getSheetResultCode (); String sheetResult = result . getSheetResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . RunStampSheetExpressResult \u003e asyncResult = null ; yield return client . RunStampSheetExpress ( new Gs2 . Gs2Distributor . Request . RunStampSheetExpressRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStampSheet ( \"stampSheet\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var verifyTaskResultCodes = result . VerifyTaskResultCodes ; var verifyTaskResults = result . VerifyTaskResults ; var taskResultCodes = result . TaskResultCodes ; var taskResults = result . TaskResults ; var sheetResultCode = result . SheetResultCode ; var sheetResult = result . SheetResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . runStampSheetExpress ( new Gs2Distributor . RunStampSheetExpressRequest () . withNamespaceName ( \"namespace-0001\" ) . withStampSheet ( \"stampSheet\" ) . withKeyId ( \"key-0001\" ) ); const verifyTaskResultCodes = result . getVerifyTaskResultCodes (); const verifyTaskResults = result . getVerifyTaskResults (); const taskResultCodes = result . getTaskResultCodes (); const taskResults = result . getTaskResults (); const sheetResultCode = result . getSheetResultCode (); const sheetResult = result . getSheetResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . run_stamp_sheet_express ( distributor . RunStampSheetExpressRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamp_sheet ( 'stampSheet' ) . with_key_id ( 'key-0001' ) ) verify_task_result_codes = result . verify_task_result_codes verify_task_results = result . verify_task_results task_result_codes = result . task_result_codes task_results = result . task_results sheet_result_code = result . sheet_result_code sheet_result = result . sheet_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.run_stamp_sheet_express ({ namespaceName = \"namespace-0001\" , stampSheet = \"stampSheet\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result verifyTaskResultCodes = result.verifyTaskResultCodes ; verifyTaskResults = result.verifyTaskResults ; taskResultCodes = result.taskResultCodes ; taskResults = result.taskResults ; sheetResultCode = result.sheetResultCode ; sheetResult = result.sheetResult ; client = gs2 ( 'distributor' ) api_result_handler = client.run_stamp_sheet_express_async ({ namespaceName = \"namespace-0001\" , stampSheet = \"stampSheet\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result verifyTaskResultCodes = result.verifyTaskResultCodes ; verifyTaskResults = result.verifyTaskResults ; taskResultCodes = result.taskResultCodes ; taskResults = result.taskResults ; sheetResultCode = result.sheetResultCode ; sheetResult = result.sheetResult ; runVerifyTaskWithoutNamespace GS2-Distributor의 네임스페이스를 지정하지 않고, 트랜잭션의 검증 액션을 실행한다 GS2-Distributor의 네임스페이스를 지정하지 않고 검증 태스크를 실행합니다. 네임스페이스 지정을 생략하면 다음과 같은 부작용이 있습니다: 실행 로그가 기록되지 않습니다 리소스 초과 처리가 실행되지 않습니다 네임스페이스 수준 기능의 오버헤드 없이 가벼운 검증 실행이 필요한 경우에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 verifyTask string  ~ 5242880자 검증 액션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 contextStack string 태스크 실행 결과를 반영한 ContextStack statusCode int 상태 코드 result string 응답 내용 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . RunVerifyTaskWithoutNamespace ( \u0026 distributor . RunVerifyTaskWithoutNamespaceRequest { VerifyTask : pointy . String ( \"stampTask\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } contextStack := result . ContextStack statusCode := result . StatusCode result := result . Result use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\RunVerifyTaskWithoutNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e runVerifyTaskWithoutNamespace ( ( new RunVerifyTaskWithoutNamespaceRequest ()) -\u003e withVerifyTask ( \"stampTask\" ) -\u003e withKeyId ( \"key-0001\" ) ); $contextStack = $result -\u003e getContextStack (); $statusCode = $result -\u003e getStatusCode (); $result = $result -\u003e getResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.RunVerifyTaskWithoutNamespaceRequest ; import io.gs2.distributor.result.RunVerifyTaskWithoutNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { RunVerifyTaskWithoutNamespaceResult result = client . runVerifyTaskWithoutNamespace ( new RunVerifyTaskWithoutNamespaceRequest () . withVerifyTask ( \"stampTask\" ) . withKeyId ( \"key-0001\" ) ); String contextStack = result . getContextStack (); int statusCode = result . getStatusCode (); String result = result . getResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . RunVerifyTaskWithoutNamespaceResult \u003e asyncResult = null ; yield return client . RunVerifyTaskWithoutNamespace ( new Gs2 . Gs2Distributor . Request . RunVerifyTaskWithoutNamespaceRequest () . WithVerifyTask ( \"stampTask\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var contextStack = result . ContextStack ; var statusCode = result . StatusCode ; var result = result . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . runVerifyTaskWithoutNamespace ( new Gs2Distributor . RunVerifyTaskWithoutNamespaceRequest () . withVerifyTask ( \"stampTask\" ) . withKeyId ( \"key-0001\" ) ); const contextStack = result . getContextStack (); const statusCode = result . getStatusCode (); const result = result . getResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . run_verify_task_without_namespace ( distributor . RunVerifyTaskWithoutNamespaceRequest () . with_verify_task ( 'stampTask' ) . with_key_id ( 'key-0001' ) ) context_stack = result . context_stack status_code = result . status_code result = result . result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.run_verify_task_without_namespace ({ verifyTask = \"stampTask\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result contextStack = result.contextStack ; statusCode = result.statusCode ; result = result.result ; client = gs2 ( 'distributor' ) api_result_handler = client.run_verify_task_without_namespace_async ({ verifyTask = \"stampTask\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result contextStack = result.contextStack ; statusCode = result.statusCode ; result = result.result ; runStampTaskWithoutNamespace GS2-Distributor 네임스페이스를 지정하지 않고 트랜잭션의 소비 액션 실행 GS2-Distributor 네임스페이스를 지정하지 않고 소비 액션을 실행합니다. 네임스페이스 지정을 생략하면 다음과 같은 부작용이 발생합니다: 실행 로그가 기록되지 않습니다 리소스 초과 처리가 실행되지 않습니다 네임스페이스 레벨 기능의 오버헤드 없이 경량 소비 실행이 필요한 경우에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stampTask string  ~ 5242880자 소비 액션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 contextStack string 태스크 실행 결과를 반영한 ContextStack statusCode int 상태 코드 result string 응답 내용 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . RunStampTaskWithoutNamespace ( \u0026 distributor . RunStampTaskWithoutNamespaceRequest { StampTask : pointy . String ( \"stampTask\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } contextStack := result . ContextStack statusCode := result . StatusCode result := result . Result use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\RunStampTaskWithoutNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e runStampTaskWithoutNamespace ( ( new RunStampTaskWithoutNamespaceRequest ()) -\u003e withStampTask ( \"stampTask\" ) -\u003e withKeyId ( \"key-0001\" ) ); $contextStack = $result -\u003e getContextStack (); $statusCode = $result -\u003e getStatusCode (); $result = $result -\u003e getResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.RunStampTaskWithoutNamespaceRequest ; import io.gs2.distributor.result.RunStampTaskWithoutNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { RunStampTaskWithoutNamespaceResult result = client . runStampTaskWithoutNamespace ( new RunStampTaskWithoutNamespaceRequest () . withStampTask ( \"stampTask\" ) . withKeyId ( \"key-0001\" ) ); String contextStack = result . getContextStack (); int statusCode = result . getStatusCode (); String result = result . getResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . RunStampTaskWithoutNamespaceResult \u003e asyncResult = null ; yield return client . RunStampTaskWithoutNamespace ( new Gs2 . Gs2Distributor . Request . RunStampTaskWithoutNamespaceRequest () . WithStampTask ( \"stampTask\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var contextStack = result . ContextStack ; var statusCode = result . StatusCode ; var result = result . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . runStampTaskWithoutNamespace ( new Gs2Distributor . RunStampTaskWithoutNamespaceRequest () . withStampTask ( \"stampTask\" ) . withKeyId ( \"key-0001\" ) ); const contextStack = result . getContextStack (); const statusCode = result . getStatusCode (); const result = result . getResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . run_stamp_task_without_namespace ( distributor . RunStampTaskWithoutNamespaceRequest () . with_stamp_task ( 'stampTask' ) . with_key_id ( 'key-0001' ) ) context_stack = result . context_stack status_code = result . status_code result = result . result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.run_stamp_task_without_namespace ({ stampTask = \"stampTask\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result contextStack = result.contextStack ; statusCode = result.statusCode ; result = result.result ; client = gs2 ( 'distributor' ) api_result_handler = client.run_stamp_task_without_namespace_async ({ stampTask = \"stampTask\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result contextStack = result.contextStack ; statusCode = result.statusCode ; result = result.result ; runStampSheetWithoutNamespace GS2-Distributor 네임스페이스를 지정하지 않고 트랜잭션의 획득 액션 실행 GS2-Distributor 네임스페이스를 지정하지 않고 획득 액션을 실행합니다. 네임스페이스 지정을 생략하면 다음과 같은 부작용이 발생합니다: 실행 로그가 기록되지 않습니다 리소스 초과 처리가 실행되지 않습니다(초과 리소스는 폐기됩니다) 네임스페이스 레벨 기능의 오버헤드 없이 경량 획득 실행이 필요한 경우에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stampSheet string  ~ 5242880자 트랜잭션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 statusCode int 상태 코드 result string 응답 내용 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . RunStampSheetWithoutNamespace ( \u0026 distributor . RunStampSheetWithoutNamespaceRequest { StampSheet : pointy . String ( \"stampSheet\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } statusCode := result . StatusCode result := result . Result use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\RunStampSheetWithoutNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e runStampSheetWithoutNamespace ( ( new RunStampSheetWithoutNamespaceRequest ()) -\u003e withStampSheet ( \"stampSheet\" ) -\u003e withKeyId ( \"key-0001\" ) ); $statusCode = $result -\u003e getStatusCode (); $result = $result -\u003e getResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.RunStampSheetWithoutNamespaceRequest ; import io.gs2.distributor.result.RunStampSheetWithoutNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { RunStampSheetWithoutNamespaceResult result = client . runStampSheetWithoutNamespace ( new RunStampSheetWithoutNamespaceRequest () . withStampSheet ( \"stampSheet\" ) . withKeyId ( \"key-0001\" ) ); int statusCode = result . getStatusCode (); String result = result . getResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . RunStampSheetWithoutNamespaceResult \u003e asyncResult = null ; yield return client . RunStampSheetWithoutNamespace ( new Gs2 . Gs2Distributor . Request . RunStampSheetWithoutNamespaceRequest () . WithStampSheet ( \"stampSheet\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var statusCode = result . StatusCode ; var result = result . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . runStampSheetWithoutNamespace ( new Gs2Distributor . RunStampSheetWithoutNamespaceRequest () . withStampSheet ( \"stampSheet\" ) . withKeyId ( \"key-0001\" ) ); const statusCode = result . getStatusCode (); const result = result . getResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . run_stamp_sheet_without_namespace ( distributor . RunStampSheetWithoutNamespaceRequest () . with_stamp_sheet ( 'stampSheet' ) . with_key_id ( 'key-0001' ) ) status_code = result . status_code result = result . result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.run_stamp_sheet_without_namespace ({ stampSheet = \"stampSheet\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result statusCode = result.statusCode ; result = result.result ; client = gs2 ( 'distributor' ) api_result_handler = client.run_stamp_sheet_without_namespace_async ({ stampSheet = \"stampSheet\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result statusCode = result.statusCode ; result = result.result ; runStampSheetExpressWithoutNamespace GS2-Distributor 네임스페이스를 지정하지 않고 트랜잭션 실행 GS2-Distributor 네임스페이스를 지정하지 않고 트랜잭션의 3가지 단계(검증, 소비, 획득)를 순서대로 실행합니다. 네임스페이스 지정을 생략하면 다음과 같은 부작용이 발생합니다: 실행 로그가 기록되지 않습니다 리소스 초과 처리가 실행되지 않습니다(초과 리소스는 폐기됩니다) 네임스페이스 레벨 기능의 오버헤드 없이 경량 트랜잭션 전체 실행이 필요한 경우에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stampSheet string  ~ 5242880자 트랜잭션 keyId string  ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 verifyTaskResultCodes List 검증 액션의 실행 상태 코드 verifyTaskResults List 검증 액션의 실행 결과 taskResultCodes List 소비 액션의 실행 상태 코드 taskResults List 소비 액션의 실행 결과 sheetResultCode int 획득 액션의 실행 상태 코드 sheetResult string 획득 액션의 실행 결과 응답 내용 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . RunStampSheetExpressWithoutNamespace ( \u0026 distributor . RunStampSheetExpressWithoutNamespaceRequest { StampSheet : pointy . String ( \"stampSheet\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } verifyTaskResultCodes := result . VerifyTaskResultCodes verifyTaskResults := result . VerifyTaskResults taskResultCodes := result . TaskResultCodes taskResults := result . TaskResults sheetResultCode := result . SheetResultCode sheetResult := result . SheetResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\RunStampSheetExpressWithoutNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e runStampSheetExpressWithoutNamespace ( ( new RunStampSheetExpressWithoutNamespaceRequest ()) -\u003e withStampSheet ( \"stampSheet\" ) -\u003e withKeyId ( \"key-0001\" ) ); $verifyTaskResultCodes = $result -\u003e getVerifyTaskResultCodes (); $verifyTaskResults = $result -\u003e getVerifyTaskResults (); $taskResultCodes = $result -\u003e getTaskResultCodes (); $taskResults = $result -\u003e getTaskResults (); $sheetResultCode = $result -\u003e getSheetResultCode (); $sheetResult = $result -\u003e getSheetResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.RunStampSheetExpressWithoutNamespaceRequest ; import io.gs2.distributor.result.RunStampSheetExpressWithoutNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { RunStampSheetExpressWithoutNamespaceResult result = client . runStampSheetExpressWithoutNamespace ( new RunStampSheetExpressWithoutNamespaceRequest () . withStampSheet ( \"stampSheet\" ) . withKeyId ( \"key-0001\" ) ); List int \u003e verifyTaskResultCodes = result . getVerifyTaskResultCodes (); List String \u003e verifyTaskResults = result . getVerifyTaskResults (); List int \u003e taskResultCodes = result . getTaskResultCodes (); List String \u003e taskResults = result . getTaskResults (); int sheetResultCode = result . getSheetResultCode (); String sheetResult = result . getSheetResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . RunStampSheetExpressWithoutNamespaceResult \u003e asyncResult = null ; yield return client . RunStampSheetExpressWithoutNamespace ( new Gs2 . Gs2Distributor . Request . RunStampSheetExpressWithoutNamespaceRequest () . WithStampSheet ( \"stampSheet\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var verifyTaskResultCodes = result . VerifyTaskResultCodes ; var verifyTaskResults = result . VerifyTaskResults ; var taskResultCodes = result . TaskResultCodes ; var taskResults = result . TaskResults ; var sheetResultCode = result . SheetResultCode ; var sheetResult = result . SheetResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . runStampSheetExpressWithoutNamespace ( new Gs2Distributor . RunStampSheetExpressWithoutNamespaceRequest () . withStampSheet ( \"stampSheet\" ) . withKeyId ( \"key-0001\" ) ); const verifyTaskResultCodes = result . getVerifyTaskResultCodes (); const verifyTaskResults = result . getVerifyTaskResults (); const taskResultCodes = result . getTaskResultCodes (); const taskResults = result . getTaskResults (); const sheetResultCode = result . getSheetResultCode (); const sheetResult = result . getSheetResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . run_stamp_sheet_express_without_namespace ( distributor . RunStampSheetExpressWithoutNamespaceRequest () . with_stamp_sheet ( 'stampSheet' ) . with_key_id ( 'key-0001' ) ) verify_task_result_codes = result . verify_task_result_codes verify_task_results = result . verify_task_results task_result_codes = result . task_result_codes task_results = result . task_results sheet_result_code = result . sheet_result_code sheet_result = result . sheet_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.run_stamp_sheet_express_without_namespace ({ stampSheet = \"stampSheet\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result verifyTaskResultCodes = result.verifyTaskResultCodes ; verifyTaskResults = result.verifyTaskResults ; taskResultCodes = result.taskResultCodes ; taskResults = result.taskResults ; sheetResultCode = result.sheetResultCode ; sheetResult = result.sheetResult ; client = gs2 ( 'distributor' ) api_result_handler = client.run_stamp_sheet_express_without_namespace_async ({ stampSheet = \"stampSheet\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result verifyTaskResultCodes = result.verifyTaskResultCodes ; verifyTaskResults = result.verifyTaskResults ; taskResultCodes = result.taskResultCodes ; taskResults = result.taskResults ; sheetResultCode = result.sheetResultCode ; sheetResult = result.sheetResult ; setTransactionDefaultConfig 트랜잭션 발행 API에 지정할 Config의 기본값 설정 후속 트랜잭션 API 호출에 자동으로 적용되는 기본 Config 값을 설정합니다. 기본값은 반환되는 ContextStack에 포함되며, 이 ContextStack을 후속 요청에 포함하면 Config 값이 자동으로 적용됩니다. 설정된 기본값의 유효기간은 설정 시점부터 18시간입니다. 이 시간을 초과하면 값은 무시되며 다시 설정해야 합니다. 슬롯 이름이나 레이트 모델 이름 등 자주 사용하는 Config 값을 매번 지정하지 않고 한 번만 설정하고자 할 때 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 accessToken string  ~ 128자 액세스 토큰 config List  1 ~ 1000 items 트랜잭션의 플레이스홀더에 적용하는 설정값 Result 타입 설명 newContextStack string 기본 Config를 반영하기 위한 ContextStack 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . SetTransactionDefaultConfig ( \u0026 distributor . SetTransactionDefaultConfigRequest { AccessToken : pointy . String ( \"accessToken-0001\" ), Config : [] distributor . Config { distributor . Config { Key : pointy . String ( \"key-0001\" ), Value : pointy . String ( \"value-0001\" ), }, distributor . Config { Key : pointy . String ( \"key-0002\" ), Value : pointy . String ( \"value-0002\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } newContextStack := result . NewContextStack use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\SetTransactionDefaultConfigRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e setTransactionDefaultConfig ( ( new SetTransactionDefaultConfigRequest ()) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withConfig ([ ( new Config ()) -\u003e withKey ( \"key-0001\" ) -\u003e withValue ( \"value-0001\" ), ( new Config ()) -\u003e withKey ( \"key-0002\" ) -\u003e withValue ( \"value-0002\" ), ]) ); $newContextStack = $result -\u003e getNewContextStack (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.SetTransactionDefaultConfigRequest ; import io.gs2.distributor.result.SetTransactionDefaultConfigResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { SetTransactionDefaultConfigResult result = client . setTransactionDefaultConfig ( new SetTransactionDefaultConfigRequest () . withAccessToken ( \"accessToken-0001\" ) . withConfig ( Arrays . asList ( new Config () . withKey ( \"key-0001\" ) . withValue ( \"value-0001\" ), new Config () . withKey ( \"key-0002\" ) . withValue ( \"value-0002\" ) )) ); String newContextStack = result . getNewContextStack (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . SetTransactionDefaultConfigResult \u003e asyncResult = null ; yield return client . SetTransactionDefaultConfig ( new Gs2 . Gs2Distributor . Request . SetTransactionDefaultConfigRequest () . WithAccessToken ( \"accessToken-0001\" ) . WithConfig ( new Gs2 . Gs2Distributor . Model . Config [] { new Gs2 . Gs2Distributor . Model . Config () . WithKey ( \"key-0001\" ) . WithValue ( \"value-0001\" ), new Gs2 . Gs2Distributor . Model . Config () . WithKey ( \"key-0002\" ) . WithValue ( \"value-0002\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var newContextStack = result . NewContextStack ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . setTransactionDefaultConfig ( new Gs2Distributor . SetTransactionDefaultConfigRequest () . withAccessToken ( \"accessToken-0001\" ) . withConfig ([ new Gs2Distributor . model . Config () . withKey ( \"key-0001\" ) . withValue ( \"value-0001\" ), new Gs2Distributor . model . Config () . withKey ( \"key-0002\" ) . withValue ( \"value-0002\" ), ]) ); const newContextStack = result . getNewContextStack (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . set_transaction_default_config ( distributor . SetTransactionDefaultConfigRequest () . with_access_token ( 'accessToken-0001' ) . with_config ([ distributor . Config () . with_key ( 'key-0001' ) . with_value ( 'value-0001' ), distributor . Config () . with_key ( 'key-0002' ) . with_value ( 'value-0002' ), ]) ) new_context_stack = result . new_context_stack except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.set_transaction_default_config ({ accessToken = \"accessToken-0001\" , config = { { key = \"key-0001\" , value = \"value-0001\" , }, { key = \"key-0002\" , value = \"value-0002\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; client = gs2 ( 'distributor' ) api_result_handler = client.set_transaction_default_config_async ({ accessToken = \"accessToken-0001\" , config = { { key = \"key-0001\" , value = \"value-0001\" , }, { key = \"key-0002\" , value = \"value-0002\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; setTransactionDefaultConfigByUserId 사용자 ID를 지정하여 트랜잭션 발행 API에 지정할 Config의 기본값 설정 지정된 사용자의 후속 트랜잭션 API 호출에 자동으로 적용되는 기본 Config 값을 설정합니다. 기본값은 반환되는 ContextStack에 포함되며, 이 ContextStack을 후속 요청에 포함하면 Config 값이 자동으로 적용됩니다. 설정된 기본값의 유효기간은 설정 시점부터 18시간입니다. 이 시간을 초과하면 값은 무시되며 다시 설정해야 합니다. 슬롯 이름이나 레이트 모델 이름 등 자주 사용하는 Config 값을 매번 지정하지 않고 한 번만 설정하고자 할 때 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID config List  1 ~ 1000 items 트랜잭션의 플레이스홀더에 적용하는 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 newContextStack string 기본 Config를 반영하기 위한 ContextStack 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . SetTransactionDefaultConfigByUserId ( \u0026 distributor . SetTransactionDefaultConfigByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), Config : [] distributor . Config { distributor . Config { Key : pointy . String ( \"key-0001\" ), Value : pointy . String ( \"value-0001\" ), }, distributor . Config { Key : pointy . String ( \"key-0002\" ), Value : pointy . String ( \"value-0002\" ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } newContextStack := result . NewContextStack use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\SetTransactionDefaultConfigByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e setTransactionDefaultConfigByUserId ( ( new SetTransactionDefaultConfigByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withConfig ([ ( new Config ()) -\u003e withKey ( \"key-0001\" ) -\u003e withValue ( \"value-0001\" ), ( new Config ()) -\u003e withKey ( \"key-0002\" ) -\u003e withValue ( \"value-0002\" ), ]) -\u003e withTimeOffsetToken ( null ) ); $newContextStack = $result -\u003e getNewContextStack (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.SetTransactionDefaultConfigByUserIdRequest ; import io.gs2.distributor.result.SetTransactionDefaultConfigByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { SetTransactionDefaultConfigByUserIdResult result = client . setTransactionDefaultConfigByUserId ( new SetTransactionDefaultConfigByUserIdRequest () . withUserId ( \"user-0001\" ) . withConfig ( Arrays . asList ( new Config () . withKey ( \"key-0001\" ) . withValue ( \"value-0001\" ), new Config () . withKey ( \"key-0002\" ) . withValue ( \"value-0002\" ) )) . withTimeOffsetToken ( null ) ); String newContextStack = result . getNewContextStack (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . SetTransactionDefaultConfigByUserIdResult \u003e asyncResult = null ; yield return client . SetTransactionDefaultConfigByUserId ( new Gs2 . Gs2Distributor . Request . SetTransactionDefaultConfigByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithConfig ( new Gs2 . Gs2Distributor . Model . Config [] { new Gs2 . Gs2Distributor . Model . Config () . WithKey ( \"key-0001\" ) . WithValue ( \"value-0001\" ), new Gs2 . Gs2Distributor . Model . Config () . WithKey ( \"key-0002\" ) . WithValue ( \"value-0002\" ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var newContextStack = result . NewContextStack ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . setTransactionDefaultConfigByUserId ( new Gs2Distributor . SetTransactionDefaultConfigByUserIdRequest () . withUserId ( \"user-0001\" ) . withConfig ([ new Gs2Distributor . model . Config () . withKey ( \"key-0001\" ) . withValue ( \"value-0001\" ), new Gs2Distributor . model . Config () . withKey ( \"key-0002\" ) . withValue ( \"value-0002\" ), ]) . withTimeOffsetToken ( null ) ); const newContextStack = result . getNewContextStack (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . set_transaction_default_config_by_user_id ( distributor . SetTransactionDefaultConfigByUserIdRequest () . with_user_id ( 'user-0001' ) . with_config ([ distributor . Config () . with_key ( 'key-0001' ) . with_value ( 'value-0001' ), distributor . Config () . with_key ( 'key-0002' ) . with_value ( 'value-0002' ), ]) . with_time_offset_token ( None ) ) new_context_stack = result . new_context_stack except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.set_transaction_default_config_by_user_id ({ userId = \"user-0001\" , config = { { key = \"key-0001\" , value = \"value-0001\" , }, { key = \"key-0002\" , value = \"value-0002\" , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; client = gs2 ( 'distributor' ) api_result_handler = client.set_transaction_default_config_by_user_id_async ({ userId = \"user-0001\" , config = { { key = \"key-0001\" , value = \"value-0001\" , }, { key = \"key-0002\" , value = \"value-0002\" , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; freezeMasterData 마스터 데이터를 현재 시각 기준으로 고정 현재 로그인한 사용자의 마스터 데이터를 현재 타임스탬프로 고정합니다. 고정 타임스탬프는 반환되는 ContextStack에 기록되며, 이 ContextStack을 후속 요청에 포함하면 최신 버전이 아닌 고정 시점의 마스터 데이터가 사용됩니다. 이를 통해 일련의 관련 작업 동안 마스터 데이터의 일관성이 보장되며, 작업 도중의 변경 사항이 사용자에게 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 newContextStack string 마스터 데이터를 고정하는 시각을 기록한 컨텍스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . FreezeMasterData ( \u0026 distributor . FreezeMasterDataRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } newContextStack := result . NewContextStack use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\FreezeMasterDataRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e freezeMasterData ( ( new FreezeMasterDataRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $newContextStack = $result -\u003e getNewContextStack (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.FreezeMasterDataRequest ; import io.gs2.distributor.result.FreezeMasterDataResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { FreezeMasterDataResult result = client . freezeMasterData ( new FreezeMasterDataRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); String newContextStack = result . getNewContextStack (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . FreezeMasterDataResult \u003e asyncResult = null ; yield return client . FreezeMasterData ( new Gs2 . Gs2Distributor . Request . FreezeMasterDataRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var newContextStack = result . NewContextStack ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . freezeMasterData ( new Gs2Distributor . FreezeMasterDataRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const newContextStack = result . getNewContextStack (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . freeze_master_data ( distributor . FreezeMasterDataRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) new_context_stack = result . new_context_stack except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.freeze_master_data ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; client = gs2 ( 'distributor' ) api_result_handler = client.freeze_master_data_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; freezeMasterDataByUserId 사용자 ID를 지정하여 마스터 데이터를 현재 시각 기준으로 고정 지정된 사용자의 마스터 데이터를 현재 타임스탬프로 고정합니다. 고정 타임스탬프는 반환되는 ContextStack에 기록되며, 이 ContextStack을 후속 요청에 포함하면 최신 버전이 아닌 고정 시점의 마스터 데이터가 사용됩니다. 이를 통해 일련의 관련 작업 동안 마스터 데이터의 일관성이 보장되며, 작업 도중의 변경 사항이 사용자에게 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 newContextStack string 마스터 데이터를 고정하는 시각을 기록한 컨텍스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . FreezeMasterDataByUserId ( \u0026 distributor . FreezeMasterDataByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } newContextStack := result . NewContextStack use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\FreezeMasterDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e freezeMasterDataByUserId ( ( new FreezeMasterDataByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $newContextStack = $result -\u003e getNewContextStack (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.FreezeMasterDataByUserIdRequest ; import io.gs2.distributor.result.FreezeMasterDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { FreezeMasterDataByUserIdResult result = client . freezeMasterDataByUserId ( new FreezeMasterDataByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String newContextStack = result . getNewContextStack (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . FreezeMasterDataByUserIdResult \u003e asyncResult = null ; yield return client . FreezeMasterDataByUserId ( new Gs2 . Gs2Distributor . Request . FreezeMasterDataByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var newContextStack = result . NewContextStack ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . freezeMasterDataByUserId ( new Gs2Distributor . FreezeMasterDataByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const newContextStack = result . getNewContextStack (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . freeze_master_data_by_user_id ( distributor . FreezeMasterDataByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) new_context_stack = result . new_context_stack except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.freeze_master_data_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; client = gs2 ( 'distributor' ) api_result_handler = client.freeze_master_data_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; signFreezeMasterDataTimestamp 마스터 데이터 고정용 타임스탬프에 서명 지정된 암호화 키를 사용하여 지정된 타임스탬프의 암호 서명을 생성합니다. 반환되는 본문과 서명은 FreezeMasterDataBySignedTimestamp에서 지정된 시각에 마스터 데이터를 고정하는 데 사용할 수 있습니다. 이를 통해 서버 측에서 고정 타임스탬프를 제어할 수 있어, 클라이언트가 임의의 타임스탬프를 지정하는 것을 방지합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. timestamp long 현재 시각 마스터 데이터를 고정할 시각 keyId string  ~ 1024자 서명 계산에 사용할 GS2-Key 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 body string 본문 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . SignFreezeMasterDataTimestamp ( \u0026 distributor . SignFreezeMasterDataTimestampRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Timestamp : pointy . Int64 ( 10000 ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\SignFreezeMasterDataTimestampRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e signFreezeMasterDataTimestamp ( ( new SignFreezeMasterDataTimestampRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withTimestamp ( 10000 ) -\u003e withKeyId ( \"key-0001\" ) ); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.SignFreezeMasterDataTimestampRequest ; import io.gs2.distributor.result.SignFreezeMasterDataTimestampResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { SignFreezeMasterDataTimestampResult result = client . signFreezeMasterDataTimestamp ( new SignFreezeMasterDataTimestampRequest () . withNamespaceName ( \"namespace-0001\" ) . withTimestamp ( 10000L ) . withKeyId ( \"key-0001\" ) ); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . SignFreezeMasterDataTimestampResult \u003e asyncResult = null ; yield return client . SignFreezeMasterDataTimestamp ( new Gs2 . Gs2Distributor . Request . SignFreezeMasterDataTimestampRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithTimestamp ( 10000L ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . signFreezeMasterDataTimestamp ( new Gs2Distributor . SignFreezeMasterDataTimestampRequest () . withNamespaceName ( \"namespace-0001\" ) . withTimestamp ( 10000 ) . withKeyId ( \"key-0001\" ) ); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . sign_freeze_master_data_timestamp ( distributor . SignFreezeMasterDataTimestampRequest () . with_namespace_name ( 'namespace-0001' ) . with_timestamp ( 10000 ) . with_key_id ( 'key-0001' ) ) body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.sign_freeze_master_data_timestamp ({ namespaceName = \"namespace-0001\" , timestamp = 10000 , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result body = result.body ; signature = result.signature ; client = gs2 ( 'distributor' ) api_result_handler = client.sign_freeze_master_data_timestamp_async ({ namespaceName = \"namespace-0001\" , timestamp = 10000 , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result body = result.body ; signature = result.signature ; freezeMasterDataBySignedTimestamp 마스터 데이터를 지정된 서명 타임스탬프로 고정 SignFreezeMasterDataTimestamp로 사전에 서명된 타임스탬프로 마스터 데이터를 고정합니다. 서명은 지정된 암호화 키로 검증되어 타임스탬프가 변조되지 않았음을 확인합니다. 고정 타임스탬프는 반환되는 ContextStack에 기록되어 후속 요청에서 사용됩니다. 클라이언트 측 조작을 방지하기 위해 서버가 정확한 고정 시각을 제어해야 하는 경우에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 body string  ~ 1024자 본문 signature string  ~ 256자 서명 keyId string  ~ 1024자 서명 계산에 사용한 GS2-Key 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 newContextStack string 마스터 데이터를 고정하는 시각을 기록한 컨텍스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . FreezeMasterDataBySignedTimestamp ( \u0026 distributor . FreezeMasterDataBySignedTimestampRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Body : pointy . String ( \"body\" ), Signature : pointy . String ( \"signature\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } newContextStack := result . NewContextStack use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\FreezeMasterDataBySignedTimestampRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e freezeMasterDataBySignedTimestamp ( ( new FreezeMasterDataBySignedTimestampRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withBody ( \"body\" ) -\u003e withSignature ( \"signature\" ) -\u003e withKeyId ( \"key-0001\" ) ); $newContextStack = $result -\u003e getNewContextStack (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.FreezeMasterDataBySignedTimestampRequest ; import io.gs2.distributor.result.FreezeMasterDataBySignedTimestampResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { FreezeMasterDataBySignedTimestampResult result = client . freezeMasterDataBySignedTimestamp ( new FreezeMasterDataBySignedTimestampRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withBody ( \"body\" ) . withSignature ( \"signature\" ) . withKeyId ( \"key-0001\" ) ); String newContextStack = result . getNewContextStack (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . FreezeMasterDataBySignedTimestampResult \u003e asyncResult = null ; yield return client . FreezeMasterDataBySignedTimestamp ( new Gs2 . Gs2Distributor . Request . FreezeMasterDataBySignedTimestampRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithBody ( \"body\" ) . WithSignature ( \"signature\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var newContextStack = result . NewContextStack ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . freezeMasterDataBySignedTimestamp ( new Gs2Distributor . FreezeMasterDataBySignedTimestampRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withBody ( \"body\" ) . withSignature ( \"signature\" ) . withKeyId ( \"key-0001\" ) ); const newContextStack = result . getNewContextStack (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . freeze_master_data_by_signed_timestamp ( distributor . FreezeMasterDataBySignedTimestampRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_body ( 'body' ) . with_signature ( 'signature' ) . with_key_id ( 'key-0001' ) ) new_context_stack = result . new_context_stack except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.freeze_master_data_by_signed_timestamp ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , body = \"body\" , signature = \"signature\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; client = gs2 ( 'distributor' ) api_result_handler = client.freeze_master_data_by_signed_timestamp_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , body = \"body\" , signature = \"signature\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; freezeMasterDataByTimestamp 마스터 데이터를 지정된 시각으로 고정 서명 검증 없이 직접 지정된 타임스탬프로 마스터 데이터를 고정합니다. 고정 타임스탬프는 반환되는 ContextStack에 기록되어 후속 요청에서 사용됩니다. FreezeMasterDataBySignedTimestamp와 달리 타임스탬프가 암호학적으로 검증되지 않으므로 신뢰할 수 있는 컨텍스트에서만 사용해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 timestamp long  고정할 시각 Result 타입 설명 newContextStack string 마스터 데이터를 고정하는 시각을 기록한 컨텍스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . FreezeMasterDataByTimestamp ( \u0026 distributor . FreezeMasterDataByTimestampRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Timestamp : pointy . Int64 ( 10000 ), } ) if err != nil { panic ( \"error occurred\" ) } newContextStack := result . NewContextStack use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\FreezeMasterDataByTimestampRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e freezeMasterDataByTimestamp ( ( new FreezeMasterDataByTimestampRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTimestamp ( 10000 ) ); $newContextStack = $result -\u003e getNewContextStack (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.FreezeMasterDataByTimestampRequest ; import io.gs2.distributor.result.FreezeMasterDataByTimestampResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { FreezeMasterDataByTimestampResult result = client . freezeMasterDataByTimestamp ( new FreezeMasterDataByTimestampRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTimestamp ( 10000L ) ); String newContextStack = result . getNewContextStack (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . FreezeMasterDataByTimestampResult \u003e asyncResult = null ; yield return client . FreezeMasterDataByTimestamp ( new Gs2 . Gs2Distributor . Request . FreezeMasterDataByTimestampRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTimestamp ( 10000L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var newContextStack = result . NewContextStack ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . freezeMasterDataByTimestamp ( new Gs2Distributor . FreezeMasterDataByTimestampRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTimestamp ( 10000 ) ); const newContextStack = result . getNewContextStack (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . freeze_master_data_by_timestamp ( distributor . FreezeMasterDataByTimestampRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_timestamp ( 10000 ) ) new_context_stack = result . new_context_stack except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.freeze_master_data_by_timestamp ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , timestamp = 10000 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; client = gs2 ( 'distributor' ) api_result_handler = client.freeze_master_data_by_timestamp_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , timestamp = 10000 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result newContextStack = result.newContextStack ; batchExecuteApi 여러 API를 일괄 실행 단일 배치 요청으로 여러 API 호출을 실행하여 필요한 라운드트립 수를 줄입니다. 한 번의 배치에는 최대 100건의 API 호출을 포함할 수 있습니다. 배치 내 각 요청은 독립적으로 처리되며, 결과는 요청과 동일한 순서로 반환됩니다. 여러 개의 독립적인 API 호출이 필요할 때 지연 시간을 줄이는 데 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 requestPayloads List  1 ~ 100 items 배치 요청 Result 타입 설명 results List 배치 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . BatchExecuteApi ( \u0026 distributor . BatchExecuteApiRequest { RequestPayloads : [] distributor . BatchRequestPayload { distributor . BatchRequestPayload { Service : pointy . String ( \"inventory\" ), MethodName : pointy . String ( \"describeSimpleItems\" ), Parameter : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"accessToken\\\": \\\"accessToken-0001\\\"}\" ), }, distributor . BatchRequestPayload { Service : pointy . String ( \"exchange\" ), MethodName : pointy . String ( \"describeRateModels\" ), Parameter : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\"}\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } results := result . Results use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\BatchExecuteApiRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e batchExecuteApi ( ( new BatchExecuteApiRequest ()) -\u003e withRequestPayloads ([ ( new BatchRequestPayload ()) -\u003e withService ( \"inventory\" ) -\u003e withMethodName ( \"describeSimpleItems\" ) -\u003e withParameter ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" accessToken \\\" : \\\" accessToken-0001 \\\" }\" ), ( new BatchRequestPayload ()) -\u003e withService ( \"exchange\" ) -\u003e withMethodName ( \"describeRateModels\" ) -\u003e withParameter ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" }\" ), ]) ); $results = $result -\u003e getResults (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.BatchExecuteApiRequest ; import io.gs2.distributor.result.BatchExecuteApiResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { BatchExecuteApiResult result = client . batchExecuteApi ( new BatchExecuteApiRequest () . withRequestPayloads ( Arrays . asList ( new BatchRequestPayload () . withService ( \"inventory\" ) . withMethodName ( \"describeSimpleItems\" ) . withParameter ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"accessToken\\\": \\\"accessToken-0001\\\"}\" ), new BatchRequestPayload () . withService ( \"exchange\" ) . withMethodName ( \"describeRateModels\" ) . withParameter ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\"}\" ) )) ); List BatchResultPayload \u003e results = result . getResults (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . BatchExecuteApiResult \u003e asyncResult = null ; yield return client . BatchExecuteApi ( new Gs2 . Gs2Distributor . Request . BatchExecuteApiRequest () . WithRequestPayloads ( new Gs2 . Gs2Distributor . Model . BatchRequestPayload [] { new Gs2 . Gs2Distributor . Model . BatchRequestPayload () . WithService ( \"inventory\" ) . WithMethodName ( \"describeSimpleItems\" ) . WithParameter ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"accessToken\\\": \\\"accessToken-0001\\\"}\" ), new Gs2 . Gs2Distributor . Model . BatchRequestPayload () . WithService ( \"exchange\" ) . WithMethodName ( \"describeRateModels\" ) . WithParameter ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\"}\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var results = result . Results ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . batchExecuteApi ( new Gs2Distributor . BatchExecuteApiRequest () . withRequestPayloads ([ new Gs2Distributor . model . BatchRequestPayload () . withService ( \"inventory\" ) . withMethodName ( \"describeSimpleItems\" ) . withParameter ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"accessToken\\\": \\\"accessToken-0001\\\"}\" ), new Gs2Distributor . model . BatchRequestPayload () . withService ( \"exchange\" ) . withMethodName ( \"describeRateModels\" ) . withParameter ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\"}\" ), ]) ); const results = result . getResults (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . batch_execute_api ( distributor . BatchExecuteApiRequest () . with_request_payloads ([ distributor . BatchRequestPayload () . with_service ( 'inventory' ) . with_method_name ( 'describeSimpleItems' ) . with_parameter ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"inventory-0001\", \"accessToken\": \"accessToken-0001\"}' ), distributor . BatchRequestPayload () . with_service ( 'exchange' ) . with_method_name ( 'describeRateModels' ) . with_parameter ( '{\"namespaceName\": \"namespace-0001\"}' ), ]) ) results = result . results except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.batch_execute_api ({ requestPayloads = { { service = \"inventory\" , method_name = \"describeSimpleItems\" , parameter = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" accessToken \\\" : \\\" accessToken-0001 \\\" }\" , }, { service = \"exchange\" , method_name = \"describeRateModels\" , parameter = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" }\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result results = result.results ; client = gs2 ( 'distributor' ) api_result_handler = client.batch_execute_api_async ({ requestPayloads = { { service = \"inventory\" , method_name = \"describeSimpleItems\" , parameter = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" accessToken \\\" : \\\" accessToken-0001 \\\" }\" , }, { service = \"exchange\" , method_name = \"describeRateModels\" , parameter = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" }\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result results = result.results ; ifExpressionByUserId 조건을 검증하고 소비 액션의 내용을 전환 검증 액션을 조건으로 평가하고, 결과에 따라 trueActions 또는 falseActions의 소비 액션 목록을 실행합니다. 이를 통해 트랜잭션 내에서 조건 분기가 가능해지며, 검증 결과에 따라 서로 다른 소비 액션을 실행할 수 있습니다. multiplyValueSpecifyingQuantity가 활성화된 경우, 검증에 사용되는 값도 지정된 수량만큼 곱해집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID condition VerifyAction  조건 trueActions List 0 ~ 10 items 조건이 참일 때 실행되는 소비 액션 목록 falseActions List 0 ~ 10 items 조건이 거짓일 때 실행되는 소비 액션 목록 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item TransactionResult 트랜잭션 실행 결과 expressionResult bool? 조건 평가 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . IfExpressionByUserId ( \u0026 distributor . IfExpressionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Condition : \u0026 distributor . VerifyAction { Action : pointy . String ( \"Gs2Inventory:VerifyItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), }, TrueActions : [] distributor . ConsumeAction { distributor . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"consumeCount\\\": 1}\" ), }, }, FalseActions : [] distributor . ConsumeAction { distributor . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeSimpleItemsByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"consumeCounts\\\": [{\\\"itemName\\\": \\\"item-0001\\\", \\\"count\\\": 1}]}\" ), }, }, MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item expressionResult := result . ExpressionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\IfExpressionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e ifExpressionByUserId ( ( new IfExpressionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCondition (( new VerifyAction ()) -\u003e withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" ) ) -\u003e withTrueActions ([ ( new ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" consumeCount \\\" : 1}\" ), ]) -\u003e withFalseActions ([ ( new ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeSimpleItemsByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" consumeCounts \\\" : [{ \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" count \\\" : 1}]}\" ), ]) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $expressionResult = $result -\u003e getExpressionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.IfExpressionByUserIdRequest ; import io.gs2.distributor.result.IfExpressionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { IfExpressionByUserIdResult result = client . ifExpressionByUserId ( new IfExpressionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCondition ( new VerifyAction () . withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ) ) . withTrueActions ( Arrays . asList ( new ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"consumeCount\\\": 1}\" ) )) . withFalseActions ( Arrays . asList ( new ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeSimpleItemsByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"consumeCounts\\\": [{\\\"itemName\\\": \\\"item-0001\\\", \\\"count\\\": 1}]}\" ) )) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); TransactionResult item = result . getItem (); boolean expressionResult = result . getExpressionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . IfExpressionByUserIdResult \u003e asyncResult = null ; yield return client . IfExpressionByUserId ( new Gs2 . Gs2Distributor . Request . IfExpressionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCondition ( new Gs2 . Core . Model . VerifyAction () . WithAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ) ) . WithTrueActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"consumeCount\\\": 1}\" ), }) . WithFalseActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeSimpleItemsByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"consumeCounts\\\": [{\\\"itemName\\\": \\\"item-0001\\\", \\\"count\\\": 1}]}\" ), }) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var expressionResult = result . ExpressionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . ifExpressionByUserId ( new Gs2Distributor . IfExpressionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCondition ( new Gs2Distributor . model . VerifyAction () . withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ) ) . withTrueActions ([ new Gs2Distributor . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"consumeCount\\\": 1}\" ), ]) . withFalseActions ([ new Gs2Distributor . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeSimpleItemsByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"consumeCounts\\\": [{\\\"itemName\\\": \\\"item-0001\\\", \\\"count\\\": 1}]}\" ), ]) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const expressionResult = result . getExpressionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . if_expression_by_user_id ( distributor . IfExpressionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_condition ( distributor . VerifyAction () . with_action ( 'Gs2Inventory:VerifyItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"userId\": \"user-0001\", \"inventoryName\": \"inventory-0001\", \"itemName\": \"item-0001\", \"verifyType\": \"greaterEqual\", \"count\": 1}' ) ) . with_true_actions ([ distributor . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"userId\": \"user-0001\", \"inventoryName\": \"inventory-0001\", \"itemName\": \"item-0001\", \"consumeCount\": 1}' ), ]) . with_false_actions ([ distributor . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeSimpleItemsByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"userId\": \"user-0001\", \"inventoryName\": \"inventory-0001\", \"consumeCounts\": [{\"itemName\": \"item-0001\", \"count\": 1}]}' ), ]) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item expression_result = result . expression_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.if_expression_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , condition = { action = \"Gs2Inventory:VerifyItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , }, trueActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" consumeCount \\\" : 1}\" , } }, falseActions = { { action = \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" consumeCounts \\\" : [{ \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" count \\\" : 1}]}\" , } }, multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; expressionResult = result.expressionResult ; client = gs2 ( 'distributor' ) api_result_handler = client.if_expression_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , condition = { action = \"Gs2Inventory:VerifyItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , }, trueActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" consumeCount \\\" : 1}\" , } }, falseActions = { { action = \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" consumeCounts \\\" : [{ \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" count \\\" : 1}]}\" , } }, multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; expressionResult = result.expressionResult ; andExpressionByUserId 여러 검증 액션을 실행하여 모두 참인지 판정 여러 검증 액션을 실행하고, 모두 참으로 평가된 경우에만 성공합니다(AND 논리). 검증 액션 중 하나라도 실패하면 전체 표현식이 실패합니다. 트랜잭션 실행 전에 모두 충족해야 하는 여러 전제 조건을 조합할 때 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID actions List 0 ~ 10 items 검증 액션 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . AndExpressionByUserId ( \u0026 distributor . AndExpressionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Actions : [] distributor . VerifyAction { distributor . VerifyAction { Action : pointy . String ( \"Gs2Inventory:VerifyItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), }, distributor . VerifyAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\AndExpressionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e andExpressionByUserId ( ( new AndExpressionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withActions ([ ( new VerifyAction ()) -\u003e withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" ), ( new VerifyAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" ), ]) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.AndExpressionByUserIdRequest ; import io.gs2.distributor.result.AndExpressionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { AndExpressionByUserIdResult result = client . andExpressionByUserId ( new AndExpressionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withActions ( Arrays . asList ( new VerifyAction () . withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), new VerifyAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ) )) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . AndExpressionByUserIdResult \u003e asyncResult = null ; yield return client . AndExpressionByUserId ( new Gs2 . Gs2Distributor . Request . AndExpressionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithActions ( new Gs2 . Core . Model . VerifyAction [] { new Gs2 . Core . Model . VerifyAction () . WithAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), new Gs2 . Core . Model . VerifyAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . andExpressionByUserId ( new Gs2Distributor . AndExpressionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withActions ([ new Gs2Distributor . model . VerifyAction () . withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), new Gs2Distributor . model . VerifyAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), ]) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . and_expression_by_user_id ( distributor . AndExpressionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_actions ([ distributor . VerifyAction () . with_action ( 'Gs2Inventory:VerifyItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"userId\": \"user-0001\", \"inventoryName\": \"inventory-0001\", \"itemName\": \"item-0001\", \"verifyType\": \"greaterEqual\", \"count\": 1}' ), distributor . VerifyAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"userId\": \"user-0001\", \"inventoryName\": \"inventory-0001\", \"itemName\": \"item-0002\", \"verifyType\": \"greaterEqual\", \"count\": 1}' ), ]) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.and_expression_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , actions = { { action = \"Gs2Inventory:VerifyItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , }, { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'distributor' ) api_result_handler = client.and_expression_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , actions = { { action = \"Gs2Inventory:VerifyItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , }, { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result orExpressionByUserId 여러 검증 액션을 실행하여 하나라도 참인지 판정 여러 검증 액션을 실행하고, 그중 하나라도 참으로 평가되면 성공합니다(OR 논리). 모든 검증 액션이 실패한 경우에만 표현식이 실패합니다. 그중 하나만 충족해도 되는 대체 조건을 정의할 때 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID actions List 0 ~ 10 items 검증 액션 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . OrExpressionByUserId ( \u0026 distributor . OrExpressionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Actions : [] distributor . VerifyAction { distributor . VerifyAction { Action : pointy . String ( \"Gs2Inventory:VerifyItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), }, distributor . VerifyAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\OrExpressionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e orExpressionByUserId ( ( new OrExpressionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withActions ([ ( new VerifyAction ()) -\u003e withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" ), ( new VerifyAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" ), ]) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.OrExpressionByUserIdRequest ; import io.gs2.distributor.result.OrExpressionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { OrExpressionByUserIdResult result = client . orExpressionByUserId ( new OrExpressionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withActions ( Arrays . asList ( new VerifyAction () . withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), new VerifyAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ) )) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . OrExpressionByUserIdResult \u003e asyncResult = null ; yield return client . OrExpressionByUserId ( new Gs2 . Gs2Distributor . Request . OrExpressionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithActions ( new Gs2 . Core . Model . VerifyAction [] { new Gs2 . Core . Model . VerifyAction () . WithAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), new Gs2 . Core . Model . VerifyAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . orExpressionByUserId ( new Gs2Distributor . OrExpressionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withActions ([ new Gs2Distributor . model . VerifyAction () . withAction ( \"Gs2Inventory:VerifyItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), new Gs2Distributor . model . VerifyAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"inventoryName\\\": \\\"inventory-0001\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"verifyType\\\": \\\"greaterEqual\\\", \\\"count\\\": 1}\" ), ]) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . or_expression_by_user_id ( distributor . OrExpressionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_actions ([ distributor . VerifyAction () . with_action ( 'Gs2Inventory:VerifyItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"userId\": \"user-0001\", \"inventoryName\": \"inventory-0001\", \"itemName\": \"item-0001\", \"verifyType\": \"greaterEqual\", \"count\": 1}' ), distributor . VerifyAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"userId\": \"user-0001\", \"inventoryName\": \"inventory-0001\", \"itemName\": \"item-0002\", \"verifyType\": \"greaterEqual\", \"count\": 1}' ), ]) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.or_expression_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , actions = { { action = \"Gs2Inventory:VerifyItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , }, { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'distributor' ) api_result_handler = client.or_expression_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , actions = { { action = \"Gs2Inventory:VerifyItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , }, { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" inventoryName \\\" : \\\" inventory-0001 \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" verifyType \\\" : \\\" greaterEqual \\\" , \\\" count \\\" : 1}\" , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result getStampSheetResult 트랜잭션의 실행 결과 가져오기 현재 로그인한 사용자의 특정 트랜잭션 실행 결과를 가져옵니다. 결과에는 트랜잭션의 각 단계(검증, 소비, 입수)에 대한 상태 코드와 응답 내용이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 transactionId string  36 ~ 36자 트랜잭션 ID 이 트랜잭션을 고유하게 식별하는 UUID입니다. 트랜잭션과 그 실행 결과, 그리고 연쇄되는 후속 트랜잭션의 연결에 사용됩니다. Result 타입 설명 item StampSheetResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetStampSheetResult ( \u0026 distributor . GetStampSheetResultRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TransactionId : pointy . String ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetStampSheetResultRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getStampSheetResult ( ( new GetStampSheetResultRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetStampSheetResultRequest ; import io.gs2.distributor.result.GetStampSheetResultResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetStampSheetResultResult result = client . getStampSheetResult ( new GetStampSheetResultRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) ); StampSheetResult item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetStampSheetResultResult \u003e asyncResult = null ; yield return client . GetStampSheetResult ( new Gs2 . Gs2Distributor . Request . GetStampSheetResultRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getStampSheetResult ( new Gs2Distributor . GetStampSheetResultRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_stamp_sheet_result ( distributor . GetStampSheetResultRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_transaction_id ( 'cc1985c3-54f0-4fc3-b295-dc30214284ec' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_stamp_sheet_result ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , transactionId = \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_stamp_sheet_result_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , transactionId = \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStampSheetResultByUserId 사용자 ID를 지정하여 트랜잭션의 실행 결과 가져오기 지정된 사용자의 특정 트랜잭션 실행 결과를 가져옵니다. 결과에는 트랜잭션의 각 단계(검증, 소비, 입수)에 대한 상태 코드와 응답 내용이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID transactionId string  36 ~ 36자 트랜잭션 ID 이 트랜잭션을 고유하게 식별하는 UUID입니다. 트랜잭션과 그 실행 결과, 그리고 연쇄되는 후속 트랜잭션의 연결에 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item StampSheetResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetStampSheetResultByUserId ( \u0026 distributor . GetStampSheetResultByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TransactionId : pointy . String ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetStampSheetResultByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getStampSheetResultByUserId ( ( new GetStampSheetResultByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetStampSheetResultByUserIdRequest ; import io.gs2.distributor.result.GetStampSheetResultByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetStampSheetResultByUserIdResult result = client . getStampSheetResultByUserId ( new GetStampSheetResultByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) . withTimeOffsetToken ( null ) ); StampSheetResult item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetStampSheetResultByUserIdResult \u003e asyncResult = null ; yield return client . GetStampSheetResultByUserId ( new Gs2 . Gs2Distributor . Request . GetStampSheetResultByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getStampSheetResultByUserId ( new Gs2Distributor . GetStampSheetResultByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_stamp_sheet_result_by_user_id ( distributor . GetStampSheetResultByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_transaction_id ( 'cc1985c3-54f0-4fc3-b295-dc30214284ec' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_stamp_sheet_result_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , transactionId = \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_stamp_sheet_result_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , transactionId = \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; runTransaction 트랜잭션 실행 검증 액션, 소비 액션, 획득 액션으로 구성된 트랜잭션을 실행합니다. 트랜잭션은 검증 -\u003e 소비 -\u003e 획득 순서로 처리됩니다. 각 단계의 상태 코드와 응답 내용을 포함한 실행 결과가 기록되며, 이후에 조회할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID transaction string  ~ 5242880자 트랜잭션 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . RunTransaction ( \u0026 distributor . RunTransactionRequest { OwnerId : nil , NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Transaction : pointy . String ( \"transaction...\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\RunTransactionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e runTransaction ( ( new RunTransactionRequest ()) -\u003e withOwnerId ( null ) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTransaction ( \"transaction...\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.RunTransactionRequest ; import io.gs2.distributor.result.RunTransactionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { RunTransactionResult result = client . runTransaction ( new RunTransactionRequest () . withOwnerId ( null ) . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTransaction ( \"transaction...\" ) . withTimeOffsetToken ( null ) ); TransactionResult item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . RunTransactionResult \u003e asyncResult = null ; yield return client . RunTransaction ( new Gs2 . Gs2Distributor . Request . RunTransactionRequest () . WithOwnerId ( null ) . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTransaction ( \"transaction...\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . runTransaction ( new Gs2Distributor . RunTransactionRequest () . withOwnerId ( null ) . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTransaction ( \"transaction...\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . run_transaction ( distributor . RunTransactionRequest () . with_owner_id ( None ) . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_transaction ( 'transaction...' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.run_transaction ({ ownerId = nil , namespaceName = \"namespace-0001\" , userId = \"user-0001\" , transaction = \"transaction...\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.run_transaction_async ({ ownerId = nil , namespaceName = \"namespace-0001\" , userId = \"user-0001\" , transaction = \"transaction...\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getTransactionResult 트랜잭션의 실행 결과 가져오기 현재 로그인한 사용자의 특정 트랜잭션 실행 결과를 가져옵니다. 결과에는 트랜잭션의 각 단계(검증, 소비, 입수)에 대한 상태 코드와 응답 내용이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 transactionId string  36 ~ 36자 트랜잭션 ID 이 분산 트랜잭션을 고유하게 식별하는 UUID입니다. 실행 결과 조회 및 원래 API 요청과의 연결에 사용됩니다. Result 타입 설명 item TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetTransactionResult ( \u0026 distributor . GetTransactionResultRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TransactionId : pointy . String ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetTransactionResultRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getTransactionResult ( ( new GetTransactionResultRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetTransactionResultRequest ; import io.gs2.distributor.result.GetTransactionResultResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetTransactionResultResult result = client . getTransactionResult ( new GetTransactionResultRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) ); TransactionResult item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetTransactionResultResult \u003e asyncResult = null ; yield return client . GetTransactionResult ( new Gs2 . Gs2Distributor . Request . GetTransactionResultRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getTransactionResult ( new Gs2Distributor . GetTransactionResultRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_transaction_result ( distributor . GetTransactionResultRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_transaction_id ( 'cc1985c3-54f0-4fc3-b295-dc30214284ec' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_transaction_result ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , transactionId = \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_transaction_result_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , transactionId = \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getTransactionResultByUserId 사용자 ID를 지정하여 트랜잭션의 실행 결과 가져오기 지정된 사용자의 특정 트랜잭션 실행 결과를 가져옵니다. 결과에는 트랜잭션의 각 단계(검증, 소비, 입수)에 대한 상태 코드와 응답 내용이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID transactionId string  36 ~ 36자 트랜잭션 ID 이 분산 트랜잭션을 고유하게 식별하는 UUID입니다. 실행 결과 조회 및 원래 API 요청과의 연결에 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetTransactionResultByUserId ( \u0026 distributor . GetTransactionResultByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TransactionId : pointy . String ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetTransactionResultByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getTransactionResultByUserId ( ( new GetTransactionResultByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetTransactionResultByUserIdRequest ; import io.gs2.distributor.result.GetTransactionResultByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetTransactionResultByUserIdResult result = client . getTransactionResultByUserId ( new GetTransactionResultByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) . withTimeOffsetToken ( null ) ); TransactionResult item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetTransactionResultByUserIdResult \u003e asyncResult = null ; yield return client . GetTransactionResultByUserId ( new Gs2 . Gs2Distributor . Request . GetTransactionResultByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getTransactionResultByUserId ( new Gs2Distributor . GetTransactionResultByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_transaction_result_by_user_id ( distributor . GetTransactionResultByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_transaction_id ( 'cc1985c3-54f0-4fc3-b295-dc30214284ec' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_transaction_result_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , transactionId = \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_transaction_result_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , transactionId = \"cc1985c3-54f0-4fc3-b295-dc30214284ec\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeDistributorModels 배포 모델 목록 취득 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 모든 배포 모델을 취득합니다. 배포 모델은 리소스 배포 규칙을 정의하며, 오버플로 시 전달 대상이 되는 인박스 네임스페이스와 대상 서비스 액션의 화이트리스트를 포함합니다. 현재 마스터 데이터를 통해 활성화된 모델만 반환되며, 편집 가능한 마스터 데이터는 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 배포 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . DescribeDistributorModels ( \u0026 distributor . DescribeDistributorModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\DescribeDistributorModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e describeDistributorModels ( ( new DescribeDistributorModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.DescribeDistributorModelsRequest ; import io.gs2.distributor.result.DescribeDistributorModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { DescribeDistributorModelsResult result = client . describeDistributorModels ( new DescribeDistributorModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List DistributorModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . DescribeDistributorModelsResult \u003e asyncResult = null ; yield return client . DescribeDistributorModels ( new Gs2 . Gs2Distributor . Request . DescribeDistributorModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . describeDistributorModels ( new Gs2Distributor . DescribeDistributorModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . describe_distributor_models ( distributor . DescribeDistributorModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.describe_distributor_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'distributor' ) api_result_handler = client.describe_distributor_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getDistributorModel 배포 모델 취득 이름을 지정하여 특정 활성 배포 모델의 상세 정보를 취득합니다. 반환되는 정보에는 모델의 이름, 메타데이터, 오버플로 처리용 인박스 네임스페이스, 대상 서비스 액션의 화이트리스트가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. distributorName string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item DistributorModel 배포 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetDistributorModel ( \u0026 distributor . GetDistributorModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DistributorName : pointy . String ( \"distributor-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetDistributorModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getDistributorModel ( ( new GetDistributorModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDistributorName ( \"distributor-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetDistributorModelRequest ; import io.gs2.distributor.result.GetDistributorModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetDistributorModelResult result = client . getDistributorModel ( new GetDistributorModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-model-0001\" ) ); DistributorModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetDistributorModelResult \u003e asyncResult = null ; yield return client . GetDistributorModel ( new Gs2 . Gs2Distributor . Request . GetDistributorModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDistributorName ( \"distributor-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getDistributorModel ( new Gs2Distributor . GetDistributorModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_distributor_model ( distributor . GetDistributorModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_distributor_name ( 'distributor-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_distributor_model ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_distributor_model_async ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 배포 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 배포 모델 마스터 데이터를 활성화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 가져오기에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentDistributorMaster 활성화 가능한 배포 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 distributor . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.ExportMasterRequest ; import io.gs2.distributor.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentDistributorMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Distributor . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Distributor . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . export_master ( distributor . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentDistributorMaster 현재 활성화된 배포 모델의 마스터 데이터 가져오기 지정된 네임스페이스에서 현재 활성화(공개)된 배포 모델의 마스터 데이터를 가져옵니다. 이는 편집 가능한 마스터 데이터와 달리, 실제로 프로덕션에서 사용되고 있는 구성을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentDistributorMaster 현재 활성화된 배포 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetCurrentDistributorMaster ( \u0026 distributor . GetCurrentDistributorMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetCurrentDistributorMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getCurrentDistributorMaster ( ( new GetCurrentDistributorMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetCurrentDistributorMasterRequest ; import io.gs2.distributor.result.GetCurrentDistributorMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetCurrentDistributorMasterResult result = client . getCurrentDistributorMaster ( new GetCurrentDistributorMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentDistributorMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetCurrentDistributorMasterResult \u003e asyncResult = null ; yield return client . GetCurrentDistributorMaster ( new Gs2 . Gs2Distributor . Request . GetCurrentDistributorMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getCurrentDistributorMaster ( new Gs2Distributor . GetCurrentDistributorMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_current_distributor_master ( distributor . GetCurrentDistributorMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_current_distributor_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_current_distributor_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentDistributorMaster 현재 활성화된 배포 모델의 마스터 데이터 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 업데이트를 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 가져옵니다. 가져온 URL에 마스터 데이터를 업로드합니다. 업로드로 가져온 토큰을 전달하여 UpdateCurrentDistributorMaster를 실행하고 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentDistributorMaster ( \u0026 distributor . PreUpdateCurrentDistributorMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\PreUpdateCurrentDistributorMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentDistributorMaster ( ( new PreUpdateCurrentDistributorMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.PreUpdateCurrentDistributorMasterRequest ; import io.gs2.distributor.result.PreUpdateCurrentDistributorMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { PreUpdateCurrentDistributorMasterResult result = client . preUpdateCurrentDistributorMaster ( new PreUpdateCurrentDistributorMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . PreUpdateCurrentDistributorMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentDistributorMaster ( new Gs2 . Gs2Distributor . Request . PreUpdateCurrentDistributorMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . preUpdateCurrentDistributorMaster ( new Gs2Distributor . PreUpdateCurrentDistributorMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . pre_update_current_distributor_master ( distributor . PreUpdateCurrentDistributorMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.pre_update_current_distributor_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'distributor' ) api_result_handler = client.pre_update_current_distributor_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentDistributorMaster 현재 활성화된 배포 모델의 마스터 데이터 업데이트 지정된 네임스페이스의 배포 모델 마스터 데이터를 업데이트하고 활성화(공개)합니다. 인라인 마스터 데이터용 ‘direct’ 모드와 사전에 업로드된 마스터 데이터용 ‘preUpload’ 모드, 두 가지 모드를 지원합니다. 1MB를 초과하는 마스터 데이터의 경우 3단계 업데이트 흐름(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))을 사용하세요. 업로드된 마스터 데이터는 적용 전에 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentDistributorMaster 업데이트된 현재 활성화된 배포 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentDistributorMaster ( \u0026 distributor . UpdateCurrentDistributorMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-03-01\\\",\\n \\\"distributorModels\\\": [\\n {\\n \\\"name\\\": \\\"basic\\\",\\n \\\"metadata\\\": \\\"BASIC\\\",\\n \\\"inboxNamespaceId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"inboxNamespaceId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\\\",\\n \\\"whiteListTargetIds\\\": [\\n \\\"test\\\"\\n ]\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\UpdateCurrentDistributorMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e updateCurrentDistributorMaster ( ( new UpdateCurrentDistributorMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-03-01 \\\" , \\n \\\" distributorModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" basic \\\" , \\n \\\" metadata \\\" : \\\" BASIC \\\" , \\n \\\" inboxNamespaceId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" inboxNamespaceId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001 \\\" , \\n \\\" whiteListTargetIds \\\" : [ \\n \\\" test \\\"\\n ] \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.UpdateCurrentDistributorMasterRequest ; import io.gs2.distributor.result.UpdateCurrentDistributorMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { UpdateCurrentDistributorMasterResult result = client . updateCurrentDistributorMaster ( new UpdateCurrentDistributorMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-03-01\\\",\\n \\\"distributorModels\\\": [\\n {\\n \\\"name\\\": \\\"basic\\\",\\n \\\"metadata\\\": \\\"BASIC\\\",\\n \\\"inboxNamespaceId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"inboxNamespaceId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\\\",\\n \\\"whiteListTargetIds\\\": [\\n \\\"test\\\"\\n ]\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentDistributorMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . UpdateCurrentDistributorMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentDistributorMaster ( new Gs2 . Gs2Distributor . Request . UpdateCurrentDistributorMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-03-01\\\",\\n \\\"distributorModels\\\": [\\n {\\n \\\"name\\\": \\\"basic\\\",\\n \\\"metadata\\\": \\\"BASIC\\\",\\n \\\"inboxNamespaceId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"inboxNamespaceId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\\\",\\n \\\"whiteListTargetIds\\\": [\\n \\\"test\\\"\\n ]\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . updateCurrentDistributorMaster ( new Gs2Distributor . UpdateCurrentDistributorMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-03-01\\\",\\n \\\"distributorModels\\\": [\\n {\\n \\\"name\\\": \\\"basic\\\",\\n \\\"metadata\\\": \\\"BASIC\\\",\\n \\\"inboxNamespaceId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"inboxNamespaceId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\\\",\\n \\\"whiteListTargetIds\\\": [\\n \\\"test\\\"\\n ]\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . update_current_distributor_master ( distributor . UpdateCurrentDistributorMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-03-01\", \\n \"distributorModels\": [ \\n { \\n \"name\": \"basic\", \\n \"metadata\": \"BASIC\", \\n \"inboxNamespaceId\": \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" \\n }, \\n { \\n \"name\": \"special\", \\n \"metadata\": \"SPECIAL\", \\n \"inboxNamespaceId\": \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\", \\n \"whiteListTargetIds\": [ \\n \"test\" \\n ] \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.update_current_distributor_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-03-01 \\\" , \\n \\\" distributorModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" basic \\\" , \\n \\\" metadata \\\" : \\\" BASIC \\\" , \\n \\\" inboxNamespaceId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" inboxNamespaceId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001 \\\" , \\n \\\" whiteListTargetIds \\\" : [ \\n \\\" test \\\"\\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.update_current_distributor_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-03-01 \\\" , \\n \\\" distributorModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" basic \\\" , \\n \\\" metadata \\\" : \\\" BASIC \\\" , \\n \\\" inboxNamespaceId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" inboxNamespaceId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001 \\\" , \\n \\\" whiteListTargetIds \\\" : [ \\n \\\" test \\\"\\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentDistributorMasterFromGitHub 현재 활성화된 배포 모델의 마스터 데이터를 GitHub에서 업데이트 GitHub 리포지토리에서 마스터 데이터를 직접 가져와 업데이트하고 활성화(공개)합니다. 체크아웃 설정에는 사용할 리포지토리, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고 직접 배포하고자 할 때 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentDistributorMaster 업데이트된 현재 활성화된 배포 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentDistributorMasterFromGitHub ( \u0026 distributor . UpdateCurrentDistributorMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 distributor . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\UpdateCurrentDistributorMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e updateCurrentDistributorMasterFromGitHub ( ( new UpdateCurrentDistributorMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.UpdateCurrentDistributorMasterFromGitHubRequest ; import io.gs2.distributor.result.UpdateCurrentDistributorMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { UpdateCurrentDistributorMasterFromGitHubResult result = client . updateCurrentDistributorMasterFromGitHub ( new UpdateCurrentDistributorMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentDistributorMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . UpdateCurrentDistributorMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentDistributorMasterFromGitHub ( new Gs2 . Gs2Distributor . Request . UpdateCurrentDistributorMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Distributor . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . updateCurrentDistributorMasterFromGitHub ( new Gs2Distributor . UpdateCurrentDistributorMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Distributor . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . update_current_distributor_master_from_git_hub ( distributor . UpdateCurrentDistributorMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( distributor . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.update_current_distributor_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.update_current_distributor_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeDistributorModelMasters 배포 모델 마스터 목록 취득 이름 접두사 필터링을 사용하여 편집 가능한 배포 모델 마스터의 페이지네이션된 목록을 취득합니다. 배포 모델 마스터는 리소스 배포 규칙을 위한 편집 가능한 정의입니다. 마스터에 대한 변경 사항은 CurrentDistributorMaster API를 통해 마스터 데이터가 활성화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 배포 모델 마스터 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 배포 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . DescribeDistributorModelMasters ( \u0026 distributor . DescribeDistributorModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\DescribeDistributorModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e describeDistributorModelMasters ( ( new DescribeDistributorModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.DescribeDistributorModelMastersRequest ; import io.gs2.distributor.result.DescribeDistributorModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { DescribeDistributorModelMastersResult result = client . describeDistributorModelMasters ( new DescribeDistributorModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List DistributorModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . DescribeDistributorModelMastersResult \u003e asyncResult = null ; yield return client . DescribeDistributorModelMasters ( new Gs2 . Gs2Distributor . Request . DescribeDistributorModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . describeDistributorModelMasters ( new Gs2Distributor . DescribeDistributorModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . describe_distributor_model_masters ( distributor . DescribeDistributorModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.describe_distributor_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'distributor' ) api_result_handler = client.describe_distributor_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createDistributorModelMaster 배포 모델 마스터 신규 작성 이름, 설명, 메타데이터, 오버플로 처리용 인박스 네임스페이스, 대상 서비스 액션의 화이트리스트를 지정하여 새로운 편집 가능한 배포 모델 마스터 정의를 작성합니다. 인박스 네임스페이스는 사용자의 보유물이 용량을 초과했을 때 리소스가 전달되는 대상을 지정합니다. 화이트리스트는 이 모델을 통해 배포가 허용되는 서비스 액션을 제한합니다. 변경 사항은 CurrentDistributorMaster API를 통해 마스터 데이터가 활성화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. inboxNamespaceId string ~ 1024자 넘친 리소스를 전송할 GS2-Inbox 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 리소스 입수가 플레이어의 소지 한도를 초과한 경우, 넘친 리소스는 지정된 GS2-Inbox 네임스페이스에 메시지로 전송됩니다. 플레이어는 이후 수신함에서 리소스를 수령할 수 있습니다. whiteListTargetIds List [] 0 ~ 1000 items GS2-Distributor를 통해 처리할 수 있는 대상 리소스 GRN의 화이트리스트 이 배포 모델을 사용하여 입수 처리를 수행할 수 있는 대상 리소스의 GRN 프리픽스를 지정합니다. Result 타입 설명 item DistributorModelMaster 작성한 배포 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . CreateDistributorModelMaster ( \u0026 distributor . CreateDistributorModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"distributor-model-0001\" ), Description : nil , Metadata : nil , InboxNamespaceId : nil , WhiteListTargetIds : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\CreateDistributorModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e createDistributorModelMaster ( ( new CreateDistributorModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"distributor-model-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withInboxNamespaceId ( null ) -\u003e withWhiteListTargetIds ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.CreateDistributorModelMasterRequest ; import io.gs2.distributor.result.CreateDistributorModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { CreateDistributorModelMasterResult result = client . createDistributorModelMaster ( new CreateDistributorModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"distributor-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withInboxNamespaceId ( null ) . withWhiteListTargetIds ( null ) ); DistributorModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . CreateDistributorModelMasterResult \u003e asyncResult = null ; yield return client . CreateDistributorModelMaster ( new Gs2 . Gs2Distributor . Request . CreateDistributorModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"distributor-model-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithInboxNamespaceId ( null ) . WithWhiteListTargetIds ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . createDistributorModelMaster ( new Gs2Distributor . CreateDistributorModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"distributor-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withInboxNamespaceId ( null ) . withWhiteListTargetIds ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . create_distributor_model_master ( distributor . CreateDistributorModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'distributor-model-0001' ) . with_description ( None ) . with_metadata ( None ) . with_inbox_namespace_id ( None ) . with_white_list_target_ids ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.create_distributor_model_master ({ namespaceName = \"namespace-0001\" , name = \"distributor-model-0001\" , description = nil , metadata = nil , inboxNamespaceId = nil , whiteListTargetIds = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.create_distributor_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"distributor-model-0001\" , description = nil , metadata = nil , inboxNamespaceId = nil , whiteListTargetIds = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getDistributorModelMaster 배포 모델 마스터 취득 이름을 지정하여 특정 편집 가능한 배포 모델 마스터의 상세 정보를 취득합니다. 활성화 전 마스터 정의의 열람 및 편집에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. distributorName string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item DistributorModelMaster 배포 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . GetDistributorModelMaster ( \u0026 distributor . GetDistributorModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DistributorName : pointy . String ( \"distributor-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\GetDistributorModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e getDistributorModelMaster ( ( new GetDistributorModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDistributorName ( \"distributor-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.GetDistributorModelMasterRequest ; import io.gs2.distributor.result.GetDistributorModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { GetDistributorModelMasterResult result = client . getDistributorModelMaster ( new GetDistributorModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-model-0001\" ) ); DistributorModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . GetDistributorModelMasterResult \u003e asyncResult = null ; yield return client . GetDistributorModelMaster ( new Gs2 . Gs2Distributor . Request . GetDistributorModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDistributorName ( \"distributor-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . getDistributorModelMaster ( new Gs2Distributor . GetDistributorModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . get_distributor_model_master ( distributor . GetDistributorModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_distributor_name ( 'distributor-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.get_distributor_model_master ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.get_distributor_model_master_async ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateDistributorModelMaster 배포 모델 마스터 갱신 기존 배포 모델 마스터의 설명, 메타데이터, 인박스 네임스페이스, 화이트리스트를 갱신합니다. 배포 모델 이름은 작성 후 변경할 수 없습니다. 변경 사항은 CurrentDistributorMaster API를 통해 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. distributorName string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. inboxNamespaceId string ~ 1024자 넘친 리소스를 전송할 GS2-Inbox 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 리소스 입수가 플레이어의 소지 한도를 초과한 경우, 넘친 리소스는 지정된 GS2-Inbox 네임스페이스에 메시지로 전송됩니다. 플레이어는 이후 수신함에서 리소스를 수령할 수 있습니다. whiteListTargetIds List [] 0 ~ 1000 items GS2-Distributor를 통해 처리할 수 있는 대상 리소스 GRN의 화이트리스트 이 배포 모델을 사용하여 입수 처리를 수행할 수 있는 대상 리소스의 GRN 프리픽스를 지정합니다. Result 타입 설명 item DistributorModelMaster 갱신한 배포 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . UpdateDistributorModelMaster ( \u0026 distributor . UpdateDistributorModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DistributorName : pointy . String ( \"distributor-model-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), InboxNamespaceId : pointy . String ( \"inbox-0001\" ), WhiteListTargetIds : [] * string { pointy . String ( \"grn:AAA\" ), pointy . String ( \"grn:BBB\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\UpdateDistributorModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e updateDistributorModelMaster ( ( new UpdateDistributorModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDistributorName ( \"distributor-model-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) -\u003e withInboxNamespaceId ( \"inbox-0001\" ) -\u003e withWhiteListTargetIds ([ \"grn:AAA\" , \"grn:BBB\" , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.UpdateDistributorModelMasterRequest ; import io.gs2.distributor.result.UpdateDistributorModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { UpdateDistributorModelMasterResult result = client . updateDistributorModelMaster ( new UpdateDistributorModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withInboxNamespaceId ( \"inbox-0001\" ) . withWhiteListTargetIds ( Arrays . asList ( \"grn:AAA\" , \"grn:BBB\" )) ); DistributorModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . UpdateDistributorModelMasterResult \u003e asyncResult = null ; yield return client . UpdateDistributorModelMaster ( new Gs2 . Gs2Distributor . Request . UpdateDistributorModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDistributorName ( \"distributor-model-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . WithInboxNamespaceId ( \"inbox-0001\" ) . WithWhiteListTargetIds ( new string [] { \"grn:AAA\" , \"grn:BBB\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . updateDistributorModelMaster ( new Gs2Distributor . UpdateDistributorModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withInboxNamespaceId ( \"inbox-0001\" ) . withWhiteListTargetIds ([ \"grn:AAA\" , \"grn:BBB\" , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . update_distributor_model_master ( distributor . UpdateDistributorModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_distributor_name ( 'distributor-model-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"hoge\": \"fuga\"}' ) . with_inbox_namespace_id ( 'inbox-0001' ) . with_white_list_target_ids ([ 'grn:AAA' , 'grn:BBB' , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.update_distributor_model_master ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , inboxNamespaceId = \"inbox-0001\" , whiteListTargetIds = { \"grn:AAA\" , \"grn:BBB\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.update_distributor_model_master_async ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , inboxNamespaceId = \"inbox-0001\" , whiteListTargetIds = { \"grn:AAA\" , \"grn:BBB\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteDistributorModelMaster 배포 모델 마스터 삭제 편집 가능한 배포 모델 마스터 정의를 삭제합니다. 마스터 데이터만 영향을 받으며, 현재 활성화(공개)되어 있는 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. distributorName string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item DistributorModelMaster 삭제한 배포 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/distributor\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := distributor . Gs2DistributorRestClient { Session : \u0026 session , } result , err := client . DeleteDistributorModelMaster ( \u0026 distributor . DeleteDistributorModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DistributorName : pointy . String ( \"distributor-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Distributor\\Gs2DistributorRestClient ; use Gs2\\Distributor\\Request\\DeleteDistributorModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2DistributorRestClient ( $session ); try { $result = $client -\u003e deleteDistributorModelMaster ( ( new DeleteDistributorModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDistributorName ( \"distributor-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.distributor.rest.Gs2DistributorRestClient ; import io.gs2.distributor.request.DeleteDistributorModelMasterRequest ; import io.gs2.distributor.result.DeleteDistributorModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2DistributorRestClient client = new Gs2DistributorRestClient ( session ); try { DeleteDistributorModelMasterResult result = client . deleteDistributorModelMaster ( new DeleteDistributorModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-model-0001\" ) ); DistributorModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2DistributorRestClient ( session ); AsyncResult Gs2 . Gs2Distributor . Result . DeleteDistributorModelMasterResult \u003e asyncResult = null ; yield return client . DeleteDistributorModelMaster ( new Gs2 . Gs2Distributor . Request . DeleteDistributorModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDistributorName ( \"distributor-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Distributor from '@/gs2/distributor' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Distributor . Gs2DistributorRestClient ( session ); try { const result = await client . deleteDistributorModelMaster ( new Gs2Distributor . DeleteDistributorModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withDistributorName ( \"distributor-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import distributor session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = distributor . Gs2DistributorRestClient ( session ) try : result = client . delete_distributor_model_master ( distributor . DeleteDistributorModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_distributor_name ( 'distributor-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'distributor' ) api_result = client.delete_distributor_model_master ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'distributor' ) api_result_handler = client.delete_distributor_model_master_async ({ namespaceName = \"namespace-0001\" , distributorName = \"distributor-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Distributor SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Distributor SDK API 레퍼런스","url":"/ko/api_reference/distributor/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 인챈트 파라미터 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 인챈트 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 밸런스 파라미터 및 레어리티 파라미터 조작의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 BalanceParameterStatus 밸런스 파라미터 상태 사용자가 소유한 특정 리소스에 대해 추첨된 파라미터의 실제 값을 나타냅니다. 각 상태는 밸런스 파라미터 모델과 연결되며, 추첨 처리 후 각 파라미터 슬롯에 할당된 구체적인 값을 보유합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 balanceParameterStatusId string ※ ~ 1024자 밸런스 파라미터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. parameterValues List  1 ~ 10 items 밸런스 파라미터 값 리스트 추첨 처리 후 각 파라미터 슬롯에 할당된 구체적인 값입니다. 각 엔트리는 모델에서 정의된 파라미터 슬롯에 대응하며, 할당된 실제 수치를 보유합니다. 모든 값의 합계는 모델에서 지정된 합계 값과 같아집니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 RarityParameterStatus 레어리티 파라미터의 상태 유저가 소유한 특정 리소스에 대해 추첨된 파라미터의 실제 값을 나타냅니다. 각 상태는 레어리티 파라미터 모델에 연결되며, 부여된 각 파라미터 슬롯에 대해 가중 추첨으로 선택된 구체적인 값을 보유합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rarityParameterStatusId string ※ ~ 1024자 레어리티 파라미터의 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. parameterValues List 0 ~ 10 items 레어리티 파라미터의 값 목록 부여된 각 슬롯에 대해 가중 추첨으로 선택된 구체적인 파라미터 값입니다. 엔트리 수는 부여 수 추첨으로 결정되며, 각 엔트리의 값은 값 모델 풀에서 선택됩니다. 최대 파라미터 수보다 적은 엔트리 수가 될 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 BalanceParameterModel 밸런스 파라미터 모델 밸런스 파라미터의 추첨 조건을 정의합니다. 밸런스 파라미터는 고정된 합계 값을 여러 파라미터 슬롯에 분배합니다. 예를 들어 합계 파워가 100인 무기에 대해 ATK=60, DEF=30, SPD=10과 같이 배분됩니다. 초기값 설정 방침에 따라 값의 할당 방법이 결정됩니다: average 는 균등하게 분배하고, lottery 는 합계 값을 무작위로 배분합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 balanceParameterModelId string ※ ~ 1024자 밸런스 파라미터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 밸런스 파라미터 모델 이름 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. totalValue long  0 ~ 9223372036854775805 합계값 모든 파라미터 슬롯에 분배되는 고정된 합계값입니다. 파라미터가 추첨될 때, 사용되는 배분 방식과 관계없이 개별 값의 합계는 항상 이 합계값이 됩니다. initialValueStrategy 문자열 열거형 enum {   “average”,   “lottery” } “average” 초기값 설정 방침 최초 할당 시 합계값을 파라미터 슬롯에 어떻게 분배할지를 결정합니다. average 는 합계값을 모든 파라미터에 균등하게 분배하고, lottery 는 합계값을 무작위로 분배하여 다양한 파라미터 조합을 만듭니다. 정의 설명 average 평균값 lottery 추첨 parameters List  1 ~ 10 items 밸런스 파라미터 값 모델 목록 이 밸런스 파라미터에서 사용 가능한 파라미터 슬롯을 정의합니다. 각 엔트리는 이름이 지정된 파라미터 슬롯(예: ATK, DEF, SPD)을 선택적 메타데이터와 함께 지정합니다. 합계값은 이 슬롯들에 분배됩니다. RarityParameterModel 레어리티 파라미터 모델 레어리티 파라미터의 추첨 조건을 정의합니다. 레어리티 파라미터는 가중 추첨 시스템을 사용하여 부여되는 파라미터의 수와 할당되는 구체적인 값을 모두 결정합니다. 먼저, 부여 수 모델 목록에서 가중 추첨을 통해 채울 파라미터 슬롯 수가 결정됩니다. 그런 다음, 각 슬롯의 값이 파라미터 값 모델 목록에서 가중 추첨으로 선택되어, 제어된 확률 분포에 따른 무작위 장비 속성을 제공합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rarityParameterModelId string ※ ~ 1024자 레어리티 파라미터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레어리티 파라미터 모델명 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParameterCount int  1 ~ 10 부여할 파라미터의 최대 수 리소스에 부여할 수 있는 파라미터 슬롯 수의 상한입니다. 실제로 부여되는 수는 부여 수 모델 목록에서의 가중 추첨으로 결정되지만, 이 값을 초과하지 않습니다. parameterCounts List  1 ~ 10 items 레어리티 파라미터의 부여 수 모델 목록 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨 엔트리를 정의합니다. 각 엔트리는 부여 수와 추첨 가중치를 지정합니다. 가중치가 클수록 해당 부여 수가 선택될 확률이 높아집니다. parameters List  1 ~ 1000 items 레어리티 파라미터 값 모델 목록 추첨 가능한 파라미터 값의 풀을 정의합니다. 각 엔트리는 파라미터 이름, 리소스 상세 정보, 추첨 가중치를 지정합니다. 파라미터 슬롯을 채울 때, 이 풀에서 중복 없이 가중 추첨으로 값이 선택됩니다. BalanceParameterValueModel 밸런스 파라미터 값 모델 밸런스 파라미터 내에서 사용 가능한 단일 파라미터 슬롯을 정의합니다. 각 엔트리는 추첨 처리 중 합계값의 일부를 받는 이름이 지정된 슬롯(예: ATK, DEF, SPD)을 지정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 이 파라미터 슬롯의 식별자(예: ATK, DEF, SPD)입니다. 밸런스 파라미터 모델 내에서 고유해야 합니다. 추첨된 파라미터 값을 저장·취득할 때 키로 사용됩니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. RarityParameterCountModel 레어리티 파라미터의 부여 수 모델 리소스에 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨의 단일 엔트리를 정의합니다. 각 엔트리는 파라미터 수와 추첨 가중치를 짝지어, 파라미터 수량의 확률 분포를 세밀하게 제어할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 count int  0 ~ 10 부여 수 이 엔트리가 추첨되었을 때 부여되는 파라미터 슬롯 수입니다. 예를 들어 부여 수가 3인 경우, 리소스는 값 모델 풀에서 선택된 3개의 파라미터 값을 받게 됩니다. weight int  1 ~ 2147483646 추첨 가중치 파라미터 부여 수를 결정하는 가중치 추첨에서 사용되는 상대적인 가중치입니다. 값이 클수록 이 부여 수가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 부여 수 모델 리스트 내 모든 가중치의 합으로 나눈 값입니다. RarityParameterValueModel 레어리티 파라미터 값 모델 레어리티 파라미터 값의 가중 추첨 풀 내 단일 엔트리를 정의합니다. 각 엔트리는 파라미터 이름, 게임에서 정의한 리소스 상세 정보, 그리고 풀 내 다른 엔트리에 대한 선택 확률을 결정하는 추첨 가중치를 지정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 이 추첨 엔트리의 식별자입니다. 레어리티 파라미터 모델의 값 풀 내에서 고유해야 합니다. 추첨되었을 때, 이 이름이 결과 레어리티 파라미터 값에 저장됩니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resourceName string  ~ 64자 게임에서 사용하는 파라미터 리소스 종류를 나타내는 이름(GS2의 동작에는 사용되지 않음) 이 파라미터 값에 연결된 게임에서 정의한 리소스 종류 이름(예: “fire_attack”, “ice_resist”)입니다. GS2는 자체 동작에 이 값을 사용하지 않으며, 추첨 결과에 그대로 전달되어 게임 로직에서 사용됩니다. resourceValue long  0 ~ 9223372036854775805 게임에서 사용하는 파라미터 리소스 값(GS2의 동작에는 사용되지 않음) 이 파라미터의 게임에서 정의한 수치(예: 공격력+50인 경우 50)입니다. GS2는 자체 동작에 이 값을 사용하지 않으며, 추첨 결과에 그대로 전달되어 게임 로직에서 사용됩니다. weight int  1 ~ 2147483646 추첨 가중치 파라미터 값을 선택하는 가중 추첨에서 사용되는 상대적 가중치입니다. 값이 클수록 이 엔트리가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 풀 내 모든 가중치의 합으로 나눈 값이 됩니다. BalanceParameterValue 밸런스 파라미터 값 밸런스 파라미터 상태 내의 단일 파라미터 슬롯에 할당된 실제 값을 나타냅니다. 추첨 처리 후의 슬롯 이름과 그 구체적인 수치를 보유합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 파라미터 슬롯의 이름(예: ATK, DEF, SPD)입니다. 밸런스 파라미터 값 모델에서 정의된 파라미터 슬롯에 대응합니다. value long  0 ~ 9223372036854775805 값 이 파라미터 슬롯에 할당된 수치입니다. 밸런스 파라미터가 처음 추첨될 때, 초기값 설정 방침(평균값 또는 추첨)에 따라 결정됩니다. 모든 슬롯 값의 합계는 모델에서 정의된 합계 값과 같아집니다. RarityParameterValue 레어리티 파라미터 값 레어리티 파라미터 상태 내의 단일 파라미터 슬롯에 할당된 실제 값을 나타냅니다. 슬롯 이름과, 값 모델 풀에서 가중 추첨으로 선택된 리소스 상세 정보(이름과 값)를 보유합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 값 모델 풀에서 선택된 파라미터 값의 이름입니다. 추첨된 레어리티 파라미터 값 모델 엔트리에서 정의된 이름에 대응합니다. resourceName string  ~ 64자 리소스의 이름 이 파라미터 값에 연결된 게임에서 정의한 리소스 종류 이름(예: “fire_attack”, “ice_resist”)입니다. 게임 로직에서 사용하기 위해 추첨된 레어리티 파라미터 값 모델 엔트리에서 복사됩니다. resourceValue long  0 ~ 9223372036854775805 리소스의 값 이 파라미터에 연결된 리소스의 수치입니다. 추첨된 레어리티 파라미터 값 모델 엔트리에서 복사됩니다. 게임 로직에서 파라미터의 효과(예: 공격력+50)를 적용하는 데 사용됩니다. VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 CurrentParameterMaster 현재 활성화된 파라미터 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 파라미터 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한, 게임 운영에 더 적합한 도구를 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Enchant 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 BalanceParameterModelMaster 밸런스 파라미터 모델 마스터 매니지먼트 콘솔 조작에 사용되는 밸런스 파라미터 모델의 편집 가능한 버전입니다. 밸런스 파라미터의 추첨 조건을 정의합니다. 밸런스 파라미터는 고정된 합계값을 여러 파라미터 슬롯에 분배합니다. 예를 들어, 합계 파워가 100인 무기라면 ATK=60, DEF=30, SPD=10과 같이 배분될 수 있습니다. 초기값 설정 방침에 따라 값의 할당 방법이 결정됩니다: average 는 균등하게 분배하고, lottery 는 합계값을 무작위로 배분합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 balanceParameterModelId string ※ ~ 1024자 밸런스 파라미터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 밸런스 파라미터 모델명 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. totalValue long  0 ~ 9223372036854775805 합계값 모든 파라미터 슬롯에 분배되는 고정된 합계값입니다. 파라미터가 추첨될 때, 사용되는 배분 방식과 관계없이 개별 값의 합계는 항상 이 합계값이 됩니다. initialValueStrategy 문자열 열거형 enum {   “average”,   “lottery” } “average” 초기값 설정 방침 최초 할당 시 합계값을 파라미터 슬롯에 어떻게 분배할지를 결정합니다. average 는 합계값을 모든 파라미터에 균등하게 분배하고, lottery 는 합계값을 무작위로 분배하여 다양한 파라미터 조합을 만듭니다. 정의 설명 average 평균값 lottery 추첨 parameters List  1 ~ 10 items 밸런스 파라미터 값 모델 목록 이 밸런스 파라미터에서 사용 가능한 파라미터 슬롯을 정의합니다. 각 엔트리는 이름이 지정된 파라미터 슬롯(예: ATK, DEF, SPD)을 선택적 메타데이터와 함께 지정합니다. 합계값은 이 슬롯들에 분배됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 RarityParameterModelMaster 레어리티 파라미터 모델 마스터 관리 콘솔 조작에 사용되는 레어리티 파라미터 모델의 편집 가능한 버전입니다. 가중치 추첨 시스템을 사용하여 부여되는 파라미터의 수와 할당되는 구체적인 값을 모두 결정하는 레어리티 파라미터의 추첨 조건을 정의합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rarityParameterModelId string ※ ~ 1024자 레어리티 파라미터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레어리티 파라미터 모델 이름 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParameterCount int  1 ~ 10 부여할 파라미터의 최대 수 리소스에 부여할 수 있는 파라미터 슬롯 수의 상한입니다. 실제로 부여되는 수는 부여 수 모델 목록에서의 가중 추첨으로 결정되지만, 이 값을 초과하지 않습니다. parameterCounts List  1 ~ 10 items 레어리티 파라미터의 부여 수 모델 목록 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨 엔트리를 정의합니다. 각 엔트리는 부여 수와 추첨 가중치를 지정합니다. 가중치가 클수록 해당 부여 수가 선택될 확률이 높아집니다. parameters List  1 ~ 1000 items 레어리티 파라미터 값 모델 목록 추첨 가능한 파라미터 값의 풀을 정의합니다. 각 엔트리는 파라미터 이름, 리소스 상세 정보, 추첨 가중치를 지정합니다. 파라미터 슬롯을 채울 때, 이 풀에서 중복 없이 가중 추첨으로 값이 선택됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 enchant . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeNamespacesRequest ; import io.gs2.enchant.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Enchant . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Enchant . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_namespaces ( enchant . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 인챈트 파라미터 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 인챈트 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 밸런스 파라미터 및 레어리티 파라미터 조작의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 enchant . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 enchant . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, LogSetting : \u0026 enchant . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Enchant\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withLogSetting (( new \\Gs2\\Enchant\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.CreateNamespaceRequest ; import io.gs2.enchant.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . enchant . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withLogSetting ( new io . gs2 . enchant . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Enchant . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Enchant . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithLogSetting ( new Gs2 . Gs2Enchant . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Enchant . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Enchant . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withLogSetting ( new Gs2Enchant . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . create_namespace ( enchant . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( enchant . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_log_setting ( enchant . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 enchant . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetNamespaceStatusRequest ; import io.gs2.enchant.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Enchant . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Enchant . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_namespace_status ( enchant . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'enchant' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 enchant . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetNamespaceRequest ; import io.gs2.enchant.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Enchant . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Enchant . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_namespace ( enchant . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 인챈트 파라미터 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 인챈트 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 밸런스 파라미터 및 레어리티 파라미터 조작의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 enchant . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 enchant . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, LogSetting : \u0026 enchant . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Enchant\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withLogSetting (( new \\Gs2\\Enchant\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.UpdateNamespaceRequest ; import io.gs2.enchant.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . enchant . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withLogSetting ( new io . gs2 . enchant . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Enchant . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Enchant . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithLogSetting ( new Gs2 . Gs2Enchant . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Enchant . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Enchant . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withLogSetting ( new Gs2Enchant . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . update_namespace ( enchant . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( enchant . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_log_setting ( enchant . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 enchant . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DeleteNamespaceRequest ; import io.gs2.enchant.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Enchant . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Enchant . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . delete_namespace ( enchant . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 enchant . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetServiceVersionRequest ; import io.gs2.enchant.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Enchant . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Enchant . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_service_version ( enchant . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 enchant . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DumpUserDataByUserIdRequest ; import io.gs2.enchant.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Enchant . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Enchant . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . dump_user_data_by_user_id ( enchant . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'enchant' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 enchant . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.enchant.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Enchant . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Enchant . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( enchant . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'enchant' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 enchant . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.CleanUserDataByUserIdRequest ; import io.gs2.enchant.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Enchant . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Enchant . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . clean_user_data_by_user_id ( enchant . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'enchant' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 enchant . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.enchant.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Enchant . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Enchant . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( enchant . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'enchant' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 enchant . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.enchant.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Enchant . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Enchant . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( enchant . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'enchant' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 enchant . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.ImportUserDataByUserIdRequest ; import io.gs2.enchant.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Enchant . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Enchant . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . import_user_data_by_user_id ( enchant . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'enchant' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 enchant . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.CheckImportUserDataByUserIdRequest ; import io.gs2.enchant.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Enchant . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Enchant . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( enchant . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'enchant' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeBalanceParameterStatuses 밸런스 파라미터 상태 목록 조회 현재 로그인한 사용자의 밸런스 파라미터 상태의 페이지네이션 리스트를 조회합니다. 파라미터 이름으로 필터링하여 특정 파라미터 모델의 상태만 조회할 수도 있습니다. 각 상태는 특정 프로퍼티(예: 아이템)에 할당된 현재 파라미터 값을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 parameterName string ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 밸런스 파라미터 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeBalanceParameterStatuses ( \u0026 enchant . DescribeBalanceParameterStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeBalanceParameterStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeBalanceParameterStatuses ( ( new DescribeBalanceParameterStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeBalanceParameterStatusesRequest ; import io.gs2.enchant.result.DescribeBalanceParameterStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeBalanceParameterStatusesResult result = client . describeBalanceParameterStatuses ( new DescribeBalanceParameterStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withParameterName ( \"balance-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List BalanceParameterStatus \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeBalanceParameterStatusesResult \u003e asyncResult = null ; yield return client . DescribeBalanceParameterStatuses ( new Gs2 . Gs2Enchant . Request . DescribeBalanceParameterStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithParameterName ( \"balance-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeBalanceParameterStatuses ( new Gs2Enchant . DescribeBalanceParameterStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withParameterName ( \"balance-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_balance_parameter_statuses ( enchant . DescribeBalanceParameterStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_parameter_name ( 'balance-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_balance_parameter_statuses ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , parameterName = \"balance-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_balance_parameter_statuses_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , parameterName = \"balance-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeBalanceParameterStatusesByUserId 사용자 ID를 지정하여 밸런스 파라미터 상태 목록 조회 지정된 사용자의 밸런스 파라미터 상태의 페이지네이션 리스트를 조회합니다. 파라미터 이름으로 필터링하여 특정 파라미터 모델의 상태만 조회할 수도 있습니다. 각 상태는 특정 프로퍼티(예: 아이템)에 할당된 현재 파라미터 값을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 밸런스 파라미터 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeBalanceParameterStatusesByUserId ( \u0026 enchant . DescribeBalanceParameterStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeBalanceParameterStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeBalanceParameterStatusesByUserId ( ( new DescribeBalanceParameterStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeBalanceParameterStatusesByUserIdRequest ; import io.gs2.enchant.result.DescribeBalanceParameterStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeBalanceParameterStatusesByUserIdResult result = client . describeBalanceParameterStatusesByUserId ( new DescribeBalanceParameterStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List BalanceParameterStatus \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeBalanceParameterStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeBalanceParameterStatusesByUserId ( new Gs2 . Gs2Enchant . Request . DescribeBalanceParameterStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"balance-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeBalanceParameterStatusesByUserId ( new Gs2Enchant . DescribeBalanceParameterStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_balance_parameter_statuses_by_user_id ( enchant . DescribeBalanceParameterStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'balance-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_balance_parameter_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_balance_parameter_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getBalanceParameterStatus 밸런스 파라미터 상태를 조회 현재 로그인한 사용자의 특정 프로퍼티에 대한 밸런스 파라미터의 현재 값을 조회합니다. 상태에는 파라미터가 처음 추첨되었을 때 또는 마지막으로 재추첨되었을 때 할당된 값이 포함되며, 모든 값의 합계는 모델의 합계 값과 같습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. Result 타입 설명 item BalanceParameterStatus 밸런스 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetBalanceParameterStatus ( \u0026 enchant . GetBalanceParameterStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetBalanceParameterStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getBalanceParameterStatus ( ( new GetBalanceParameterStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetBalanceParameterStatusRequest ; import io.gs2.enchant.result.GetBalanceParameterStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetBalanceParameterStatusResult result = client . getBalanceParameterStatus ( new GetBalanceParameterStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) ); BalanceParameterStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetBalanceParameterStatusResult \u003e asyncResult = null ; yield return client . GetBalanceParameterStatus ( new Gs2 . Gs2Enchant . Request . GetBalanceParameterStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithParameterName ( \"balance-0001\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getBalanceParameterStatus ( new Gs2Enchant . GetBalanceParameterStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_balance_parameter_status ( enchant . GetBalanceParameterStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_parameter_name ( 'balance-0001' ) . with_property_id ( 'property-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_balance_parameter_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_balance_parameter_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBalanceParameterStatusByUserId 사용자 ID를 지정하여 밸런스 파라미터 상태를 조회 지정된 사용자의 특정 프로퍼티에 대한 밸런스 파라미터의 현재 값을 조회합니다. 상태에는 파라미터가 처음 추첨되었을 때 또는 마지막으로 재추첨되었을 때 할당된 값이 포함되며, 모든 값의 합계는 모델의 합계 값과 같습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BalanceParameterStatus 밸런스 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetBalanceParameterStatusByUserId ( \u0026 enchant . GetBalanceParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetBalanceParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getBalanceParameterStatusByUserId ( ( new GetBalanceParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetBalanceParameterStatusByUserIdRequest ; import io.gs2.enchant.result.GetBalanceParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetBalanceParameterStatusByUserIdResult result = client . getBalanceParameterStatusByUserId ( new GetBalanceParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); BalanceParameterStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetBalanceParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetBalanceParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . GetBalanceParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"balance-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getBalanceParameterStatusByUserId ( new Gs2Enchant . GetBalanceParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_balance_parameter_status_by_user_id ( enchant . GetBalanceParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'balance-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_balance_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_balance_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteBalanceParameterStatusByUserId 밸런스 파라미터 상태를 삭제 지정된 사용자의 특정 프로퍼티에 대한 밸런스 파라미터 상태를 삭제합니다. 삭제된 파라미터 값은 영구적으로 삭제되며 복구할 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BalanceParameterStatus 삭제한 밸런스 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DeleteBalanceParameterStatusByUserId ( \u0026 enchant . DeleteBalanceParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DeleteBalanceParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e deleteBalanceParameterStatusByUserId ( ( new DeleteBalanceParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DeleteBalanceParameterStatusByUserIdRequest ; import io.gs2.enchant.result.DeleteBalanceParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DeleteBalanceParameterStatusByUserIdResult result = client . deleteBalanceParameterStatusByUserId ( new DeleteBalanceParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); BalanceParameterStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DeleteBalanceParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . DeleteBalanceParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . DeleteBalanceParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"balance-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . deleteBalanceParameterStatusByUserId ( new Gs2Enchant . DeleteBalanceParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . delete_balance_parameter_status_by_user_id ( enchant . DeleteBalanceParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'balance-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.delete_balance_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.delete_balance_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; reDrawBalanceParameterStatusByUserId 사용자 ID를 지정하여 밸런스 파라미터 재추첨 특정 프로퍼티의 밸런스 파라미터 값을 재추첨하고, 합계값을 파라미터 간에 재분배합니다. fixedParameterNames 에 파라미터 이름을 지정하면 특정 파라미터를 고정(잠금)하여 재추첨 대상에서 제외할 수 있습니다(최대 10개). 합계값 제약은 유지됩니다: 고정된 파라미터를 포함한 모든 파라미터 값의 합계는 항상 모델의 합계값과 같습니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. fixedParameterNames List [] 0 ~ 10 items 재추첨하지 않는 파라미터의 이름 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BalanceParameterStatus 업데이트한 밸런스 파라미터 상태 old BalanceParameterStatus 업데이트하기 전의 밸런스 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . ReDrawBalanceParameterStatusByUserId ( \u0026 enchant . ReDrawBalanceParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), FixedParameterNames : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\ReDrawBalanceParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e reDrawBalanceParameterStatusByUserId ( ( new ReDrawBalanceParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withFixedParameterNames ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.ReDrawBalanceParameterStatusByUserIdRequest ; import io.gs2.enchant.result.ReDrawBalanceParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { ReDrawBalanceParameterStatusByUserIdResult result = client . reDrawBalanceParameterStatusByUserId ( new ReDrawBalanceParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) . withFixedParameterNames ( null ) . withTimeOffsetToken ( null ) ); BalanceParameterStatus item = result . getItem (); BalanceParameterStatus old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . ReDrawBalanceParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . ReDrawBalanceParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . ReDrawBalanceParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"balance-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithFixedParameterNames ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . reDrawBalanceParameterStatusByUserId ( new Gs2Enchant . ReDrawBalanceParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) . withFixedParameterNames ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . re_draw_balance_parameter_status_by_user_id ( enchant . ReDrawBalanceParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'balance-0001' ) . with_property_id ( 'property-0001' ) . with_fixed_parameter_names ( None ) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.re_draw_balance_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , fixedParameterNames = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'enchant' ) api_result_handler = client.re_draw_balance_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , fixedParameterNames = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; setBalanceParameterStatusByUserId 사용자 ID를 지정하여 밸런스 파라미터에 임의의 값을 설정 통상적인 추첨/재추첨 메커니즘을 거치지 않고, 지정된 사용자의 특정 프로퍼티에 파라미터 값을 직접 설정합니다. 이는 임의의 파라미터 값을 할당할 수 있는 관리 작업입니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. parameterValues List  1 ~ 10 items 밸런스 파라미터 값 리스트 추첨 처리 후 각 파라미터 슬롯에 할당된 구체적인 값입니다. 각 엔트리는 모델에서 정의된 파라미터 슬롯에 대응하며, 할당된 실제 수치를 보유합니다. 모든 값의 합계는 모델에서 지정된 합계 값과 같아집니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BalanceParameterStatus 업데이트한 밸런스 파라미터 상태 old BalanceParameterStatus 업데이트하기 전의 밸런스 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . SetBalanceParameterStatusByUserId ( \u0026 enchant . SetBalanceParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), ParameterValues : [] enchant . BalanceParameterValue { enchant . BalanceParameterValue { Name : pointy . String ( \"parameter-0001\" ), Value : pointy . Int64 ( 100 ), }, enchant . BalanceParameterValue { Name : pointy . String ( \"parameter-0002\" ), Value : pointy . Int64 ( 200 ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\SetBalanceParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e setBalanceParameterStatusByUserId ( ( new SetBalanceParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withParameterValues ([ ( new BalanceParameterValue ()) -\u003e withName ( \"parameter-0001\" ) -\u003e withValue ( 100 ), ( new BalanceParameterValue ()) -\u003e withName ( \"parameter-0002\" ) -\u003e withValue ( 200 ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.SetBalanceParameterStatusByUserIdRequest ; import io.gs2.enchant.result.SetBalanceParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { SetBalanceParameterStatusByUserIdResult result = client . setBalanceParameterStatusByUserId ( new SetBalanceParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) . withParameterValues ( Arrays . asList ( new BalanceParameterValue () . withName ( \"parameter-0001\" ) . withValue ( 100L ), new BalanceParameterValue () . withName ( \"parameter-0002\" ) . withValue ( 200L ) )) . withTimeOffsetToken ( null ) ); BalanceParameterStatus item = result . getItem (); BalanceParameterStatus old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . SetBalanceParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . SetBalanceParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . SetBalanceParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"balance-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithParameterValues ( new Gs2 . Gs2Enchant . Model . BalanceParameterValue [] { new Gs2 . Gs2Enchant . Model . BalanceParameterValue () . WithName ( \"parameter-0001\" ) . WithValue ( 100L ), new Gs2 . Gs2Enchant . Model . BalanceParameterValue () . WithName ( \"parameter-0002\" ) . WithValue ( 200L ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . setBalanceParameterStatusByUserId ( new Gs2Enchant . SetBalanceParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"balance-0001\" ) . withPropertyId ( \"property-0001\" ) . withParameterValues ([ new Gs2Enchant . model . BalanceParameterValue () . withName ( \"parameter-0001\" ) . withValue ( 100 ), new Gs2Enchant . model . BalanceParameterValue () . withName ( \"parameter-0002\" ) . withValue ( 200 ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . set_balance_parameter_status_by_user_id ( enchant . SetBalanceParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'balance-0001' ) . with_property_id ( 'property-0001' ) . with_parameter_values ([ enchant . BalanceParameterValue () . with_name ( 'parameter-0001' ) . with_value ( 100 ), enchant . BalanceParameterValue () . with_name ( 'parameter-0002' ) . with_value ( 200 ), ]) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.set_balance_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , parameterValues = { { name = \"parameter-0001\" , value = 100 , }, { name = \"parameter-0002\" , value = 200 , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'enchant' ) api_result_handler = client.set_balance_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"balance-0001\" , propertyId = \"property-0001\" , parameterValues = { { name = \"parameter-0001\" , value = 100 , }, { name = \"parameter-0002\" , value = 200 , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; describeRarityParameterStatuses 레어리티 파라미터 상태 목록을 조회 현재 로그인한 사용자의 레어리티 파라미터 상태의 페이지네이션 목록을 조회합니다. 파라미터 이름으로 필터링하여 특정 파라미터 모델의 상태만 조회할 수도 있습니다. 각 상태는 특정 프로퍼티(예: 아이템)에 할당된 레어리티 기반 파라미터 값의 현재 세트를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 parameterName string ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 레어리티 파라미터 모델의 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeRarityParameterStatuses ( \u0026 enchant . DescribeRarityParameterStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeRarityParameterStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeRarityParameterStatuses ( ( new DescribeRarityParameterStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeRarityParameterStatusesRequest ; import io.gs2.enchant.result.DescribeRarityParameterStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeRarityParameterStatusesResult result = client . describeRarityParameterStatuses ( new DescribeRarityParameterStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List RarityParameterStatus \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeRarityParameterStatusesResult \u003e asyncResult = null ; yield return client . DescribeRarityParameterStatuses ( new Gs2 . Gs2Enchant . Request . DescribeRarityParameterStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeRarityParameterStatuses ( new Gs2Enchant . DescribeRarityParameterStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_rarity_parameter_statuses ( enchant . DescribeRarityParameterStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_rarity_parameter_statuses ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , parameterName = \"rarity-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_rarity_parameter_statuses_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , parameterName = \"rarity-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeRarityParameterStatusesByUserId 사용자 ID를 지정하여 레어리티 파라미터 상태 목록을 조회 지정된 사용자의 레어리티 파라미터 상태의 페이지네이션 목록을 조회합니다. 파라미터 이름으로 필터링하여 특정 파라미터 모델의 상태만 조회할 수도 있습니다. 각 상태는 특정 프로퍼티(예: 아이템)에 할당된 레어리티 기반 파라미터 값의 현재 세트를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 레어리티 파라미터 모델의 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeRarityParameterStatusesByUserId ( \u0026 enchant . DescribeRarityParameterStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeRarityParameterStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeRarityParameterStatusesByUserId ( ( new DescribeRarityParameterStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeRarityParameterStatusesByUserIdRequest ; import io.gs2.enchant.result.DescribeRarityParameterStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeRarityParameterStatusesByUserIdResult result = client . describeRarityParameterStatusesByUserId ( new DescribeRarityParameterStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List RarityParameterStatus \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeRarityParameterStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeRarityParameterStatusesByUserId ( new Gs2 . Gs2Enchant . Request . DescribeRarityParameterStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeRarityParameterStatusesByUserId ( new Gs2Enchant . DescribeRarityParameterStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_rarity_parameter_statuses_by_user_id ( enchant . DescribeRarityParameterStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_rarity_parameter_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_rarity_parameter_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getRarityParameterStatus 레어리티 파라미터 상태를 조회 현재 로그인한 사용자의 특정 프로퍼티에 대한 레어리티 파라미터의 현재 값을 조회합니다. 상태에는 모델에서 정의된 레어리티 가중치에 기반하여 무작위로 추첨된 파라미터 값이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. Result 타입 설명 item RarityParameterStatus 레어리티 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetRarityParameterStatus ( \u0026 enchant . GetRarityParameterStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetRarityParameterStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getRarityParameterStatus ( ( new GetRarityParameterStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetRarityParameterStatusRequest ; import io.gs2.enchant.result.GetRarityParameterStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetRarityParameterStatusResult result = client . getRarityParameterStatus ( new GetRarityParameterStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) ); RarityParameterStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetRarityParameterStatusResult \u003e asyncResult = null ; yield return client . GetRarityParameterStatus ( new Gs2 . Gs2Enchant . Request . GetRarityParameterStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getRarityParameterStatus ( new Gs2Enchant . GetRarityParameterStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_rarity_parameter_status ( enchant . GetRarityParameterStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_property_id ( 'property-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_rarity_parameter_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_rarity_parameter_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터 상태를 조회 지정된 사용자의 특정 프로퍼티에 대한 레어리티 파라미터의 현재 값을 조회합니다. 상태에는 모델에서 정의된 레어리티 가중치에 기반하여 무작위로 추첨된 파라미터 값이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RarityParameterStatus 레어리티 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetRarityParameterStatusByUserId ( \u0026 enchant . GetRarityParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetRarityParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getRarityParameterStatusByUserId ( ( new GetRarityParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetRarityParameterStatusByUserIdRequest ; import io.gs2.enchant.result.GetRarityParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetRarityParameterStatusByUserIdResult result = client . getRarityParameterStatusByUserId ( new GetRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); RarityParameterStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetRarityParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetRarityParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . GetRarityParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getRarityParameterStatusByUserId ( new Gs2Enchant . GetRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_rarity_parameter_status_by_user_id ( enchant . GetRarityParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_rarity_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_rarity_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRarityParameterStatusByUserId 레어리티 파라미터 상태를 삭제 지정된 사용자의 특정 프로퍼티에 대한 레어리티 파라미터 상태를 삭제합니다. 삭제된 파라미터 값은 영구적으로 손실되며 복원할 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RarityParameterStatus 삭제한 레어리티 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DeleteRarityParameterStatusByUserId ( \u0026 enchant . DeleteRarityParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DeleteRarityParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e deleteRarityParameterStatusByUserId ( ( new DeleteRarityParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DeleteRarityParameterStatusByUserIdRequest ; import io.gs2.enchant.result.DeleteRarityParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DeleteRarityParameterStatusByUserIdResult result = client . deleteRarityParameterStatusByUserId ( new DeleteRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); RarityParameterStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DeleteRarityParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . DeleteRarityParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . DeleteRarityParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . deleteRarityParameterStatusByUserId ( new Gs2Enchant . DeleteRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . delete_rarity_parameter_status_by_user_id ( enchant . DeleteRarityParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.delete_rarity_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.delete_rarity_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; reDrawRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터를 재추첨 특정 프로퍼티의 레어리티 파라미터 값을 재추첨하고, 레어리티 가중치에 기반하여 무작위로 새 값을 할당합니다. fixedParameterNames 에 파라미터 이름을 지정하면 특정 파라미터를 고정(잠금)하여 재추첨 대상에서 제외할 수 있습니다(최대 10개). 고정된 파라미터는 현재 값을 유지하며, 고정되지 않은 파라미터만 재추첨됩니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. fixedParameterNames List 0 ~ 10 items 재추첨하지 않는 파라미터의 이름 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RarityParameterStatus 업데이트한 레어리티 파라미터 상태 old RarityParameterStatus 업데이트하기 전의 레어리티 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . ReDrawRarityParameterStatusByUserId ( \u0026 enchant . ReDrawRarityParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), FixedParameterNames : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\ReDrawRarityParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e reDrawRarityParameterStatusByUserId ( ( new ReDrawRarityParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withFixedParameterNames ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.ReDrawRarityParameterStatusByUserIdRequest ; import io.gs2.enchant.result.ReDrawRarityParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { ReDrawRarityParameterStatusByUserIdResult result = client . reDrawRarityParameterStatusByUserId ( new ReDrawRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withFixedParameterNames ( null ) . withTimeOffsetToken ( null ) ); RarityParameterStatus item = result . getItem (); RarityParameterStatus old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . ReDrawRarityParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . ReDrawRarityParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . ReDrawRarityParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithFixedParameterNames ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . reDrawRarityParameterStatusByUserId ( new Gs2Enchant . ReDrawRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withFixedParameterNames ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . re_draw_rarity_parameter_status_by_user_id ( enchant . ReDrawRarityParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_property_id ( 'property-0001' ) . with_fixed_parameter_names ( None ) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.re_draw_rarity_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , fixedParameterNames = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'enchant' ) api_result_handler = client.re_draw_rarity_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , fixedParameterNames = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; addRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터를 추가 레어리티 가중치에 기반하여 무작위로 값을 추첨하고, 기존 레어리티 파라미터 상태에 새 파라미터 슬롯을 추가합니다. count 는 추가할 파라미터 슬롯의 수(1~10)를 지정하며, 모델의 최대 파라미터 수가 상한이 됩니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. count int 1 1 ~ 10 추가할 파라미터의 수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RarityParameterStatus 업데이트한 레어리티 파라미터 상태 old RarityParameterStatus 업데이트하기 전의 레어리티 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . AddRarityParameterStatusByUserId ( \u0026 enchant . AddRarityParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), Count : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\AddRarityParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e addRarityParameterStatusByUserId ( ( new AddRarityParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withCount ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.AddRarityParameterStatusByUserIdRequest ; import io.gs2.enchant.result.AddRarityParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { AddRarityParameterStatusByUserIdResult result = client . addRarityParameterStatusByUserId ( new AddRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withCount ( null ) . withTimeOffsetToken ( null ) ); RarityParameterStatus item = result . getItem (); RarityParameterStatus old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . AddRarityParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . AddRarityParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . AddRarityParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithCount ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . addRarityParameterStatusByUserId ( new Gs2Enchant . AddRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withCount ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . add_rarity_parameter_status_by_user_id ( enchant . AddRarityParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_property_id ( 'property-0001' ) . with_count ( None ) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.add_rarity_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , count = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'enchant' ) api_result_handler = client.add_rarity_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , count = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; verifyRarityParameterStatus 레어리티 파라미터를 검증 레어리티 파라미터 상태가 지정된 조건을 충족하는지 검증합니다. 3가지 검증 유형이 지원됩니다: ‘have’: 지정된 파라미터 값이 상태에 존재하는지 검증 ‘havent’: 지정된 파라미터 값이 상태에 존재하지 않는지 검증 ‘count’: 파라미터의 수가 지정된 수와 일치하는지 검증 다른 액션을 실행하기 전의 전제 조건 확인으로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. accessToken string  ~ 128자 액세스 토큰 propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. verifyType 문자열 열거형 enum {   “havent”,   “have”,   “count” }  검증 종류 정의 설명 havent 지정한 파라미터를 보유하고 있지 않을 것 have 지정한 파라미터를 보유하고 있을 것 count 보유하고 있는 파라미터의 수가 지정한 수와 같을 것 parameterValueName string {verifyType} in [“havent”, “have”] ※ ~ 64자 이름 이 추첨 엔트리의 식별자입니다. 레어리티 파라미터 모델의 값 풀 내에서 고유해야 합니다. 추첨되었을 때, 이 이름이 결과 레어리티 파라미터 값에 저장됩니다. ※ verifyType이(가) “havent”,“have\"이면 필수 parameterCount int {verifyType} == “count” ※ 0 ~ 10 검증할 파라미터의 수 ※ verifyType이(가) “count” 이면 필수 multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item RarityParameterStatus 레어리티 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . VerifyRarityParameterStatus ( \u0026 enchant . VerifyRarityParameterStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), VerifyType : pointy . String ( \"have\" ), ParameterValueName : pointy . String ( \"parameter-0001\" ), ParameterCount : nil , MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\VerifyRarityParameterStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e verifyRarityParameterStatus ( ( new VerifyRarityParameterStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withVerifyType ( \"have\" ) -\u003e withParameterValueName ( \"parameter-0001\" ) -\u003e withParameterCount ( null ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.VerifyRarityParameterStatusRequest ; import io.gs2.enchant.result.VerifyRarityParameterStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { VerifyRarityParameterStatusResult result = client . verifyRarityParameterStatus ( new VerifyRarityParameterStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withVerifyType ( \"have\" ) . withParameterValueName ( \"parameter-0001\" ) . withParameterCount ( null ) . withMultiplyValueSpecifyingQuantity ( null ) ); RarityParameterStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . VerifyRarityParameterStatusResult \u003e asyncResult = null ; yield return client . VerifyRarityParameterStatus ( new Gs2 . Gs2Enchant . Request . VerifyRarityParameterStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithVerifyType ( \"have\" ) . WithParameterValueName ( \"parameter-0001\" ) . WithParameterCount ( null ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . verifyRarityParameterStatus ( new Gs2Enchant . VerifyRarityParameterStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withVerifyType ( \"have\" ) . withParameterValueName ( \"parameter-0001\" ) . withParameterCount ( null ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . verify_rarity_parameter_status ( enchant . VerifyRarityParameterStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_id ( 'property-0001' ) . with_verify_type ( 'have' ) . with_parameter_value_name ( 'parameter-0001' ) . with_parameter_count ( None ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.verify_rarity_parameter_status ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , verifyType = \"have\" , parameterValueName = \"parameter-0001\" , parameterCount = nil , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.verify_rarity_parameter_status_async ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , verifyType = \"have\" , parameterValueName = \"parameter-0001\" , parameterCount = nil , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터를 검증 지정된 사용자의 레어리티 파라미터 상태가 지정된 조건을 충족하는지 검증합니다. 3가지 검증 유형이 지원됩니다: ‘have’: 지정된 파라미터 값이 상태에 존재하는지 검증 ‘havent’: 지정된 파라미터 값이 상태에 존재하지 않는지 검증 ‘count’: 파라미터의 수가 지정된 수와 일치하는지 검증 다른 액션을 실행하기 전의 전제 조건 확인으로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. verifyType 문자열 열거형 enum {   “havent”,   “have”,   “count” }  검증 종류 정의 설명 havent 지정한 파라미터를 보유하고 있지 않을 것 have 지정한 파라미터를 보유하고 있을 것 count 보유하고 있는 파라미터의 수가 지정한 수와 같을 것 parameterValueName string {verifyType} in [“havent”, “have”] ※ ~ 64자 이름 이 추첨 엔트리의 식별자입니다. 레어리티 파라미터 모델의 값 풀 내에서 고유해야 합니다. 추첨되었을 때, 이 이름이 결과 레어리티 파라미터 값에 저장됩니다. ※ verifyType이(가) “havent”,“have\"이면 필수 parameterCount int {verifyType} == “count” ※ 0 ~ 10 검증할 파라미터의 수 ※ verifyType이(가) “count” 이면 필수 multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RarityParameterStatus 레어리티 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . VerifyRarityParameterStatusByUserId ( \u0026 enchant . VerifyRarityParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), VerifyType : pointy . String ( \"have\" ), ParameterValueName : pointy . String ( \"parameter-0001\" ), ParameterCount : nil , MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\VerifyRarityParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e verifyRarityParameterStatusByUserId ( ( new VerifyRarityParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withVerifyType ( \"have\" ) -\u003e withParameterValueName ( \"parameter-0001\" ) -\u003e withParameterCount ( null ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.VerifyRarityParameterStatusByUserIdRequest ; import io.gs2.enchant.result.VerifyRarityParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { VerifyRarityParameterStatusByUserIdResult result = client . verifyRarityParameterStatusByUserId ( new VerifyRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withVerifyType ( \"have\" ) . withParameterValueName ( \"parameter-0001\" ) . withParameterCount ( null ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); RarityParameterStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . VerifyRarityParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . VerifyRarityParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . VerifyRarityParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithVerifyType ( \"have\" ) . WithParameterValueName ( \"parameter-0001\" ) . WithParameterCount ( null ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . verifyRarityParameterStatusByUserId ( new Gs2Enchant . VerifyRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withVerifyType ( \"have\" ) . withParameterValueName ( \"parameter-0001\" ) . withParameterCount ( null ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . verify_rarity_parameter_status_by_user_id ( enchant . VerifyRarityParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_verify_type ( 'have' ) . with_parameter_value_name ( 'parameter-0001' ) . with_parameter_count ( None ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.verify_rarity_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , verifyType = \"have\" , parameterValueName = \"parameter-0001\" , parameterCount = nil , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.verify_rarity_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , verifyType = \"have\" , parameterValueName = \"parameter-0001\" , parameterCount = nil , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터에 임의의 값을 설정 통상적인 추첨/재추첨 메커니즘을 거치지 않고, 지정된 사용자의 특정 프로퍼티에 파라미터 값을 직접 설정합니다. 이는 레어리티 가중치와 관계없이 임의의 파라미터 값을 할당할 수 있는 관리 작업입니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. parameterValues List 0 ~ 10 items 레어리티 파라미터의 값 목록 부여된 각 슬롯에 대해 가중 추첨으로 선택된 구체적인 파라미터 값입니다. 엔트리 수는 부여 수 추첨으로 결정되며, 각 엔트리의 값은 값 모델 풀에서 선택됩니다. 최대 파라미터 수보다 적은 엔트리 수가 될 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RarityParameterStatus 업데이트한 레어리티 파라미터 상태 old RarityParameterStatus 업데이트하기 전의 레어리티 파라미터 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . SetRarityParameterStatusByUserId ( \u0026 enchant . SetRarityParameterStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), ParameterValues : [] enchant . RarityParameterValue { enchant . RarityParameterValue { Name : pointy . String ( \"parameter-0001\" ), ResourceName : pointy . String ( \"str\" ), ResourceValue : pointy . Int64 ( 100 ), }, enchant . RarityParameterValue { Name : pointy . String ( \"parameter-0002\" ), ResourceName : pointy . String ( \"def\" ), ResourceValue : pointy . Int64 ( 200 ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\SetRarityParameterStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e setRarityParameterStatusByUserId ( ( new SetRarityParameterStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withParameterValues ([ ( new RarityParameterValue ()) -\u003e withName ( \"parameter-0001\" ) -\u003e withResourceName ( \"str\" ) -\u003e withResourceValue ( 100 ), ( new RarityParameterValue ()) -\u003e withName ( \"parameter-0002\" ) -\u003e withResourceName ( \"def\" ) -\u003e withResourceValue ( 200 ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.SetRarityParameterStatusByUserIdRequest ; import io.gs2.enchant.result.SetRarityParameterStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { SetRarityParameterStatusByUserIdResult result = client . setRarityParameterStatusByUserId ( new SetRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withParameterValues ( Arrays . asList ( new RarityParameterValue () . withName ( \"parameter-0001\" ) . withResourceName ( \"str\" ) . withResourceValue ( 100L ), new RarityParameterValue () . withName ( \"parameter-0002\" ) . withResourceName ( \"def\" ) . withResourceValue ( 200L ) )) . withTimeOffsetToken ( null ) ); RarityParameterStatus item = result . getItem (); RarityParameterStatus old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . SetRarityParameterStatusByUserIdResult \u003e asyncResult = null ; yield return client . SetRarityParameterStatusByUserId ( new Gs2 . Gs2Enchant . Request . SetRarityParameterStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithParameterValues ( new Gs2 . Gs2Enchant . Model . RarityParameterValue [] { new Gs2 . Gs2Enchant . Model . RarityParameterValue () . WithName ( \"parameter-0001\" ) . WithResourceName ( \"str\" ) . WithResourceValue ( 100L ), new Gs2 . Gs2Enchant . Model . RarityParameterValue () . WithName ( \"parameter-0002\" ) . WithResourceName ( \"def\" ) . WithResourceValue ( 200L ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . setRarityParameterStatusByUserId ( new Gs2Enchant . SetRarityParameterStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withParameterName ( \"rarity-0001\" ) . withPropertyId ( \"property-0001\" ) . withParameterValues ([ new Gs2Enchant . model . RarityParameterValue () . withName ( \"parameter-0001\" ) . withResourceName ( \"str\" ) . withResourceValue ( 100 ), new Gs2Enchant . model . RarityParameterValue () . withName ( \"parameter-0002\" ) . withResourceName ( \"def\" ) . withResourceValue ( 200 ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . set_rarity_parameter_status_by_user_id ( enchant . SetRarityParameterStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_property_id ( 'property-0001' ) . with_parameter_values ([ enchant . RarityParameterValue () . with_name ( 'parameter-0001' ) . with_resource_name ( 'str' ) . with_resource_value ( 100 ), enchant . RarityParameterValue () . with_name ( 'parameter-0002' ) . with_resource_name ( 'def' ) . with_resource_value ( 200 ), ]) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.set_rarity_parameter_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , parameterValues = { { name = \"parameter-0001\" , resource_name = \"str\" , resource_value = 100 , }, { name = \"parameter-0002\" , resource_name = \"def\" , resource_value = 200 , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'enchant' ) api_result_handler = client.set_rarity_parameter_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , parameterName = \"rarity-0001\" , propertyId = \"property-0001\" , parameterValues = { { name = \"parameter-0001\" , resource_name = \"str\" , resource_value = 100 , }, { name = \"parameter-0002\" , resource_name = \"def\" , resource_value = 200 , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; describeBalanceParameterModels 밸런스 파라미터 모델 목록을 조회 지정된 네임스페이스에서 현재 유효화(공개)되어 있는 모든 밸런스 파라미터 모델을 조회합니다. 밸런스 파라미터 모델은 합계값이 여러 파라미터에 분배되어, 항상 합계가 고정값이 되는 파라미터 세트를 정의합니다. 현재 마스터 데이터를 통해 유효화된 모델만 반환되며, 편집 가능한 마스터 데이터는 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 밸런스 파라미터 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeBalanceParameterModels ( \u0026 enchant . DescribeBalanceParameterModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeBalanceParameterModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeBalanceParameterModels ( ( new DescribeBalanceParameterModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeBalanceParameterModelsRequest ; import io.gs2.enchant.result.DescribeBalanceParameterModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeBalanceParameterModelsResult result = client . describeBalanceParameterModels ( new DescribeBalanceParameterModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List BalanceParameterModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeBalanceParameterModelsResult \u003e asyncResult = null ; yield return client . DescribeBalanceParameterModels ( new Gs2 . Gs2Enchant . Request . DescribeBalanceParameterModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeBalanceParameterModels ( new Gs2Enchant . DescribeBalanceParameterModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_balance_parameter_models ( enchant . DescribeBalanceParameterModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_balance_parameter_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_balance_parameter_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getBalanceParameterModel 밸런스 파라미터 모델을 조회 이름을 지정하여, 특정 유효한 밸런스 파라미터 모델의 상세 정보를 조회합니다. 반환되는 정보에는 모델의 이름, 메타데이터, 합계값, 초기값 전략, 파라미터 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 밸런스 파라미터 모델 이름 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item BalanceParameterModel 밸런스 파라미터 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetBalanceParameterModel ( \u0026 enchant . GetBalanceParameterModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetBalanceParameterModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getBalanceParameterModel ( ( new GetBalanceParameterModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetBalanceParameterModelRequest ; import io.gs2.enchant.result.GetBalanceParameterModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetBalanceParameterModelResult result = client . getBalanceParameterModel ( new GetBalanceParameterModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) ); BalanceParameterModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetBalanceParameterModelResult \u003e asyncResult = null ; yield return client . GetBalanceParameterModel ( new Gs2 . Gs2Enchant . Request . GetBalanceParameterModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"rarity-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getBalanceParameterModel ( new Gs2Enchant . GetBalanceParameterModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_balance_parameter_model ( enchant . GetBalanceParameterModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'rarity-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_balance_parameter_model ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_balance_parameter_model_async ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRarityParameterModels 레어리티 파라미터 모델 목록 조회 지정된 네임스페이스에서 현재 유효화(공개)된 모든 레어리티 파라미터 모델을 조회합니다. 레어리티 파라미터 모델은 각 파라미터 슬롯이 레어리티 기반 확률로 무작위 추첨된 값으로 채워지는 파라미터 세트를 정의합니다. 현재 마스터 데이터를 통해 유효화된 모델만 반환되며, 편집 가능한 마스터 데이터는 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 레어리티 파라미터 모델의 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeRarityParameterModels ( \u0026 enchant . DescribeRarityParameterModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeRarityParameterModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeRarityParameterModels ( ( new DescribeRarityParameterModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeRarityParameterModelsRequest ; import io.gs2.enchant.result.DescribeRarityParameterModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeRarityParameterModelsResult result = client . describeRarityParameterModels ( new DescribeRarityParameterModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List RarityParameterModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeRarityParameterModelsResult \u003e asyncResult = null ; yield return client . DescribeRarityParameterModels ( new Gs2 . Gs2Enchant . Request . DescribeRarityParameterModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeRarityParameterModels ( new Gs2Enchant . DescribeRarityParameterModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_rarity_parameter_models ( enchant . DescribeRarityParameterModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_rarity_parameter_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_rarity_parameter_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getRarityParameterModel 레어리티 파라미터 모델을 조회 이름을 지정하여 특정 유효한 레어리티 파라미터 모델의 상세 정보를 조회합니다. 반환되는 정보에는 모델의 이름, 메타데이터, 최대 파라미터 수, 파라미터 수 분포, 레어리티 가중치가 포함된 파라미터 값 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item RarityParameterModel 레어리티 파라미터 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetRarityParameterModel ( \u0026 enchant . GetRarityParameterModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetRarityParameterModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getRarityParameterModel ( ( new GetRarityParameterModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetRarityParameterModelRequest ; import io.gs2.enchant.result.GetRarityParameterModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetRarityParameterModelResult result = client . getRarityParameterModel ( new GetRarityParameterModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) ); RarityParameterModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetRarityParameterModelResult \u003e asyncResult = null ; yield return client . GetRarityParameterModel ( new Gs2 . Gs2Enchant . Request . GetRarityParameterModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"rarity-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getRarityParameterModel ( new Gs2Enchant . GetRarityParameterModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_rarity_parameter_model ( enchant . GetRarityParameterModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'rarity-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_rarity_parameter_model ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_rarity_parameter_model_async ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 파라미터 모델 마스터를 유효화 가능한 마스터 데이터 형식으로 내보내기 현재 파라미터 모델 마스터 데이터(밸런스 파라미터 모델과 레어리티 파라미터 모델 모두)를 유효화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 가져오기에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentParameterMaster 유효화 가능한 파라미터 모델 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 enchant . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.ExportMasterRequest ; import io.gs2.enchant.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentParameterMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Enchant . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Enchant . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . export_master ( enchant . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentParameterMaster 현재 유효한 파라미터 모델의 마스터 데이터를 조회 지정된 네임스페이스에서 현재 유효화(공개)된 파라미터 모델(밸런스와 레어리티 모두)의 마스터 데이터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentParameterMaster 현재 유효한 파라미터 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetCurrentParameterMaster ( \u0026 enchant . GetCurrentParameterMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetCurrentParameterMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getCurrentParameterMaster ( ( new GetCurrentParameterMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetCurrentParameterMasterRequest ; import io.gs2.enchant.result.GetCurrentParameterMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetCurrentParameterMasterResult result = client . getCurrentParameterMaster ( new GetCurrentParameterMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentParameterMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetCurrentParameterMasterResult \u003e asyncResult = null ; yield return client . GetCurrentParameterMaster ( new Gs2 . Gs2Enchant . Request . GetCurrentParameterMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getCurrentParameterMaster ( new Gs2Enchant . GetCurrentParameterMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_current_parameter_master ( enchant . GetCurrentParameterMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_current_parameter_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_current_parameter_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentParameterMaster 현재 유효한 파라미터 모델의 마스터 데이터를 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 업데이트를 진행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 획득합니다. 획득한 URL에 마스터 데이터를 업로드합니다. 업로드로 획득한 토큰을 전달하여 UpdateCurrentParameterMaster 를 실행함으로써 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentParameterMaster ( \u0026 enchant . PreUpdateCurrentParameterMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\PreUpdateCurrentParameterMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentParameterMaster ( ( new PreUpdateCurrentParameterMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.PreUpdateCurrentParameterMasterRequest ; import io.gs2.enchant.result.PreUpdateCurrentParameterMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { PreUpdateCurrentParameterMasterResult result = client . preUpdateCurrentParameterMaster ( new PreUpdateCurrentParameterMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . PreUpdateCurrentParameterMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentParameterMaster ( new Gs2 . Gs2Enchant . Request . PreUpdateCurrentParameterMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . preUpdateCurrentParameterMaster ( new Gs2Enchant . PreUpdateCurrentParameterMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . pre_update_current_parameter_master ( enchant . PreUpdateCurrentParameterMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.pre_update_current_parameter_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'enchant' ) api_result_handler = client.pre_update_current_parameter_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentParameterMaster 현재 유효한 파라미터 모델의 마스터 데이터를 업데이트 지정된 네임스페이스의 파라미터 모델 마스터 데이터를 업데이트하고 유효화(공개)합니다. 인라인 마스터 데이터용 ‘direct’ 모드와 사전에 업로드된 마스터 데이터용 ‘preUpload’ 모드, 두 가지 모드를 지원합니다. 1MB를 초과하는 마스터 데이터의 경우, 3단계 업데이트 흐름(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))을 사용하십시오. 업로드된 마스터 데이터는 적용 전에 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentParameterMaster 업데이트된 현재 유효한 파라미터 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentParameterMaster ( \u0026 enchant . UpdateCurrentParameterMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2023-07-18\\\", \\\"balanceParameterModels\\\": [{\\\"name\\\": \\\"balance-0001\\\", \\\"metadata\\\": \\\"BALANCE_0001\\\", \\\"totalValue\\\": 100, \\\"initialValueStrategy\\\": \\\"average\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\"}]}, {\\\"name\\\": \\\"balance-0002\\\", \\\"metadata\\\": \\\"BALANCE_0002\\\", \\\"totalValue\\\": 200, \\\"initialValueStrategy\\\": \\\"lottery\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\"}, {\\\"name\\\": \\\"parameter-0004\\\", \\\"metadata\\\": \\\"PARAMETER_0004\\\"}]}, {\\\"name\\\": \\\"balance-0003\\\", \\\"metadata\\\": \\\"BALANCE_0003\\\", \\\"totalValue\\\": 500, \\\"initialValueStrategy\\\": \\\"average\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}]}], \\\"rarityParameterModels\\\": [{\\\"name\\\": \\\"rarity-0001\\\", \\\"metadata\\\": \\\"RARITY_0001\\\", \\\"maximumParameterCount\\\": 5, \\\"parameterCounts\\\": [{\\\"count\\\": 0, \\\"weight\\\": 1}, {\\\"count\\\": 1, \\\"weight\\\": 2}, {\\\"count\\\": 2, \\\"weight\\\": 3}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\", \\\"resourceName\\\": \\\"resource-0001\\\", \\\"resourceValue\\\": 10, \\\"weight\\\": 1}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\", \\\"resourceName\\\": \\\"resource-0002\\\", \\\"resourceValue\\\": 20, \\\"weight\\\": 2}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\", \\\"resourceName\\\": \\\"resource-0003\\\", \\\"resourceValue\\\": 30, \\\"weight\\\": 3}]}, {\\\"name\\\": \\\"rarity-0002\\\", \\\"metadata\\\": \\\"RARITY_0002\\\", \\\"maximumParameterCount\\\": 10, \\\"parameterCounts\\\": [{\\\"count\\\": 1, \\\"weight\\\": 10}, {\\\"count\\\": 2, \\\"weight\\\": 20}, {\\\"count\\\": 3, \\\"weight\\\": 30}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-1001\\\", \\\"metadata\\\": \\\"PARAMETER_1001\\\", \\\"resourceName\\\": \\\"resource-1001\\\", \\\"resourceValue\\\": 100, \\\"weight\\\": 10}, {\\\"name\\\": \\\"parameter-1002\\\", \\\"metadata\\\": \\\"PARAMETER_1002\\\", \\\"resourceName\\\": \\\"resource-1002\\\", \\\"resourceValue\\\": 200, \\\"weight\\\": 20}, {\\\"name\\\": \\\"parameter-1003\\\", \\\"metadata\\\": \\\"PARAMETER_1003\\\", \\\"resourceName\\\": \\\"resource-1003\\\", \\\"resourceValue\\\": 300, \\\"weight\\\": 30}]}, {\\\"name\\\": \\\"rarity-0003\\\", \\\"metadata\\\": \\\"RARITY_0003\\\", \\\"maximumParameterCount\\\": 3, \\\"parameterCounts\\\": [{\\\"count\\\": 2, \\\"weight\\\": 5}, {\\\"count\\\": 3, \\\"weight\\\": 10}, {\\\"count\\\": 4, \\\"weight\\\": 15}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-2001\\\", \\\"metadata\\\": \\\"PARAMETER_2001\\\", \\\"resourceName\\\": \\\"resource-2001\\\", \\\"resourceValue\\\": 1000, \\\"weight\\\": 2}, {\\\"name\\\": \\\"parameter-2002\\\", \\\"metadata\\\": \\\"PARAMETER_2002\\\", \\\"resourceName\\\": \\\"resource-2002\\\", \\\"resourceValue\\\": 2000, \\\"weight\\\": 4}, {\\\"name\\\": \\\"parameter-2003\\\", \\\"metadata\\\": \\\"PARAMETER_2003\\\", \\\"resourceName\\\": \\\"resource-2003\\\", \\\"resourceValue\\\": 3000, \\\"weight\\\": 6}, {\\\"name\\\": \\\"parameter-0004\\\", \\\"metadata\\\": \\\"PARAMETER_0004\\\", \\\"resourceName\\\": \\\"resource-2004\\\", \\\"resourceValue\\\": 4000, \\\"weight\\\": 8}]}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\UpdateCurrentParameterMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e updateCurrentParameterMaster ( ( new UpdateCurrentParameterMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2023-07-18 \\\" , \\\" balanceParameterModels \\\" : [{ \\\" name \\\" : \\\" balance-0001 \\\" , \\\" metadata \\\" : \\\" BALANCE_0001 \\\" , \\\" totalValue \\\" : 100, \\\" initialValueStrategy \\\" : \\\" average \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" }]}, { \\\" name \\\" : \\\" balance-0002 \\\" , \\\" metadata \\\" : \\\" BALANCE_0002 \\\" , \\\" totalValue \\\" : 200, \\\" initialValueStrategy \\\" : \\\" lottery \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" }, { \\\" name \\\" : \\\" parameter-0004 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0004 \\\" }]}, { \\\" name \\\" : \\\" balance-0003 \\\" , \\\" metadata \\\" : \\\" BALANCE_0003 \\\" , \\\" totalValue \\\" : 500, \\\" initialValueStrategy \\\" : \\\" average \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }]}], \\\" rarityParameterModels \\\" : [{ \\\" name \\\" : \\\" rarity-0001 \\\" , \\\" metadata \\\" : \\\" RARITY_0001 \\\" , \\\" maximumParameterCount \\\" : 5, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 0, \\\" weight \\\" : 1}, { \\\" count \\\" : 1, \\\" weight \\\" : 2}, { \\\" count \\\" : 2, \\\" weight \\\" : 3}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" , \\\" resourceName \\\" : \\\" resource-0001 \\\" , \\\" resourceValue \\\" : 10, \\\" weight \\\" : 1}, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" , \\\" resourceName \\\" : \\\" resource-0002 \\\" , \\\" resourceValue \\\" : 20, \\\" weight \\\" : 2}, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" , \\\" resourceName \\\" : \\\" resource-0003 \\\" , \\\" resourceValue \\\" : 30, \\\" weight \\\" : 3}]}, { \\\" name \\\" : \\\" rarity-0002 \\\" , \\\" metadata \\\" : \\\" RARITY_0002 \\\" , \\\" maximumParameterCount \\\" : 10, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 1, \\\" weight \\\" : 10}, { \\\" count \\\" : 2, \\\" weight \\\" : 20}, { \\\" count \\\" : 3, \\\" weight \\\" : 30}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-1001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1001 \\\" , \\\" resourceName \\\" : \\\" resource-1001 \\\" , \\\" resourceValue \\\" : 100, \\\" weight \\\" : 10}, { \\\" name \\\" : \\\" parameter-1002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1002 \\\" , \\\" resourceName \\\" : \\\" resource-1002 \\\" , \\\" resourceValue \\\" : 200, \\\" weight \\\" : 20}, { \\\" name \\\" : \\\" parameter-1003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1003 \\\" , \\\" resourceName \\\" : \\\" resource-1003 \\\" , \\\" resourceValue \\\" : 300, \\\" weight \\\" : 30}]}, { \\\" name \\\" : \\\" rarity-0003 \\\" , \\\" metadata \\\" : \\\" RARITY_0003 \\\" , \\\" maximumParameterCount \\\" : 3, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 2, \\\" weight \\\" : 5}, { \\\" count \\\" : 3, \\\" weight \\\" : 10}, { \\\" count \\\" : 4, \\\" weight \\\" : 15}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-2001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2001 \\\" , \\\" resourceName \\\" : \\\" resource-2001 \\\" , \\\" resourceValue \\\" : 1000, \\\" weight \\\" : 2}, { \\\" name \\\" : \\\" parameter-2002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2002 \\\" , \\\" resourceName \\\" : \\\" resource-2002 \\\" , \\\" resourceValue \\\" : 2000, \\\" weight \\\" : 4}, { \\\" name \\\" : \\\" parameter-2003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2003 \\\" , \\\" resourceName \\\" : \\\" resource-2003 \\\" , \\\" resourceValue \\\" : 3000, \\\" weight \\\" : 6}, { \\\" name \\\" : \\\" parameter-0004 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0004 \\\" , \\\" resourceName \\\" : \\\" resource-2004 \\\" , \\\" resourceValue \\\" : 4000, \\\" weight \\\" : 8}]}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.UpdateCurrentParameterMasterRequest ; import io.gs2.enchant.result.UpdateCurrentParameterMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { UpdateCurrentParameterMasterResult result = client . updateCurrentParameterMaster ( new UpdateCurrentParameterMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-07-18\\\", \\\"balanceParameterModels\\\": [{\\\"name\\\": \\\"balance-0001\\\", \\\"metadata\\\": \\\"BALANCE_0001\\\", \\\"totalValue\\\": 100, \\\"initialValueStrategy\\\": \\\"average\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\"}]}, {\\\"name\\\": \\\"balance-0002\\\", \\\"metadata\\\": \\\"BALANCE_0002\\\", \\\"totalValue\\\": 200, \\\"initialValueStrategy\\\": \\\"lottery\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\"}, {\\\"name\\\": \\\"parameter-0004\\\", \\\"metadata\\\": \\\"PARAMETER_0004\\\"}]}, {\\\"name\\\": \\\"balance-0003\\\", \\\"metadata\\\": \\\"BALANCE_0003\\\", \\\"totalValue\\\": 500, \\\"initialValueStrategy\\\": \\\"average\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}]}], \\\"rarityParameterModels\\\": [{\\\"name\\\": \\\"rarity-0001\\\", \\\"metadata\\\": \\\"RARITY_0001\\\", \\\"maximumParameterCount\\\": 5, \\\"parameterCounts\\\": [{\\\"count\\\": 0, \\\"weight\\\": 1}, {\\\"count\\\": 1, \\\"weight\\\": 2}, {\\\"count\\\": 2, \\\"weight\\\": 3}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\", \\\"resourceName\\\": \\\"resource-0001\\\", \\\"resourceValue\\\": 10, \\\"weight\\\": 1}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\", \\\"resourceName\\\": \\\"resource-0002\\\", \\\"resourceValue\\\": 20, \\\"weight\\\": 2}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\", \\\"resourceName\\\": \\\"resource-0003\\\", \\\"resourceValue\\\": 30, \\\"weight\\\": 3}]}, {\\\"name\\\": \\\"rarity-0002\\\", \\\"metadata\\\": \\\"RARITY_0002\\\", \\\"maximumParameterCount\\\": 10, \\\"parameterCounts\\\": [{\\\"count\\\": 1, \\\"weight\\\": 10}, {\\\"count\\\": 2, \\\"weight\\\": 20}, {\\\"count\\\": 3, \\\"weight\\\": 30}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-1001\\\", \\\"metadata\\\": \\\"PARAMETER_1001\\\", \\\"resourceName\\\": \\\"resource-1001\\\", \\\"resourceValue\\\": 100, \\\"weight\\\": 10}, {\\\"name\\\": \\\"parameter-1002\\\", \\\"metadata\\\": \\\"PARAMETER_1002\\\", \\\"resourceName\\\": \\\"resource-1002\\\", \\\"resourceValue\\\": 200, \\\"weight\\\": 20}, {\\\"name\\\": \\\"parameter-1003\\\", \\\"metadata\\\": \\\"PARAMETER_1003\\\", \\\"resourceName\\\": \\\"resource-1003\\\", \\\"resourceValue\\\": 300, \\\"weight\\\": 30}]}, {\\\"name\\\": \\\"rarity-0003\\\", \\\"metadata\\\": \\\"RARITY_0003\\\", \\\"maximumParameterCount\\\": 3, \\\"parameterCounts\\\": [{\\\"count\\\": 2, \\\"weight\\\": 5}, {\\\"count\\\": 3, \\\"weight\\\": 10}, {\\\"count\\\": 4, \\\"weight\\\": 15}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-2001\\\", \\\"metadata\\\": \\\"PARAMETER_2001\\\", \\\"resourceName\\\": \\\"resource-2001\\\", \\\"resourceValue\\\": 1000, \\\"weight\\\": 2}, {\\\"name\\\": \\\"parameter-2002\\\", \\\"metadata\\\": \\\"PARAMETER_2002\\\", \\\"resourceName\\\": \\\"resource-2002\\\", \\\"resourceValue\\\": 2000, \\\"weight\\\": 4}, {\\\"name\\\": \\\"parameter-2003\\\", \\\"metadata\\\": \\\"PARAMETER_2003\\\", \\\"resourceName\\\": \\\"resource-2003\\\", \\\"resourceValue\\\": 3000, \\\"weight\\\": 6}, {\\\"name\\\": \\\"parameter-0004\\\", \\\"metadata\\\": \\\"PARAMETER_0004\\\", \\\"resourceName\\\": \\\"resource-2004\\\", \\\"resourceValue\\\": 4000, \\\"weight\\\": 8}]}]}\" ) . withUploadToken ( null ) ); CurrentParameterMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . UpdateCurrentParameterMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentParameterMaster ( new Gs2 . Gs2Enchant . Request . UpdateCurrentParameterMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2023-07-18\\\", \\\"balanceParameterModels\\\": [{\\\"name\\\": \\\"balance-0001\\\", \\\"metadata\\\": \\\"BALANCE_0001\\\", \\\"totalValue\\\": 100, \\\"initialValueStrategy\\\": \\\"average\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\"}]}, {\\\"name\\\": \\\"balance-0002\\\", \\\"metadata\\\": \\\"BALANCE_0002\\\", \\\"totalValue\\\": 200, \\\"initialValueStrategy\\\": \\\"lottery\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\"}, {\\\"name\\\": \\\"parameter-0004\\\", \\\"metadata\\\": \\\"PARAMETER_0004\\\"}]}, {\\\"name\\\": \\\"balance-0003\\\", \\\"metadata\\\": \\\"BALANCE_0003\\\", \\\"totalValue\\\": 500, \\\"initialValueStrategy\\\": \\\"average\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}]}], \\\"rarityParameterModels\\\": [{\\\"name\\\": \\\"rarity-0001\\\", \\\"metadata\\\": \\\"RARITY_0001\\\", \\\"maximumParameterCount\\\": 5, \\\"parameterCounts\\\": [{\\\"count\\\": 0, \\\"weight\\\": 1}, {\\\"count\\\": 1, \\\"weight\\\": 2}, {\\\"count\\\": 2, \\\"weight\\\": 3}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\", \\\"resourceName\\\": \\\"resource-0001\\\", \\\"resourceValue\\\": 10, \\\"weight\\\": 1}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\", \\\"resourceName\\\": \\\"resource-0002\\\", \\\"resourceValue\\\": 20, \\\"weight\\\": 2}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\", \\\"resourceName\\\": \\\"resource-0003\\\", \\\"resourceValue\\\": 30, \\\"weight\\\": 3}]}, {\\\"name\\\": \\\"rarity-0002\\\", \\\"metadata\\\": \\\"RARITY_0002\\\", \\\"maximumParameterCount\\\": 10, \\\"parameterCounts\\\": [{\\\"count\\\": 1, \\\"weight\\\": 10}, {\\\"count\\\": 2, \\\"weight\\\": 20}, {\\\"count\\\": 3, \\\"weight\\\": 30}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-1001\\\", \\\"metadata\\\": \\\"PARAMETER_1001\\\", \\\"resourceName\\\": \\\"resource-1001\\\", \\\"resourceValue\\\": 100, \\\"weight\\\": 10}, {\\\"name\\\": \\\"parameter-1002\\\", \\\"metadata\\\": \\\"PARAMETER_1002\\\", \\\"resourceName\\\": \\\"resource-1002\\\", \\\"resourceValue\\\": 200, \\\"weight\\\": 20}, {\\\"name\\\": \\\"parameter-1003\\\", \\\"metadata\\\": \\\"PARAMETER_1003\\\", \\\"resourceName\\\": \\\"resource-1003\\\", \\\"resourceValue\\\": 300, \\\"weight\\\": 30}]}, {\\\"name\\\": \\\"rarity-0003\\\", \\\"metadata\\\": \\\"RARITY_0003\\\", \\\"maximumParameterCount\\\": 3, \\\"parameterCounts\\\": [{\\\"count\\\": 2, \\\"weight\\\": 5}, {\\\"count\\\": 3, \\\"weight\\\": 10}, {\\\"count\\\": 4, \\\"weight\\\": 15}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-2001\\\", \\\"metadata\\\": \\\"PARAMETER_2001\\\", \\\"resourceName\\\": \\\"resource-2001\\\", \\\"resourceValue\\\": 1000, \\\"weight\\\": 2}, {\\\"name\\\": \\\"parameter-2002\\\", \\\"metadata\\\": \\\"PARAMETER_2002\\\", \\\"resourceName\\\": \\\"resource-2002\\\", \\\"resourceValue\\\": 2000, \\\"weight\\\": 4}, {\\\"name\\\": \\\"parameter-2003\\\", \\\"metadata\\\": \\\"PARAMETER_2003\\\", \\\"resourceName\\\": \\\"resource-2003\\\", \\\"resourceValue\\\": 3000, \\\"weight\\\": 6}, {\\\"name\\\": \\\"parameter-0004\\\", \\\"metadata\\\": \\\"PARAMETER_0004\\\", \\\"resourceName\\\": \\\"resource-2004\\\", \\\"resourceValue\\\": 4000, \\\"weight\\\": 8}]}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . updateCurrentParameterMaster ( new Gs2Enchant . UpdateCurrentParameterMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-07-18\\\", \\\"balanceParameterModels\\\": [{\\\"name\\\": \\\"balance-0001\\\", \\\"metadata\\\": \\\"BALANCE_0001\\\", \\\"totalValue\\\": 100, \\\"initialValueStrategy\\\": \\\"average\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\"}]}, {\\\"name\\\": \\\"balance-0002\\\", \\\"metadata\\\": \\\"BALANCE_0002\\\", \\\"totalValue\\\": 200, \\\"initialValueStrategy\\\": \\\"lottery\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\"}, {\\\"name\\\": \\\"parameter-0004\\\", \\\"metadata\\\": \\\"PARAMETER_0004\\\"}]}, {\\\"name\\\": \\\"balance-0003\\\", \\\"metadata\\\": \\\"BALANCE_0003\\\", \\\"totalValue\\\": 500, \\\"initialValueStrategy\\\": \\\"average\\\", \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\"}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\"}]}], \\\"rarityParameterModels\\\": [{\\\"name\\\": \\\"rarity-0001\\\", \\\"metadata\\\": \\\"RARITY_0001\\\", \\\"maximumParameterCount\\\": 5, \\\"parameterCounts\\\": [{\\\"count\\\": 0, \\\"weight\\\": 1}, {\\\"count\\\": 1, \\\"weight\\\": 2}, {\\\"count\\\": 2, \\\"weight\\\": 3}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-0001\\\", \\\"metadata\\\": \\\"PARAMETER_0001\\\", \\\"resourceName\\\": \\\"resource-0001\\\", \\\"resourceValue\\\": 10, \\\"weight\\\": 1}, {\\\"name\\\": \\\"parameter-0002\\\", \\\"metadata\\\": \\\"PARAMETER_0002\\\", \\\"resourceName\\\": \\\"resource-0002\\\", \\\"resourceValue\\\": 20, \\\"weight\\\": 2}, {\\\"name\\\": \\\"parameter-0003\\\", \\\"metadata\\\": \\\"PARAMETER_0003\\\", \\\"resourceName\\\": \\\"resource-0003\\\", \\\"resourceValue\\\": 30, \\\"weight\\\": 3}]}, {\\\"name\\\": \\\"rarity-0002\\\", \\\"metadata\\\": \\\"RARITY_0002\\\", \\\"maximumParameterCount\\\": 10, \\\"parameterCounts\\\": [{\\\"count\\\": 1, \\\"weight\\\": 10}, {\\\"count\\\": 2, \\\"weight\\\": 20}, {\\\"count\\\": 3, \\\"weight\\\": 30}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-1001\\\", \\\"metadata\\\": \\\"PARAMETER_1001\\\", \\\"resourceName\\\": \\\"resource-1001\\\", \\\"resourceValue\\\": 100, \\\"weight\\\": 10}, {\\\"name\\\": \\\"parameter-1002\\\", \\\"metadata\\\": \\\"PARAMETER_1002\\\", \\\"resourceName\\\": \\\"resource-1002\\\", \\\"resourceValue\\\": 200, \\\"weight\\\": 20}, {\\\"name\\\": \\\"parameter-1003\\\", \\\"metadata\\\": \\\"PARAMETER_1003\\\", \\\"resourceName\\\": \\\"resource-1003\\\", \\\"resourceValue\\\": 300, \\\"weight\\\": 30}]}, {\\\"name\\\": \\\"rarity-0003\\\", \\\"metadata\\\": \\\"RARITY_0003\\\", \\\"maximumParameterCount\\\": 3, \\\"parameterCounts\\\": [{\\\"count\\\": 2, \\\"weight\\\": 5}, {\\\"count\\\": 3, \\\"weight\\\": 10}, {\\\"count\\\": 4, \\\"weight\\\": 15}], \\\"parameters\\\": [{\\\"name\\\": \\\"parameter-2001\\\", \\\"metadata\\\": \\\"PARAMETER_2001\\\", \\\"resourceName\\\": \\\"resource-2001\\\", \\\"resourceValue\\\": 1000, \\\"weight\\\": 2}, {\\\"name\\\": \\\"parameter-2002\\\", \\\"metadata\\\": \\\"PARAMETER_2002\\\", \\\"resourceName\\\": \\\"resource-2002\\\", \\\"resourceValue\\\": 2000, \\\"weight\\\": 4}, {\\\"name\\\": \\\"parameter-2003\\\", \\\"metadata\\\": \\\"PARAMETER_2003\\\", \\\"resourceName\\\": \\\"resource-2003\\\", \\\"resourceValue\\\": 3000, \\\"weight\\\": 6}, {\\\"name\\\": \\\"parameter-0004\\\", \\\"metadata\\\": \\\"PARAMETER_0004\\\", \\\"resourceName\\\": \\\"resource-2004\\\", \\\"resourceValue\\\": 4000, \\\"weight\\\": 8}]}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . update_current_parameter_master ( enchant . UpdateCurrentParameterMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2023-07-18\", \"balanceParameterModels\": [{\"name\": \"balance-0001\", \"metadata\": \"BALANCE_0001\", \"totalValue\": 100, \"initialValueStrategy\": \"average\", \"parameters\": [{\"name\": \"parameter-0001\", \"metadata\": \"PARAMETER_0001\"}, {\"name\": \"parameter-0002\", \"metadata\": \"PARAMETER_0002\"}, {\"name\": \"parameter-0003\", \"metadata\": \"PARAMETER_0003\"}]}, {\"name\": \"balance-0002\", \"metadata\": \"BALANCE_0002\", \"totalValue\": 200, \"initialValueStrategy\": \"lottery\", \"parameters\": [{\"name\": \"parameter-0001\", \"metadata\": \"PARAMETER_0001\"}, {\"name\": \"parameter-0002\", \"metadata\": \"PARAMETER_0002\"}, {\"name\": \"parameter-0003\", \"metadata\": \"PARAMETER_0003\"}, {\"name\": \"parameter-0004\", \"metadata\": \"PARAMETER_0004\"}]}, {\"name\": \"balance-0003\", \"metadata\": \"BALANCE_0003\", \"totalValue\": 500, \"initialValueStrategy\": \"average\", \"parameters\": [{\"name\": \"parameter-0001\", \"metadata\": \"PARAMETER_0001\"}, {\"name\": \"parameter-0002\", \"metadata\": \"PARAMETER_0002\"}]}], \"rarityParameterModels\": [{\"name\": \"rarity-0001\", \"metadata\": \"RARITY_0001\", \"maximumParameterCount\": 5, \"parameterCounts\": [{\"count\": 0, \"weight\": 1}, {\"count\": 1, \"weight\": 2}, {\"count\": 2, \"weight\": 3}], \"parameters\": [{\"name\": \"parameter-0001\", \"metadata\": \"PARAMETER_0001\", \"resourceName\": \"resource-0001\", \"resourceValue\": 10, \"weight\": 1}, {\"name\": \"parameter-0002\", \"metadata\": \"PARAMETER_0002\", \"resourceName\": \"resource-0002\", \"resourceValue\": 20, \"weight\": 2}, {\"name\": \"parameter-0003\", \"metadata\": \"PARAMETER_0003\", \"resourceName\": \"resource-0003\", \"resourceValue\": 30, \"weight\": 3}]}, {\"name\": \"rarity-0002\", \"metadata\": \"RARITY_0002\", \"maximumParameterCount\": 10, \"parameterCounts\": [{\"count\": 1, \"weight\": 10}, {\"count\": 2, \"weight\": 20}, {\"count\": 3, \"weight\": 30}], \"parameters\": [{\"name\": \"parameter-1001\", \"metadata\": \"PARAMETER_1001\", \"resourceName\": \"resource-1001\", \"resourceValue\": 100, \"weight\": 10}, {\"name\": \"parameter-1002\", \"metadata\": \"PARAMETER_1002\", \"resourceName\": \"resource-1002\", \"resourceValue\": 200, \"weight\": 20}, {\"name\": \"parameter-1003\", \"metadata\": \"PARAMETER_1003\", \"resourceName\": \"resource-1003\", \"resourceValue\": 300, \"weight\": 30}]}, {\"name\": \"rarity-0003\", \"metadata\": \"RARITY_0003\", \"maximumParameterCount\": 3, \"parameterCounts\": [{\"count\": 2, \"weight\": 5}, {\"count\": 3, \"weight\": 10}, {\"count\": 4, \"weight\": 15}], \"parameters\": [{\"name\": \"parameter-2001\", \"metadata\": \"PARAMETER_2001\", \"resourceName\": \"resource-2001\", \"resourceValue\": 1000, \"weight\": 2}, {\"name\": \"parameter-2002\", \"metadata\": \"PARAMETER_2002\", \"resourceName\": \"resource-2002\", \"resourceValue\": 2000, \"weight\": 4}, {\"name\": \"parameter-2003\", \"metadata\": \"PARAMETER_2003\", \"resourceName\": \"resource-2003\", \"resourceValue\": 3000, \"weight\": 6}, {\"name\": \"parameter-0004\", \"metadata\": \"PARAMETER_0004\", \"resourceName\": \"resource-2004\", \"resourceValue\": 4000, \"weight\": 8}]}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.update_current_parameter_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-07-18 \\\" , \\\" balanceParameterModels \\\" : [{ \\\" name \\\" : \\\" balance-0001 \\\" , \\\" metadata \\\" : \\\" BALANCE_0001 \\\" , \\\" totalValue \\\" : 100, \\\" initialValueStrategy \\\" : \\\" average \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" }]}, { \\\" name \\\" : \\\" balance-0002 \\\" , \\\" metadata \\\" : \\\" BALANCE_0002 \\\" , \\\" totalValue \\\" : 200, \\\" initialValueStrategy \\\" : \\\" lottery \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" }, { \\\" name \\\" : \\\" parameter-0004 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0004 \\\" }]}, { \\\" name \\\" : \\\" balance-0003 \\\" , \\\" metadata \\\" : \\\" BALANCE_0003 \\\" , \\\" totalValue \\\" : 500, \\\" initialValueStrategy \\\" : \\\" average \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }]}], \\\" rarityParameterModels \\\" : [{ \\\" name \\\" : \\\" rarity-0001 \\\" , \\\" metadata \\\" : \\\" RARITY_0001 \\\" , \\\" maximumParameterCount \\\" : 5, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 0, \\\" weight \\\" : 1}, { \\\" count \\\" : 1, \\\" weight \\\" : 2}, { \\\" count \\\" : 2, \\\" weight \\\" : 3}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" , \\\" resourceName \\\" : \\\" resource-0001 \\\" , \\\" resourceValue \\\" : 10, \\\" weight \\\" : 1}, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" , \\\" resourceName \\\" : \\\" resource-0002 \\\" , \\\" resourceValue \\\" : 20, \\\" weight \\\" : 2}, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" , \\\" resourceName \\\" : \\\" resource-0003 \\\" , \\\" resourceValue \\\" : 30, \\\" weight \\\" : 3}]}, { \\\" name \\\" : \\\" rarity-0002 \\\" , \\\" metadata \\\" : \\\" RARITY_0002 \\\" , \\\" maximumParameterCount \\\" : 10, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 1, \\\" weight \\\" : 10}, { \\\" count \\\" : 2, \\\" weight \\\" : 20}, { \\\" count \\\" : 3, \\\" weight \\\" : 30}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-1001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1001 \\\" , \\\" resourceName \\\" : \\\" resource-1001 \\\" , \\\" resourceValue \\\" : 100, \\\" weight \\\" : 10}, { \\\" name \\\" : \\\" parameter-1002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1002 \\\" , \\\" resourceName \\\" : \\\" resource-1002 \\\" , \\\" resourceValue \\\" : 200, \\\" weight \\\" : 20}, { \\\" name \\\" : \\\" parameter-1003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1003 \\\" , \\\" resourceName \\\" : \\\" resource-1003 \\\" , \\\" resourceValue \\\" : 300, \\\" weight \\\" : 30}]}, { \\\" name \\\" : \\\" rarity-0003 \\\" , \\\" metadata \\\" : \\\" RARITY_0003 \\\" , \\\" maximumParameterCount \\\" : 3, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 2, \\\" weight \\\" : 5}, { \\\" count \\\" : 3, \\\" weight \\\" : 10}, { \\\" count \\\" : 4, \\\" weight \\\" : 15}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-2001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2001 \\\" , \\\" resourceName \\\" : \\\" resource-2001 \\\" , \\\" resourceValue \\\" : 1000, \\\" weight \\\" : 2}, { \\\" name \\\" : \\\" parameter-2002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2002 \\\" , \\\" resourceName \\\" : \\\" resource-2002 \\\" , \\\" resourceValue \\\" : 2000, \\\" weight \\\" : 4}, { \\\" name \\\" : \\\" parameter-2003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2003 \\\" , \\\" resourceName \\\" : \\\" resource-2003 \\\" , \\\" resourceValue \\\" : 3000, \\\" weight \\\" : 6}, { \\\" name \\\" : \\\" parameter-0004 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0004 \\\" , \\\" resourceName \\\" : \\\" resource-2004 \\\" , \\\" resourceValue \\\" : 4000, \\\" weight \\\" : 8}]}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.update_current_parameter_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-07-18 \\\" , \\\" balanceParameterModels \\\" : [{ \\\" name \\\" : \\\" balance-0001 \\\" , \\\" metadata \\\" : \\\" BALANCE_0001 \\\" , \\\" totalValue \\\" : 100, \\\" initialValueStrategy \\\" : \\\" average \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" }]}, { \\\" name \\\" : \\\" balance-0002 \\\" , \\\" metadata \\\" : \\\" BALANCE_0002 \\\" , \\\" totalValue \\\" : 200, \\\" initialValueStrategy \\\" : \\\" lottery \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" }, { \\\" name \\\" : \\\" parameter-0004 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0004 \\\" }]}, { \\\" name \\\" : \\\" balance-0003 \\\" , \\\" metadata \\\" : \\\" BALANCE_0003 \\\" , \\\" totalValue \\\" : 500, \\\" initialValueStrategy \\\" : \\\" average \\\" , \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" }, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" }]}], \\\" rarityParameterModels \\\" : [{ \\\" name \\\" : \\\" rarity-0001 \\\" , \\\" metadata \\\" : \\\" RARITY_0001 \\\" , \\\" maximumParameterCount \\\" : 5, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 0, \\\" weight \\\" : 1}, { \\\" count \\\" : 1, \\\" weight \\\" : 2}, { \\\" count \\\" : 2, \\\" weight \\\" : 3}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-0001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0001 \\\" , \\\" resourceName \\\" : \\\" resource-0001 \\\" , \\\" resourceValue \\\" : 10, \\\" weight \\\" : 1}, { \\\" name \\\" : \\\" parameter-0002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0002 \\\" , \\\" resourceName \\\" : \\\" resource-0002 \\\" , \\\" resourceValue \\\" : 20, \\\" weight \\\" : 2}, { \\\" name \\\" : \\\" parameter-0003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0003 \\\" , \\\" resourceName \\\" : \\\" resource-0003 \\\" , \\\" resourceValue \\\" : 30, \\\" weight \\\" : 3}]}, { \\\" name \\\" : \\\" rarity-0002 \\\" , \\\" metadata \\\" : \\\" RARITY_0002 \\\" , \\\" maximumParameterCount \\\" : 10, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 1, \\\" weight \\\" : 10}, { \\\" count \\\" : 2, \\\" weight \\\" : 20}, { \\\" count \\\" : 3, \\\" weight \\\" : 30}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-1001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1001 \\\" , \\\" resourceName \\\" : \\\" resource-1001 \\\" , \\\" resourceValue \\\" : 100, \\\" weight \\\" : 10}, { \\\" name \\\" : \\\" parameter-1002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1002 \\\" , \\\" resourceName \\\" : \\\" resource-1002 \\\" , \\\" resourceValue \\\" : 200, \\\" weight \\\" : 20}, { \\\" name \\\" : \\\" parameter-1003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_1003 \\\" , \\\" resourceName \\\" : \\\" resource-1003 \\\" , \\\" resourceValue \\\" : 300, \\\" weight \\\" : 30}]}, { \\\" name \\\" : \\\" rarity-0003 \\\" , \\\" metadata \\\" : \\\" RARITY_0003 \\\" , \\\" maximumParameterCount \\\" : 3, \\\" parameterCounts \\\" : [{ \\\" count \\\" : 2, \\\" weight \\\" : 5}, { \\\" count \\\" : 3, \\\" weight \\\" : 10}, { \\\" count \\\" : 4, \\\" weight \\\" : 15}], \\\" parameters \\\" : [{ \\\" name \\\" : \\\" parameter-2001 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2001 \\\" , \\\" resourceName \\\" : \\\" resource-2001 \\\" , \\\" resourceValue \\\" : 1000, \\\" weight \\\" : 2}, { \\\" name \\\" : \\\" parameter-2002 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2002 \\\" , \\\" resourceName \\\" : \\\" resource-2002 \\\" , \\\" resourceValue \\\" : 2000, \\\" weight \\\" : 4}, { \\\" name \\\" : \\\" parameter-2003 \\\" , \\\" metadata \\\" : \\\" PARAMETER_2003 \\\" , \\\" resourceName \\\" : \\\" resource-2003 \\\" , \\\" resourceValue \\\" : 3000, \\\" weight \\\" : 6}, { \\\" name \\\" : \\\" parameter-0004 \\\" , \\\" metadata \\\" : \\\" PARAMETER_0004 \\\" , \\\" resourceName \\\" : \\\" resource-2004 \\\" , \\\" resourceValue \\\" : 4000, \\\" weight \\\" : 8}]}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentParameterMasterFromGitHub 현재 유효한 파라미터 모델의 마스터 데이터를 GitHub 에서 업데이트 GitHub 리포지토리에서 직접 마스터 데이터를 가져와 업데이트·유효화(공개)합니다. 체크아웃 설정에는 사용할 리포지토리, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고 직접 배포할 때 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentParameterMaster 업데이트된 현재 유효한 파라미터 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentParameterMasterFromGitHub ( \u0026 enchant . UpdateCurrentParameterMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 enchant . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\UpdateCurrentParameterMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e updateCurrentParameterMasterFromGitHub ( ( new UpdateCurrentParameterMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.UpdateCurrentParameterMasterFromGitHubRequest ; import io.gs2.enchant.result.UpdateCurrentParameterMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { UpdateCurrentParameterMasterFromGitHubResult result = client . updateCurrentParameterMasterFromGitHub ( new UpdateCurrentParameterMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentParameterMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . UpdateCurrentParameterMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentParameterMasterFromGitHub ( new Gs2 . Gs2Enchant . Request . UpdateCurrentParameterMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Enchant . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . updateCurrentParameterMasterFromGitHub ( new Gs2Enchant . UpdateCurrentParameterMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Enchant . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . update_current_parameter_master_from_git_hub ( enchant . UpdateCurrentParameterMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( enchant . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.update_current_parameter_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.update_current_parameter_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeBalanceParameterModelMasters 밸런스 파라미터 모델 마스터 목록을 조회 이름의 접두사 필터링이 가능한, 편집 가능한 밸런스 파라미터 모델 마스터의 페이지네이션 목록을 조회합니다. 밸런스 파라미터 모델 마스터는 밸런스 파라미터 세트의 편집 가능한 정의입니다. 마스터에 대한 변경 사항은 CurrentParameterMaster API 로 마스터 데이터를 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 밸런스 파라미터 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 밸런스 파라미터 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeBalanceParameterModelMasters ( \u0026 enchant . DescribeBalanceParameterModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeBalanceParameterModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeBalanceParameterModelMasters ( ( new DescribeBalanceParameterModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeBalanceParameterModelMastersRequest ; import io.gs2.enchant.result.DescribeBalanceParameterModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeBalanceParameterModelMastersResult result = client . describeBalanceParameterModelMasters ( new DescribeBalanceParameterModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List BalanceParameterModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeBalanceParameterModelMastersResult \u003e asyncResult = null ; yield return client . DescribeBalanceParameterModelMasters ( new Gs2 . Gs2Enchant . Request . DescribeBalanceParameterModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeBalanceParameterModelMasters ( new Gs2Enchant . DescribeBalanceParameterModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_balance_parameter_model_masters ( enchant . DescribeBalanceParameterModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_balance_parameter_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_balance_parameter_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createBalanceParameterModelMaster 밸런스 파라미터 모델 마스터를 신규 생성 새로운 편집 가능한 밸런스 파라미터 모델 마스터 정의를 생성합니다. 합계값은 파라미터에 분배되는 총합을 지정하며, 초기값 전략은 값이 어떻게 초기 할당되는지를 결정합니다. 파라미터는 값의 범위를 가진 개별 파라미터 슬롯을 정의합니다. 변경 사항은 CurrentParameterMaster API 로 마스터 데이터를 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 밸런스 파라미터 모델명 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. totalValue long  0 ~ 9223372036854775805 합계값 모든 파라미터 슬롯에 분배되는 고정된 합계값입니다. 파라미터가 추첨될 때, 사용되는 배분 방식과 관계없이 개별 값의 합계는 항상 이 합계값이 됩니다. initialValueStrategy 문자열 열거형 enum {   “average”,   “lottery” } “average” 초기값 설정 방침 최초 할당 시 합계값을 파라미터 슬롯에 어떻게 분배할지를 결정합니다. average 는 합계값을 모든 파라미터에 균등하게 분배하고, lottery 는 합계값을 무작위로 분배하여 다양한 파라미터 조합을 만듭니다. 정의 설명 average 평균값 lottery 추첨 parameters List  1 ~ 10 items 밸런스 파라미터 값 모델 목록 이 밸런스 파라미터에서 사용 가능한 파라미터 슬롯을 정의합니다. 각 엔트리는 이름이 지정된 파라미터 슬롯(예: ATK, DEF, SPD)을 선택적 메타데이터와 함께 지정합니다. 합계값은 이 슬롯들에 분배됩니다. Result 타입 설명 item BalanceParameterModelMaster 생성한 밸런스 파라미터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . CreateBalanceParameterModelMaster ( \u0026 enchant . CreateBalanceParameterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"balance-0001\" ), Description : nil , Metadata : nil , TotalValue : pointy . Int64 ( 100 ), InitialValueStrategy : pointy . String ( \"average\" ), Parameters : [] enchant . BalanceParameterValueModel { enchant . BalanceParameterValueModel { Name : pointy . String ( \"parameter-0001\" ), }, enchant . BalanceParameterValueModel { Name : pointy . String ( \"parameter-0002\" ), }, enchant . BalanceParameterValueModel { Name : pointy . String ( \"parameter-0003\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\CreateBalanceParameterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e createBalanceParameterModelMaster ( ( new CreateBalanceParameterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"balance-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withTotalValue ( 100 ) -\u003e withInitialValueStrategy ( \"average\" ) -\u003e withParameters ([ ( new \\Gs2\\Enchant\\Model\\BalanceParameterValueModel ()) -\u003e withName ( \"parameter-0001\" ), ( new \\Gs2\\Enchant\\Model\\BalanceParameterValueModel ()) -\u003e withName ( \"parameter-0002\" ), ( new \\Gs2\\Enchant\\Model\\BalanceParameterValueModel ()) -\u003e withName ( \"parameter-0003\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.CreateBalanceParameterModelMasterRequest ; import io.gs2.enchant.result.CreateBalanceParameterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { CreateBalanceParameterModelMasterResult result = client . createBalanceParameterModelMaster ( new CreateBalanceParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"balance-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withTotalValue ( 100L ) . withInitialValueStrategy ( \"average\" ) . withParameters ( Arrays . asList ( new io . gs2 . enchant . model . BalanceParameterValueModel () . withName ( \"parameter-0001\" ), new io . gs2 . enchant . model . BalanceParameterValueModel () . withName ( \"parameter-0002\" ), new io . gs2 . enchant . model . BalanceParameterValueModel () . withName ( \"parameter-0003\" ) )) ); BalanceParameterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . CreateBalanceParameterModelMasterResult \u003e asyncResult = null ; yield return client . CreateBalanceParameterModelMaster ( new Gs2 . Gs2Enchant . Request . CreateBalanceParameterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"balance-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithTotalValue ( 100L ) . WithInitialValueStrategy ( \"average\" ) . WithParameters ( new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel [] { new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel () . WithName ( \"parameter-0001\" ), new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel () . WithName ( \"parameter-0002\" ), new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel () . WithName ( \"parameter-0003\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . createBalanceParameterModelMaster ( new Gs2Enchant . CreateBalanceParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"balance-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withTotalValue ( 100 ) . withInitialValueStrategy ( \"average\" ) . withParameters ([ new Gs2Enchant . model . BalanceParameterValueModel () . withName ( \"parameter-0001\" ), new Gs2Enchant . model . BalanceParameterValueModel () . withName ( \"parameter-0002\" ), new Gs2Enchant . model . BalanceParameterValueModel () . withName ( \"parameter-0003\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . create_balance_parameter_model_master ( enchant . CreateBalanceParameterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'balance-0001' ) . with_description ( None ) . with_metadata ( None ) . with_total_value ( 100 ) . with_initial_value_strategy ( 'average' ) . with_parameters ([ enchant . BalanceParameterValueModel () . with_name ( 'parameter-0001' ), enchant . BalanceParameterValueModel () . with_name ( 'parameter-0002' ), enchant . BalanceParameterValueModel () . with_name ( 'parameter-0003' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.create_balance_parameter_model_master ({ namespaceName = \"namespace-0001\" , name = \"balance-0001\" , description = nil , metadata = nil , totalValue = 100 , initialValueStrategy = \"average\" , parameters = { { name = \"parameter-0001\" , }, { name = \"parameter-0002\" , }, { name = \"parameter-0003\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.create_balance_parameter_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"balance-0001\" , description = nil , metadata = nil , totalValue = 100 , initialValueStrategy = \"average\" , parameters = { { name = \"parameter-0001\" , }, { name = \"parameter-0002\" , }, { name = \"parameter-0003\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBalanceParameterModelMaster 밸런스 파라미터 모델 마스터 데이터를 조회 이름을 지정하여, 특정 편집 가능한 밸런스 파라미터 모델 마스터의 상세 정보를 조회합니다. 유효화하기 전의 마스터 정의를 열람 및 편집하는 데 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 밸런스 파라미터 모델명 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item BalanceParameterModelMaster 밸런스 파라미터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetBalanceParameterModelMaster ( \u0026 enchant . GetBalanceParameterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetBalanceParameterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getBalanceParameterModelMaster ( ( new GetBalanceParameterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetBalanceParameterModelMasterRequest ; import io.gs2.enchant.result.GetBalanceParameterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetBalanceParameterModelMasterResult result = client . getBalanceParameterModelMaster ( new GetBalanceParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"balance-0001\" ) ); BalanceParameterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetBalanceParameterModelMasterResult \u003e asyncResult = null ; yield return client . GetBalanceParameterModelMaster ( new Gs2 . Gs2Enchant . Request . GetBalanceParameterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"balance-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getBalanceParameterModelMaster ( new Gs2Enchant . GetBalanceParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"balance-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_balance_parameter_model_master ( enchant . GetBalanceParameterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'balance-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_balance_parameter_model_master ({ namespaceName = \"namespace-0001\" , parameterName = \"balance-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_balance_parameter_model_master_async ({ namespaceName = \"namespace-0001\" , parameterName = \"balance-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateBalanceParameterModelMaster 밸런스 파라미터 모델 마스터를 업데이트 기존 밸런스 파라미터 모델 마스터의 설명, 메타데이터, 합계값, 초기값 전략, 파라미터를 업데이트합니다. 파라미터 모델 이름은 생성 후에는 변경할 수 없습니다. 변경 사항은 CurrentParameterMaster API 로 마스터 데이터를 다시 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 밸런스 파라미터 모델명 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. totalValue long  0 ~ 9223372036854775805 합계값 모든 파라미터 슬롯에 분배되는 고정된 합계값입니다. 파라미터가 추첨될 때, 사용되는 배분 방식과 관계없이 개별 값의 합계는 항상 이 합계값이 됩니다. initialValueStrategy 문자열 열거형 enum {   “average”,   “lottery” } “average” 초기값 설정 방침 최초 할당 시 합계값을 파라미터 슬롯에 어떻게 분배할지를 결정합니다. average 는 합계값을 모든 파라미터에 균등하게 분배하고, lottery 는 합계값을 무작위로 분배하여 다양한 파라미터 조합을 만듭니다. 정의 설명 average 평균값 lottery 추첨 parameters List  1 ~ 10 items 밸런스 파라미터 값 모델 목록 이 밸런스 파라미터에서 사용 가능한 파라미터 슬롯을 정의합니다. 각 엔트리는 이름이 지정된 파라미터 슬롯(예: ATK, DEF, SPD)을 선택적 메타데이터와 함께 지정합니다. 합계값은 이 슬롯들에 분배됩니다. Result 타입 설명 item BalanceParameterModelMaster 업데이트한 밸런스 파라미터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . UpdateBalanceParameterModelMaster ( \u0026 enchant . UpdateBalanceParameterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"BALANCE_0001\" ), TotalValue : pointy . Int64 ( 200 ), InitialValueStrategy : pointy . String ( \"lottery\" ), Parameters : [] enchant . BalanceParameterValueModel { enchant . BalanceParameterValueModel { Name : pointy . String ( \"parameter-1001\" ), }, enchant . BalanceParameterValueModel { Name : pointy . String ( \"parameter-1002\" ), }, enchant . BalanceParameterValueModel { Name : pointy . String ( \"parameter-1003\" ), }, enchant . BalanceParameterValueModel { Name : pointy . String ( \"parameter-1004\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\UpdateBalanceParameterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e updateBalanceParameterModelMaster ( ( new UpdateBalanceParameterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"BALANCE_0001\" ) -\u003e withTotalValue ( 200 ) -\u003e withInitialValueStrategy ( \"lottery\" ) -\u003e withParameters ([ ( new \\Gs2\\Enchant\\Model\\BalanceParameterValueModel ()) -\u003e withName ( \"parameter-1001\" ), ( new \\Gs2\\Enchant\\Model\\BalanceParameterValueModel ()) -\u003e withName ( \"parameter-1002\" ), ( new \\Gs2\\Enchant\\Model\\BalanceParameterValueModel ()) -\u003e withName ( \"parameter-1003\" ), ( new \\Gs2\\Enchant\\Model\\BalanceParameterValueModel ()) -\u003e withName ( \"parameter-1004\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.UpdateBalanceParameterModelMasterRequest ; import io.gs2.enchant.result.UpdateBalanceParameterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { UpdateBalanceParameterModelMasterResult result = client . updateBalanceParameterModelMaster ( new UpdateBalanceParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"balance-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"BALANCE_0001\" ) . withTotalValue ( 200L ) . withInitialValueStrategy ( \"lottery\" ) . withParameters ( Arrays . asList ( new io . gs2 . enchant . model . BalanceParameterValueModel () . withName ( \"parameter-1001\" ), new io . gs2 . enchant . model . BalanceParameterValueModel () . withName ( \"parameter-1002\" ), new io . gs2 . enchant . model . BalanceParameterValueModel () . withName ( \"parameter-1003\" ), new io . gs2 . enchant . model . BalanceParameterValueModel () . withName ( \"parameter-1004\" ) )) ); BalanceParameterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . UpdateBalanceParameterModelMasterResult \u003e asyncResult = null ; yield return client . UpdateBalanceParameterModelMaster ( new Gs2 . Gs2Enchant . Request . UpdateBalanceParameterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"balance-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"BALANCE_0001\" ) . WithTotalValue ( 200L ) . WithInitialValueStrategy ( \"lottery\" ) . WithParameters ( new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel [] { new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel () . WithName ( \"parameter-1001\" ), new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel () . WithName ( \"parameter-1002\" ), new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel () . WithName ( \"parameter-1003\" ), new Gs2 . Gs2Enchant . Model . BalanceParameterValueModel () . WithName ( \"parameter-1004\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . updateBalanceParameterModelMaster ( new Gs2Enchant . UpdateBalanceParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"balance-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"BALANCE_0001\" ) . withTotalValue ( 200 ) . withInitialValueStrategy ( \"lottery\" ) . withParameters ([ new Gs2Enchant . model . BalanceParameterValueModel () . withName ( \"parameter-1001\" ), new Gs2Enchant . model . BalanceParameterValueModel () . withName ( \"parameter-1002\" ), new Gs2Enchant . model . BalanceParameterValueModel () . withName ( \"parameter-1003\" ), new Gs2Enchant . model . BalanceParameterValueModel () . withName ( \"parameter-1004\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . update_balance_parameter_model_master ( enchant . UpdateBalanceParameterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'balance-0001' ) . with_description ( 'description1' ) . with_metadata ( 'BALANCE_0001' ) . with_total_value ( 200 ) . with_initial_value_strategy ( 'lottery' ) . with_parameters ([ enchant . BalanceParameterValueModel () . with_name ( 'parameter-1001' ), enchant . BalanceParameterValueModel () . with_name ( 'parameter-1002' ), enchant . BalanceParameterValueModel () . with_name ( 'parameter-1003' ), enchant . BalanceParameterValueModel () . with_name ( 'parameter-1004' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.update_balance_parameter_model_master ({ namespaceName = \"namespace-0001\" , parameterName = \"balance-0001\" , description = \"description1\" , metadata = \"BALANCE_0001\" , totalValue = 200 , initialValueStrategy = \"lottery\" , parameters = { { name = \"parameter-1001\" , }, { name = \"parameter-1002\" , }, { name = \"parameter-1003\" , }, { name = \"parameter-1004\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.update_balance_parameter_model_master_async ({ namespaceName = \"namespace-0001\" , parameterName = \"balance-0001\" , description = \"description1\" , metadata = \"BALANCE_0001\" , totalValue = 200 , initialValueStrategy = \"lottery\" , parameters = { { name = \"parameter-1001\" , }, { name = \"parameter-1002\" , }, { name = \"parameter-1003\" , }, { name = \"parameter-1004\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteBalanceParameterModelMaster 밸런스 파라미터 모델 마스터를 삭제 편집 가능한 밸런스 파라미터 모델 마스터 정의를 삭제합니다. 마스터 데이터에만 영향을 미치며, 현재 유효화(공개)되어 있는 모델은 마스터 데이터가 다시 유효화될 때까지 영향을 받지 않습니다. 삭제된 모델과 관련된 기존 사용자 파라미터 상태는 자동으로 삭제되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 밸런스 파라미터 모델명 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item BalanceParameterModelMaster 삭제한 밸런스 파라미터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DeleteBalanceParameterModelMaster ( \u0026 enchant . DeleteBalanceParameterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"balance-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DeleteBalanceParameterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e deleteBalanceParameterModelMaster ( ( new DeleteBalanceParameterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"balance-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DeleteBalanceParameterModelMasterRequest ; import io.gs2.enchant.result.DeleteBalanceParameterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DeleteBalanceParameterModelMasterResult result = client . deleteBalanceParameterModelMaster ( new DeleteBalanceParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"balance-0001\" ) ); BalanceParameterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DeleteBalanceParameterModelMasterResult \u003e asyncResult = null ; yield return client . DeleteBalanceParameterModelMaster ( new Gs2 . Gs2Enchant . Request . DeleteBalanceParameterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"balance-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . deleteBalanceParameterModelMaster ( new Gs2Enchant . DeleteBalanceParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"balance-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . delete_balance_parameter_model_master ( enchant . DeleteBalanceParameterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'balance-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.delete_balance_parameter_model_master ({ namespaceName = \"namespace-0001\" , parameterName = \"balance-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.delete_balance_parameter_model_master_async ({ namespaceName = \"namespace-0001\" , parameterName = \"balance-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRarityParameterModelMasters 레어리티 파라미터 모델 마스터 목록 조회 편집 가능한 레어리티 파라미터 모델 마스터의 페이지네이션 리스트를 조회합니다. 레어리티 파라미터 모델 마스터는 레어리티 기반 파라미터 세트의 편집 가능한 정의입니다. 마스터에 대한 변경 사항은 CurrentParameterMaster API로 마스터 데이터를 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 레어리티 파라미터 모델 마스터의 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DescribeRarityParameterModelMasters ( \u0026 enchant . DescribeRarityParameterModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DescribeRarityParameterModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e describeRarityParameterModelMasters ( ( new DescribeRarityParameterModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DescribeRarityParameterModelMastersRequest ; import io.gs2.enchant.result.DescribeRarityParameterModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DescribeRarityParameterModelMastersResult result = client . describeRarityParameterModelMasters ( new DescribeRarityParameterModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List RarityParameterModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DescribeRarityParameterModelMastersResult \u003e asyncResult = null ; yield return client . DescribeRarityParameterModelMasters ( new Gs2 . Gs2Enchant . Request . DescribeRarityParameterModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . describeRarityParameterModelMasters ( new Gs2Enchant . DescribeRarityParameterModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . describe_rarity_parameter_model_masters ( enchant . DescribeRarityParameterModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.describe_rarity_parameter_model_masters ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enchant' ) api_result_handler = client.describe_rarity_parameter_model_masters_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createRarityParameterModelMaster 레어리티 파라미터 모델 마스터를 신규 작성 새로운 편집 가능한 레어리티 파라미터 모델 마스터 정의를 작성합니다. 최대 파라미터 수는 파라미터 슬롯의 상한을 지정하며, 파라미터 수 분포는 슬롯이 몇 개 채워질지에 대한 확률 분포를 정의합니다. 파라미터는 레어리티 기반 추첨 가중치가 포함된, 취할 수 있는 값을 정의합니다. 변경 사항은 CurrentParameterMaster API로 마스터 데이터를 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 레어리티 파라미터 모델 이름 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParameterCount int  1 ~ 10 부여할 파라미터의 최대 수 리소스에 부여할 수 있는 파라미터 슬롯 수의 상한입니다. 실제로 부여되는 수는 부여 수 모델 목록에서의 가중 추첨으로 결정되지만, 이 값을 초과하지 않습니다. parameterCounts List  1 ~ 10 items 레어리티 파라미터의 부여 수 모델 목록 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨 엔트리를 정의합니다. 각 엔트리는 부여 수와 추첨 가중치를 지정합니다. 가중치가 클수록 해당 부여 수가 선택될 확률이 높아집니다. parameters List  1 ~ 1000 items 레어리티 파라미터 값 모델 목록 추첨 가능한 파라미터 값의 풀을 정의합니다. 각 엔트리는 파라미터 이름, 리소스 상세 정보, 추첨 가중치를 지정합니다. 파라미터 슬롯을 채울 때, 이 풀에서 중복 없이 가중 추첨으로 값이 선택됩니다. Result 타입 설명 item RarityParameterModelMaster 작성한 레어리티 파라미터 모델 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . CreateRarityParameterModelMaster ( \u0026 enchant . CreateRarityParameterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"rarity-0001\" ), Description : nil , Metadata : nil , MaximumParameterCount : pointy . Int32 ( 5 ), ParameterCounts : [] enchant . RarityParameterCountModel { enchant . RarityParameterCountModel { Count : pointy . Int32 ( 0 ), Weight : pointy . Int32 ( 1 ), }, enchant . RarityParameterCountModel { Count : pointy . Int32 ( 1 ), Weight : pointy . Int32 ( 2 ), }, enchant . RarityParameterCountModel { Count : pointy . Int32 ( 2 ), Weight : pointy . Int32 ( 3 ), }, }, Parameters : [] enchant . RarityParameterValueModel { enchant . RarityParameterValueModel { Name : pointy . String ( \"parameter-0001\" ), ResourceName : pointy . String ( \"resource-0001\" ), ResourceValue : pointy . Int64 ( 100 ), Weight : pointy . Int32 ( 1 ), }, enchant . RarityParameterValueModel { Name : pointy . String ( \"parameter-0002\" ), ResourceName : pointy . String ( \"resource-0002\" ), ResourceValue : pointy . Int64 ( 200 ), Weight : pointy . Int32 ( 2 ), }, enchant . RarityParameterValueModel { Name : pointy . String ( \"parameter-0003\" ), ResourceName : pointy . String ( \"resource-0003\" ), ResourceValue : pointy . Int64 ( 300 ), Weight : pointy . Int32 ( 3 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\CreateRarityParameterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e createRarityParameterModelMaster ( ( new CreateRarityParameterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"rarity-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withMaximumParameterCount ( 5 ) -\u003e withParameterCounts ([ ( new \\Gs2\\Enchant\\Model\\RarityParameterCountModel ()) -\u003e withCount ( 0 ) -\u003e withWeight ( 1 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterCountModel ()) -\u003e withCount ( 1 ) -\u003e withWeight ( 2 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterCountModel ()) -\u003e withCount ( 2 ) -\u003e withWeight ( 3 ), ]) -\u003e withParameters ([ ( new \\Gs2\\Enchant\\Model\\RarityParameterValueModel ()) -\u003e withName ( \"parameter-0001\" ) -\u003e withResourceName ( \"resource-0001\" ) -\u003e withResourceValue ( 100 ) -\u003e withWeight ( 1 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterValueModel ()) -\u003e withName ( \"parameter-0002\" ) -\u003e withResourceName ( \"resource-0002\" ) -\u003e withResourceValue ( 200 ) -\u003e withWeight ( 2 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterValueModel ()) -\u003e withName ( \"parameter-0003\" ) -\u003e withResourceName ( \"resource-0003\" ) -\u003e withResourceValue ( 300 ) -\u003e withWeight ( 3 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.CreateRarityParameterModelMasterRequest ; import io.gs2.enchant.result.CreateRarityParameterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { CreateRarityParameterModelMasterResult result = client . createRarityParameterModelMaster ( new CreateRarityParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"rarity-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMaximumParameterCount ( 5 ) . withParameterCounts ( Arrays . asList ( new io . gs2 . enchant . model . RarityParameterCountModel () . withCount ( 0 ) . withWeight ( 1 ), new io . gs2 . enchant . model . RarityParameterCountModel () . withCount ( 1 ) . withWeight ( 2 ), new io . gs2 . enchant . model . RarityParameterCountModel () . withCount ( 2 ) . withWeight ( 3 ) )) . withParameters ( Arrays . asList ( new io . gs2 . enchant . model . RarityParameterValueModel () . withName ( \"parameter-0001\" ) . withResourceName ( \"resource-0001\" ) . withResourceValue ( 100L ) . withWeight ( 1 ), new io . gs2 . enchant . model . RarityParameterValueModel () . withName ( \"parameter-0002\" ) . withResourceName ( \"resource-0002\" ) . withResourceValue ( 200L ) . withWeight ( 2 ), new io . gs2 . enchant . model . RarityParameterValueModel () . withName ( \"parameter-0003\" ) . withResourceName ( \"resource-0003\" ) . withResourceValue ( 300L ) . withWeight ( 3 ) )) ); RarityParameterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . CreateRarityParameterModelMasterResult \u003e asyncResult = null ; yield return client . CreateRarityParameterModelMaster ( new Gs2 . Gs2Enchant . Request . CreateRarityParameterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"rarity-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithMaximumParameterCount ( 5 ) . WithParameterCounts ( new Gs2 . Gs2Enchant . Model . RarityParameterCountModel [] { new Gs2 . Gs2Enchant . Model . RarityParameterCountModel () . WithCount ( 0 ) . WithWeight ( 1 ), new Gs2 . Gs2Enchant . Model . RarityParameterCountModel () . WithCount ( 1 ) . WithWeight ( 2 ), new Gs2 . Gs2Enchant . Model . RarityParameterCountModel () . WithCount ( 2 ) . WithWeight ( 3 ), }) . WithParameters ( new Gs2 . Gs2Enchant . Model . RarityParameterValueModel [] { new Gs2 . Gs2Enchant . Model . RarityParameterValueModel () . WithName ( \"parameter-0001\" ) . WithResourceName ( \"resource-0001\" ) . WithResourceValue ( 100L ) . WithWeight ( 1 ), new Gs2 . Gs2Enchant . Model . RarityParameterValueModel () . WithName ( \"parameter-0002\" ) . WithResourceName ( \"resource-0002\" ) . WithResourceValue ( 200L ) . WithWeight ( 2 ), new Gs2 . Gs2Enchant . Model . RarityParameterValueModel () . WithName ( \"parameter-0003\" ) . WithResourceName ( \"resource-0003\" ) . WithResourceValue ( 300L ) . WithWeight ( 3 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . createRarityParameterModelMaster ( new Gs2Enchant . CreateRarityParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"rarity-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMaximumParameterCount ( 5 ) . withParameterCounts ([ new Gs2Enchant . model . RarityParameterCountModel () . withCount ( 0 ) . withWeight ( 1 ), new Gs2Enchant . model . RarityParameterCountModel () . withCount ( 1 ) . withWeight ( 2 ), new Gs2Enchant . model . RarityParameterCountModel () . withCount ( 2 ) . withWeight ( 3 ), ]) . withParameters ([ new Gs2Enchant . model . RarityParameterValueModel () . withName ( \"parameter-0001\" ) . withResourceName ( \"resource-0001\" ) . withResourceValue ( 100 ) . withWeight ( 1 ), new Gs2Enchant . model . RarityParameterValueModel () . withName ( \"parameter-0002\" ) . withResourceName ( \"resource-0002\" ) . withResourceValue ( 200 ) . withWeight ( 2 ), new Gs2Enchant . model . RarityParameterValueModel () . withName ( \"parameter-0003\" ) . withResourceName ( \"resource-0003\" ) . withResourceValue ( 300 ) . withWeight ( 3 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . create_rarity_parameter_model_master ( enchant . CreateRarityParameterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'rarity-0001' ) . with_description ( None ) . with_metadata ( None ) . with_maximum_parameter_count ( 5 ) . with_parameter_counts ([ enchant . RarityParameterCountModel () . with_count ( 0 ) . with_weight ( 1 ), enchant . RarityParameterCountModel () . with_count ( 1 ) . with_weight ( 2 ), enchant . RarityParameterCountModel () . with_count ( 2 ) . with_weight ( 3 ), ]) . with_parameters ([ enchant . RarityParameterValueModel () . with_name ( 'parameter-0001' ) . with_resource_name ( 'resource-0001' ) . with_resource_value ( 100 ) . with_weight ( 1 ), enchant . RarityParameterValueModel () . with_name ( 'parameter-0002' ) . with_resource_name ( 'resource-0002' ) . with_resource_value ( 200 ) . with_weight ( 2 ), enchant . RarityParameterValueModel () . with_name ( 'parameter-0003' ) . with_resource_name ( 'resource-0003' ) . with_resource_value ( 300 ) . with_weight ( 3 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.create_rarity_parameter_model_master ({ namespaceName = \"namespace-0001\" , name = \"rarity-0001\" , description = nil , metadata = nil , maximumParameterCount = 5 , parameterCounts = { { count = 0 , weight = 1 , }, { count = 1 , weight = 2 , }, { count = 2 , weight = 3 , } }, parameters = { { name = \"parameter-0001\" , resourceName = \"resource-0001\" , resourceValue = 100 , weight = 1 , }, { name = \"parameter-0002\" , resourceName = \"resource-0002\" , resourceValue = 200 , weight = 2 , }, { name = \"parameter-0003\" , resourceName = \"resource-0003\" , resourceValue = 300 , weight = 3 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.create_rarity_parameter_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"rarity-0001\" , description = nil , metadata = nil , maximumParameterCount = 5 , parameterCounts = { { count = 0 , weight = 1 , }, { count = 1 , weight = 2 , }, { count = 2 , weight = 3 , } }, parameters = { { name = \"parameter-0001\" , resourceName = \"resource-0001\" , resourceValue = 100 , weight = 1 , }, { name = \"parameter-0002\" , resourceName = \"resource-0002\" , resourceValue = 200 , weight = 2 , }, { name = \"parameter-0003\" , resourceName = \"resource-0003\" , resourceValue = 300 , weight = 3 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRarityParameterModelMaster 레어리티 파라미터 모델 마스터를 조회 이름을 지정하여 특정 편집 가능한 레어리티 파라미터 모델 마스터의 상세 정보를 조회합니다. 유효화 전 마스터 정의의 열람·편집에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델 이름 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item RarityParameterModelMaster 레어리티 파라미터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . GetRarityParameterModelMaster ( \u0026 enchant . GetRarityParameterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\GetRarityParameterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e getRarityParameterModelMaster ( ( new GetRarityParameterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.GetRarityParameterModelMasterRequest ; import io.gs2.enchant.result.GetRarityParameterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { GetRarityParameterModelMasterResult result = client . getRarityParameterModelMaster ( new GetRarityParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) ); RarityParameterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . GetRarityParameterModelMasterResult \u003e asyncResult = null ; yield return client . GetRarityParameterModelMaster ( new Gs2 . Gs2Enchant . Request . GetRarityParameterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"rarity-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . getRarityParameterModelMaster ( new Gs2Enchant . GetRarityParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . get_rarity_parameter_model_master ( enchant . GetRarityParameterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'rarity-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.get_rarity_parameter_model_master ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.get_rarity_parameter_model_master_async ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRarityParameterModelMaster 레어리티 파라미터 모델 마스터를 업데이트 기존 레어리티 파라미터 모델 마스터의 설명, 메타데이터, 최대 파라미터 수, 파라미터 수 분포, 파라미터를 업데이트합니다. 파라미터 모델 이름은 작성 후 변경할 수 없습니다. 변경 사항은 CurrentParameterMaster API로 마스터 데이터를 다시 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델 이름 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParameterCount int  1 ~ 10 부여할 파라미터의 최대 수 리소스에 부여할 수 있는 파라미터 슬롯 수의 상한입니다. 실제로 부여되는 수는 부여 수 모델 목록에서의 가중 추첨으로 결정되지만, 이 값을 초과하지 않습니다. parameterCounts List  1 ~ 10 items 레어리티 파라미터의 부여 수 모델 목록 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨 엔트리를 정의합니다. 각 엔트리는 부여 수와 추첨 가중치를 지정합니다. 가중치가 클수록 해당 부여 수가 선택될 확률이 높아집니다. parameters List  1 ~ 1000 items 레어리티 파라미터 값 모델 목록 추첨 가능한 파라미터 값의 풀을 정의합니다. 각 엔트리는 파라미터 이름, 리소스 상세 정보, 추첨 가중치를 지정합니다. 파라미터 슬롯을 채울 때, 이 풀에서 중복 없이 가중 추첨으로 값이 선택됩니다. Result 타입 설명 item RarityParameterModelMaster 업데이트한 레어리티 파라미터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . UpdateRarityParameterModelMaster ( \u0026 enchant . UpdateRarityParameterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"RARITY_0001\" ), MaximumParameterCount : pointy . Int32 ( 10 ), ParameterCounts : [] enchant . RarityParameterCountModel { enchant . RarityParameterCountModel { Count : pointy . Int32 ( 5 ), Weight : pointy . Int32 ( 3 ), }, enchant . RarityParameterCountModel { Count : pointy . Int32 ( 10 ), Weight : pointy . Int32 ( 5 ), }, enchant . RarityParameterCountModel { Count : pointy . Int32 ( 3 ), Weight : pointy . Int32 ( 10 ), }, }, Parameters : [] enchant . RarityParameterValueModel { enchant . RarityParameterValueModel { Name : pointy . String ( \"parameter-1001\" ), ResourceName : pointy . String ( \"resource-1001\" ), ResourceValue : pointy . Int64 ( 10 ), Weight : pointy . Int32 ( 10 ), }, enchant . RarityParameterValueModel { Name : pointy . String ( \"parameter-1002\" ), ResourceName : pointy . String ( \"resource-1002\" ), ResourceValue : pointy . Int64 ( 20 ), Weight : pointy . Int32 ( 20 ), }, enchant . RarityParameterValueModel { Name : pointy . String ( \"parameter-1003\" ), ResourceName : pointy . String ( \"resource-1003\" ), ResourceValue : pointy . Int64 ( 30 ), Weight : pointy . Int32 ( 30 ), }, enchant . RarityParameterValueModel { Name : pointy . String ( \"parameter-1004\" ), ResourceName : pointy . String ( \"resource-1004\" ), ResourceValue : pointy . Int64 ( 40 ), Weight : pointy . Int32 ( 40 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\UpdateRarityParameterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e updateRarityParameterModelMaster ( ( new UpdateRarityParameterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"RARITY_0001\" ) -\u003e withMaximumParameterCount ( 10 ) -\u003e withParameterCounts ([ ( new \\Gs2\\Enchant\\Model\\RarityParameterCountModel ()) -\u003e withCount ( 5 ) -\u003e withWeight ( 3 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterCountModel ()) -\u003e withCount ( 10 ) -\u003e withWeight ( 5 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterCountModel ()) -\u003e withCount ( 3 ) -\u003e withWeight ( 10 ), ]) -\u003e withParameters ([ ( new \\Gs2\\Enchant\\Model\\RarityParameterValueModel ()) -\u003e withName ( \"parameter-1001\" ) -\u003e withResourceName ( \"resource-1001\" ) -\u003e withResourceValue ( 10 ) -\u003e withWeight ( 10 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterValueModel ()) -\u003e withName ( \"parameter-1002\" ) -\u003e withResourceName ( \"resource-1002\" ) -\u003e withResourceValue ( 20 ) -\u003e withWeight ( 20 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterValueModel ()) -\u003e withName ( \"parameter-1003\" ) -\u003e withResourceName ( \"resource-1003\" ) -\u003e withResourceValue ( 30 ) -\u003e withWeight ( 30 ), ( new \\Gs2\\Enchant\\Model\\RarityParameterValueModel ()) -\u003e withName ( \"parameter-1004\" ) -\u003e withResourceName ( \"resource-1004\" ) -\u003e withResourceValue ( 40 ) -\u003e withWeight ( 40 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.UpdateRarityParameterModelMasterRequest ; import io.gs2.enchant.result.UpdateRarityParameterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { UpdateRarityParameterModelMasterResult result = client . updateRarityParameterModelMaster ( new UpdateRarityParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"RARITY_0001\" ) . withMaximumParameterCount ( 10 ) . withParameterCounts ( Arrays . asList ( new io . gs2 . enchant . model . RarityParameterCountModel () . withCount ( 5 ) . withWeight ( 3 ), new io . gs2 . enchant . model . RarityParameterCountModel () . withCount ( 10 ) . withWeight ( 5 ), new io . gs2 . enchant . model . RarityParameterCountModel () . withCount ( 3 ) . withWeight ( 10 ) )) . withParameters ( Arrays . asList ( new io . gs2 . enchant . model . RarityParameterValueModel () . withName ( \"parameter-1001\" ) . withResourceName ( \"resource-1001\" ) . withResourceValue ( 10L ) . withWeight ( 10 ), new io . gs2 . enchant . model . RarityParameterValueModel () . withName ( \"parameter-1002\" ) . withResourceName ( \"resource-1002\" ) . withResourceValue ( 20L ) . withWeight ( 20 ), new io . gs2 . enchant . model . RarityParameterValueModel () . withName ( \"parameter-1003\" ) . withResourceName ( \"resource-1003\" ) . withResourceValue ( 30L ) . withWeight ( 30 ), new io . gs2 . enchant . model . RarityParameterValueModel () . withName ( \"parameter-1004\" ) . withResourceName ( \"resource-1004\" ) . withResourceValue ( 40L ) . withWeight ( 40 ) )) ); RarityParameterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . UpdateRarityParameterModelMasterResult \u003e asyncResult = null ; yield return client . UpdateRarityParameterModelMaster ( new Gs2 . Gs2Enchant . Request . UpdateRarityParameterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"rarity-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"RARITY_0001\" ) . WithMaximumParameterCount ( 10 ) . WithParameterCounts ( new Gs2 . Gs2Enchant . Model . RarityParameterCountModel [] { new Gs2 . Gs2Enchant . Model . RarityParameterCountModel () . WithCount ( 5 ) . WithWeight ( 3 ), new Gs2 . Gs2Enchant . Model . RarityParameterCountModel () . WithCount ( 10 ) . WithWeight ( 5 ), new Gs2 . Gs2Enchant . Model . RarityParameterCountModel () . WithCount ( 3 ) . WithWeight ( 10 ), }) . WithParameters ( new Gs2 . Gs2Enchant . Model . RarityParameterValueModel [] { new Gs2 . Gs2Enchant . Model . RarityParameterValueModel () . WithName ( \"parameter-1001\" ) . WithResourceName ( \"resource-1001\" ) . WithResourceValue ( 10L ) . WithWeight ( 10 ), new Gs2 . Gs2Enchant . Model . RarityParameterValueModel () . WithName ( \"parameter-1002\" ) . WithResourceName ( \"resource-1002\" ) . WithResourceValue ( 20L ) . WithWeight ( 20 ), new Gs2 . Gs2Enchant . Model . RarityParameterValueModel () . WithName ( \"parameter-1003\" ) . WithResourceName ( \"resource-1003\" ) . WithResourceValue ( 30L ) . WithWeight ( 30 ), new Gs2 . Gs2Enchant . Model . RarityParameterValueModel () . WithName ( \"parameter-1004\" ) . WithResourceName ( \"resource-1004\" ) . WithResourceValue ( 40L ) . WithWeight ( 40 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . updateRarityParameterModelMaster ( new Gs2Enchant . UpdateRarityParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"RARITY_0001\" ) . withMaximumParameterCount ( 10 ) . withParameterCounts ([ new Gs2Enchant . model . RarityParameterCountModel () . withCount ( 5 ) . withWeight ( 3 ), new Gs2Enchant . model . RarityParameterCountModel () . withCount ( 10 ) . withWeight ( 5 ), new Gs2Enchant . model . RarityParameterCountModel () . withCount ( 3 ) . withWeight ( 10 ), ]) . withParameters ([ new Gs2Enchant . model . RarityParameterValueModel () . withName ( \"parameter-1001\" ) . withResourceName ( \"resource-1001\" ) . withResourceValue ( 10 ) . withWeight ( 10 ), new Gs2Enchant . model . RarityParameterValueModel () . withName ( \"parameter-1002\" ) . withResourceName ( \"resource-1002\" ) . withResourceValue ( 20 ) . withWeight ( 20 ), new Gs2Enchant . model . RarityParameterValueModel () . withName ( \"parameter-1003\" ) . withResourceName ( \"resource-1003\" ) . withResourceValue ( 30 ) . withWeight ( 30 ), new Gs2Enchant . model . RarityParameterValueModel () . withName ( \"parameter-1004\" ) . withResourceName ( \"resource-1004\" ) . withResourceValue ( 40 ) . withWeight ( 40 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . update_rarity_parameter_model_master ( enchant . UpdateRarityParameterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'rarity-0001' ) . with_description ( 'description1' ) . with_metadata ( 'RARITY_0001' ) . with_maximum_parameter_count ( 10 ) . with_parameter_counts ([ enchant . RarityParameterCountModel () . with_count ( 5 ) . with_weight ( 3 ), enchant . RarityParameterCountModel () . with_count ( 10 ) . with_weight ( 5 ), enchant . RarityParameterCountModel () . with_count ( 3 ) . with_weight ( 10 ), ]) . with_parameters ([ enchant . RarityParameterValueModel () . with_name ( 'parameter-1001' ) . with_resource_name ( 'resource-1001' ) . with_resource_value ( 10 ) . with_weight ( 10 ), enchant . RarityParameterValueModel () . with_name ( 'parameter-1002' ) . with_resource_name ( 'resource-1002' ) . with_resource_value ( 20 ) . with_weight ( 20 ), enchant . RarityParameterValueModel () . with_name ( 'parameter-1003' ) . with_resource_name ( 'resource-1003' ) . with_resource_value ( 30 ) . with_weight ( 30 ), enchant . RarityParameterValueModel () . with_name ( 'parameter-1004' ) . with_resource_name ( 'resource-1004' ) . with_resource_value ( 40 ) . with_weight ( 40 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.update_rarity_parameter_model_master ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , description = \"description1\" , metadata = \"RARITY_0001\" , maximumParameterCount = 10 , parameterCounts = { { count = 5 , weight = 3 , }, { count = 10 , weight = 5 , }, { count = 3 , weight = 10 , } }, parameters = { { name = \"parameter-1001\" , resourceName = \"resource-1001\" , resourceValue = 10 , weight = 10 , }, { name = \"parameter-1002\" , resourceName = \"resource-1002\" , resourceValue = 20 , weight = 20 , }, { name = \"parameter-1003\" , resourceName = \"resource-1003\" , resourceValue = 30 , weight = 30 , }, { name = \"parameter-1004\" , resourceName = \"resource-1004\" , resourceValue = 40 , weight = 40 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.update_rarity_parameter_model_master_async ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , description = \"description1\" , metadata = \"RARITY_0001\" , maximumParameterCount = 10 , parameterCounts = { { count = 5 , weight = 3 , }, { count = 10 , weight = 5 , }, { count = 3 , weight = 10 , } }, parameters = { { name = \"parameter-1001\" , resourceName = \"resource-1001\" , resourceValue = 10 , weight = 10 , }, { name = \"parameter-1002\" , resourceName = \"resource-1002\" , resourceValue = 20 , weight = 20 , }, { name = \"parameter-1003\" , resourceName = \"resource-1003\" , resourceValue = 30 , weight = 30 , }, { name = \"parameter-1004\" , resourceName = \"resource-1004\" , resourceValue = 40 , weight = 40 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRarityParameterModelMaster 레어리티 파라미터 모델 마스터를 삭제 편집 가능한 레어리티 파라미터 모델 마스터 정의를 삭제합니다. 마스터 데이터에만 영향을 미치며, 현재 유효화(공개)된 모델은 마스터 데이터가 다시 유효화될 때까지 영향을 받지 않습니다. 삭제된 모델과 관련된 기존 사용자 파라미터 상태는 자동으로 삭제되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델 이름 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item RarityParameterModelMaster 삭제한 레어리티 파라미터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enchant\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enchant . Gs2EnchantRestClient { Session : \u0026 session , } result , err := client . DeleteRarityParameterModelMaster ( \u0026 enchant . DeleteRarityParameterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ParameterName : pointy . String ( \"rarity-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enchant\\Gs2EnchantRestClient ; use Gs2\\Enchant\\Request\\DeleteRarityParameterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnchantRestClient ( $session ); try { $result = $client -\u003e deleteRarityParameterModelMaster ( ( new DeleteRarityParameterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withParameterName ( \"rarity-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enchant.rest.Gs2EnchantRestClient ; import io.gs2.enchant.request.DeleteRarityParameterModelMasterRequest ; import io.gs2.enchant.result.DeleteRarityParameterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnchantRestClient client = new Gs2EnchantRestClient ( session ); try { DeleteRarityParameterModelMasterResult result = client . deleteRarityParameterModelMaster ( new DeleteRarityParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) ); RarityParameterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnchantRestClient ( session ); AsyncResult Gs2 . Gs2Enchant . Result . DeleteRarityParameterModelMasterResult \u003e asyncResult = null ; yield return client . DeleteRarityParameterModelMaster ( new Gs2 . Gs2Enchant . Request . DeleteRarityParameterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithParameterName ( \"rarity-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enchant from '@/gs2/enchant' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enchant . Gs2EnchantRestClient ( session ); try { const result = await client . deleteRarityParameterModelMaster ( new Gs2Enchant . DeleteRarityParameterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withParameterName ( \"rarity-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enchant session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enchant . Gs2EnchantRestClient ( session ) try : result = client . delete_rarity_parameter_model_master ( enchant . DeleteRarityParameterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_parameter_name ( 'rarity-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enchant' ) api_result = client.delete_rarity_parameter_model_master ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enchant' ) api_result_handler = client.delete_rarity_parameter_model_master_async ({ namespaceName = \"namespace-0001\" , parameterName = \"rarity-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Enchant SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Enchant SDK API 레퍼런스","url":"/ko/api_reference/enchant/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 강화 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. enhanceScript ScriptSetting 강화 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - enhance logSetting LogSetting 로그 출력 설정 강화 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 강화 및 한계 돌파 조작의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Progress 강화 진행 상황 강화 시작 시 생성되며, 종료 시 삭제됩니다. 강화 도중에 앱을 종료한 경우에는 이 데이터가 남은 상태가 되며 엔티티가 보유한 진행 중인 강화 정보로부터 게임을 재개할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 progressId string ※ ~ 1024자 실행 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID rateName string  ~ 128자 강화 레이트 모델 이름 이 강화 조작의 파라미터를 정의하는 강화 레이트 모델의 이름입니다. 대상 인벤토리, 소재 인벤토리, 경험치 계층, 보너스 레이트를 지정하는 모델을 참조합니다. name string  UUID ~ 36자 강화 진행 상황 ID 강화 진행 상황의 고유 ID를 보유합니다. ID는 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 강화 진행 상황을 식별하는 데 사용됩니다. propertyId string  ~ 1024자 강화 대상의 프로퍼티 ID 강화되는 GS2-Inventory 아이템의 프로퍼티 ID입니다. 강화 완료 시 경험치를 받는 특정 아이템 인스턴스를 식별합니다. experienceValue long  0 ~ 9223372036854775805 획득할 수 있는 경험치 소비한 소재로부터 산출된 기본 경험치입니다. 이 값은 각 소재의 메타데이터에 정의된 경험치에 소재 수량을 곱한 값의 합계로 결정됩니다. rate float  0 ~ 100.0 경험치 배율 기본 경험치에 적용되는 보너스 배율입니다. 강화 레이트 모델의 보너스 레이트에서 가중치 추첨으로 결정됩니다. 1.0은 보너스 없음을, 1.0보다 큰 값은 “대성공” 보너스를 나타냅니다(예: 1.5로 경험치 150%). createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 RateModel 강화 레이트 모델 강화 레이트는 강화에 사용하는 소재와 강화 대상을 정의한 데이터입니다. 소재 데이터와 강화 대상 데이터는 모두 GS2-Inventory에서 관리되고 있어야 합니다. 강화로 얻는 경험치는 GS2-Inventory의 메타데이터에 JSON 형식으로 기록됩니다. 여기서는 메타데이터의 어느 계층에 경험치 값이 저장되어 있는지를 기재해야 합니다. 강화 시 일정 확률로 대성공 과 같은 형태로 입수할 수 있는 경험치량에 보정값을 적용할 수 있습니다. 그 추첨 확률도 이 엔티티에서 정의합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rateModelId string ※ ~ 1024자 강화 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 강화 대상으로 사용할 수 있는 GS2-Inventory 인벤토리 모델의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 강화되는 아이템은 이 인벤토리 모델에 속해 있어야 합니다. acquireExperienceSuffix string  ~ 1024자 GS2-Experience에서 획득한 경험치를 저장하는 프로퍼티 ID에 부여하는 서픽스 아이템의 프로퍼티 ID 끝에 추가되어, 경험치가 저장되는 GS2-Experience의 프로퍼티 ID를 구성하는 문자열입니다. 같은 아이템에 여러 경험치 종류를 부여할 수 있습니다(예: 캐릭터 레벨의 “level”, 호감도의 “like”). materialInventoryModelId string  ~ 1024자 강화 소재로 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 사용할 수 있는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 각 소재가 제공하는 경험치는 acquireExperienceHierarchy로 지정된 JSON 계층을 사용하여 아이템 모델의 메타데이터에 정의됩니다. acquireExperienceHierarchy List 0 ~ 10 items ItemModel의 메타데이터에 저장할, 획득 경험치를 정의하는 JSON 데이터의 계층 구조 정의 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 기능이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 예를 들어, { “aaa”: { “bbb”: { “experienceValue”: 100 } } }와 같은 구조의 데이터 정의로 메타데이터에 설정하고 싶은 경우에는 [ “aaa”, “bbb”, “experienceValue” ]와 같이 지정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. experienceModelId string  ~ 1024자 강화 결과로 얻는 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화로 얻은 경험치가 기록되는 GS2-Experience의 경험치 모델을 지정합니다. 경험치는 대상 아이템의 프로퍼티 ID와 acquireExperienceSuffix를 조합하여 식별되는 프로퍼티에 가산됩니다. bonusRates List 0 ~ 1000 items 경험치 획득량 보너스 강화 시 보너스 경험치 배율의 가중치 추첨을 정의합니다. 각 항목은 배율(예: 1.5로 150%)과 추첨 가중치를 지정합니다. 강화 실행 시 가중치 추첨으로 하나의 항목이 선택되어, 획득 경험치에 “대성공” 보너스가 적용되는지 여부가 결정됩니다. UnleashRateModel 한계돌파 레이트 모델 아이템의 한계돌파(해방) 조건을 정의합니다. GS2-Inventory에서 관리되는 아이템과 GS2-Grade의 그레이드 모델을 연결하여 그레이드 진행을 가능하게 합니다. 각 그레이드 레벨에서 소비하는 동일 종류 아이템의 수를 개별적으로 설정할 수 있어, 각 한계돌파 단계의 비용을 세밀하게 제어할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 unleashRateModelId string ※ ~ 1024자 한계돌파 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 한계돌파 대상에 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 한계돌파 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 한계돌파하는 아이템과 소재로 소비되는 동일 종류 아이템 모두 이 인벤토리 모델에 속해 있어야 합니다. gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 대상 아이템의 한계돌파 레벨을 추적하는 GS2-Grade의 그레이드 모델을 지정합니다. 한계돌파가 성공하면, 이 그레이드 모델 내에서 아이템의 그레이드가 가산됩니다. gradeEntries List  1 ~ 1000 items 그레이드 엔트리 목록 한계돌파의 각 그레이드 레벨에 대한 소재 비용을 정의합니다. 각 엔트리는 그레이드 값과, 해당 그레이드에 도달하기 위해 소비해야 하는 동일 종류 아이템 수를 매핑합니다. 예를 들어, 그레이드 1은 복제품 1개, 그레이드 2는 복제품 3개와 같이 설정할 수 있습니다. UnleashRateEntryModel 한계돌파 레이트 엔트리 모델 한계돌파 진행에서 단일 그레이드 레벨의 소재 비용을 정의합니다. 각 엔트리는 대상이 되는 그레이드 값과, 해당 그레이드를 달성하기 위해 소비해야 하는 동일 종류 아이템의 수를 지정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gradeValue long  1 ~ 1000 대상 그레이드 이 엔트리가 비용을 정의하는 그레이드 값입니다. 이 그레이드 레벨로의 한계돌파를 실행할 때, needCount로 지정된 수의 아이템이 소비됩니다. needCount int  1 ~ 1000 동일 종류의 아이템을 몇 개 소비할지 대상 그레이드로의 한계돌파를 실행하기 위해 소비해야 하는 동일 종류 아이템의 수입니다. 이 아이템들은 한계돌파되는 아이템과 동일한 아이템 모델의 것입니다. BonusRate 경험치 획득량 보너스 강화 시 경험치 보너스 배율을 결정하는 가중치 추첨의 단일 항목을 정의합니다. 서로 다른 배율과 가중치를 가진 여러 항목을 설정함으로써, 제어된 확률에 따른 “대성공\"이나 “초성공” 같은 시스템을 구현할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rate float 1.0 0 ~ 10000 경험치 보너스 배율 (1.0 = 보너스 없음) 이 항목이 추첨되었을 때 기본 경험치에 적용되는 배율입니다. 1.0은 보너스 없는 일반 강화, 1.5는 경험치 150%(대성공), 2.0은 경험치 200%(초성공) 등을 의미합니다. weight int 1 0 ~ 2147483645 추첨 가중치 보너스 레이트를 선택하는 가중치 추첨에서 사용되는 상대적인 가중치입니다. 값이 클수록 이 보너스 레이트가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 보너스 레이트 목록 내 모든 가중치의 합계로 나눈 값이 됩니다. Material 강화 소재 강화 조작 중에 소비되는 소재 아이템을 나타냅니다. 각 소재는 특정 GS2-Inventory 아이템 세트를 참조하며, 소비할 수량을 지정합니다. 소재가 제공하는 경험치는 아이템 모델의 메타데이터로부터 결정됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 materialItemSetId string  ~ 1024자 강화 소재가 되는 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 소비되는 특정 GS2-Inventory 아이템 세트를 참조합니다. 아이템은 강화 레이트 모델에서 지정된 소재 인벤토리 모델에 속해 있어야 합니다. count int 1 0 ~ 2147483645 소비 수량 이 소재 아이템의 소비 수량입니다. 이 소재로부터 얻는 합계 경험치는, 아이템 1개당 경험치(아이템 모델의 메타데이터에서 취득)에 이 수량을 곱하여 계산됩니다. Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 레이트 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Enhance 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 RateModelMaster 강화 레이트 모델 마스터 강화 레이트 모델 마스터는 게임 내에서 사용되는 강화 레이트 모델의 편집·관리용 데이터로, 관리 콘솔의 마스터 데이터 에디터에서 임시로 보관됩니다. 임포트·업데이트 처리를 수행하면 실제로 게임에서 참조하는 강화 레이트 모델로 반영됩니다. 강화 레이트는 강화에 사용하는 소재와 강화 대상을 정의한 데이터입니다. 소재 데이터와 강화 대상 데이터는 모두 GS2-Inventory에서 관리되고 있어야 합니다. 강화로 얻는 경험치는 GS2-Inventory의 메타데이터에 JSON 형식으로 기록합니다. 여기서는 메타데이터의 어느 계층에 경험치 값이 저장되어 있는지를 기술해야 합니다. 강화 시 일정 확률로 대성공 과 같은 형태로 획득할 수 있는 경험치량에 보정값을 적용할 수 있습니다. 그 추첨 확률도 이 엔티티에서 정의합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rateModelId string ※ ~ 1024자 강화 레이트 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 강화 대상으로 사용할 수 있는 GS2-Inventory 인벤토리 모델의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 강화되는 아이템은 이 인벤토리 모델에 속해 있어야 합니다. acquireExperienceSuffix string  ~ 1024자 GS2-Experience에서 획득한 경험치를 저장하는 프로퍼티 ID에 부여하는 서픽스 아이템의 프로퍼티 ID 끝에 추가되어, 경험치가 저장되는 GS2-Experience의 프로퍼티 ID를 구성하는 문자열입니다. 같은 아이템에 여러 경험치 종류를 부여할 수 있습니다(예: 캐릭터 레벨의 “level”, 호감도의 “like”). materialInventoryModelId string  ~ 1024자 강화 소재로 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 사용할 수 있는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 각 소재가 제공하는 경험치는 acquireExperienceHierarchy로 지정된 JSON 계층을 사용하여 아이템 모델의 메타데이터에 정의됩니다. acquireExperienceHierarchy List 0 ~ 10 items ItemModel의 메타데이터에 저장할, 획득 경험치를 정의하는 JSON 데이터의 계층 구조 정의 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 기능이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 예를 들어, { “aaa”: { “bbb”: { “experienceValue”: 100 } } }와 같은 구조의 데이터 정의로 메타데이터에 설정하고 싶은 경우에는 [ “aaa”, “bbb”, “experienceValue” ]와 같이 지정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. experienceModelId string  ~ 1024자 강화 결과로 얻는 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화로 얻은 경험치가 기록되는 GS2-Experience의 경험치 모델을 지정합니다. 경험치는 대상 아이템의 프로퍼티 ID와 acquireExperienceSuffix를 조합하여 식별되는 프로퍼티에 가산됩니다. bonusRates List 0 ~ 1000 items 경험치 획득량 보너스 강화 시 보너스 경험치 배율의 가중치 추첨을 정의합니다. 각 항목은 배율(예: 1.5로 150%)과 추첨 가중치를 지정합니다. 강화 실행 시 가중치 추첨으로 하나의 항목이 선택되어, 획득 경험치에 “대성공” 보너스가 적용되는지 여부가 결정됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 UnleashRateModelMaster 한계돌파 레이트 모델 마스터 관리 콘솔 조작에 사용되는 한계돌파 레이트 모델의 편집 가능한 버전입니다. GS2-Inventory의 아이템과 GS2-Grade의 그레이드 모델을 연결하여 아이템의 한계돌파 조건을 정의합니다. 각 그레이드 레벨에서 소비하는 동일 종류 아이템의 수를 개별적으로 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 unleashRateModelId string ※ ~ 1024자 한계돌파 레이트 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. GS2의 동작에는 일절 영향을 주지 않으므로, 게임 내에서 사용하는 값의 저장 위치로 활용해 주세요. targetInventoryModelId string  ~ 1024자 한계돌파 대상에 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 한계돌파 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 한계돌파하는 아이템과 소재로 소비되는 동일 종류 아이템 모두 이 인벤토리 모델에 속해 있어야 합니다. gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 대상 아이템의 한계돌파 레벨을 추적하는 GS2-Grade의 그레이드 모델을 지정합니다. 한계돌파가 성공하면, 이 그레이드 모델 내에서 아이템의 그레이드가 가산됩니다. gradeEntries List  1 ~ 1000 items 그레이드 엔트리 목록 한계돌파의 각 그레이드 레벨에 대한 소재 비용을 정의합니다. 각 엔트리는 그레이드 값과, 해당 그레이드에 도달하기 위해 소비해야 하는 동일 종류 아이템 수를 매핑합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 enhance . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DescribeNamespacesRequest ; import io.gs2.enhance.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Enhance . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Enhance . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . describe_namespaces ( enhance . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enhance' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 강화 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. enhanceScript ScriptSetting 강화 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - enhance logSetting LogSetting 로그 출력 설정 강화 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 강화 및 한계 돌파 조작의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 enhance . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 enhance . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, EnhanceScript : nil , LogSetting : \u0026 enhance . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Enhance\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withEnhanceScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Enhance\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.CreateNamespaceRequest ; import io.gs2.enhance.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . enhance . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withEnhanceScript ( null ) . withLogSetting ( new io . gs2 . enhance . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Enhance . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Enhance . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithEnhanceScript ( null ) . WithLogSetting ( new Gs2 . Gs2Enhance . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Enhance . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Enhance . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withEnhanceScript ( null ) . withLogSetting ( new Gs2Enhance . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . create_namespace ( enhance . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( enhance . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_enhance_script ( None ) . with_log_setting ( enhance . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, enhanceScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, enhanceScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 enhance . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetNamespaceStatusRequest ; import io.gs2.enhance.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Enhance . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Enhance . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_namespace_status ( enhance . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'enhance' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 enhance . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetNamespaceRequest ; import io.gs2.enhance.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Enhance . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Enhance . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_namespace ( enhance . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 강화 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. enhanceScript ScriptSetting 강화 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - enhance logSetting LogSetting 로그 출력 설정 강화 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 강화 및 한계 돌파 조작의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 enhance . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 enhance . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, EnhanceScript : nil , LogSetting : \u0026 enhance . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Enhance\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withEnhanceScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Enhance\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.UpdateNamespaceRequest ; import io.gs2.enhance.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . enhance . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withEnhanceScript ( null ) . withLogSetting ( new io . gs2 . enhance . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Enhance . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Enhance . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithEnhanceScript ( null ) . WithLogSetting ( new Gs2 . Gs2Enhance . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Enhance . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Enhance . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withEnhanceScript ( null ) . withLogSetting ( new Gs2Enhance . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . update_namespace ( enhance . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( enhance . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_enhance_script ( None ) . with_log_setting ( enhance . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, enhanceScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, enhanceScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 enhance . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DeleteNamespaceRequest ; import io.gs2.enhance.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Enhance . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Enhance . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . delete_namespace ( enhance . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 enhance . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetServiceVersionRequest ; import io.gs2.enhance.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Enhance . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Enhance . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_service_version ( enhance . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 enhance . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DumpUserDataByUserIdRequest ; import io.gs2.enhance.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Enhance . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Enhance . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . dump_user_data_by_user_id ( enhance . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'enhance' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 enhance . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.enhance.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Enhance . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Enhance . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( enhance . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'enhance' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 enhance . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.CleanUserDataByUserIdRequest ; import io.gs2.enhance.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Enhance . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Enhance . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . clean_user_data_by_user_id ( enhance . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'enhance' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 enhance . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.enhance.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Enhance . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Enhance . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( enhance . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'enhance' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 enhance . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.enhance.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Enhance . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Enhance . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( enhance . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'enhance' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 enhance . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.ImportUserDataByUserIdRequest ; import io.gs2.enhance.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Enhance . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Enhance . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . import_user_data_by_user_id ( enhance . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'enhance' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 enhance . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.CheckImportUserDataByUserIdRequest ; import io.gs2.enhance.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Enhance . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Enhance . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( enhance . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'enhance' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; directEnhance 강화를 실행 강화 레이트 모델에 기반하여 지정된 소재를 소비해 대상 아이템 세트에 경험치를 부여합니다. 획득 경험치는 레이트 모델에서 정의된 경험치 계층에 따라 소재로부터 계산되며, 보너스 레이트는 설정된 보너스 레이트 확률 테이블에서 추첨됩니다. 결과에는 획득한 경험치량과 적용된 보너스 레이트가 포함됩니다. 소재의 소비와 경험치 획득을 실행하기 위한 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List  1 ~ 10 items 강화 소재 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item RateModel 강화 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 강화 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 acquireExperience long 획득 경험치량 bonusRate float 경험치 보너스 배율(1.0=보너스 없음) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DirectEnhance ( \u0026 enhance . DirectEnhanceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetItemSetId : pointy . String ( \"item-set-0001\" ), Materials : [] enhance . Material { enhance . Material { MaterialItemSetId : pointy . String ( \"material-0001\" ), Count : pointy . Int32 ( 1 ), }, }, Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult acquireExperience := result . AcquireExperience bonusRate := result . BonusRate use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DirectEnhanceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e directEnhance ( ( new DirectEnhanceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetItemSetId ( \"item-set-0001\" ) -\u003e withMaterials ([ ( new Material ()) -\u003e withMaterialItemSetId ( \"material-0001\" ) -\u003e withCount ( 1 ), ]) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); $acquireExperience = $result -\u003e getAcquireExperience (); $bonusRate = $result -\u003e getBonusRate (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DirectEnhanceRequest ; import io.gs2.enhance.result.DirectEnhanceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DirectEnhanceResult result = client . directEnhance ( new DirectEnhanceRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ( Arrays . asList ( new Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ) )) . withConfig ( null ) ); RateModel item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); long acquireExperience = result . getAcquireExperience (); float bonusRate = result . getBonusRate (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DirectEnhanceResult \u003e asyncResult = null ; yield return client . DirectEnhance ( new Gs2 . Gs2Enhance . Request . DirectEnhanceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetItemSetId ( \"item-set-0001\" ) . WithMaterials ( new Gs2 . Gs2Enhance . Model . Material [] { new Gs2 . Gs2Enhance . Model . Material () . WithMaterialItemSetId ( \"material-0001\" ) . WithCount ( 1 ), }) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; var acquireExperience = result . AcquireExperience ; var bonusRate = result . BonusRate ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . directEnhance ( new Gs2Enhance . DirectEnhanceRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ([ new Gs2Enhance . model . Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ), ]) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); const acquireExperience = result . getAcquireExperience (); const bonusRate = result . getBonusRate (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . direct_enhance ( enhance . DirectEnhanceRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_item_set_id ( 'item-set-0001' ) . with_materials ([ enhance . Material () . with_material_item_set_id ( 'material-0001' ) . with_count ( 1 ), ]) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result acquire_experience = result . acquire_experience bonus_rate = result . bonus_rate except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.direct_enhance ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , accessToken = \"accessToken-0001\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireExperience = result.acquireExperience ; bonusRate = result.bonusRate ; client = gs2 ( 'enhance' ) api_result_handler = client.direct_enhance_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , accessToken = \"accessToken-0001\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireExperience = result.acquireExperience ; bonusRate = result.bonusRate ; directEnhanceByUserId 사용자 ID를 지정하여 강화를 실행 강화 레이트 모델에 기반하여 지정된 소재를 소비해 대상 아이템 세트에 경험치를 부여합니다. 획득 경험치는 레이트 모델에서 정의된 경험치 계층에 따라 소재로부터 계산되며, 보너스 레이트는 설정된 보너스 레이트 확률 테이블에서 추첨됩니다. 결과에는 획득한 경험치량과 적용된 보너스 레이트가 포함됩니다. 소재의 소비와 경험치 획득을 실행하기 위한 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List  1 ~ 10 items 강화 소재 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RateModel 강화 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 강화 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 acquireExperience long 획득 경험치량 bonusRate float 경험치 보너스 배율(1.0=보너스 없음) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DirectEnhanceByUserId ( \u0026 enhance . DirectEnhanceByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetItemSetId : pointy . String ( \"item-set-0001\" ), Materials : [] enhance . Material { enhance . Material { MaterialItemSetId : pointy . String ( \"material-0001\" ), Count : pointy . Int32 ( 1 ), }, }, Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult acquireExperience := result . AcquireExperience bonusRate := result . BonusRate use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DirectEnhanceByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e directEnhanceByUserId ( ( new DirectEnhanceByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetItemSetId ( \"item-set-0001\" ) -\u003e withMaterials ([ ( new Material ()) -\u003e withMaterialItemSetId ( \"material-0001\" ) -\u003e withCount ( 1 ), ]) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); $acquireExperience = $result -\u003e getAcquireExperience (); $bonusRate = $result -\u003e getBonusRate (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DirectEnhanceByUserIdRequest ; import io.gs2.enhance.result.DirectEnhanceByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DirectEnhanceByUserIdResult result = client . directEnhanceByUserId ( new DirectEnhanceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withUserId ( \"user-0001\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ( Arrays . asList ( new Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ) )) . withConfig ( null ) . withTimeOffsetToken ( null ) ); RateModel item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); long acquireExperience = result . getAcquireExperience (); float bonusRate = result . getBonusRate (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DirectEnhanceByUserIdResult \u003e asyncResult = null ; yield return client . DirectEnhanceByUserId ( new Gs2 . Gs2Enhance . Request . DirectEnhanceByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetItemSetId ( \"item-set-0001\" ) . WithMaterials ( new Gs2 . Gs2Enhance . Model . Material [] { new Gs2 . Gs2Enhance . Model . Material () . WithMaterialItemSetId ( \"material-0001\" ) . WithCount ( 1 ), }) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; var acquireExperience = result . AcquireExperience ; var bonusRate = result . BonusRate ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . directEnhanceByUserId ( new Gs2Enhance . DirectEnhanceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withUserId ( \"user-0001\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ([ new Gs2Enhance . model . Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ), ]) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); const acquireExperience = result . getAcquireExperience (); const bonusRate = result . getBonusRate (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . direct_enhance_by_user_id ( enhance . DirectEnhanceByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_user_id ( 'user-0001' ) . with_target_item_set_id ( 'item-set-0001' ) . with_materials ([ enhance . Material () . with_material_item_set_id ( 'material-0001' ) . with_count ( 1 ), ]) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result acquire_experience = result . acquire_experience bonus_rate = result . bonus_rate except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.direct_enhance_by_user_id ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , userId = \"user-0001\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireExperience = result.acquireExperience ; bonusRate = result.bonusRate ; client = gs2 ( 'enhance' ) api_result_handler = client.direct_enhance_by_user_id_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , userId = \"user-0001\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireExperience = result.acquireExperience ; bonusRate = result.bonusRate ; unleash 한계돌파를 실행 GS2-Grade에서 관리하는 그레이드를 올리는 강화 처리에 사용합니다. 그중에서도, 동종 아이템을 소재로 소비하여 레벨 캡을 올리는 유형의 한계돌파에 사용합니다. 지정된 소재를 소비하는 대신 한계돌파 대상 리소스의 그레이드를 1 올릴 수 있습니다. 소재가 되는 리소스가 경험치 등의 리소스를 가지고 있더라도, 그 리소스는 계승되지 않습니다. 계승이 필요한 경우에는 사전에 별도의 리소스로 계승용 리소스로 변환해 두어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetItemSetId string  ~ 1024자 한계돌파 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List  1 ~ 1000 items 한계돌파 소재 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item UnleashRateModel 한계돌파 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 강화 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . Unleash ( \u0026 enhance . UnleashRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetItemSetId : pointy . String ( \"item-set-0001\" ), Materials : [] * string { pointy . String ( \"item-set-0002\" ), pointy . String ( \"item-set-0003\" ), }, Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\UnleashRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e unleash ( ( new UnleashRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetItemSetId ( \"item-set-0001\" ) -\u003e withMaterials ([ \"item-set-0002\" , \"item-set-0003\" , ]) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.UnleashRequest ; import io.gs2.enhance.result.UnleashResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { UnleashResult result = client . unleash ( new UnleashRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ( Arrays . asList ( \"item-set-0002\" , \"item-set-0003\" )) . withConfig ( null ) ); UnleashRateModel item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . UnleashResult \u003e asyncResult = null ; yield return client . Unleash ( new Gs2 . Gs2Enhance . Request . UnleashRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetItemSetId ( \"item-set-0001\" ) . WithMaterials ( new string [] { \"item-set-0002\" , \"item-set-0003\" , }) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . unleash ( new Gs2Enhance . UnleashRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ([ \"item-set-0002\" , \"item-set-0003\" , ]) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . unleash ( enhance . UnleashRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_item_set_id ( 'item-set-0001' ) . with_materials ([ 'item-set-0002' , 'item-set-0003' , ]) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.unleash ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , accessToken = \"accessToken-0001\" , targetItemSetId = \"item-set-0001\" , materials = { \"item-set-0002\" , \"item-set-0003\" }, config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'enhance' ) api_result_handler = client.unleash_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , accessToken = \"accessToken-0001\" , targetItemSetId = \"item-set-0001\" , materials = { \"item-set-0002\" , \"item-set-0003\" }, config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; unleashByUserId 사용자ID를 지정하여 한계돌파를 실행 GS2-Grade에서 관리하는 그레이드를 올리는 강화 처리에서 사용됩니다. 그중에서도 동일 종류의 아이템을 소재로 소비하여 레벨 상한을 올리는 유형의 한계돌파에 사용됩니다. 지정된 소재를 소비하는 대신 한계돌파 대상 리소스의 그레이드를 1 올릴 수 있습니다. 소재가 되는 리소스가 경험치 등의 리소스를 가지고 있더라도, 그 리소스는 계승되지 않습니다. 계승이 필요한 경우에는 사전에 다른 리소스로 계승하기 위한 리소스로 변환해 두어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetItemSetId string  ~ 1024자 한계돌파 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List  1 ~ 1000 items 한계돌파 소재 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item UnleashRateModel 한계돌파 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 강화 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . UnleashByUserId ( \u0026 enhance . UnleashByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetItemSetId : pointy . String ( \"item-set-0001\" ), Materials : [] * string { pointy . String ( \"item-set-0002\" ), pointy . String ( \"item-set-0003\" ), }, Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\UnleashByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e unleashByUserId ( ( new UnleashByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetItemSetId ( \"item-set-0001\" ) -\u003e withMaterials ([ \"item-set-0002\" , \"item-set-0003\" , ]) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.UnleashByUserIdRequest ; import io.gs2.enhance.result.UnleashByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { UnleashByUserIdResult result = client . unleashByUserId ( new UnleashByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withUserId ( \"user-0001\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ( Arrays . asList ( \"item-set-0002\" , \"item-set-0003\" )) . withConfig ( null ) . withTimeOffsetToken ( null ) ); UnleashRateModel item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . UnleashByUserIdResult \u003e asyncResult = null ; yield return client . UnleashByUserId ( new Gs2 . Gs2Enhance . Request . UnleashByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetItemSetId ( \"item-set-0001\" ) . WithMaterials ( new string [] { \"item-set-0002\" , \"item-set-0003\" , }) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . unleashByUserId ( new Gs2Enhance . UnleashByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withUserId ( \"user-0001\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ([ \"item-set-0002\" , \"item-set-0003\" , ]) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . unleash_by_user_id ( enhance . UnleashByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_user_id ( 'user-0001' ) . with_target_item_set_id ( 'item-set-0001' ) . with_materials ([ 'item-set-0002' , 'item-set-0003' , ]) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.unleash_by_user_id ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , userId = \"user-0001\" , targetItemSetId = \"item-set-0001\" , materials = { \"item-set-0002\" , \"item-set-0003\" }, config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'enhance' ) api_result_handler = client.unleash_by_user_id_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , userId = \"user-0001\" , targetItemSetId = \"item-set-0001\" , materials = { \"item-set-0002\" , \"item-set-0003\" }, config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; createProgressByUserId 사용자 ID를 지정하여 강화를 시작 2단계 강화 플로우를 위한 진행 정보 레코드를 작성합니다. 대상 아이템 세트와 소재를 레이트 모델에 대해 검증하고, 소재로부터 획득 경험치를 계산하며, 확률 테이블에서 보너스 레이트를 추첨합니다. 계산된 경험치와 보너스 레이트는 진행 정보 레코드에 저장되어 End API에서 강화 완료 시 사용됩니다. force가 true인 경우, 사용자의 기존 진행 정보는 폐기되고 대체됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rateName string  ~ 128자 강화 레이트 모델 이름 이 강화 조작의 파라미터를 정의하는 강화 레이트 모델의 이름입니다. 대상 인벤토리, 소재 인벤토리, 경험치 계층, 보너스 레이트를 지정하는 모델을 참조합니다. targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List 0 ~ 10 items 강화 소재 목록 force bool false 이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Progress 실행 중인 강화의 진행 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . CreateProgressByUserId ( \u0026 enhance . CreateProgressByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RateName : pointy . String ( \"character-level\" ), TargetItemSetId : pointy . String ( \"item-set-0001\" ), Materials : [] enhance . Material { enhance . Material { MaterialItemSetId : pointy . String ( \"material-0001\" ), Count : pointy . Int32 ( 1 ), }, }, Force : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\CreateProgressByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e createProgressByUserId ( ( new CreateProgressByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRateName ( \"character-level\" ) -\u003e withTargetItemSetId ( \"item-set-0001\" ) -\u003e withMaterials ([ ( new Material ()) -\u003e withMaterialItemSetId ( \"material-0001\" ) -\u003e withCount ( 1 ), ]) -\u003e withForce ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.CreateProgressByUserIdRequest ; import io.gs2.enhance.result.CreateProgressByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { CreateProgressByUserIdResult result = client . createProgressByUserId ( new CreateProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRateName ( \"character-level\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ( Arrays . asList ( new Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ) )) . withForce ( null ) . withTimeOffsetToken ( null ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . CreateProgressByUserIdResult \u003e asyncResult = null ; yield return client . CreateProgressByUserId ( new Gs2 . Gs2Enhance . Request . CreateProgressByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRateName ( \"character-level\" ) . WithTargetItemSetId ( \"item-set-0001\" ) . WithMaterials ( new Gs2 . Gs2Enhance . Model . Material [] { new Gs2 . Gs2Enhance . Model . Material () . WithMaterialItemSetId ( \"material-0001\" ) . WithCount ( 1 ), }) . WithForce ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . createProgressByUserId ( new Gs2Enhance . CreateProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRateName ( \"character-level\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ([ new Gs2Enhance . model . Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ), ]) . withForce ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . create_progress_by_user_id ( enhance . CreateProgressByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_rate_name ( 'character-level' ) . with_target_item_set_id ( 'item-set-0001' ) . with_materials ([ enhance . Material () . with_material_item_set_id ( 'material-0001' ) . with_count ( 1 ), ]) . with_force ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.create_progress_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rateName = \"character-level\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, force = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.create_progress_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rateName = \"character-level\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, force = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getProgress 실행 중인 강화의 진행 정보를 조회 인증된 사용자의 현재 진행 중인 강화의 진행 정보를 조회합니다. 진행 정보 레코드에는 강화 시작 시 결정된 레이트 이름, 대상 아이템 세트, 소재, 계산된 경험치, 추첨된 보너스 레이트가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Progress 실행 중인 강화의 진행 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetProgress ( \u0026 enhance . GetProgressRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetProgressRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getProgress ( ( new GetProgressRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetProgressRequest ; import io.gs2.enhance.result.GetProgressResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetProgressResult result = client . getProgress ( new GetProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetProgressResult \u003e asyncResult = null ; yield return client . GetProgress ( new Gs2 . Gs2Enhance . Request . GetProgressRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getProgress ( new Gs2Enhance . GetProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_progress ( enhance . GetProgressRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_progress ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_progress_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getProgressByUserId 사용자 ID를 지정하여 실행 중인 강화의 진행 정보를 조회 지정된 사용자의 현재 진행 중인 강화의 진행 정보를 조회합니다. 진행 정보 레코드에는 강화 시작 시 결정된 레이트 이름, 대상 아이템 세트, 소재, 계산된 경험치, 추첨된 보너스 레이트가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Progress 실행 중인 강화의 진행 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetProgressByUserId ( \u0026 enhance . GetProgressByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetProgressByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getProgressByUserId ( ( new GetProgressByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetProgressByUserIdRequest ; import io.gs2.enhance.result.GetProgressByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetProgressByUserIdResult result = client . getProgressByUserId ( new GetProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetProgressByUserIdResult \u003e asyncResult = null ; yield return client . GetProgressByUserId ( new Gs2 . Gs2Enhance . Request . GetProgressByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getProgressByUserId ( new Gs2Enhance . GetProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_progress_by_user_id ( enhance . GetProgressByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_progress_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_progress_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; start 강화를 시작 인증된 사용자의 2단계 강화 처리를 시작합니다. 대상과 소재를 레이트 모델에 대해 검증하고, 경험치를 계산하며, 보너스 레이트를 추첨하여 진행 정보 레코드를 작성합니다. 지정된 소재를 소비하기 위한 트랜잭션이 발행됩니다. force가 true인 경우, 사용자의 기존 진행 정보는 폐기되고 대체됩니다. 소재가 소비된 후, End API를 호출하여 강화를 완료하고 계산된 경험치를 부여합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 이 강화 조작의 파라미터를 정의하는 강화 레이트 모델의 이름입니다. 대상 인벤토리, 소재 인벤토리, 경험치 계층, 보너스 레이트를 지정하는 모델을 참조합니다. targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List 0 ~ 10 items 강화 소재 목록 accessToken string  ~ 128자 액세스 토큰 force bool false 이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 강화 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . Start ( \u0026 enhance . StartRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), TargetItemSetId : pointy . String ( \"item-set-0001\" ), Materials : [] enhance . Material { enhance . Material { MaterialItemSetId : pointy . String ( \"material-0001\" ), Count : pointy . Int32 ( 1 ), }, }, AccessToken : pointy . String ( \"accessToken-0001\" ), Force : nil , Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\StartRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e start ( ( new StartRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) -\u003e withTargetItemSetId ( \"item-set-0001\" ) -\u003e withMaterials ([ ( new Material ()) -\u003e withMaterialItemSetId ( \"material-0001\" ) -\u003e withCount ( 1 ), ]) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withForce ( null ) -\u003e withConfig ( null ) ); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.StartRequest ; import io.gs2.enhance.result.StartResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { StartResult result = client . start ( new StartRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ( Arrays . asList ( new Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ) )) . withAccessToken ( \"accessToken-0001\" ) . withForce ( null ) . withConfig ( null ) ); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . StartResult \u003e asyncResult = null ; yield return client . Start ( new Gs2 . Gs2Enhance . Request . StartRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ) . WithTargetItemSetId ( \"item-set-0001\" ) . WithMaterials ( new Gs2 . Gs2Enhance . Model . Material [] { new Gs2 . Gs2Enhance . Model . Material () . WithMaterialItemSetId ( \"material-0001\" ) . WithCount ( 1 ), }) . WithAccessToken ( \"accessToken-0001\" ) . WithForce ( null ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . start ( new Gs2Enhance . StartRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ([ new Gs2Enhance . model . Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ), ]) . withAccessToken ( \"accessToken-0001\" ) . withForce ( null ) . withConfig ( null ) ); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . start ( enhance . StartRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) . with_target_item_set_id ( 'item-set-0001' ) . with_materials ([ enhance . Material () . with_material_item_set_id ( 'material-0001' ) . with_count ( 1 ), ]) . with_access_token ( 'accessToken-0001' ) . with_force ( None ) . with_config ( None ) ) transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.start ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, accessToken = \"accessToken-0001\" , force = nil , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'enhance' ) api_result_handler = client.start_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, accessToken = \"accessToken-0001\" , force = nil , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; startByUserId 사용자 ID를 지정하여 강화를 시작 지정된 사용자의 2단계 강화 처리를 시작합니다. 대상과 소재를 레이트 모델에 대해 검증하고, 경험치를 계산하며, 보너스 레이트를 추첨하여 진행 정보 레코드를 작성합니다. 지정된 소재를 소비하기 위한 트랜잭션이 발행됩니다. force가 true인 경우, 사용자의 기존 진행 정보는 폐기되고 대체됩니다. 소재가 소비된 후, End API를 호출하여 강화를 완료하고 계산된 경험치를 부여합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 이 강화 조작의 파라미터를 정의하는 강화 레이트 모델의 이름입니다. 대상 인벤토리, 소재 인벤토리, 경험치 계층, 보너스 레이트를 지정하는 모델을 참조합니다. targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List 0 ~ 10 items 강화 소재 목록 userId string  ~ 128자 사용자ID force bool false 이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 강화 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . StartByUserId ( \u0026 enhance . StartByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), TargetItemSetId : pointy . String ( \"item-set-0001\" ), Materials : [] enhance . Material { enhance . Material { MaterialItemSetId : pointy . String ( \"material-0001\" ), Count : pointy . Int32 ( 1 ), }, }, UserId : pointy . String ( \"user-0001\" ), Force : nil , Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\StartByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e startByUserId ( ( new StartByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) -\u003e withTargetItemSetId ( \"item-set-0001\" ) -\u003e withMaterials ([ ( new Material ()) -\u003e withMaterialItemSetId ( \"material-0001\" ) -\u003e withCount ( 1 ), ]) -\u003e withUserId ( \"user-0001\" ) -\u003e withForce ( null ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.StartByUserIdRequest ; import io.gs2.enhance.result.StartByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { StartByUserIdResult result = client . startByUserId ( new StartByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ( Arrays . asList ( new Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ) )) . withUserId ( \"user-0001\" ) . withForce ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . StartByUserIdResult \u003e asyncResult = null ; yield return client . StartByUserId ( new Gs2 . Gs2Enhance . Request . StartByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ) . WithTargetItemSetId ( \"item-set-0001\" ) . WithMaterials ( new Gs2 . Gs2Enhance . Model . Material [] { new Gs2 . Gs2Enhance . Model . Material () . WithMaterialItemSetId ( \"material-0001\" ) . WithCount ( 1 ), }) . WithUserId ( \"user-0001\" ) . WithForce ( null ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . startByUserId ( new Gs2Enhance . StartByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) . withTargetItemSetId ( \"item-set-0001\" ) . withMaterials ([ new Gs2Enhance . model . Material () . withMaterialItemSetId ( \"material-0001\" ) . withCount ( 1 ), ]) . withUserId ( \"user-0001\" ) . withForce ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . start_by_user_id ( enhance . StartByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) . with_target_item_set_id ( 'item-set-0001' ) . with_materials ([ enhance . Material () . with_material_item_set_id ( 'material-0001' ) . with_count ( 1 ), ]) . with_user_id ( 'user-0001' ) . with_force ( None ) . with_config ( None ) . with_time_offset_token ( None ) ) transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.start_by_user_id ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, userId = \"user-0001\" , force = nil , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'enhance' ) api_result_handler = client.start_by_user_id_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , targetItemSetId = \"item-set-0001\" , materials = { { material_item_set_id = \"material-0001\" , count = 1 , } }, userId = \"user-0001\" , force = nil , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; end 강화를 완료 인증된 사용자의 2단계 강화 처리를 완료합니다. Start 단계에서 작성된 진행 정보 레코드(사전 계산된 경험치와 보너스 레이트 포함)를 조회합니다. 계산된 경험치(보너스 레이트 적용 완료)를 대상 아이템에 부여하기 위한 트랜잭션이 발행됩니다. 강화 완료 후, 진행 정보 레코드는 삭제됩니다. 응답에는 획득한 경험치량과 적용된 보너스 레이트가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item Progress 강화의 진행 정보 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 지급 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 acquireExperience long 획득 경험치량 bonusRate float 경험치 보너스 배율(1.0=보너스 없음) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . End ( \u0026 enhance . EndRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult acquireExperience := result . AcquireExperience bonusRate := result . BonusRate use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\EndRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e end ( ( new EndRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); $acquireExperience = $result -\u003e getAcquireExperience (); $bonusRate = $result -\u003e getBonusRate (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.EndRequest ; import io.gs2.enhance.result.EndResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { EndResult result = client . end ( new EndRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConfig ( null ) ); Progress item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); long acquireExperience = result . getAcquireExperience (); float bonusRate = result . getBonusRate (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . EndResult \u003e asyncResult = null ; yield return client . End ( new Gs2 . Gs2Enhance . Request . EndRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; var acquireExperience = result . AcquireExperience ; var bonusRate = result . BonusRate ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . end ( new Gs2Enhance . EndRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); const acquireExperience = result . getAcquireExperience (); const bonusRate = result . getBonusRate (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . end ( enhance . EndRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result acquire_experience = result . acquire_experience bonus_rate = result . bonus_rate except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.end ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireExperience = result.acquireExperience ; bonusRate = result.bonusRate ; client = gs2 ( 'enhance' ) api_result_handler = client.end_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireExperience = result.acquireExperience ; bonusRate = result.bonusRate ; endByUserId 사용자 ID를 지정하여 강화를 완료 지정된 사용자의 2단계 강화 처리를 완료합니다. Start 단계에서 작성된 진행 정보 레코드(사전 계산된 경험치와 보너스 레이트 포함)를 조회합니다. 계산된 경험치(보너스 레이트 적용 완료)를 대상 아이템에 부여하기 위한 트랜잭션이 발행됩니다. 강화 완료 후, 진행 정보 레코드는 삭제됩니다. 응답에는 획득한 경험치량과 적용된 보너스 레이트가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Progress 강화의 진행 정보 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 지급 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 acquireExperience long 획득 경험치량 bonusRate float 경험치 보너스 배율(1.0=보너스 없음) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . EndByUserId ( \u0026 enhance . EndByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult acquireExperience := result . AcquireExperience bonusRate := result . BonusRate use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\EndByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e endByUserId ( ( new EndByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); $acquireExperience = $result -\u003e getAcquireExperience (); $bonusRate = $result -\u003e getBonusRate (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.EndByUserIdRequest ; import io.gs2.enhance.result.EndByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { EndByUserIdResult result = client . endByUserId ( new EndByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Progress item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); long acquireExperience = result . getAcquireExperience (); float bonusRate = result . getBonusRate (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . EndByUserIdResult \u003e asyncResult = null ; yield return client . EndByUserId ( new Gs2 . Gs2Enhance . Request . EndByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; var acquireExperience = result . AcquireExperience ; var bonusRate = result . BonusRate ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . endByUserId ( new Gs2Enhance . EndByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); const acquireExperience = result . getAcquireExperience (); const bonusRate = result . getBonusRate (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . end_by_user_id ( enhance . EndByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result acquire_experience = result . acquire_experience bonus_rate = result . bonus_rate except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.end_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireExperience = result.acquireExperience ; bonusRate = result.bonusRate ; client = gs2 ( 'enhance' ) api_result_handler = client.end_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireExperience = result.acquireExperience ; bonusRate = result.bonusRate ; deleteProgress 실행 중인 강화의 진행 정보를 삭제 인증된 사용자의 현재 진행 중인 강화의 진행 정보 레코드를 삭제합니다. 진행 중인 2단계 강화가 취소되며, 사전 계산된 경험치와 보너스 레이트는 폐기됩니다. Start 단계에서 이미 소비된 소재는 자동으로 반환되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Progress 강화의 진행 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DeleteProgress ( \u0026 enhance . DeleteProgressRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DeleteProgressRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e deleteProgress ( ( new DeleteProgressRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DeleteProgressRequest ; import io.gs2.enhance.result.DeleteProgressResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DeleteProgressResult result = client . deleteProgress ( new DeleteProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DeleteProgressResult \u003e asyncResult = null ; yield return client . DeleteProgress ( new Gs2 . Gs2Enhance . Request . DeleteProgressRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . deleteProgress ( new Gs2Enhance . DeleteProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . delete_progress ( enhance . DeleteProgressRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.delete_progress ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.delete_progress_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteProgressByUserId 사용자 ID를 지정하여 실행 중인 강화의 진행 정보를 삭제 지정된 사용자의 현재 진행 중인 강화의 진행 정보 레코드를 삭제합니다. 진행 중인 2단계 강화가 취소되며, 사전 계산된 경험치와 보너스 레이트는 폐기됩니다. Start 단계에서 이미 소비된 소재는 자동으로 반환되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Progress 강화의 진행 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DeleteProgressByUserId ( \u0026 enhance . DeleteProgressByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DeleteProgressByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e deleteProgressByUserId ( ( new DeleteProgressByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DeleteProgressByUserIdRequest ; import io.gs2.enhance.result.DeleteProgressByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DeleteProgressByUserIdResult result = client . deleteProgressByUserId ( new DeleteProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DeleteProgressByUserIdResult \u003e asyncResult = null ; yield return client . DeleteProgressByUserId ( new Gs2 . Gs2Enhance . Request . DeleteProgressByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . deleteProgressByUserId ( new Gs2Enhance . DeleteProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . delete_progress_by_user_id ( enhance . DeleteProgressByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.delete_progress_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.delete_progress_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRateModels 강화 레이트 모델 목록 가져오기 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 강화 레이트 모델의 목록을 가져옵니다. 각 레이트 모델은 대상 인벤토리 모델, 소재 인벤토리 모델, 경험치 계층, 경험치 서픽스, 보너스 레이트를 포함한 강화 설정을 정의합니다. CurrentRateMaster에서 활성화된 모델만 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 강화 레이트 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DescribeRateModels ( \u0026 enhance . DescribeRateModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DescribeRateModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e describeRateModels ( ( new DescribeRateModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DescribeRateModelsRequest ; import io.gs2.enhance.result.DescribeRateModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DescribeRateModelsResult result = client . describeRateModels ( new DescribeRateModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List RateModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DescribeRateModelsResult \u003e asyncResult = null ; yield return client . DescribeRateModels ( new Gs2 . Gs2Enhance . Request . DescribeRateModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . describeRateModels ( new Gs2Enhance . DescribeRateModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . describe_rate_models ( enhance . DescribeRateModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.describe_rate_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'enhance' ) api_result_handler = client.describe_rate_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getRateModel 강화 레이트 모델 가져오기 이름을 지정하여 현재 활성화되어 있는 특정 강화 레이트 모델의 상세 정보를 가져옵니다. 반환되는 모델에는 대상 인벤토리 모델 ID, 소재 인벤토리 모델 ID, 취득 경험치 서픽스, 취득 경험치 계층, 경험치 모델 ID, 보너스 레이트 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item RateModel 강화 레이트 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetRateModel ( \u0026 enhance . GetRateModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetRateModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getRateModel ( ( new GetRateModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetRateModelRequest ; import io.gs2.enhance.result.GetRateModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetRateModelResult result = client . getRateModel ( new GetRateModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); RateModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetRateModelResult \u003e asyncResult = null ; yield return client . GetRateModel ( new Gs2 . Gs2Enhance . Request . GetRateModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getRateModel ( new Gs2Enhance . GetRateModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_rate_model ( enhance . GetRateModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_rate_model ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_rate_model_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeUnleashRateModels 한계돌파 레이트 모델 목록 취득 지정된 네임스페이스에서 현재 유효화(공개)되어 있는 한계돌파 레이트 모델의 목록을 취득합니다. 각 한계돌파 레이트 모델은 대상 인벤토리 모델, 그레이드 모델, 각 그레이드 레벨에 필요한 소재를 지정하는 그레이드 엔트리를 포함한 한계돌파 설정을 정의합니다. CurrentRateMaster에서 유효화된 모델만 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 한계돌파 레이트 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DescribeUnleashRateModels ( \u0026 enhance . DescribeUnleashRateModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DescribeUnleashRateModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e describeUnleashRateModels ( ( new DescribeUnleashRateModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DescribeUnleashRateModelsRequest ; import io.gs2.enhance.result.DescribeUnleashRateModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DescribeUnleashRateModelsResult result = client . describeUnleashRateModels ( new DescribeUnleashRateModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List UnleashRateModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DescribeUnleashRateModelsResult \u003e asyncResult = null ; yield return client . DescribeUnleashRateModels ( new Gs2 . Gs2Enhance . Request . DescribeUnleashRateModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . describeUnleashRateModels ( new Gs2Enhance . DescribeUnleashRateModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . describe_unleash_rate_models ( enhance . DescribeUnleashRateModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.describe_unleash_rate_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'enhance' ) api_result_handler = client.describe_unleash_rate_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getUnleashRateModel 한계돌파 레이트 모델 취득 이름을 지정하여 현재 유효화되어 있는 특정 한계돌파 레이트 모델의 상세 정보를 취득합니다. 반환되는 모델에는 대상 인벤토리 모델ID, 그레이드 모델ID, 한계돌파의 각 그레이드 레벨에 필요한 소재 요건을 정의하는 그레이드 엔트리가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item UnleashRateModel 한계돌파 레이트 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetUnleashRateModel ( \u0026 enhance . GetUnleashRateModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetUnleashRateModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getUnleashRateModel ( ( new GetUnleashRateModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetUnleashRateModelRequest ; import io.gs2.enhance.result.GetUnleashRateModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetUnleashRateModelResult result = client . getUnleashRateModel ( new GetUnleashRateModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); UnleashRateModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetUnleashRateModelResult \u003e asyncResult = null ; yield return client . GetUnleashRateModel ( new Gs2 . Gs2Enhance . Request . GetUnleashRateModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getUnleashRateModel ( new Gs2Enhance . GetUnleashRateModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_unleash_rate_model ( enhance . GetUnleashRateModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_unleash_rate_model ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_unleash_rate_model_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 레이트 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 레이트 모델 마스터 데이터(강화 레이트 모델과 한계돌파 레이트 모델 모두)를 활성화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 임포트에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentRateMaster 활성화 가능한 레이트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 enhance . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.ExportMasterRequest ; import io.gs2.enhance.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentRateMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Enhance . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Enhance . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . export_master ( enhance . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터를 조회 지정된 네임스페이스에서 현재 활성화(공개)된 레이트 모델(강화 레이트 모델과 한계돌파 레이트 모델 모두)의 마스터 데이터를 조회합니다. 이는 편집 가능한 마스터 데이터와는 달리, 실제로 운영 환경에서 사용되고 있는 구성을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetCurrentRateMaster ( \u0026 enhance . GetCurrentRateMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetCurrentRateMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getCurrentRateMaster ( ( new GetCurrentRateMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetCurrentRateMasterRequest ; import io.gs2.enhance.result.GetCurrentRateMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetCurrentRateMasterResult result = client . getCurrentRateMaster ( new GetCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentRateMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetCurrentRateMasterResult \u003e asyncResult = null ; yield return client . GetCurrentRateMaster ( new Gs2 . Gs2Enhance . Request . GetCurrentRateMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getCurrentRateMaster ( new Gs2Enhance . GetCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_current_rate_master ( enhance . GetCurrentRateMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_current_rate_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_current_rate_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 대해 마스터 데이터를 업로드합니다. UpdateCurrentRateMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentRateMaster ( \u0026 enhance . PreUpdateCurrentRateMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\PreUpdateCurrentRateMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentRateMaster ( ( new PreUpdateCurrentRateMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.PreUpdateCurrentRateMasterRequest ; import io.gs2.enhance.result.PreUpdateCurrentRateMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { PreUpdateCurrentRateMasterResult result = client . preUpdateCurrentRateMaster ( new PreUpdateCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . PreUpdateCurrentRateMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentRateMaster ( new Gs2 . Gs2Enhance . Request . PreUpdateCurrentRateMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . preUpdateCurrentRateMaster ( new Gs2Enhance . PreUpdateCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . pre_update_current_rate_master ( enhance . PreUpdateCurrentRateMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.pre_update_current_rate_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'enhance' ) api_result_handler = client.pre_update_current_rate_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 갱신 지정된 네임스페이스의 레이트 모델 마스터 데이터를 갱신하고 활성화(공개)합니다. 두 가지 모드를 지원합니다: 인라인 마스터 데이터용 ‘direct’ 모드와, 사전에 업로드된 마스터 데이터용 ‘preUpload’ 모드입니다. 1MB를 초과하는 마스터 데이터의 경우, 3단계 갱신 흐름(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))을 사용하세요. 업로드된 마스터 데이터는 적용 전에 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentRateMaster 갱신된 현재 활성화된 레이트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentRateMaster ( \u0026 enhance . UpdateCurrentRateMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2020-08-22\\\",\\n \\\"rateModels\\\": [\\n {\\n \\\"name\\\": \\\"character-friendly\\\",\\n \\\"metadata\\\": \\\"CHARACTER_FRIENDLY\\\",\\n \\\"targetInventoryModelId\\\": \\\"grn:inventory:character\\\",\\n \\\"acquireExperienceSuffix\\\": \\\":friendly\\\",\\n \\\"materialInventoryModelId\\\": \\\"grn:inventory:sweet\\\",\\n \\\"acquireExperienceHierarchy\\\": [\\n \\\"taste\\\"\\n ],\\n \\\"experienceModelId\\\": \\\"grn:experience:friendly\\\",\\n \\\"bonusRates\\\": [\\n {\\n \\\"rate\\\": 1,\\n \\\"weight\\\": 90\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"character-level\\\",\\n \\\"metadata\\\": \\\"CHARACTER_LEVEL\\\",\\n \\\"targetInventoryModelId\\\": \\\"grn:inventory:character\\\",\\n \\\"acquireExperienceSuffix\\\": \\\":level\\\",\\n \\\"materialInventoryModelId\\\": \\\"grn:inventory:material\\\",\\n \\\"acquireExperienceHierarchy\\\": [\\n \\\"experience\\\"\\n ],\\n \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\\\",\\n \\\"bonusRates\\\": [\\n {\\n \\\"rate\\\": 1,\\n \\\"weight\\\": 90\\n },\\n {\\n \\\"rate\\\": 1.5,\\n \\\"weight\\\": 9\\n },\\n {\\n \\\"rate\\\": 2,\\n \\\"weight\\\": 1\\n }\\n ]\\n }\\n ],\\n \\\"unleashRateModels\\\": []\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\UpdateCurrentRateMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e updateCurrentRateMaster ( ( new UpdateCurrentRateMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2020-08-22 \\\" , \\n \\\" rateModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" character-friendly \\\" , \\n \\\" metadata \\\" : \\\" CHARACTER_FRIENDLY \\\" , \\n \\\" targetInventoryModelId \\\" : \\\" grn:inventory:character \\\" , \\n \\\" acquireExperienceSuffix \\\" : \\\" :friendly \\\" , \\n \\\" materialInventoryModelId \\\" : \\\" grn:inventory:sweet \\\" , \\n \\\" acquireExperienceHierarchy \\\" : [ \\n \\\" taste \\\"\\n ], \\n \\\" experienceModelId \\\" : \\\" grn:experience:friendly \\\" , \\n \\\" bonusRates \\\" : [ \\n { \\n \\\" rate \\\" : 1, \\n \\\" weight \\\" : 90 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" character-level \\\" , \\n \\\" metadata \\\" : \\\" CHARACTER_LEVEL \\\" , \\n \\\" targetInventoryModelId \\\" : \\\" grn:inventory:character \\\" , \\n \\\" acquireExperienceSuffix \\\" : \\\" :level \\\" , \\n \\\" materialInventoryModelId \\\" : \\\" grn:inventory:material \\\" , \\n \\\" acquireExperienceHierarchy \\\" : [ \\n \\\" experience \\\"\\n ], \\n \\\" experienceModelId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level \\\" , \\n \\\" bonusRates \\\" : [ \\n { \\n \\\" rate \\\" : 1, \\n \\\" weight \\\" : 90 \\n }, \\n { \\n \\\" rate \\\" : 1.5, \\n \\\" weight \\\" : 9 \\n }, \\n { \\n \\\" rate \\\" : 2, \\n \\\" weight \\\" : 1 \\n } \\n ] \\n } \\n ], \\n \\\" unleashRateModels \\\" : [] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.UpdateCurrentRateMasterRequest ; import io.gs2.enhance.result.UpdateCurrentRateMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { UpdateCurrentRateMasterResult result = client . updateCurrentRateMaster ( new UpdateCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2020-08-22\\\",\\n \\\"rateModels\\\": [\\n {\\n \\\"name\\\": \\\"character-friendly\\\",\\n \\\"metadata\\\": \\\"CHARACTER_FRIENDLY\\\",\\n \\\"targetInventoryModelId\\\": \\\"grn:inventory:character\\\",\\n \\\"acquireExperienceSuffix\\\": \\\":friendly\\\",\\n \\\"materialInventoryModelId\\\": \\\"grn:inventory:sweet\\\",\\n \\\"acquireExperienceHierarchy\\\": [\\n \\\"taste\\\"\\n ],\\n \\\"experienceModelId\\\": \\\"grn:experience:friendly\\\",\\n \\\"bonusRates\\\": [\\n {\\n \\\"rate\\\": 1,\\n \\\"weight\\\": 90\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"character-level\\\",\\n \\\"metadata\\\": \\\"CHARACTER_LEVEL\\\",\\n \\\"targetInventoryModelId\\\": \\\"grn:inventory:character\\\",\\n \\\"acquireExperienceSuffix\\\": \\\":level\\\",\\n \\\"materialInventoryModelId\\\": \\\"grn:inventory:material\\\",\\n \\\"acquireExperienceHierarchy\\\": [\\n \\\"experience\\\"\\n ],\\n \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\\\",\\n \\\"bonusRates\\\": [\\n {\\n \\\"rate\\\": 1,\\n \\\"weight\\\": 90\\n },\\n {\\n \\\"rate\\\": 1.5,\\n \\\"weight\\\": 9\\n },\\n {\\n \\\"rate\\\": 2,\\n \\\"weight\\\": 1\\n }\\n ]\\n }\\n ],\\n \\\"unleashRateModels\\\": []\\n}\" ) . withUploadToken ( null ) ); CurrentRateMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . UpdateCurrentRateMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentRateMaster ( new Gs2 . Gs2Enhance . Request . UpdateCurrentRateMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2020-08-22\\\",\\n \\\"rateModels\\\": [\\n {\\n \\\"name\\\": \\\"character-friendly\\\",\\n \\\"metadata\\\": \\\"CHARACTER_FRIENDLY\\\",\\n \\\"targetInventoryModelId\\\": \\\"grn:inventory:character\\\",\\n \\\"acquireExperienceSuffix\\\": \\\":friendly\\\",\\n \\\"materialInventoryModelId\\\": \\\"grn:inventory:sweet\\\",\\n \\\"acquireExperienceHierarchy\\\": [\\n \\\"taste\\\"\\n ],\\n \\\"experienceModelId\\\": \\\"grn:experience:friendly\\\",\\n \\\"bonusRates\\\": [\\n {\\n \\\"rate\\\": 1,\\n \\\"weight\\\": 90\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"character-level\\\",\\n \\\"metadata\\\": \\\"CHARACTER_LEVEL\\\",\\n \\\"targetInventoryModelId\\\": \\\"grn:inventory:character\\\",\\n \\\"acquireExperienceSuffix\\\": \\\":level\\\",\\n \\\"materialInventoryModelId\\\": \\\"grn:inventory:material\\\",\\n \\\"acquireExperienceHierarchy\\\": [\\n \\\"experience\\\"\\n ],\\n \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\\\",\\n \\\"bonusRates\\\": [\\n {\\n \\\"rate\\\": 1,\\n \\\"weight\\\": 90\\n },\\n {\\n \\\"rate\\\": 1.5,\\n \\\"weight\\\": 9\\n },\\n {\\n \\\"rate\\\": 2,\\n \\\"weight\\\": 1\\n }\\n ]\\n }\\n ],\\n \\\"unleashRateModels\\\": []\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . updateCurrentRateMaster ( new Gs2Enhance . UpdateCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2020-08-22\\\",\\n \\\"rateModels\\\": [\\n {\\n \\\"name\\\": \\\"character-friendly\\\",\\n \\\"metadata\\\": \\\"CHARACTER_FRIENDLY\\\",\\n \\\"targetInventoryModelId\\\": \\\"grn:inventory:character\\\",\\n \\\"acquireExperienceSuffix\\\": \\\":friendly\\\",\\n \\\"materialInventoryModelId\\\": \\\"grn:inventory:sweet\\\",\\n \\\"acquireExperienceHierarchy\\\": [\\n \\\"taste\\\"\\n ],\\n \\\"experienceModelId\\\": \\\"grn:experience:friendly\\\",\\n \\\"bonusRates\\\": [\\n {\\n \\\"rate\\\": 1,\\n \\\"weight\\\": 90\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"character-level\\\",\\n \\\"metadata\\\": \\\"CHARACTER_LEVEL\\\",\\n \\\"targetInventoryModelId\\\": \\\"grn:inventory:character\\\",\\n \\\"acquireExperienceSuffix\\\": \\\":level\\\",\\n \\\"materialInventoryModelId\\\": \\\"grn:inventory:material\\\",\\n \\\"acquireExperienceHierarchy\\\": [\\n \\\"experience\\\"\\n ],\\n \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\\\",\\n \\\"bonusRates\\\": [\\n {\\n \\\"rate\\\": 1,\\n \\\"weight\\\": 90\\n },\\n {\\n \\\"rate\\\": 1.5,\\n \\\"weight\\\": 9\\n },\\n {\\n \\\"rate\\\": 2,\\n \\\"weight\\\": 1\\n }\\n ]\\n }\\n ],\\n \\\"unleashRateModels\\\": []\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . update_current_rate_master ( enhance . UpdateCurrentRateMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2020-08-22\", \\n \"rateModels\": [ \\n { \\n \"name\": \"character-friendly\", \\n \"metadata\": \"CHARACTER_FRIENDLY\", \\n \"targetInventoryModelId\": \"grn:inventory:character\", \\n \"acquireExperienceSuffix\": \":friendly\", \\n \"materialInventoryModelId\": \"grn:inventory:sweet\", \\n \"acquireExperienceHierarchy\": [ \\n \"taste\" \\n ], \\n \"experienceModelId\": \"grn:experience:friendly\", \\n \"bonusRates\": [ \\n { \\n \"rate\": 1, \\n \"weight\": 90 \\n } \\n ] \\n }, \\n { \\n \"name\": \"character-level\", \\n \"metadata\": \"CHARACTER_LEVEL\", \\n \"targetInventoryModelId\": \"grn:inventory:character\", \\n \"acquireExperienceSuffix\": \":level\", \\n \"materialInventoryModelId\": \"grn:inventory:material\", \\n \"acquireExperienceHierarchy\": [ \\n \"experience\" \\n ], \\n \"experienceModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\", \\n \"bonusRates\": [ \\n { \\n \"rate\": 1, \\n \"weight\": 90 \\n }, \\n { \\n \"rate\": 1.5, \\n \"weight\": 9 \\n }, \\n { \\n \"rate\": 2, \\n \"weight\": 1 \\n } \\n ] \\n } \\n ], \\n \"unleashRateModels\": [] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.update_current_rate_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2020-08-22 \\\" , \\n \\\" rateModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" character-friendly \\\" , \\n \\\" metadata \\\" : \\\" CHARACTER_FRIENDLY \\\" , \\n \\\" targetInventoryModelId \\\" : \\\" grn:inventory:character \\\" , \\n \\\" acquireExperienceSuffix \\\" : \\\" :friendly \\\" , \\n \\\" materialInventoryModelId \\\" : \\\" grn:inventory:sweet \\\" , \\n \\\" acquireExperienceHierarchy \\\" : [ \\n \\\" taste \\\"\\n ], \\n \\\" experienceModelId \\\" : \\\" grn:experience:friendly \\\" , \\n \\\" bonusRates \\\" : [ \\n { \\n \\\" rate \\\" : 1, \\n \\\" weight \\\" : 90 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" character-level \\\" , \\n \\\" metadata \\\" : \\\" CHARACTER_LEVEL \\\" , \\n \\\" targetInventoryModelId \\\" : \\\" grn:inventory:character \\\" , \\n \\\" acquireExperienceSuffix \\\" : \\\" :level \\\" , \\n \\\" materialInventoryModelId \\\" : \\\" grn:inventory:material \\\" , \\n \\\" acquireExperienceHierarchy \\\" : [ \\n \\\" experience \\\"\\n ], \\n \\\" experienceModelId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level \\\" , \\n \\\" bonusRates \\\" : [ \\n { \\n \\\" rate \\\" : 1, \\n \\\" weight \\\" : 90 \\n }, \\n { \\n \\\" rate \\\" : 1.5, \\n \\\" weight \\\" : 9 \\n }, \\n { \\n \\\" rate \\\" : 2, \\n \\\" weight \\\" : 1 \\n } \\n ] \\n } \\n ], \\n \\\" unleashRateModels \\\" : [] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.update_current_rate_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2020-08-22 \\\" , \\n \\\" rateModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" character-friendly \\\" , \\n \\\" metadata \\\" : \\\" CHARACTER_FRIENDLY \\\" , \\n \\\" targetInventoryModelId \\\" : \\\" grn:inventory:character \\\" , \\n \\\" acquireExperienceSuffix \\\" : \\\" :friendly \\\" , \\n \\\" materialInventoryModelId \\\" : \\\" grn:inventory:sweet \\\" , \\n \\\" acquireExperienceHierarchy \\\" : [ \\n \\\" taste \\\"\\n ], \\n \\\" experienceModelId \\\" : \\\" grn:experience:friendly \\\" , \\n \\\" bonusRates \\\" : [ \\n { \\n \\\" rate \\\" : 1, \\n \\\" weight \\\" : 90 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" character-level \\\" , \\n \\\" metadata \\\" : \\\" CHARACTER_LEVEL \\\" , \\n \\\" targetInventoryModelId \\\" : \\\" grn:inventory:character \\\" , \\n \\\" acquireExperienceSuffix \\\" : \\\" :level \\\" , \\n \\\" materialInventoryModelId \\\" : \\\" grn:inventory:material \\\" , \\n \\\" acquireExperienceHierarchy \\\" : [ \\n \\\" experience \\\"\\n ], \\n \\\" experienceModelId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level \\\" , \\n \\\" bonusRates \\\" : [ \\n { \\n \\\" rate \\\" : 1, \\n \\\" weight \\\" : 90 \\n }, \\n { \\n \\\" rate \\\" : 1.5, \\n \\\" weight \\\" : 9 \\n }, \\n { \\n \\\" rate \\\" : 2, \\n \\\" weight \\\" : 1 \\n } \\n ] \\n } \\n ], \\n \\\" unleashRateModels \\\" : [] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentRateMasterFromGitHub 현재 활성화된 레이트 모델의 마스터 데이터를 GitHub에서 갱신 GitHub 저장소에서 직접 마스터 데이터를 취득하여 갱신·활성화(공개)합니다. 체크아웃 설정에는 사용할 저장소, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고 직접 배포하는 경우에 편리합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentRateMaster 갱신된 현재 활성화된 레이트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentRateMasterFromGitHub ( \u0026 enhance . UpdateCurrentRateMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 enhance . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\UpdateCurrentRateMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e updateCurrentRateMasterFromGitHub ( ( new UpdateCurrentRateMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.UpdateCurrentRateMasterFromGitHubRequest ; import io.gs2.enhance.result.UpdateCurrentRateMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { UpdateCurrentRateMasterFromGitHubResult result = client . updateCurrentRateMasterFromGitHub ( new UpdateCurrentRateMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentRateMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . UpdateCurrentRateMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentRateMasterFromGitHub ( new Gs2 . Gs2Enhance . Request . UpdateCurrentRateMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Enhance . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . updateCurrentRateMasterFromGitHub ( new Gs2Enhance . UpdateCurrentRateMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Enhance . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . update_current_rate_master_from_git_hub ( enhance . UpdateCurrentRateMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( enhance . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.update_current_rate_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.update_current_rate_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRateModelMasters 강화 레이트 모델 마스터 목록 가져오기 이름 접두사로 필터링이 가능한, 편집 가능한 강화 레이트 모델 마스터의 페이지네이션 목록을 가져옵니다. 강화 레이트 모델 마스터는 강화 레이트 설정의 편집 가능한 정의입니다. 마스터에 대한 변경 사항은 CurrentRateMaster API에서 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 강화 레이트 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 강화 레이트 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DescribeRateModelMasters ( \u0026 enhance . DescribeRateModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DescribeRateModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e describeRateModelMasters ( ( new DescribeRateModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DescribeRateModelMastersRequest ; import io.gs2.enhance.result.DescribeRateModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DescribeRateModelMastersResult result = client . describeRateModelMasters ( new DescribeRateModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List RateModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DescribeRateModelMastersResult \u003e asyncResult = null ; yield return client . DescribeRateModelMasters ( new Gs2 . Gs2Enhance . Request . DescribeRateModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . describeRateModelMasters ( new Gs2Enhance . DescribeRateModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . describe_rate_model_masters ( enhance . DescribeRateModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.describe_rate_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enhance' ) api_result_handler = client.describe_rate_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createRateModelMaster 강화 레이트 모델 마스터를 신규 작성 새로운 편집 가능한 강화 레이트 모델 마스터 정의를 작성합니다. 레이트 모델은 대상 인벤토리 모델, 소재 인벤토리 모델, 경험치 계층, 경험치 서픽스, 경험치 모델, 보너스 레이트를 정의합니다. 보너스 레이트는 강화 실행 시 경험치 배율이 적용될 확률을 정의합니다. 변경 사항은 CurrentRateMaster API에서 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 강화 대상으로 사용할 수 있는 GS2-Inventory 인벤토리 모델의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 강화되는 아이템은 이 인벤토리 모델에 속해 있어야 합니다. acquireExperienceSuffix string  ~ 1024자 GS2-Experience에서 획득한 경험치를 저장하는 프로퍼티 ID에 부여하는 서픽스 아이템의 프로퍼티 ID 끝에 추가되어, 경험치가 저장되는 GS2-Experience의 프로퍼티 ID를 구성하는 문자열입니다. 같은 아이템에 여러 경험치 종류를 부여할 수 있습니다(예: 캐릭터 레벨의 “level”, 호감도의 “like”). materialInventoryModelId string  ~ 1024자 강화 소재로 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 사용할 수 있는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 각 소재가 제공하는 경험치는 acquireExperienceHierarchy로 지정된 JSON 계층을 사용하여 아이템 모델의 메타데이터에 정의됩니다. acquireExperienceHierarchy List 0 ~ 10 items ItemModel의 메타데이터에 저장할, 획득 경험치를 정의하는 JSON 데이터의 계층 구조 정의 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 기능이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 예를 들어, { “aaa”: { “bbb”: { “experienceValue”: 100 } } }와 같은 구조의 데이터 정의로 메타데이터에 설정하고 싶은 경우에는 [ “aaa”, “bbb”, “experienceValue” ]와 같이 지정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. experienceModelId string  ~ 1024자 강화 결과로 얻는 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화로 얻은 경험치가 기록되는 GS2-Experience의 경험치 모델을 지정합니다. 경험치는 대상 아이템의 프로퍼티 ID와 acquireExperienceSuffix를 조합하여 식별되는 프로퍼티에 가산됩니다. bonusRates List 0 ~ 1000 items 경험치 획득량 보너스 강화 시 보너스 경험치 배율의 가중치 추첨을 정의합니다. 각 항목은 배율(예: 1.5로 150%)과 추첨 가중치를 지정합니다. 강화 실행 시 가중치 추첨으로 하나의 항목이 선택되어, 획득 경험치에 “대성공” 보너스가 적용되는지 여부가 결정됩니다. Result 타입 설명 item RateModelMaster 작성한 강화 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . CreateRateModelMaster ( \u0026 enhance . CreateRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"character-level\" ), Description : nil , Metadata : pointy . String ( \"CHARACTER_LEVEL\" ), TargetInventoryModelId : pointy . String ( \"grn:inventory:character\" ), AcquireExperienceSuffix : pointy . String ( \":level\" ), MaterialInventoryModelId : pointy . String ( \"grn:inventory:material\" ), AcquireExperienceHierarchy : [] * string { pointy . String ( \"experience\" ), }, ExperienceModelId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ), BonusRates : [] enhance . BonusRate { enhance . BonusRate { Rate : pointy . Float32 ( 1.0 ), Weight : pointy . Int32 ( 90 ), }, enhance . BonusRate { Rate : pointy . Float32 ( 1.5 ), Weight : pointy . Int32 ( 9 ), }, enhance . BonusRate { Rate : pointy . Float32 ( 2.0 ), Weight : pointy . Int32 ( 1 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\CreateRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e createRateModelMaster ( ( new CreateRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"character-level\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( \"CHARACTER_LEVEL\" ) -\u003e withTargetInventoryModelId ( \"grn:inventory:character\" ) -\u003e withAcquireExperienceSuffix ( \":level\" ) -\u003e withMaterialInventoryModelId ( \"grn:inventory:material\" ) -\u003e withAcquireExperienceHierarchy ([ \"experience\" , ]) -\u003e withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ) -\u003e withBonusRates ([ ( new \\Gs2\\Enhance\\Model\\BonusRate ()) -\u003e withRate ( 1.0 ) -\u003e withWeight ( 90 ), ( new \\Gs2\\Enhance\\Model\\BonusRate ()) -\u003e withRate ( 1.5 ) -\u003e withWeight ( 9 ), ( new \\Gs2\\Enhance\\Model\\BonusRate ()) -\u003e withRate ( 2.0 ) -\u003e withWeight ( 1 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.CreateRateModelMasterRequest ; import io.gs2.enhance.result.CreateRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { CreateRateModelMasterResult result = client . createRateModelMaster ( new CreateRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"character-level\" ) . withDescription ( null ) . withMetadata ( \"CHARACTER_LEVEL\" ) . withTargetInventoryModelId ( \"grn:inventory:character\" ) . withAcquireExperienceSuffix ( \":level\" ) . withMaterialInventoryModelId ( \"grn:inventory:material\" ) . withAcquireExperienceHierarchy ( Arrays . asList ( \"experience\" )) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ) . withBonusRates ( Arrays . asList ( new io . gs2 . enhance . model . BonusRate () . withRate ( 1 . 0f ) . withWeight ( 90 ), new io . gs2 . enhance . model . BonusRate () . withRate ( 1 . 5f ) . withWeight ( 9 ), new io . gs2 . enhance . model . BonusRate () . withRate ( 2 . 0f ) . withWeight ( 1 ) )) ); RateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . CreateRateModelMasterResult \u003e asyncResult = null ; yield return client . CreateRateModelMaster ( new Gs2 . Gs2Enhance . Request . CreateRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"character-level\" ) . WithDescription ( null ) . WithMetadata ( \"CHARACTER_LEVEL\" ) . WithTargetInventoryModelId ( \"grn:inventory:character\" ) . WithAcquireExperienceSuffix ( \":level\" ) . WithMaterialInventoryModelId ( \"grn:inventory:material\" ) . WithAcquireExperienceHierarchy ( new string [] { \"experience\" , }) . WithExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ) . WithBonusRates ( new Gs2 . Gs2Enhance . Model . BonusRate [] { new Gs2 . Gs2Enhance . Model . BonusRate () . WithRate ( 1.0f ) . WithWeight ( 90 ), new Gs2 . Gs2Enhance . Model . BonusRate () . WithRate ( 1.5f ) . WithWeight ( 9 ), new Gs2 . Gs2Enhance . Model . BonusRate () . WithRate ( 2.0f ) . WithWeight ( 1 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . createRateModelMaster ( new Gs2Enhance . CreateRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"character-level\" ) . withDescription ( null ) . withMetadata ( \"CHARACTER_LEVEL\" ) . withTargetInventoryModelId ( \"grn:inventory:character\" ) . withAcquireExperienceSuffix ( \":level\" ) . withMaterialInventoryModelId ( \"grn:inventory:material\" ) . withAcquireExperienceHierarchy ([ \"experience\" , ]) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ) . withBonusRates ([ new Gs2Enhance . model . BonusRate () . withRate ( 1.0 ) . withWeight ( 90 ), new Gs2Enhance . model . BonusRate () . withRate ( 1.5 ) . withWeight ( 9 ), new Gs2Enhance . model . BonusRate () . withRate ( 2.0 ) . withWeight ( 1 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . create_rate_model_master ( enhance . CreateRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'character-level' ) . with_description ( None ) . with_metadata ( 'CHARACTER_LEVEL' ) . with_target_inventory_model_id ( 'grn:inventory:character' ) . with_acquire_experience_suffix ( ':level' ) . with_material_inventory_model_id ( 'grn:inventory:material' ) . with_acquire_experience_hierarchy ([ 'experience' , ]) . with_experience_model_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level' ) . with_bonus_rates ([ enhance . BonusRate () . with_rate ( 1.0 ) . with_weight ( 90 ), enhance . BonusRate () . with_rate ( 1.5 ) . with_weight ( 9 ), enhance . BonusRate () . with_rate ( 2.0 ) . with_weight ( 1 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.create_rate_model_master ({ namespaceName = \"namespace-0001\" , name = \"character-level\" , description = nil , metadata = \"CHARACTER_LEVEL\" , targetInventoryModelId = \"grn:inventory:character\" , acquireExperienceSuffix = \":level\" , materialInventoryModelId = \"grn:inventory:material\" , acquireExperienceHierarchy = { \"experience\" }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , bonusRates = { { rate = 1.0 , weight = 90 , }, { rate = 1.5 , weight = 9 , }, { rate = 2.0 , weight = 1 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.create_rate_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"character-level\" , description = nil , metadata = \"CHARACTER_LEVEL\" , targetInventoryModelId = \"grn:inventory:character\" , acquireExperienceSuffix = \":level\" , materialInventoryModelId = \"grn:inventory:material\" , acquireExperienceHierarchy = { \"experience\" }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , bonusRates = { { rate = 1.0 , weight = 90 , }, { rate = 1.5 , weight = 9 , }, { rate = 2.0 , weight = 1 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRateModelMaster 강화 레이트 모델 마스터를 조회 이름을 지정하여 특정 편집 가능한 강화 레이트 모델 마스터의 상세 정보를 조회합니다. 활성화 전 마스터 정의의 열람·편집에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item RateModelMaster 강화 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetRateModelMaster ( \u0026 enhance . GetRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getRateModelMaster ( ( new GetRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetRateModelMasterRequest ; import io.gs2.enhance.result.GetRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetRateModelMasterResult result = client . getRateModelMaster ( new GetRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); RateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetRateModelMasterResult \u003e asyncResult = null ; yield return client . GetRateModelMaster ( new Gs2 . Gs2Enhance . Request . GetRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getRateModelMaster ( new Gs2Enhance . GetRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_rate_model_master ( enhance . GetRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRateModelMaster 강화 레이트 모델 마스터를 갱신 기존 강화 레이트 모델 마스터의 설명, 메타데이터, 대상 인벤토리 모델, 소재 인벤토리 모델, 경험치 계층, 경험치 접미사, 경험치 모델, 보너스 레이트를 갱신합니다. 레이트 모델 이름은 작성 후 변경할 수 없습니다. 변경 사항은 CurrentRateMaster API에서 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 강화 대상으로 사용할 수 있는 GS2-Inventory 인벤토리 모델의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 강화되는 아이템은 이 인벤토리 모델에 속해 있어야 합니다. acquireExperienceSuffix string  ~ 1024자 GS2-Experience에서 획득한 경험치를 저장하는 프로퍼티 ID에 부여하는 서픽스 아이템의 프로퍼티 ID 끝에 추가되어, 경험치가 저장되는 GS2-Experience의 프로퍼티 ID를 구성하는 문자열입니다. 같은 아이템에 여러 경험치 종류를 부여할 수 있습니다(예: 캐릭터 레벨의 “level”, 호감도의 “like”). materialInventoryModelId string  ~ 1024자 강화 소재로 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 사용할 수 있는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 각 소재가 제공하는 경험치는 acquireExperienceHierarchy로 지정된 JSON 계층을 사용하여 아이템 모델의 메타데이터에 정의됩니다. acquireExperienceHierarchy List 0 ~ 10 items ItemModel의 메타데이터에 저장할, 획득 경험치를 정의하는 JSON 데이터의 계층 구조 정의 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 기능이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 예를 들어, { “aaa”: { “bbb”: { “experienceValue”: 100 } } }와 같은 구조의 데이터 정의로 메타데이터에 설정하고 싶은 경우에는 [ “aaa”, “bbb”, “experienceValue” ]와 같이 지정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. experienceModelId string  ~ 1024자 강화 결과로 얻는 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화로 얻은 경험치가 기록되는 GS2-Experience의 경험치 모델을 지정합니다. 경험치는 대상 아이템의 프로퍼티 ID와 acquireExperienceSuffix를 조합하여 식별되는 프로퍼티에 가산됩니다. bonusRates List 0 ~ 1000 items 경험치 획득량 보너스 강화 시 보너스 경험치 배율의 가중치 추첨을 정의합니다. 각 항목은 배율(예: 1.5로 150%)과 추첨 가중치를 지정합니다. 강화 실행 시 가중치 추첨으로 하나의 항목이 선택되어, 획득 경험치에 “대성공” 보너스가 적용되는지 여부가 결정됩니다. Result 타입 설명 item RateModelMaster 갱신한 강화 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . UpdateRateModelMaster ( \u0026 enhance . UpdateRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), Description : nil , Metadata : pointy . String ( \"CHARACTER_LEVEL2\" ), TargetInventoryModelId : pointy . String ( \"grn:inventory:character2\" ), AcquireExperienceSuffix : pointy . String ( \":level2\" ), MaterialInventoryModelId : pointy . String ( \"grn:inventory:material2\" ), AcquireExperienceHierarchy : [] * string { pointy . String ( \"experience2\" ), }, ExperienceModelId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ), BonusRates : [] enhance . BonusRate { enhance . BonusRate { Rate : pointy . Float32 ( 1.05 ), Weight : pointy . Int32 ( 905 ), }, enhance . BonusRate { Rate : pointy . Float32 ( 1.55 ), Weight : pointy . Int32 ( 95 ), }, enhance . BonusRate { Rate : pointy . Float32 ( 2.05 ), Weight : pointy . Int32 ( 15 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\UpdateRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e updateRateModelMaster ( ( new UpdateRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( \"CHARACTER_LEVEL2\" ) -\u003e withTargetInventoryModelId ( \"grn:inventory:character2\" ) -\u003e withAcquireExperienceSuffix ( \":level2\" ) -\u003e withMaterialInventoryModelId ( \"grn:inventory:material2\" ) -\u003e withAcquireExperienceHierarchy ([ \"experience2\" , ]) -\u003e withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ) -\u003e withBonusRates ([ ( new \\Gs2\\Enhance\\Model\\BonusRate ()) -\u003e withRate ( 1.05 ) -\u003e withWeight ( 905 ), ( new \\Gs2\\Enhance\\Model\\BonusRate ()) -\u003e withRate ( 1.55 ) -\u003e withWeight ( 95 ), ( new \\Gs2\\Enhance\\Model\\BonusRate ()) -\u003e withRate ( 2.05 ) -\u003e withWeight ( 15 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.UpdateRateModelMasterRequest ; import io.gs2.enhance.result.UpdateRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { UpdateRateModelMasterResult result = client . updateRateModelMaster ( new UpdateRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) . withDescription ( null ) . withMetadata ( \"CHARACTER_LEVEL2\" ) . withTargetInventoryModelId ( \"grn:inventory:character2\" ) . withAcquireExperienceSuffix ( \":level2\" ) . withMaterialInventoryModelId ( \"grn:inventory:material2\" ) . withAcquireExperienceHierarchy ( Arrays . asList ( \"experience2\" )) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ) . withBonusRates ( Arrays . asList ( new io . gs2 . enhance . model . BonusRate () . withRate ( 1 . 05f ) . withWeight ( 905 ), new io . gs2 . enhance . model . BonusRate () . withRate ( 1 . 55f ) . withWeight ( 95 ), new io . gs2 . enhance . model . BonusRate () . withRate ( 2 . 05f ) . withWeight ( 15 ) )) ); RateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . UpdateRateModelMasterResult \u003e asyncResult = null ; yield return client . UpdateRateModelMaster ( new Gs2 . Gs2Enhance . Request . UpdateRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ) . WithDescription ( null ) . WithMetadata ( \"CHARACTER_LEVEL2\" ) . WithTargetInventoryModelId ( \"grn:inventory:character2\" ) . WithAcquireExperienceSuffix ( \":level2\" ) . WithMaterialInventoryModelId ( \"grn:inventory:material2\" ) . WithAcquireExperienceHierarchy ( new string [] { \"experience2\" , }) . WithExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ) . WithBonusRates ( new Gs2 . Gs2Enhance . Model . BonusRate [] { new Gs2 . Gs2Enhance . Model . BonusRate () . WithRate ( 1.05f ) . WithWeight ( 905 ), new Gs2 . Gs2Enhance . Model . BonusRate () . WithRate ( 1.55f ) . WithWeight ( 95 ), new Gs2 . Gs2Enhance . Model . BonusRate () . WithRate ( 2.05f ) . WithWeight ( 15 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . updateRateModelMaster ( new Gs2Enhance . UpdateRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) . withDescription ( null ) . withMetadata ( \"CHARACTER_LEVEL2\" ) . withTargetInventoryModelId ( \"grn:inventory:character2\" ) . withAcquireExperienceSuffix ( \":level2\" ) . withMaterialInventoryModelId ( \"grn:inventory:material2\" ) . withAcquireExperienceHierarchy ([ \"experience2\" , ]) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ) . withBonusRates ([ new Gs2Enhance . model . BonusRate () . withRate ( 1.05 ) . withWeight ( 905 ), new Gs2Enhance . model . BonusRate () . withRate ( 1.55 ) . withWeight ( 95 ), new Gs2Enhance . model . BonusRate () . withRate ( 2.05 ) . withWeight ( 15 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . update_rate_model_master ( enhance . UpdateRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) . with_description ( None ) . with_metadata ( 'CHARACTER_LEVEL2' ) . with_target_inventory_model_id ( 'grn:inventory:character2' ) . with_acquire_experience_suffix ( ':level2' ) . with_material_inventory_model_id ( 'grn:inventory:material2' ) . with_acquire_experience_hierarchy ([ 'experience2' , ]) . with_experience_model_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2' ) . with_bonus_rates ([ enhance . BonusRate () . with_rate ( 1.05 ) . with_weight ( 905 ), enhance . BonusRate () . with_rate ( 1.55 ) . with_weight ( 95 ), enhance . BonusRate () . with_rate ( 2.05 ) . with_weight ( 15 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.update_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , description = nil , metadata = \"CHARACTER_LEVEL2\" , targetInventoryModelId = \"grn:inventory:character2\" , acquireExperienceSuffix = \":level2\" , materialInventoryModelId = \"grn:inventory:material2\" , acquireExperienceHierarchy = { \"experience2\" }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" , bonusRates = { { rate = 1.05 , weight = 905 , }, { rate = 1.55 , weight = 95 , }, { rate = 2.05 , weight = 15 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.update_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , description = nil , metadata = \"CHARACTER_LEVEL2\" , targetInventoryModelId = \"grn:inventory:character2\" , acquireExperienceSuffix = \":level2\" , materialInventoryModelId = \"grn:inventory:material2\" , acquireExperienceHierarchy = { \"experience2\" }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" , bonusRates = { { rate = 1.05 , weight = 905 , }, { rate = 1.55 , weight = 95 , }, { rate = 2.05 , weight = 15 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRateModelMaster 강화 레이트 모델 마스터를 삭제 편집 가능한 강화 레이트 모델 마스터를 삭제합니다. 마스터 데이터에만 영향을 미치며, 현재 활성화(공개)된 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item RateModelMaster 삭제한 강화 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DeleteRateModelMaster ( \u0026 enhance . DeleteRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DeleteRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e deleteRateModelMaster ( ( new DeleteRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DeleteRateModelMasterRequest ; import io.gs2.enhance.result.DeleteRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DeleteRateModelMasterResult result = client . deleteRateModelMaster ( new DeleteRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); RateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DeleteRateModelMasterResult \u003e asyncResult = null ; yield return client . DeleteRateModelMaster ( new Gs2 . Gs2Enhance . Request . DeleteRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . deleteRateModelMaster ( new Gs2Enhance . DeleteRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . delete_rate_model_master ( enhance . DeleteRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.delete_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.delete_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeUnleashRateModelMasters 한계돌파 레이트 모델 마스터 목록을 조회 이름 접두사 필터링이 가능한, 편집 가능한 한계돌파 레이트 모델 마스터의 페이지네이션 목록을 조회합니다. 한계돌파 레이트 모델 마스터는 한계돌파 레이트 설정의 편집 가능한 정의입니다. 마스터에 대한 변경 사항은 CurrentRateMaster API에서 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 한계돌파 레이트 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 한계돌파 레이트 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DescribeUnleashRateModelMasters ( \u0026 enhance . DescribeUnleashRateModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DescribeUnleashRateModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e describeUnleashRateModelMasters ( ( new DescribeUnleashRateModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DescribeUnleashRateModelMastersRequest ; import io.gs2.enhance.result.DescribeUnleashRateModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DescribeUnleashRateModelMastersResult result = client . describeUnleashRateModelMasters ( new DescribeUnleashRateModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List UnleashRateModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DescribeUnleashRateModelMastersResult \u003e asyncResult = null ; yield return client . DescribeUnleashRateModelMasters ( new Gs2 . Gs2Enhance . Request . DescribeUnleashRateModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . describeUnleashRateModelMasters ( new Gs2Enhance . DescribeUnleashRateModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . describe_unleash_rate_model_masters ( enhance . DescribeUnleashRateModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.describe_unleash_rate_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'enhance' ) api_result_handler = client.describe_unleash_rate_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createUnleashRateModelMaster 한계돌파 레이트 모델 마스터를 신규 작성 새로운 편집 가능한 한계돌파 레이트 모델 마스터 정의를 작성합니다. 한계돌파 레이트 모델은 대상 인벤토리 모델, 그레이드 모델, 각 그레이드 레벨을 올리는 데 필요한 소재를 지정하는 그레이드 엔트리를 정의합니다. 그레이드 엔트리는 그레이드 값과 해당 그레이드로의 한계돌파에 필요한 소재 요건을 매핑합니다. 변경 사항은 CurrentRateMaster API에서 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. GS2의 동작에는 일절 영향을 주지 않으므로, 게임 내에서 사용하는 값의 저장 위치로 활용해 주세요. targetInventoryModelId string  ~ 1024자 한계돌파 대상에 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 한계돌파 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 한계돌파하는 아이템과 소재로 소비되는 동일 종류 아이템 모두 이 인벤토리 모델에 속해 있어야 합니다. gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 대상 아이템의 한계돌파 레벨을 추적하는 GS2-Grade의 그레이드 모델을 지정합니다. 한계돌파가 성공하면, 이 그레이드 모델 내에서 아이템의 그레이드가 가산됩니다. gradeEntries List  1 ~ 1000 items 그레이드 엔트리 목록 한계돌파의 각 그레이드 레벨에 대한 소재 비용을 정의합니다. 각 엔트리는 그레이드 값과, 해당 그레이드에 도달하기 위해 소비해야 하는 동일 종류 아이템 수를 매핑합니다. Result 타입 설명 item UnleashRateModelMaster 작성한 한계돌파 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . CreateUnleashRateModelMaster ( \u0026 enhance . CreateUnleashRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"character-level\" ), Description : nil , Metadata : pointy . String ( \"CHARACTER_LEVEL\" ), TargetInventoryModelId : pointy . String ( \"grn:inventory:character\" ), GradeModelId : pointy . String ( \"grn:grade:character\" ), GradeEntries : [] enhance . UnleashRateEntryModel { enhance . UnleashRateEntryModel { GradeValue : pointy . Int64 ( 1 ), NeedCount : pointy . Int32 ( 2 ), }, enhance . UnleashRateEntryModel { GradeValue : pointy . Int64 ( 2 ), NeedCount : pointy . Int32 ( 2 ), }, enhance . UnleashRateEntryModel { GradeValue : pointy . Int64 ( 3 ), NeedCount : pointy . Int32 ( 3 ), }, enhance . UnleashRateEntryModel { GradeValue : pointy . Int64 ( 4 ), NeedCount : pointy . Int32 ( 3 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\CreateUnleashRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e createUnleashRateModelMaster ( ( new CreateUnleashRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"character-level\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( \"CHARACTER_LEVEL\" ) -\u003e withTargetInventoryModelId ( \"grn:inventory:character\" ) -\u003e withGradeModelId ( \"grn:grade:character\" ) -\u003e withGradeEntries ([ ( new \\Gs2\\Enhance\\Model\\UnleashRateEntryModel ()) -\u003e withGradeValue ( 1 ) -\u003e withNeedCount ( 2 ), ( new \\Gs2\\Enhance\\Model\\UnleashRateEntryModel ()) -\u003e withGradeValue ( 2 ) -\u003e withNeedCount ( 2 ), ( new \\Gs2\\Enhance\\Model\\UnleashRateEntryModel ()) -\u003e withGradeValue ( 3 ) -\u003e withNeedCount ( 3 ), ( new \\Gs2\\Enhance\\Model\\UnleashRateEntryModel ()) -\u003e withGradeValue ( 4 ) -\u003e withNeedCount ( 3 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.CreateUnleashRateModelMasterRequest ; import io.gs2.enhance.result.CreateUnleashRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { CreateUnleashRateModelMasterResult result = client . createUnleashRateModelMaster ( new CreateUnleashRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"character-level\" ) . withDescription ( null ) . withMetadata ( \"CHARACTER_LEVEL\" ) . withTargetInventoryModelId ( \"grn:inventory:character\" ) . withGradeModelId ( \"grn:grade:character\" ) . withGradeEntries ( Arrays . asList ( new io . gs2 . enhance . model . UnleashRateEntryModel () . withGradeValue ( 1L ) . withNeedCount ( 2 ), new io . gs2 . enhance . model . UnleashRateEntryModel () . withGradeValue ( 2L ) . withNeedCount ( 2 ), new io . gs2 . enhance . model . UnleashRateEntryModel () . withGradeValue ( 3L ) . withNeedCount ( 3 ), new io . gs2 . enhance . model . UnleashRateEntryModel () . withGradeValue ( 4L ) . withNeedCount ( 3 ) )) ); UnleashRateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . CreateUnleashRateModelMasterResult \u003e asyncResult = null ; yield return client . CreateUnleashRateModelMaster ( new Gs2 . Gs2Enhance . Request . CreateUnleashRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"character-level\" ) . WithDescription ( null ) . WithMetadata ( \"CHARACTER_LEVEL\" ) . WithTargetInventoryModelId ( \"grn:inventory:character\" ) . WithGradeModelId ( \"grn:grade:character\" ) . WithGradeEntries ( new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel [] { new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel () . WithGradeValue ( 1L ) . WithNeedCount ( 2 ), new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel () . WithGradeValue ( 2L ) . WithNeedCount ( 2 ), new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel () . WithGradeValue ( 3L ) . WithNeedCount ( 3 ), new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel () . WithGradeValue ( 4L ) . WithNeedCount ( 3 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . createUnleashRateModelMaster ( new Gs2Enhance . CreateUnleashRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"character-level\" ) . withDescription ( null ) . withMetadata ( \"CHARACTER_LEVEL\" ) . withTargetInventoryModelId ( \"grn:inventory:character\" ) . withGradeModelId ( \"grn:grade:character\" ) . withGradeEntries ([ new Gs2Enhance . model . UnleashRateEntryModel () . withGradeValue ( 1 ) . withNeedCount ( 2 ), new Gs2Enhance . model . UnleashRateEntryModel () . withGradeValue ( 2 ) . withNeedCount ( 2 ), new Gs2Enhance . model . UnleashRateEntryModel () . withGradeValue ( 3 ) . withNeedCount ( 3 ), new Gs2Enhance . model . UnleashRateEntryModel () . withGradeValue ( 4 ) . withNeedCount ( 3 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . create_unleash_rate_model_master ( enhance . CreateUnleashRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'character-level' ) . with_description ( None ) . with_metadata ( 'CHARACTER_LEVEL' ) . with_target_inventory_model_id ( 'grn:inventory:character' ) . with_grade_model_id ( 'grn:grade:character' ) . with_grade_entries ([ enhance . UnleashRateEntryModel () . with_grade_value ( 1 ) . with_need_count ( 2 ), enhance . UnleashRateEntryModel () . with_grade_value ( 2 ) . with_need_count ( 2 ), enhance . UnleashRateEntryModel () . with_grade_value ( 3 ) . with_need_count ( 3 ), enhance . UnleashRateEntryModel () . with_grade_value ( 4 ) . with_need_count ( 3 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.create_unleash_rate_model_master ({ namespaceName = \"namespace-0001\" , name = \"character-level\" , description = nil , metadata = \"CHARACTER_LEVEL\" , targetInventoryModelId = \"grn:inventory:character\" , gradeModelId = \"grn:grade:character\" , gradeEntries = { { gradeValue = 1 , needCount = 2 , }, { gradeValue = 2 , needCount = 2 , }, { gradeValue = 3 , needCount = 3 , }, { gradeValue = 4 , needCount = 3 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.create_unleash_rate_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"character-level\" , description = nil , metadata = \"CHARACTER_LEVEL\" , targetInventoryModelId = \"grn:inventory:character\" , gradeModelId = \"grn:grade:character\" , gradeEntries = { { gradeValue = 1 , needCount = 2 , }, { gradeValue = 2 , needCount = 2 , }, { gradeValue = 3 , needCount = 3 , }, { gradeValue = 4 , needCount = 3 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getUnleashRateModelMaster 한계돌파 레이트 모델 마스터를 조회 이름을 지정하여 특정 편집 가능한 한계돌파 레이트 모델 마스터의 상세 정보를 조회합니다. 활성화 전 마스터 정의의 열람·편집에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item UnleashRateModelMaster 한계돌파 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . GetUnleashRateModelMaster ( \u0026 enhance . GetUnleashRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\GetUnleashRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e getUnleashRateModelMaster ( ( new GetUnleashRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.GetUnleashRateModelMasterRequest ; import io.gs2.enhance.result.GetUnleashRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { GetUnleashRateModelMasterResult result = client . getUnleashRateModelMaster ( new GetUnleashRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); UnleashRateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . GetUnleashRateModelMasterResult \u003e asyncResult = null ; yield return client . GetUnleashRateModelMaster ( new Gs2 . Gs2Enhance . Request . GetUnleashRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . getUnleashRateModelMaster ( new Gs2Enhance . GetUnleashRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . get_unleash_rate_model_master ( enhance . GetUnleashRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.get_unleash_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.get_unleash_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateUnleashRateModelMaster 한계돌파 레이트 모델 마스터를 갱신 기존 한계돌파 레이트 모델 마스터의 설명, 메타데이터, 대상 인벤토리 모델, 그레이드 모델, 그레이드 엔트리를 갱신합니다. 한계돌파 레이트 모델 이름은 작성 후 변경할 수 없습니다. 변경 사항은 CurrentRateMaster API에서 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. GS2의 동작에는 일절 영향을 주지 않으므로, 게임 내에서 사용하는 값의 저장 위치로 활용해 주세요. targetInventoryModelId string  ~ 1024자 한계돌파 대상에 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 한계돌파 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 한계돌파하는 아이템과 소재로 소비되는 동일 종류 아이템 모두 이 인벤토리 모델에 속해 있어야 합니다. gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 대상 아이템의 한계돌파 레벨을 추적하는 GS2-Grade의 그레이드 모델을 지정합니다. 한계돌파가 성공하면, 이 그레이드 모델 내에서 아이템의 그레이드가 가산됩니다. gradeEntries List  1 ~ 1000 items 그레이드 엔트리 목록 한계돌파의 각 그레이드 레벨에 대한 소재 비용을 정의합니다. 각 엔트리는 그레이드 값과, 해당 그레이드에 도달하기 위해 소비해야 하는 동일 종류 아이템 수를 매핑합니다. Result 타입 설명 item UnleashRateModelMaster 갱신한 한계돌파 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . UpdateUnleashRateModelMaster ( \u0026 enhance . UpdateUnleashRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), Description : nil , Metadata : nil , TargetInventoryModelId : pointy . String ( \"grn:inventory:character2\" ), GradeModelId : pointy . String ( \"grn:grade:character2\" ), GradeEntries : [] enhance . UnleashRateEntryModel { enhance . UnleashRateEntryModel { GradeValue : pointy . Int64 ( 1 ), NeedCount : pointy . Int32 ( 3 ), }, enhance . UnleashRateEntryModel { GradeValue : pointy . Int64 ( 2 ), NeedCount : pointy . Int32 ( 3 ), }, enhance . UnleashRateEntryModel { GradeValue : pointy . Int64 ( 3 ), NeedCount : pointy . Int32 ( 4 ), }, enhance . UnleashRateEntryModel { GradeValue : pointy . Int64 ( 4 ), NeedCount : pointy . Int32 ( 4 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\UpdateUnleashRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e updateUnleashRateModelMaster ( ( new UpdateUnleashRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withTargetInventoryModelId ( \"grn:inventory:character2\" ) -\u003e withGradeModelId ( \"grn:grade:character2\" ) -\u003e withGradeEntries ([ ( new \\Gs2\\Enhance\\Model\\UnleashRateEntryModel ()) -\u003e withGradeValue ( 1 ) -\u003e withNeedCount ( 3 ), ( new \\Gs2\\Enhance\\Model\\UnleashRateEntryModel ()) -\u003e withGradeValue ( 2 ) -\u003e withNeedCount ( 3 ), ( new \\Gs2\\Enhance\\Model\\UnleashRateEntryModel ()) -\u003e withGradeValue ( 3 ) -\u003e withNeedCount ( 4 ), ( new \\Gs2\\Enhance\\Model\\UnleashRateEntryModel ()) -\u003e withGradeValue ( 4 ) -\u003e withNeedCount ( 4 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.UpdateUnleashRateModelMasterRequest ; import io.gs2.enhance.result.UpdateUnleashRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { UpdateUnleashRateModelMasterResult result = client . updateUnleashRateModelMaster ( new UpdateUnleashRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) . withDescription ( null ) . withMetadata ( null ) . withTargetInventoryModelId ( \"grn:inventory:character2\" ) . withGradeModelId ( \"grn:grade:character2\" ) . withGradeEntries ( Arrays . asList ( new io . gs2 . enhance . model . UnleashRateEntryModel () . withGradeValue ( 1L ) . withNeedCount ( 3 ), new io . gs2 . enhance . model . UnleashRateEntryModel () . withGradeValue ( 2L ) . withNeedCount ( 3 ), new io . gs2 . enhance . model . UnleashRateEntryModel () . withGradeValue ( 3L ) . withNeedCount ( 4 ), new io . gs2 . enhance . model . UnleashRateEntryModel () . withGradeValue ( 4L ) . withNeedCount ( 4 ) )) ); UnleashRateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . UpdateUnleashRateModelMasterResult \u003e asyncResult = null ; yield return client . UpdateUnleashRateModelMaster ( new Gs2 . Gs2Enhance . Request . UpdateUnleashRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithTargetInventoryModelId ( \"grn:inventory:character2\" ) . WithGradeModelId ( \"grn:grade:character2\" ) . WithGradeEntries ( new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel [] { new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel () . WithGradeValue ( 1L ) . WithNeedCount ( 3 ), new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel () . WithGradeValue ( 2L ) . WithNeedCount ( 3 ), new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel () . WithGradeValue ( 3L ) . WithNeedCount ( 4 ), new Gs2 . Gs2Enhance . Model . UnleashRateEntryModel () . WithGradeValue ( 4L ) . WithNeedCount ( 4 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . updateUnleashRateModelMaster ( new Gs2Enhance . UpdateUnleashRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) . withDescription ( null ) . withMetadata ( null ) . withTargetInventoryModelId ( \"grn:inventory:character2\" ) . withGradeModelId ( \"grn:grade:character2\" ) . withGradeEntries ([ new Gs2Enhance . model . UnleashRateEntryModel () . withGradeValue ( 1 ) . withNeedCount ( 3 ), new Gs2Enhance . model . UnleashRateEntryModel () . withGradeValue ( 2 ) . withNeedCount ( 3 ), new Gs2Enhance . model . UnleashRateEntryModel () . withGradeValue ( 3 ) . withNeedCount ( 4 ), new Gs2Enhance . model . UnleashRateEntryModel () . withGradeValue ( 4 ) . withNeedCount ( 4 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . update_unleash_rate_model_master ( enhance . UpdateUnleashRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) . with_description ( None ) . with_metadata ( None ) . with_target_inventory_model_id ( 'grn:inventory:character2' ) . with_grade_model_id ( 'grn:grade:character2' ) . with_grade_entries ([ enhance . UnleashRateEntryModel () . with_grade_value ( 1 ) . with_need_count ( 3 ), enhance . UnleashRateEntryModel () . with_grade_value ( 2 ) . with_need_count ( 3 ), enhance . UnleashRateEntryModel () . with_grade_value ( 3 ) . with_need_count ( 4 ), enhance . UnleashRateEntryModel () . with_grade_value ( 4 ) . with_need_count ( 4 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.update_unleash_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , description = nil , metadata = nil , targetInventoryModelId = \"grn:inventory:character2\" , gradeModelId = \"grn:grade:character2\" , gradeEntries = { { gradeValue = 1 , needCount = 3 , }, { gradeValue = 2 , needCount = 3 , }, { gradeValue = 3 , needCount = 4 , }, { gradeValue = 4 , needCount = 4 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.update_unleash_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , description = nil , metadata = nil , targetInventoryModelId = \"grn:inventory:character2\" , gradeModelId = \"grn:grade:character2\" , gradeEntries = { { gradeValue = 1 , needCount = 3 , }, { gradeValue = 2 , needCount = 3 , }, { gradeValue = 3 , needCount = 4 , }, { gradeValue = 4 , needCount = 4 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteUnleashRateModelMaster 한계돌파 레이트 모델 마스터를 삭제 편집 가능한 한계돌파 레이트 모델 마스터 정의를 삭제합니다. 마스터 데이터에만 영향을 미치며, 현재 활성화(공개)된 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item UnleashRateModelMaster 삭제한 한계돌파 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/enhance\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := enhance . Gs2EnhanceRestClient { Session : \u0026 session , } result , err := client . DeleteUnleashRateModelMaster ( \u0026 enhance . DeleteUnleashRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Enhance\\Gs2EnhanceRestClient ; use Gs2\\Enhance\\Request\\DeleteUnleashRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2EnhanceRestClient ( $session ); try { $result = $client -\u003e deleteUnleashRateModelMaster ( ( new DeleteUnleashRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.enhance.rest.Gs2EnhanceRestClient ; import io.gs2.enhance.request.DeleteUnleashRateModelMasterRequest ; import io.gs2.enhance.result.DeleteUnleashRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2EnhanceRestClient client = new Gs2EnhanceRestClient ( session ); try { DeleteUnleashRateModelMasterResult result = client . deleteUnleashRateModelMaster ( new DeleteUnleashRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); UnleashRateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2EnhanceRestClient ( session ); AsyncResult Gs2 . Gs2Enhance . Result . DeleteUnleashRateModelMasterResult \u003e asyncResult = null ; yield return client . DeleteUnleashRateModelMaster ( new Gs2 . Gs2Enhance . Request . DeleteUnleashRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Enhance from '@/gs2/enhance' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Enhance . Gs2EnhanceRestClient ( session ); try { const result = await client . deleteUnleashRateModelMaster ( new Gs2Enhance . DeleteUnleashRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import enhance session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = enhance . Gs2EnhanceRestClient ( session ) try : result = client . delete_unleash_rate_model_master ( enhance . DeleteUnleashRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'enhance' ) api_result = client.delete_unleash_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'enhance' ) api_result_handler = client.delete_unleash_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Enhance SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Enhance SDK API 레퍼런스","url":"/ko/api_reference/enhance/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 enableDirectExchange bool true 직접 교환 API 호출 허용 활성화하면 클라이언트가 교환 API를 직접 호출하여 리소스 교환을 실행할 수 있습니다. 비활성화하면 트랜잭션 액션을 통해서만 교환이 트리거되어, 교환 발생에 대한 서버 측 제어가 더욱 엄격해집니다. enableAwaitExchange bool false 교환 결과 수령에 대기 시간이 발생하는 교환 기능을 사용할지 여부 활성화하면 await 타이밍 타입의 교환 레이트 모델을 사용할 수 있습니다. 이러한 교환은 보상을 받기 전에 실시간 경과가 필요하며, 플레이어가 결과를 기다려야 하는 제작이나 생산 계열의 메커니즘을 구현할 수 있습니다. transactionSetting TransactionSetting  트랜잭션 설정 교환 조작 시 분산 트랜잭션의 실행 방식을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. exchangeScript ScriptSetting 교환을 실행하려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - exchange incrementalExchangeScript ScriptSetting 코스트 상승형 교환을 실행하려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - incrementalExchange acquireAwaitScript ScriptSetting 대기 방식 교환 처리에서 대기가 완료되어 보상을 받으려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquireAwait logSetting LogSetting 로그 출력 설정 교환 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 교환, 코스트 상승형 교환, 대기 조작의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Await 교환 대기 보상을 받기 전에 실시간의 경과가 필요한 교환의 실행 상태를 나타냅니다. 플레이어가 await 타이밍 타입의 교환을 시작했을 때 생성되며, 보상을 사용할 수 있게 될 때까지의 대기 기간을 추적합니다. 대기 시간을 단축하거나 없애는 스킵 기능을 지원하며, 보상 취득 시의 기본 설정값을 저장합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 awaitId string ※ ~ 1024자 교환 대기 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. count int 1 1 ~ 10000 교환 수 이 교환을 실행하는 횟수입니다. 여러 번의 교환을 하나의 대기로 묶을 수 있으며, 소비되는 코스트와 받는 보상이 모두 곱해집니다. skipSeconds int 0 0 ~ 2147483646 스킵 초수 대기 시간에서 차감하는 초수입니다. 스킵 초수가 적용되면 acquirableAt 타임스탬프가 이만큼 앞당겨집니다. 플레이어가 리소스를 지불하여 대기 시간을 단축하는 구조를 구현하기 위해 사용됩니다. config List [] 0 ~ 32 items 보상 취득 시 적용하는 기본 설정값 대기 완료 시 보상이 배포될 때 트랜잭션의 플레이스홀더 변수로 사용되는 키와 값의 쌍입니다. 이 값들은 교환 시작 시 설정되며, 획득 액션의 트랜잭션 파라미터에 적용됩니다. acquirableAt long 보상을 받을 수 있게 되는 시간 대기 기간이 만료되어 보상을 받을 수 있게 되는 타임스탬프입니다. exchangedAt + lockTime - skipSeconds로 계산됩니다. 현재 시각이 이 타임스탬프를 지나면 플레이어는 취득 API를 호출할 수 있게 됩니다. exchangedAt long 교환 시간 교환이 시작되어 대기가 생성된 타임스탬프입니다. 보상이 사용 가능해지는 시각을 계산하기 위한 기준 시각으로 사용됩니다(acquirableAt = exchangedAt + lockTime - skipSeconds). createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 RateModel 교환 레이트 모델 교환 레이트 모델은 리소스와 리소스를 교환할 때 사용하는 레이트를 정의하는 엔티티입니다. 즉시 교환할 수 있는 레이트뿐만 아니라, 현실 시간으로 일정 시간이 경과한 후에 교환할 수 있는 레이트도 설정할 수 있습니다. 현실 시간의 경과가 필요한 교환 레이트에는 즉시 교환을 실행하는 데 필요한 리소스를 추가로 정의할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rateModelId string ※ ~ 1024자 교환 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 교환이 실행되기 전에 모두 통과해야 하는 사전 조건 체크입니다. 검증 액션 중 하나라도 실패하면, 리소스를 소비하지 않고 교환이 중단됩니다. 레벨 요건이나 인벤토리 용량 등의 조건을 강제하기 위해 사용됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 교환을 실행하기 위해 플레이어가 지불해야 하는 리소스(코스트)를 정의합니다. 여러 개의 소비 액션을 지정할 수 있어, 골드와 아이템을 모두 필요로 하는 것과 같은 복잡한 교환 코스트를 구현할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 소비 액션으로 실행됩니다. timingType 문자열 열거형 enum {   “immediate”,   “await” } “immediate” 교환 종류 교환 실행 후 보상이 언제 전달되는지를 결정합니다. immediate 는 교환 실행 시 즉시 보상을 전달합니다. await 는 보상을 받기 전에 실시간의 경과가 필요하며, 대기 기간(예: 제작 시간)을 둡니다. 정의 설명 immediate 즉시 await 현실 시간의 경과 대기 lockTime int {timingType} == “await” ※ 0 ~ 538214400 교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분) timingType이 await 인 경우에만 적용됩니다. 교환이 시작된 후 플레이어가 보상을 받을 수 있게 되기까지 경과해야 하는 실시간 분수를 지정합니다. 대기 시간은 스킵 기능을 사용하여 단축할 수 있습니다. ※ timingType이(가) “await” 이면 필수 acquireActions List [] 0 ~ 100 items 획득 액션 리스트 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 여러 개의 획득 액션을 지정하여 다양한 리소스 타입을 동시에 지급할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 획득 액션으로 실행됩니다. IncrementalRateModel 코스트 상승형 교환 레이트 모델 일반적인 교환 레이트는 항상 일정한 레이트로 교환을 제공합니다. 상승형 교환 레이트에서는 교환 횟수에 따라 코스트가 상승하는 레이트를 정의할 수 있습니다. 예를 들어, 첫 번째 교환에서는 1:1로 교환할 수 있지만, 두 번째 교환에서는 2:1로 교환하게 되는 것과 같은 레이트를 정의할 수 있습니다. 이러한 레이트를 정의함으로써 플레이어가 게임을 진행함에 따라 얻을 수 있는 리소스의 가치를 높일 수 있습니다. 교환 횟수는 현실 시간의 경과에 따라 리셋할 수 있습니다. 이 기능을 이용하면 매일 또는 매주 교환에 필요한 코스트를 리셋할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 incrementalRateModelId string ※ ~ 1024자 코스트 상승형 교환 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. consumeAction ConsumeAction  소비 액션 (수량/값은 자동으로 덮어써집니다) 교환 비용으로 소비되는 리소스의 종류를 정의합니다. 실제 수량은 교환 횟수와 계산 방식(선형, 거듭제곱, 스크립트)에 기반하여 동적으로 계산됩니다. 액션 종류와 대상 리소스만 지정하면 되며, 수량 필드는 자동으로 덮어써집니다. calculateType 문자열 열거형 enum {   “linear”,   “power”,   “gs2_script” }  코스트 상승량 계산 방식 교환 횟수에 따라 코스트가 어떻게 상승하는지를 결정합니다. linear 는 코스트를 baseValue +（coefficientValue × 교환 횟수）로 계산합니다. power 는 코스트를 coefficientValue ×（교환 횟수 + 1）^2로 계산합니다. gs2_script 는 임의의 로직을 위해 커스텀 GS2-Script에 계산을 위임합니다. 정의 설명 linear 베이스 값 + (계수 * 교환 횟수) power 계수 * (교환 횟수 + 1) ^ 2 gs2_script GS2-Script에 의한 임의의 로직 baseValue long {calculateType} == “linear” ※ 0 ~ 9223372036854775805 베이스 값 linear 계산 방식을 사용하는 경우 첫 교환 시의 기본 코스트입니다. 합계 코스트는 baseValue +（coefficientValue × 교환 횟수）로 계산됩니다. ※ calculateType이(가) “linear” 이면 필수 coefficientValue long {calculateType} in [“linear”, “power”] ※ 0 ~ 9223372036854775805 계수 교환 횟수에 따라 코스트가 얼마나 빠르게 상승하는지를 제어하는 승수입니다. linear 모드에서는 각 교환마다 이 값이 코스트에 더해집니다. power 모드에서는 코스트가 coefficientValue ×（교환 횟수 + 1）^2로 계산됩니다. ※ calculateType이(가) “linear”,“power\"이면 필수 calculateScriptId string {calculateType} == “gs2_script” ※ ~ 1024자 코스트 계산 스크립트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - calculateCost ※ calculateType이(가) “gs2_script” 이면 필수 exchangeCountId string  ~ 1024자 교환 실행 횟수를 관리하는 GS2-Limit의 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 각 사용자가 이 코스트 상승형 교환을 몇 번 실행했는지 추적하는 GS2-Limit의 횟수 제한 모델을 참조합니다. 카운트는 상승하는 코스트 계산에 사용되며, GS2-Limit의 리셋 타이밍을 사용하여 정기적으로(예: 매일 또는 매주) 리셋할 수 있습니다. maximumExchangeCount int 2147483646 0 ~ 2147483646 교환 횟수 상한 사용자가 이 코스트 상승형 교환을 실행할 수 있는 최대 횟수입니다. 교환 횟수가 이 상한에 도달하면, GS2-Limit에 의한 카운트 리셋까지 이후의 교환이 거부됩니다. acquireActions List [] 0 ~ 100 items 획득 액션 리스트 코스트 상승형 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 보상은 교환 횟수와 관계없이 일정하며, 코스트만 교환마다 증가합니다. LogCost 로그를 사용한 코스트 계산 결과 로그 연산을 사용하여 계산된 코스트 값을 나타냅니다. 최종 코스트는 adds 리스트의 로그 값을 합산하고 subs 리스트의 로그 값을 감산한 후, 지정된 밑을 사용하여 로그 형식에서 변환함으로써 계산됩니다. 오버플로우를 방지하는 정밀한 대용량 코스트 계산에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 base double  0 ~ 10 밑 코스트 계산에 사용되는 로그의 밑입니다. adds 및 subs 리스트의 모든 로그 값은 이 밑을 사용합니다. 일반적인 값으로는 2, e(약 2.718), 10 등이 있습니다. adds List  1 ~ 10000 items 가산할 로그 목록 최종 코스트에 긍정적으로 기여하는 로그 값입니다. 이 값들은 로그 형식으로 합산된 후 실제 코스트 값으로 변환됩니다. 대응하는 실제 값끼리 곱하는 것과 동일합니다. subs List 0 ~ 10000 items 감산할 로그 목록 최종 코스트를 감소시키는 로그 값입니다. 이 값들은 로그 형식으로 감산되며, 이는 adds 리스트의 곱에서 대응하는 실제 값으로 나누는 것과 동일합니다. LogRate 로그를 사용한 획득량 보정 로그 연산을 사용하여 계산된 보상량 보정값을 나타냅니다. 보정 계수는 logs 리스트의 로그값을 합산하고 지정된 밑을 사용하여 변환함으로써 계산됩니다. 정밀한 대수 연산을 사용하여 획득량에 배율을 적용하기 위해 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 base double  0 ~ 10 밑 획득량 보정 계산에 사용되는 로그의 밑입니다. logs 리스트의 모든 로그값은 이 밑을 사용합니다. logs List  1 ~ 10000 items 로그 리스트 획득량 보정 계수를 계산하기 위해 합산되는 로그값입니다. 합계는 로그 형식에서 변환되어 보상량에 적용되는 최종 배율이 산출됩니다. AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 이 마스터 데이터는 현재 네임스페이스 내에서 유효한 레이트 모델의 정의를 기술한 것입니다. GS2에서는 마스터 데이터의 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Exchange 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 RateModelMaster 교환 레이트 모델 마스터 교환 레이트 모델 마스터는 게임 내에서 사용되는 교환 레이트 모델의 편집·관리용 데이터이며, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·갱신 처리를 수행함으로써 실제로 게임에서 참조되는 교환 레이트 모델로 반영됩니다. 교환 레이트 모델은 리소스와 리소스를 교환할 때 사용하는 레이트를 정의하는 엔티티입니다. 즉시 교환할 수 있는 레이트뿐만 아니라 현실 시간으로 일정 시간이 경과한 후에 교환할 수 있는 레이트도 설정할 수 있습니다. 현실 시간의 경과가 필요한 교환 레이트에는 즉시 교환을 실행하기 위해 필요한 리소스를 추가로 정의할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rateModelId string ※ ~ 1024자 교환 레이트 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델의 종류를 나타내는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 교환이 실행되기 전에 모두 통과해야 하는 사전 조건 체크입니다. 검증 액션 중 하나라도 실패하면, 리소스를 소비하지 않고 교환이 중단됩니다. 레벨 요건이나 인벤토리 용량 등의 조건을 강제하기 위해 사용됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 교환을 실행하기 위해 플레이어가 지불해야 하는 리소스(코스트)를 정의합니다. 여러 개의 소비 액션을 지정할 수 있어, 골드와 아이템을 모두 필요로 하는 것과 같은 복잡한 교환 코스트를 구현할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 소비 액션으로 실행됩니다. timingType 문자열 열거형 enum {   “immediate”,   “await” } “immediate” 교환 종류 교환 실행 후 보상이 언제 전달되는지를 결정합니다. immediate 는 교환 실행 시 즉시 보상을 전달합니다. await 는 보상을 받기 전에 실시간의 경과가 필요하며, 대기 기간(예: 제작 시간)을 둡니다. 정의 설명 immediate 즉시 await 현실 시간의 경과 대기 lockTime int {timingType} == “await” ※ 0 ~ 538214400 교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분) timingType이 await 인 경우에만 적용됩니다. 교환이 시작된 후 플레이어가 보상을 받을 수 있게 되기까지 경과해야 하는 실시간 분수를 지정합니다. 대기 시간은 스킵 기능을 사용하여 단축할 수 있습니다. ※ timingType이(가) “await” 이면 필수 acquireActions List [] 0 ~ 100 items 획득 액션 리스트 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 여러 개의 획득 액션을 지정하여 다양한 리소스 타입을 동시에 지급할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 획득 액션으로 실행됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 IncrementalRateModelMaster 코스트 상승형 교환 레이트 모델 마스터 코스트 상승형 교환 레이트 모델 마스터는 게임 내에서 사용되는 코스트 상승형 교환 레이트 모델을 편집·관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·갱신 처리를 수행함으로써 실제로 게임에서 참조되는 코스트 상승형 교환 레이트 모델로 반영됩니다. 일반적인 교환 레이트는 항상 일정한 레이트로 교환을 제공합니다. 상승형 교환 레이트에서는 교환 횟수에 따라 코스트가 상승하는 레이트를 정의할 수 있습니다. 예를 들어, 첫 번째 교환에서는 1:1로 교환할 수 있지만, 두 번째 교환에서는 2:1로 교환하게 되는 것과 같은 레이트를 정의할 수 있습니다. 이러한 레이트를 정의함으로써 플레이어가 게임을 진행함에 따라 얻을 수 있는 리소스의 가치를 높일 수 있습니다. 교환 횟수는 현실 시간의 경과에 따라 리셋할 수 있습니다. 이 기능을 이용하면 매일 또는 매주 교환에 필요한 코스트를 리셋할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 incrementalRateModelId string ※ ~ 1024자 코스트 상승형 교환 레이트 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. consumeAction ConsumeAction  소비 액션 (수량/값은 자동으로 덮어써집니다) 교환 비용으로 소비되는 리소스의 종류를 정의합니다. 실제 수량은 교환 횟수와 계산 방식(선형, 거듭제곱, 스크립트)에 기반하여 동적으로 계산됩니다. 액션 종류와 대상 리소스만 지정하면 되며, 수량 필드는 자동으로 덮어써집니다. calculateType 문자열 열거형 enum {   “linear”,   “power”,   “gs2_script” }  코스트 상승량 계산 방식 교환 횟수에 따라 코스트가 어떻게 상승하는지를 결정합니다. linear 는 코스트를 baseValue +（coefficientValue × 교환 횟수）로 계산합니다. power 는 코스트를 coefficientValue ×（교환 횟수 + 1）^2로 계산합니다. gs2_script 는 임의의 로직을 위해 커스텀 GS2-Script에 계산을 위임합니다. 정의 설명 linear 베이스 값 + (계수 * 교환 횟수) power 계수 * (교환 횟수 + 1) ^ 2 gs2_script GS2-Script에 의한 임의의 로직 baseValue long {calculateType} == “linear” ※ 0 ~ 9223372036854775805 베이스 값 linear 계산 방식을 사용하는 경우 첫 교환 시의 기본 코스트입니다. 합계 코스트는 baseValue +（coefficientValue × 교환 횟수）로 계산됩니다. ※ calculateType이(가) “linear” 이면 필수 coefficientValue long {calculateType} in [“linear”, “power”] ※ 0 ~ 9223372036854775805 계수 교환 횟수에 따라 코스트가 얼마나 빠르게 상승하는지를 제어하는 승수입니다. linear 모드에서는 각 교환마다 이 값이 코스트에 더해집니다. power 모드에서는 코스트가 coefficientValue ×（교환 횟수 + 1）^2로 계산됩니다. ※ calculateType이(가) “linear”,“power\"이면 필수 calculateScriptId string {calculateType} == “gs2_script” ※ ~ 1024자 코스트 계산 스크립트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - calculateCost ※ calculateType이(가) “gs2_script” 이면 필수 exchangeCountId string  ~ 1024자 교환 실행 횟수를 관리하는 GS2-Limit의 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 각 사용자가 이 코스트 상승형 교환을 몇 번 실행했는지 추적하는 GS2-Limit의 횟수 제한 모델을 참조합니다. 카운트는 상승하는 코스트 계산에 사용되며, GS2-Limit의 리셋 타이밍을 사용하여 정기적으로(예: 매일 또는 매주) 리셋할 수 있습니다. maximumExchangeCount int 2147483646 0 ~ 2147483646 교환 횟수 상한 사용자가 이 코스트 상승형 교환을 실행할 수 있는 최대 횟수입니다. 교환 횟수가 이 상한에 도달하면, GS2-Limit에 의한 카운트 리셋까지 이후의 교환이 거부됩니다. acquireActions List [] 0 ~ 100 items 획득 액션 리스트 코스트 상승형 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 보상은 교환 횟수와 관계없이 일정하며, 코스트만 교환마다 증가합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 exchange . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DescribeNamespacesRequest ; import io.gs2.exchange.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Exchange . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Exchange . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . describe_namespaces ( exchange . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'exchange' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 enableAwaitExchange bool false 교환 결과 수령에 대기 시간이 발생하는 교환 기능을 사용할지 여부 활성화하면 await 타이밍 타입의 교환 레이트 모델을 사용할 수 있습니다. 이러한 교환은 보상을 받기 전에 실시간 경과가 필요하며, 플레이어가 결과를 기다려야 하는 제작이나 생산 계열의 메커니즘을 구현할 수 있습니다. enableDirectExchange bool true 직접 교환 API 호출 허용 활성화하면 클라이언트가 교환 API를 직접 호출하여 리소스 교환을 실행할 수 있습니다. 비활성화하면 트랜잭션 액션을 통해서만 교환이 트리거되어, 교환 발생에 대한 서버 측 제어가 더욱 엄격해집니다. transactionSetting TransactionSetting  트랜잭션 설정 교환 조작 시 분산 트랜잭션의 실행 방식을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. exchangeScript ScriptSetting 교환을 실행하려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - exchange incrementalExchangeScript ScriptSetting 코스트 상승형 교환을 실행하려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - incrementalExchange acquireAwaitScript ScriptSetting 대기 방식 교환 처리에서 대기가 완료되어 보상을 받으려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquireAwait logSetting LogSetting 로그 출력 설정 교환 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 교환, 코스트 상승형 교환, 대기 조작의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 exchange . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , EnableAwaitExchange : nil , EnableDirectExchange : nil , TransactionSetting : \u0026 exchange . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ExchangeScript : nil , IncrementalExchangeScript : nil , AcquireAwaitScript : nil , LogSetting : \u0026 exchange . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withEnableAwaitExchange ( null ) -\u003e withEnableDirectExchange ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Exchange\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withExchangeScript ( null ) -\u003e withIncrementalExchangeScript ( null ) -\u003e withAcquireAwaitScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Exchange\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.CreateNamespaceRequest ; import io.gs2.exchange.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withEnableAwaitExchange ( null ) . withEnableDirectExchange ( null ) . withTransactionSetting ( new io . gs2 . exchange . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withExchangeScript ( null ) . withIncrementalExchangeScript ( null ) . withAcquireAwaitScript ( null ) . withLogSetting ( new io . gs2 . exchange . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Exchange . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithEnableAwaitExchange ( null ) . WithEnableDirectExchange ( null ) . WithTransactionSetting ( new Gs2 . Gs2Exchange . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithExchangeScript ( null ) . WithIncrementalExchangeScript ( null ) . WithAcquireAwaitScript ( null ) . WithLogSetting ( new Gs2 . Gs2Exchange . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Exchange . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withEnableAwaitExchange ( null ) . withEnableDirectExchange ( null ) . withTransactionSetting ( new Gs2Exchange . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withExchangeScript ( null ) . withIncrementalExchangeScript ( null ) . withAcquireAwaitScript ( null ) . withLogSetting ( new Gs2Exchange . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . create_namespace ( exchange . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_enable_await_exchange ( None ) . with_enable_direct_exchange ( None ) . with_transaction_setting ( exchange . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_exchange_script ( None ) . with_incremental_exchange_script ( None ) . with_acquire_await_script ( None ) . with_log_setting ( exchange . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , enableAwaitExchange = nil , enableDirectExchange = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, exchangeScript = nil , incrementalExchangeScript = nil , acquireAwaitScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , enableAwaitExchange = nil , enableDirectExchange = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, exchangeScript = nil , incrementalExchangeScript = nil , acquireAwaitScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 exchange . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetNamespaceStatusRequest ; import io.gs2.exchange.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Exchange . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Exchange . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_namespace_status ( exchange . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'exchange' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 exchange . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetNamespaceRequest ; import io.gs2.exchange.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Exchange . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Exchange . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_namespace ( exchange . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 enableAwaitExchange bool false 교환 결과 수령에 대기 시간이 발생하는 교환 기능을 사용할지 여부 활성화하면 await 타이밍 타입의 교환 레이트 모델을 사용할 수 있습니다. 이러한 교환은 보상을 받기 전에 실시간 경과가 필요하며, 플레이어가 결과를 기다려야 하는 제작이나 생산 계열의 메커니즘을 구현할 수 있습니다. enableDirectExchange bool true 직접 교환 API 호출 허용 활성화하면 클라이언트가 교환 API를 직접 호출하여 리소스 교환을 실행할 수 있습니다. 비활성화하면 트랜잭션 액션을 통해서만 교환이 트리거되어, 교환 발생에 대한 서버 측 제어가 더욱 엄격해집니다. transactionSetting TransactionSetting  트랜잭션 설정 교환 조작 시 분산 트랜잭션의 실행 방식을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. exchangeScript ScriptSetting 교환을 실행하려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - exchange incrementalExchangeScript ScriptSetting 코스트 상승형 교환을 실행하려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - incrementalExchange acquireAwaitScript ScriptSetting 대기 방식 교환 처리에서 대기가 완료되어 보상을 받으려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquireAwait logSetting LogSetting 로그 출력 설정 교환 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 교환, 코스트 상승형 교환, 대기 조작의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 exchange . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), EnableAwaitExchange : pointy . Bool ( true ), EnableDirectExchange : nil , TransactionSetting : \u0026 exchange . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, ExchangeScript : nil , IncrementalExchangeScript : nil , AcquireAwaitScript : nil , LogSetting : \u0026 exchange . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withEnableAwaitExchange ( true ) -\u003e withEnableDirectExchange ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Exchange\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withExchangeScript ( null ) -\u003e withIncrementalExchangeScript ( null ) -\u003e withAcquireAwaitScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Exchange\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.UpdateNamespaceRequest ; import io.gs2.exchange.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withEnableAwaitExchange ( true ) . withEnableDirectExchange ( null ) . withTransactionSetting ( new io . gs2 . exchange . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withExchangeScript ( null ) . withIncrementalExchangeScript ( null ) . withAcquireAwaitScript ( null ) . withLogSetting ( new io . gs2 . exchange . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Exchange . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithEnableAwaitExchange ( true ) . WithEnableDirectExchange ( null ) . WithTransactionSetting ( new Gs2 . Gs2Exchange . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithExchangeScript ( null ) . WithIncrementalExchangeScript ( null ) . WithAcquireAwaitScript ( null ) . WithLogSetting ( new Gs2 . Gs2Exchange . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Exchange . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withEnableAwaitExchange ( true ) . withEnableDirectExchange ( null ) . withTransactionSetting ( new Gs2Exchange . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withExchangeScript ( null ) . withIncrementalExchangeScript ( null ) . withAcquireAwaitScript ( null ) . withLogSetting ( new Gs2Exchange . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . update_namespace ( exchange . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_enable_await_exchange ( True ) . with_enable_direct_exchange ( None ) . with_transaction_setting ( exchange . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_exchange_script ( None ) . with_incremental_exchange_script ( None ) . with_acquire_await_script ( None ) . with_log_setting ( exchange . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , enableAwaitExchange = true , enableDirectExchange = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, exchangeScript = nil , incrementalExchangeScript = nil , acquireAwaitScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , enableAwaitExchange = true , enableDirectExchange = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, exchangeScript = nil , incrementalExchangeScript = nil , acquireAwaitScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 exchange . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DeleteNamespaceRequest ; import io.gs2.exchange.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Exchange . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Exchange . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . delete_namespace ( exchange . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 exchange . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetServiceVersionRequest ; import io.gs2.exchange.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Exchange . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Exchange . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_service_version ( exchange . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 exchange . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DumpUserDataByUserIdRequest ; import io.gs2.exchange.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Exchange . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Exchange . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . dump_user_data_by_user_id ( exchange . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'exchange' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 exchange . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.exchange.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Exchange . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Exchange . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( exchange . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'exchange' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 exchange . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.CleanUserDataByUserIdRequest ; import io.gs2.exchange.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Exchange . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Exchange . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . clean_user_data_by_user_id ( exchange . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'exchange' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 exchange . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.exchange.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Exchange . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Exchange . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( exchange . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'exchange' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 exchange . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.exchange.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Exchange . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Exchange . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( exchange . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'exchange' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 exchange . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.ImportUserDataByUserIdRequest ; import io.gs2.exchange.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Exchange . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Exchange . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . import_user_data_by_user_id ( exchange . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'exchange' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 exchange . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.CheckImportUserDataByUserIdRequest ; import io.gs2.exchange.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Exchange . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Exchange . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( exchange . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'exchange' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; exchange 교환을 실행 지정된 교환 레이트 모델에 기반하여 리소스 교환을 실행합니다. 레이트 모델의 타이밍 타입을 검증합니다: ‘immediate’ 타이밍의 경우 네임스페이스에서 직접 교환이 유효해야 하며, ‘await’ 타이밍의 경우 대기 교환이 유효해야 합니다. 레이트 모델에서 정의된 소비·검증·획득 액션을 지정한 횟수만큼 실행하는 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 count int  1 ~ 1073741821 교환 횟수 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item RateModel 교환 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . Exchange ( \u0026 exchange . ExchangeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Count : pointy . Int32 ( 1 ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\ExchangeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e exchange ( ( new ExchangeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCount ( 1 ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.ExchangeRequest ; import io.gs2.exchange.result.ExchangeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { ExchangeResult result = client . exchange ( new ExchangeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCount ( 1 ) . withConfig ( null ) ); RateModel item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . ExchangeResult \u003e asyncResult = null ; yield return client . Exchange ( new Gs2 . Gs2Exchange . Request . ExchangeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCount ( 1 ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . exchange ( new Gs2Exchange . ExchangeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCount ( 1 ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . exchange ( exchange . ExchangeRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_access_token ( 'accessToken-0001' ) . with_count ( 1 ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.exchange ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , accessToken = \"accessToken-0001\" , count = 1 , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'exchange' ) api_result_handler = client.exchange_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , accessToken = \"accessToken-0001\" , count = 1 , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; exchangeByUserId 사용자 ID를 지정하여 교환을 실행 지정된 사용자에 대해, 지정된 교환 레이트 모델에 기반하여 리소스 교환을 실행합니다. 레이트 모델의 타이밍 타입을 검증합니다: ‘immediate’ 타이밍의 경우 네임스페이스에서 직접 교환이 유효해야 하며, ‘await’ 타이밍의 경우 대기 교환이 유효해야 합니다. 레이트 모델에서 정의된 소비·검증·획득 액션을 지정한 횟수만큼 실행하는 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID count int  1 ~ 1073741821 교환 횟수 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RateModel 교환 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . ExchangeByUserId ( \u0026 exchange . ExchangeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), UserId : pointy . String ( \"user-0001\" ), Count : pointy . Int32 ( 1 ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\ExchangeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e exchangeByUserId ( ( new ExchangeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCount ( 1 ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.ExchangeByUserIdRequest ; import io.gs2.exchange.result.ExchangeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { ExchangeByUserIdResult result = client . exchangeByUserId ( new ExchangeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); RateModel item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . ExchangeByUserIdResult \u003e asyncResult = null ; yield return client . ExchangeByUserId ( new Gs2 . Gs2Exchange . Request . ExchangeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithUserId ( \"user-0001\" ) . WithCount ( 1 ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . exchangeByUserId ( new Gs2Exchange . ExchangeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . exchange_by_user_id ( exchange . ExchangeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_user_id ( 'user-0001' ) . with_count ( 1 ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.exchange_by_user_id ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , userId = \"user-0001\" , count = 1 , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'exchange' ) api_result_handler = client.exchange_by_user_id_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , userId = \"user-0001\" , count = 1 , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; incrementalExchange 코스트 상승형 교환 실행 지정된 코스트 상승형 교환 레이트 모델을 기반으로, 실행 횟수에 따라 코스트가 단계적으로 상승하는 리소스 교환을 실행합니다. 소비 코스트는 모델의 계산 타입(선형 계산식 또는 GS2-Script)과 현재 교환 횟수를 기반으로 계산됩니다. 소비·획득 액션을 실행하는 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 count int  1 ~ 1073741821 교환 횟수 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item IncrementalRateModel 코스트 상승형 교환 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . IncrementalExchange ( \u0026 exchange . IncrementalExchangeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Count : pointy . Int32 ( 1 ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\IncrementalExchangeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e incrementalExchange ( ( new IncrementalExchangeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCount ( 1 ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.IncrementalExchangeRequest ; import io.gs2.exchange.result.IncrementalExchangeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { IncrementalExchangeResult result = client . incrementalExchange ( new IncrementalExchangeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCount ( 1 ) . withConfig ( null ) ); IncrementalRateModel item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . IncrementalExchangeResult \u003e asyncResult = null ; yield return client . IncrementalExchange ( new Gs2 . Gs2Exchange . Request . IncrementalExchangeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCount ( 1 ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . incrementalExchange ( new Gs2Exchange . IncrementalExchangeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCount ( 1 ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . incremental_exchange ( exchange . IncrementalExchangeRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_access_token ( 'accessToken-0001' ) . with_count ( 1 ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.incremental_exchange ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , accessToken = \"accessToken-0001\" , count = 1 , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'exchange' ) api_result_handler = client.incremental_exchange_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , accessToken = \"accessToken-0001\" , count = 1 , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; incrementalExchangeByUserId 사용자 ID를 지정하여 코스트 상승형 교환 실행 지정된 사용자에 대해, 지정된 코스트 상승형 교환 레이트 모델을 기반으로, 실행 횟수에 따라 코스트가 단계적으로 상승하는 리소스 교환을 실행합니다. 소비 코스트는 모델의 계산 타입(선형 계산식 또는 GS2-Script)과 현재 교환 횟수를 기반으로 계산됩니다. 소비·획득 액션을 실행하는 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID count int  1 ~ 1073741821 교환 횟수 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item IncrementalRateModel 코스트 상승형 교환 레이트 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . IncrementalExchangeByUserId ( \u0026 exchange . IncrementalExchangeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), UserId : pointy . String ( \"user-0001\" ), Count : pointy . Int32 ( 1 ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\IncrementalExchangeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e incrementalExchangeByUserId ( ( new IncrementalExchangeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCount ( 1 ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.IncrementalExchangeByUserIdRequest ; import io.gs2.exchange.result.IncrementalExchangeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { IncrementalExchangeByUserIdResult result = client . incrementalExchangeByUserId ( new IncrementalExchangeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); IncrementalRateModel item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . IncrementalExchangeByUserIdResult \u003e asyncResult = null ; yield return client . IncrementalExchangeByUserId ( new Gs2 . Gs2Exchange . Request . IncrementalExchangeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithUserId ( \"user-0001\" ) . WithCount ( 1 ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . incrementalExchangeByUserId ( new Gs2Exchange . IncrementalExchangeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . incremental_exchange_by_user_id ( exchange . IncrementalExchangeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_user_id ( 'user-0001' ) . with_count ( 1 ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.incremental_exchange_by_user_id ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , userId = \"user-0001\" , count = 1 , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'exchange' ) api_result_handler = client.incremental_exchange_by_user_id_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , userId = \"user-0001\" , count = 1 , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; createAwaitByUserId 사용자 ID를 지정하여 교환 대기를 작성 시간 대기형 교환의 새로운 교환 대기 레코드를 작성합니다. 지정된 레이트 모델의 타이밍 타입은 ‘await’이어야 하며, 그렇지 않은 경우 요청이 거부됩니다. 대기는 스킵 초수 0으로 시작되며, 레이트 모델에서 정의된 잠금 시간이 보상 획득까지의 사용자 대기 시간을 결정합니다. 작성 시 기본 설정값을 지정할 수 있으며, 획득 시 제공되는 설정값과 병합됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. count int 1 1 ~ 10000 교환 수 이 교환을 실행하는 횟수입니다. 여러 번의 교환을 하나의 대기로 묶을 수 있으며, 소비되는 코스트와 받는 보상이 모두 곱해집니다. config List [] 0 ~ 32 items 보상 획득 시 적용하는 기본 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Await 교환 대기 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . CreateAwaitByUserId ( \u0026 exchange . CreateAwaitByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RateName : pointy . String ( \"material_n_to_r\" ), Count : nil , Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\CreateAwaitByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e createAwaitByUserId ( ( new CreateAwaitByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRateName ( \"material_n_to_r\" ) -\u003e withCount ( null ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.CreateAwaitByUserIdRequest ; import io.gs2.exchange.result.CreateAwaitByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { CreateAwaitByUserIdResult result = client . createAwaitByUserId ( new CreateAwaitByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRateName ( \"material_n_to_r\" ) . withCount ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Await item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . CreateAwaitByUserIdResult \u003e asyncResult = null ; yield return client . CreateAwaitByUserId ( new Gs2 . Gs2Exchange . Request . CreateAwaitByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRateName ( \"material_n_to_r\" ) . WithCount ( null ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . createAwaitByUserId ( new Gs2Exchange . CreateAwaitByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRateName ( \"material_n_to_r\" ) . withCount ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . create_await_by_user_id ( exchange . CreateAwaitByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_rate_name ( 'material_n_to_r' ) . with_count ( None ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.create_await_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rateName = \"material_n_to_r\" , count = nil , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.create_await_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rateName = \"material_n_to_r\" , count = nil , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeAwaits 교환 대기 목록 조회 인증된 사용자의 교환 대기 레코드의 페이지네이션 리스트를 가져옵니다. 선택적으로 레이트명을 지정하여 특정 교환 레이트의 대기만 필터링할 수 있습니다. 각 대기 레코드에는 레이트명, 교환 횟수, 스킵 초수, 타이밍 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rateName string ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 교환 대기 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DescribeAwaits ( \u0026 exchange . DescribeAwaitsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RateName : pointy . String ( \"material_n_to_r\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DescribeAwaitsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e describeAwaits ( ( new DescribeAwaitsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRateName ( \"material_n_to_r\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DescribeAwaitsRequest ; import io.gs2.exchange.result.DescribeAwaitsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DescribeAwaitsResult result = client . describeAwaits ( new DescribeAwaitsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRateName ( \"material_n_to_r\" ) . withPageToken ( null ) . withLimit ( null ) ); List Await \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DescribeAwaitsResult \u003e asyncResult = null ; yield return client . DescribeAwaits ( new Gs2 . Gs2Exchange . Request . DescribeAwaitsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRateName ( \"material_n_to_r\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . describeAwaits ( new Gs2Exchange . DescribeAwaitsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRateName ( \"material_n_to_r\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . describe_awaits ( exchange . DescribeAwaitsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_rate_name ( 'material_n_to_r' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.describe_awaits ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rateName = \"material_n_to_r\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'exchange' ) api_result_handler = client.describe_awaits_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rateName = \"material_n_to_r\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeAwaitsByUserId 사용자 ID를 지정하여 교환 대기 목록 조회 지정된 사용자의 교환 대기 레코드의 페이지네이션 리스트를 가져옵니다. 선택적으로 레이트명을 지정하여 특정 교환 레이트의 대기만 필터링할 수 있습니다. 각 대기 레코드에는 레이트명, 교환 횟수, 스킵 초수, 타이밍 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rateName string ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 교환 대기 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DescribeAwaitsByUserId ( \u0026 exchange . DescribeAwaitsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RateName : pointy . String ( \"material_n_to_r\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DescribeAwaitsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e describeAwaitsByUserId ( ( new DescribeAwaitsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRateName ( \"material_n_to_r\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DescribeAwaitsByUserIdRequest ; import io.gs2.exchange.result.DescribeAwaitsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DescribeAwaitsByUserIdResult result = client . describeAwaitsByUserId ( new DescribeAwaitsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRateName ( \"material_n_to_r\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Await \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DescribeAwaitsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeAwaitsByUserId ( new Gs2 . Gs2Exchange . Request . DescribeAwaitsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRateName ( \"material_n_to_r\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . describeAwaitsByUserId ( new Gs2Exchange . DescribeAwaitsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRateName ( \"material_n_to_r\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . describe_awaits_by_user_id ( exchange . DescribeAwaitsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_rate_name ( 'material_n_to_r' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.describe_awaits_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rateName = \"material_n_to_r\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'exchange' ) api_result_handler = client.describe_awaits_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rateName = \"material_n_to_r\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getAwait 교환 대기 조회 인증된 사용자의 특정 교환 대기 레코드의 상세 정보를 가져옵니다. 반환되는 대기 정보에는 레이트명, 교환 횟수, 현재 스킵 초수, 작성·취득 타이밍이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. Result 타입 설명 item Await 교환 대기 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetAwait ( \u0026 exchange . GetAwaitRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AwaitName : pointy . String ( \"await-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetAwaitRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getAwait ( ( new GetAwaitRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAwaitName ( \"await-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetAwaitRequest ; import io.gs2.exchange.result.GetAwaitResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetAwaitResult result = client . getAwait ( new GetAwaitRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAwaitName ( \"await-0001\" ) ); Await item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetAwaitResult \u003e asyncResult = null ; yield return client . GetAwait ( new Gs2 . Gs2Exchange . Request . GetAwaitRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAwaitName ( \"await-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getAwait ( new Gs2Exchange . GetAwaitRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAwaitName ( \"await-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_await ( exchange . GetAwaitRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_await_name ( 'await-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_await ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , awaitName = \"await-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_await_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , awaitName = \"await-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getAwaitByUserId 사용자 ID를 지정하여 교환 대기 조회 지정된 사용자의 특정 교환 대기 레코드의 상세 정보를 가져옵니다. 반환되는 대기 정보에는 레이트명, 교환 횟수, 현재 스킵 초수, 작성·취득 타이밍이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Await 교환 대기 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetAwaitByUserId ( \u0026 exchange . GetAwaitByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), AwaitName : pointy . String ( \"await-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetAwaitByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getAwaitByUserId ( ( new GetAwaitByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAwaitName ( \"await-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetAwaitByUserIdRequest ; import io.gs2.exchange.result.GetAwaitByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetAwaitByUserIdResult result = client . getAwaitByUserId ( new GetAwaitByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withTimeOffsetToken ( null ) ); Await item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetAwaitByUserIdResult \u003e asyncResult = null ; yield return client . GetAwaitByUserId ( new Gs2 . Gs2Exchange . Request . GetAwaitByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithAwaitName ( \"await-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getAwaitByUserId ( new Gs2Exchange . GetAwaitByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_await_by_user_id ( exchange . GetAwaitByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_await_name ( 'await-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_await_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_await_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquire 교환 대기의 보상을 취득 완료된 교환 대기의 보상을 취득합니다. 보상을 청구하려면 대기가 잠금 시간(스킵 초수에 의한 조정 후)을 경과해야 합니다. 제공된 설정값은 대기 작성 시 설정된 기본 설정값과 병합됩니다. 레이트 모델에서 정의된 획득 액션을 실행하는 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item Await 교환 대기 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 획득 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . Acquire ( \u0026 exchange . AcquireRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AwaitName : pointy . String ( \"await-0001\" ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\AcquireRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e acquire ( ( new AcquireRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAwaitName ( \"await-0001\" ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.AcquireRequest ; import io.gs2.exchange.result.AcquireResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { AcquireResult result = client . acquire ( new AcquireRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAwaitName ( \"await-0001\" ) . withConfig ( null ) ); Await item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . AcquireResult \u003e asyncResult = null ; yield return client . Acquire ( new Gs2 . Gs2Exchange . Request . AcquireRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAwaitName ( \"await-0001\" ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . acquire ( new Gs2Exchange . AcquireRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAwaitName ( \"await-0001\" ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . acquire ( exchange . AcquireRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_await_name ( 'await-0001' ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.acquire ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , awaitName = \"await-0001\" , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'exchange' ) api_result_handler = client.acquire_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , awaitName = \"await-0001\" , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireByUserId 사용자 ID를 지정하여 교환 대기의 보상을 취득 지정된 사용자의 완료된 교환 대기의 보상을 취득합니다. 보상을 청구하려면 대기가 잠금 시간(스킵 초수에 의한 조정 후)을 경과해야 합니다. 제공된 설정값은 대기 작성 시 설정된 기본 설정값과 병합됩니다. 레이트 모델에서 정의된 획득 액션을 실행하는 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Await 교환 대기 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 획득 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . AcquireByUserId ( \u0026 exchange . AcquireByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), AwaitName : pointy . String ( \"await-0001\" ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\AcquireByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e acquireByUserId ( ( new AcquireByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAwaitName ( \"await-0001\" ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.AcquireByUserIdRequest ; import io.gs2.exchange.result.AcquireByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { AcquireByUserIdResult result = client . acquireByUserId ( new AcquireByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Await item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . AcquireByUserIdResult \u003e asyncResult = null ; yield return client . AcquireByUserId ( new Gs2 . Gs2Exchange . Request . AcquireByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithAwaitName ( \"await-0001\" ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . acquireByUserId ( new Gs2Exchange . AcquireByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . acquire_by_user_id ( exchange . AcquireByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_await_name ( 'await-0001' ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.acquire_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'exchange' ) api_result_handler = client.acquire_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; acquireForceByUserId 교환 대기의 보상을 대기 시간 판정 없이 강제 취득 잠금 시간이 경과했는지 여부와 관계없이 교환 대기의 보상을 강제로 취득합니다. 일반적인 대기 시간 확인을 우회하여 즉시 보상을 취득할 수 있습니다. 제공된 설정값은 대기 작성 시 설정된 기본 설정값과 병합됩니다. 레이트 모델에서 정의된 획득 액션을 실행하는 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Await 교환 대기 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 획득 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . AcquireForceByUserId ( \u0026 exchange . AcquireForceByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), AwaitName : pointy . String ( \"await-0001\" ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\AcquireForceByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e acquireForceByUserId ( ( new AcquireForceByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAwaitName ( \"await-0001\" ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.AcquireForceByUserIdRequest ; import io.gs2.exchange.result.AcquireForceByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { AcquireForceByUserIdResult result = client . acquireForceByUserId ( new AcquireForceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Await item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . AcquireForceByUserIdResult \u003e asyncResult = null ; yield return client . AcquireForceByUserId ( new Gs2 . Gs2Exchange . Request . AcquireForceByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithAwaitName ( \"await-0001\" ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . acquireForceByUserId ( new Gs2Exchange . AcquireForceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . acquire_force_by_user_id ( exchange . AcquireForceByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_await_name ( 'await-0001' ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.acquire_force_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'exchange' ) api_result_handler = client.acquire_force_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; skipByUserId 사용자 ID를 지정하여 교환 대기를 스킵 교환 대기의 대기 시간을 가속하거나 스킵합니다. 4가지 스킵 타입을 지원합니다: ‘complete’는 남은 대기 시간을 전부 스킵하고, ‘minutes’는 지정한 분수를 스킵 초수에 더하며, ’totalRate’는 전체 잠금 시간의 비율만큼 스킵하고, ‘remainRate’는 남은 대기 시간의 비율만큼 스킵합니다. 스킵 초수는 합계 잠금 시간이 상한이 되며, 이를 초과할 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. skipType 문자열 열거형 enum {   “complete”,   “minutes”,   “totalRate”,   “remainRate” } “complete” 스킵 방법 정의 설명 complete 완전히 스킵 minutes 시간을 지정하여 스킵(분) totalRate 전체 대기 시간의 비율을 지정하여 스킵 remainRate 남은 대기 시간의 비율을 지정하여 스킵 minutes int {skipType} == “minutes” 0 ~ 2147483646 스킵할 분수 ※ skipType이(가) “minutes” 이면 활성화 rate float {skipType} == “totalRate” or {skipType} == “remainRate” 0 ~ 1 스킵할 대기 시간의 비율 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Await 교환 대기 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . SkipByUserId ( \u0026 exchange . SkipByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), AwaitName : pointy . String ( \"await-0001\" ), SkipType : nil , Minutes : nil , Rate : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\SkipByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e skipByUserId ( ( new SkipByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAwaitName ( \"await-0001\" ) -\u003e withSkipType ( null ) -\u003e withMinutes ( null ) -\u003e withRate ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.SkipByUserIdRequest ; import io.gs2.exchange.result.SkipByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { SkipByUserIdResult result = client . skipByUserId ( new SkipByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withSkipType ( null ) . withMinutes ( null ) . withRate ( null ) . withTimeOffsetToken ( null ) ); Await item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . SkipByUserIdResult \u003e asyncResult = null ; yield return client . SkipByUserId ( new Gs2 . Gs2Exchange . Request . SkipByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithAwaitName ( \"await-0001\" ) . WithSkipType ( null ) . WithMinutes ( null ) . WithRate ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . skipByUserId ( new Gs2Exchange . SkipByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withSkipType ( null ) . withMinutes ( null ) . withRate ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . skip_by_user_id ( exchange . SkipByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_await_name ( 'await-0001' ) . with_skip_type ( None ) . with_minutes ( None ) . with_rate ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.skip_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , skipType = nil , minutes = nil , rate = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.skip_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , skipType = nil , minutes = nil , rate = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteAwait 교환 대기 삭제 인증된 사용자의 교환 대기 레코드를 삭제합니다. 보류 중인 교환이 취소되며, 아직 취득하지 않은 보상은 포기됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. Result 타입 설명 item Await 교환 대기 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DeleteAwait ( \u0026 exchange . DeleteAwaitRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AwaitName : pointy . String ( \"await-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DeleteAwaitRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e deleteAwait ( ( new DeleteAwaitRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAwaitName ( \"await-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DeleteAwaitRequest ; import io.gs2.exchange.result.DeleteAwaitResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DeleteAwaitResult result = client . deleteAwait ( new DeleteAwaitRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAwaitName ( \"await-0001\" ) ); Await item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DeleteAwaitResult \u003e asyncResult = null ; yield return client . DeleteAwait ( new Gs2 . Gs2Exchange . Request . DeleteAwaitRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAwaitName ( \"await-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . deleteAwait ( new Gs2Exchange . DeleteAwaitRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAwaitName ( \"await-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . delete_await ( exchange . DeleteAwaitRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_await_name ( 'await-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.delete_await ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , awaitName = \"await-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.delete_await_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , awaitName = \"await-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteAwaitByUserId 사용자 ID를 지정하여 교환 대기 삭제 지정된 사용자의 교환 대기 레코드를 삭제합니다. 보류 중인 교환이 취소되며, 아직 취득하지 않은 보상은 포기됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Await 교환 대기 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DeleteAwaitByUserId ( \u0026 exchange . DeleteAwaitByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), AwaitName : pointy . String ( \"await-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DeleteAwaitByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e deleteAwaitByUserId ( ( new DeleteAwaitByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAwaitName ( \"await-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DeleteAwaitByUserIdRequest ; import io.gs2.exchange.result.DeleteAwaitByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DeleteAwaitByUserIdResult result = client . deleteAwaitByUserId ( new DeleteAwaitByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withTimeOffsetToken ( null ) ); Await item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DeleteAwaitByUserIdResult \u003e asyncResult = null ; yield return client . DeleteAwaitByUserId ( new Gs2 . Gs2Exchange . Request . DeleteAwaitByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithAwaitName ( \"await-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . deleteAwaitByUserId ( new Gs2Exchange . DeleteAwaitByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAwaitName ( \"await-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . delete_await_by_user_id ( exchange . DeleteAwaitByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_await_name ( 'await-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.delete_await_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.delete_await_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , awaitName = \"await-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRateModels 교환 레이트 모델 목록 조회 지정된 네임스페이스에서 현재 유효화(공개)되어 있는 교환 레이트 모델의 리스트를 가져옵니다. 각 레이트 모델은 타이밍 타입(즉시 또는 대기), 대기 교환의 잠금 시간, 교환 실행 시 실행되는 소비·검증·획득 액션을 포함한 교환 설정을 정의합니다. CurrentRateMaster로 유효화된 모델만 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 교환 레이트 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DescribeRateModels ( \u0026 exchange . DescribeRateModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DescribeRateModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e describeRateModels ( ( new DescribeRateModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DescribeRateModelsRequest ; import io.gs2.exchange.result.DescribeRateModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DescribeRateModelsResult result = client . describeRateModels ( new DescribeRateModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List RateModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DescribeRateModelsResult \u003e asyncResult = null ; yield return client . DescribeRateModels ( new Gs2 . Gs2Exchange . Request . DescribeRateModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . describeRateModels ( new Gs2Exchange . DescribeRateModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . describe_rate_models ( exchange . DescribeRateModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.describe_rate_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'exchange' ) api_result_handler = client.describe_rate_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getRateModel 교환 레이트 모델 조회 이름을 지정하여 현재 유효화되어 있는 특정 교환 레이트 모델의 상세 정보를 가져옵니다. 반환되는 모델에는 타이밍 타입, 잠금 시간, 교환 동작을 정의하는 소비·검증·획득 액션이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item RateModel 교환 레이트 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetRateModel ( \u0026 exchange . GetRateModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetRateModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getRateModel ( ( new GetRateModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetRateModelRequest ; import io.gs2.exchange.result.GetRateModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetRateModelResult result = client . getRateModel ( new GetRateModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); RateModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetRateModelResult \u003e asyncResult = null ; yield return client . GetRateModel ( new Gs2 . Gs2Exchange . Request . GetRateModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getRateModel ( new Gs2Exchange . GetRateModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_rate_model ( exchange . GetRateModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_rate_model ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_rate_model_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeIncrementalRateModels 코스트 상승형 교환 레이트 모델 목록 조회 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 코스트 상승형 교환 레이트 모델의 목록을 조회합니다. 각 모델은 실행 횟수에 따라 코스트가 단계적으로 상승하는 교환을 정의하며, 소비 액션, 계산 타입(선형 또는 GS2-Script), 기본값·계수값, 획득 액션을 포함합니다. CurrentRateMaster에서 활성화된 모델만 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 코스트 상승형 교환 레이트 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DescribeIncrementalRateModels ( \u0026 exchange . DescribeIncrementalRateModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DescribeIncrementalRateModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e describeIncrementalRateModels ( ( new DescribeIncrementalRateModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DescribeIncrementalRateModelsRequest ; import io.gs2.exchange.result.DescribeIncrementalRateModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DescribeIncrementalRateModelsResult result = client . describeIncrementalRateModels ( new DescribeIncrementalRateModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List IncrementalRateModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DescribeIncrementalRateModelsResult \u003e asyncResult = null ; yield return client . DescribeIncrementalRateModels ( new Gs2 . Gs2Exchange . Request . DescribeIncrementalRateModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . describeIncrementalRateModels ( new Gs2Exchange . DescribeIncrementalRateModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . describe_incremental_rate_models ( exchange . DescribeIncrementalRateModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.describe_incremental_rate_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'exchange' ) api_result_handler = client.describe_incremental_rate_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getIncrementalRateModel 코스트 상승형 교환 레이트 모델 조회 이름을 지정하여 현재 활성화되어 있는 특정 코스트 상승형 교환 레이트 모델의 상세 정보를 조회합니다. 반환되는 모델에는 소비 액션, 계산 타입, 기본값, 계수값, 교환 횟수 ID, 최대 교환 횟수, 획득 액션이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item IncrementalRateModel 코스트 상승형 교환 레이트 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetIncrementalRateModel ( \u0026 exchange . GetIncrementalRateModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"character-level\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetIncrementalRateModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getIncrementalRateModel ( ( new GetIncrementalRateModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"character-level\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetIncrementalRateModelRequest ; import io.gs2.exchange.result.GetIncrementalRateModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetIncrementalRateModelResult result = client . getIncrementalRateModel ( new GetIncrementalRateModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); IncrementalRateModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetIncrementalRateModelResult \u003e asyncResult = null ; yield return client . GetIncrementalRateModel ( new Gs2 . Gs2Exchange . Request . GetIncrementalRateModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"character-level\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getIncrementalRateModel ( new Gs2Exchange . GetIncrementalRateModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"character-level\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_incremental_rate_model ( exchange . GetIncrementalRateModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'character-level' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_incremental_rate_model ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_incremental_rate_model_async ({ namespaceName = \"namespace-0001\" , rateName = \"character-level\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 레이트 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재의 레이트 모델 마스터 데이터(교환 레이트 모델과 코스트 상승형 교환 레이트 모델 양쪽 모두)를 활성화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 가져오기에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentRateMaster 활성화 가능한 레이트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 exchange . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.ExportMasterRequest ; import io.gs2.exchange.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentRateMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Exchange . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Exchange . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . export_master ( exchange . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 조회 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 레이트 모델(교환 레이트 모델과 코스트 상승형 교환 레이트 모델 양쪽 모두)의 마스터 데이터를 조회합니다. 이는 편집 가능한 마스터 데이터와는 달리, 실제로 운영 환경에서 사용되고 있는 구성을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetCurrentRateMaster ( \u0026 exchange . GetCurrentRateMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetCurrentRateMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getCurrentRateMaster ( ( new GetCurrentRateMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetCurrentRateMasterRequest ; import io.gs2.exchange.result.GetCurrentRateMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetCurrentRateMasterResult result = client . getCurrentRateMaster ( new GetCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentRateMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetCurrentRateMasterResult \u003e asyncResult = null ; yield return client . GetCurrentRateMaster ( new Gs2 . Gs2Exchange . Request . GetCurrentRateMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getCurrentRateMaster ( new Gs2Exchange . GetCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_current_rate_master ( exchange . GetCurrentRateMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_current_rate_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_current_rate_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 대해 마스터 데이터를 업로드합니다. UpdateCurrentRateMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentRateMaster ( \u0026 exchange . PreUpdateCurrentRateMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\PreUpdateCurrentRateMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentRateMaster ( ( new PreUpdateCurrentRateMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.PreUpdateCurrentRateMasterRequest ; import io.gs2.exchange.result.PreUpdateCurrentRateMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { PreUpdateCurrentRateMasterResult result = client . preUpdateCurrentRateMaster ( new PreUpdateCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . PreUpdateCurrentRateMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentRateMaster ( new Gs2 . Gs2Exchange . Request . PreUpdateCurrentRateMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . preUpdateCurrentRateMaster ( new Gs2Exchange . PreUpdateCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . pre_update_current_rate_master ( exchange . PreUpdateCurrentRateMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.pre_update_current_rate_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'exchange' ) api_result_handler = client.pre_update_current_rate_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 갱신 지정된 네임스페이스의 레이트 모델 마스터 데이터를 갱신하고 활성화(공개)합니다. 두 가지 모드를 지원합니다: 인라인 마스터 데이터용 ‘direct’ 모드와, 사전에 업로드된 마스터 데이터용 ‘preUpload’ 모드입니다. 1MB를 초과하는 마스터 데이터의 경우, 3단계 갱신 흐름(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))을 사용하세요. 업로드된 마스터 데이터는 적용 전에 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentRateMaster 갱신된 현재 활성화된 레이트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentRateMaster ( \u0026 exchange . UpdateCurrentRateMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-08-19\\\",\\n \\\"rateModels\\\": [\\n {\\n \\\"name\\\": \\\"material_n_to_r\\\",\\n \\\"metadata\\\": \\\"N2R\\\",\\n \\\"timingType\\\": \\\"await\\\",\\n \\\"enableSkip\\\": false,\\n \\\"lockTime\\\": 50,\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 10}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"material_r_to_n\\\",\\n \\\"metadata\\\": \\\"N2R\\\",\\n \\\"timingType\\\": \\\"await\\\",\\n \\\"enableSkip\\\": false,\\n \\\"lockTime\\\": 50,\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"category-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 10}\\\"\\n }\\n ]\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\UpdateCurrentRateMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e updateCurrentRateMaster ( ( new UpdateCurrentRateMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-08-19 \\\" , \\n \\\" rateModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" material_n_to_r \\\" , \\n \\\" metadata \\\" : \\\" N2R \\\" , \\n \\\" timingType \\\" : \\\" await \\\" , \\n \\\" enableSkip \\\" : false, \\n \\\" lockTime \\\" : 50, \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 10} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" material_r_to_n \\\" , \\n \\\" metadata \\\" : \\\" N2R \\\" , \\n \\\" timingType \\\" : \\\" await \\\" , \\n \\\" enableSkip \\\" : false, \\n \\\" lockTime \\\" : 50, \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" category-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 10} \\\"\\n } \\n ] \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.UpdateCurrentRateMasterRequest ; import io.gs2.exchange.result.UpdateCurrentRateMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { UpdateCurrentRateMasterResult result = client . updateCurrentRateMaster ( new UpdateCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-08-19\\\",\\n \\\"rateModels\\\": [\\n {\\n \\\"name\\\": \\\"material_n_to_r\\\",\\n \\\"metadata\\\": \\\"N2R\\\",\\n \\\"timingType\\\": \\\"await\\\",\\n \\\"enableSkip\\\": false,\\n \\\"lockTime\\\": 50,\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 10}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"material_r_to_n\\\",\\n \\\"metadata\\\": \\\"N2R\\\",\\n \\\"timingType\\\": \\\"await\\\",\\n \\\"enableSkip\\\": false,\\n \\\"lockTime\\\": 50,\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"category-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 10}\\\"\\n }\\n ]\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentRateMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . UpdateCurrentRateMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentRateMaster ( new Gs2 . Gs2Exchange . Request . UpdateCurrentRateMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-08-19\\\",\\n \\\"rateModels\\\": [\\n {\\n \\\"name\\\": \\\"material_n_to_r\\\",\\n \\\"metadata\\\": \\\"N2R\\\",\\n \\\"timingType\\\": \\\"await\\\",\\n \\\"enableSkip\\\": false,\\n \\\"lockTime\\\": 50,\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 10}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"material_r_to_n\\\",\\n \\\"metadata\\\": \\\"N2R\\\",\\n \\\"timingType\\\": \\\"await\\\",\\n \\\"enableSkip\\\": false,\\n \\\"lockTime\\\": 50,\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"category-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 10}\\\"\\n }\\n ]\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . updateCurrentRateMaster ( new Gs2Exchange . UpdateCurrentRateMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-08-19\\\",\\n \\\"rateModels\\\": [\\n {\\n \\\"name\\\": \\\"material_n_to_r\\\",\\n \\\"metadata\\\": \\\"N2R\\\",\\n \\\"timingType\\\": \\\"await\\\",\\n \\\"enableSkip\\\": false,\\n \\\"lockTime\\\": 50,\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 10}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"material_r_to_n\\\",\\n \\\"metadata\\\": \\\"N2R\\\",\\n \\\"timingType\\\": \\\"await\\\",\\n \\\"enableSkip\\\": false,\\n \\\"lockTime\\\": 50,\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"inventory-0001\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"category-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 10}\\\"\\n }\\n ]\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . update_current_rate_master ( exchange . UpdateCurrentRateMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-08-19\", \\n \"rateModels\": [ \\n { \\n \"name\": \"material_n_to_r\", \\n \"metadata\": \"N2R\", \\n \"timingType\": \"await\", \\n \"enableSkip\": false, \\n \"lockTime\": 50, \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"namespace-0001 \\\\ \", \\\\ \"inventoryName \\\\ \": \\\\ \"inventory-0001 \\\\ \", \\\\ \"itemName \\\\ \": \\\\ \"item-0001 \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"consumeCount \\\\ \": 10}\" \\n } \\n ], \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"namespace-0001 \\\\ \", \\\\ \"inventoryName \\\\ \": \\\\ \"inventory-0001 \\\\ \", \\\\ \"itemName \\\\ \": \\\\ \"item-0002 \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"acquireCount \\\\ \": 1}\" \\n } \\n ] \\n }, \\n { \\n \"name\": \"material_r_to_n\", \\n \"metadata\": \"N2R\", \\n \"timingType\": \"await\", \\n \"enableSkip\": false, \\n \"lockTime\": 50, \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"namespace-0001 \\\\ \", \\\\ \"inventoryName \\\\ \": \\\\ \"inventory-0001 \\\\ \", \\\\ \"itemName \\\\ \": \\\\ \"item-0002 \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"consumeCount \\\\ \": 1}\" \\n } \\n ], \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"category-0001 \\\\ \", \\\\ \"inventoryName \\\\ \": \\\\ \"item \\\\ \", \\\\ \"itemName \\\\ \": \\\\ \"item-0001 \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"acquireCount \\\\ \": 10}\" \\n } \\n ] \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.update_current_rate_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-08-19 \\\" , \\n \\\" rateModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" material_n_to_r \\\" , \\n \\\" metadata \\\" : \\\" N2R \\\" , \\n \\\" timingType \\\" : \\\" await \\\" , \\n \\\" enableSkip \\\" : false, \\n \\\" lockTime \\\" : 50, \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 10} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" material_r_to_n \\\" , \\n \\\" metadata \\\" : \\\" N2R \\\" , \\n \\\" timingType \\\" : \\\" await \\\" , \\n \\\" enableSkip \\\" : false, \\n \\\" lockTime \\\" : 50, \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" category-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 10} \\\"\\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.update_current_rate_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-08-19 \\\" , \\n \\\" rateModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" material_n_to_r \\\" , \\n \\\" metadata \\\" : \\\" N2R \\\" , \\n \\\" timingType \\\" : \\\" await \\\" , \\n \\\" enableSkip \\\" : false, \\n \\\" lockTime \\\" : 50, \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 10} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" material_r_to_n \\\" , \\n \\\" metadata \\\" : \\\" N2R \\\" , \\n \\\" timingType \\\" : \\\" await \\\" , \\n \\\" enableSkip \\\" : false, \\n \\\" lockTime \\\" : 50, \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" inventory-0001 \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" category-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 10} \\\"\\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentRateMasterFromGitHub 현재 활성화된 레이트 모델의 마스터 데이터를 GitHub에서 갱신 GitHub 저장소에서 직접 마스터 데이터를 취득하여 갱신·활성화(공개)합니다. 체크아웃 설정에는 사용할 저장소, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고 직접 배포하는 경우에 편리합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentRateMaster 갱신된 현재 활성화된 레이트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentRateMasterFromGitHub ( \u0026 exchange . UpdateCurrentRateMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 exchange . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\UpdateCurrentRateMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e updateCurrentRateMasterFromGitHub ( ( new UpdateCurrentRateMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.UpdateCurrentRateMasterFromGitHubRequest ; import io.gs2.exchange.result.UpdateCurrentRateMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { UpdateCurrentRateMasterFromGitHubResult result = client . updateCurrentRateMasterFromGitHub ( new UpdateCurrentRateMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentRateMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . UpdateCurrentRateMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentRateMasterFromGitHub ( new Gs2 . Gs2Exchange . Request . UpdateCurrentRateMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Exchange . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . updateCurrentRateMasterFromGitHub ( new Gs2Exchange . UpdateCurrentRateMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Exchange . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . update_current_rate_master_from_git_hub ( exchange . UpdateCurrentRateMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( exchange . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.update_current_rate_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.update_current_rate_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRateModelMasters 교환 레이트 모델 마스터 목록 조회 이름의 접두사 필터링이 가능한, 편집 가능한 교환 레이트 모델 마스터의 페이지네이션 목록을 조회합니다. 교환 레이트 모델 마스터는 교환 레이트 설정의 편집 가능한 정의입니다. 마스터에 대한 변경 사항은 CurrentRateMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 교환 레이트 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 교환 레이트 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DescribeRateModelMasters ( \u0026 exchange . DescribeRateModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DescribeRateModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e describeRateModelMasters ( ( new DescribeRateModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DescribeRateModelMastersRequest ; import io.gs2.exchange.result.DescribeRateModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DescribeRateModelMastersResult result = client . describeRateModelMasters ( new DescribeRateModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List RateModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DescribeRateModelMastersResult \u003e asyncResult = null ; yield return client . DescribeRateModelMasters ( new Gs2 . Gs2Exchange . Request . DescribeRateModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . describeRateModelMasters ( new Gs2Exchange . DescribeRateModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . describe_rate_model_masters ( exchange . DescribeRateModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.describe_rate_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'exchange' ) api_result_handler = client.describe_rate_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createRateModelMaster 교환 레이트 모델 마스터 신규 생성 새로운 편집 가능한 교환 레이트 모델 마스터 정의를 생성합니다. 레이트 모델은 타이밍 타입(즉시 교환용 ‘immediate’, 시간 대기 교환용 ‘await’), 대기 교환의 잠금 시간, 교환 실행 시 실행되는 소비·검증·획득 액션을 정의합니다. 변경 사항은 CurrentRateMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델의 종류를 나타내는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. timingType 문자열 열거형 enum {   “immediate”,   “await” } “immediate” 교환 종류 교환 실행 후 보상이 언제 전달되는지를 결정합니다. immediate 는 교환 실행 시 즉시 보상을 전달합니다. await 는 보상을 받기 전에 실시간의 경과가 필요하며, 대기 기간(예: 제작 시간)을 둡니다. 정의 설명 immediate 즉시 await 현실 시간의 경과 대기 lockTime int {timingType} == “await” ※ 0 ~ 538214400 교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분) timingType이 await 인 경우에만 적용됩니다. 교환이 시작된 후 플레이어가 보상을 받을 수 있게 되기까지 경과해야 하는 실시간 분수를 지정합니다. 대기 시간은 스킵 기능을 사용하여 단축할 수 있습니다. ※ timingType이(가) “await” 이면 필수 acquireActions List [] 0 ~ 100 items 획득 액션 리스트 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 여러 개의 획득 액션을 지정하여 다양한 리소스 타입을 동시에 지급할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 획득 액션으로 실행됩니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 교환이 실행되기 전에 모두 통과해야 하는 사전 조건 체크입니다. 검증 액션 중 하나라도 실패하면, 리소스를 소비하지 않고 교환이 중단됩니다. 레벨 요건이나 인벤토리 용량 등의 조건을 강제하기 위해 사용됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 교환을 실행하기 위해 플레이어가 지불해야 하는 리소스(코스트)를 정의합니다. 여러 개의 소비 액션을 지정할 수 있어, 골드와 아이템을 모두 필요로 하는 것과 같은 복잡한 교환 코스트를 구현할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 소비 액션으로 실행됩니다. Result 타입 설명 item RateModelMaster 생성한 교환 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . CreateRateModelMaster ( \u0026 exchange . CreateRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"rate-0001\" ), Description : nil , Metadata : pointy . String ( \"N2R\" ), TimingType : nil , LockTime : nil , AcquireActions : [] exchange . AcquireAction { exchange . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }, }, VerifyActions : nil , ConsumeActions : [] exchange . ConsumeAction { exchange . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\CreateRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e createRateModelMaster ( ( new CreateRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"rate-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( \"N2R\" ) -\u003e withTimingType ( null ) -\u003e withLockTime ( null ) -\u003e withAcquireActions ([ ( new \\Gs2\\Exchange\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" ), ]) -\u003e withVerifyActions ( null ) -\u003e withConsumeActions ([ ( new \\Gs2\\Exchange\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.CreateRateModelMasterRequest ; import io.gs2.exchange.result.CreateRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { CreateRateModelMasterResult result = client . createRateModelMaster ( new CreateRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"rate-0001\" ) . withDescription ( null ) . withMetadata ( \"N2R\" ) . withTimingType ( null ) . withLockTime ( null ) . withAcquireActions ( Arrays . asList ( new io . gs2 . exchange . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ) )) . withVerifyActions ( null ) . withConsumeActions ( Arrays . asList ( new io . gs2 . exchange . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ) )) ); RateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . CreateRateModelMasterResult \u003e asyncResult = null ; yield return client . CreateRateModelMaster ( new Gs2 . Gs2Exchange . Request . CreateRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"rate-0001\" ) . WithDescription ( null ) . WithMetadata ( \"N2R\" ) . WithTimingType ( null ) . WithLockTime ( null ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }) . WithVerifyActions ( null ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . createRateModelMaster ( new Gs2Exchange . CreateRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"rate-0001\" ) . withDescription ( null ) . withMetadata ( \"N2R\" ) . withTimingType ( null ) . withLockTime ( null ) . withAcquireActions ([ new Gs2Exchange . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), ]) . withVerifyActions ( null ) . withConsumeActions ([ new Gs2Exchange . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . create_rate_model_master ( exchange . CreateRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'rate-0001' ) . with_description ( None ) . with_metadata ( 'N2R' ) . with_timing_type ( None ) . with_lock_time ( None ) . with_acquire_actions ([ exchange . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0002\", \"userId\": \"# {userId} \", \"acquireCount\": 1}' ), ]) . with_verify_actions ( None ) . with_consume_actions ([ exchange . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0001\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.create_rate_model_master ({ namespaceName = \"namespace-0001\" , name = \"rate-0001\" , description = nil , metadata = \"N2R\" , timingType = nil , lockTime = nil , acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, verifyActions = nil , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.create_rate_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"rate-0001\" , description = nil , metadata = \"N2R\" , timingType = nil , lockTime = nil , acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, verifyActions = nil , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRateModelMaster 교환 레이트 모델 마스터 조회 이름을 지정하여 특정 편집 가능한 교환 레이트 모델 마스터의 상세 정보를 조회합니다. 활성화 전 마스터 정의를 열람·편집하는 데 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델의 종류를 나타내는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item RateModelMaster 교환 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetRateModelMaster ( \u0026 exchange . GetRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getRateModelMaster ( ( new GetRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetRateModelMasterRequest ; import io.gs2.exchange.result.GetRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetRateModelMasterResult result = client . getRateModelMaster ( new GetRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) ); RateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetRateModelMasterResult \u003e asyncResult = null ; yield return client . GetRateModelMaster ( new Gs2 . Gs2Exchange . Request . GetRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getRateModelMaster ( new Gs2Exchange . GetRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_rate_model_master ( exchange . GetRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRateModelMaster 교환 레이트 모델 마스터 갱신 기존 교환 레이트 모델 마스터의 설명, 메타데이터, 타이밍 타입, 잠금 시간, 소비·검증·획득 액션을 갱신합니다. 레이트 모델 이름은 생성 후 변경할 수 없습니다. 변경 사항은 CurrentRateMaster API로 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델의 종류를 나타내는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. timingType 문자열 열거형 enum {   “immediate”,   “await” } “immediate” 교환 종류 교환 실행 후 보상이 언제 전달되는지를 결정합니다. immediate 는 교환 실행 시 즉시 보상을 전달합니다. await 는 보상을 받기 전에 실시간의 경과가 필요하며, 대기 기간(예: 제작 시간)을 둡니다. 정의 설명 immediate 즉시 await 현실 시간의 경과 대기 lockTime int {timingType} == “await” ※ 0 ~ 538214400 교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분) timingType이 await 인 경우에만 적용됩니다. 교환이 시작된 후 플레이어가 보상을 받을 수 있게 되기까지 경과해야 하는 실시간 분수를 지정합니다. 대기 시간은 스킵 기능을 사용하여 단축할 수 있습니다. ※ timingType이(가) “await” 이면 필수 acquireActions List [] 0 ~ 100 items 획득 액션 리스트 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 여러 개의 획득 액션을 지정하여 다양한 리소스 타입을 동시에 지급할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 획득 액션으로 실행됩니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 교환이 실행되기 전에 모두 통과해야 하는 사전 조건 체크입니다. 검증 액션 중 하나라도 실패하면, 리소스를 소비하지 않고 교환이 중단됩니다. 레벨 요건이나 인벤토리 용량 등의 조건을 강제하기 위해 사용됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 교환을 실행하기 위해 플레이어가 지불해야 하는 리소스(코스트)를 정의합니다. 여러 개의 소비 액션을 지정할 수 있어, 골드와 아이템을 모두 필요로 하는 것과 같은 복잡한 교환 코스트를 구현할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 소비 액션으로 실행됩니다. Result 타입 설명 item RateModelMaster 갱신한 교환 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . UpdateRateModelMaster ( \u0026 exchange . UpdateRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"RATE_0001\" ), TimingType : pointy . String ( \"await\" ), LockTime : pointy . Int32 ( 180 ), AcquireActions : [] exchange . AcquireAction { exchange . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }, }, VerifyActions : nil , ConsumeActions : [] exchange . ConsumeAction { exchange . ConsumeAction { Action : pointy . String ( \"Gs2Money:WithdrawByUserId\" ), Request : pointy . String ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\UpdateRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e updateRateModelMaster ( ( new UpdateRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"RATE_0001\" ) -\u003e withTimingType ( \"await\" ) -\u003e withLockTime ( 180 ) -\u003e withAcquireActions ([ ( new \\Gs2\\Exchange\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" ), ]) -\u003e withVerifyActions ( null ) -\u003e withConsumeActions ([ ( new \\Gs2\\Exchange\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Money:WithdrawByUserId\" ) -\u003e withRequest ( \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.UpdateRateModelMasterRequest ; import io.gs2.exchange.result.UpdateRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { UpdateRateModelMasterResult result = client . updateRateModelMaster ( new UpdateRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"RATE_0001\" ) . withTimingType ( \"await\" ) . withLockTime ( 180 ) . withAcquireActions ( Arrays . asList ( new io . gs2 . exchange . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ) )) . withVerifyActions ( null ) . withConsumeActions ( Arrays . asList ( new io . gs2 . exchange . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ) )) ); RateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . UpdateRateModelMasterResult \u003e asyncResult = null ; yield return client . UpdateRateModelMaster ( new Gs2 . Gs2Exchange . Request . UpdateRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"RATE_0001\" ) . WithTimingType ( \"await\" ) . WithLockTime ( 180 ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }) . WithVerifyActions ( null ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Money:WithdrawByUserId\" ) . WithRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . updateRateModelMaster ( new Gs2Exchange . UpdateRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"RATE_0001\" ) . withTimingType ( \"await\" ) . withLockTime ( 180 ) . withAcquireActions ([ new Gs2Exchange . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), ]) . withVerifyActions ( null ) . withConsumeActions ([ new Gs2Exchange . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . update_rate_model_master ( exchange . UpdateRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_description ( 'description1' ) . with_metadata ( 'RATE_0001' ) . with_timing_type ( 'await' ) . with_lock_time ( 180 ) . with_acquire_actions ([ exchange . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"moneyName\": \"money-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 200, \"paidOnly\": false}' ), ]) . with_verify_actions ( None ) . with_consume_actions ([ exchange . ConsumeAction () . with_action ( 'Gs2Money:WithdrawByUserId' ) . with_request ( '{\"moneyName\": \"money-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 200, \"paidOnly\": false}' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.update_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , description = \"description1\" , metadata = \"RATE_0001\" , timingType = \"await\" , lockTime = 180 , acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, verifyActions = nil , consumeActions = { { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.update_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , description = \"description1\" , metadata = \"RATE_0001\" , timingType = \"await\" , lockTime = 180 , acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, verifyActions = nil , consumeActions = { { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRateModelMaster 교환 레이트 모델 마스터 삭제 편집 가능한 교환 레이트 모델 마스터 정의를 삭제합니다. 마스터 데이터에만 영향을 미치며, 현재 활성화(공개)되어 있는 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델의 종류를 나타내는 고유한 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item RateModelMaster 삭제한 교환 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DeleteRateModelMaster ( \u0026 exchange . DeleteRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DeleteRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e deleteRateModelMaster ( ( new DeleteRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DeleteRateModelMasterRequest ; import io.gs2.exchange.result.DeleteRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DeleteRateModelMasterResult result = client . deleteRateModelMaster ( new DeleteRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) ); RateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DeleteRateModelMasterResult \u003e asyncResult = null ; yield return client . DeleteRateModelMaster ( new Gs2 . Gs2Exchange . Request . DeleteRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . deleteRateModelMaster ( new Gs2Exchange . DeleteRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . delete_rate_model_master ( exchange . DeleteRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.delete_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.delete_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeIncrementalRateModelMasters 코스트 상승형 교환 레이트 모델 마스터 목록 조회 이름 접두사 필터링이 가능한, 편집 가능한 코스트 상승형 교환 레이트 모델 마스터의 페이지네이션 리스트를 가져옵니다. 코스트 상승형 교환 레이트 모델 마스터는 코스트가 단계적으로 상승하는 교환의 편집 가능한 정의입니다. 마스터에 대한 변경은 CurrentRateMaster API로 마스터 데이터를 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 코스트 상승형 교환 레이트 모델명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 코스트 상승형 교환 레이트 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DescribeIncrementalRateModelMasters ( \u0026 exchange . DescribeIncrementalRateModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DescribeIncrementalRateModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e describeIncrementalRateModelMasters ( ( new DescribeIncrementalRateModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DescribeIncrementalRateModelMastersRequest ; import io.gs2.exchange.result.DescribeIncrementalRateModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DescribeIncrementalRateModelMastersResult result = client . describeIncrementalRateModelMasters ( new DescribeIncrementalRateModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List IncrementalRateModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DescribeIncrementalRateModelMastersResult \u003e asyncResult = null ; yield return client . DescribeIncrementalRateModelMasters ( new Gs2 . Gs2Exchange . Request . DescribeIncrementalRateModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . describeIncrementalRateModelMasters ( new Gs2Exchange . DescribeIncrementalRateModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . describe_incremental_rate_model_masters ( exchange . DescribeIncrementalRateModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.describe_incremental_rate_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'exchange' ) api_result_handler = client.describe_incremental_rate_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createIncrementalRateModelMaster 코스트 상승형 교환 레이트 모델 마스터를 신규 작성 새로운 편집 가능한 코스트 상승형 교환 레이트 모델 마스터 정의를 작성합니다. 모델은 계산 타입에 따라 코스트가 상승하는 소비 액션을 정의합니다: ’linear’(기본값 + 계수값 × 교환 횟수), ‘power’(계수값 ×(교환 횟수 + 1)^2), 또는 ‘gs2_script’(커스텀 GS2-Script를 사용). 교환 횟수 ID는 교환 실행 횟수를 추적하며, 최대 교환 횟수를 설정하여 교환을 제한할 수 있습니다. 변경 사항은 CurrentRateMaster API로 마스터 데이터를 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. consumeAction ConsumeAction  소비 액션 (수량/값은 자동으로 덮어써집니다) 교환 비용으로 소비되는 리소스의 종류를 정의합니다. 실제 수량은 교환 횟수와 계산 방식(선형, 거듭제곱, 스크립트)에 기반하여 동적으로 계산됩니다. 액션 종류와 대상 리소스만 지정하면 되며, 수량 필드는 자동으로 덮어써집니다. calculateType 문자열 열거형 enum {   “linear”,   “power”,   “gs2_script” }  코스트 상승량 계산 방식 교환 횟수에 따라 코스트가 어떻게 상승하는지를 결정합니다. linear 는 코스트를 baseValue +（coefficientValue × 교환 횟수）로 계산합니다. power 는 코스트를 coefficientValue ×（교환 횟수 + 1）^2로 계산합니다. gs2_script 는 임의의 로직을 위해 커스텀 GS2-Script에 계산을 위임합니다. 정의 설명 linear 베이스 값 + (계수 * 교환 횟수) power 계수 * (교환 횟수 + 1) ^ 2 gs2_script GS2-Script에 의한 임의의 로직 baseValue long {calculateType} == “linear” ※ 0 ~ 9223372036854775805 베이스 값 linear 계산 방식을 사용하는 경우 첫 교환 시의 기본 코스트입니다. 합계 코스트는 baseValue +（coefficientValue × 교환 횟수）로 계산됩니다. ※ calculateType이(가) “linear” 이면 필수 coefficientValue long {calculateType} in [“linear”, “power”] ※ 0 ~ 9223372036854775805 계수 교환 횟수에 따라 코스트가 얼마나 빠르게 상승하는지를 제어하는 승수입니다. linear 모드에서는 각 교환마다 이 값이 코스트에 더해집니다. power 모드에서는 코스트가 coefficientValue ×（교환 횟수 + 1）^2로 계산됩니다. ※ calculateType이(가) “linear”,“power\"이면 필수 calculateScriptId string {calculateType} == “gs2_script” ※ ~ 1024자 코스트 계산 스크립트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - calculateCost ※ calculateType이(가) “gs2_script” 이면 필수 exchangeCountId string  ~ 1024자 교환 실행 횟수를 관리하는 GS2-Limit의 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 각 사용자가 이 코스트 상승형 교환을 몇 번 실행했는지 추적하는 GS2-Limit의 횟수 제한 모델을 참조합니다. 카운트는 상승하는 코스트 계산에 사용되며, GS2-Limit의 리셋 타이밍을 사용하여 정기적으로(예: 매일 또는 매주) 리셋할 수 있습니다. maximumExchangeCount int 2147483646 0 ~ 2147483646 교환 횟수 상한 사용자가 이 코스트 상승형 교환을 실행할 수 있는 최대 횟수입니다. 교환 횟수가 이 상한에 도달하면, GS2-Limit에 의한 카운트 리셋까지 이후의 교환이 거부됩니다. acquireActions List [] 0 ~ 100 items 획득 액션 리스트 코스트 상승형 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 보상은 교환 횟수와 관계없이 일정하며, 코스트만 교환마다 증가합니다. Result 타입 설명 item IncrementalRateModelMaster 생성한 코스트 상승형 교환 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . CreateIncrementalRateModelMaster ( \u0026 exchange . CreateIncrementalRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"rate-0001\" ), Description : nil , Metadata : pointy . String ( \"N2R\" ), ConsumeAction : \u0026 exchange . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, CalculateType : pointy . String ( \"linear\" ), BaseValue : pointy . Int64 ( 100 ), CoefficientValue : pointy . Int64 ( 150 ), CalculateScriptId : nil , ExchangeCountId : pointy . String ( \"grn:gs2:limit-0001\" ), MaximumExchangeCount : nil , AcquireActions : [] exchange . AcquireAction { exchange . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\CreateIncrementalRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e createIncrementalRateModelMaster ( ( new CreateIncrementalRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"rate-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( \"N2R\" ) -\u003e withConsumeAction (( new \\Gs2\\Exchange\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" )) -\u003e withCalculateType ( \"linear\" ) -\u003e withBaseValue ( 100 ) -\u003e withCoefficientValue ( 150 ) -\u003e withCalculateScriptId ( null ) -\u003e withExchangeCountId ( \"grn:gs2:limit-0001\" ) -\u003e withMaximumExchangeCount ( null ) -\u003e withAcquireActions ([ ( new \\Gs2\\Exchange\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.CreateIncrementalRateModelMasterRequest ; import io.gs2.exchange.result.CreateIncrementalRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { CreateIncrementalRateModelMasterResult result = client . createIncrementalRateModelMaster ( new CreateIncrementalRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"rate-0001\" ) . withDescription ( null ) . withMetadata ( \"N2R\" ) . withConsumeAction ( new io . gs2 . exchange . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" )) . withCalculateType ( \"linear\" ) . withBaseValue ( 100L ) . withCoefficientValue ( 150L ) . withCalculateScriptId ( null ) . withExchangeCountId ( \"grn:gs2:limit-0001\" ) . withMaximumExchangeCount ( null ) . withAcquireActions ( Arrays . asList ( new io . gs2 . exchange . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ) )) ); IncrementalRateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . CreateIncrementalRateModelMasterResult \u003e asyncResult = null ; yield return client . CreateIncrementalRateModelMaster ( new Gs2 . Gs2Exchange . Request . CreateIncrementalRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"rate-0001\" ) . WithDescription ( null ) . WithMetadata ( \"N2R\" ) . WithConsumeAction ( new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" )) . WithCalculateType ( \"linear\" ) . WithBaseValue ( 100L ) . WithCoefficientValue ( 150L ) . WithCalculateScriptId ( null ) . WithExchangeCountId ( \"grn:gs2:limit-0001\" ) . WithMaximumExchangeCount ( null ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . createIncrementalRateModelMaster ( new Gs2Exchange . CreateIncrementalRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"rate-0001\" ) . withDescription ( null ) . withMetadata ( \"N2R\" ) . withConsumeAction ( new Gs2Exchange . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" )) . withCalculateType ( \"linear\" ) . withBaseValue ( 100 ) . withCoefficientValue ( 150 ) . withCalculateScriptId ( null ) . withExchangeCountId ( \"grn:gs2:limit-0001\" ) . withMaximumExchangeCount ( null ) . withAcquireActions ([ new Gs2Exchange . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . create_incremental_rate_model_master ( exchange . CreateIncrementalRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'rate-0001' ) . with_description ( None ) . with_metadata ( 'N2R' ) . with_consume_action ( exchange . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0001\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' )) . with_calculate_type ( 'linear' ) . with_base_value ( 100 ) . with_coefficient_value ( 150 ) . with_calculate_script_id ( None ) . with_exchange_count_id ( 'grn:gs2:limit-0001' ) . with_maximum_exchange_count ( None ) . with_acquire_actions ([ exchange . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0002\", \"userId\": \"# {userId} \", \"acquireCount\": 1}' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.create_incremental_rate_model_master ({ namespaceName = \"namespace-0001\" , name = \"rate-0001\" , description = nil , metadata = \"N2R\" , consumeAction = { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , }, calculateType = \"linear\" , baseValue = 100 , coefficientValue = 150 , calculateScriptId = nil , exchangeCountId = \"grn:gs2:limit-0001\" , maximumExchangeCount = nil , acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.create_incremental_rate_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"rate-0001\" , description = nil , metadata = \"N2R\" , consumeAction = { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , }, calculateType = \"linear\" , baseValue = 100 , coefficientValue = 150 , calculateScriptId = nil , exchangeCountId = \"grn:gs2:limit-0001\" , maximumExchangeCount = nil , acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getIncrementalRateModelMaster 코스트 상승형 교환 레이트 모델 마스터 조회 이름을 지정하여 특정 편집 가능한 코스트 상승형 교환 레이트 모델 마스터의 상세 정보를 가져옵니다. 유효화 전 마스터 정의의 열람·편집에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item IncrementalRateModelMaster 코스트 상승형 교환 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . GetIncrementalRateModelMaster ( \u0026 exchange . GetIncrementalRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\GetIncrementalRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e getIncrementalRateModelMaster ( ( new GetIncrementalRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.GetIncrementalRateModelMasterRequest ; import io.gs2.exchange.result.GetIncrementalRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { GetIncrementalRateModelMasterResult result = client . getIncrementalRateModelMaster ( new GetIncrementalRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) ); IncrementalRateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . GetIncrementalRateModelMasterResult \u003e asyncResult = null ; yield return client . GetIncrementalRateModelMaster ( new Gs2 . Gs2Exchange . Request . GetIncrementalRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . getIncrementalRateModelMaster ( new Gs2Exchange . GetIncrementalRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . get_incremental_rate_model_master ( exchange . GetIncrementalRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.get_incremental_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.get_incremental_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateIncrementalRateModelMaster 코스트 상승형 교환 레이트 모델 마스터 갱신 기존 코스트 상승형 교환 레이트 모델 마스터의 설명, 메타데이터, 소비 액션, 계산 타입, 기본값·계수값, 스크립트 ID, 교환 횟수 ID, 최대 교환 횟수, 획득 액션을 갱신합니다. 레이트 모델명은 작성 후에는 변경할 수 없습니다. 변경 사항은 CurrentRateMaster API로 마스터 데이터를 다시 유효화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. consumeAction ConsumeAction  소비 액션 (수량/값은 자동으로 덮어써집니다) 교환 비용으로 소비되는 리소스의 종류를 정의합니다. 실제 수량은 교환 횟수와 계산 방식(선형, 거듭제곱, 스크립트)에 기반하여 동적으로 계산됩니다. 액션 종류와 대상 리소스만 지정하면 되며, 수량 필드는 자동으로 덮어써집니다. calculateType 문자열 열거형 enum {   “linear”,   “power”,   “gs2_script” }  코스트 상승량 계산 방식 교환 횟수에 따라 코스트가 어떻게 상승하는지를 결정합니다. linear 는 코스트를 baseValue +（coefficientValue × 교환 횟수）로 계산합니다. power 는 코스트를 coefficientValue ×（교환 횟수 + 1）^2로 계산합니다. gs2_script 는 임의의 로직을 위해 커스텀 GS2-Script에 계산을 위임합니다. 정의 설명 linear 베이스 값 + (계수 * 교환 횟수) power 계수 * (교환 횟수 + 1) ^ 2 gs2_script GS2-Script에 의한 임의의 로직 baseValue long {calculateType} == “linear” ※ 0 ~ 9223372036854775805 베이스 값 linear 계산 방식을 사용하는 경우 첫 교환 시의 기본 코스트입니다. 합계 코스트는 baseValue +（coefficientValue × 교환 횟수）로 계산됩니다. ※ calculateType이(가) “linear” 이면 필수 coefficientValue long {calculateType} in [“linear”, “power”] ※ 0 ~ 9223372036854775805 계수 교환 횟수에 따라 코스트가 얼마나 빠르게 상승하는지를 제어하는 승수입니다. linear 모드에서는 각 교환마다 이 값이 코스트에 더해집니다. power 모드에서는 코스트가 coefficientValue ×（교환 횟수 + 1）^2로 계산됩니다. ※ calculateType이(가) “linear”,“power\"이면 필수 calculateScriptId string {calculateType} == “gs2_script” ※ ~ 1024자 코스트 계산 스크립트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - calculateCost ※ calculateType이(가) “gs2_script” 이면 필수 exchangeCountId string  ~ 1024자 교환 실행 횟수를 관리하는 GS2-Limit의 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 각 사용자가 이 코스트 상승형 교환을 몇 번 실행했는지 추적하는 GS2-Limit의 횟수 제한 모델을 참조합니다. 카운트는 상승하는 코스트 계산에 사용되며, GS2-Limit의 리셋 타이밍을 사용하여 정기적으로(예: 매일 또는 매주) 리셋할 수 있습니다. maximumExchangeCount int 2147483646 0 ~ 2147483646 교환 횟수 상한 사용자가 이 코스트 상승형 교환을 실행할 수 있는 최대 횟수입니다. 교환 횟수가 이 상한에 도달하면, GS2-Limit에 의한 카운트 리셋까지 이후의 교환이 거부됩니다. acquireActions List [] 0 ~ 100 items 획득 액션 리스트 코스트 상승형 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 보상은 교환 횟수와 관계없이 일정하며, 코스트만 교환마다 증가합니다. Result 타입 설명 item IncrementalRateModelMaster 갱신한 코스트 상승형 교환 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . UpdateIncrementalRateModelMaster ( \u0026 exchange . UpdateIncrementalRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"RATE_0001\" ), ConsumeAction : \u0026 exchange . ConsumeAction { Action : pointy . String ( \"Gs2Money:WithdrawByUserId\" ), Request : pointy . String ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }, CalculateType : pointy . String ( \"gs2_script\" ), BaseValue : pointy . Int64 ( 100 ), CoefficientValue : pointy . Int64 ( 150 ), CalculateScriptId : pointy . String ( \"grn:gs2:script-0001\" ), ExchangeCountId : pointy . String ( \"grn:gs2:limit-0001\" ), MaximumExchangeCount : nil , AcquireActions : [] exchange . AcquireAction { exchange . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\UpdateIncrementalRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e updateIncrementalRateModelMaster ( ( new UpdateIncrementalRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"RATE_0001\" ) -\u003e withConsumeAction (( new \\Gs2\\Exchange\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Money:WithdrawByUserId\" ) -\u003e withRequest ( \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" )) -\u003e withCalculateType ( \"gs2_script\" ) -\u003e withBaseValue ( 100 ) -\u003e withCoefficientValue ( 150 ) -\u003e withCalculateScriptId ( \"grn:gs2:script-0001\" ) -\u003e withExchangeCountId ( \"grn:gs2:limit-0001\" ) -\u003e withMaximumExchangeCount ( null ) -\u003e withAcquireActions ([ ( new \\Gs2\\Exchange\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.UpdateIncrementalRateModelMasterRequest ; import io.gs2.exchange.result.UpdateIncrementalRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { UpdateIncrementalRateModelMasterResult result = client . updateIncrementalRateModelMaster ( new UpdateIncrementalRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"RATE_0001\" ) . withConsumeAction ( new io . gs2 . exchange . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" )) . withCalculateType ( \"gs2_script\" ) . withBaseValue ( 100L ) . withCoefficientValue ( 150L ) . withCalculateScriptId ( \"grn:gs2:script-0001\" ) . withExchangeCountId ( \"grn:gs2:limit-0001\" ) . withMaximumExchangeCount ( null ) . withAcquireActions ( Arrays . asList ( new io . gs2 . exchange . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ) )) ); IncrementalRateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . UpdateIncrementalRateModelMasterResult \u003e asyncResult = null ; yield return client . UpdateIncrementalRateModelMaster ( new Gs2 . Gs2Exchange . Request . UpdateIncrementalRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"RATE_0001\" ) . WithConsumeAction ( new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Money:WithdrawByUserId\" ) . WithRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" )) . WithCalculateType ( \"gs2_script\" ) . WithBaseValue ( 100L ) . WithCoefficientValue ( 150L ) . WithCalculateScriptId ( \"grn:gs2:script-0001\" ) . WithExchangeCountId ( \"grn:gs2:limit-0001\" ) . WithMaximumExchangeCount ( null ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . updateIncrementalRateModelMaster ( new Gs2Exchange . UpdateIncrementalRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"RATE_0001\" ) . withConsumeAction ( new Gs2Exchange . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" )) . withCalculateType ( \"gs2_script\" ) . withBaseValue ( 100 ) . withCoefficientValue ( 150 ) . withCalculateScriptId ( \"grn:gs2:script-0001\" ) . withExchangeCountId ( \"grn:gs2:limit-0001\" ) . withMaximumExchangeCount ( null ) . withAcquireActions ([ new Gs2Exchange . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . update_incremental_rate_model_master ( exchange . UpdateIncrementalRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) . with_description ( 'description1' ) . with_metadata ( 'RATE_0001' ) . with_consume_action ( exchange . ConsumeAction () . with_action ( 'Gs2Money:WithdrawByUserId' ) . with_request ( '{\"moneyName\": \"money-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 200, \"paidOnly\": false}' )) . with_calculate_type ( 'gs2_script' ) . with_base_value ( 100 ) . with_coefficient_value ( 150 ) . with_calculate_script_id ( 'grn:gs2:script-0001' ) . with_exchange_count_id ( 'grn:gs2:limit-0001' ) . with_maximum_exchange_count ( None ) . with_acquire_actions ([ exchange . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"moneyName\": \"money-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 200, \"paidOnly\": false}' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.update_incremental_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , description = \"description1\" , metadata = \"RATE_0001\" , consumeAction = { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , }, calculateType = \"gs2_script\" , baseValue = 100 , coefficientValue = 150 , calculateScriptId = \"grn:gs2:script-0001\" , exchangeCountId = \"grn:gs2:limit-0001\" , maximumExchangeCount = nil , acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.update_incremental_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , description = \"description1\" , metadata = \"RATE_0001\" , consumeAction = { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , }, calculateType = \"gs2_script\" , baseValue = 100 , coefficientValue = 150 , calculateScriptId = \"grn:gs2:script-0001\" , exchangeCountId = \"grn:gs2:limit-0001\" , maximumExchangeCount = nil , acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteIncrementalRateModelMaster 코스트 상승형 교환 레이트 모델 마스터 삭제 편집 가능한 코스트 상승형 교환 레이트 모델 마스터 정의를 삭제합니다. 마스터 데이터만 영향을 받으며, 현재 유효화(공개)되어 있는 모델은 마스터 데이터가 다시 유효화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item IncrementalRateModelMaster 삭제한 코스트 상승형 교환 레이트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/exchange\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := exchange . Gs2ExchangeRestClient { Session : \u0026 session , } result , err := client . DeleteIncrementalRateModelMaster ( \u0026 exchange . DeleteIncrementalRateModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RateName : pointy . String ( \"rate-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Exchange\\Gs2ExchangeRestClient ; use Gs2\\Exchange\\Request\\DeleteIncrementalRateModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExchangeRestClient ( $session ); try { $result = $client -\u003e deleteIncrementalRateModelMaster ( ( new DeleteIncrementalRateModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRateName ( \"rate-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.exchange.rest.Gs2ExchangeRestClient ; import io.gs2.exchange.request.DeleteIncrementalRateModelMasterRequest ; import io.gs2.exchange.result.DeleteIncrementalRateModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExchangeRestClient client = new Gs2ExchangeRestClient ( session ); try { DeleteIncrementalRateModelMasterResult result = client . deleteIncrementalRateModelMaster ( new DeleteIncrementalRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) ); IncrementalRateModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExchangeRestClient ( session ); AsyncResult Gs2 . Gs2Exchange . Result . DeleteIncrementalRateModelMasterResult \u003e asyncResult = null ; yield return client . DeleteIncrementalRateModelMaster ( new Gs2 . Gs2Exchange . Request . DeleteIncrementalRateModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRateName ( \"rate-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Exchange from '@/gs2/exchange' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Exchange . Gs2ExchangeRestClient ( session ); try { const result = await client . deleteIncrementalRateModelMaster ( new Gs2Exchange . DeleteIncrementalRateModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRateName ( \"rate-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import exchange session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = exchange . Gs2ExchangeRestClient ( session ) try : result = client . delete_incremental_rate_model_master ( exchange . DeleteIncrementalRateModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rate_name ( 'rate-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'exchange' ) api_result = client.delete_incremental_rate_model_master ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'exchange' ) api_result_handler = client.delete_incremental_rate_model_master_async ({ namespaceName = \"namespace-0001\" , rateName = \"rate-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Exchange SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Exchange SDK API 레퍼런스","url":"/ko/api_reference/exchange/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 경험치 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. rankCapScriptId string ~ 1024자 랭크 캡을 동적으로 결정하는 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - rankCapScript changeExperienceScript ScriptSetting 경험치가 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeExperience changeRankScript ScriptSetting 랭크가 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeRank changeRankCapScript ScriptSetting 랭크 캡이 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeRankCap overflowExperienceScript string ~ 1024자 경험치 초과 시 실행하는 스크립트의 GRN Script 트리거 레퍼런스 - overflowExperience logSetting LogSetting 로그 출력 설정 경험치 조작의 로그 데이터를 GS2-Log로 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 경험치 변동, 랭크업, 랭크 캡 변경의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·경합 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue에 의한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Status 스테이터스 스테이터스란 프로퍼티ID마다 존재하는 엔티티로, 현재의 경험치와 랭크 캡 값을 보유합니다. 프로퍼티ID란 스테이터스 고유의 ID로, 개발자가 임의의 값을 설정할 수 있습니다. GS2에서는 경험치를 보유한 GS2-Inventory의 아이템 세트GRN이나 GS2-Dictionary의 엔트리GRN 뒤에 경험치 모델이 되는 접미사를 추가한 값을 프로퍼티ID로 사용할 것을 권장합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 statusId string ※ ~ 1024자 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 누적 획득 경험치 이 스테이터스가 축적한 총 경험치입니다. 현재 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 산출됩니다. 현재 랭크 캡에 대응하는 임계값을 초과하여 경험치를 획득할 수 없습니다. rankValue long 0 0 ~ 9223372036854775805 현재 랭크 랭크업 임계값 테이블을 사용하여 누적 경험치로부터 산출되는 랭크(레벨)입니다. 0부터 시작하며 경험치 임계값을 초과할 때마다 증가합니다. 현재 랭크 캡 값을 초과할 수 없습니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. nextRankUpExperienceValue long 0 0 ~ 9223372036854775805 다음 랭크업에 필요한 경험치량 다음 랭크에 도달하기 위해 필요한 누적 경험치의 임계값입니다. 스테이터스가 이미 랭크 캡에 도달한 경우 0을 반환합니다. 게임 UI에서 프로그레스 바나 남은 경험치를 표시하는 데 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ExperienceModel 경험치 모델 경험치와 랭크 시스템의 규칙을 정의합니다. 랭크업에 필요한 경험치의 임계값, 기본 랭크 캡, 최대 랭크 캡을 설정합니다. 랭크 캡은 스테이터스가 도달할 수 있는 최대 랭크를 제한하며, 스테이터스별로 최대 랭크 캡까지 인상할 수 있습니다(예: 한계돌파). 옵션으로 현재 랭크에 따라 보상 배율을 조정하는 입수 액션 레이트 테이블을 포함할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 experienceModelId string ※ ~ 1024자 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultExperience long 0 0 ~ 9223372036854775805 경험치 초기값 신규 생성된 스테이터스에 할당되는 경험치입니다. 일반적으로 플레이어가 진행의 처음부터 시작하도록 0으로 설정됩니다. 초기 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 결정됩니다. defaultRankCap long  0 ~ 9223372036854775805 랭크 캡 초기값 신규 생성된 스테이터스가 도달할 수 있는 기본 최대 랭크입니다. 이 랭크의 임계값을 초과한 경험치는 폐기되거나 오버플로 스크립트가 트리거됩니다. 랭크 캡은 한계돌파 등의 조작을 통해 스테이터스별로 maxRankCap까지 인상할 수 있습니다. maxRankCap long  0 ~ 9223372036854775805 랭크 캡의 최댓값 랭크 캡의 절대적인 상한입니다. 랭크 캡 증가 조작(한계돌파 등)을 수행하더라도 랭크 캡은 이 값을 초과할 수 없습니다. defaultRankCap 이상의 값이어야 합니다. rankThreshold Threshold  랭크업 임계값 각 랭크에 필요한 누적 경험치를 정의하는 임계값 테이블을 참조합니다. 임계값의 엔트리 수가 도달 가능한 최대 랭크를 결정하며, 각 엔트리의 값은 다음 랭크에 도달하는 데 필요한 경험치를 지정합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 목록 스테이터스의 랭크를 참조로 사용할 때 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 각 테이블은 랭크와 배율을 매핑하여, 동일한 액션에서도 더 높은 랭크의 캐릭터가 더 많은 보상을 받는 구조를 구현할 수 있습니다. Threshold 랭크업 임계값 랭크업 임계값은 경험치로부터 랭크(레벨)를 결정하는 데 필요한 수열입니다. [10, 20]이라는 값을 설정한 경우, 경험치 값이 0 9 사이면 랭크1, 10 19 사이면 랭크2, 경험치 값이 20이면 랭크3이 되며, 그 이상 경험치를 획득할 수 없게 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. values List  1 ~ 10000 items 랭크업 경험치 임계값 목록 랭크 진행을 정의하는 누적 경험치의 순서가 있는 배열입니다. 항목 수가 도달 가능한 최대 랭크를 결정합니다. 예를 들어 [10, 20]인 경우, 경험치 0 9에서 랭크1, 10 19에서 랭크2, 20 이상에서 랭크3(그 이상의 경험치 획득은 불가)이 됩니다. AcquireActionRate 보상 가산 테이블 상태의 현재 랭크에 따라 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 테이블의 각 항목은 랭크에 대응하며, 입수량에 적용되는 배율을 지정합니다. 표준적인 배정밀도 부동소수점 값과, 대규모 계산용 대수 문자열 표현을 모두 지원합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보상 가산 테이블 이름 이 보상 가산 테이블의 고유 식별자입니다. 특정 입수 액션에 적용할 배율 테이블을 지정할 때 참조됩니다. mode 문자열 열거형 enum {   “double”,   “big” } “double” 보상 가산 테이블의 종류 배율 값의 수치 정밀도를 선택합니다. 표준적인 부동소수점 수(2^48까지)에는 “double\"을, 대규모 계산이 필요한 경우에는 1024자리까지의 문자열 표현을 지원하는 “big\"을 사용합니다. 정의 설명 double 2^48 미만의 부동소수점 수 big 문자열 표기로 1024자리 미만의 부동소수점 수 rates List {mode} == “double” ※ 1 ~ 10000 items 랭크별 가산량(배율) 랭크를 인덱스로 하는 배율 값의 배열입니다. i번째 엔트리는 스테이터스가 랭크 i일 때 적용되는 보상 배율을 정의합니다. mode가 “double\"로 설정된 경우에 사용됩니다. ※ mode이(가) “double” 이면 필수 bigRates List {mode} == “big” ※ 1 ~ 10000 items 랭크별 가산량(배율) 랭크를 인덱스로 하는 문자열 표현 배율 값의 배열입니다. i번째 엔트리는 스테이터스가 랭크 i일 때 적용되는 보상 배율을 정의합니다. 대수치 정밀도가 필요한 계산에서 mode가 “big\"으로 설정된 경우에 사용됩니다. ※ mode이(가) “big” 이면 필수 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 CurrentExperienceMaster 현재 활성화된 경험치 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 경험치 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 툴을 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Experience 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 ExperienceModelMaster 경험치 모델 마스터 경험치 모델 마스터는 게임 내에서 사용되는 경험치 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 경험치 모델로 반영됩니다. 경험치 모델이란 랭크업에 필요한 경험치의 임계값과 기본 랭크 캡·최대 랭크 캡 등을 설정하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 experienceModelId string ※ ~ 1024자 경험치 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultExperience long 0 0 ~ 9223372036854775805 경험치 초기값 신규 생성된 스테이터스에 할당되는 경험치입니다. 일반적으로 플레이어가 진행의 처음부터 시작하도록 0으로 설정됩니다. 초기 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 결정됩니다. defaultRankCap long  0 ~ 9223372036854775805 랭크 캡 초기값 신규 생성된 스테이터스가 도달할 수 있는 기본 최대 랭크입니다. 이 랭크의 임계값을 초과한 경험치는 폐기되거나 오버플로 스크립트가 트리거됩니다. 랭크 캡은 한계돌파 등의 조작을 통해 스테이터스별로 maxRankCap까지 인상할 수 있습니다. maxRankCap long  0 ~ 9223372036854775805 랭크 캡의 최댓값 랭크 캡의 절대적인 상한입니다. 랭크 캡 증가 조작(한계돌파 등)을 수행하더라도 랭크 캡은 이 값을 초과할 수 없습니다. defaultRankCap 이상의 값이어야 합니다. rankThresholdName string  ~ 128자 랭크업 임계값 이름 랭크업 임계값 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 목록 스테이터스의 랭크를 참조로 사용할 때 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 각 테이블은 랭크와 배율을 매핑하여, 동일한 액션에서도 더 높은 랭크의 캐릭터가 더 많은 보상을 받는 구조를 구현할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ThresholdMaster 랭크업 임계값 마스터 랭크업 임계값 마스터는 게임 내에서 사용되는 랭크업 임계값의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행하면 실제로 게임에서 참조하는 랭크업 임계값으로 반영됩니다. 랭크업 임계값은 경험치로부터 랭크(레벨)를 결정하는 데 필요한 수열입니다. [10, 20]이라는 값을 설정한 경우, 경험치 값이 0 9 사이이면 랭크1, 10 19 사이이면 랭크2, 경험치 값이 20이 되면 랭크3이 되며, 그 이상은 경험치를 획득할 수 없게 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 thresholdId string ※ ~ 1024자 랭크업 임계값 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 랭크업 임계값 이름 랭크업 임계값 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. values List  1 ~ 10000 items 랭크업 경험치 임계값 목록 랭크 진행을 정의하는 누적 경험치의 순서가 있는 배열입니다. 항목 수가 도달 가능한 최대 랭크를 결정합니다. 예를 들어 [10, 20]인 경우, 경험치 0 9에서 랭크1, 10 19에서 랭크2, 20 이상에서 랭크3(그 이상의 경험치 획득은 불가)이 됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 experience . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DescribeNamespacesRequest ; import io.gs2.experience.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Experience . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Experience . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . describe_namespaces ( experience . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'experience' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 경험치 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. rankCapScriptId string ~ 1024자 랭크 캡을 동적으로 결정하는 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - rankCapScript changeExperienceScript ScriptSetting 경험치가 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeExperience changeRankScript ScriptSetting 랭크가 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeRank changeRankCapScript ScriptSetting 랭크 캡이 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeRankCap overflowExperienceScript string ~ 1024자 경험치 초과 시 실행하는 스크립트의 GRN Script 트리거 레퍼런스 - overflowExperience logSetting LogSetting 로그 출력 설정 경험치 조작의 로그 데이터를 GS2-Log로 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 경험치 변동, 랭크업, 랭크 캡 변경의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 experience . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , RankCapScriptId : nil , ChangeExperienceScript : nil , ChangeRankScript : nil , ChangeRankCapScript : nil , OverflowExperienceScript : nil , LogSetting : \u0026 experience . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withRankCapScriptId ( null ) -\u003e withChangeExperienceScript ( null ) -\u003e withChangeRankScript ( null ) -\u003e withChangeRankCapScript ( null ) -\u003e withOverflowExperienceScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Experience\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.CreateNamespaceRequest ; import io.gs2.experience.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withRankCapScriptId ( null ) . withChangeExperienceScript ( null ) . withChangeRankScript ( null ) . withChangeRankCapScript ( null ) . withOverflowExperienceScript ( null ) . withLogSetting ( new io . gs2 . experience . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Experience . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithRankCapScriptId ( null ) . WithChangeExperienceScript ( null ) . WithChangeRankScript ( null ) . WithChangeRankCapScript ( null ) . WithOverflowExperienceScript ( null ) . WithLogSetting ( new Gs2 . Gs2Experience . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Experience . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withRankCapScriptId ( null ) . withChangeExperienceScript ( null ) . withChangeRankScript ( null ) . withChangeRankCapScript ( null ) . withOverflowExperienceScript ( null ) . withLogSetting ( new Gs2Experience . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . create_namespace ( experience . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_rank_cap_script_id ( None ) . with_change_experience_script ( None ) . with_change_rank_script ( None ) . with_change_rank_cap_script ( None ) . with_overflow_experience_script ( None ) . with_log_setting ( experience . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , rankCapScriptId = nil , changeExperienceScript = nil , changeRankScript = nil , changeRankCapScript = nil , overflowExperienceScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , rankCapScriptId = nil , changeExperienceScript = nil , changeRankScript = nil , changeRankCapScript = nil , overflowExperienceScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 experience . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetNamespaceStatusRequest ; import io.gs2.experience.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Experience . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Experience . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_namespace_status ( experience . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'experience' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 experience . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetNamespaceRequest ; import io.gs2.experience.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Experience . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Experience . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_namespace ( experience . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 경험치 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. rankCapScriptId string ~ 1024자 랭크 캡을 동적으로 결정하는 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - rankCapScript changeExperienceScript ScriptSetting 경험치가 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeExperience changeRankScript ScriptSetting 랭크가 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeRank changeRankCapScript ScriptSetting 랭크 캡이 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeRankCap overflowExperienceScript string ~ 1024자 경험치 초과 시 실행하는 스크립트의 GRN Script 트리거 레퍼런스 - overflowExperience logSetting LogSetting 로그 출력 설정 경험치 조작의 로그 데이터를 GS2-Log로 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 경험치 변동, 랭크업, 랭크 캡 변경의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 experience . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , RankCapScriptId : nil , ChangeExperienceScript : \u0026 experience . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ), }, ChangeRankScript : \u0026 experience . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ), }, ChangeRankCapScript : \u0026 experience . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" ), }, OverflowExperienceScript : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" ), LogSetting : \u0026 experience . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withRankCapScriptId ( null ) -\u003e withChangeExperienceScript (( new \\Gs2\\Experience\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" )) -\u003e withChangeRankScript (( new \\Gs2\\Experience\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" )) -\u003e withChangeRankCapScript (( new \\Gs2\\Experience\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" )) -\u003e withOverflowExperienceScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" ) -\u003e withLogSetting (( new \\Gs2\\Experience\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.UpdateNamespaceRequest ; import io.gs2.experience.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withRankCapScriptId ( null ) . withChangeExperienceScript ( new io . gs2 . experience . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" )) . withChangeRankScript ( new io . gs2 . experience . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" )) . withChangeRankCapScript ( new io . gs2 . experience . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" )) . withOverflowExperienceScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" ) . withLogSetting ( new io . gs2 . experience . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Experience . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithRankCapScriptId ( null ) . WithChangeExperienceScript ( new Gs2 . Gs2Experience . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" )) . WithChangeRankScript ( new Gs2 . Gs2Experience . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" )) . WithChangeRankCapScript ( new Gs2 . Gs2Experience . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" )) . WithOverflowExperienceScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" ) . WithLogSetting ( new Gs2 . Gs2Experience . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Experience . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withRankCapScriptId ( null ) . withChangeExperienceScript ( new Gs2Experience . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" )) . withChangeRankScript ( new Gs2Experience . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" )) . withChangeRankCapScript ( new Gs2Experience . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" )) . withOverflowExperienceScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" ) . withLogSetting ( new Gs2Experience . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . update_namespace ( experience . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_rank_cap_script_id ( None ) . with_change_experience_script ( experience . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003' )) . with_change_rank_script ( experience . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005' )) . with_change_rank_cap_script ( experience . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007' )) . with_overflow_experience_script ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008' ) . with_log_setting ( experience . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , rankCapScriptId = nil , changeExperienceScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , }, changeRankScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , }, changeRankCapScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" , }, overflowExperienceScript = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , rankCapScriptId = nil , changeExperienceScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , }, changeRankScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , }, changeRankCapScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1007\" , }, overflowExperienceScript = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1008\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 experience . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DeleteNamespaceRequest ; import io.gs2.experience.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Experience . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Experience . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . delete_namespace ( experience . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 experience . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetServiceVersionRequest ; import io.gs2.experience.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Experience . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Experience . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_service_version ( experience . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 experience . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DumpUserDataByUserIdRequest ; import io.gs2.experience.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Experience . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Experience . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . dump_user_data_by_user_id ( experience . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'experience' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 experience . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.experience.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Experience . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Experience . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( experience . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'experience' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 experience . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.CleanUserDataByUserIdRequest ; import io.gs2.experience.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Experience . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Experience . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . clean_user_data_by_user_id ( experience . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'experience' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 experience . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.experience.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Experience . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Experience . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( experience . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'experience' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 experience . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.experience.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Experience . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Experience . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( experience . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'experience' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 experience . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.ImportUserDataByUserIdRequest ; import io.gs2.experience.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Experience . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Experience . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . import_user_data_by_user_id ( experience . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'experience' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 experience . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.CheckImportUserDataByUserIdRequest ; import io.gs2.experience.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Experience . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Experience . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( experience . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'experience' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeStatuses 상태 목록 취득 요청한 사용자의 경험치 상태에 대한 페이지네이션 목록을 취득합니다. 경험치 모델명으로 필터링하여 특정 모델의 상태만 취득할 수 있습니다. 각 상태에는 특정 프로퍼티의 현재 경험치, 랭크(임계값으로부터 산출), 랭크 캡이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string ~ 128자 경험치 모델명 accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DescribeStatuses ( \u0026 experience . DescribeStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DescribeStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e describeStatuses ( ( new DescribeStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DescribeStatusesRequest ; import io.gs2.experience.result.DescribeStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DescribeStatusesResult result = client . describeStatuses ( new DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"character_ssr\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DescribeStatusesResult \u003e asyncResult = null ; yield return client . DescribeStatuses ( new Gs2 . Gs2Experience . Request . DescribeStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . describeStatuses ( new Gs2Experience . DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"character_ssr\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . describe_statuses ( experience . DescribeStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_experience_name ( 'character_ssr' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.describe_statuses ({ namespaceName = \"namespace-0001\" , experienceName = \"character_ssr\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'experience' ) api_result_handler = client.describe_statuses_async ({ namespaceName = \"namespace-0001\" , experienceName = \"character_ssr\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeStatusesByUserId 사용자 ID를 지정하여 상태 목록 취득 지정된 사용자의 경험치 상태에 대한 페이지네이션 목록을 취득합니다. 경험치 모델명으로 필터링할 수 있습니다. 각 상태에는 특정 프로퍼티의 현재 경험치, 랭크, 랭크 캡이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string ~ 128자 경험치 모델명 userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DescribeStatusesByUserId ( \u0026 experience . DescribeStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DescribeStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e describeStatusesByUserId ( ( new DescribeStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DescribeStatusesByUserIdRequest ; import io.gs2.experience.result.DescribeStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DescribeStatusesByUserIdResult result = client . describeStatusesByUserId ( new DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"character_ssr\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DescribeStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeStatusesByUserId ( new Gs2 . Gs2Experience . Request . DescribeStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . describeStatusesByUserId ( new Gs2Experience . DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"character_ssr\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . describe_statuses_by_user_id ( experience . DescribeStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_experience_name ( 'character_ssr' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.describe_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , experienceName = \"character_ssr\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'experience' ) api_result_handler = client.describe_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , experienceName = \"character_ssr\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getStatus 상태 취득 경험치 모델명과 프로퍼티 ID로 식별되는, 요청한 사용자의 경험치 상태를 취득합니다. 현재 경험치, 랭크(랭크업 임계값에 의해 결정), 랭크 캡을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetStatus ( \u0026 experience . GetStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getStatus ( ( new GetStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetStatusRequest ; import io.gs2.experience.result.GetStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetStatusResult result = client . getStatus ( new GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetStatusResult \u003e asyncResult = null ; yield return client . GetStatus ( new Gs2 . Gs2Experience . Request . GetStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getStatus ( new Gs2Experience . GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_status ( experience . GetStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.get_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStatusByUserId 사용자 ID를 지정하여 상태 취득 경험치 모델명과 프로퍼티 ID로 식별되는, 지정된 사용자의 경험치 상태를 취득합니다. 현재 경험치, 랭크, 랭크 캡을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetStatusByUserId ( \u0026 experience . GetStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getStatusByUserId ( ( new GetStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetStatusByUserIdRequest ; import io.gs2.experience.result.GetStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetStatusByUserIdResult result = client . getStatusByUserId ( new GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetStatusByUserId ( new Gs2 . Gs2Experience . Request . GetStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getStatusByUserId ( new Gs2Experience . GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_status_by_user_id ( experience . GetStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.get_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStatusWithSignature 서명 정보와 함께 상태 취득 지정된 암호화 키를 사용하여 생성된 암호 서명과 함께 경험치 상태를 취득합니다. 서명은 외부 시스템이나 게임 클라이언트에서 상태 데이터의 변조 방지 검증에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Status 상태 body string 검증 대상 오브젝트 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetStatusWithSignature ( \u0026 experience . GetStatusWithSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetStatusWithSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getStatusWithSignature ( ( new GetStatusWithSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetStatusWithSignatureRequest ; import io.gs2.experience.result.GetStatusWithSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetStatusWithSignatureResult result = client . getStatusWithSignature ( new GetStatusWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withKeyId ( \"key-0001\" ) ); Status item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetStatusWithSignatureResult \u003e asyncResult = null ; yield return client . GetStatusWithSignature ( new Gs2 . Gs2Experience . Request . GetStatusWithSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getStatusWithSignature ( new Gs2Experience . GetStatusWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_status_with_signature ( experience . GetStatusWithSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_key_id ( 'key-0001' ) ) item = result . item body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_status_with_signature ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; client = gs2 ( 'experience' ) api_result_handler = client.get_status_with_signature_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; getStatusWithSignatureByUserId 사용자 ID를 지정하여 서명 정보와 함께 상태 취득 지정된 사용자의 경험치 상태를 암호 서명과 함께 취득합니다. 서명은 지정된 암호화 키를 사용하여 생성되며, 상태 데이터의 안전한 검증에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 body string 검증 대상 오브젝트 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetStatusWithSignatureByUserId ( \u0026 experience . GetStatusWithSignatureByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), KeyId : pointy . String ( \"key-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetStatusWithSignatureByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getStatusWithSignatureByUserId ( ( new GetStatusWithSignatureByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetStatusWithSignatureByUserIdRequest ; import io.gs2.experience.result.GetStatusWithSignatureByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetStatusWithSignatureByUserIdResult result = client . getStatusWithSignatureByUserId ( new GetStatusWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetStatusWithSignatureByUserIdResult \u003e asyncResult = null ; yield return client . GetStatusWithSignatureByUserId ( new Gs2 . Gs2Experience . Request . GetStatusWithSignatureByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithKeyId ( \"key-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getStatusWithSignatureByUserId ( new Gs2Experience . GetStatusWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_status_with_signature_by_user_id ( experience . GetStatusWithSignatureByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_key_id ( 'key-0001' ) . with_time_offset_token ( None ) ) item = result . item body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_status_with_signature_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , keyId = \"key-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; client = gs2 ( 'experience' ) api_result_handler = client.get_status_with_signature_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , keyId = \"key-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; addExperienceByUserId 사용자 ID를 지정하여 경험치를 가산 지정된 사용자의 상태에 경험치를 가산합니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. truncateExperienceWhenRankUp이 true인 경우, 랭크업 시 임계값을 초과한 잉여 경험치는 절사됩니다. false(기본값)인 경우에는 다음 랭크로 이월됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 획득 경험치 truncateExperienceWhenRankUp bool? false 랭크업 시 남은 경험치를 절사할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 가산 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . AddExperienceByUserId ( \u0026 experience . AddExperienceByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), ExperienceValue : pointy . Int64 ( 10 ), TruncateExperienceWhenRankUp : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\AddExperienceByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e addExperienceByUserId ( ( new AddExperienceByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withExperienceValue ( 10 ) -\u003e withTruncateExperienceWhenRankUp ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.AddExperienceByUserIdRequest ; import io.gs2.experience.result.AddExperienceByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { AddExperienceByUserIdResult result = client . addExperienceByUserId ( new AddExperienceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withExperienceValue ( 10L ) . withTruncateExperienceWhenRankUp ( null ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . AddExperienceByUserIdResult \u003e asyncResult = null ; yield return client . AddExperienceByUserId ( new Gs2 . Gs2Experience . Request . AddExperienceByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithExperienceValue ( 10L ) . WithTruncateExperienceWhenRankUp ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . addExperienceByUserId ( new Gs2Experience . AddExperienceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withExperienceValue ( 10 ) . withTruncateExperienceWhenRankUp ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . add_experience_by_user_id ( experience . AddExperienceByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_experience_value ( 10 ) . with_truncate_experience_when_rank_up ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.add_experience_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , experienceValue = 10 , truncateExperienceWhenRankUp = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.add_experience_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , experienceValue = 10 , truncateExperienceWhenRankUp = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; subExperience 경험치를 감산 요청한 사용자의 상태에서 경험치를 감산합니다. 경험치는 0 미만으로 내려가지 않습니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 잃는 경험치 Result 타입 설명 item Status 감산 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . SubExperience ( \u0026 experience . SubExperienceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), ExperienceValue : pointy . Int64 ( 10 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\SubExperienceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e subExperience ( ( new SubExperienceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withExperienceValue ( 10 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.SubExperienceRequest ; import io.gs2.experience.result.SubExperienceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { SubExperienceResult result = client . subExperience ( new SubExperienceRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withExperienceValue ( 10L ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . SubExperienceResult \u003e asyncResult = null ; yield return client . SubExperience ( new Gs2 . Gs2Experience . Request . SubExperienceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithExperienceValue ( 10L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . subExperience ( new Gs2Experience . SubExperienceRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withExperienceValue ( 10 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . sub_experience ( experience . SubExperienceRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_experience_value ( 10 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.sub_experience ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , experienceValue = 10 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.sub_experience_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , experienceValue = 10 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; subExperienceByUserId 사용자 ID를 지정하여 경험치를 감산 지정된 사용자의 상태에서 경험치를 감산합니다. 경험치는 0 미만으로 내려가지 않습니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 잃는 경험치 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 감산 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . SubExperienceByUserId ( \u0026 experience . SubExperienceByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), ExperienceValue : pointy . Int64 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\SubExperienceByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e subExperienceByUserId ( ( new SubExperienceByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withExperienceValue ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.SubExperienceByUserIdRequest ; import io.gs2.experience.result.SubExperienceByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { SubExperienceByUserIdResult result = client . subExperienceByUserId ( new SubExperienceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withExperienceValue ( 10L ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . SubExperienceByUserIdResult \u003e asyncResult = null ; yield return client . SubExperienceByUserId ( new Gs2 . Gs2Experience . Request . SubExperienceByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithExperienceValue ( 10L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . subExperienceByUserId ( new Gs2Experience . SubExperienceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withExperienceValue ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . sub_experience_by_user_id ( experience . SubExperienceByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_experience_value ( 10 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.sub_experience_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , experienceValue = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.sub_experience_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , experienceValue = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setExperienceByUserId 사용자 ID를 지정하여 경험치를 설정 지정된 사용자의 상태의 경험치를 지정한 값으로 직접 설정합니다. 갱신 전 상태를 ‘old’로 하여, 갱신 후 상태와 함께 반환합니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 누적 획득 경험치 이 스테이터스가 축적한 총 경험치입니다. 현재 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 산출됩니다. 현재 랭크 캡에 대응하는 임계값을 초과하여 경험치를 획득할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 갱신 후 상태 old Status 갱신 전 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . SetExperienceByUserId ( \u0026 experience . SetExperienceByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), ExperienceValue : pointy . Int64 ( 100 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\SetExperienceByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e setExperienceByUserId ( ( new SetExperienceByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withExperienceValue ( 100 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.SetExperienceByUserIdRequest ; import io.gs2.experience.result.SetExperienceByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { SetExperienceByUserIdResult result = client . setExperienceByUserId ( new SetExperienceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withExperienceValue ( 100L ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); Status old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . SetExperienceByUserIdResult \u003e asyncResult = null ; yield return client . SetExperienceByUserId ( new Gs2 . Gs2Experience . Request . SetExperienceByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithExperienceValue ( 100L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . setExperienceByUserId ( new Gs2Experience . SetExperienceByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withExperienceValue ( 100 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . set_experience_by_user_id ( experience . SetExperienceByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_experience_value ( 100 ) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.set_experience_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , experienceValue = 100 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'experience' ) api_result_handler = client.set_experience_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , experienceValue = 100 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; addRankCapByUserId 사용자 ID를 지정하여 랭크 캡을 가산 지정된 사용자의 상태의 랭크 캡을 가산합니다. 랭크 캡은 경험치 모델에서 정의된 maxRankCap을 초과할 수 없습니다. 랭크 캡은 지정된 프로퍼티에서 사용자가 도달 가능한 최대 랭크를 결정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 가산 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . AddRankCapByUserId ( \u0026 experience . AddRankCapByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), RankCapValue : pointy . Int64 ( 30 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\AddRankCapByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e addRankCapByUserId ( ( new AddRankCapByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRankCapValue ( 30 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.AddRankCapByUserIdRequest ; import io.gs2.experience.result.AddRankCapByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { AddRankCapByUserIdResult result = client . addRankCapByUserId ( new AddRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 30L ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . AddRankCapByUserIdResult \u003e asyncResult = null ; yield return client . AddRankCapByUserId ( new Gs2 . Gs2Experience . Request . AddRankCapByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithRankCapValue ( 30L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . addRankCapByUserId ( new Gs2Experience . AddRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 30 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . add_rank_cap_by_user_id ( experience . AddRankCapByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_rank_cap_value ( 30 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.add_rank_cap_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rankCapValue = 30 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.add_rank_cap_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rankCapValue = 30 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; subRankCap 랭크 캡을 감산 요청한 사용자의 상태의 랭크 캡을 감산합니다. 랭크 캡은 0 미만으로 내려가지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. Result 타입 설명 item Status 감산 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . SubRankCap ( \u0026 experience . SubRankCapRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), RankCapValue : pointy . Int64 ( 30 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\SubRankCapRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e subRankCap ( ( new SubRankCapRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRankCapValue ( 30 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.SubRankCapRequest ; import io.gs2.experience.result.SubRankCapResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { SubRankCapResult result = client . subRankCap ( new SubRankCapRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 30L ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . SubRankCapResult \u003e asyncResult = null ; yield return client . SubRankCap ( new Gs2 . Gs2Experience . Request . SubRankCapRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithRankCapValue ( 30L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . subRankCap ( new Gs2Experience . SubRankCapRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 30 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . sub_rank_cap ( experience . SubRankCapRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_rank_cap_value ( 30 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.sub_rank_cap ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rankCapValue = 30 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.sub_rank_cap_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rankCapValue = 30 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; subRankCapByUserId 사용자 ID를 지정하여 랭크 캡을 감산 지정된 사용자의 상태의 랭크 캡을 감산합니다. 랭크 캡은 0 미만으로 내려가지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 감산 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . SubRankCapByUserId ( \u0026 experience . SubRankCapByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), RankCapValue : pointy . Int64 ( 30 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\SubRankCapByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e subRankCapByUserId ( ( new SubRankCapByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRankCapValue ( 30 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.SubRankCapByUserIdRequest ; import io.gs2.experience.result.SubRankCapByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { SubRankCapByUserIdResult result = client . subRankCapByUserId ( new SubRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 30L ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . SubRankCapByUserIdResult \u003e asyncResult = null ; yield return client . SubRankCapByUserId ( new Gs2 . Gs2Experience . Request . SubRankCapByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithRankCapValue ( 30L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . subRankCapByUserId ( new Gs2Experience . SubRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 30 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . sub_rank_cap_by_user_id ( experience . SubRankCapByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_rank_cap_value ( 30 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.sub_rank_cap_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rankCapValue = 30 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.sub_rank_cap_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rankCapValue = 30 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setRankCapByUserId 사용자 ID를 지정하여 랭크 캡을 설정 지정된 사용자의 상태의 랭크 캡 값을 지정한 값으로 직접 설정합니다. 갱신 전 상태를 ‘old’로 하여, 갱신 후 상태와 함께 반환합니다. 랭크 캡은 경험치 모델에서 정의된 maxRankCap으로 상한이 제한됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 갱신 후 상태 old Status 갱신 전 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . SetRankCapByUserId ( \u0026 experience . SetRankCapByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), RankCapValue : pointy . Int64 ( 30 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\SetRankCapByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e setRankCapByUserId ( ( new SetRankCapByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRankCapValue ( 30 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.SetRankCapByUserIdRequest ; import io.gs2.experience.result.SetRankCapByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { SetRankCapByUserIdResult result = client . setRankCapByUserId ( new SetRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 30L ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); Status old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . SetRankCapByUserIdResult \u003e asyncResult = null ; yield return client . SetRankCapByUserId ( new Gs2 . Gs2Experience . Request . SetRankCapByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithRankCapValue ( 30L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . setRankCapByUserId ( new Gs2Experience . SetRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 30 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . set_rank_cap_by_user_id ( experience . SetRankCapByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_rank_cap_value ( 30 ) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.set_rank_cap_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rankCapValue = 30 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'experience' ) api_result_handler = client.set_rank_cap_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rankCapValue = 30 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; deleteStatusByUserId 상태를 삭제 지정된 사용자, 경험치 모델, 프로퍼티의 경험치 상태를 삭제합니다. 지정된 프로퍼티에 대한 사용자의 경험치, 랭크, 랭크 캡이 초기화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 삭제된 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DeleteStatusByUserId ( \u0026 experience . DeleteStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DeleteStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e deleteStatusByUserId ( ( new DeleteStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DeleteStatusByUserIdRequest ; import io.gs2.experience.result.DeleteStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DeleteStatusByUserIdResult result = client . deleteStatusByUserId ( new DeleteStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DeleteStatusByUserIdResult \u003e asyncResult = null ; yield return client . DeleteStatusByUserId ( new Gs2 . Gs2Experience . Request . DeleteStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . deleteStatusByUserId ( new Gs2Experience . DeleteStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . delete_status_by_user_id ( experience . DeleteStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.delete_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.delete_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyRank 랭크를 검증 요청한 사용자의 현재 랭크가 지정된 값에 대한 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증 조건을 충족하지 않는 경우 오류(BadRequest)를 반환합니다. 게임 로직의 조건 분기 처리에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 랭크가 지정값 미만일 것 lessEqual 랭크가 지정값 이하일 것 greater 랭크가 지정값 초과일 것 greaterEqual 랭크가 지정값 이상일 것 equal 랭크가 지정값과 일치할 것 notEqual 랭크가 지정값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankValue long 0 0 ~ 9223372036854775805 현재 랭크 랭크업 임계값 테이블을 사용하여 누적 경험치로부터 산출되는 랭크(레벨)입니다. 0부터 시작하며 경험치 임계값을 초과할 때마다 증가합니다. 현재 랭크 캡 값을 초과할 수 없습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Status 갱신 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . VerifyRank ( \u0026 experience . VerifyRankRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), VerifyType : pointy . String ( \"less\" ), PropertyId : pointy . String ( \"property-0001\" ), RankValue : nil , MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\VerifyRankRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e verifyRank ( ( new VerifyRankRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRankValue ( null ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.VerifyRankRequest ; import io.gs2.experience.result.VerifyRankResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { VerifyRankResult result = client . verifyRank ( new VerifyRankRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withRankValue ( null ) . withMultiplyValueSpecifyingQuantity ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . VerifyRankResult \u003e asyncResult = null ; yield return client . VerifyRank ( new Gs2 . Gs2Experience . Request . VerifyRankRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithVerifyType ( \"less\" ) . WithPropertyId ( \"property-0001\" ) . WithRankValue ( null ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . verifyRank ( new Gs2Experience . VerifyRankRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withRankValue ( null ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . verify_rank ( experience . VerifyRankRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_experience_name ( 'character_ssr' ) . with_verify_type ( 'less' ) . with_property_id ( 'property-0001' ) . with_rank_value ( None ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.verify_rank ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , verifyType = \"less\" , propertyId = \"property-0001\" , rankValue = nil , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.verify_rank_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , verifyType = \"less\" , propertyId = \"property-0001\" , rankValue = nil , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyRankByUserId 사용자 ID를 지정하여 랭크를 검증 지정된 사용자의 현재 랭크가 지정된 값에 대한 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증 조건을 충족하지 않는 경우 오류(BadRequest)를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 랭크가 지정값 미만일 것 lessEqual 랭크가 지정값 이하일 것 greater 랭크가 지정값 초과일 것 greaterEqual 랭크가 지정값 이상일 것 equal 랭크가 지정값과 일치할 것 notEqual 랭크가 지정값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankValue long 0 0 ~ 9223372036854775805 현재 랭크 랭크업 임계값 테이블을 사용하여 누적 경험치로부터 산출되는 랭크(레벨)입니다. 0부터 시작하며 경험치 임계값을 초과할 때마다 증가합니다. 현재 랭크 캡 값을 초과할 수 없습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 갱신 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . VerifyRankByUserId ( \u0026 experience . VerifyRankByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), VerifyType : pointy . String ( \"less\" ), PropertyId : pointy . String ( \"property-0001\" ), RankValue : nil , MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\VerifyRankByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e verifyRankByUserId ( ( new VerifyRankByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRankValue ( null ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.VerifyRankByUserIdRequest ; import io.gs2.experience.result.VerifyRankByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { VerifyRankByUserIdResult result = client . verifyRankByUserId ( new VerifyRankByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withRankValue ( null ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . VerifyRankByUserIdResult \u003e asyncResult = null ; yield return client . VerifyRankByUserId ( new Gs2 . Gs2Experience . Request . VerifyRankByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithVerifyType ( \"less\" ) . WithPropertyId ( \"property-0001\" ) . WithRankValue ( null ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . verifyRankByUserId ( new Gs2Experience . VerifyRankByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withRankValue ( null ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . verify_rank_by_user_id ( experience . VerifyRankByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_verify_type ( 'less' ) . with_property_id ( 'property-0001' ) . with_rank_value ( None ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.verify_rank_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , verifyType = \"less\" , propertyId = \"property-0001\" , rankValue = nil , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.verify_rank_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , verifyType = \"less\" , propertyId = \"property-0001\" , rankValue = nil , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyRankCap 랭크 캡을 검증 요청한 사용자의 현재 랭크 캡(버프 효과 포함)이 지정된 값에 대한 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증 조건을 충족하지 않는 경우 오류(BadRequest)를 반환합니다. 게임 로직의 조건 분기 처리에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 랭크 캡이 지정값 미만일 것 lessEqual 랭크 캡이 지정값 이하일 것 greater 랭크 캡이 지정값 초과일 것 greaterEqual 랭크 캡이 지정값 이상일 것 equal 랭크 캡이 지정값과 일치할 것 notEqual 랭크 캡이 지정값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Status 갱신 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . VerifyRankCap ( \u0026 experience . VerifyRankCapRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), VerifyType : pointy . String ( \"less\" ), PropertyId : pointy . String ( \"property-0001\" ), RankCapValue : pointy . Int64 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\VerifyRankCapRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e verifyRankCap ( ( new VerifyRankCapRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRankCapValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.VerifyRankCapRequest ; import io.gs2.experience.result.VerifyRankCapResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { VerifyRankCapResult result = client . verifyRankCap ( new VerifyRankCapRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 10L ) . withMultiplyValueSpecifyingQuantity ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . VerifyRankCapResult \u003e asyncResult = null ; yield return client . VerifyRankCap ( new Gs2 . Gs2Experience . Request . VerifyRankCapRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithVerifyType ( \"less\" ) . WithPropertyId ( \"property-0001\" ) . WithRankCapValue ( 10L ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . verifyRankCap ( new Gs2Experience . VerifyRankCapRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withExperienceName ( \"character_ssr\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . verify_rank_cap ( experience . VerifyRankCapRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_experience_name ( 'character_ssr' ) . with_verify_type ( 'less' ) . with_property_id ( 'property-0001' ) . with_rank_cap_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.verify_rank_cap ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , verifyType = \"less\" , propertyId = \"property-0001\" , rankCapValue = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.verify_rank_cap_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , experienceName = \"character_ssr\" , verifyType = \"less\" , propertyId = \"property-0001\" , rankCapValue = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyRankCapByUserId 사용자 ID를 지정하여 랭크 캡을 검증 지정된 사용자의 현재 랭크 캡(버프 효과 포함)이 지정된 값에 대한 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증 조건을 충족하지 않는 경우 오류(BadRequest)를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 랭크 캡이 지정값 미만일 것 lessEqual 랭크 캡이 지정값 이하일 것 greater 랭크 캡이 지정값 초과일 것 greaterEqual 랭크 캡이 지정값 이상일 것 equal 랭크 캡이 지정값과 일치할 것 notEqual 랭크 캡이 지정값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 갱신 후 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . VerifyRankCapByUserId ( \u0026 experience . VerifyRankCapByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), VerifyType : pointy . String ( \"less\" ), PropertyId : pointy . String ( \"property-0001\" ), RankCapValue : pointy . Int64 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\VerifyRankCapByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e verifyRankCapByUserId ( ( new VerifyRankCapByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRankCapValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.VerifyRankCapByUserIdRequest ; import io.gs2.experience.result.VerifyRankCapByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { VerifyRankCapByUserIdResult result = client . verifyRankCapByUserId ( new VerifyRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 10L ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . VerifyRankCapByUserIdResult \u003e asyncResult = null ; yield return client . VerifyRankCapByUserId ( new Gs2 . Gs2Experience . Request . VerifyRankCapByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithVerifyType ( \"less\" ) . WithPropertyId ( \"property-0001\" ) . WithRankCapValue ( 10L ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . verifyRankCapByUserId ( new Gs2Experience . VerifyRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withRankCapValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . verify_rank_cap_by_user_id ( experience . VerifyRankCapByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_verify_type ( 'less' ) . with_property_id ( 'property-0001' ) . with_rank_cap_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.verify_rank_cap_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , verifyType = \"less\" , propertyId = \"property-0001\" , rankCapValue = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.verify_rank_cap_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , verifyType = \"less\" , propertyId = \"property-0001\" , rankCapValue = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; multiplyAcquireActionsByUserId 사용자 ID를 지정하여 경험치 대상 프로퍼티의 랭크에 따라 리소스를 가산 프로퍼티의 현재 랭크 값을 기반으로 지정된 rateName의 입수 액션 배율을 참조하고, 지정된 입수 액션을 해당 배율(baseRate와 조합)로 곱하여 그 결과 액션을 실행하는 트랜잭션을 시작합니다. 랭크에 기반한 보상 스케일링에 사용되며, 랭크가 높을수록 비례하여 더 많은 리소스를 획득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rateName string  ~ 128자 보상 가산 테이블 이름 이 보상 가산 테이블의 고유 식별자입니다. 특정 입수 액션에 적용할 배율 테이블을 지정할 때 참조됩니다. acquireActions List [] 0 ~ 100 items 입수 액션 목록 baseRate float 1 0 ~ 1000000 기초 배율 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 보상 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . MultiplyAcquireActionsByUserId ( \u0026 experience . MultiplyAcquireActionsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ExperienceName : pointy . String ( \"character_ssr\" ), PropertyId : pointy . String ( \"property-0001\" ), RateName : pointy . String ( \"rate-0001\" ), AcquireActions : [] experience . AcquireAction { experience . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddRankCapByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"character\\\", \\\"propertyId\\\": \\\"property-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"rankCapValue\\\": 1}\" ), }, }, BaseRate : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\MultiplyAcquireActionsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e multiplyAcquireActionsByUserId ( ( new MultiplyAcquireActionsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExperienceName ( \"character_ssr\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withAcquireActions ([ ( new AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddRankCapByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" character \\\" , \\\" propertyId \\\" : \\\" property-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" rankCapValue \\\" : 1}\" ), ]) -\u003e withBaseRate ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.MultiplyAcquireActionsByUserIdRequest ; import io.gs2.experience.result.MultiplyAcquireActionsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { MultiplyAcquireActionsByUserIdResult result = client . multiplyAcquireActionsByUserId ( new MultiplyAcquireActionsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRateName ( \"rate-0001\" ) . withAcquireActions ( Arrays . asList ( new AcquireAction () . withAction ( \"Gs2Experience:AddRankCapByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"character\\\", \\\"propertyId\\\": \\\"property-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"rankCapValue\\\": 1}\" ) )) . withBaseRate ( null ) . withTimeOffsetToken ( null ) ); List AcquireAction \u003e items = result . getItems (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . MultiplyAcquireActionsByUserIdResult \u003e asyncResult = null ; yield return client . MultiplyAcquireActionsByUserId ( new Gs2 . Gs2Experience . Request . MultiplyAcquireActionsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithExperienceName ( \"character_ssr\" ) . WithPropertyId ( \"property-0001\" ) . WithRateName ( \"rate-0001\" ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddRankCapByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"character\\\", \\\"propertyId\\\": \\\"property-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"rankCapValue\\\": 1}\" ), }) . WithBaseRate ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . multiplyAcquireActionsByUserId ( new Gs2Experience . MultiplyAcquireActionsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withExperienceName ( \"character_ssr\" ) . withPropertyId ( \"property-0001\" ) . withRateName ( \"rate-0001\" ) . withAcquireActions ([ new Gs2Experience . model . AcquireAction () . withAction ( \"Gs2Experience:AddRankCapByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"character\\\", \\\"propertyId\\\": \\\"property-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"rankCapValue\\\": 1}\" ), ]) . withBaseRate ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . multiply_acquire_actions_by_user_id ( experience . MultiplyAcquireActionsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_experience_name ( 'character_ssr' ) . with_property_id ( 'property-0001' ) . with_rate_name ( 'rate-0001' ) . with_acquire_actions ([ experience . AcquireAction () . with_action ( 'Gs2Experience:AddRankCapByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"experienceName\": \"character\", \"propertyId\": \"property-0001\", \"userId\": \"# {userId} \", \"rankCapValue\": 1}' ), ]) . with_base_rate ( None ) . with_time_offset_token ( None ) ) items = result . items transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.multiply_acquire_actions_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rateName = \"rate-0001\" , acquireActions = { { action = \"Gs2Experience:AddRankCapByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" character \\\" , \\\" propertyId \\\" : \\\" property-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" rankCapValue \\\" : 1}\" , } }, baseRate = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'experience' ) api_result_handler = client.multiply_acquire_actions_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , experienceName = \"character_ssr\" , propertyId = \"property-0001\" , rateName = \"rate-0001\" , acquireActions = { { action = \"Gs2Experience:AddRankCapByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" character \\\" , \\\" propertyId \\\" : \\\" property-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" rankCapValue \\\" : 1}\" , } }, baseRate = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; describeExperienceModels 경험치 모델 목록 조회 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 모든 경험치 모델을 조회합니다. 경험치 모델은 기본 경험치, 기본/최대 랭크 캡, 관련 랭크업 임계값, 입수 액션 배율 정의를 포함하는 경험치·랭크 시스템의 구성을 정의합니다. 편집 가능한 경험치 모델 마스터와는 달리, 실제로 사용되는 모델입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 경험치 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DescribeExperienceModels ( \u0026 experience . DescribeExperienceModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DescribeExperienceModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e describeExperienceModels ( ( new DescribeExperienceModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DescribeExperienceModelsRequest ; import io.gs2.experience.result.DescribeExperienceModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DescribeExperienceModelsResult result = client . describeExperienceModels ( new DescribeExperienceModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List ExperienceModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DescribeExperienceModelsResult \u003e asyncResult = null ; yield return client . DescribeExperienceModels ( new Gs2 . Gs2Experience . Request . DescribeExperienceModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . describeExperienceModels ( new Gs2Experience . DescribeExperienceModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . describe_experience_models ( experience . DescribeExperienceModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.describe_experience_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'experience' ) api_result_handler = client.describe_experience_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getExperienceModel 경험치 모델 조회 이름을 지정하여 현재 활성화(공개)되어 있는 특정 경험치 모델의 상세 정보를 조회합니다. 기본 경험치, 기본/최대 랭크 캡, 관련 랭크업 임계값 정의, 랭크에 따른 보상 스케일링에 사용되는 입수 액션 배율 설정을 포함하는 모델의 구성을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ExperienceModel 경험치 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetExperienceModel ( \u0026 experience . GetExperienceModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ExperienceName : pointy . String ( \"experience-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetExperienceModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getExperienceModel ( ( new GetExperienceModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withExperienceName ( \"experience-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetExperienceModelRequest ; import io.gs2.experience.result.GetExperienceModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetExperienceModelResult result = client . getExperienceModel ( new GetExperienceModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"experience-0001\" ) ); ExperienceModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetExperienceModelResult \u003e asyncResult = null ; yield return client . GetExperienceModel ( new Gs2 . Gs2Experience . Request . GetExperienceModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithExperienceName ( \"experience-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getExperienceModel ( new Gs2Experience . GetExperienceModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"experience-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_experience_model ( experience . GetExperienceModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_experience_name ( 'experience-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_experience_model ({ namespaceName = \"namespace-0001\" , experienceName = \"experience-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.get_experience_model_async ({ namespaceName = \"namespace-0001\" , experienceName = \"experience-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 경험치 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 경험치 모델 마스터와 랭크업 임계값 마스터를 활성화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 임포트에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentExperienceMaster 활성화 가능한 경험치 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 experience . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.ExportMasterRequest ; import io.gs2.experience.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentExperienceMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Experience . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Experience . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . export_master ( experience . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentExperienceMaster 현재 활성화된 경험치 모델의 마스터 데이터를 취득 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 경험치 모델과 랭크업 임계값의 마스터 데이터를 취득합니다. 이는 편집 가능한 마스터 데이터와는 달리, 실제로 운영 환경에서 사용되고 있는 구성을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentExperienceMaster 현재 활성화된 경험치 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetCurrentExperienceMaster ( \u0026 experience . GetCurrentExperienceMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetCurrentExperienceMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getCurrentExperienceMaster ( ( new GetCurrentExperienceMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetCurrentExperienceMasterRequest ; import io.gs2.experience.result.GetCurrentExperienceMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetCurrentExperienceMasterResult result = client . getCurrentExperienceMaster ( new GetCurrentExperienceMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentExperienceMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetCurrentExperienceMasterResult \u003e asyncResult = null ; yield return client . GetCurrentExperienceMaster ( new Gs2 . Gs2Experience . Request . GetCurrentExperienceMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getCurrentExperienceMaster ( new Gs2Experience . GetCurrentExperienceMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_current_experience_master ( experience . GetCurrentExperienceMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_current_experience_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.get_current_experience_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentExperienceMaster 현재 활성화된 경험치 모델의 마스터 데이터를 갱신 (3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentExperienceMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentExperienceMaster ( \u0026 experience . PreUpdateCurrentExperienceMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\PreUpdateCurrentExperienceMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentExperienceMaster ( ( new PreUpdateCurrentExperienceMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.PreUpdateCurrentExperienceMasterRequest ; import io.gs2.experience.result.PreUpdateCurrentExperienceMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { PreUpdateCurrentExperienceMasterResult result = client . preUpdateCurrentExperienceMaster ( new PreUpdateCurrentExperienceMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . PreUpdateCurrentExperienceMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentExperienceMaster ( new Gs2 . Gs2Experience . Request . PreUpdateCurrentExperienceMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . preUpdateCurrentExperienceMaster ( new Gs2Experience . PreUpdateCurrentExperienceMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . pre_update_current_experience_master ( experience . PreUpdateCurrentExperienceMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.pre_update_current_experience_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'experience' ) api_result_handler = client.pre_update_current_experience_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentExperienceMaster 현재 활성화된 경험치 모델 마스터 데이터 업데이트 지정된 네임스페이스의 경험치 모델과 랭크업 임계값의 마스터 데이터를 업데이트하고 활성화(공개)합니다. 인라인 마스터 데이터용 ‘direct’ 모드와 사전에 업로드된 마스터 데이터용 ‘preUpload’ 모드, 두 가지 모드를 지원합니다. 1MB를 초과하는 마스터 데이터의 경우 3단계 업데이트 흐름(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))을 사용하세요. 업로드된 마스터 데이터는 적용 전에 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentExperienceMaster 업데이트된 현재 활성화된 경험치 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentExperienceMaster ( \u0026 experience . UpdateCurrentExperienceMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2019-01-11\\\", \\\"experienceModels\\\": [{\\\"name\\\": \\\"character_ssr\\\", \\\"metadata\\\": \\\"SSR\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 50, \\\"maxRankCap\\\": 80, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"character_sr\\\", \\\"metadata\\\": \\\"SR\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 40, \\\"maxRankCap\\\": 70, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"character_r\\\", \\\"metadata\\\": \\\"R\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 30, \\\"maxRankCap\\\": 60, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"equipment\\\", \\\"metadata\\\": \\\"EQUIPMENT\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 30, \\\"maxRankCap\\\": 50, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"EQUIPMENT\\\", \\\"values\\\": [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4200, 4400, 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, 6600, 6800, 7000, 7200, 7400, 7600, 7800, 8000, 8200, 8400, 8600, 8800, 9000, 9200, 9400, 9600, 9800]}, \\\"acquireActionRates\\\": [{\\\"name\\\": \\\"rate-0001\\\", \\\"mode\\\": \\\"big\\\", \\\"bigRates\\\": [\\\"1\\\", \\\"10\\\", \\\"100\\\", \\\"1000\\\", \\\"10000\\\", \\\"100000\\\", \\\"1000000\\\", \\\"10000000\\\", \\\"100000000\\\", \\\"1000000000\\\", \\\"10000000000\\\", \\\"100000000000\\\", \\\"1000000000000\\\", \\\"10000000000000\\\", \\\"100000000000000\\\", \\\"1000000000000000\\\", \\\"10000000000000000\\\", \\\"100000000000000000\\\", \\\"1000000000000000000\\\", \\\"10000000000000000000\\\", \\\"100000000000000000000\\\", \\\"1000000000000000000000\\\", \\\"10000000000000000000000\\\", \\\"100000000000000000000000\\\", \\\"1000000000000000000000000\\\", \\\"10000000000000000000000000\\\", \\\"100000000000000000000000000\\\"]}]}, {\\\"name\\\": \\\"skill\\\", \\\"metadata\\\": \\\"SKILL\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 10, \\\"maxRankCap\\\": 20, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"SKILL\\\", \\\"values\\\": [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700]}}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\UpdateCurrentExperienceMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e updateCurrentExperienceMaster ( ( new UpdateCurrentExperienceMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2019-01-11 \\\" , \\\" experienceModels \\\" : [{ \\\" name \\\" : \\\" character_ssr \\\" , \\\" metadata \\\" : \\\" SSR \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 50, \\\" maxRankCap \\\" : 80, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" character_sr \\\" , \\\" metadata \\\" : \\\" SR \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 40, \\\" maxRankCap \\\" : 70, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" character_r \\\" , \\\" metadata \\\" : \\\" R \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 30, \\\" maxRankCap \\\" : 60, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" equipment \\\" , \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 30, \\\" maxRankCap \\\" : 50, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\\" values \\\" : [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4200, 4400, 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, 6600, 6800, 7000, 7200, 7400, 7600, 7800, 8000, 8200, 8400, 8600, 8800, 9000, 9200, 9400, 9600, 9800]}, \\\" acquireActionRates \\\" : [{ \\\" name \\\" : \\\" rate-0001 \\\" , \\\" mode \\\" : \\\" big \\\" , \\\" bigRates \\\" : [ \\\" 1 \\\" , \\\" 10 \\\" , \\\" 100 \\\" , \\\" 1000 \\\" , \\\" 10000 \\\" , \\\" 100000 \\\" , \\\" 1000000 \\\" , \\\" 10000000 \\\" , \\\" 100000000 \\\" , \\\" 1000000000 \\\" , \\\" 10000000000 \\\" , \\\" 100000000000 \\\" , \\\" 1000000000000 \\\" , \\\" 10000000000000 \\\" , \\\" 100000000000000 \\\" , \\\" 1000000000000000 \\\" , \\\" 10000000000000000 \\\" , \\\" 100000000000000000 \\\" , \\\" 1000000000000000000 \\\" , \\\" 10000000000000000000 \\\" , \\\" 100000000000000000000 \\\" , \\\" 1000000000000000000000 \\\" , \\\" 10000000000000000000000 \\\" , \\\" 100000000000000000000000 \\\" , \\\" 1000000000000000000000000 \\\" , \\\" 10000000000000000000000000 \\\" , \\\" 100000000000000000000000000 \\\" ]}]}, { \\\" name \\\" : \\\" skill \\\" , \\\" metadata \\\" : \\\" SKILL \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 10, \\\" maxRankCap \\\" : 20, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" SKILL \\\" , \\\" values \\\" : [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700]}}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.UpdateCurrentExperienceMasterRequest ; import io.gs2.experience.result.UpdateCurrentExperienceMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { UpdateCurrentExperienceMasterResult result = client . updateCurrentExperienceMaster ( new UpdateCurrentExperienceMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2019-01-11\\\", \\\"experienceModels\\\": [{\\\"name\\\": \\\"character_ssr\\\", \\\"metadata\\\": \\\"SSR\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 50, \\\"maxRankCap\\\": 80, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"character_sr\\\", \\\"metadata\\\": \\\"SR\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 40, \\\"maxRankCap\\\": 70, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"character_r\\\", \\\"metadata\\\": \\\"R\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 30, \\\"maxRankCap\\\": 60, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"equipment\\\", \\\"metadata\\\": \\\"EQUIPMENT\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 30, \\\"maxRankCap\\\": 50, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"EQUIPMENT\\\", \\\"values\\\": [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4200, 4400, 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, 6600, 6800, 7000, 7200, 7400, 7600, 7800, 8000, 8200, 8400, 8600, 8800, 9000, 9200, 9400, 9600, 9800]}, \\\"acquireActionRates\\\": [{\\\"name\\\": \\\"rate-0001\\\", \\\"mode\\\": \\\"big\\\", \\\"bigRates\\\": [\\\"1\\\", \\\"10\\\", \\\"100\\\", \\\"1000\\\", \\\"10000\\\", \\\"100000\\\", \\\"1000000\\\", \\\"10000000\\\", \\\"100000000\\\", \\\"1000000000\\\", \\\"10000000000\\\", \\\"100000000000\\\", \\\"1000000000000\\\", \\\"10000000000000\\\", \\\"100000000000000\\\", \\\"1000000000000000\\\", \\\"10000000000000000\\\", \\\"100000000000000000\\\", \\\"1000000000000000000\\\", \\\"10000000000000000000\\\", \\\"100000000000000000000\\\", \\\"1000000000000000000000\\\", \\\"10000000000000000000000\\\", \\\"100000000000000000000000\\\", \\\"1000000000000000000000000\\\", \\\"10000000000000000000000000\\\", \\\"100000000000000000000000000\\\"]}]}, {\\\"name\\\": \\\"skill\\\", \\\"metadata\\\": \\\"SKILL\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 10, \\\"maxRankCap\\\": 20, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"SKILL\\\", \\\"values\\\": [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700]}}]}\" ) . withUploadToken ( null ) ); CurrentExperienceMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . UpdateCurrentExperienceMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentExperienceMaster ( new Gs2 . Gs2Experience . Request . UpdateCurrentExperienceMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2019-01-11\\\", \\\"experienceModels\\\": [{\\\"name\\\": \\\"character_ssr\\\", \\\"metadata\\\": \\\"SSR\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 50, \\\"maxRankCap\\\": 80, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"character_sr\\\", \\\"metadata\\\": \\\"SR\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 40, \\\"maxRankCap\\\": 70, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"character_r\\\", \\\"metadata\\\": \\\"R\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 30, \\\"maxRankCap\\\": 60, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"equipment\\\", \\\"metadata\\\": \\\"EQUIPMENT\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 30, \\\"maxRankCap\\\": 50, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"EQUIPMENT\\\", \\\"values\\\": [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4200, 4400, 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, 6600, 6800, 7000, 7200, 7400, 7600, 7800, 8000, 8200, 8400, 8600, 8800, 9000, 9200, 9400, 9600, 9800]}, \\\"acquireActionRates\\\": [{\\\"name\\\": \\\"rate-0001\\\", \\\"mode\\\": \\\"big\\\", \\\"bigRates\\\": [\\\"1\\\", \\\"10\\\", \\\"100\\\", \\\"1000\\\", \\\"10000\\\", \\\"100000\\\", \\\"1000000\\\", \\\"10000000\\\", \\\"100000000\\\", \\\"1000000000\\\", \\\"10000000000\\\", \\\"100000000000\\\", \\\"1000000000000\\\", \\\"10000000000000\\\", \\\"100000000000000\\\", \\\"1000000000000000\\\", \\\"10000000000000000\\\", \\\"100000000000000000\\\", \\\"1000000000000000000\\\", \\\"10000000000000000000\\\", \\\"100000000000000000000\\\", \\\"1000000000000000000000\\\", \\\"10000000000000000000000\\\", \\\"100000000000000000000000\\\", \\\"1000000000000000000000000\\\", \\\"10000000000000000000000000\\\", \\\"100000000000000000000000000\\\"]}]}, {\\\"name\\\": \\\"skill\\\", \\\"metadata\\\": \\\"SKILL\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 10, \\\"maxRankCap\\\": 20, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"SKILL\\\", \\\"values\\\": [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700]}}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . updateCurrentExperienceMaster ( new Gs2Experience . UpdateCurrentExperienceMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2019-01-11\\\", \\\"experienceModels\\\": [{\\\"name\\\": \\\"character_ssr\\\", \\\"metadata\\\": \\\"SSR\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 50, \\\"maxRankCap\\\": 80, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"character_sr\\\", \\\"metadata\\\": \\\"SR\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 40, \\\"maxRankCap\\\": 70, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"character_r\\\", \\\"metadata\\\": \\\"R\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 30, \\\"maxRankCap\\\": 60, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"CHARACTER\\\", \\\"values\\\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\\\"name\\\": \\\"equipment\\\", \\\"metadata\\\": \\\"EQUIPMENT\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 30, \\\"maxRankCap\\\": 50, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"EQUIPMENT\\\", \\\"values\\\": [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4200, 4400, 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, 6600, 6800, 7000, 7200, 7400, 7600, 7800, 8000, 8200, 8400, 8600, 8800, 9000, 9200, 9400, 9600, 9800]}, \\\"acquireActionRates\\\": [{\\\"name\\\": \\\"rate-0001\\\", \\\"mode\\\": \\\"big\\\", \\\"bigRates\\\": [\\\"1\\\", \\\"10\\\", \\\"100\\\", \\\"1000\\\", \\\"10000\\\", \\\"100000\\\", \\\"1000000\\\", \\\"10000000\\\", \\\"100000000\\\", \\\"1000000000\\\", \\\"10000000000\\\", \\\"100000000000\\\", \\\"1000000000000\\\", \\\"10000000000000\\\", \\\"100000000000000\\\", \\\"1000000000000000\\\", \\\"10000000000000000\\\", \\\"100000000000000000\\\", \\\"1000000000000000000\\\", \\\"10000000000000000000\\\", \\\"100000000000000000000\\\", \\\"1000000000000000000000\\\", \\\"10000000000000000000000\\\", \\\"100000000000000000000000\\\", \\\"1000000000000000000000000\\\", \\\"10000000000000000000000000\\\", \\\"100000000000000000000000000\\\"]}]}, {\\\"name\\\": \\\"skill\\\", \\\"metadata\\\": \\\"SKILL\\\", \\\"defaultExperience\\\": 0, \\\"defaultRankCap\\\": 10, \\\"maxRankCap\\\": 20, \\\"rankThreshold\\\": {\\\"metadata\\\": \\\"SKILL\\\", \\\"values\\\": [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700]}}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . update_current_experience_master ( experience . UpdateCurrentExperienceMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2019-01-11\", \"experienceModels\": [{\"name\": \"character_ssr\", \"metadata\": \"SSR\", \"defaultExperience\": 0, \"defaultRankCap\": 50, \"maxRankCap\": 80, \"rankThreshold\": {\"metadata\": \"CHARACTER\", \"values\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\"name\": \"character_sr\", \"metadata\": \"SR\", \"defaultExperience\": 0, \"defaultRankCap\": 40, \"maxRankCap\": 70, \"rankThreshold\": {\"metadata\": \"CHARACTER\", \"values\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\"name\": \"character_r\", \"metadata\": \"R\", \"defaultExperience\": 0, \"defaultRankCap\": 30, \"maxRankCap\": 60, \"rankThreshold\": {\"metadata\": \"CHARACTER\", \"values\": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, {\"name\": \"equipment\", \"metadata\": \"EQUIPMENT\", \"defaultExperience\": 0, \"defaultRankCap\": 30, \"maxRankCap\": 50, \"rankThreshold\": {\"metadata\": \"EQUIPMENT\", \"values\": [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4200, 4400, 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, 6600, 6800, 7000, 7200, 7400, 7600, 7800, 8000, 8200, 8400, 8600, 8800, 9000, 9200, 9400, 9600, 9800]}, \"acquireActionRates\": [{\"name\": \"rate-0001\", \"mode\": \"big\", \"bigRates\": [\"1\", \"10\", \"100\", \"1000\", \"10000\", \"100000\", \"1000000\", \"10000000\", \"100000000\", \"1000000000\", \"10000000000\", \"100000000000\", \"1000000000000\", \"10000000000000\", \"100000000000000\", \"1000000000000000\", \"10000000000000000\", \"100000000000000000\", \"1000000000000000000\", \"10000000000000000000\", \"100000000000000000000\", \"1000000000000000000000\", \"10000000000000000000000\", \"100000000000000000000000\", \"1000000000000000000000000\", \"10000000000000000000000000\", \"100000000000000000000000000\"]}]}, {\"name\": \"skill\", \"metadata\": \"SKILL\", \"defaultExperience\": 0, \"defaultRankCap\": 10, \"maxRankCap\": 20, \"rankThreshold\": {\"metadata\": \"SKILL\", \"values\": [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700]}}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.update_current_experience_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2019-01-11 \\\" , \\\" experienceModels \\\" : [{ \\\" name \\\" : \\\" character_ssr \\\" , \\\" metadata \\\" : \\\" SSR \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 50, \\\" maxRankCap \\\" : 80, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" character_sr \\\" , \\\" metadata \\\" : \\\" SR \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 40, \\\" maxRankCap \\\" : 70, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" character_r \\\" , \\\" metadata \\\" : \\\" R \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 30, \\\" maxRankCap \\\" : 60, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" equipment \\\" , \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 30, \\\" maxRankCap \\\" : 50, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\\" values \\\" : [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4200, 4400, 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, 6600, 6800, 7000, 7200, 7400, 7600, 7800, 8000, 8200, 8400, 8600, 8800, 9000, 9200, 9400, 9600, 9800]}, \\\" acquireActionRates \\\" : [{ \\\" name \\\" : \\\" rate-0001 \\\" , \\\" mode \\\" : \\\" big \\\" , \\\" bigRates \\\" : [ \\\" 1 \\\" , \\\" 10 \\\" , \\\" 100 \\\" , \\\" 1000 \\\" , \\\" 10000 \\\" , \\\" 100000 \\\" , \\\" 1000000 \\\" , \\\" 10000000 \\\" , \\\" 100000000 \\\" , \\\" 1000000000 \\\" , \\\" 10000000000 \\\" , \\\" 100000000000 \\\" , \\\" 1000000000000 \\\" , \\\" 10000000000000 \\\" , \\\" 100000000000000 \\\" , \\\" 1000000000000000 \\\" , \\\" 10000000000000000 \\\" , \\\" 100000000000000000 \\\" , \\\" 1000000000000000000 \\\" , \\\" 10000000000000000000 \\\" , \\\" 100000000000000000000 \\\" , \\\" 1000000000000000000000 \\\" , \\\" 10000000000000000000000 \\\" , \\\" 100000000000000000000000 \\\" , \\\" 1000000000000000000000000 \\\" , \\\" 10000000000000000000000000 \\\" , \\\" 100000000000000000000000000 \\\" ]}]}, { \\\" name \\\" : \\\" skill \\\" , \\\" metadata \\\" : \\\" SKILL \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 10, \\\" maxRankCap \\\" : 20, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" SKILL \\\" , \\\" values \\\" : [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700]}}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.update_current_experience_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2019-01-11 \\\" , \\\" experienceModels \\\" : [{ \\\" name \\\" : \\\" character_ssr \\\" , \\\" metadata \\\" : \\\" SSR \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 50, \\\" maxRankCap \\\" : 80, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" character_sr \\\" , \\\" metadata \\\" : \\\" SR \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 40, \\\" maxRankCap \\\" : 70, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" character_r \\\" , \\\" metadata \\\" : \\\" R \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 30, \\\" maxRankCap \\\" : 60, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" CHARACTER \\\" , \\\" values \\\" : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000, 6100, 6200, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7500, 7600, 7700, 7800, 7900]}}, { \\\" name \\\" : \\\" equipment \\\" , \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 30, \\\" maxRankCap \\\" : 50, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\\" values \\\" : [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4200, 4400, 4600, 4800, 5000, 5200, 5400, 5600, 5800, 6000, 6200, 6400, 6600, 6800, 7000, 7200, 7400, 7600, 7800, 8000, 8200, 8400, 8600, 8800, 9000, 9200, 9400, 9600, 9800]}, \\\" acquireActionRates \\\" : [{ \\\" name \\\" : \\\" rate-0001 \\\" , \\\" mode \\\" : \\\" big \\\" , \\\" bigRates \\\" : [ \\\" 1 \\\" , \\\" 10 \\\" , \\\" 100 \\\" , \\\" 1000 \\\" , \\\" 10000 \\\" , \\\" 100000 \\\" , \\\" 1000000 \\\" , \\\" 10000000 \\\" , \\\" 100000000 \\\" , \\\" 1000000000 \\\" , \\\" 10000000000 \\\" , \\\" 100000000000 \\\" , \\\" 1000000000000 \\\" , \\\" 10000000000000 \\\" , \\\" 100000000000000 \\\" , \\\" 1000000000000000 \\\" , \\\" 10000000000000000 \\\" , \\\" 100000000000000000 \\\" , \\\" 1000000000000000000 \\\" , \\\" 10000000000000000000 \\\" , \\\" 100000000000000000000 \\\" , \\\" 1000000000000000000000 \\\" , \\\" 10000000000000000000000 \\\" , \\\" 100000000000000000000000 \\\" , \\\" 1000000000000000000000000 \\\" , \\\" 10000000000000000000000000 \\\" , \\\" 100000000000000000000000000 \\\" ]}]}, { \\\" name \\\" : \\\" skill \\\" , \\\" metadata \\\" : \\\" SKILL \\\" , \\\" defaultExperience \\\" : 0, \\\" defaultRankCap \\\" : 10, \\\" maxRankCap \\\" : 20, \\\" rankThreshold \\\" : { \\\" metadata \\\" : \\\" SKILL \\\" , \\\" values \\\" : [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700]}}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentExperienceMasterFromGitHub 현재 활성화된 경험치 모델 마스터 데이터를 GitHub에서 업데이트 GitHub 리포지토리에서 직접 마스터 데이터를 가져와 업데이트·활성화(공개)합니다. 체크아웃 설정에는 사용할 리포지토리, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고 직접 배포하는 경우에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentExperienceMaster 업데이트된 현재 활성화된 경험치 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentExperienceMasterFromGitHub ( \u0026 experience . UpdateCurrentExperienceMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 experience . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\UpdateCurrentExperienceMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e updateCurrentExperienceMasterFromGitHub ( ( new UpdateCurrentExperienceMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.UpdateCurrentExperienceMasterFromGitHubRequest ; import io.gs2.experience.result.UpdateCurrentExperienceMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { UpdateCurrentExperienceMasterFromGitHubResult result = client . updateCurrentExperienceMasterFromGitHub ( new UpdateCurrentExperienceMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentExperienceMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . UpdateCurrentExperienceMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentExperienceMasterFromGitHub ( new Gs2 . Gs2Experience . Request . UpdateCurrentExperienceMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Experience . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . updateCurrentExperienceMasterFromGitHub ( new Gs2Experience . UpdateCurrentExperienceMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Experience . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . update_current_experience_master_from_git_hub ( experience . UpdateCurrentExperienceMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( experience . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.update_current_experience_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.update_current_experience_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeExperienceModelMasters 경험치 모델 마스터 목록 조회 이름 접두사로 필터링 가능한, 편집 가능한 경험치 모델 마스터의 페이지네이션 목록을 조회합니다. 경험치 모델 마스터는 경험치·랭크 시스템의 편집 가능한 정의입니다. 마스터에 대한 변경 사항은 CurrentExperienceMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 경험치 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 경험치 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DescribeExperienceModelMasters ( \u0026 experience . DescribeExperienceModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DescribeExperienceModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e describeExperienceModelMasters ( ( new DescribeExperienceModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DescribeExperienceModelMastersRequest ; import io.gs2.experience.result.DescribeExperienceModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DescribeExperienceModelMastersResult result = client . describeExperienceModelMasters ( new DescribeExperienceModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List ExperienceModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DescribeExperienceModelMastersResult \u003e asyncResult = null ; yield return client . DescribeExperienceModelMasters ( new Gs2 . Gs2Experience . Request . DescribeExperienceModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . describeExperienceModelMasters ( new Gs2Experience . DescribeExperienceModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . describe_experience_model_masters ( experience . DescribeExperienceModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.describe_experience_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'experience' ) api_result_handler = client.describe_experience_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createExperienceModelMaster 경험치 모델 마스터 신규 생성 새로운 편집 가능한 경험치 모델 마스터 정의를 생성합니다. 경험치·랭크 시스템의 구성을 정의합니다: defaultExperience(초기 경험치), defaultRankCap과 maxRankCap(초기 및 최대 랭크 캡), rankThresholdName(각 랭크업에 필요한 누적 경험치를 정의하는 임계값 마스터에 대한 참조), acquireActionRates(랭크에 따라 입수 액션에 적용되는 배율). 변경 사항은 CurrentExperienceMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultExperience long 0 0 ~ 9223372036854775805 경험치 초기값 신규 생성된 스테이터스에 할당되는 경험치입니다. 일반적으로 플레이어가 진행의 처음부터 시작하도록 0으로 설정됩니다. 초기 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 결정됩니다. defaultRankCap long  0 ~ 9223372036854775805 랭크 캡 초기값 신규 생성된 스테이터스가 도달할 수 있는 기본 최대 랭크입니다. 이 랭크의 임계값을 초과한 경험치는 폐기되거나 오버플로 스크립트가 트리거됩니다. 랭크 캡은 한계돌파 등의 조작을 통해 스테이터스별로 maxRankCap까지 인상할 수 있습니다. maxRankCap long  0 ~ 9223372036854775805 랭크 캡의 최댓값 랭크 캡의 절대적인 상한입니다. 랭크 캡 증가 조작(한계돌파 등)을 수행하더라도 랭크 캡은 이 값을 초과할 수 없습니다. defaultRankCap 이상의 값이어야 합니다. rankThresholdName string  ~ 128자 랭크업 임계값 이름 랭크업 임계값 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 목록 스테이터스의 랭크를 참조로 사용할 때 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 각 테이블은 랭크와 배율을 매핑하여, 동일한 액션에서도 더 높은 랭크의 캐릭터가 더 많은 보상을 받는 구조를 구현할 수 있습니다. Result 타입 설명 item ExperienceModelMaster 생성한 경험치 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . CreateExperienceModelMaster ( \u0026 experience . CreateExperienceModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"experience-model-0001\" ), Description : nil , Metadata : nil , DefaultExperience : nil , DefaultRankCap : pointy . Int64 ( 50 ), MaxRankCap : pointy . Int64 ( 50 ), RankThresholdName : pointy . String ( \"threshold-0001\" ), AcquireActionRates : [] experience . AcquireActionRate { experience . AcquireActionRate { Name : pointy . String ( \"rate-0001\" ), Rates : [] * float64 { pointy . Float64 ( 1.0 ), pointy . Float64 ( 1.5 ), pointy . Float64 ( 2.0 ), }, }, experience . AcquireActionRate { Name : pointy . String ( \"rate-0002\" ), Rates : [] * float64 { pointy . Float64 ( 10.0 ), pointy . Float64 ( 15.5 ), pointy . Float64 ( 20.0 ), }, }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\CreateExperienceModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e createExperienceModelMaster ( ( new CreateExperienceModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"experience-model-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withDefaultExperience ( null ) -\u003e withDefaultRankCap ( 50 ) -\u003e withMaxRankCap ( 50 ) -\u003e withRankThresholdName ( \"threshold-0001\" ) -\u003e withAcquireActionRates ([ ( new \\Gs2\\Experience\\Model\\AcquireActionRate ()) -\u003e withName ( \"rate-0001\" ) -\u003e withRates ([ 1.0 , 1.5 , 2.0 , ]), ( new \\Gs2\\Experience\\Model\\AcquireActionRate ()) -\u003e withName ( \"rate-0002\" ) -\u003e withRates ([ 10.0 , 15.5 , 20.0 , ]), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.CreateExperienceModelMasterRequest ; import io.gs2.experience.result.CreateExperienceModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { CreateExperienceModelMasterResult result = client . createExperienceModelMaster ( new CreateExperienceModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"experience-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDefaultExperience ( null ) . withDefaultRankCap ( 50L ) . withMaxRankCap ( 50L ) . withRankThresholdName ( \"threshold-0001\" ) . withAcquireActionRates ( Arrays . asList ( new io . gs2 . experience . model . AcquireActionRate () . withName ( \"rate-0001\" ) . withRates ( Arrays . asList ( 1 . 0 , 1 . 5 , 2 . 0 )), new io . gs2 . experience . model . AcquireActionRate () . withName ( \"rate-0002\" ) . withRates ( Arrays . asList ( 10 . 0 , 15 . 5 , 20 . 0 )) )) ); ExperienceModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . CreateExperienceModelMasterResult \u003e asyncResult = null ; yield return client . CreateExperienceModelMaster ( new Gs2 . Gs2Experience . Request . CreateExperienceModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"experience-model-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithDefaultExperience ( null ) . WithDefaultRankCap ( 50L ) . WithMaxRankCap ( 50L ) . WithRankThresholdName ( \"threshold-0001\" ) . WithAcquireActionRates ( new Gs2 . Gs2Experience . Model . AcquireActionRate [] { new Gs2 . Gs2Experience . Model . AcquireActionRate () . WithName ( \"rate-0001\" ) . WithRates ( new double [] { 1.0 , 1.5 , 2.0 , }), new Gs2 . Gs2Experience . Model . AcquireActionRate () . WithName ( \"rate-0002\" ) . WithRates ( new double [] { 10.0 , 15.5 , 20.0 , }), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . createExperienceModelMaster ( new Gs2Experience . CreateExperienceModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"experience-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDefaultExperience ( null ) . withDefaultRankCap ( 50 ) . withMaxRankCap ( 50 ) . withRankThresholdName ( \"threshold-0001\" ) . withAcquireActionRates ([ new Gs2Experience . model . AcquireActionRate () . withName ( \"rate-0001\" ) . withRates ([ 1.0 , 1.5 , 2.0 , ]), new Gs2Experience . model . AcquireActionRate () . withName ( \"rate-0002\" ) . withRates ([ 10.0 , 15.5 , 20.0 , ]), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . create_experience_model_master ( experience . CreateExperienceModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'experience-model-0001' ) . with_description ( None ) . with_metadata ( None ) . with_default_experience ( None ) . with_default_rank_cap ( 50 ) . with_max_rank_cap ( 50 ) . with_rank_threshold_name ( 'threshold-0001' ) . with_acquire_action_rates ([ experience . AcquireActionRate () . with_name ( 'rate-0001' ) . with_rates ([ 1.0 , 1.5 , 2.0 , ]), experience . AcquireActionRate () . with_name ( 'rate-0002' ) . with_rates ([ 10.0 , 15.5 , 20.0 , ]), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.create_experience_model_master ({ namespaceName = \"namespace-0001\" , name = \"experience-model-0001\" , description = nil , metadata = nil , defaultExperience = nil , defaultRankCap = 50 , maxRankCap = 50 , rankThresholdName = \"threshold-0001\" , acquireActionRates = { { name = \"rate-0001\" , rates = { 1.0 , 1.5 , 2.0 }, }, { name = \"rate-0002\" , rates = { 10.0 , 15.5 , 20.0 }, } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.create_experience_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"experience-model-0001\" , description = nil , metadata = nil , defaultExperience = nil , defaultRankCap = 50 , maxRankCap = 50 , rankThresholdName = \"threshold-0001\" , acquireActionRates = { { name = \"rate-0001\" , rates = { 1.0 , 1.5 , 2.0 }, }, { name = \"rate-0002\" , rates = { 10.0 , 15.5 , 20.0 }, } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getExperienceModelMaster 경험치 모델 마스터 조회 이름을 지정하여 특정 편집 가능한 경험치 모델 마스터의 상세 정보를 조회합니다. 활성화 전 마스터 정의를 조회·편집하는 데 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ExperienceModelMaster 경험치 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetExperienceModelMaster ( \u0026 experience . GetExperienceModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ExperienceName : pointy . String ( \"experience-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetExperienceModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getExperienceModelMaster ( ( new GetExperienceModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withExperienceName ( \"experience-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetExperienceModelMasterRequest ; import io.gs2.experience.result.GetExperienceModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetExperienceModelMasterResult result = client . getExperienceModelMaster ( new GetExperienceModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"experience-model-0001\" ) ); ExperienceModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetExperienceModelMasterResult \u003e asyncResult = null ; yield return client . GetExperienceModelMaster ( new Gs2 . Gs2Experience . Request . GetExperienceModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithExperienceName ( \"experience-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getExperienceModelMaster ( new Gs2Experience . GetExperienceModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"experience-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_experience_model_master ( experience . GetExperienceModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_experience_name ( 'experience-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_experience_model_master ({ namespaceName = \"namespace-0001\" , experienceName = \"experience-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.get_experience_model_master_async ({ namespaceName = \"namespace-0001\" , experienceName = \"experience-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateExperienceModelMaster 경험치 모델 마스터 업데이트 기존 경험치 모델 마스터의 설명, 메타데이터, 기본 경험치, 기본/최대 랭크 캡, 랭크업 임계값 참조, 입수 액션 배율을 업데이트합니다. 경험치 모델 이름은 생성 후 변경할 수 없습니다. 변경 사항은 CurrentExperienceMaster API로 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultExperience long 0 0 ~ 9223372036854775805 경험치 초기값 신규 생성된 스테이터스에 할당되는 경험치입니다. 일반적으로 플레이어가 진행의 처음부터 시작하도록 0으로 설정됩니다. 초기 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 결정됩니다. defaultRankCap long  0 ~ 9223372036854775805 랭크 캡 초기값 신규 생성된 스테이터스가 도달할 수 있는 기본 최대 랭크입니다. 이 랭크의 임계값을 초과한 경험치는 폐기되거나 오버플로 스크립트가 트리거됩니다. 랭크 캡은 한계돌파 등의 조작을 통해 스테이터스별로 maxRankCap까지 인상할 수 있습니다. maxRankCap long  0 ~ 9223372036854775805 랭크 캡의 최댓값 랭크 캡의 절대적인 상한입니다. 랭크 캡 증가 조작(한계돌파 등)을 수행하더라도 랭크 캡은 이 값을 초과할 수 없습니다. defaultRankCap 이상의 값이어야 합니다. rankThresholdName string  ~ 128자 랭크업 임계값 이름 랭크업 임계값 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 목록 스테이터스의 랭크를 참조로 사용할 때 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 각 테이블은 랭크와 배율을 매핑하여, 동일한 액션에서도 더 높은 랭크의 캐릭터가 더 많은 보상을 받는 구조를 구현할 수 있습니다. Result 타입 설명 item ExperienceModelMaster 업데이트한 경험치 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . UpdateExperienceModelMaster ( \u0026 experience . UpdateExperienceModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ExperienceName : pointy . String ( \"experience-model-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), DefaultExperience : pointy . Int64 ( 100 ), DefaultRankCap : pointy . Int64 ( 60 ), MaxRankCap : pointy . Int64 ( 80 ), RankThresholdName : pointy . String ( \"threshold-0002\" ), AcquireActionRates : [] experience . AcquireActionRate { experience . AcquireActionRate { Name : pointy . String ( \"rate-0001\" ), Mode : pointy . String ( \"big\" ), BigRates : [] * string { pointy . String ( \"100000000000000\" ), pointy . String ( \"10000000000000000000000000000\" ), pointy . String ( \"1000000000000000000000000000000000000000000\" ), }, }, experience . AcquireActionRate { Name : pointy . String ( \"rate-0002\" ), Mode : pointy . String ( \"big\" ), BigRates : [] * string { pointy . String ( \"100000000000000\" ), pointy . String ( \"10000000000000000000000000000\" ), pointy . String ( \"1000000000000000000000000000000000000000000\" ), }, }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\UpdateExperienceModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e updateExperienceModelMaster ( ( new UpdateExperienceModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withExperienceName ( \"experience-model-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) -\u003e withDefaultExperience ( 100 ) -\u003e withDefaultRankCap ( 60 ) -\u003e withMaxRankCap ( 80 ) -\u003e withRankThresholdName ( \"threshold-0002\" ) -\u003e withAcquireActionRates ([ ( new \\Gs2\\Experience\\Model\\AcquireActionRate ()) -\u003e withName ( \"rate-0001\" ) -\u003e withMode ( \"big\" ) -\u003e withBigRates ([ \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , ]), ( new \\Gs2\\Experience\\Model\\AcquireActionRate ()) -\u003e withName ( \"rate-0002\" ) -\u003e withMode ( \"big\" ) -\u003e withBigRates ([ \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , ]), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.UpdateExperienceModelMasterRequest ; import io.gs2.experience.result.UpdateExperienceModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { UpdateExperienceModelMasterResult result = client . updateExperienceModelMaster ( new UpdateExperienceModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"experience-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withDefaultExperience ( 100L ) . withDefaultRankCap ( 60L ) . withMaxRankCap ( 80L ) . withRankThresholdName ( \"threshold-0002\" ) . withAcquireActionRates ( Arrays . asList ( new io . gs2 . experience . model . AcquireActionRate () . withName ( \"rate-0001\" ) . withMode ( \"big\" ) . withBigRates ( Arrays . asList ( \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" )), new io . gs2 . experience . model . AcquireActionRate () . withName ( \"rate-0002\" ) . withMode ( \"big\" ) . withBigRates ( Arrays . asList ( \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" )) )) ); ExperienceModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . UpdateExperienceModelMasterResult \u003e asyncResult = null ; yield return client . UpdateExperienceModelMaster ( new Gs2 . Gs2Experience . Request . UpdateExperienceModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithExperienceName ( \"experience-model-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . WithDefaultExperience ( 100L ) . WithDefaultRankCap ( 60L ) . WithMaxRankCap ( 80L ) . WithRankThresholdName ( \"threshold-0002\" ) . WithAcquireActionRates ( new Gs2 . Gs2Experience . Model . AcquireActionRate [] { new Gs2 . Gs2Experience . Model . AcquireActionRate () . WithName ( \"rate-0001\" ) . WithMode ( \"big\" ) . WithBigRates ( new string [] { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , }), new Gs2 . Gs2Experience . Model . AcquireActionRate () . WithName ( \"rate-0002\" ) . WithMode ( \"big\" ) . WithBigRates ( new string [] { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , }), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . updateExperienceModelMaster ( new Gs2Experience . UpdateExperienceModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"experience-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withDefaultExperience ( 100 ) . withDefaultRankCap ( 60 ) . withMaxRankCap ( 80 ) . withRankThresholdName ( \"threshold-0002\" ) . withAcquireActionRates ([ new Gs2Experience . model . AcquireActionRate () . withName ( \"rate-0001\" ) . withMode ( \"big\" ) . withBigRates ([ \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , ]), new Gs2Experience . model . AcquireActionRate () . withName ( \"rate-0002\" ) . withMode ( \"big\" ) . withBigRates ([ \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , ]), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . update_experience_model_master ( experience . UpdateExperienceModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_experience_name ( 'experience-model-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"hoge\": \"fuga\"}' ) . with_default_experience ( 100 ) . with_default_rank_cap ( 60 ) . with_max_rank_cap ( 80 ) . with_rank_threshold_name ( 'threshold-0002' ) . with_acquire_action_rates ([ experience . AcquireActionRate () . with_name ( 'rate-0001' ) . with_mode ( 'big' ) . with_big_rates ([ '100000000000000' , '10000000000000000000000000000' , '1000000000000000000000000000000000000000000' , ]), experience . AcquireActionRate () . with_name ( 'rate-0002' ) . with_mode ( 'big' ) . with_big_rates ([ '100000000000000' , '10000000000000000000000000000' , '1000000000000000000000000000000000000000000' , ]), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.update_experience_model_master ({ namespaceName = \"namespace-0001\" , experienceName = \"experience-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , defaultExperience = 100 , defaultRankCap = 60 , maxRankCap = 80 , rankThresholdName = \"threshold-0002\" , acquireActionRates = { { name = \"rate-0001\" , mode = \"big\" , bigRates = { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" }, }, { name = \"rate-0002\" , mode = \"big\" , bigRates = { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" }, } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.update_experience_model_master_async ({ namespaceName = \"namespace-0001\" , experienceName = \"experience-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , defaultExperience = 100 , defaultRankCap = 60 , maxRankCap = 80 , rankThresholdName = \"threshold-0002\" , acquireActionRates = { { name = \"rate-0001\" , mode = \"big\" , bigRates = { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" }, }, { name = \"rate-0002\" , mode = \"big\" , bigRates = { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" }, } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteExperienceModelMaster 경험치 모델 마스터 삭제 편집 가능한 경험치 모델 마스터 정의를 삭제합니다. 마스터 데이터에만 영향을 미치며, 현재 활성화(공개)되어 있는 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. experienceName string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ExperienceModelMaster 삭제한 경험치 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DeleteExperienceModelMaster ( \u0026 experience . DeleteExperienceModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ExperienceName : pointy . String ( \"experience-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DeleteExperienceModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e deleteExperienceModelMaster ( ( new DeleteExperienceModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withExperienceName ( \"experience-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DeleteExperienceModelMasterRequest ; import io.gs2.experience.result.DeleteExperienceModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DeleteExperienceModelMasterResult result = client . deleteExperienceModelMaster ( new DeleteExperienceModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"experience-model-0001\" ) ); ExperienceModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DeleteExperienceModelMasterResult \u003e asyncResult = null ; yield return client . DeleteExperienceModelMaster ( new Gs2 . Gs2Experience . Request . DeleteExperienceModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithExperienceName ( \"experience-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . deleteExperienceModelMaster ( new Gs2Experience . DeleteExperienceModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withExperienceName ( \"experience-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . delete_experience_model_master ( experience . DeleteExperienceModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_experience_name ( 'experience-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.delete_experience_model_master ({ namespaceName = \"namespace-0001\" , experienceName = \"experience-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.delete_experience_model_master_async ({ namespaceName = \"namespace-0001\" , experienceName = \"experience-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeThresholdMasters 랭크업 임계값 마스터 목록 조회 이름 접두사로 필터링 가능한, 편집 가능한 랭크업 임계값 마스터의 페이지네이션 목록을 조회합니다. 랭크업 임계값 마스터는 각 랭크업에 필요한 누적 경험치를 정의합니다. rankThresholdName 필드를 통해 경험치 모델 마스터에서 참조됩니다. 마스터에 대한 변경 사항은 CurrentExperienceMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 랭크업 임계값 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 랭크업 임계값 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DescribeThresholdMasters ( \u0026 experience . DescribeThresholdMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DescribeThresholdMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e describeThresholdMasters ( ( new DescribeThresholdMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DescribeThresholdMastersRequest ; import io.gs2.experience.result.DescribeThresholdMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DescribeThresholdMastersResult result = client . describeThresholdMasters ( new DescribeThresholdMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List ThresholdMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DescribeThresholdMastersResult \u003e asyncResult = null ; yield return client . DescribeThresholdMasters ( new Gs2 . Gs2Experience . Request . DescribeThresholdMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . describeThresholdMasters ( new Gs2Experience . DescribeThresholdMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . describe_threshold_masters ( experience . DescribeThresholdMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.describe_threshold_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'experience' ) api_result_handler = client.describe_threshold_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createThresholdMaster 랭크업 임계값 마스터 신규 생성 이름과 임계값 배열을 가진 새로운 랭크업 임계값 마스터 정의를 생성합니다. values 배열은 각 랭크업에 필요한 누적 경험치를 정의합니다. 예를 들어 [100, 300, 600]인 경우, 랭크1에는 경험치 100, 랭크2에는 300, 랭크3에는 600이 필요합니다. 값의 개수가 도달 가능한 최대 랭크를 결정합니다. 변경 사항은 CurrentExperienceMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 랭크업 임계값 이름 랭크업 임계값 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. values List  1 ~ 10000 items 랭크업 경험치 임계값 목록 랭크 진행을 정의하는 누적 경험치의 순서가 있는 배열입니다. 항목 수가 도달 가능한 최대 랭크를 결정합니다. 예를 들어 [10, 20]인 경우, 경험치 0 9에서 랭크1, 10 19에서 랭크2, 20 이상에서 랭크3(그 이상의 경험치 획득은 불가)이 됩니다. Result 타입 설명 item ThresholdMaster 생성한 랭크업 임계값 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . CreateThresholdMaster ( \u0026 experience . CreateThresholdMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"threshold-0001\" ), Description : nil , Metadata : nil , Values : [] * int64 { pointy . Int64 ( 100 ), pointy . Int64 ( 200 ), pointy . Int64 ( 300 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\CreateThresholdMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e createThresholdMaster ( ( new CreateThresholdMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"threshold-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withValues ([ 100 , 200 , 300 , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.CreateThresholdMasterRequest ; import io.gs2.experience.result.CreateThresholdMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { CreateThresholdMasterResult result = client . createThresholdMaster ( new CreateThresholdMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"threshold-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withValues ( Arrays . asList ( 100L , 200L , 300L )) ); ThresholdMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . CreateThresholdMasterResult \u003e asyncResult = null ; yield return client . CreateThresholdMaster ( new Gs2 . Gs2Experience . Request . CreateThresholdMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"threshold-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithValues ( new long [] { 100L , 200L , 300L , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . createThresholdMaster ( new Gs2Experience . CreateThresholdMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"threshold-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withValues ([ 100 , 200 , 300 , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . create_threshold_master ( experience . CreateThresholdMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'threshold-0001' ) . with_description ( None ) . with_metadata ( None ) . with_values ([ 100 , 200 , 300 , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.create_threshold_master ({ namespaceName = \"namespace-0001\" , name = \"threshold-0001\" , description = nil , metadata = nil , values = { 100 , 200 , 300 }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.create_threshold_master_async ({ namespaceName = \"namespace-0001\" , name = \"threshold-0001\" , description = nil , metadata = nil , values = { 100 , 200 , 300 }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getThresholdMaster 랭크업 임계값 마스터 조회 이름을 지정하여 특정 편집 가능한 랭크업 임계값 마스터의 상세 정보를 조회합니다. 각 랭크업에 필요한 누적 경험치를 정의하는 임계값 배열을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. thresholdName string  ~ 128자 랭크업 임계값 이름 랭크업 임계값 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ThresholdMaster 랭크업 임계값 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . GetThresholdMaster ( \u0026 experience . GetThresholdMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ThresholdName : pointy . String ( \"threshold-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\GetThresholdMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e getThresholdMaster ( ( new GetThresholdMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withThresholdName ( \"threshold-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.GetThresholdMasterRequest ; import io.gs2.experience.result.GetThresholdMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { GetThresholdMasterResult result = client . getThresholdMaster ( new GetThresholdMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withThresholdName ( \"threshold-0001\" ) ); ThresholdMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . GetThresholdMasterResult \u003e asyncResult = null ; yield return client . GetThresholdMaster ( new Gs2 . Gs2Experience . Request . GetThresholdMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithThresholdName ( \"threshold-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . getThresholdMaster ( new Gs2Experience . GetThresholdMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withThresholdName ( \"threshold-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . get_threshold_master ( experience . GetThresholdMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_threshold_name ( 'threshold-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.get_threshold_master ({ namespaceName = \"namespace-0001\" , thresholdName = \"threshold-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.get_threshold_master_async ({ namespaceName = \"namespace-0001\" , thresholdName = \"threshold-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateThresholdMaster 랭크업 임계값 마스터 업데이트 기존 랭크업 임계값 마스터의 설명, 메타데이터, 임계값을 업데이트합니다. 임계값 이름은 생성 후 변경할 수 없습니다. 변경 사항은 CurrentExperienceMaster API로 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. thresholdName string  ~ 128자 랭크업 임계값 이름 랭크업 임계값 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. values List  1 ~ 10000 items 랭크업 경험치 임계값 목록 랭크 진행을 정의하는 누적 경험치의 순서가 있는 배열입니다. 항목 수가 도달 가능한 최대 랭크를 결정합니다. 예를 들어 [10, 20]인 경우, 경험치 0 9에서 랭크1, 10 19에서 랭크2, 20 이상에서 랭크3(그 이상의 경험치 획득은 불가)이 됩니다. Result 타입 설명 item ThresholdMaster 업데이트한 랭크업 임계값 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . UpdateThresholdMaster ( \u0026 experience . UpdateThresholdMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ThresholdName : pointy . String ( \"threshold-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"fuga\\\": \\\"piyo\\\"}\" ), Values : [] * int64 { pointy . Int64 ( 1100 ), pointy . Int64 ( 1200 ), pointy . Int64 ( 1300 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\UpdateThresholdMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e updateThresholdMaster ( ( new UpdateThresholdMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withThresholdName ( \"threshold-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" fuga \\\" : \\\" piyo \\\" }\" ) -\u003e withValues ([ 1100 , 1200 , 1300 , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.UpdateThresholdMasterRequest ; import io.gs2.experience.result.UpdateThresholdMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { UpdateThresholdMasterResult result = client . updateThresholdMaster ( new UpdateThresholdMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withThresholdName ( \"threshold-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"fuga\\\": \\\"piyo\\\"}\" ) . withValues ( Arrays . asList ( 1100L , 1200L , 1300L )) ); ThresholdMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . UpdateThresholdMasterResult \u003e asyncResult = null ; yield return client . UpdateThresholdMaster ( new Gs2 . Gs2Experience . Request . UpdateThresholdMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithThresholdName ( \"threshold-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"fuga\\\": \\\"piyo\\\"}\" ) . WithValues ( new long [] { 1100L , 1200L , 1300L , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . updateThresholdMaster ( new Gs2Experience . UpdateThresholdMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withThresholdName ( \"threshold-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"fuga\\\": \\\"piyo\\\"}\" ) . withValues ([ 1100 , 1200 , 1300 , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . update_threshold_master ( experience . UpdateThresholdMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_threshold_name ( 'threshold-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"fuga\": \"piyo\"}' ) . with_values ([ 1100 , 1200 , 1300 , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.update_threshold_master ({ namespaceName = \"namespace-0001\" , thresholdName = \"threshold-0001\" , description = \"description1\" , metadata = \"{ \\\" fuga \\\" : \\\" piyo \\\" }\" , values = { 1100 , 1200 , 1300 }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.update_threshold_master_async ({ namespaceName = \"namespace-0001\" , thresholdName = \"threshold-0001\" , description = \"description1\" , metadata = \"{ \\\" fuga \\\" : \\\" piyo \\\" }\" , values = { 1100 , 1200 , 1300 }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteThresholdMaster 랭크업 임계값 마스터 삭제 편집 가능한 랭크업 임계값 마스터 정의를 삭제합니다. 마스터 데이터에만 영향을 미치며, 현재 활성화(공개)되어 있는 임계값은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. thresholdName string  ~ 128자 랭크업 임계값 이름 랭크업 임계값 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ThresholdMaster 삭제한 랭크업 임계값 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/experience\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := experience . Gs2ExperienceRestClient { Session : \u0026 session , } result , err := client . DeleteThresholdMaster ( \u0026 experience . DeleteThresholdMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ThresholdName : pointy . String ( \"threshold-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Experience\\Gs2ExperienceRestClient ; use Gs2\\Experience\\Request\\DeleteThresholdMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ExperienceRestClient ( $session ); try { $result = $client -\u003e deleteThresholdMaster ( ( new DeleteThresholdMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withThresholdName ( \"threshold-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.experience.rest.Gs2ExperienceRestClient ; import io.gs2.experience.request.DeleteThresholdMasterRequest ; import io.gs2.experience.result.DeleteThresholdMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ExperienceRestClient client = new Gs2ExperienceRestClient ( session ); try { DeleteThresholdMasterResult result = client . deleteThresholdMaster ( new DeleteThresholdMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withThresholdName ( \"threshold-0001\" ) ); ThresholdMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ExperienceRestClient ( session ); AsyncResult Gs2 . Gs2Experience . Result . DeleteThresholdMasterResult \u003e asyncResult = null ; yield return client . DeleteThresholdMaster ( new Gs2 . Gs2Experience . Request . DeleteThresholdMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithThresholdName ( \"threshold-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Experience from '@/gs2/experience' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Experience . Gs2ExperienceRestClient ( session ); try { const result = await client . deleteThresholdMaster ( new Gs2Experience . DeleteThresholdMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withThresholdName ( \"threshold-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import experience session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = experience . Gs2ExperienceRestClient ( session ) try : result = client . delete_threshold_master ( experience . DeleteThresholdMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_threshold_name ( 'threshold-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'experience' ) api_result = client.delete_threshold_master ({ namespaceName = \"namespace-0001\" , thresholdName = \"threshold-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'experience' ) api_result_handler = client.delete_threshold_master_async ({ namespaceName = \"namespace-0001\" , thresholdName = \"threshold-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Experience SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Experience SDK API 레퍼런스","url":"/ko/api_reference/experience/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 편성 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. updateMoldScript ScriptSetting 폼 저장 영역의 캐파시티를 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updateMold updateFormScript ScriptSetting 폼을 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updateForm updatePropertyFormScript ScriptSetting 프로퍼티 폼을 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updatePropertyForm logSetting LogSetting 로그 출력 설정 편성 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 폼 업데이트, 저장 영역 캐파시티 변경, 프로퍼티 폼 변경의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Mold 폼 저장 영역 게임 플레이어가 편성한 정보를 보유하는 엔티티입니다. 편성 정보(Form)는 폼 저장 영역(Mold)마다 여러 개 보유할 수 있으며, 몇 개까지 보유할 수 있는지에 대한 캐파시티를 게임 플레이어 × 폼 저장 영역마다 개별적으로 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 moldId string ※ ~ 1024자 폼 저장 영역 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Form 폼 폼은 편성 상태를 나타내는 엔티티입니다. 편성 가능한 영역으로 슬롯 을 정의할 수 있습니다. 무기·방어구라면 「오른손」「왼손」「몸통」「팔」과 같은 부위를 슬롯으로 하고, 파티라면 「전위」「중위」「후위」와 같은 포지션을 슬롯으로 표현할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 formId string ※ ~ 1024자 폼 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 이름 이 폼이 속한 저장 영역 모델의 이름입니다. 이 폼 인스턴스에 적용되는 폼 모델(슬롯 구성)을 식별합니다. index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. slots List 0 ~ 10 items 슬롯 목록 이 폼의 현재 슬롯 할당입니다. 각 항목은 폼 모델에서 정의된 슬롯에 대응하며, 해당 포지션에 할당된 리소스의 프로퍼티 ID를 보유합니다. 슬롯 이름은 폼 모델에서 정의된 것과 일치해야 합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 PropertyForm 프로퍼티 폼 프로퍼티 폼은 편성 상태를 나타내는 엔티티입니다. Mold / Form과의 차이점은, 슬롯 수를 정의하고 각 슬롯에 편성을 기록하는 것이 Mold / Form이며, 보유하고 있는 장비에 스킬을 설정하는 것처럼 수를 사전에 정하기 어려운 편성을 표현할 때 사용하는 것이 프로퍼티 폼입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 formId string ※ ~ 1024자 프로퍼티 폼 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID name string  ~ 128자 프로퍼티 폼 이름 이 프로퍼티 폼의 슬롯 구성을 정의하는 프로퍼티 폼 모델의 이름입니다. 할당 가능한 슬롯을 결정합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. slots List 0 ~ 10 items 슬롯 목록 이 프로퍼티 폼의 현재 슬롯 할당입니다. 각 항목은 프로퍼티 폼 모델에서 정의된 슬롯에 대응합니다. 예를 들어 프로퍼티 폼이 장비의 스킬 설정을 나타내는 경우, 각 슬롯은 서로 다른 스킬 할당을 보유합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 FormModel 폼 모델 폼 모델은 편성 상태를 나타내는 엔티티입니다. 편성 가능한 영역으로 슬롯 을 정의할 수 있습니다. 무기·방어구라면 「오른손」「왼손」「몸통」「팔」과 같은 부위를 슬롯으로 하고, 파티라면 「전위」「중위」「후위」와 같은 포지션을 슬롯으로 표현할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 formModelId string ※ ~ 1024자 폼 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 리스트 이 폼을 구성하는 슬롯 정의의 순서가 있는 리스트입니다. 각 슬롯은 할당 가능한 포지션을 나타내며, 슬롯명은 폼 내에서 고유해야 합니다. 장비에서는 “weapon”, “armor”, “accessory\"와 같은 슬롯, 파티에서는 “position_1”, “position_2\"와 같은 슬롯을 생각할 수 있습니다. MoldModel 폼 저장 영역 모델 폼 저장 영역 모델은 파티 편성이라면 「불 속성 파티」「물 속성 파티」와 같은 형태로 저장하는 것을 상정하고 있습니다. 저장할 수 있는 영역의 수는 제한할 수 있으며, 개별적으로 확장할 수도 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 moldModelId string ※ ~ 1024자 폼 저장 영역 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialMaxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 초기 캐파시티 이 저장 영역에서 각 플레이어가 이용할 수 있는 기본 폼 저장 슬롯 수입니다. 예를 들어 3으로 설정하면 플레이어는 초기 상태에서 최대 3개의 서로 다른 편성(예: 「불 속성 파티」「물 속성 파티」「바람 속성 파티」)을 저장할 수 있습니다. 플레이어별로 maxCapacity까지 확장할 수 있습니다. maxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 최대 캐파시티 이 저장 영역에서 플레이어별 폼 저장 슬롯 수의 절대적인 상한입니다. 캐파시티 확장 조작을 수행하더라도 캐파시티는 이 값을 초과할 수 없습니다. initialMaxCapacity 이상의 값이어야 합니다. formModel FormModel  폼 모델 PropertyFormModel 프로퍼티 폼 모델 프로퍼티 폼 모델은 편성 상태를 나타내는 엔티티입니다. Mold / Form과의 차이점은, 슬롯 수를 정의하고 각 슬롯에 편성을 기록하는 것이 Mold / Form이며, 보유하고 있는 장비에 스킬을 설정하는 것처럼 수를 사전에 정하기 어려운 편성을 표현할 때 사용하는 것이 프로퍼티 폼 모델입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 propertyFormModelId string ※ ~ 1024자 프로퍼티 폼 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 목록 이 프로퍼티 폼의 슬롯 정의를 순서대로 나열한 목록입니다. 캐파시티에 의해 폼 수가 제한되는 Mold/Form과 달리, 프로퍼티 폼은 프로퍼티 ID로 식별되며 보유하는 리소스마다 존재할 수 있습니다. 슬롯 이름은 폼 내에서 고유해야 합니다. SlotModel 슬롯 모델 폼 모델 내의 하나의 슬롯을 정의합니다. 슬롯은 게임 리소스(아이템, 캐릭터, 장비 등)를 배치할 수 있는 할당 가능한 포지션을 나타냅니다. 프로퍼티 정규 표현식에 의해 슬롯에 설정 가능한 값이 검증됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 슬롯 모델명 폼 모델 내에서 이 슬롯을 고유하게 식별하는 이름입니다. 장비 폼에서는 “right_hand”, “body\"와 같은 이름이, 파티 폼에서는 “vanguard”, “rear_guard\"와 같은 이름이 일반적으로 사용됩니다. propertyRegex string “.*” ~ 512자 프로퍼티로 설정 가능한 값의 정규 표현식 이 슬롯에 할당 가능한 프로퍼티 ID 값을 검증하는 정규 표현식 패턴입니다. 예를 들어 특정 GS2-Inventory 아이템 GRN이나 GS2-Dictionary 엔트리 GRN으로 제한할 수 있습니다. 기본값은 “.*“이며 임의의 값을 허용합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Slot 슬롯 폼 내의 하나의 슬롯의 실제 할당 상태를 나타냅니다. 각 슬롯은 플레이어가 해당 포지션에 배치한 게임 리소스(GS2-Inventory의 아이템 세트나 GS2-Dictionary의 엔트리 등)를 참조하는 프로퍼티 ID를 보유합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 슬롯 모델명 폼 모델 내에서 이 슬롯을 고유하게 식별하는 이름입니다. 장비 폼에서는 “right_hand”, “body\"와 같은 이름이, 파티 폼에서는 “vanguard”, “rear_guard\"와 같은 이름이 일반적으로 사용됩니다. propertyId string ~ 1024자 프로퍼티 ID 이 슬롯에 할당된 게임 리소스를 참조하는 개발자 정의 식별자입니다. 일반적으로 GS2-Inventory의 아이템 세트 GRN, GS2-Dictionary의 엔트리 GRN, 또는 기타 리소스 식별자입니다. 슬롯 모델의 propertyRegex 패턴과 일치해야 합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. SlotWithSignature 서명된 슬롯 플레이어가 참조하는 리소스를 소유하고 있음을 증명하는 암호 서명을 포함한 슬롯 할당입니다. 폼 업데이트 시 플레이어가 슬롯에 배치하는 아이템, 엔트리, 또는 기타 리소스를 실제로 소유하고 있는지 검증하여 부정한 할당을 방지하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 슬롯 모델 이름 슬롯 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. propertyType 문자열 열거형 enum {   “gs2_inventory”,   “gs2_simple_inventory”,   “gs2_dictionary” }  프로퍼티 종류 이 슬롯이 참조하는 GS2 리소스의 종류를 지정합니다. 서명 검증 방법을 결정합니다. GS2-Inventory의 아이템 세트, GS2-Inventory의 심플 아이템, GS2-Dictionary의 엔트리는 각각 서로 다른 서명 형식을 가집니다. 정의 설명 gs2_inventory GS2-Inventory::ItemSet gs2_simple_inventory GS2-Inventory::SimpleItem gs2_dictionary GS2-Dictionary::Entry body string ~ 1048576자 페이로드 리소스를 소유한 GS2 서비스로부터 취득한 직렬화된 리소스 데이터입니다. 서명을 검증하고 소유권을 확인하는 데 필요한 리소스 상태 정보를 포함합니다. signature string ~ 1024자 프로퍼티 ID가 가리키는 리소스를 소유하고 있음을 증명하는 서명 리소스를 소유한 GS2 서비스에 의해 생성된 암호 서명입니다. 폼 업데이트 시 플레이어가 참조하는 아이템 세트, 심플 아이템, 또는 딕셔너리 엔트리를 소유하고 있는지 확인하기 위해 검증됩니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentFormMaster 현재 활성화된 폼 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 폼 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Formation 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 FormModelMaster 폼 모델 마스터 폼 모델 마스터는 게임 내에서 사용되는 폼 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 폼 모델로 반영됩니다. 폼 모델은 편성 상태를 나타내는 엔티티입니다. 편성 가능한 영역으로 슬롯 을 정의할 수 있습니다. 무기·방어구라면 “오른손”, “왼손”, “몸통”, “팔\"과 같은 부위를 슬롯으로, 파티라면 “전위”, “중위”, “후위\"와 같은 포지션을 슬롯으로 표현할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 formModelId string ※ ~ 1024자 폼 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 리스트 이 폼을 구성하는 슬롯 정의의 순서가 있는 리스트입니다. 각 슬롯은 할당 가능한 포지션을 나타내며, 슬롯명은 폼 내에서 고유해야 합니다. 장비에서는 “weapon”, “armor”, “accessory\"와 같은 슬롯, 파티에서는 “position_1”, “position_2\"와 같은 슬롯을 생각할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 MoldModelMaster 폼 저장 영역 모델 마스터 폼 저장 영역 모델 마스터는 게임 내에서 사용되는 폼 저장 영역 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 폼 저장 영역 모델로 반영됩니다. 폼 저장 영역 모델은 파티 편성이라면 「불 속성 파티」「물 속성 파티」와 같은 형태로 저장하는 것을 상정하고 있습니다. 저장할 수 있는 영역의 수는 제한할 수 있으며, 개별적으로 확장할 수도 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 moldModelId string ※ ~ 1024자 폼 저장 영역 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 저장 영역 모델 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialMaxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 초기 캐파시티 이 저장 영역에서 각 플레이어가 이용할 수 있는 기본 폼 저장 슬롯 수입니다. 예를 들어 3으로 설정하면 플레이어는 초기 상태에서 최대 3개의 서로 다른 편성(예: 「불 속성 파티」「물 속성 파티」「바람 속성 파티」)을 저장할 수 있습니다. 플레이어별로 maxCapacity까지 확장할 수 있습니다. maxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 최대 캐파시티 이 저장 영역에서 플레이어별 폼 저장 슬롯 수의 절대적인 상한입니다. 캐파시티 확장 조작을 수행하더라도 캐파시티는 이 값을 초과할 수 없습니다. initialMaxCapacity 이상의 값이어야 합니다. formModelName string  ~ 128자 폼 모델 이름 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 PropertyFormModelMaster 프로퍼티 폼 모델 마스터 프로퍼티 폼 모델 마스터는 게임 내에서 사용되는 프로퍼티 폼 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 프로퍼티 폼 모델로 반영됩니다. 프로퍼티 폼 모델은 편성 상태를 나타내는 엔티티입니다. Mold / Form과의 차이점은, 슬롯 수를 정의하고 각 슬롯에 편성을 기록하는 것이 Mold / Form이며, 보유하고 있는 장비에 스킬을 설정하는 것처럼 수를 사전에 정하기 어려운 편성을 표현할 때 사용하는 것이 프로퍼티 폼 모델입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 propertyFormModelId string ※ ~ 1024자 프로퍼티 폼 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 목록 이 프로퍼티 폼의 슬롯 정의를 순서대로 나열한 목록입니다. 캐파시티에 의해 폼 수가 제한되는 Mold/Form과 달리, 프로퍼티 폼은 프로퍼티 ID로 식별되며 보유하는 리소스마다 존재할 수 있습니다. 슬롯 이름은 폼 내에서 고유해야 합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 formation . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribeNamespacesRequest ; import io.gs2.formation.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Formation . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Formation . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_namespaces ( formation . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 편성 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. updateMoldScript ScriptSetting 폼 저장 영역의 캐파시티를 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updateMold updateFormScript ScriptSetting 폼을 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updateForm updatePropertyFormScript ScriptSetting 프로퍼티 폼을 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updatePropertyForm logSetting LogSetting 로그 출력 설정 편성 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 폼 업데이트, 저장 영역 캐파시티 변경, 프로퍼티 폼 변경의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 formation . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 formation . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, UpdateMoldScript : nil , UpdateFormScript : nil , UpdatePropertyFormScript : nil , LogSetting : \u0026 formation . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Formation\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withUpdateMoldScript ( null ) -\u003e withUpdateFormScript ( null ) -\u003e withUpdatePropertyFormScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Formation\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.CreateNamespaceRequest ; import io.gs2.formation.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . formation . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withUpdateMoldScript ( null ) . withUpdateFormScript ( null ) . withUpdatePropertyFormScript ( null ) . withLogSetting ( new io . gs2 . formation . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Formation . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Formation . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithUpdateMoldScript ( null ) . WithUpdateFormScript ( null ) . WithUpdatePropertyFormScript ( null ) . WithLogSetting ( new Gs2 . Gs2Formation . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Formation . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Formation . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withUpdateMoldScript ( null ) . withUpdateFormScript ( null ) . withUpdatePropertyFormScript ( null ) . withLogSetting ( new Gs2Formation . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . create_namespace ( formation . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( formation . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_update_mold_script ( None ) . with_update_form_script ( None ) . with_update_property_form_script ( None ) . with_log_setting ( formation . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, updateMoldScript = nil , updateFormScript = nil , updatePropertyFormScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, updateMoldScript = nil , updateFormScript = nil , updatePropertyFormScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 formation . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetNamespaceStatusRequest ; import io.gs2.formation.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Formation . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Formation . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_namespace_status ( formation . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'formation' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 formation . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetNamespaceRequest ; import io.gs2.formation.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Formation . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Formation . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_namespace ( formation . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 편성 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. updateMoldScript ScriptSetting 폼 저장 영역의 캐파시티를 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updateMold updateFormScript ScriptSetting 폼을 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updateForm updatePropertyFormScript ScriptSetting 프로퍼티 폼을 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updatePropertyForm logSetting LogSetting 로그 출력 설정 편성 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 폼 업데이트, 저장 영역 캐파시티 변경, 프로퍼티 폼 변경의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 formation . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 formation . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, UpdateMoldScript : nil , UpdateFormScript : nil , UpdatePropertyFormScript : nil , LogSetting : \u0026 formation . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Formation\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withUpdateMoldScript ( null ) -\u003e withUpdateFormScript ( null ) -\u003e withUpdatePropertyFormScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Formation\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.UpdateNamespaceRequest ; import io.gs2.formation.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . formation . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withUpdateMoldScript ( null ) . withUpdateFormScript ( null ) . withUpdatePropertyFormScript ( null ) . withLogSetting ( new io . gs2 . formation . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Formation . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Formation . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithUpdateMoldScript ( null ) . WithUpdateFormScript ( null ) . WithUpdatePropertyFormScript ( null ) . WithLogSetting ( new Gs2 . Gs2Formation . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Formation . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Formation . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withUpdateMoldScript ( null ) . withUpdateFormScript ( null ) . withUpdatePropertyFormScript ( null ) . withLogSetting ( new Gs2Formation . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . update_namespace ( formation . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( formation . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_update_mold_script ( None ) . with_update_form_script ( None ) . with_update_property_form_script ( None ) . with_log_setting ( formation . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, updateMoldScript = nil , updateFormScript = nil , updatePropertyFormScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, updateMoldScript = nil , updateFormScript = nil , updatePropertyFormScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 formation . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeleteNamespaceRequest ; import io.gs2.formation.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Formation . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Formation . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_namespace ( formation . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 formation . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetServiceVersionRequest ; import io.gs2.formation.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Formation . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Formation . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_service_version ( formation . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 formation . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DumpUserDataByUserIdRequest ; import io.gs2.formation.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Formation . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Formation . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . dump_user_data_by_user_id ( formation . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'formation' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 formation . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.formation.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Formation . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Formation . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( formation . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'formation' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 formation . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.CleanUserDataByUserIdRequest ; import io.gs2.formation.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Formation . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Formation . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . clean_user_data_by_user_id ( formation . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'formation' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 formation . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.formation.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Formation . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Formation . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( formation . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'formation' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 formation . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.formation.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Formation . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Formation . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( formation . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'formation' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 formation . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.ImportUserDataByUserIdRequest ; import io.gs2.formation.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Formation . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Formation . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . import_user_data_by_user_id ( formation . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'formation' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 formation . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.CheckImportUserDataByUserIdRequest ; import io.gs2.formation.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Formation . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Formation . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( formation . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'formation' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeMolds 폼 저장 영역 목록 조회 요청한 사용자의 폼 저장 영역(몰드)에 대한 페이지네이션 목록을 조회합니다. 각 몰드는 특정 몰드 모델에 대한 사용자의 저장 영역을 나타내며, 현재 용량 정보를 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 폼 저장 영역 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribeMolds ( \u0026 formation . DescribeMoldsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribeMoldsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describeMolds ( ( new DescribeMoldsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribeMoldsRequest ; import io.gs2.formation.result.DescribeMoldsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribeMoldsResult result = client . describeMolds ( new DescribeMoldsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Mold \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribeMoldsResult \u003e asyncResult = null ; yield return client . DescribeMolds ( new Gs2 . Gs2Formation . Request . DescribeMoldsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describeMolds ( new Gs2Formation . DescribeMoldsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_molds ( formation . DescribeMoldsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_molds ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_molds_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeMoldsByUserId 사용자 ID를 지정하여 폼 저장 영역 목록 조회 지정된 사용자의 폼 저장 영역(몰드)에 대한 페이지네이션 목록을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 폼 저장 영역 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribeMoldsByUserId ( \u0026 formation . DescribeMoldsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribeMoldsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describeMoldsByUserId ( ( new DescribeMoldsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribeMoldsByUserIdRequest ; import io.gs2.formation.result.DescribeMoldsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribeMoldsByUserIdResult result = client . describeMoldsByUserId ( new DescribeMoldsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Mold \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribeMoldsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeMoldsByUserId ( new Gs2 . Gs2Formation . Request . DescribeMoldsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describeMoldsByUserId ( new Gs2Formation . DescribeMoldsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_molds_by_user_id ( formation . DescribeMoldsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_molds_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_molds_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getMold 폼 저장 영역 조회 저장 영역 모델 이름을 지정하여 요청한 사용자의 특정 폼 저장 영역(몰드)을 조회합니다. 현재 용량과 연관된 몰드 모델 정보를 포함한 몰드를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetMold ( \u0026 formation . GetMoldRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item moldModel := result . MoldModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetMoldRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getMold ( ( new GetMoldRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) ); $item = $result -\u003e getItem (); $moldModel = $result -\u003e getMoldModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetMoldRequest ; import io.gs2.formation.result.GetMoldResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetMoldResult result = client . getMold ( new GetMoldRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); Mold item = result . getItem (); MoldModel moldModel = result . getMoldModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetMoldResult \u003e asyncResult = null ; yield return client . GetMold ( new Gs2 . Gs2Formation . Request . GetMoldRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMoldModelName ( \"mold-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var moldModel = result . MoldModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getMold ( new Gs2Formation . GetMoldRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); const item = result . getItem (); const moldModel = result . getMoldModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_mold ( formation . GetMoldRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mold_model_name ( 'mold-0001' ) ) item = result . item mold_model = result . mold_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_mold ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_mold_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; getMoldByUserId 사용자 ID를 지정하여 폼 저장 영역 조회 저장 영역 모델 이름을 지정하여 지정된 사용자의 특정 폼 저장 영역(몰드)을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetMoldByUserId ( \u0026 formation . GetMoldByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item moldModel := result . MoldModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetMoldByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getMoldByUserId ( ( new GetMoldByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $moldModel = $result -\u003e getMoldModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetMoldByUserIdRequest ; import io.gs2.formation.result.GetMoldByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetMoldByUserIdResult result = client . getMoldByUserId ( new GetMoldByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withTimeOffsetToken ( null ) ); Mold item = result . getItem (); MoldModel moldModel = result . getMoldModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetMoldByUserIdResult \u003e asyncResult = null ; yield return client . GetMoldByUserId ( new Gs2 . Gs2Formation . Request . GetMoldByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var moldModel = result . MoldModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getMoldByUserId ( new Gs2Formation . GetMoldByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const moldModel = result . getMoldModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_mold_by_user_id ( formation . GetMoldByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_time_offset_token ( None ) ) item = result . item mold_model = result . mold_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_mold_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_mold_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; setMoldCapacityByUserId 사용자 ID를 지정하여 용량 크기 설정 지정된 사용자의 폼 저장 영역(몰드)의 용량을 지정한 값으로 직접 설정합니다. 갱신 전의 몰드를 ‘old’로, 갱신 후의 몰드와 함께 반환합니다. 용량은 몰드 모델에 정의된 maxCapacity로 상한이 제한됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mold 용량을 갱신한 폼 저장 영역 old Mold 용량을 갱신하기 전의 폼 저장 영역 moldModel MoldModel 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SetMoldCapacityByUserId ( \u0026 formation . SetMoldCapacityByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Capacity : pointy . Int32 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old moldModel := result . MoldModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SetMoldCapacityByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e setMoldCapacityByUserId ( ( new SetMoldCapacityByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withCapacity ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $moldModel = $result -\u003e getMoldModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SetMoldCapacityByUserIdRequest ; import io.gs2.formation.result.SetMoldCapacityByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SetMoldCapacityByUserIdResult result = client . setMoldCapacityByUserId ( new SetMoldCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withCapacity ( 10 ) . withTimeOffsetToken ( null ) ); Mold item = result . getItem (); Mold old = result . getOld (); MoldModel moldModel = result . getMoldModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SetMoldCapacityByUserIdResult \u003e asyncResult = null ; yield return client . SetMoldCapacityByUserId ( new Gs2 . Gs2Formation . Request . SetMoldCapacityByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithCapacity ( 10 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var moldModel = result . MoldModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . setMoldCapacityByUserId ( new Gs2Formation . SetMoldCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withCapacity ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); const moldModel = result . getMoldModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . set_mold_capacity_by_user_id ( formation . SetMoldCapacityByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_capacity ( 10 ) . with_time_offset_token ( None ) ) item = result . item old = result . old mold_model = result . mold_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.set_mold_capacity_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , capacity = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; moldModel = result.moldModel ; client = gs2 ( 'formation' ) api_result_handler = client.set_mold_capacity_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , capacity = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; moldModel = result.moldModel ; addMoldCapacityByUserId 사용자 ID를 지정하여 용량 크기 가산 지정된 사용자의 폼 저장 영역(몰드)의 용량을 가산합니다. 용량은 몰드 모델에 정의된 maxCapacity를 초과할 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mold 용량을 갱신한 폼 저장 영역 moldModel MoldModel 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . AddMoldCapacityByUserId ( \u0026 formation . AddMoldCapacityByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Capacity : pointy . Int32 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item moldModel := result . MoldModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\AddMoldCapacityByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e addMoldCapacityByUserId ( ( new AddMoldCapacityByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withCapacity ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $moldModel = $result -\u003e getMoldModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.AddMoldCapacityByUserIdRequest ; import io.gs2.formation.result.AddMoldCapacityByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { AddMoldCapacityByUserIdResult result = client . addMoldCapacityByUserId ( new AddMoldCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withCapacity ( 10 ) . withTimeOffsetToken ( null ) ); Mold item = result . getItem (); MoldModel moldModel = result . getMoldModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . AddMoldCapacityByUserIdResult \u003e asyncResult = null ; yield return client . AddMoldCapacityByUserId ( new Gs2 . Gs2Formation . Request . AddMoldCapacityByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithCapacity ( 10 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var moldModel = result . MoldModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . addMoldCapacityByUserId ( new Gs2Formation . AddMoldCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withCapacity ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const moldModel = result . getMoldModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . add_mold_capacity_by_user_id ( formation . AddMoldCapacityByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_capacity ( 10 ) . with_time_offset_token ( None ) ) item = result . item mold_model = result . mold_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.add_mold_capacity_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , capacity = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; client = gs2 ( 'formation' ) api_result_handler = client.add_mold_capacity_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , capacity = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; subMoldCapacity 용량 크기 감산 요청한 사용자의 폼 저장 영역(몰드)의 용량을 감산합니다. 용량은 0 미만으로 내려가지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. Result 타입 설명 item Mold 용량을 갱신한 폼 저장 영역 moldModel MoldModel 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SubMoldCapacity ( \u0026 formation . SubMoldCapacityRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Capacity : pointy . Int32 ( 10 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item moldModel := result . MoldModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SubMoldCapacityRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e subMoldCapacity ( ( new SubMoldCapacityRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withCapacity ( 10 ) ); $item = $result -\u003e getItem (); $moldModel = $result -\u003e getMoldModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SubMoldCapacityRequest ; import io.gs2.formation.result.SubMoldCapacityResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SubMoldCapacityResult result = client . subMoldCapacity ( new SubMoldCapacityRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withCapacity ( 10 ) ); Mold item = result . getItem (); MoldModel moldModel = result . getMoldModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SubMoldCapacityResult \u003e asyncResult = null ; yield return client . SubMoldCapacity ( new Gs2 . Gs2Formation . Request . SubMoldCapacityRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithCapacity ( 10 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var moldModel = result . MoldModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . subMoldCapacity ( new Gs2Formation . SubMoldCapacityRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withCapacity ( 10 ) ); const item = result . getItem (); const moldModel = result . getMoldModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . sub_mold_capacity ( formation . SubMoldCapacityRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_capacity ( 10 ) ) item = result . item mold_model = result . mold_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.sub_mold_capacity ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , capacity = 10 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; client = gs2 ( 'formation' ) api_result_handler = client.sub_mold_capacity_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , capacity = 10 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; subMoldCapacityByUserId 사용자 ID를 지정하여 용량 크기 감산 지정된 사용자의 폼 저장 영역(몰드)의 용량을 감산합니다. 용량은 0 미만으로 내려가지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mold 용량을 갱신한 폼 저장 영역 moldModel MoldModel 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SubMoldCapacityByUserId ( \u0026 formation . SubMoldCapacityByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Capacity : pointy . Int32 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item moldModel := result . MoldModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SubMoldCapacityByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e subMoldCapacityByUserId ( ( new SubMoldCapacityByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withCapacity ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $moldModel = $result -\u003e getMoldModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SubMoldCapacityByUserIdRequest ; import io.gs2.formation.result.SubMoldCapacityByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SubMoldCapacityByUserIdResult result = client . subMoldCapacityByUserId ( new SubMoldCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withCapacity ( 10 ) . withTimeOffsetToken ( null ) ); Mold item = result . getItem (); MoldModel moldModel = result . getMoldModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SubMoldCapacityByUserIdResult \u003e asyncResult = null ; yield return client . SubMoldCapacityByUserId ( new Gs2 . Gs2Formation . Request . SubMoldCapacityByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithCapacity ( 10 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var moldModel = result . MoldModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . subMoldCapacityByUserId ( new Gs2Formation . SubMoldCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withCapacity ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const moldModel = result . getMoldModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . sub_mold_capacity_by_user_id ( formation . SubMoldCapacityByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_capacity ( 10 ) . with_time_offset_token ( None ) ) item = result . item mold_model = result . mold_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.sub_mold_capacity_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , capacity = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; client = gs2 ( 'formation' ) api_result_handler = client.sub_mold_capacity_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , capacity = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; moldModel = result.moldModel ; deleteMold 폼 저장 영역 삭제 요청한 사용자의 폼 저장 영역(몰드)을 삭제합니다. 저장 영역 내의 모든 폼과 용량 데이터가 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item Mold 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeleteMold ( \u0026 formation . DeleteMoldRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeleteMoldRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deleteMold ( ( new DeleteMoldRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeleteMoldRequest ; import io.gs2.formation.result.DeleteMoldResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeleteMoldResult result = client . deleteMold ( new DeleteMoldRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); Mold item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeleteMoldResult \u003e asyncResult = null ; yield return client . DeleteMold ( new Gs2 . Gs2Formation . Request . DeleteMoldRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMoldModelName ( \"mold-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deleteMold ( new Gs2Formation . DeleteMoldRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_mold ( formation . DeleteMoldRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mold_model_name ( 'mold-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_mold ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.delete_mold_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMoldByUserId 사용자 ID를 지정하여 폼 저장 영역 삭제 지정된 사용자의 폼 저장 영역(몰드)을 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mold 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeleteMoldByUserId ( \u0026 formation . DeleteMoldByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeleteMoldByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deleteMoldByUserId ( ( new DeleteMoldByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeleteMoldByUserIdRequest ; import io.gs2.formation.result.DeleteMoldByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeleteMoldByUserIdResult result = client . deleteMoldByUserId ( new DeleteMoldByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withTimeOffsetToken ( null ) ); Mold item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeleteMoldByUserIdResult \u003e asyncResult = null ; yield return client . DeleteMoldByUserId ( new Gs2 . Gs2Formation . Request . DeleteMoldByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deleteMoldByUserId ( new Gs2Formation . DeleteMoldByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_mold_by_user_id ( formation . DeleteMoldByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_mold_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.delete_mold_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeForms 폼 목록 조회 지정된 몰드(폼 저장 영역) 내, 요청한 사용자의 폼의 페이지네이션 목록을 조회합니다. 각 폼에는 인벤토리, 심플 인벤토리, 딕셔너리의 아이템에 대한 참조를 보유할 수 있는 슬롯 세트가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 폼 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribeForms ( \u0026 formation . DescribeFormsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribeFormsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describeForms ( ( new DescribeFormsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribeFormsRequest ; import io.gs2.formation.result.DescribeFormsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribeFormsResult result = client . describeForms ( new DescribeFormsRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Form \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribeFormsResult \u003e asyncResult = null ; yield return client . DescribeForms ( new Gs2 . Gs2Formation . Request . DescribeFormsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describeForms ( new Gs2Formation . DescribeFormsRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_forms ( formation . DescribeFormsRequest () . with_namespace_name ( 'namespace-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_forms ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_forms_async ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeFormsByUserId 사용자 ID를 지정하여 폼 목록 조회 지정된 몰드 내, 지정된 사용자의 폼의 페이지네이션 목록을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 폼 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribeFormsByUserId ( \u0026 formation . DescribeFormsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribeFormsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describeFormsByUserId ( ( new DescribeFormsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribeFormsByUserIdRequest ; import io.gs2.formation.result.DescribeFormsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribeFormsByUserIdResult result = client . describeFormsByUserId ( new DescribeFormsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Form \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribeFormsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeFormsByUserId ( new Gs2 . Gs2Formation . Request . DescribeFormsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describeFormsByUserId ( new Gs2Formation . DescribeFormsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_forms_by_user_id ( formation . DescribeFormsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_forms_by_user_id ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_forms_by_user_id_async ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getForm 폼 조회 폼 저장 영역 모델 이름과 인덱스를 지정하여, 요청한 사용자의 특정 폼을 조회합니다. 관련된 몰드, 몰드 모델, 폼 모델 정보와 함께 폼을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. Result 타입 설명 item Form 폼 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetForm ( \u0026 formation . GetFormRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetFormRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getForm ( ( new GetFormRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) ); $item = $result -\u003e getItem (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetFormRequest ; import io.gs2.formation.result.GetFormResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetFormResult result = client . getForm ( new GetFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) ); Form item = result . getItem (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetFormResult \u003e asyncResult = null ; yield return client . GetForm ( new Gs2 . Gs2Formation . Request . GetFormRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getForm ( new Gs2Formation . GetFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) ); const item = result . getItem (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_form ( formation . GetFormRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) ) item = result . item mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_form ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_form_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; getFormByUserId 사용자 ID를 지정하여 폼 조회 폼 저장 영역 모델 이름과 인덱스를 지정하여, 지정된 사용자의 특정 폼을 조회합니다. 관련된 몰드, 몰드 모델, 폼 모델 정보와 함께 폼을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Form 폼 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetFormByUserId ( \u0026 formation . GetFormByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetFormByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getFormByUserId ( ( new GetFormByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetFormByUserIdRequest ; import io.gs2.formation.result.GetFormByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetFormByUserIdResult result = client . getFormByUserId ( new GetFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withTimeOffsetToken ( null ) ); Form item = result . getItem (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetFormByUserIdResult \u003e asyncResult = null ; yield return client . GetFormByUserId ( new Gs2 . Gs2Formation . Request . GetFormByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getFormByUserId ( new Gs2Formation . GetFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_form_by_user_id ( formation . GetFormByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) . with_time_offset_token ( None ) ) item = result . item mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_form_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_form_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; getFormWithSignature 서명된 폼 조회 지정된 암호화 키를 사용하여 생성된 암호 서명과 함께 폼을 조회합니다. 폼 데이터는 JSON으로 직렬화되어 서명되며, 클라이언트가 폼 데이터의 무결성을 검증할 수 있습니다. 서명은 SetFormWithSignature로 폼을 업데이트할 때 슬롯 내용이 변조되지 않았음을 보장하기 위해 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Form 폼 body string 서명 대상 값 signature string 서명 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetFormWithSignature ( \u0026 formation . GetFormWithSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetFormWithSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getFormWithSignature ( ( new GetFormWithSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetFormWithSignatureRequest ; import io.gs2.formation.result.GetFormWithSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetFormWithSignatureResult result = client . getFormWithSignature ( new GetFormWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withKeyId ( \"key-0001\" ) ); Form item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetFormWithSignatureResult \u003e asyncResult = null ; yield return client . GetFormWithSignature ( new Gs2 . Gs2Formation . Request . GetFormWithSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getFormWithSignature ( new Gs2Formation . GetFormWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_form_with_signature ( formation . GetFormWithSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) . with_key_id ( 'key-0001' ) ) item = result . item body = result . body signature = result . signature mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_form_with_signature ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_form_with_signature_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; getFormWithSignatureByUserId 사용자 ID를 지정하여 서명된 폼 조회 지정된 사용자의 폼을 암호 서명과 함께 조회합니다. 서명은 지정된 암호화 키를 사용하여 생성되며, 안전한 검증에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Form 폼 body string 서명 대상 값 signature string 서명 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetFormWithSignatureByUserId ( \u0026 formation . GetFormWithSignatureByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), KeyId : pointy . String ( \"key-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetFormWithSignatureByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getFormWithSignatureByUserId ( ( new GetFormWithSignatureByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetFormWithSignatureByUserIdRequest ; import io.gs2.formation.result.GetFormWithSignatureByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetFormWithSignatureByUserIdResult result = client . getFormWithSignatureByUserId ( new GetFormWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); Form item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetFormWithSignatureByUserIdResult \u003e asyncResult = null ; yield return client . GetFormWithSignatureByUserId ( new Gs2 . Gs2Formation . Request . GetFormWithSignatureByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ) . WithKeyId ( \"key-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getFormWithSignatureByUserId ( new Gs2Formation . GetFormWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_form_with_signature_by_user_id ( formation . GetFormWithSignatureByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) . with_key_id ( 'key-0001' ) . with_time_offset_token ( None ) ) item = result . item body = result . body signature = result . signature mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_form_with_signature_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , keyId = \"key-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_form_with_signature_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , keyId = \"key-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; setForm 폼 설정 요청한 사용자의 폼의 슬롯 값을 업데이트합니다. 슬롯은 폼의 각 위치에 어떤 아이템을 배치할지 정의합니다. 서명 검증이 없는 raw 버전입니다. 변조 방지가 필요한 클라이언트 측 업데이트에는 SetFormWithSignature를 사용하세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 목록 Result 타입 설명 item Form 폼 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SetForm ( \u0026 formation . SetFormRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), Slots : [] formation . Slot { formation . Slot { Name : pointy . String ( \"slot-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SetFormRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e setForm ( ( new SetFormRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) -\u003e withSlots ([ ( new Slot ()) -\u003e withName ( \"slot-0001\" ) -\u003e withPropertyId ( \"property-0001\" ), ]) ); $item = $result -\u003e getItem (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SetFormRequest ; import io.gs2.formation.result.SetFormResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SetFormResult result = client . setForm ( new SetFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withSlots ( Arrays . asList ( new Slot () . withName ( \"slot-0001\" ) . withPropertyId ( \"property-0001\" ) )) ); Form item = result . getItem (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SetFormResult \u003e asyncResult = null ; yield return client . SetForm ( new Gs2 . Gs2Formation . Request . SetFormRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ) . WithSlots ( new Gs2 . Gs2Formation . Model . Slot [] { new Gs2 . Gs2Formation . Model . Slot () . WithName ( \"slot-0001\" ) . WithPropertyId ( \"property-0001\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . setForm ( new Gs2Formation . SetFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withSlots ([ new Gs2Formation . model . Slot () . withName ( \"slot-0001\" ) . withPropertyId ( \"property-0001\" ), ]) ); const item = result . getItem (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . set_form ( formation . SetFormRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) . with_slots ([ formation . Slot () . with_name ( 'slot-0001' ) . with_property_id ( 'property-0001' ), ]) ) item = result . item mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.set_form ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , slots = { { name = \"slot-0001\" , property_id = \"property-0001\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.set_form_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , slots = { { name = \"slot-0001\" , property_id = \"property-0001\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; setFormByUserId 사용자 ID를 지정하여 폼 설정 지정된 사용자의 폼의 슬롯 값을 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Form 폼 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SetFormByUserId ( \u0026 formation . SetFormByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), Slots : [] formation . Slot { formation . Slot { Name : pointy . String ( \"slot-0001\" ), PropertyId : pointy . String ( \"grn:1001\" ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SetFormByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e setFormByUserId ( ( new SetFormByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) -\u003e withSlots ([ ( new \\Gs2\\Formation\\Model\\Slot ()) -\u003e withName ( \"slot-0001\" ) -\u003e withPropertyId ( \"grn:1001\" ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SetFormByUserIdRequest ; import io.gs2.formation.result.SetFormByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SetFormByUserIdResult result = client . setFormByUserId ( new SetFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withSlots ( Arrays . asList ( new io . gs2 . formation . model . Slot () . withName ( \"slot-0001\" ) . withPropertyId ( \"grn:1001\" ) )) . withTimeOffsetToken ( null ) ); Form item = result . getItem (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SetFormByUserIdResult \u003e asyncResult = null ; yield return client . SetFormByUserId ( new Gs2 . Gs2Formation . Request . SetFormByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ) . WithSlots ( new Gs2 . Gs2Formation . Model . Slot [] { new Gs2 . Gs2Formation . Model . Slot () . WithName ( \"slot-0001\" ) . WithPropertyId ( \"grn:1001\" ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . setFormByUserId ( new Gs2Formation . SetFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withSlots ([ new Gs2Formation . model . Slot () . withName ( \"slot-0001\" ) . withPropertyId ( \"grn:1001\" ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . set_form_by_user_id ( formation . SetFormByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) . with_slots ([ formation . Slot () . with_name ( 'slot-0001' ) . with_property_id ( 'grn:1001' ), ]) . with_time_offset_token ( None ) ) item = result . item mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.set_form_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , slots = { { name = \"slot-0001\" , propertyId = \"grn:1001\" , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.set_form_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , slots = { { name = \"slot-0001\" , propertyId = \"grn:1001\" , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; setFormWithSignature 서명된 슬롯을 사용하여 폼 업데이트 변조 방지를 위한 서명 검증과 함께 폼의 슬롯을 업데이트합니다. 각 슬롯에는 암호화 키에 대해 검증되는 바디와 서명이 포함되어야 합니다. 슬롯 콘텐츠의 3가지 프로퍼티 타입을 지원합니다: gs2_inventory(ItemSetId를 추출), gs2_simple_inventory(ItemId를 추출), gs2_dictionary(EntryId를 추출). 검증 후, 검증된 슬롯이 폼에 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 목록 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Form 폼 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SetFormWithSignature ( \u0026 formation . SetFormWithSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), Slots : [] formation . SlotWithSignature { formation . SlotWithSignature { Name : pointy . String ( \"slot-0001\" ), PropertyType : pointy . String ( \"gs2_dictionary\" ), Body : pointy . String ( \"body\" ), Signature : pointy . String ( \"signature\" ), }, }, KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SetFormWithSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e setFormWithSignature ( ( new SetFormWithSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) -\u003e withSlots ([ ( new SlotWithSignature ()) -\u003e withName ( \"slot-0001\" ) -\u003e withPropertyType ( \"gs2_dictionary\" ) -\u003e withBody ( \"body\" ) -\u003e withSignature ( \"signature\" ), ]) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SetFormWithSignatureRequest ; import io.gs2.formation.result.SetFormWithSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SetFormWithSignatureResult result = client . setFormWithSignature ( new SetFormWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withSlots ( Arrays . asList ( new SlotWithSignature () . withName ( \"slot-0001\" ) . withPropertyType ( \"gs2_dictionary\" ) . withBody ( \"body\" ) . withSignature ( \"signature\" ) )) . withKeyId ( \"key-0001\" ) ); Form item = result . getItem (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SetFormWithSignatureResult \u003e asyncResult = null ; yield return client . SetFormWithSignature ( new Gs2 . Gs2Formation . Request . SetFormWithSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ) . WithSlots ( new Gs2 . Gs2Formation . Model . SlotWithSignature [] { new Gs2 . Gs2Formation . Model . SlotWithSignature () . WithName ( \"slot-0001\" ) . WithPropertyType ( \"gs2_dictionary\" ) . WithBody ( \"body\" ) . WithSignature ( \"signature\" ), }) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . setFormWithSignature ( new Gs2Formation . SetFormWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withSlots ([ new Gs2Formation . model . SlotWithSignature () . withName ( \"slot-0001\" ) . withPropertyType ( \"gs2_dictionary\" ) . withBody ( \"body\" ) . withSignature ( \"signature\" ), ]) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . set_form_with_signature ( formation . SetFormWithSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) . with_slots ([ formation . SlotWithSignature () . with_name ( 'slot-0001' ) . with_property_type ( 'gs2_dictionary' ) . with_body ( 'body' ) . with_signature ( 'signature' ), ]) . with_key_id ( 'key-0001' ) ) item = result . item mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.set_form_with_signature ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , slots = { { name = \"slot-0001\" , property_type = \"gs2_dictionary\" , body = \"body\" , signature = \"signature\" , } }, keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.set_form_with_signature_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , slots = { { name = \"slot-0001\" , property_type = \"gs2_dictionary\" , body = \"body\" , signature = \"signature\" , } }, keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; acquireActionsToFormProperties 사용자 ID를 지정하여 폼의 프로퍼티에 획득 액션을 적용 폼의 슬롯 프로퍼티에 획득 액션을 적용하고, 실행할 트랜잭션을 시작합니다. 폼의 슬롯에 아이템이나 리소스를 부여하기 위해 사용되며, 커스터마이즈용 선택적 설정 파라미터를 이용할 수 있습니다. 트랜잭션을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. acquireAction AcquireAction  폼의 프로퍼티에 적용할 획득 액션 config List [] 0 ~ 1000 items 획득 액션에 적용하는 설정 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Form 폼 mold Mold 폼 저장 영역 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . AcquireActionsToFormProperties ( \u0026 formation . AcquireActionsToFormPropertiesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), AcquireAction : \u0026 formation . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"{}\" ), }, Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item mold := result . Mold transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\AcquireActionsToFormPropertiesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e acquireActionsToFormProperties ( ( new AcquireActionsToFormPropertiesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) -\u003e withAcquireAction (( new AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"{}\" ) ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $mold = $result -\u003e getMold (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.AcquireActionsToFormPropertiesRequest ; import io.gs2.formation.result.AcquireActionsToFormPropertiesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { AcquireActionsToFormPropertiesResult result = client . acquireActionsToFormProperties ( new AcquireActionsToFormPropertiesRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withAcquireAction ( new AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"{}\" ) ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Form item = result . getItem (); Mold mold = result . getMold (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . AcquireActionsToFormPropertiesResult \u003e asyncResult = null ; yield return client . AcquireActionsToFormProperties ( new Gs2 . Gs2Formation . Request . AcquireActionsToFormPropertiesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ) . WithAcquireAction ( new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"{}\" ) ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var mold = result . Mold ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . acquireActionsToFormProperties ( new Gs2Formation . AcquireActionsToFormPropertiesRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withAcquireAction ( new Gs2Formation . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"{}\" ) ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const mold = result . getMold (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . acquire_actions_to_form_properties ( formation . AcquireActionsToFormPropertiesRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) . with_acquire_action ( formation . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( ' {} ' ) ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item mold = result . mold transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.acquire_actions_to_form_properties ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , acquireAction = { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"{}\" , }, config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'formation' ) api_result_handler = client.acquire_actions_to_form_properties_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , acquireAction = { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"{}\" , }, config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; deleteForm 폼 삭제 지정된 몰드 모델과 인덱스의 요청한 사용자의 폼을 삭제합니다. 폼에 관련된 모든 슬롯 데이터가 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. Result 타입 설명 item Form 폼 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeleteForm ( \u0026 formation . DeleteFormRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeleteFormRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deleteForm ( ( new DeleteFormRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) ); $item = $result -\u003e getItem (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeleteFormRequest ; import io.gs2.formation.result.DeleteFormResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeleteFormResult result = client . deleteForm ( new DeleteFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) ); Form item = result . getItem (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeleteFormResult \u003e asyncResult = null ; yield return client . DeleteForm ( new Gs2 . Gs2Formation . Request . DeleteFormRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deleteForm ( new Gs2Formation . DeleteFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) ); const item = result . getItem (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_form ( formation . DeleteFormRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) ) item = result . item mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_form ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.delete_form_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , moldModelName = \"mold-0001\" , index = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; deleteFormByUserId 사용자 ID를 지정하여 폼 삭제 지정된 몰드 모델과 인덱스의 지정된 사용자의 폼을 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Form 폼 mold Mold 폼 저장 영역 moldModel MoldModel 폼 저장 영역 모델 formModel FormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeleteFormByUserId ( \u0026 formation . DeleteFormByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Index : pointy . Int32 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item mold := result . Mold moldModel := result . MoldModel formModel := result . FormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeleteFormByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deleteFormByUserId ( ( new DeleteFormByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withIndex ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $mold = $result -\u003e getMold (); $moldModel = $result -\u003e getMoldModel (); $formModel = $result -\u003e getFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeleteFormByUserIdRequest ; import io.gs2.formation.result.DeleteFormByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeleteFormByUserIdResult result = client . deleteFormByUserId ( new DeleteFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withTimeOffsetToken ( null ) ); Form item = result . getItem (); Mold mold = result . getMold (); MoldModel moldModel = result . getMoldModel (); FormModel formModel = result . getFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeleteFormByUserIdResult \u003e asyncResult = null ; yield return client . DeleteFormByUserId ( new Gs2 . Gs2Formation . Request . DeleteFormByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithIndex ( 0 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var mold = result . Mold ; var moldModel = result . MoldModel ; var formModel = result . FormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deleteFormByUserId ( new Gs2Formation . DeleteFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withIndex ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const mold = result . getMold (); const moldModel = result . getMoldModel (); const formModel = result . getFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_form_by_user_id ( formation . DeleteFormByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_index ( 0 ) . with_time_offset_token ( None ) ) item = result . item mold = result . mold mold_model = result . mold_model form_model = result . form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_form_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; client = gs2 ( 'formation' ) api_result_handler = client.delete_form_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , moldModelName = \"mold-0001\" , index = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; mold = result.mold ; moldModel = result.moldModel ; formModel = result.formModel ; describePropertyForms 프로퍼티 폼 목록 조회 지정된 프로퍼티 폼 모델에 대한, 요청한 사용자의 프로퍼티 폼 페이지네이션 목록을 조회합니다. 프로퍼티 폼은 폼과 유사하지만, 저장 영역 내 인덱스가 아닌 커스텀 프로퍼티 ID(예: 캐릭터 ID)로 식별됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 프로퍼티 폼 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribePropertyForms ( \u0026 formation . DescribePropertyFormsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribePropertyFormsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describePropertyForms ( ( new DescribePropertyFormsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribePropertyFormsRequest ; import io.gs2.formation.result.DescribePropertyFormsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribePropertyFormsResult result = client . describePropertyForms ( new DescribePropertyFormsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List PropertyForm \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribePropertyFormsResult \u003e asyncResult = null ; yield return client . DescribePropertyForms ( new Gs2 . Gs2Formation . Request . DescribePropertyFormsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describePropertyForms ( new Gs2Formation . DescribePropertyFormsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_property_forms ( formation . DescribePropertyFormsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_property_forms ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_property_forms_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describePropertyFormsByUserId 사용자 ID를 지정하여 프로퍼티 폼 목록 조회 지정된 사용자와 프로퍼티 폼 모델의 프로퍼티 폼 페이지네이션 목록을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 프로퍼티 폼 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribePropertyFormsByUserId ( \u0026 formation . DescribePropertyFormsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribePropertyFormsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describePropertyFormsByUserId ( ( new DescribePropertyFormsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribePropertyFormsByUserIdRequest ; import io.gs2.formation.result.DescribePropertyFormsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribePropertyFormsByUserIdResult result = client . describePropertyFormsByUserId ( new DescribePropertyFormsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List PropertyForm \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribePropertyFormsByUserIdResult \u003e asyncResult = null ; yield return client . DescribePropertyFormsByUserId ( new Gs2 . Gs2Formation . Request . DescribePropertyFormsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describePropertyFormsByUserId ( new Gs2Formation . DescribePropertyFormsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_property_forms_by_user_id ( formation . DescribePropertyFormsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_property_forms_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_property_forms_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getPropertyForm 프로퍼티 폼 조회 프로퍼티 폼 모델 이름과 프로퍼티 ID를 지정하여 요청한 사용자의 특정 프로퍼티 폼을 조회합니다. 프로퍼티 ID는 조회 전에 정규화됩니다. 연관된 프로퍼티 폼 모델 정보와 함께 프로퍼티 폼을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. Result 타입 설명 item PropertyForm 프로퍼티 폼 propertyFormModel PropertyFormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetPropertyForm ( \u0026 formation . GetPropertyFormRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item propertyFormModel := result . PropertyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetPropertyFormRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getPropertyForm ( ( new GetPropertyFormRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); $propertyFormModel = $result -\u003e getPropertyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetPropertyFormRequest ; import io.gs2.formation.result.GetPropertyFormResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetPropertyFormResult result = client . getPropertyForm ( new GetPropertyFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) ); PropertyForm item = result . getItem (); PropertyFormModel propertyFormModel = result . getPropertyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetPropertyFormResult \u003e asyncResult = null ; yield return client . GetPropertyForm ( new Gs2 . Gs2Formation . Request . GetPropertyFormRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var propertyFormModel = result . PropertyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getPropertyForm ( new Gs2Formation . GetPropertyFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); const propertyFormModel = result . getPropertyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_property_form ( formation . GetPropertyFormRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) ) item = result . item property_form_model = result . property_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_property_form ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_property_form_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; getPropertyFormByUserId 사용자 ID를 지정하여 프로퍼티 폼 조회 프로퍼티 폼 모델 이름과 프로퍼티 ID를 지정하여 지정된 사용자의 특정 프로퍼티 폼을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PropertyForm 프로퍼티 폼 propertyFormModel PropertyFormModel 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetPropertyFormByUserId ( \u0026 formation . GetPropertyFormByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item propertyFormModel := result . PropertyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetPropertyFormByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getPropertyFormByUserId ( ( new GetPropertyFormByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $propertyFormModel = $result -\u003e getPropertyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetPropertyFormByUserIdRequest ; import io.gs2.formation.result.GetPropertyFormByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetPropertyFormByUserIdResult result = client . getPropertyFormByUserId ( new GetPropertyFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); PropertyForm item = result . getItem (); PropertyFormModel propertyFormModel = result . getPropertyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetPropertyFormByUserIdResult \u003e asyncResult = null ; yield return client . GetPropertyFormByUserId ( new Gs2 . Gs2Formation . Request . GetPropertyFormByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var propertyFormModel = result . PropertyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getPropertyFormByUserId ( new Gs2Formation . GetPropertyFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const propertyFormModel = result . getPropertyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_property_form_by_user_id ( formation . GetPropertyFormByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item property_form_model = result . property_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_property_form_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_property_form_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; getPropertyFormWithSignature 서명이 포함된 프로퍼티 폼 조회 지정된 암호화 키를 사용하여 생성된 암호화 서명과 함께 프로퍼티 폼을 조회합니다. 서명은 SetPropertyFormWithSignature로 프로퍼티 폼을 갱신할 때, 슬롯 내용이 변조되지 않았음을 보증하기 위해 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item PropertyForm 프로퍼티 폼 body string 서명 대상 값 signature string 서명 propertyFormModel PropertyFormModel 프로퍼티 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetPropertyFormWithSignature ( \u0026 formation . GetPropertyFormWithSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature propertyFormModel := result . PropertyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetPropertyFormWithSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getPropertyFormWithSignature ( ( new GetPropertyFormWithSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); $propertyFormModel = $result -\u003e getPropertyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetPropertyFormWithSignatureRequest ; import io.gs2.formation.result.GetPropertyFormWithSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetPropertyFormWithSignatureResult result = client . getPropertyFormWithSignature ( new GetPropertyFormWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withKeyId ( \"key-0001\" ) ); PropertyForm item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); PropertyFormModel propertyFormModel = result . getPropertyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetPropertyFormWithSignatureResult \u003e asyncResult = null ; yield return client . GetPropertyFormWithSignature ( new Gs2 . Gs2Formation . Request . GetPropertyFormWithSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; var propertyFormModel = result . PropertyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getPropertyFormWithSignature ( new Gs2Formation . GetPropertyFormWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); const propertyFormModel = result . getPropertyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_property_form_with_signature ( formation . GetPropertyFormWithSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) . with_key_id ( 'key-0001' ) ) item = result . item body = result . body signature = result . signature property_form_model = result . property_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_property_form_with_signature ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; propertyFormModel = result.propertyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_property_form_with_signature_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; propertyFormModel = result.propertyFormModel ; getPropertyFormWithSignatureByUserId 사용자 ID를 지정하여 서명이 포함된 프로퍼티 폼 조회 지정된 사용자의 프로퍼티 폼을 암호화 서명과 함께 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PropertyForm 프로퍼티 폼 body string 서명 대상 값 signature string 서명 propertyFormModel PropertyFormModel 프로퍼티 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetPropertyFormWithSignatureByUserId ( \u0026 formation . GetPropertyFormWithSignatureByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), KeyId : pointy . String ( \"key-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature propertyFormModel := result . PropertyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetPropertyFormWithSignatureByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getPropertyFormWithSignatureByUserId ( ( new GetPropertyFormWithSignatureByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); $propertyFormModel = $result -\u003e getPropertyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetPropertyFormWithSignatureByUserIdRequest ; import io.gs2.formation.result.GetPropertyFormWithSignatureByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetPropertyFormWithSignatureByUserIdResult result = client . getPropertyFormWithSignatureByUserId ( new GetPropertyFormWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); PropertyForm item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); PropertyFormModel propertyFormModel = result . getPropertyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetPropertyFormWithSignatureByUserIdResult \u003e asyncResult = null ; yield return client . GetPropertyFormWithSignatureByUserId ( new Gs2 . Gs2Formation . Request . GetPropertyFormWithSignatureByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithKeyId ( \"key-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; var propertyFormModel = result . PropertyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getPropertyFormWithSignatureByUserId ( new Gs2Formation . GetPropertyFormWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); const propertyFormModel = result . getPropertyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_property_form_with_signature_by_user_id ( formation . GetPropertyFormWithSignatureByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) . with_key_id ( 'key-0001' ) . with_time_offset_token ( None ) ) item = result . item body = result . body signature = result . signature property_form_model = result . property_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_property_form_with_signature_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , keyId = \"key-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; propertyFormModel = result.propertyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.get_property_form_with_signature_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , keyId = \"key-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; propertyFormModel = result.propertyFormModel ; setPropertyForm 프로퍼티 폼 갱신 요청한 사용자의 프로퍼티 폼 슬롯 값을 갱신합니다. 서명 검증이 없는 로우 버전입니다. 변조 방지가 필요한 클라이언트 측 갱신에는 SetPropertyFormWithSignature를 사용하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. slots List  1 ~ 10 items 슬롯 목록 Result 타입 설명 item PropertyForm 프로퍼티 폼 propertyFormModel PropertyFormModel 프로퍼티 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SetPropertyForm ( \u0026 formation . SetPropertyFormRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), Slots : [] formation . Slot { formation . Slot { Name : pointy . String ( \"slot-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item propertyFormModel := result . PropertyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SetPropertyFormRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e setPropertyForm ( ( new SetPropertyFormRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withSlots ([ ( new Slot ()) -\u003e withName ( \"slot-0001\" ) -\u003e withPropertyId ( \"property-0001\" ), ]) ); $item = $result -\u003e getItem (); $propertyFormModel = $result -\u003e getPropertyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SetPropertyFormRequest ; import io.gs2.formation.result.SetPropertyFormResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SetPropertyFormResult result = client . setPropertyForm ( new SetPropertyFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withSlots ( Arrays . asList ( new Slot () . withName ( \"slot-0001\" ) . withPropertyId ( \"property-0001\" ) )) ); PropertyForm item = result . getItem (); PropertyFormModel propertyFormModel = result . getPropertyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SetPropertyFormResult \u003e asyncResult = null ; yield return client . SetPropertyForm ( new Gs2 . Gs2Formation . Request . SetPropertyFormRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithSlots ( new Gs2 . Gs2Formation . Model . Slot [] { new Gs2 . Gs2Formation . Model . Slot () . WithName ( \"slot-0001\" ) . WithPropertyId ( \"property-0001\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var propertyFormModel = result . PropertyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . setPropertyForm ( new Gs2Formation . SetPropertyFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withSlots ([ new Gs2Formation . model . Slot () . withName ( \"slot-0001\" ) . withPropertyId ( \"property-0001\" ), ]) ); const item = result . getItem (); const propertyFormModel = result . getPropertyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . set_property_form ( formation . SetPropertyFormRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) . with_slots ([ formation . Slot () . with_name ( 'slot-0001' ) . with_property_id ( 'property-0001' ), ]) ) item = result . item property_form_model = result . property_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.set_property_form ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , slots = { { name = \"slot-0001\" , property_id = \"property-0001\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.set_property_form_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , slots = { { name = \"slot-0001\" , property_id = \"property-0001\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; setPropertyFormByUserId 사용자 ID를 지정하여 프로퍼티 폼 갱신 지정된 사용자의 프로퍼티 폼 슬롯 값을 갱신합니다(서버 사이드 조작). 서명 검증이 없는 로우 버전으로, 호출자를 신뢰할 수 있는 서버 사이드에서의 사용을 상정하고 있습니다. 각 슬롯은 다른 서비스(인벤토리, 심플 인벤토리, 사전)의 프로퍼티에 대한 참조를 보유합니다. 프로퍼티 폼은 저장 영역 내 인덱스가 아닌 커스텀 propertyId(예: 캐릭터 ID)로 식별됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. slots List  1 ~ 10 items 슬롯 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PropertyForm 프로퍼티 폼 propertyFormModel PropertyFormModel 프로퍼티 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SetPropertyFormByUserId ( \u0026 formation . SetPropertyFormByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), Slots : [] formation . Slot { formation . Slot { Name : pointy . String ( \"slot-0001\" ), PropertyId : pointy . String ( \"grn:1001\" ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item propertyFormModel := result . PropertyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SetPropertyFormByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e setPropertyFormByUserId ( ( new SetPropertyFormByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withSlots ([ ( new \\Gs2\\Formation\\Model\\Slot ()) -\u003e withName ( \"slot-0001\" ) -\u003e withPropertyId ( \"grn:1001\" ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $propertyFormModel = $result -\u003e getPropertyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SetPropertyFormByUserIdRequest ; import io.gs2.formation.result.SetPropertyFormByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SetPropertyFormByUserIdResult result = client . setPropertyFormByUserId ( new SetPropertyFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withSlots ( Arrays . asList ( new io . gs2 . formation . model . Slot () . withName ( \"slot-0001\" ) . withPropertyId ( \"grn:1001\" ) )) . withTimeOffsetToken ( null ) ); PropertyForm item = result . getItem (); PropertyFormModel propertyFormModel = result . getPropertyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SetPropertyFormByUserIdResult \u003e asyncResult = null ; yield return client . SetPropertyFormByUserId ( new Gs2 . Gs2Formation . Request . SetPropertyFormByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithSlots ( new Gs2 . Gs2Formation . Model . Slot [] { new Gs2 . Gs2Formation . Model . Slot () . WithName ( \"slot-0001\" ) . WithPropertyId ( \"grn:1001\" ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var propertyFormModel = result . PropertyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . setPropertyFormByUserId ( new Gs2Formation . SetPropertyFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withSlots ([ new Gs2Formation . model . Slot () . withName ( \"slot-0001\" ) . withPropertyId ( \"grn:1001\" ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const propertyFormModel = result . getPropertyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . set_property_form_by_user_id ( formation . SetPropertyFormByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) . with_slots ([ formation . Slot () . with_name ( 'slot-0001' ) . with_property_id ( 'grn:1001' ), ]) . with_time_offset_token ( None ) ) item = result . item property_form_model = result . property_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.set_property_form_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , slots = { { name = \"slot-0001\" , propertyId = \"grn:1001\" , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.set_property_form_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , slots = { { name = \"slot-0001\" , propertyId = \"grn:1001\" , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; setPropertyFormWithSignature 서명이 포함된 슬롯을 사용하여 프로퍼티 폼 갱신 암호화 서명 검증에 의한 변조 방지 기능과 함께 프로퍼티 폼의 슬롯 값을 갱신합니다. 각 슬롯에는 본문과 서명의 쌍이 포함됩니다. 서버는 지정된 암호화 키를 사용하여 각 슬롯의 서명을 검증한 후 갱신을 적용합니다. 슬롯의 프로퍼티 ID 접두사에 따라 3가지 프로퍼티 타입을 지원합니다: gs2_inventory: 인벤토리 서비스의 ItemSet을 참조 gs2_simple_inventory: 심플 인벤토리 서비스의 Item을 참조 gs2_dictionary: 사전 서비스의 Entry를 참조 클라이언트 측 갱신에는 이 메서드의 사용을 권장합니다. 폼 슬롯에 임의의 값을 설정하는 것을 방지할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. slots List  1 ~ 10 items 슬롯 목록 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item PropertyForm 프로퍼티 폼 proeprtyFormModel PropertyFormModel 프로퍼티 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . SetPropertyFormWithSignature ( \u0026 formation . SetPropertyFormWithSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), Slots : [] formation . SlotWithSignature { formation . SlotWithSignature { Name : pointy . String ( \"slot-0001\" ), PropertyType : pointy . String ( \"gs2_dictionary\" ), Body : pointy . String ( \"body\" ), Signature : pointy . String ( \"signature\" ), }, }, KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item proeprtyFormModel := result . ProeprtyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\SetPropertyFormWithSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e setPropertyFormWithSignature ( ( new SetPropertyFormWithSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withSlots ([ ( new SlotWithSignature ()) -\u003e withName ( \"slot-0001\" ) -\u003e withPropertyType ( \"gs2_dictionary\" ) -\u003e withBody ( \"body\" ) -\u003e withSignature ( \"signature\" ), ]) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $proeprtyFormModel = $result -\u003e getProeprtyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.SetPropertyFormWithSignatureRequest ; import io.gs2.formation.result.SetPropertyFormWithSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { SetPropertyFormWithSignatureResult result = client . setPropertyFormWithSignature ( new SetPropertyFormWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withSlots ( Arrays . asList ( new SlotWithSignature () . withName ( \"slot-0001\" ) . withPropertyType ( \"gs2_dictionary\" ) . withBody ( \"body\" ) . withSignature ( \"signature\" ) )) . withKeyId ( \"key-0001\" ) ); PropertyForm item = result . getItem (); PropertyFormModel proeprtyFormModel = result . getProeprtyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . SetPropertyFormWithSignatureResult \u003e asyncResult = null ; yield return client . SetPropertyFormWithSignature ( new Gs2 . Gs2Formation . Request . SetPropertyFormWithSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithSlots ( new Gs2 . Gs2Formation . Model . SlotWithSignature [] { new Gs2 . Gs2Formation . Model . SlotWithSignature () . WithName ( \"slot-0001\" ) . WithPropertyType ( \"gs2_dictionary\" ) . WithBody ( \"body\" ) . WithSignature ( \"signature\" ), }) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var proeprtyFormModel = result . ProeprtyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . setPropertyFormWithSignature ( new Gs2Formation . SetPropertyFormWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withSlots ([ new Gs2Formation . model . SlotWithSignature () . withName ( \"slot-0001\" ) . withPropertyType ( \"gs2_dictionary\" ) . withBody ( \"body\" ) . withSignature ( \"signature\" ), ]) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const proeprtyFormModel = result . getProeprtyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . set_property_form_with_signature ( formation . SetPropertyFormWithSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) . with_slots ([ formation . SlotWithSignature () . with_name ( 'slot-0001' ) . with_property_type ( 'gs2_dictionary' ) . with_body ( 'body' ) . with_signature ( 'signature' ), ]) . with_key_id ( 'key-0001' ) ) item = result . item proeprty_form_model = result . proeprty_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.set_property_form_with_signature ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , slots = { { name = \"slot-0001\" , property_type = \"gs2_dictionary\" , body = \"body\" , signature = \"signature\" , } }, keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; proeprtyFormModel = result.proeprtyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.set_property_form_with_signature_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , slots = { { name = \"slot-0001\" , property_type = \"gs2_dictionary\" , body = \"body\" , signature = \"signature\" , } }, keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; proeprtyFormModel = result.proeprtyFormModel ; acquireActionsToPropertyFormProperties 프로퍼티 폼의 프로퍼티에 획득 액션을 적용 프로퍼티 폼의 프로퍼티에 획득 액션을 적용하고 트랜잭션을 시작합니다. 프로퍼티 폼의 슬롯 값으로 설정되는 아이템이나 리소스를 부여하기 위해 사용됩니다. 획득 액션은 트랜잭션으로 실행되며, 그 결과 아이템이 폼의 슬롯 프로퍼티에 적용됩니다. 획득 액션의 동작을 커스터마이즈하기 위한 설정값을 전달할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. acquireAction AcquireAction  프로퍼티 폼의 프로퍼티에 적용할 획득 액션 config List [] 0 ~ 1000 items 획득 액션에 적용하는 설정 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PropertyForm 프로퍼티 폼 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . AcquireActionsToPropertyFormProperties ( \u0026 formation . AcquireActionsToPropertyFormPropertiesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), AcquireAction : \u0026 formation . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"{}\" ), }, Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\AcquireActionsToPropertyFormPropertiesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e acquireActionsToPropertyFormProperties ( ( new AcquireActionsToPropertyFormPropertiesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withAcquireAction (( new AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"{}\" ) ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.AcquireActionsToPropertyFormPropertiesRequest ; import io.gs2.formation.result.AcquireActionsToPropertyFormPropertiesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { AcquireActionsToPropertyFormPropertiesResult result = client . acquireActionsToPropertyFormProperties ( new AcquireActionsToPropertyFormPropertiesRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withAcquireAction ( new AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"{}\" ) ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); PropertyForm item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . AcquireActionsToPropertyFormPropertiesResult \u003e asyncResult = null ; yield return client . AcquireActionsToPropertyFormProperties ( new Gs2 . Gs2Formation . Request . AcquireActionsToPropertyFormPropertiesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithAcquireAction ( new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"{}\" ) ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . acquireActionsToPropertyFormProperties ( new Gs2Formation . AcquireActionsToPropertyFormPropertiesRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withAcquireAction ( new Gs2Formation . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"{}\" ) ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . acquire_actions_to_property_form_properties ( formation . AcquireActionsToPropertyFormPropertiesRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) . with_acquire_action ( formation . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( ' {} ' ) ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.acquire_actions_to_property_form_properties ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , acquireAction = { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"{}\" , }, config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'formation' ) api_result_handler = client.acquire_actions_to_property_form_properties_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , acquireAction = { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"{}\" , }, config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; deletePropertyForm 프로퍼티 폼 삭제 요청한 사용자의 지정된 프로퍼티 폼 모델 이름과 propertyId로 식별되는 프로퍼티 폼을 삭제합니다. 삭제되면 프로퍼티 폼에 연결된 모든 슬롯 값이 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. Result 타입 설명 item PropertyForm 프로퍼티 폼 propertyFormModel PropertyFormModel 프로퍼티 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeletePropertyForm ( \u0026 formation . DeletePropertyFormRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item propertyFormModel := result . PropertyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeletePropertyFormRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deletePropertyForm ( ( new DeletePropertyFormRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); $propertyFormModel = $result -\u003e getPropertyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeletePropertyFormRequest ; import io.gs2.formation.result.DeletePropertyFormResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeletePropertyFormResult result = client . deletePropertyForm ( new DeletePropertyFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) ); PropertyForm item = result . getItem (); PropertyFormModel propertyFormModel = result . getPropertyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeletePropertyFormResult \u003e asyncResult = null ; yield return client . DeletePropertyForm ( new Gs2 . Gs2Formation . Request . DeletePropertyFormRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var propertyFormModel = result . PropertyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deletePropertyForm ( new Gs2Formation . DeletePropertyFormRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); const propertyFormModel = result . getPropertyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_property_form ( formation . DeletePropertyFormRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) ) item = result . item property_form_model = result . property_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_property_form ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.delete_property_form_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; deletePropertyFormByUserId 사용자 ID를 지정하여 프로퍼티 폼 삭제 지정된 사용자의 지정된 프로퍼티 폼 모델 이름과 propertyId로 식별되는 프로퍼티 폼을 삭제합니다(서버 사이드 작업). 삭제되면 프로퍼티 폼에 연결된 모든 슬롯 값이 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PropertyForm 프로퍼티 폼 propertyFormModel PropertyFormModel 프로퍼티 폼 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeletePropertyFormByUserId ( \u0026 formation . DeletePropertyFormByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item propertyFormModel := result . PropertyFormModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeletePropertyFormByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deletePropertyFormByUserId ( ( new DeletePropertyFormByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $propertyFormModel = $result -\u003e getPropertyFormModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeletePropertyFormByUserIdRequest ; import io.gs2.formation.result.DeletePropertyFormByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeletePropertyFormByUserIdResult result = client . deletePropertyFormByUserId ( new DeletePropertyFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); PropertyForm item = result . getItem (); PropertyFormModel propertyFormModel = result . getPropertyFormModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeletePropertyFormByUserIdResult \u003e asyncResult = null ; yield return client . DeletePropertyFormByUserId ( new Gs2 . Gs2Formation . Request . DeletePropertyFormByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var propertyFormModel = result . PropertyFormModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deletePropertyFormByUserId ( new Gs2Formation . DeletePropertyFormByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const propertyFormModel = result . getPropertyFormModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_property_form_by_user_id ( formation . DeletePropertyFormByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item property_form_model = result . property_form_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_property_form_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; client = gs2 ( 'formation' ) api_result_handler = client.delete_property_form_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyFormModelName = \"form-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; propertyFormModel = result.propertyFormModel ; getFormModel 폼 모델 조회 지정된 폼 저장 영역 모델에 연결되어 있으며 현재 활성화(공개)된 폼 모델을 조회합니다. 폼 모델은 저장 영역 내 폼이 사용하는 슬롯 구조(사용 가능한 슬롯과 그 설정)를 정의합니다. 편집 가능한 폼 모델 마스터와 달리, 실제로 사용되고 있는 공개된 모델입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item FormModel 폼 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetFormModel ( \u0026 formation . GetFormModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetFormModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getFormModel ( ( new GetFormModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetFormModelRequest ; import io.gs2.formation.result.GetFormModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetFormModelResult result = client . getFormModel ( new GetFormModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); FormModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetFormModelResult \u003e asyncResult = null ; yield return client . GetFormModel ( new Gs2 . Gs2Formation . Request . GetFormModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMoldModelName ( \"mold-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getFormModel ( new Gs2Formation . GetFormModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_form_model ( formation . GetFormModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_mold_model_name ( 'mold-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_form_model ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_form_model_async ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeMoldModels 폼 저장 영역 모델 목록 조회 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 모든 폼 저장 영역 모델(몰드 모델)을 조회합니다. 각 모델은 사용할 폼 모델, 초기 최대 용량, 절대 최대 용량을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 폼 저장 영역 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribeMoldModels ( \u0026 formation . DescribeMoldModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribeMoldModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describeMoldModels ( ( new DescribeMoldModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribeMoldModelsRequest ; import io.gs2.formation.result.DescribeMoldModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribeMoldModelsResult result = client . describeMoldModels ( new DescribeMoldModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List MoldModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribeMoldModelsResult \u003e asyncResult = null ; yield return client . DescribeMoldModels ( new Gs2 . Gs2Formation . Request . DescribeMoldModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describeMoldModels ( new Gs2Formation . DescribeMoldModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_mold_models ( formation . DescribeMoldModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_mold_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'formation' ) api_result_handler = client.describe_mold_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getMoldModel 폼 저장 영역 모델 조회 이름을 지정하여 특정한 현재 활성화(공개) 상태인 폼 저장 영역 모델(몰드 모델)을 조회합니다. 연관된 폼 모델 이름, 초기 최대 용량, 절대 최대 용량을 포함한 모델의 구성을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item MoldModel 폼 저장 영역 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetMoldModel ( \u0026 formation . GetMoldModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetMoldModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getMoldModel ( ( new GetMoldModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetMoldModelRequest ; import io.gs2.formation.result.GetMoldModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetMoldModelResult result = client . getMoldModel ( new GetMoldModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); MoldModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetMoldModelResult \u003e asyncResult = null ; yield return client . GetMoldModel ( new Gs2 . Gs2Formation . Request . GetMoldModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMoldModelName ( \"mold-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getMoldModel ( new Gs2Formation . GetMoldModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_mold_model ( formation . GetMoldModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_mold_model_name ( 'mold-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_mold_model ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_mold_model_async ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describePropertyFormModels 프로퍼티 폼 모델 목록 조회 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 모든 프로퍼티 폼 모델을 조회합니다. 프로퍼티 폼 모델은 저장 영역 내 인덱스가 아닌 커스텀 프로퍼티 ID로 식별되는 프로퍼티 폼의 슬롯 구조를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 프로퍼티 폼 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribePropertyFormModels ( \u0026 formation . DescribePropertyFormModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribePropertyFormModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describePropertyFormModels ( ( new DescribePropertyFormModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribePropertyFormModelsRequest ; import io.gs2.formation.result.DescribePropertyFormModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribePropertyFormModelsResult result = client . describePropertyFormModels ( new DescribePropertyFormModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List PropertyFormModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribePropertyFormModelsResult \u003e asyncResult = null ; yield return client . DescribePropertyFormModels ( new Gs2 . Gs2Formation . Request . DescribePropertyFormModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describePropertyFormModels ( new Gs2Formation . DescribePropertyFormModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_property_form_models ( formation . DescribePropertyFormModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_property_form_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'formation' ) api_result_handler = client.describe_property_form_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getPropertyFormModel 프로퍼티 폼 모델 조회 이름을 지정하여 특정한 현재 활성화(공개) 상태인 프로퍼티 폼 모델을 조회합니다. 이 타입의 프로퍼티 폼이 사용하는 슬롯 구조 정의를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item PropertyFormModel 프로퍼티 폼 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetPropertyFormModel ( \u0026 formation . GetPropertyFormModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetPropertyFormModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getPropertyFormModel ( ( new GetPropertyFormModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetPropertyFormModelRequest ; import io.gs2.formation.result.GetPropertyFormModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetPropertyFormModelResult result = client . getPropertyFormModel ( new GetPropertyFormModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) ); PropertyFormModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetPropertyFormModelResult \u003e asyncResult = null ; yield return client . GetPropertyFormModel ( new Gs2 . Gs2Formation . Request . GetPropertyFormModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getPropertyFormModel ( new Gs2Formation . GetPropertyFormModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_property_form_model ( formation . GetPropertyFormModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_property_form_model_name ( 'form-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_property_form_model ({ namespaceName = \"namespace-0001\" , propertyFormModelName = \"form-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_property_form_model_async ({ namespaceName = \"namespace-0001\" , propertyFormModelName = \"form-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 폼 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 폼 모델 마스터, 폼 저장 영역 마스터(몰드 모델 마스터), 프로퍼티 폼 모델 마스터를 활성화에 사용할 수 있는 형식으로 내보냅니다. 내보낸 데이터는 현재 마스터 구성의 백업이나 다른 네임스페이스로의 임포트에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentFormMaster 활성화 가능한 폼 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 formation . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.ExportMasterRequest ; import io.gs2.formation.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentFormMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Formation . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Formation . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . export_master ( formation . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentFormMaster 현재 활성화된 폼 모델 마스터 데이터 조회 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 폼 모델, 폼 저장 영역 모델, 프로퍼티 폼 모델의 마스터 데이터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentFormMaster 현재 활성화된 폼 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetCurrentFormMaster ( \u0026 formation . GetCurrentFormMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetCurrentFormMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getCurrentFormMaster ( ( new GetCurrentFormMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetCurrentFormMasterRequest ; import io.gs2.formation.result.GetCurrentFormMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetCurrentFormMasterResult result = client . getCurrentFormMaster ( new GetCurrentFormMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentFormMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetCurrentFormMasterResult \u003e asyncResult = null ; yield return client . GetCurrentFormMaster ( new Gs2 . Gs2Formation . Request . GetCurrentFormMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getCurrentFormMaster ( new Gs2Formation . GetCurrentFormMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_current_form_master ( formation . GetCurrentFormMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_current_form_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_current_form_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentFormMaster 현재 활성화된 폼 모델 마스터 데이터 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 업데이트를 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentFormMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentFormMaster ( \u0026 formation . PreUpdateCurrentFormMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\PreUpdateCurrentFormMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentFormMaster ( ( new PreUpdateCurrentFormMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.PreUpdateCurrentFormMasterRequest ; import io.gs2.formation.result.PreUpdateCurrentFormMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { PreUpdateCurrentFormMasterResult result = client . preUpdateCurrentFormMaster ( new PreUpdateCurrentFormMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . PreUpdateCurrentFormMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentFormMaster ( new Gs2 . Gs2Formation . Request . PreUpdateCurrentFormMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . preUpdateCurrentFormMaster ( new Gs2Formation . PreUpdateCurrentFormMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . pre_update_current_form_master ( formation . PreUpdateCurrentFormMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.pre_update_current_form_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'formation' ) api_result_handler = client.pre_update_current_form_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentFormMaster 현재 활성화된 폼 모델 마스터 데이터 업데이트 지정된 네임스페이스의 폼 모델, 폼 저장 영역 모델, 프로퍼티 폼 모델의 마스터 데이터를 업데이트하고 활성화(공개)합니다. 2가지 모드를 지원합니다: 인라인 마스터 데이터용 ‘direct’ 모드와, 사전에 업로드된 마스터 데이터용 ‘preUpload’ 모드입니다. 1MB를 초과하는 마스터 데이터의 경우, 3단계 업데이트 플로우(PreUpdate -\u003e 업로드 -\u003e Update(preUpload 모드))를 사용하세요. 업로드된 마스터 데이터는 적용 전에 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentFormMaster 업데이트된 현재 활성화된 폼 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentFormMaster ( \u0026 formation . UpdateCurrentFormMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-09-09\\\",\\n \\\"moldModels\\\": [\\n {\\n \\\"name\\\": \\\"party\\\",\\n \\\"metadata\\\": \\\"PARTY\\\",\\n \\\"formModel\\\": {\\n \\\"name\\\": \\\"party\\\",\\n \\\"metadata\\\": \\\"PARTY\\\",\\n \\\"slots\\\": [\\n {\\n \\\"name\\\": \\\"tank\\\",\\n \\\"metadata\\\": \\\"TANK\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"healer\\\",\\n \\\"metadata\\\": \\\"HEALER\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"dps_1\\\",\\n \\\"metadata\\\": \\\"DPS\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"dps_2\\\",\\n \\\"metadata\\\": \\\"DPS\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n }\\n ]\\n },\\n \\\"initialMaxCapacity\\\": 10,\\n \\\"maxCapacity\\\": 20\\n },\\n {\\n \\\"name\\\": \\\"equipment\\\",\\n \\\"metadata\\\": \\\"EQUIPMENT\\\",\\n \\\"formModel\\\": {\\n \\\"name\\\": \\\"equipment\\\",\\n \\\"metadata\\\": \\\"EQUIPMENT\\\",\\n \\\"slots\\\": [\\n {\\n \\\"name\\\": \\\"head\\\",\\n \\\"metadata\\\": \\\"HEAD\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"body\\\",\\n \\\"metadata\\\": \\\"BODY\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"leg\\\",\\n \\\"metadata\\\": \\\"LEG\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n }\\n ]\\n },\\n \\\"initialMaxCapacity\\\": 20,\\n \\\"maxCapacity\\\": 30\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\UpdateCurrentFormMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e updateCurrentFormMaster ( ( new UpdateCurrentFormMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-09-09 \\\" , \\n \\\" moldModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" party \\\" , \\n \\\" metadata \\\" : \\\" PARTY \\\" , \\n \\\" formModel \\\" : { \\n \\\" name \\\" : \\\" party \\\" , \\n \\\" metadata \\\" : \\\" PARTY \\\" , \\n \\\" slots \\\" : [ \\n { \\n \\\" name \\\" : \\\" tank \\\" , \\n \\\" metadata \\\" : \\\" TANK \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" healer \\\" , \\n \\\" metadata \\\" : \\\" HEALER \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" dps_1 \\\" , \\n \\\" metadata \\\" : \\\" DPS \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" dps_2 \\\" , \\n \\\" metadata \\\" : \\\" DPS \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n } \\n ] \\n }, \\n \\\" initialMaxCapacity \\\" : 10, \\n \\\" maxCapacity \\\" : 20 \\n }, \\n { \\n \\\" name \\\" : \\\" equipment \\\" , \\n \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\n \\\" formModel \\\" : { \\n \\\" name \\\" : \\\" equipment \\\" , \\n \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\n \\\" slots \\\" : [ \\n { \\n \\\" name \\\" : \\\" head \\\" , \\n \\\" metadata \\\" : \\\" HEAD \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" body \\\" , \\n \\\" metadata \\\" : \\\" BODY \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" leg \\\" , \\n \\\" metadata \\\" : \\\" LEG \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n } \\n ] \\n }, \\n \\\" initialMaxCapacity \\\" : 20, \\n \\\" maxCapacity \\\" : 30 \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.UpdateCurrentFormMasterRequest ; import io.gs2.formation.result.UpdateCurrentFormMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { UpdateCurrentFormMasterResult result = client . updateCurrentFormMaster ( new UpdateCurrentFormMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-09-09\\\",\\n \\\"moldModels\\\": [\\n {\\n \\\"name\\\": \\\"party\\\",\\n \\\"metadata\\\": \\\"PARTY\\\",\\n \\\"formModel\\\": {\\n \\\"name\\\": \\\"party\\\",\\n \\\"metadata\\\": \\\"PARTY\\\",\\n \\\"slots\\\": [\\n {\\n \\\"name\\\": \\\"tank\\\",\\n \\\"metadata\\\": \\\"TANK\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"healer\\\",\\n \\\"metadata\\\": \\\"HEALER\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"dps_1\\\",\\n \\\"metadata\\\": \\\"DPS\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"dps_2\\\",\\n \\\"metadata\\\": \\\"DPS\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n }\\n ]\\n },\\n \\\"initialMaxCapacity\\\": 10,\\n \\\"maxCapacity\\\": 20\\n },\\n {\\n \\\"name\\\": \\\"equipment\\\",\\n \\\"metadata\\\": \\\"EQUIPMENT\\\",\\n \\\"formModel\\\": {\\n \\\"name\\\": \\\"equipment\\\",\\n \\\"metadata\\\": \\\"EQUIPMENT\\\",\\n \\\"slots\\\": [\\n {\\n \\\"name\\\": \\\"head\\\",\\n \\\"metadata\\\": \\\"HEAD\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"body\\\",\\n \\\"metadata\\\": \\\"BODY\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"leg\\\",\\n \\\"metadata\\\": \\\"LEG\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n }\\n ]\\n },\\n \\\"initialMaxCapacity\\\": 20,\\n \\\"maxCapacity\\\": 30\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentFormMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . UpdateCurrentFormMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentFormMaster ( new Gs2 . Gs2Formation . Request . UpdateCurrentFormMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-09-09\\\",\\n \\\"moldModels\\\": [\\n {\\n \\\"name\\\": \\\"party\\\",\\n \\\"metadata\\\": \\\"PARTY\\\",\\n \\\"formModel\\\": {\\n \\\"name\\\": \\\"party\\\",\\n \\\"metadata\\\": \\\"PARTY\\\",\\n \\\"slots\\\": [\\n {\\n \\\"name\\\": \\\"tank\\\",\\n \\\"metadata\\\": \\\"TANK\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"healer\\\",\\n \\\"metadata\\\": \\\"HEALER\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"dps_1\\\",\\n \\\"metadata\\\": \\\"DPS\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"dps_2\\\",\\n \\\"metadata\\\": \\\"DPS\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n }\\n ]\\n },\\n \\\"initialMaxCapacity\\\": 10,\\n \\\"maxCapacity\\\": 20\\n },\\n {\\n \\\"name\\\": \\\"equipment\\\",\\n \\\"metadata\\\": \\\"EQUIPMENT\\\",\\n \\\"formModel\\\": {\\n \\\"name\\\": \\\"equipment\\\",\\n \\\"metadata\\\": \\\"EQUIPMENT\\\",\\n \\\"slots\\\": [\\n {\\n \\\"name\\\": \\\"head\\\",\\n \\\"metadata\\\": \\\"HEAD\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"body\\\",\\n \\\"metadata\\\": \\\"BODY\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"leg\\\",\\n \\\"metadata\\\": \\\"LEG\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n }\\n ]\\n },\\n \\\"initialMaxCapacity\\\": 20,\\n \\\"maxCapacity\\\": 30\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . updateCurrentFormMaster ( new Gs2Formation . UpdateCurrentFormMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-09-09\\\",\\n \\\"moldModels\\\": [\\n {\\n \\\"name\\\": \\\"party\\\",\\n \\\"metadata\\\": \\\"PARTY\\\",\\n \\\"formModel\\\": {\\n \\\"name\\\": \\\"party\\\",\\n \\\"metadata\\\": \\\"PARTY\\\",\\n \\\"slots\\\": [\\n {\\n \\\"name\\\": \\\"tank\\\",\\n \\\"metadata\\\": \\\"TANK\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"healer\\\",\\n \\\"metadata\\\": \\\"HEALER\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"dps_1\\\",\\n \\\"metadata\\\": \\\"DPS\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"dps_2\\\",\\n \\\"metadata\\\": \\\"DPS\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n }\\n ]\\n },\\n \\\"initialMaxCapacity\\\": 10,\\n \\\"maxCapacity\\\": 20\\n },\\n {\\n \\\"name\\\": \\\"equipment\\\",\\n \\\"metadata\\\": \\\"EQUIPMENT\\\",\\n \\\"formModel\\\": {\\n \\\"name\\\": \\\"equipment\\\",\\n \\\"metadata\\\": \\\"EQUIPMENT\\\",\\n \\\"slots\\\": [\\n {\\n \\\"name\\\": \\\"head\\\",\\n \\\"metadata\\\": \\\"HEAD\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"body\\\",\\n \\\"metadata\\\": \\\"BODY\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n },\\n {\\n \\\"name\\\": \\\"leg\\\",\\n \\\"metadata\\\": \\\"LEG\\\",\\n \\\"propertyRegex\\\": \\\"grn:.*\\\"\\n }\\n ]\\n },\\n \\\"initialMaxCapacity\\\": 20,\\n \\\"maxCapacity\\\": 30\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . update_current_form_master ( formation . UpdateCurrentFormMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-09-09\", \\n \"moldModels\": [ \\n { \\n \"name\": \"party\", \\n \"metadata\": \"PARTY\", \\n \"formModel\": { \\n \"name\": \"party\", \\n \"metadata\": \"PARTY\", \\n \"slots\": [ \\n { \\n \"name\": \"tank\", \\n \"metadata\": \"TANK\", \\n \"propertyRegex\": \"grn:.*\" \\n }, \\n { \\n \"name\": \"healer\", \\n \"metadata\": \"HEALER\", \\n \"propertyRegex\": \"grn:.*\" \\n }, \\n { \\n \"name\": \"dps_1\", \\n \"metadata\": \"DPS\", \\n \"propertyRegex\": \"grn:.*\" \\n }, \\n { \\n \"name\": \"dps_2\", \\n \"metadata\": \"DPS\", \\n \"propertyRegex\": \"grn:.*\" \\n } \\n ] \\n }, \\n \"initialMaxCapacity\": 10, \\n \"maxCapacity\": 20 \\n }, \\n { \\n \"name\": \"equipment\", \\n \"metadata\": \"EQUIPMENT\", \\n \"formModel\": { \\n \"name\": \"equipment\", \\n \"metadata\": \"EQUIPMENT\", \\n \"slots\": [ \\n { \\n \"name\": \"head\", \\n \"metadata\": \"HEAD\", \\n \"propertyRegex\": \"grn:.*\" \\n }, \\n { \\n \"name\": \"body\", \\n \"metadata\": \"BODY\", \\n \"propertyRegex\": \"grn:.*\" \\n }, \\n { \\n \"name\": \"leg\", \\n \"metadata\": \"LEG\", \\n \"propertyRegex\": \"grn:.*\" \\n } \\n ] \\n }, \\n \"initialMaxCapacity\": 20, \\n \"maxCapacity\": 30 \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.update_current_form_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-09-09 \\\" , \\n \\\" moldModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" party \\\" , \\n \\\" metadata \\\" : \\\" PARTY \\\" , \\n \\\" formModel \\\" : { \\n \\\" name \\\" : \\\" party \\\" , \\n \\\" metadata \\\" : \\\" PARTY \\\" , \\n \\\" slots \\\" : [ \\n { \\n \\\" name \\\" : \\\" tank \\\" , \\n \\\" metadata \\\" : \\\" TANK \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" healer \\\" , \\n \\\" metadata \\\" : \\\" HEALER \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" dps_1 \\\" , \\n \\\" metadata \\\" : \\\" DPS \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" dps_2 \\\" , \\n \\\" metadata \\\" : \\\" DPS \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n } \\n ] \\n }, \\n \\\" initialMaxCapacity \\\" : 10, \\n \\\" maxCapacity \\\" : 20 \\n }, \\n { \\n \\\" name \\\" : \\\" equipment \\\" , \\n \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\n \\\" formModel \\\" : { \\n \\\" name \\\" : \\\" equipment \\\" , \\n \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\n \\\" slots \\\" : [ \\n { \\n \\\" name \\\" : \\\" head \\\" , \\n \\\" metadata \\\" : \\\" HEAD \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" body \\\" , \\n \\\" metadata \\\" : \\\" BODY \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" leg \\\" , \\n \\\" metadata \\\" : \\\" LEG \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n } \\n ] \\n }, \\n \\\" initialMaxCapacity \\\" : 20, \\n \\\" maxCapacity \\\" : 30 \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.update_current_form_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-09-09 \\\" , \\n \\\" moldModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" party \\\" , \\n \\\" metadata \\\" : \\\" PARTY \\\" , \\n \\\" formModel \\\" : { \\n \\\" name \\\" : \\\" party \\\" , \\n \\\" metadata \\\" : \\\" PARTY \\\" , \\n \\\" slots \\\" : [ \\n { \\n \\\" name \\\" : \\\" tank \\\" , \\n \\\" metadata \\\" : \\\" TANK \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" healer \\\" , \\n \\\" metadata \\\" : \\\" HEALER \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" dps_1 \\\" , \\n \\\" metadata \\\" : \\\" DPS \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" dps_2 \\\" , \\n \\\" metadata \\\" : \\\" DPS \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n } \\n ] \\n }, \\n \\\" initialMaxCapacity \\\" : 10, \\n \\\" maxCapacity \\\" : 20 \\n }, \\n { \\n \\\" name \\\" : \\\" equipment \\\" , \\n \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\n \\\" formModel \\\" : { \\n \\\" name \\\" : \\\" equipment \\\" , \\n \\\" metadata \\\" : \\\" EQUIPMENT \\\" , \\n \\\" slots \\\" : [ \\n { \\n \\\" name \\\" : \\\" head \\\" , \\n \\\" metadata \\\" : \\\" HEAD \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" body \\\" , \\n \\\" metadata \\\" : \\\" BODY \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" leg \\\" , \\n \\\" metadata \\\" : \\\" LEG \\\" , \\n \\\" propertyRegex \\\" : \\\" grn:.* \\\"\\n } \\n ] \\n }, \\n \\\" initialMaxCapacity \\\" : 20, \\n \\\" maxCapacity \\\" : 30 \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentFormMasterFromGitHub 현재 활성화된 폼 모델 마스터 데이터를 GitHub에서 업데이트 GitHub 저장소에서 직접 마스터 데이터를 취득하여 업데이트·활성화(공개)합니다. 체크아웃 설정에는 사용할 저장소, 브랜치/태그, 파일 경로를 지정합니다. 마스터 데이터를 버전 관리로 관리하고 직접 배포하는 경우에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentFormMaster 업데이트된 현재 활성화된 폼 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentFormMasterFromGitHub ( \u0026 formation . UpdateCurrentFormMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 formation . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\UpdateCurrentFormMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e updateCurrentFormMasterFromGitHub ( ( new UpdateCurrentFormMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.UpdateCurrentFormMasterFromGitHubRequest ; import io.gs2.formation.result.UpdateCurrentFormMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { UpdateCurrentFormMasterFromGitHubResult result = client . updateCurrentFormMasterFromGitHub ( new UpdateCurrentFormMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentFormMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . UpdateCurrentFormMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentFormMasterFromGitHub ( new Gs2 . Gs2Formation . Request . UpdateCurrentFormMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Formation . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . updateCurrentFormMasterFromGitHub ( new Gs2Formation . UpdateCurrentFormMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Formation . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . update_current_form_master_from_git_hub ( formation . UpdateCurrentFormMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( formation . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.update_current_form_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.update_current_form_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeFormModelMasters 폼 모델 마스터 목록 조회 이름 접두사 필터링이 가능한, 편집 가능한 폼 모델 마스터의 페이지네이션 목록을 조회합니다. 폼 모델 마스터는 폼의 슬롯 구조를 정의합니다. 마스터에 대한 변경 사항은 CurrentFormMaster API에서 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 폼 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 폼 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribeFormModelMasters ( \u0026 formation . DescribeFormModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribeFormModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describeFormModelMasters ( ( new DescribeFormModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribeFormModelMastersRequest ; import io.gs2.formation.result.DescribeFormModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribeFormModelMastersResult result = client . describeFormModelMasters ( new DescribeFormModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List FormModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribeFormModelMastersResult \u003e asyncResult = null ; yield return client . DescribeFormModelMasters ( new Gs2 . Gs2Formation . Request . DescribeFormModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describeFormModelMasters ( new Gs2Formation . DescribeFormModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_form_model_masters ( formation . DescribeFormModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_form_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_form_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createFormModelMaster 폼 모델 마스터 신규 생성 이름과 슬롯 정의를 가진 새로운 편집 가능한 폼 모델 마스터 정의를 생성합니다. 각 슬롯은 아이템(인벤토리, 심플 인벤토리, 사전에서)을 배치할 수 있는 폼 내의 이름이 지정된 위치를 정의합니다. 변경 사항은 CurrentFormMaster API에서 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 리스트 이 폼을 구성하는 슬롯 정의의 순서가 있는 리스트입니다. 각 슬롯은 할당 가능한 포지션을 나타내며, 슬롯명은 폼 내에서 고유해야 합니다. 장비에서는 “weapon”, “armor”, “accessory\"와 같은 슬롯, 파티에서는 “position_1”, “position_2\"와 같은 슬롯을 생각할 수 있습니다. Result 타입 설명 item FormModelMaster 생성한 폼 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . CreateFormModelMaster ( \u0026 formation . CreateFormModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"form-0001\" ), Description : nil , Metadata : nil , Slots : [] formation . SlotModel { formation . SlotModel { Name : pointy . String ( \"slot-0001\" ), PropertyRegex : pointy . String ( \".*\" ), }, formation . SlotModel { Name : pointy . String ( \"slot-0002\" ), PropertyRegex : pointy . String ( \".*\" ), Metadata : pointy . String ( \"METADATA_0002\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\CreateFormModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e createFormModelMaster ( ( new CreateFormModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"form-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withSlots ([ ( new \\Gs2\\Formation\\Model\\SlotModel ()) -\u003e withName ( \"slot-0001\" ) -\u003e withPropertyRegex ( \".*\" ), ( new \\Gs2\\Formation\\Model\\SlotModel ()) -\u003e withName ( \"slot-0002\" ) -\u003e withPropertyRegex ( \".*\" ) -\u003e withMetadata ( \"METADATA_0002\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.CreateFormModelMasterRequest ; import io.gs2.formation.result.CreateFormModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { CreateFormModelMasterResult result = client . createFormModelMaster ( new CreateFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"form-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withSlots ( Arrays . asList ( new io . gs2 . formation . model . SlotModel () . withName ( \"slot-0001\" ) . withPropertyRegex ( \".*\" ), new io . gs2 . formation . model . SlotModel () . withName ( \"slot-0002\" ) . withPropertyRegex ( \".*\" ) . withMetadata ( \"METADATA_0002\" ) )) ); FormModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . CreateFormModelMasterResult \u003e asyncResult = null ; yield return client . CreateFormModelMaster ( new Gs2 . Gs2Formation . Request . CreateFormModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"form-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithSlots ( new Gs2 . Gs2Formation . Model . SlotModel [] { new Gs2 . Gs2Formation . Model . SlotModel () . WithName ( \"slot-0001\" ) . WithPropertyRegex ( \".*\" ), new Gs2 . Gs2Formation . Model . SlotModel () . WithName ( \"slot-0002\" ) . WithPropertyRegex ( \".*\" ) . WithMetadata ( \"METADATA_0002\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . createFormModelMaster ( new Gs2Formation . CreateFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"form-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withSlots ([ new Gs2Formation . model . SlotModel () . withName ( \"slot-0001\" ) . withPropertyRegex ( \".*\" ), new Gs2Formation . model . SlotModel () . withName ( \"slot-0002\" ) . withPropertyRegex ( \".*\" ) . withMetadata ( \"METADATA_0002\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . create_form_model_master ( formation . CreateFormModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'form-0001' ) . with_description ( None ) . with_metadata ( None ) . with_slots ([ formation . SlotModel () . with_name ( 'slot-0001' ) . with_property_regex ( '.*' ), formation . SlotModel () . with_name ( 'slot-0002' ) . with_property_regex ( '.*' ) . with_metadata ( 'METADATA_0002' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.create_form_model_master ({ namespaceName = \"namespace-0001\" , name = \"form-0001\" , description = nil , metadata = nil , slots = { { name = \"slot-0001\" , propertyRegex = \".*\" , }, { name = \"slot-0002\" , propertyRegex = \".*\" , metadata = \"METADATA_0002\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.create_form_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"form-0001\" , description = nil , metadata = nil , slots = { { name = \"slot-0001\" , propertyRegex = \".*\" , }, { name = \"slot-0002\" , propertyRegex = \".*\" , metadata = \"METADATA_0002\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getFormModelMaster 폼 모델 마스터 조회 이름을 지정하여 특정한 편집 가능한 폼 모델 마스터의 상세 정보를 조회합니다. 활성화 전의 마스터 정의를 열람·편집하는 데 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. formModelName string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item FormModelMaster 폼 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetFormModelMaster ( \u0026 formation . GetFormModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), FormModelName : pointy . String ( \"form-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetFormModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getFormModelMaster ( ( new GetFormModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withFormModelName ( \"form-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetFormModelMasterRequest ; import io.gs2.formation.result.GetFormModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetFormModelMasterResult result = client . getFormModelMaster ( new GetFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withFormModelName ( \"form-0001\" ) ); FormModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetFormModelMasterResult \u003e asyncResult = null ; yield return client . GetFormModelMaster ( new Gs2 . Gs2Formation . Request . GetFormModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithFormModelName ( \"form-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getFormModelMaster ( new Gs2Formation . GetFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withFormModelName ( \"form-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_form_model_master ( formation . GetFormModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_form_model_name ( 'form-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_form_model_master ({ namespaceName = \"namespace-0001\" , formModelName = \"form-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_form_model_master_async ({ namespaceName = \"namespace-0001\" , formModelName = \"form-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateFormModelMaster 폼 모델 마스터 갱신 기존 폼 모델 마스터의 설명, 메타데이터, 슬롯 정의를 갱신합니다. 폼 모델 이름은 생성 후 변경할 수 없습니다. 변경 사항은 CurrentFormMaster API에서 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. formModelName string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 리스트 이 폼을 구성하는 슬롯 정의의 순서가 있는 리스트입니다. 각 슬롯은 할당 가능한 포지션을 나타내며, 슬롯명은 폼 내에서 고유해야 합니다. 장비에서는 “weapon”, “armor”, “accessory\"와 같은 슬롯, 파티에서는 “position_1”, “position_2\"와 같은 슬롯을 생각할 수 있습니다. Result 타입 설명 item FormModelMaster 갱신한 폼 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . UpdateFormModelMaster ( \u0026 formation . UpdateFormModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), FormModelName : pointy . String ( \"form-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"FORM_0001\" ), Slots : [] formation . SlotModel { formation . SlotModel { Name : pointy . String ( \"slot-1101\" ), }, formation . SlotModel { Name : pointy . String ( \"slot-1102\" ), Metadata : pointy . String ( \"METADATA_1102\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\UpdateFormModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e updateFormModelMaster ( ( new UpdateFormModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withFormModelName ( \"form-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"FORM_0001\" ) -\u003e withSlots ([ ( new \\Gs2\\Formation\\Model\\SlotModel ()) -\u003e withName ( \"slot-1101\" ), ( new \\Gs2\\Formation\\Model\\SlotModel ()) -\u003e withName ( \"slot-1102\" ) -\u003e withMetadata ( \"METADATA_1102\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.UpdateFormModelMasterRequest ; import io.gs2.formation.result.UpdateFormModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { UpdateFormModelMasterResult result = client . updateFormModelMaster ( new UpdateFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withFormModelName ( \"form-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"FORM_0001\" ) . withSlots ( Arrays . asList ( new io . gs2 . formation . model . SlotModel () . withName ( \"slot-1101\" ), new io . gs2 . formation . model . SlotModel () . withName ( \"slot-1102\" ) . withMetadata ( \"METADATA_1102\" ) )) ); FormModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . UpdateFormModelMasterResult \u003e asyncResult = null ; yield return client . UpdateFormModelMaster ( new Gs2 . Gs2Formation . Request . UpdateFormModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithFormModelName ( \"form-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"FORM_0001\" ) . WithSlots ( new Gs2 . Gs2Formation . Model . SlotModel [] { new Gs2 . Gs2Formation . Model . SlotModel () . WithName ( \"slot-1101\" ), new Gs2 . Gs2Formation . Model . SlotModel () . WithName ( \"slot-1102\" ) . WithMetadata ( \"METADATA_1102\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . updateFormModelMaster ( new Gs2Formation . UpdateFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withFormModelName ( \"form-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"FORM_0001\" ) . withSlots ([ new Gs2Formation . model . SlotModel () . withName ( \"slot-1101\" ), new Gs2Formation . model . SlotModel () . withName ( \"slot-1102\" ) . withMetadata ( \"METADATA_1102\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . update_form_model_master ( formation . UpdateFormModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_form_model_name ( 'form-0001' ) . with_description ( 'description1' ) . with_metadata ( 'FORM_0001' ) . with_slots ([ formation . SlotModel () . with_name ( 'slot-1101' ), formation . SlotModel () . with_name ( 'slot-1102' ) . with_metadata ( 'METADATA_1102' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.update_form_model_master ({ namespaceName = \"namespace-0001\" , formModelName = \"form-0001\" , description = \"description1\" , metadata = \"FORM_0001\" , slots = { { name = \"slot-1101\" , }, { name = \"slot-1102\" , metadata = \"METADATA_1102\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.update_form_model_master_async ({ namespaceName = \"namespace-0001\" , formModelName = \"form-0001\" , description = \"description1\" , metadata = \"FORM_0001\" , slots = { { name = \"slot-1101\" , }, { name = \"slot-1102\" , metadata = \"METADATA_1102\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteFormModelMaster 폼 모델 마스터 삭제 편집 가능한 폼 모델 마스터 정의를 삭제합니다. 마스터 데이터만 영향을 받으며, 현재 활성화(공개)되어 있는 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. formModelName string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item FormModelMaster 삭제한 폼 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeleteFormModelMaster ( \u0026 formation . DeleteFormModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), FormModelName : pointy . String ( \"form-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeleteFormModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deleteFormModelMaster ( ( new DeleteFormModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withFormModelName ( \"form-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeleteFormModelMasterRequest ; import io.gs2.formation.result.DeleteFormModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeleteFormModelMasterResult result = client . deleteFormModelMaster ( new DeleteFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withFormModelName ( \"form-0001\" ) ); FormModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeleteFormModelMasterResult \u003e asyncResult = null ; yield return client . DeleteFormModelMaster ( new Gs2 . Gs2Formation . Request . DeleteFormModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithFormModelName ( \"form-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deleteFormModelMaster ( new Gs2Formation . DeleteFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withFormModelName ( \"form-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_form_model_master ( formation . DeleteFormModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_form_model_name ( 'form-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_form_model_master ({ namespaceName = \"namespace-0001\" , formModelName = \"form-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.delete_form_model_master_async ({ namespaceName = \"namespace-0001\" , formModelName = \"form-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeMoldModelMasters 폼 저장 영역 마스터 목록 조회 이름 접두사 필터링이 가능한, 편집 가능한 폼 저장 영역 마스터(몰드 모델 마스터)의 페이지네이션 목록을 조회합니다. 마스터에 대한 변경 사항은 CurrentFormMaster API에서 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 폼 저장 영역 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 폼 저장 영역 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribeMoldModelMasters ( \u0026 formation . DescribeMoldModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribeMoldModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describeMoldModelMasters ( ( new DescribeMoldModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribeMoldModelMastersRequest ; import io.gs2.formation.result.DescribeMoldModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribeMoldModelMastersResult result = client . describeMoldModelMasters ( new DescribeMoldModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List MoldModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribeMoldModelMastersResult \u003e asyncResult = null ; yield return client . DescribeMoldModelMasters ( new Gs2 . Gs2Formation . Request . DescribeMoldModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describeMoldModelMasters ( new Gs2Formation . DescribeMoldModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_mold_model_masters ( formation . DescribeMoldModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_mold_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_mold_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createMoldModelMaster 폼 저장 영역 마스터 신규 생성 새로운 편집 가능한 폼 저장 영역 마스터(몰드 모델 마스터) 정의를 생성합니다. 사용할 폼 모델(formModelName), 사용자가 저장 영역에 처음 접근할 때 할당되는 초기 최대 용량(initialMaxCapacity), 용량 가산으로 도달 가능한 절대 최대 용량(maxCapacity)을 정의합니다. 변경 사항은 CurrentFormMaster API에서 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 폼 저장 영역 모델 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. formModelName string  ~ 128자 폼 모델 이름 initialMaxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 초기 캐파시티 이 저장 영역에서 각 플레이어가 이용할 수 있는 기본 폼 저장 슬롯 수입니다. 예를 들어 3으로 설정하면 플레이어는 초기 상태에서 최대 3개의 서로 다른 편성(예: 「불 속성 파티」「물 속성 파티」「바람 속성 파티」)을 저장할 수 있습니다. 플레이어별로 maxCapacity까지 확장할 수 있습니다. maxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 최대 캐파시티 이 저장 영역에서 플레이어별 폼 저장 슬롯 수의 절대적인 상한입니다. 캐파시티 확장 조작을 수행하더라도 캐파시티는 이 값을 초과할 수 없습니다. initialMaxCapacity 이상의 값이어야 합니다. Result 타입 설명 item MoldModelMaster 생성한 폼 저장 영역 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . CreateMoldModelMaster ( \u0026 formation . CreateMoldModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"mold-0001\" ), Description : nil , Metadata : nil , FormModelName : pointy . String ( \"formModel-0001\" ), InitialMaxCapacity : pointy . Int32 ( 5 ), MaxCapacity : pointy . Int32 ( 10 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\CreateMoldModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e createMoldModelMaster ( ( new CreateMoldModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"mold-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withFormModelName ( \"formModel-0001\" ) -\u003e withInitialMaxCapacity ( 5 ) -\u003e withMaxCapacity ( 10 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.CreateMoldModelMasterRequest ; import io.gs2.formation.result.CreateMoldModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { CreateMoldModelMasterResult result = client . createMoldModelMaster ( new CreateMoldModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"mold-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withFormModelName ( \"formModel-0001\" ) . withInitialMaxCapacity ( 5 ) . withMaxCapacity ( 10 ) ); MoldModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . CreateMoldModelMasterResult \u003e asyncResult = null ; yield return client . CreateMoldModelMaster ( new Gs2 . Gs2Formation . Request . CreateMoldModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"mold-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithFormModelName ( \"formModel-0001\" ) . WithInitialMaxCapacity ( 5 ) . WithMaxCapacity ( 10 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . createMoldModelMaster ( new Gs2Formation . CreateMoldModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"mold-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withFormModelName ( \"formModel-0001\" ) . withInitialMaxCapacity ( 5 ) . withMaxCapacity ( 10 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . create_mold_model_master ( formation . CreateMoldModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'mold-0001' ) . with_description ( None ) . with_metadata ( None ) . with_form_model_name ( 'formModel-0001' ) . with_initial_max_capacity ( 5 ) . with_max_capacity ( 10 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.create_mold_model_master ({ namespaceName = \"namespace-0001\" , name = \"mold-0001\" , description = nil , metadata = nil , formModelName = \"formModel-0001\" , initialMaxCapacity = 5 , maxCapacity = 10 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.create_mold_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"mold-0001\" , description = nil , metadata = nil , formModelName = \"formModel-0001\" , initialMaxCapacity = 5 , maxCapacity = 10 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMoldModelMaster 폼 저장 영역 마스터 조회 이름을 지정하여 특정한 편집 가능한 폼 저장 영역 마스터의 상세 정보를 조회합니다. 활성화 전의 마스터 정의를 열람·편집하는 데 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item MoldModelMaster 폼 저장 영역 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetMoldModelMaster ( \u0026 formation . GetMoldModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetMoldModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getMoldModelMaster ( ( new GetMoldModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetMoldModelMasterRequest ; import io.gs2.formation.result.GetMoldModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetMoldModelMasterResult result = client . getMoldModelMaster ( new GetMoldModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); MoldModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetMoldModelMasterResult \u003e asyncResult = null ; yield return client . GetMoldModelMaster ( new Gs2 . Gs2Formation . Request . GetMoldModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMoldModelName ( \"mold-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getMoldModelMaster ( new Gs2Formation . GetMoldModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_mold_model_master ( formation . GetMoldModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mold_model_name ( 'mold-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_mold_model_master ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_mold_model_master_async ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateMoldModelMaster 폼 저장 영역 마스터 갱신 기존 폼 저장 영역 마스터의 설명, 메타데이터, 폼 모델 참조, 초기 최대 용량, 최대 용량을 갱신합니다. 저장 영역 모델 이름은 생성 후 변경할 수 없습니다. 변경 사항은 CurrentFormMaster API에서 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. formModelName string  ~ 128자 폼 모델 이름 initialMaxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 초기 캐파시티 이 저장 영역에서 각 플레이어가 이용할 수 있는 기본 폼 저장 슬롯 수입니다. 예를 들어 3으로 설정하면 플레이어는 초기 상태에서 최대 3개의 서로 다른 편성(예: 「불 속성 파티」「물 속성 파티」「바람 속성 파티」)을 저장할 수 있습니다. 플레이어별로 maxCapacity까지 확장할 수 있습니다. maxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 최대 캐파시티 이 저장 영역에서 플레이어별 폼 저장 슬롯 수의 절대적인 상한입니다. 캐파시티 확장 조작을 수행하더라도 캐파시티는 이 값을 초과할 수 없습니다. initialMaxCapacity 이상의 값이어야 합니다. Result 타입 설명 item MoldModelMaster 갱신한 폼 저장 영역 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . UpdateMoldModelMaster ( \u0026 formation . UpdateMoldModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), Description : nil , Metadata : nil , FormModelName : pointy . String ( \"formModel-0001\" ), InitialMaxCapacity : pointy . Int32 ( 5 ), MaxCapacity : pointy . Int32 ( 15 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\UpdateMoldModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e updateMoldModelMaster ( ( new UpdateMoldModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withFormModelName ( \"formModel-0001\" ) -\u003e withInitialMaxCapacity ( 5 ) -\u003e withMaxCapacity ( 15 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.UpdateMoldModelMasterRequest ; import io.gs2.formation.result.UpdateMoldModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { UpdateMoldModelMasterResult result = client . updateMoldModelMaster ( new UpdateMoldModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withFormModelName ( \"formModel-0001\" ) . withInitialMaxCapacity ( 5 ) . withMaxCapacity ( 15 ) ); MoldModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . UpdateMoldModelMasterResult \u003e asyncResult = null ; yield return client . UpdateMoldModelMaster ( new Gs2 . Gs2Formation . Request . UpdateMoldModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMoldModelName ( \"mold-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithFormModelName ( \"formModel-0001\" ) . WithInitialMaxCapacity ( 5 ) . WithMaxCapacity ( 15 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . updateMoldModelMaster ( new Gs2Formation . UpdateMoldModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withFormModelName ( \"formModel-0001\" ) . withInitialMaxCapacity ( 5 ) . withMaxCapacity ( 15 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . update_mold_model_master ( formation . UpdateMoldModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mold_model_name ( 'mold-0001' ) . with_description ( None ) . with_metadata ( None ) . with_form_model_name ( 'formModel-0001' ) . with_initial_max_capacity ( 5 ) . with_max_capacity ( 15 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.update_mold_model_master ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , description = nil , metadata = nil , formModelName = \"formModel-0001\" , initialMaxCapacity = 5 , maxCapacity = 15 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.update_mold_model_master_async ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , description = nil , metadata = nil , formModelName = \"formModel-0001\" , initialMaxCapacity = 5 , maxCapacity = 15 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMoldModelMaster 폼 저장 영역 마스터 삭제 편집 가능한 폼 저장 영역 마스터 정의를 삭제합니다. 마스터 데이터만 영향을 받으며, 현재 활성화(공개)되어 있는 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item MoldModelMaster 삭제한 폼 저장 영역 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeleteMoldModelMaster ( \u0026 formation . DeleteMoldModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MoldModelName : pointy . String ( \"mold-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeleteMoldModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deleteMoldModelMaster ( ( new DeleteMoldModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMoldModelName ( \"mold-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeleteMoldModelMasterRequest ; import io.gs2.formation.result.DeleteMoldModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeleteMoldModelMasterResult result = client . deleteMoldModelMaster ( new DeleteMoldModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); MoldModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeleteMoldModelMasterResult \u003e asyncResult = null ; yield return client . DeleteMoldModelMaster ( new Gs2 . Gs2Formation . Request . DeleteMoldModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMoldModelName ( \"mold-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deleteMoldModelMaster ( new Gs2Formation . DeleteMoldModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMoldModelName ( \"mold-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_mold_model_master ( formation . DeleteMoldModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mold_model_name ( 'mold-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_mold_model_master ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.delete_mold_model_master_async ({ namespaceName = \"namespace-0001\" , moldModelName = \"mold-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describePropertyFormModelMasters 프로퍼티 폼 모델 마스터 목록 조회 이름 접두사 필터링이 가능한, 편집 가능한 프로퍼티 폼 모델 마스터의 페이지네이션 목록을 조회합니다. 프로퍼티 폼 모델 마스터는 프로퍼티 폼의 슬롯 구조를 정의합니다. 마스터에 대한 변경 사항은 CurrentFormMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 프로퍼티 폼 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 폼 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DescribePropertyFormModelMasters ( \u0026 formation . DescribePropertyFormModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DescribePropertyFormModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e describePropertyFormModelMasters ( ( new DescribePropertyFormModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DescribePropertyFormModelMastersRequest ; import io.gs2.formation.result.DescribePropertyFormModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DescribePropertyFormModelMastersResult result = client . describePropertyFormModelMasters ( new DescribePropertyFormModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List PropertyFormModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DescribePropertyFormModelMastersResult \u003e asyncResult = null ; yield return client . DescribePropertyFormModelMasters ( new Gs2 . Gs2Formation . Request . DescribePropertyFormModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . describePropertyFormModelMasters ( new Gs2Formation . DescribePropertyFormModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . describe_property_form_model_masters ( formation . DescribePropertyFormModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.describe_property_form_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'formation' ) api_result_handler = client.describe_property_form_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createPropertyFormModelMaster 프로퍼티 폼 모델 마스터 신규 작성 이름과 슬롯 정의를 가진 새로운 편집 가능한 프로퍼티 폼 모델 마스터 정의를 생성합니다. 프로퍼티 폼 모델은 폼 모델과 유사하지만, 폼 저장 영역 내 인덱스가 아닌 커스텀 프로퍼티 ID로 식별되는 프로퍼티 폼에 사용됩니다. 변경 사항은 CurrentFormMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 목록 이 프로퍼티 폼의 슬롯 정의를 순서대로 나열한 목록입니다. 캐파시티에 의해 폼 수가 제한되는 Mold/Form과 달리, 프로퍼티 폼은 프로퍼티 ID로 식별되며 보유하는 리소스마다 존재할 수 있습니다. 슬롯 이름은 폼 내에서 고유해야 합니다. Result 타입 설명 item PropertyFormModelMaster 생성한 폼 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . CreatePropertyFormModelMaster ( \u0026 formation . CreatePropertyFormModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"form-0001\" ), Description : nil , Metadata : nil , Slots : [] formation . SlotModel { formation . SlotModel { Name : pointy . String ( \"slot-0001\" ), PropertyRegex : pointy . String ( \".*\" ), }, formation . SlotModel { Name : pointy . String ( \"slot-0002\" ), PropertyRegex : pointy . String ( \".*\" ), Metadata : pointy . String ( \"METADATA_0002\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\CreatePropertyFormModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e createPropertyFormModelMaster ( ( new CreatePropertyFormModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"form-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withSlots ([ ( new \\Gs2\\Formation\\Model\\SlotModel ()) -\u003e withName ( \"slot-0001\" ) -\u003e withPropertyRegex ( \".*\" ), ( new \\Gs2\\Formation\\Model\\SlotModel ()) -\u003e withName ( \"slot-0002\" ) -\u003e withPropertyRegex ( \".*\" ) -\u003e withMetadata ( \"METADATA_0002\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.CreatePropertyFormModelMasterRequest ; import io.gs2.formation.result.CreatePropertyFormModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { CreatePropertyFormModelMasterResult result = client . createPropertyFormModelMaster ( new CreatePropertyFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"form-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withSlots ( Arrays . asList ( new io . gs2 . formation . model . SlotModel () . withName ( \"slot-0001\" ) . withPropertyRegex ( \".*\" ), new io . gs2 . formation . model . SlotModel () . withName ( \"slot-0002\" ) . withPropertyRegex ( \".*\" ) . withMetadata ( \"METADATA_0002\" ) )) ); PropertyFormModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . CreatePropertyFormModelMasterResult \u003e asyncResult = null ; yield return client . CreatePropertyFormModelMaster ( new Gs2 . Gs2Formation . Request . CreatePropertyFormModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"form-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithSlots ( new Gs2 . Gs2Formation . Model . SlotModel [] { new Gs2 . Gs2Formation . Model . SlotModel () . WithName ( \"slot-0001\" ) . WithPropertyRegex ( \".*\" ), new Gs2 . Gs2Formation . Model . SlotModel () . WithName ( \"slot-0002\" ) . WithPropertyRegex ( \".*\" ) . WithMetadata ( \"METADATA_0002\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . createPropertyFormModelMaster ( new Gs2Formation . CreatePropertyFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"form-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withSlots ([ new Gs2Formation . model . SlotModel () . withName ( \"slot-0001\" ) . withPropertyRegex ( \".*\" ), new Gs2Formation . model . SlotModel () . withName ( \"slot-0002\" ) . withPropertyRegex ( \".*\" ) . withMetadata ( \"METADATA_0002\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . create_property_form_model_master ( formation . CreatePropertyFormModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'form-0001' ) . with_description ( None ) . with_metadata ( None ) . with_slots ([ formation . SlotModel () . with_name ( 'slot-0001' ) . with_property_regex ( '.*' ), formation . SlotModel () . with_name ( 'slot-0002' ) . with_property_regex ( '.*' ) . with_metadata ( 'METADATA_0002' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.create_property_form_model_master ({ namespaceName = \"namespace-0001\" , name = \"form-0001\" , description = nil , metadata = nil , slots = { { name = \"slot-0001\" , propertyRegex = \".*\" , }, { name = \"slot-0002\" , propertyRegex = \".*\" , metadata = \"METADATA_0002\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.create_property_form_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"form-0001\" , description = nil , metadata = nil , slots = { { name = \"slot-0001\" , propertyRegex = \".*\" , }, { name = \"slot-0002\" , propertyRegex = \".*\" , metadata = \"METADATA_0002\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getPropertyFormModelMaster 프로퍼티 폼 모델 마스터 조회 이름을 지정하여 특정 편집 가능한 프로퍼티 폼 모델 마스터의 상세 정보를 조회합니다. 활성화 전 마스터 정의의 열람·편집에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item PropertyFormModelMaster 폼 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . GetPropertyFormModelMaster ( \u0026 formation . GetPropertyFormModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\GetPropertyFormModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e getPropertyFormModelMaster ( ( new GetPropertyFormModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.GetPropertyFormModelMasterRequest ; import io.gs2.formation.result.GetPropertyFormModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { GetPropertyFormModelMasterResult result = client . getPropertyFormModelMaster ( new GetPropertyFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) ); PropertyFormModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . GetPropertyFormModelMasterResult \u003e asyncResult = null ; yield return client . GetPropertyFormModelMaster ( new Gs2 . Gs2Formation . Request . GetPropertyFormModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . getPropertyFormModelMaster ( new Gs2Formation . GetPropertyFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . get_property_form_model_master ( formation . GetPropertyFormModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_property_form_model_name ( 'form-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.get_property_form_model_master ({ namespaceName = \"namespace-0001\" , propertyFormModelName = \"form-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.get_property_form_model_master_async ({ namespaceName = \"namespace-0001\" , propertyFormModelName = \"form-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updatePropertyFormModelMaster 프로퍼티 폼 모델 마스터 업데이트 기존 프로퍼티 폼 모델 마스터의 설명, 메타데이터, 슬롯 정의를 업데이트합니다. 프로퍼티 폼 모델 이름은 생성 후 변경할 수 없습니다. 변경 사항은 CurrentFormMaster API로 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 목록 이 프로퍼티 폼의 슬롯 정의를 순서대로 나열한 목록입니다. 캐파시티에 의해 폼 수가 제한되는 Mold/Form과 달리, 프로퍼티 폼은 프로퍼티 ID로 식별되며 보유하는 리소스마다 존재할 수 있습니다. 슬롯 이름은 폼 내에서 고유해야 합니다. Result 타입 설명 item PropertyFormModelMaster 갱신한 폼 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . UpdatePropertyFormModelMaster ( \u0026 formation . UpdatePropertyFormModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"FORM_0001\" ), Slots : [] formation . SlotModel { formation . SlotModel { Name : pointy . String ( \"slot-1101\" ), }, formation . SlotModel { Name : pointy . String ( \"slot-1102\" ), Metadata : pointy . String ( \"METADATA_1102\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\UpdatePropertyFormModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e updatePropertyFormModelMaster ( ( new UpdatePropertyFormModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"FORM_0001\" ) -\u003e withSlots ([ ( new \\Gs2\\Formation\\Model\\SlotModel ()) -\u003e withName ( \"slot-1101\" ), ( new \\Gs2\\Formation\\Model\\SlotModel ()) -\u003e withName ( \"slot-1102\" ) -\u003e withMetadata ( \"METADATA_1102\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.UpdatePropertyFormModelMasterRequest ; import io.gs2.formation.result.UpdatePropertyFormModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { UpdatePropertyFormModelMasterResult result = client . updatePropertyFormModelMaster ( new UpdatePropertyFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"FORM_0001\" ) . withSlots ( Arrays . asList ( new io . gs2 . formation . model . SlotModel () . withName ( \"slot-1101\" ), new io . gs2 . formation . model . SlotModel () . withName ( \"slot-1102\" ) . withMetadata ( \"METADATA_1102\" ) )) ); PropertyFormModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . UpdatePropertyFormModelMasterResult \u003e asyncResult = null ; yield return client . UpdatePropertyFormModelMaster ( new Gs2 . Gs2Formation . Request . UpdatePropertyFormModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"FORM_0001\" ) . WithSlots ( new Gs2 . Gs2Formation . Model . SlotModel [] { new Gs2 . Gs2Formation . Model . SlotModel () . WithName ( \"slot-1101\" ), new Gs2 . Gs2Formation . Model . SlotModel () . WithName ( \"slot-1102\" ) . WithMetadata ( \"METADATA_1102\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . updatePropertyFormModelMaster ( new Gs2Formation . UpdatePropertyFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"FORM_0001\" ) . withSlots ([ new Gs2Formation . model . SlotModel () . withName ( \"slot-1101\" ), new Gs2Formation . model . SlotModel () . withName ( \"slot-1102\" ) . withMetadata ( \"METADATA_1102\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . update_property_form_model_master ( formation . UpdatePropertyFormModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_property_form_model_name ( 'form-0001' ) . with_description ( 'description1' ) . with_metadata ( 'FORM_0001' ) . with_slots ([ formation . SlotModel () . with_name ( 'slot-1101' ), formation . SlotModel () . with_name ( 'slot-1102' ) . with_metadata ( 'METADATA_1102' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.update_property_form_model_master ({ namespaceName = \"namespace-0001\" , propertyFormModelName = \"form-0001\" , description = \"description1\" , metadata = \"FORM_0001\" , slots = { { name = \"slot-1101\" , }, { name = \"slot-1102\" , metadata = \"METADATA_1102\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.update_property_form_model_master_async ({ namespaceName = \"namespace-0001\" , propertyFormModelName = \"form-0001\" , description = \"description1\" , metadata = \"FORM_0001\" , slots = { { name = \"slot-1101\" , }, { name = \"slot-1102\" , metadata = \"METADATA_1102\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deletePropertyFormModelMaster 프로퍼티 폼 모델 마스터 삭제 편집 가능한 프로퍼티 폼 모델 마스터 정의를 삭제합니다. 마스터 데이터만 영향을 받으며, 현재 활성화(공개)되어 있는 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item PropertyFormModelMaster 삭제한 폼 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/formation\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := formation . Gs2FormationRestClient { Session : \u0026 session , } result , err := client . DeletePropertyFormModelMaster ( \u0026 formation . DeletePropertyFormModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PropertyFormModelName : pointy . String ( \"form-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Formation\\Gs2FormationRestClient ; use Gs2\\Formation\\Request\\DeletePropertyFormModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FormationRestClient ( $session ); try { $result = $client -\u003e deletePropertyFormModelMaster ( ( new DeletePropertyFormModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPropertyFormModelName ( \"form-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.formation.rest.Gs2FormationRestClient ; import io.gs2.formation.request.DeletePropertyFormModelMasterRequest ; import io.gs2.formation.result.DeletePropertyFormModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FormationRestClient client = new Gs2FormationRestClient ( session ); try { DeletePropertyFormModelMasterResult result = client . deletePropertyFormModelMaster ( new DeletePropertyFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) ); PropertyFormModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FormationRestClient ( session ); AsyncResult Gs2 . Gs2Formation . Result . DeletePropertyFormModelMasterResult \u003e asyncResult = null ; yield return client . DeletePropertyFormModelMaster ( new Gs2 . Gs2Formation . Request . DeletePropertyFormModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPropertyFormModelName ( \"form-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Formation from '@/gs2/formation' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Formation . Gs2FormationRestClient ( session ); try { const result = await client . deletePropertyFormModelMaster ( new Gs2Formation . DeletePropertyFormModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyFormModelName ( \"form-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import formation session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = formation . Gs2FormationRestClient ( session ) try : result = client . delete_property_form_model_master ( formation . DeletePropertyFormModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_property_form_model_name ( 'form-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'formation' ) api_result = client.delete_property_form_model_master ({ namespaceName = \"namespace-0001\" , propertyFormModelName = \"form-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'formation' ) api_result_handler = client.delete_property_form_model_master_async ({ namespaceName = \"namespace-0001\" , propertyFormModelName = \"form-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Formation SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Formation SDK API 레퍼런스","url":"/ko/api_reference/formation/sdk/"},{"content":"모델 Output 스테이지 업데이트 진행 상황 출력 스테이지 버전 업데이트 작업 중에 생성되는 로그 엔트리를 나타냅니다. 각 출력은 업데이트 프로세스의 단계나 이벤트를 기록합니다. 출력은 30일 후 자동으로 정리(클린업)됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 outputId string ※ ~ 1024자 스테이지 갱신 진행 상황 출력 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 출력명 스테이지 업데이트 진행 상황 출력의 고유한 이름을 보관합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 스테이지 업데이트 진행 상황 출력을 식별하는 데 사용됩니다. text string  ~ 1048576자 텍스트 스테이지 업데이트 프로세스 중 특정 단계나 이벤트를 기술하는 로그 메시지 내용입니다. 버전 전환 작업의 상태 정보, 오류 상세, 진행 지표 등을 포함하는 경우가 있습니다. createdAt long ※ 현재 시각 일시 revision long 0 0 ~ 9223372036854775805 리비전 Stage 스테이지 스테이지란 프로그램 버전을 고정하는 환경 정보입니다. 하나의 프로젝트에 대해 여러 개의 스테이지를 가질 수 있습니다. 스테이지는 소스 스테이지를 가지며, 소스 스테이지에서 고정된 버전으로 전환하는 것이 가능합니다. 이 구조를 이용하면 먼저 dev 스테이지에 최신 버전을 반영하여 개발자 레벨에서 동작을 확인하고, 문제가 없어 보이면 dev 스테이지를 소스 스테이지로 하는 stg 스테이지에 반영하며, QA를 마치면 stg 스테이지를 소스 스테이지로 하는 live 스테이지에 반영하는 방식의 운영이 가능해집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 stageId string ※ ~ 1024자 스테이지 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스테이지명 이 스테이지 환경의 식별자입니다(예: “dev”, “stg”, “live”). sourceStageName string ~ 128자 소스 스테이지명 이 스테이지가 버전 설정을 가져오는 원본 스테이지명입니다. 업데이트 시 소스 스테이지에서 고정된 버전이 채택됩니다. 예를 들어, “stg” 스테이지의 소스를 “dev\"로, “live” 스테이지의 소스를 “stg\"로 설정합니다. 지정하지 않은 경우 최신 버전이 직접 사용됩니다. sortNumber int  0 ~ 100 정렬 번호 스테이지의 표시 순서를 제어하기 위한 숫자입니다. 작은 숫자가 먼저 표시됩니다. 스테이지를 논리적인 순서로 나열하는 데 편리합니다(예: dev=0, stg=50, live=100). status 문자열 열거형 enum {   “Active”,   “Updating”,   “UpdateFailed” } “Active” 상태 스테이지의 현재 상태입니다. “Active\"는 고정된 버전으로 요청을 처리하고 있는 정상 운영 상태를 나타냅니다. “Updating\"은 버전 전환이 진행 중임을 나타냅니다. “UpdateFailed\"는 버전 업데이트 중 오류가 발생하여 수동 대응이 필요할 수 있음을 나타냅니다. 정의 설명 Active 유효 Updating 업데이트 중 UpdateFailed 업데이트 실패 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Microservice 마이크로서비스 GS2 마이크로서비스 컴포넌트를 나타냅니다. 각 마이크로서비스는 이름과 버전을 가지며, 특정 스테이지에 고정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 마이크로서비스명 이 마이크로서비스의 식별자입니다. version string  ~ 32자 마이크로서비스 버전 이 마이크로서비스의 버전 식별자입니다. 스테이지 배포 시 마이크로서비스를 특정 버전에 고정하여, 환경 간에 일관된 동작을 보장하는 데 사용됩니다. 메서드 describeOutputs 스테이지 업데이트 진행 상황 출력 목록 취득 특정 스테이지의 업데이트 작업(프로모트/롤백)에 대한 출력 로그 엔트리의 페이지네이션 목록을 취득합니다. 출력 엔트리는 프로모트 또는 롤백 프로세스의 각 단계(시작, 단계 완료, 최종 성공 또는 실패 메시지)에서 생성됩니다. 이 API를 사용하여 진행 중인 배포의 진행 상황을 모니터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stageName string  ~ 128자 스테이지명 이 스테이지 환경의 식별자입니다(예: “dev”, “stg”, “live”). pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스테이지 업데이트 진행 상황 출력 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/freeze\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := freeze . Gs2FreezeRestClient { Session : \u0026 session , } result , err := client . DescribeOutputs ( \u0026 freeze . DescribeOutputsRequest { StageName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Freeze\\Gs2FreezeRestClient ; use Gs2\\Freeze\\Request\\DescribeOutputsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FreezeRestClient ( $session ); try { $result = $client -\u003e describeOutputs ( ( new DescribeOutputsRequest ()) -\u003e withStageName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.freeze.rest.Gs2FreezeRestClient ; import io.gs2.freeze.request.DescribeOutputsRequest ; import io.gs2.freeze.result.DescribeOutputsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FreezeRestClient client = new Gs2FreezeRestClient ( session ); try { DescribeOutputsResult result = client . describeOutputs ( new DescribeOutputsRequest () . withStageName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Output \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FreezeRestClient ( session ); AsyncResult Gs2 . Gs2Freeze . Result . DescribeOutputsResult \u003e asyncResult = null ; yield return client . DescribeOutputs ( new Gs2 . Gs2Freeze . Request . DescribeOutputsRequest () . WithStageName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Freeze from '@/gs2/freeze' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Freeze . Gs2FreezeRestClient ( session ); try { const result = await client . describeOutputs ( new Gs2Freeze . DescribeOutputsRequest () . withStageName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import freeze session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = freeze . Gs2FreezeRestClient ( session ) try : result = client . describe_outputs ( freeze . DescribeOutputsRequest () . with_stage_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'freeze' ) api_result = client.describe_outputs ({ stageName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'freeze' ) api_result_handler = client.describe_outputs_async ({ stageName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getOutput 스테이지 업데이트 진행 상황 출력 취득 스테이지의 업데이트 작업에 대한 특정 출력 로그 엔트리를 취득합니다. 각 출력 엔트리에는 프로모트 또는 롤백 프로세스의 해당 시점에서 발생한 내용을 설명하는 텍스트 메시지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stageName string  ~ 128자 스테이지명 이 스테이지 환경의 식별자입니다(예: “dev”, “stg”, “live”). outputName string  UUID ~ 36자 출력명 스테이지 업데이트 진행 상황 출력의 고유한 이름을 보관합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 스테이지 업데이트 진행 상황 출력을 식별하는 데 사용됩니다. Result 타입 설명 item Output 스테이지 업데이트 진행 상황 출력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/freeze\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := freeze . Gs2FreezeRestClient { Session : \u0026 session , } result , err := client . GetOutput ( \u0026 freeze . GetOutputRequest { StageName : pointy . String ( \"namespace-0001\" ), OutputName : pointy . String ( \"output-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Freeze\\Gs2FreezeRestClient ; use Gs2\\Freeze\\Request\\GetOutputRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FreezeRestClient ( $session ); try { $result = $client -\u003e getOutput ( ( new GetOutputRequest ()) -\u003e withStageName ( \"namespace-0001\" ) -\u003e withOutputName ( \"output-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.freeze.rest.Gs2FreezeRestClient ; import io.gs2.freeze.request.GetOutputRequest ; import io.gs2.freeze.result.GetOutputResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FreezeRestClient client = new Gs2FreezeRestClient ( session ); try { GetOutputResult result = client . getOutput ( new GetOutputRequest () . withStageName ( \"namespace-0001\" ) . withOutputName ( \"output-0001\" ) ); Output item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FreezeRestClient ( session ); AsyncResult Gs2 . Gs2Freeze . Result . GetOutputResult \u003e asyncResult = null ; yield return client . GetOutput ( new Gs2 . Gs2Freeze . Request . GetOutputRequest () . WithStageName ( \"namespace-0001\" ) . WithOutputName ( \"output-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Freeze from '@/gs2/freeze' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Freeze . Gs2FreezeRestClient ( session ); try { const result = await client . getOutput ( new Gs2Freeze . GetOutputRequest () . withStageName ( \"namespace-0001\" ) . withOutputName ( \"output-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import freeze session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = freeze . Gs2FreezeRestClient ( session ) try : result = client . get_output ( freeze . GetOutputRequest () . with_stage_name ( 'namespace-0001' ) . with_output_name ( 'output-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'freeze' ) api_result = client.get_output ({ stageName = \"namespace-0001\" , outputName = \"output-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'freeze' ) api_result_handler = client.get_output_async ({ stageName = \"namespace-0001\" , outputName = \"output-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStages 스테이지 목록 취득 요청한 사용자가 소유한 배포 스테이지의 목록을 취득합니다. 각 스테이지는 고유한 마이크로서비스 버전 구성을 가진 환경(예: 개발, 스테이징, 프로덕션)을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 Result 타입 설명 items List 스테이지 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/freeze\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := freeze . Gs2FreezeRestClient { Session : \u0026 session , } result , err := client . DescribeStages ( \u0026 freeze . DescribeStagesRequest { } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Freeze\\Gs2FreezeRestClient ; use Gs2\\Freeze\\Request\\DescribeStagesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FreezeRestClient ( $session ); try { $result = $client -\u003e describeStages ( ( new DescribeStagesRequest ()) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.freeze.rest.Gs2FreezeRestClient ; import io.gs2.freeze.request.DescribeStagesRequest ; import io.gs2.freeze.result.DescribeStagesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FreezeRestClient client = new Gs2FreezeRestClient ( session ); try { DescribeStagesResult result = client . describeStages ( new DescribeStagesRequest () ); List Stage \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FreezeRestClient ( session ); AsyncResult Gs2 . Gs2Freeze . Result . DescribeStagesResult \u003e asyncResult = null ; yield return client . DescribeStages ( new Gs2 . Gs2Freeze . Request . DescribeStagesRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Freeze from '@/gs2/freeze' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Freeze . Gs2FreezeRestClient ( session ); try { const result = await client . describeStages ( new Gs2Freeze . DescribeStagesRequest () ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import freeze session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = freeze . Gs2FreezeRestClient ( session ) try : result = client . describe_stages ( freeze . DescribeStagesRequest () ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'freeze' ) api_result = client.describe_stages ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'freeze' ) api_result_handler = client.describe_stages_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getStage 스테이지 취득 특정 배포 스테이지의 상세 정보를 취득합니다. 소스 마이크로서비스 버전(이전 단계 스테이지의 버전)과 현재 배포되어 있는 마이크로서비스 버전을 포함합니다. 소스 버전은 다음 프로모션 시 적용될 버전 구성을 나타내며, 현재 버전은 실제로 배포되어 있는 버전을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stageName string  ~ 128자 스테이지명 이 스테이지 환경의 식별자입니다(예: “dev”, “stg”, “live”). Result 타입 설명 item Stage 스테이지 source List 소스 마이크로서비스 버전 리스트 current List 현재 적용되어 있는 마이크로서비스 버전 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/freeze\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := freeze . Gs2FreezeRestClient { Session : \u0026 session , } result , err := client . GetStage ( \u0026 freeze . GetStageRequest { StageName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item source := result . Source current := result . Current use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Freeze\\Gs2FreezeRestClient ; use Gs2\\Freeze\\Request\\GetStageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FreezeRestClient ( $session ); try { $result = $client -\u003e getStage ( ( new GetStageRequest ()) -\u003e withStageName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); $source = $result -\u003e getSource (); $current = $result -\u003e getCurrent (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.freeze.rest.Gs2FreezeRestClient ; import io.gs2.freeze.request.GetStageRequest ; import io.gs2.freeze.result.GetStageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FreezeRestClient client = new Gs2FreezeRestClient ( session ); try { GetStageResult result = client . getStage ( new GetStageRequest () . withStageName ( \"namespace-0001\" ) ); Stage item = result . getItem (); List Microservice \u003e source = result . getSource (); List Microservice \u003e current = result . getCurrent (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FreezeRestClient ( session ); AsyncResult Gs2 . Gs2Freeze . Result . GetStageResult \u003e asyncResult = null ; yield return client . GetStage ( new Gs2 . Gs2Freeze . Request . GetStageRequest () . WithStageName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var source = result . Source ; var current = result . Current ; import Gs2Core from '@/gs2/core' ; import * as Gs2Freeze from '@/gs2/freeze' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Freeze . Gs2FreezeRestClient ( session ); try { const result = await client . getStage ( new Gs2Freeze . GetStageRequest () . withStageName ( \"namespace-0001\" ) ); const item = result . getItem (); const source = result . getSource (); const current = result . getCurrent (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import freeze session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = freeze . Gs2FreezeRestClient ( session ) try : result = client . get_stage ( freeze . GetStageRequest () . with_stage_name ( 'namespace-0001' ) ) item = result . item source = result . source current = result . current except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'freeze' ) api_result = client.get_stage ({ stageName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; source = result.source ; current = result.current ; client = gs2 ( 'freeze' ) api_result_handler = client.get_stage_async ({ stageName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; source = result.source ; current = result.current ; promoteStage 스테이지 프로모트 소스 스테이지의 마이크로서비스 버전을 이 스테이지에 적용하고, 비동기 배포 프로세스를 시작합니다. 처리 중에는 스테이지 상태가 Updating으로 변경되며, 성공 시 Active, 실패 시 UpdateFailed가 됩니다. 진행 상황은 Output API로 모니터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stageName string  ~ 128자 스테이지명 이 스테이지 환경의 식별자입니다(예: “dev”, “stg”, “live”). Result 타입 설명 item Stage 업데이트한 스테이지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/freeze\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := freeze . Gs2FreezeRestClient { Session : \u0026 session , } result , err := client . PromoteStage ( \u0026 freeze . PromoteStageRequest { StageName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Freeze\\Gs2FreezeRestClient ; use Gs2\\Freeze\\Request\\PromoteStageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FreezeRestClient ( $session ); try { $result = $client -\u003e promoteStage ( ( new PromoteStageRequest ()) -\u003e withStageName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.freeze.rest.Gs2FreezeRestClient ; import io.gs2.freeze.request.PromoteStageRequest ; import io.gs2.freeze.result.PromoteStageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FreezeRestClient client = new Gs2FreezeRestClient ( session ); try { PromoteStageResult result = client . promoteStage ( new PromoteStageRequest () . withStageName ( \"namespace-0001\" ) ); Stage item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FreezeRestClient ( session ); AsyncResult Gs2 . Gs2Freeze . Result . PromoteStageResult \u003e asyncResult = null ; yield return client . PromoteStage ( new Gs2 . Gs2Freeze . Request . PromoteStageRequest () . WithStageName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Freeze from '@/gs2/freeze' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Freeze . Gs2FreezeRestClient ( session ); try { const result = await client . promoteStage ( new Gs2Freeze . PromoteStageRequest () . withStageName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import freeze session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = freeze . Gs2FreezeRestClient ( session ) try : result = client . promote_stage ( freeze . PromoteStageRequest () . with_stage_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'freeze' ) api_result = client.promote_stage ({ stageName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'freeze' ) api_result_handler = client.promote_stage_async ({ stageName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; rollbackStage 스테이지 롤백 스테이지를 이전에 배포되어 있던 마이크로서비스 버전으로 되돌리고, 비동기 롤백 프로세스를 시작합니다. 처리 중에는 스테이지 상태가 Updating으로 변경되며, 성공 시 Active, 실패 시 UpdateFailed가 됩니다. 진행 상황은 Output API로 모니터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 stageName string  ~ 128자 스테이지명 이 스테이지 환경의 식별자입니다(예: “dev”, “stg”, “live”). Result 타입 설명 item Stage 업데이트한 스테이지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/freeze\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := freeze . Gs2FreezeRestClient { Session : \u0026 session , } result , err := client . RollbackStage ( \u0026 freeze . RollbackStageRequest { StageName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Freeze\\Gs2FreezeRestClient ; use Gs2\\Freeze\\Request\\RollbackStageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FreezeRestClient ( $session ); try { $result = $client -\u003e rollbackStage ( ( new RollbackStageRequest ()) -\u003e withStageName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.freeze.rest.Gs2FreezeRestClient ; import io.gs2.freeze.request.RollbackStageRequest ; import io.gs2.freeze.result.RollbackStageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FreezeRestClient client = new Gs2FreezeRestClient ( session ); try { RollbackStageResult result = client . rollbackStage ( new RollbackStageRequest () . withStageName ( \"namespace-0001\" ) ); Stage item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FreezeRestClient ( session ); AsyncResult Gs2 . Gs2Freeze . Result . RollbackStageResult \u003e asyncResult = null ; yield return client . RollbackStage ( new Gs2 . Gs2Freeze . Request . RollbackStageRequest () . WithStageName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Freeze from '@/gs2/freeze' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Freeze . Gs2FreezeRestClient ( session ); try { const result = await client . rollbackStage ( new Gs2Freeze . RollbackStageRequest () . withStageName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import freeze session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = freeze . Gs2FreezeRestClient ( session ) try : result = client . rollback_stage ( freeze . RollbackStageRequest () . with_stage_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'freeze' ) api_result = client.rollback_stage ({ stageName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'freeze' ) api_result_handler = client.rollback_stage_async ({ stageName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Freeze SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Freeze SDK API 레퍼런스","url":"/ko/api_reference/freeze/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 친구 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. followScript ScriptSetting 팔로우되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - follow unfollowScript ScriptSetting 언팔로우되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - unfollow sendRequestScript ScriptSetting 친구 요청을 발행했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - sendRequest cancelRequestScript ScriptSetting 친구 요청을 취소했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - cancelRequest acceptRequestScript ScriptSetting 친구 요청을 승낙했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acceptRequest rejectRequestScript ScriptSetting 친구 요청을 거부했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - rejectRequest deleteFriendScript ScriptSetting 친구를 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteFriend updateProfileScript ScriptSetting 프로필을 갱신했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - updateProfile followNotification NotificationSetting 팔로우되었을 때의 푸시 통지 다른 플레이어에게 팔로우되었을 때 푸시 통지를 전송하는 설정입니다. 팔로우된 플레이어가 GS2-Gateway를 통해 실시간으로 통지를 받을 수 있습니다. receiveRequestNotification NotificationSetting  친구 요청을 받았을 때의 푸시 통지 다른 플레이어로부터 친구 요청을 받았을 때 푸시 통지를 전송하는 설정입니다. 수신자가 GS2-Gateway를 통해 신속하게 응답할 수 있도록 합니다. cancelRequestNotification NotificationSetting  받은 친구 요청이 취소되었을 때의 푸시 통지 이전에 받은 친구 요청이 발신자에 의해 취소되었을 때 푸시 통지를 전송하는 설정입니다. 보류 중이던 요청이 더 이상 존재하지 않음을 수신자에게 알립니다. acceptRequestNotification NotificationSetting  친구 요청이 승인되었을 때의 푸시 통지 보낸 친구 요청이 수신자에 의해 승인되었을 때 푸시 통지를 전송하는 설정입니다. 승인 후 두 플레이어가 서로의 친구 목록에 추가됩니다. rejectRequestNotification NotificationSetting  친구 요청이 거부되었을 때의 푸시 통지 보낸 친구 요청이 수신자에 의해 거부되었을 때 푸시 통지를 전송하는 설정입니다. 친구 요청은 보낸 편지함과 받은 편지함 양쪽에서 모두 삭제됩니다. deleteFriendNotification NotificationSetting  친구가 삭제되었을 때의 푸시 통지 다른 플레이어의 친구 목록에서 삭제되었을 때 푸시 통지를 전송하는 설정입니다. 친구 관계는 양쪽 모두에서 해제됩니다. logSetting LogSetting 로그 출력 설정 친구 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 팔로우/언팔로우, 친구 요청, 프로필 갱신의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Profile 프로필 프로필은 게임 플레이어에 관한 정보를 저장합니다. 프로필은 공개 범위별로 설정할 수 있으며, 3가지 종류가 있습니다. friend 친구 관계가 성립된 상대방이 열람 가능한 내용 follow 팔로우하고 있는 상대방이 열람 가능한 내용 public 누구나 열람 가능한 내용 상세 타입 활성화 조건 필수 기본값 값 제한 설명 profileId string ※ ~ 1024자 프로필 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 관계와 상관없이 모든 플레이어에게 표시되는 프로필 정보입니다. 일반적으로 표시 이름, 아바타, 기타 공개 가능한 정보에 사용됩니다. followerProfile string ~ 1024자 팔로워에게 공개되는 프로필 이 사용자를 팔로우하고 있는 플레이어에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보(게임플레이 통계나 상태 메시지 등)를 포함할 수 있습니다. friendProfile string ~ 1024자 친구에게 공개되는 프로필 상호 친구 관계가 성립된 플레이어에게만 표시되는 프로필 정보입니다. 가장 프라이빗한 프로필 수준으로, 연락처나 개인 메시지 등 개인 정보를 공유하기에 적합합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Follow 팔로우 팔로우는 게임 플레이어 간의 단방향 관계입니다. 팔로우는 요청 전송과 동시에 성립됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 followId string ※ ~ 1024자 팔로우 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID targetUserIds List 0 ~ 1000 items 팔로우하고 있는 사용자 ID 목록 이 사용자가 팔로우하고 있는 사용자 ID의 목록입니다. 친구 관계와 달리 팔로우는 단방향이며, 대상 사용자의 승인 없이 즉시 성립됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Friend 친구 친구란 양방향으로 승인된 게임 플레이어 간의 관계입니다. 친구 관계를 성립시키려면 한쪽이 요청을 보내고, 다른 한쪽이 승인해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 friendId string ※ ~ 1024자 친구 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID targetUserIds List 0 ~ 1000 items 친구의 사용자 ID 목록 이 사용자와 상호 친구 관계가 성립된 사용자 ID 목록입니다. 두 사용자 모두 친구 요청 승인 절차를 거쳐야 합니다. 친구를 삭제하면 양쪽 목록에서 항목이 삭제됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SendBox 송신 박스 플레이어가 전송한 친구 요청 목록을 관리합니다. 플레이어가 친구 요청을 전송하면 대상 사용자 ID가 이 송신 박스에 추가됩니다. 발신자는 보류 중인 요청을 취소할 수 있습니다. 동일한 사용자에 대한 중복 요청이나 이미 친구인 사용자에 대한 요청은 거부됩니다. 대상이 승인하거나 거부하면 해당 항목은 이 송신 박스에서 삭제됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 sendBoxId string ※ ~ 1024자 친구 요청 발신함 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID targetUserIds List 0 ~ 1000 items 친구 요청의 대상 사용자 ID 목록 이 사용자가 보류 중인 친구 요청을 전송한 플레이어의 사용자 ID입니다. 각 항목은 대상의 응답을 기다리고 있는 전송 요청을 나타냅니다. 중복 항목 및 이미 친구인 사용자에 대한 요청은 방지됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Inbox 받은 편지함 플레이어가 받은 친구 요청 목록을 관리합니다. 다른 플레이어가 친구 요청을 보내면 해당 사용자 ID가 이 받은 편지함에 추가됩니다. 플레이어는 각 요청을 승인하거나 거부할 수 있습니다. 동일한 사용자로부터의 중복 요청이나 이미 친구인 사용자로부터의 요청은 거부됩니다. 요청을 승인하면 받은 편지함에서 삭제되고, 양쪽 모두 친구 목록에 추가됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inboxId string ※ ~ 1024자 친구 요청 수신함 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID fromUserIds List 0 ~ 1000 items 친구 요청을 보낸 사용자 ID 목록 이 사용자에게 보류 중인 친구 요청을 보낸 플레이어의 사용자 ID입니다. 각 항목은 승인 또는 거부가 가능한 미응답 요청을 나타냅니다. 중복 항목이나 기존 친구로부터의 요청은 방지됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 BlackList 블랙리스트 플레이어가 차단한 사용자의 목록을 관리합니다. 차단된 사용자는 이 플레이어에게 친구 요청을 보내거나 팔로우할 수 없게 되어, 원치 않는 상호작용을 제어하는 메커니즘을 제공합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 blackListId string ※ ~ 1024자 블랙리스트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID targetUserIds List 0 ~ 1000 items 블랙리스트의 사용자 ID 목록 이 플레이어가 차단한 사용자 ID 목록입니다. 차단된 사용자는 이 플레이어에게 친구 요청이나 팔로우 요청을 보낼 수 없습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 FollowUser 팔로우 사용자 현재 사용자가 팔로우하고 있는 사용자를 나타냅니다. 팔로우 대상 사용자의 공개 프로필과 팔로워 수준의 프로필 정보에 대한 접근을 제공하며, 이는 팔로워에게는 표시되지만 일반에는 공개되지 않습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 팔로우 대상 사용자의 공개 프로필 정보로, 모든 플레이어가 접근할 수 있습니다. followerProfile string ~ 1024자 팔로워에게 공개되는 프로필 팔로워에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보를 포함할 수 있습니다. FriendUser 친구 사용자 현재 사용자와 상호 친구 관계가 성립된 사용자를 나타냅니다. 친구의 공개 프로필과 친구 수준의 프로필 정보에 대한 접근을 제공하며, 이는 확인된 친구에게만 표시됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 친구의 공개 프로필 정보로, 모든 플레이어가 접근할 수 있습니다. friendProfile string ~ 1024자 친구에게 공개되는 프로필 확인된 친구에게만 표시되는 친구의 프로필 정보입니다. 공개 프로필보다 프라이빗한 정보를 포함합니다. FriendRequest 친구 요청 두 플레이어 간의 친구 요청을 나타냅니다. 발신자의 사용자 ID, 수신자의 사용자 ID, 그리고 표시용 발신자의 공개 프로필을 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 친구 요청을 보낸 사용자 ID targetUserId string  ~ 128자 친구 요청을 받은 사용자 ID publicProfile string ~ 1024자 공개 프로필 친구 요청 발신자의 공개 프로필입니다. 수신자가 누가 친구 신청을 하고 있는지 식별할 수 있도록 표시용으로 포함됩니다. SendFriendRequest 보낸 친구 요청 친구 등록을 신청 중인 상태임을 나타내는 엔티티입니다. 해당 사용자가 다른 사용자에게 보낸 친구 요청입니다. 수신 대상 사용자가 승인하면 친구 요청은 삭제되고 친구 목록에 등록됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 친구 요청을 보낸 사용자 ID targetUserId string  ~ 128자 친구 요청을 받은 사용자 ID publicProfile string ~ 1024자 공개되는 프로필 이 친구 요청을 받은 대상 사용자의 공개 프로필입니다. 발신자가 수신자의 기본 정보를 확인할 수 있도록 합니다. ReceiveFriendRequest 받은 친구 요청 친구 등록 신청을 받은 상태임을 나타내는 엔티티입니다. 해당 사용자가 다른 사용자로부터 받은 친구 요청입니다. 해당 사용자가 승인하면 친구 요청은 삭제되고 친구 목록에 등록됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 친구 요청을 보낸 사용자 ID targetUserId string  ~ 128자 친구 요청을 받은 사용자 ID publicProfile string ~ 1024자 공개되는 프로필 이 친구 요청을 보낸 사용자의 공개 프로필입니다. 수신자가 승인 또는 거부하기 전에 누가 친구 신청을 했는지 확인할 수 있도록 합니다. PublicProfile 공개 프로필 사용자의 공개 프로필 정보에 대한 읽기 전용 뷰입니다. 친구나 팔로우 관계를 필요로 하지 않으며, 임의의 사용자에 대해 조회할 수 있습니다. 검색 결과, 리더보드, 기타 공개적인 컨텍스트에서 플레이어 정보를 표시하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 사용자의 공개 프로필 내용입니다. 친구나 팔로워 관계를 필요로 하지 않고 접근할 수 있습니다. 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 friend . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeNamespacesRequest ; import io.gs2.friend.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Friend . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Friend . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_namespaces ( friend . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 친구 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. followScript ScriptSetting 팔로우되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - follow unfollowScript ScriptSetting 언팔로우되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - unfollow sendRequestScript ScriptSetting 친구 요청을 발행했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - sendRequest cancelRequestScript ScriptSetting 친구 요청을 취소했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - cancelRequest acceptRequestScript ScriptSetting 친구 요청을 승낙했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acceptRequest rejectRequestScript ScriptSetting 친구 요청을 거부했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - rejectRequest deleteFriendScript ScriptSetting 친구를 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteFriend updateProfileScript ScriptSetting 프로필을 갱신했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - updateProfile followNotification NotificationSetting 팔로우되었을 때의 푸시 통지 다른 플레이어에게 팔로우되었을 때 푸시 통지를 전송하는 설정입니다. 팔로우된 플레이어가 GS2-Gateway를 통해 실시간으로 통지를 받을 수 있습니다. receiveRequestNotification NotificationSetting  친구 요청을 받았을 때의 푸시 통지 다른 플레이어로부터 친구 요청을 받았을 때 푸시 통지를 전송하는 설정입니다. 수신자가 GS2-Gateway를 통해 신속하게 응답할 수 있도록 합니다. cancelRequestNotification NotificationSetting  받은 친구 요청이 취소되었을 때의 푸시 통지 이전에 받은 친구 요청이 발신자에 의해 취소되었을 때 푸시 통지를 전송하는 설정입니다. 보류 중이던 요청이 더 이상 존재하지 않음을 수신자에게 알립니다. acceptRequestNotification NotificationSetting  친구 요청이 승인되었을 때의 푸시 통지 보낸 친구 요청이 수신자에 의해 승인되었을 때 푸시 통지를 전송하는 설정입니다. 승인 후 두 플레이어가 서로의 친구 목록에 추가됩니다. rejectRequestNotification NotificationSetting  친구 요청이 거부되었을 때의 푸시 통지 보낸 친구 요청이 수신자에 의해 거부되었을 때 푸시 통지를 전송하는 설정입니다. 친구 요청은 보낸 편지함과 받은 편지함 양쪽에서 모두 삭제됩니다. deleteFriendNotification NotificationSetting  친구가 삭제되었을 때의 푸시 통지 다른 플레이어의 친구 목록에서 삭제되었을 때 푸시 통지를 전송하는 설정입니다. 친구 관계는 양쪽 모두에서 해제됩니다. logSetting LogSetting 로그 출력 설정 친구 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 팔로우/언팔로우, 친구 요청, 프로필 갱신의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 friend . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , FollowScript : nil , UnfollowScript : nil , SendRequestScript : nil , CancelRequestScript : nil , AcceptRequestScript : nil , RejectRequestScript : nil , DeleteFriendScript : nil , UpdateProfileScript : nil , FollowNotification : nil , ReceiveRequestNotification : nil , CancelRequestNotification : nil , AcceptRequestNotification : nil , RejectRequestNotification : nil , DeleteFriendNotification : nil , LogSetting : \u0026 friend . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withFollowScript ( null ) -\u003e withUnfollowScript ( null ) -\u003e withSendRequestScript ( null ) -\u003e withCancelRequestScript ( null ) -\u003e withAcceptRequestScript ( null ) -\u003e withRejectRequestScript ( null ) -\u003e withDeleteFriendScript ( null ) -\u003e withUpdateProfileScript ( null ) -\u003e withFollowNotification ( null ) -\u003e withReceiveRequestNotification ( null ) -\u003e withCancelRequestNotification ( null ) -\u003e withAcceptRequestNotification ( null ) -\u003e withRejectRequestNotification ( null ) -\u003e withDeleteFriendNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Friend\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.CreateNamespaceRequest ; import io.gs2.friend.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withFollowScript ( null ) . withUnfollowScript ( null ) . withSendRequestScript ( null ) . withCancelRequestScript ( null ) . withAcceptRequestScript ( null ) . withRejectRequestScript ( null ) . withDeleteFriendScript ( null ) . withUpdateProfileScript ( null ) . withFollowNotification ( null ) . withReceiveRequestNotification ( null ) . withCancelRequestNotification ( null ) . withAcceptRequestNotification ( null ) . withRejectRequestNotification ( null ) . withDeleteFriendNotification ( null ) . withLogSetting ( new io . gs2 . friend . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Friend . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithFollowScript ( null ) . WithUnfollowScript ( null ) . WithSendRequestScript ( null ) . WithCancelRequestScript ( null ) . WithAcceptRequestScript ( null ) . WithRejectRequestScript ( null ) . WithDeleteFriendScript ( null ) . WithUpdateProfileScript ( null ) . WithFollowNotification ( null ) . WithReceiveRequestNotification ( null ) . WithCancelRequestNotification ( null ) . WithAcceptRequestNotification ( null ) . WithRejectRequestNotification ( null ) . WithDeleteFriendNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Friend . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Friend . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withFollowScript ( null ) . withUnfollowScript ( null ) . withSendRequestScript ( null ) . withCancelRequestScript ( null ) . withAcceptRequestScript ( null ) . withRejectRequestScript ( null ) . withDeleteFriendScript ( null ) . withUpdateProfileScript ( null ) . withFollowNotification ( null ) . withReceiveRequestNotification ( null ) . withCancelRequestNotification ( null ) . withAcceptRequestNotification ( null ) . withRejectRequestNotification ( null ) . withDeleteFriendNotification ( null ) . withLogSetting ( new Gs2Friend . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . create_namespace ( friend . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_follow_script ( None ) . with_unfollow_script ( None ) . with_send_request_script ( None ) . with_cancel_request_script ( None ) . with_accept_request_script ( None ) . with_reject_request_script ( None ) . with_delete_friend_script ( None ) . with_update_profile_script ( None ) . with_follow_notification ( None ) . with_receive_request_notification ( None ) . with_cancel_request_notification ( None ) . with_accept_request_notification ( None ) . with_reject_request_notification ( None ) . with_delete_friend_notification ( None ) . with_log_setting ( friend . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , followScript = nil , unfollowScript = nil , sendRequestScript = nil , cancelRequestScript = nil , acceptRequestScript = nil , rejectRequestScript = nil , deleteFriendScript = nil , updateProfileScript = nil , followNotification = nil , receiveRequestNotification = nil , cancelRequestNotification = nil , acceptRequestNotification = nil , rejectRequestNotification = nil , deleteFriendNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , followScript = nil , unfollowScript = nil , sendRequestScript = nil , cancelRequestScript = nil , acceptRequestScript = nil , rejectRequestScript = nil , deleteFriendScript = nil , updateProfileScript = nil , followNotification = nil , receiveRequestNotification = nil , cancelRequestNotification = nil , acceptRequestNotification = nil , rejectRequestNotification = nil , deleteFriendNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 friend . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetNamespaceStatusRequest ; import io.gs2.friend.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Friend . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Friend . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_namespace_status ( friend . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'friend' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 friend . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetNamespaceRequest ; import io.gs2.friend.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Friend . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Friend . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_namespace ( friend . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 친구 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. followScript ScriptSetting 팔로우되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - follow unfollowScript ScriptSetting 언팔로우되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - unfollow sendRequestScript ScriptSetting 친구 요청을 발행했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - sendRequest cancelRequestScript ScriptSetting 친구 요청을 취소했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - cancelRequest acceptRequestScript ScriptSetting 친구 요청을 승낙했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acceptRequest rejectRequestScript ScriptSetting 친구 요청을 거부했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - rejectRequest deleteFriendScript ScriptSetting 친구를 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteFriend updateProfileScript ScriptSetting 프로필을 갱신했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - updateProfile followNotification NotificationSetting 팔로우되었을 때의 푸시 통지 다른 플레이어에게 팔로우되었을 때 푸시 통지를 전송하는 설정입니다. 팔로우된 플레이어가 GS2-Gateway를 통해 실시간으로 통지를 받을 수 있습니다. receiveRequestNotification NotificationSetting  친구 요청을 받았을 때의 푸시 통지 다른 플레이어로부터 친구 요청을 받았을 때 푸시 통지를 전송하는 설정입니다. 수신자가 GS2-Gateway를 통해 신속하게 응답할 수 있도록 합니다. cancelRequestNotification NotificationSetting  받은 친구 요청이 취소되었을 때의 푸시 통지 이전에 받은 친구 요청이 발신자에 의해 취소되었을 때 푸시 통지를 전송하는 설정입니다. 보류 중이던 요청이 더 이상 존재하지 않음을 수신자에게 알립니다. acceptRequestNotification NotificationSetting  친구 요청이 승인되었을 때의 푸시 통지 보낸 친구 요청이 수신자에 의해 승인되었을 때 푸시 통지를 전송하는 설정입니다. 승인 후 두 플레이어가 서로의 친구 목록에 추가됩니다. rejectRequestNotification NotificationSetting  친구 요청이 거부되었을 때의 푸시 통지 보낸 친구 요청이 수신자에 의해 거부되었을 때 푸시 통지를 전송하는 설정입니다. 친구 요청은 보낸 편지함과 받은 편지함 양쪽에서 모두 삭제됩니다. deleteFriendNotification NotificationSetting  친구가 삭제되었을 때의 푸시 통지 다른 플레이어의 친구 목록에서 삭제되었을 때 푸시 통지를 전송하는 설정입니다. 친구 관계는 양쪽 모두에서 해제됩니다. logSetting LogSetting 로그 출력 설정 친구 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 팔로우/언팔로우, 친구 요청, 프로필 갱신의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 friend . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , FollowScript : nil , UnfollowScript : nil , SendRequestScript : nil , CancelRequestScript : nil , AcceptRequestScript : nil , RejectRequestScript : nil , DeleteFriendScript : nil , UpdateProfileScript : nil , FollowNotification : nil , ReceiveRequestNotification : nil , CancelRequestNotification : nil , AcceptRequestNotification : nil , RejectRequestNotification : nil , DeleteFriendNotification : nil , LogSetting : \u0026 friend . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withFollowScript ( null ) -\u003e withUnfollowScript ( null ) -\u003e withSendRequestScript ( null ) -\u003e withCancelRequestScript ( null ) -\u003e withAcceptRequestScript ( null ) -\u003e withRejectRequestScript ( null ) -\u003e withDeleteFriendScript ( null ) -\u003e withUpdateProfileScript ( null ) -\u003e withFollowNotification ( null ) -\u003e withReceiveRequestNotification ( null ) -\u003e withCancelRequestNotification ( null ) -\u003e withAcceptRequestNotification ( null ) -\u003e withRejectRequestNotification ( null ) -\u003e withDeleteFriendNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Friend\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.UpdateNamespaceRequest ; import io.gs2.friend.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withFollowScript ( null ) . withUnfollowScript ( null ) . withSendRequestScript ( null ) . withCancelRequestScript ( null ) . withAcceptRequestScript ( null ) . withRejectRequestScript ( null ) . withDeleteFriendScript ( null ) . withUpdateProfileScript ( null ) . withFollowNotification ( null ) . withReceiveRequestNotification ( null ) . withCancelRequestNotification ( null ) . withAcceptRequestNotification ( null ) . withRejectRequestNotification ( null ) . withDeleteFriendNotification ( null ) . withLogSetting ( new io . gs2 . friend . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Friend . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithFollowScript ( null ) . WithUnfollowScript ( null ) . WithSendRequestScript ( null ) . WithCancelRequestScript ( null ) . WithAcceptRequestScript ( null ) . WithRejectRequestScript ( null ) . WithDeleteFriendScript ( null ) . WithUpdateProfileScript ( null ) . WithFollowNotification ( null ) . WithReceiveRequestNotification ( null ) . WithCancelRequestNotification ( null ) . WithAcceptRequestNotification ( null ) . WithRejectRequestNotification ( null ) . WithDeleteFriendNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Friend . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Friend . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withFollowScript ( null ) . withUnfollowScript ( null ) . withSendRequestScript ( null ) . withCancelRequestScript ( null ) . withAcceptRequestScript ( null ) . withRejectRequestScript ( null ) . withDeleteFriendScript ( null ) . withUpdateProfileScript ( null ) . withFollowNotification ( null ) . withReceiveRequestNotification ( null ) . withCancelRequestNotification ( null ) . withAcceptRequestNotification ( null ) . withRejectRequestNotification ( null ) . withDeleteFriendNotification ( null ) . withLogSetting ( new Gs2Friend . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . update_namespace ( friend . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_follow_script ( None ) . with_unfollow_script ( None ) . with_send_request_script ( None ) . with_cancel_request_script ( None ) . with_accept_request_script ( None ) . with_reject_request_script ( None ) . with_delete_friend_script ( None ) . with_update_profile_script ( None ) . with_follow_notification ( None ) . with_receive_request_notification ( None ) . with_cancel_request_notification ( None ) . with_accept_request_notification ( None ) . with_reject_request_notification ( None ) . with_delete_friend_notification ( None ) . with_log_setting ( friend . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , followScript = nil , unfollowScript = nil , sendRequestScript = nil , cancelRequestScript = nil , acceptRequestScript = nil , rejectRequestScript = nil , deleteFriendScript = nil , updateProfileScript = nil , followNotification = nil , receiveRequestNotification = nil , cancelRequestNotification = nil , acceptRequestNotification = nil , rejectRequestNotification = nil , deleteFriendNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , followScript = nil , unfollowScript = nil , sendRequestScript = nil , cancelRequestScript = nil , acceptRequestScript = nil , rejectRequestScript = nil , deleteFriendScript = nil , updateProfileScript = nil , followNotification = nil , receiveRequestNotification = nil , cancelRequestNotification = nil , acceptRequestNotification = nil , rejectRequestNotification = nil , deleteFriendNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 friend . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DeleteNamespaceRequest ; import io.gs2.friend.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Friend . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Friend . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . delete_namespace ( friend . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 friend . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetServiceVersionRequest ; import io.gs2.friend.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Friend . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Friend . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_service_version ( friend . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 friend . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DumpUserDataByUserIdRequest ; import io.gs2.friend.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Friend . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Friend . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . dump_user_data_by_user_id ( friend . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'friend' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 friend . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.friend.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Friend . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Friend . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( friend . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'friend' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 friend . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.CleanUserDataByUserIdRequest ; import io.gs2.friend.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Friend . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Friend . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . clean_user_data_by_user_id ( friend . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'friend' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 friend . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.friend.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Friend . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Friend . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( friend . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'friend' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 friend . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.friend.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Friend . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Friend . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( friend . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'friend' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 friend . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.ImportUserDataByUserIdRequest ; import io.gs2.friend.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Friend . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Friend . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . import_user_data_by_user_id ( friend . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'friend' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 friend . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.CheckImportUserDataByUserIdRequest ; import io.gs2.friend.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Friend . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Friend . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( friend . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'friend' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; getProfile 프로필 취득 요청한 사용자 자신의 프로필을 취득합니다. 공개 프로필, 팔로워용 프로필, 친구용 프로필의 3가지 공개 수준을 모두 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Profile 프로필 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetProfile ( \u0026 friend . GetProfileRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetProfileRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getProfile ( ( new GetProfileRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetProfileRequest ; import io.gs2.friend.result.GetProfileResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetProfileResult result = client . getProfile ( new GetProfileRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Profile item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetProfileResult \u003e asyncResult = null ; yield return client . GetProfile ( new Gs2 . Gs2Friend . Request . GetProfileRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getProfile ( new Gs2Friend . GetProfileRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_profile ( friend . GetProfileRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_profile ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_profile_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getProfileByUserId 사용자ID를 지정하여 프로필 취득 지정된 사용자의 프로필을 취득합니다. 3가지 공개 수준을 모두 포함합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Profile 프로필 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetProfileByUserId ( \u0026 friend . GetProfileByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetProfileByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getProfileByUserId ( ( new GetProfileByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetProfileByUserIdRequest ; import io.gs2.friend.result.GetProfileByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetProfileByUserIdResult result = client . getProfileByUserId ( new GetProfileByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Profile item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetProfileByUserIdResult \u003e asyncResult = null ; yield return client . GetProfileByUserId ( new Gs2 . Gs2Friend . Request . GetProfileByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getProfileByUserId ( new Gs2Friend . GetProfileByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_profile_by_user_id ( friend . GetProfileByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_profile_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_profile_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateProfile 프로필 갱신 요청한 사용자의 프로필을 3가지 서로 다른 공개 수준으로 갱신합니다: publicProfile: 모든 사용자에게 공개 followerProfile: 이 사용자를 팔로우하는 사용자에게만 공개 friendProfile: 이 사용자와 친구인 사용자에게만 공개 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 publicProfile string ~ 1024자 공개되는 프로필 관계와 상관없이 모든 플레이어에게 표시되는 프로필 정보입니다. 일반적으로 표시 이름, 아바타, 기타 공개 가능한 정보에 사용됩니다. followerProfile string ~ 1024자 팔로워에게 공개되는 프로필 이 사용자를 팔로우하고 있는 플레이어에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보(게임플레이 통계나 상태 메시지 등)를 포함할 수 있습니다. friendProfile string ~ 1024자 친구에게 공개되는 프로필 상호 친구 관계가 성립된 플레이어에게만 표시되는 프로필 정보입니다. 가장 프라이빗한 프로필 수준으로, 연락처나 개인 메시지 등 개인 정보를 공유하기에 적합합니다. Result 타입 설명 item Profile 갱신한 프로필 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . UpdateProfile ( \u0026 friend . UpdateProfileRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PublicProfile : pointy . String ( \"public\" ), FollowerProfile : pointy . String ( \"follower\" ), FriendProfile : pointy . String ( \"friend\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\UpdateProfileRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e updateProfile ( ( new UpdateProfileRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPublicProfile ( \"public\" ) -\u003e withFollowerProfile ( \"follower\" ) -\u003e withFriendProfile ( \"friend\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.UpdateProfileRequest ; import io.gs2.friend.result.UpdateProfileResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { UpdateProfileResult result = client . updateProfile ( new UpdateProfileRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPublicProfile ( \"public\" ) . withFollowerProfile ( \"follower\" ) . withFriendProfile ( \"friend\" ) ); Profile item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . UpdateProfileResult \u003e asyncResult = null ; yield return client . UpdateProfile ( new Gs2 . Gs2Friend . Request . UpdateProfileRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPublicProfile ( \"public\" ) . WithFollowerProfile ( \"follower\" ) . WithFriendProfile ( \"friend\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . updateProfile ( new Gs2Friend . UpdateProfileRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPublicProfile ( \"public\" ) . withFollowerProfile ( \"follower\" ) . withFriendProfile ( \"friend\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . update_profile ( friend . UpdateProfileRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_public_profile ( 'public' ) . with_follower_profile ( 'follower' ) . with_friend_profile ( 'friend' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.update_profile ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , publicProfile = \"public\" , followerProfile = \"follower\" , friendProfile = \"friend\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.update_profile_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , publicProfile = \"public\" , followerProfile = \"follower\" , friendProfile = \"friend\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateProfileByUserId 사용자ID를 지정하여 프로필 갱신 지정된 사용자의 프로필을 3가지 서로 다른 공개 수준으로 갱신합니다(서버 사이드 조작): publicProfile: 모든 사용자에게 공개 followerProfile: 팔로워에게만 공개 friendProfile: 친구에게만 공개 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID publicProfile string ~ 1024자 공개되는 프로필 관계와 상관없이 모든 플레이어에게 표시되는 프로필 정보입니다. 일반적으로 표시 이름, 아바타, 기타 공개 가능한 정보에 사용됩니다. followerProfile string ~ 1024자 팔로워에게 공개되는 프로필 이 사용자를 팔로우하고 있는 플레이어에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보(게임플레이 통계나 상태 메시지 등)를 포함할 수 있습니다. friendProfile string ~ 1024자 친구에게 공개되는 프로필 상호 친구 관계가 성립된 플레이어에게만 표시되는 프로필 정보입니다. 가장 프라이빗한 프로필 수준으로, 연락처나 개인 메시지 등 개인 정보를 공유하기에 적합합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Profile 갱신한 프로필 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . UpdateProfileByUserId ( \u0026 friend . UpdateProfileByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PublicProfile : pointy . String ( \"public2\" ), FollowerProfile : pointy . String ( \"follower2\" ), FriendProfile : pointy . String ( \"friend2\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\UpdateProfileByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e updateProfileByUserId ( ( new UpdateProfileByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPublicProfile ( \"public2\" ) -\u003e withFollowerProfile ( \"follower2\" ) -\u003e withFriendProfile ( \"friend2\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.UpdateProfileByUserIdRequest ; import io.gs2.friend.result.UpdateProfileByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { UpdateProfileByUserIdResult result = client . updateProfileByUserId ( new UpdateProfileByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPublicProfile ( \"public2\" ) . withFollowerProfile ( \"follower2\" ) . withFriendProfile ( \"friend2\" ) . withTimeOffsetToken ( null ) ); Profile item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . UpdateProfileByUserIdResult \u003e asyncResult = null ; yield return client . UpdateProfileByUserId ( new Gs2 . Gs2Friend . Request . UpdateProfileByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPublicProfile ( \"public2\" ) . WithFollowerProfile ( \"follower2\" ) . WithFriendProfile ( \"friend2\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . updateProfileByUserId ( new Gs2Friend . UpdateProfileByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPublicProfile ( \"public2\" ) . withFollowerProfile ( \"follower2\" ) . withFriendProfile ( \"friend2\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . update_profile_by_user_id ( friend . UpdateProfileByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_public_profile ( 'public2' ) . with_follower_profile ( 'follower2' ) . with_friend_profile ( 'friend2' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.update_profile_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , publicProfile = \"public2\" , followerProfile = \"follower2\" , friendProfile = \"friend2\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.update_profile_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , publicProfile = \"public2\" , followerProfile = \"follower2\" , friendProfile = \"friend2\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteProfileByUserId 프로필 삭제 지정된 사용자의 프로필 데이터를 삭제합니다(서버 사이드 조작). 프로필의 3가지 공개 수준(공개, 팔로워용, 친구용) 모두가 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Profile 삭제한 프로필 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DeleteProfileByUserId ( \u0026 friend . DeleteProfileByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DeleteProfileByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e deleteProfileByUserId ( ( new DeleteProfileByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DeleteProfileByUserIdRequest ; import io.gs2.friend.result.DeleteProfileByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DeleteProfileByUserIdResult result = client . deleteProfileByUserId ( new DeleteProfileByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Profile item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DeleteProfileByUserIdResult \u003e asyncResult = null ; yield return client . DeleteProfileByUserId ( new Gs2 . Gs2Friend . Request . DeleteProfileByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . deleteProfileByUserId ( new Gs2Friend . DeleteProfileByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . delete_profile_by_user_id ( friend . DeleteProfileByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.delete_profile_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.delete_profile_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeFriends 친구 목록 조회 요청한 사용자의 친구 페이지네이션된 목록을 조회합니다. 친구는 친구 요청 승낙 시 성립되는 양방향 관계입니다. withProfile 을 true 로 설정하면 각 친구의 프로필 정보(친구 공개 범위)도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 withProfile bool false 프로필 정보도 함께 조회할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 친구 사용자 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeFriends ( \u0026 friend . DescribeFriendsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), WithProfile : pointy . Bool ( true ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeFriendsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeFriends ( ( new DescribeFriendsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withWithProfile ( true ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeFriendsRequest ; import io.gs2.friend.result.DescribeFriendsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeFriendsResult result = client . describeFriends ( new DescribeFriendsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withWithProfile ( true ) . withPageToken ( null ) . withLimit ( null ) ); List FriendUser \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeFriendsResult \u003e asyncResult = null ; yield return client . DescribeFriends ( new Gs2 . Gs2Friend . Request . DescribeFriendsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithWithProfile ( true ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeFriends ( new Gs2Friend . DescribeFriendsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withWithProfile ( true ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_friends ( friend . DescribeFriendsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_with_profile ( True ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_friends ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , withProfile = true , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_friends_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , withProfile = true , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeFriendsByUserId 사용자 ID를 지정하여 친구 목록 조회 지정된 사용자의 친구 페이지네이션된 목록을 조회합니다(서버 사이드 조작). withProfile 을 true 로 설정하면 각 친구의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 친구 사용자 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeFriendsByUserId ( \u0026 friend . DescribeFriendsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), WithProfile : pointy . Bool ( true ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeFriendsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeFriendsByUserId ( ( new DescribeFriendsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withWithProfile ( true ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeFriendsByUserIdRequest ; import io.gs2.friend.result.DescribeFriendsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeFriendsByUserIdResult result = client . describeFriendsByUserId ( new DescribeFriendsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withWithProfile ( true ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List FriendUser \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeFriendsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeFriendsByUserId ( new Gs2 . Gs2Friend . Request . DescribeFriendsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithWithProfile ( true ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeFriendsByUserId ( new Gs2Friend . DescribeFriendsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withWithProfile ( true ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_friends_by_user_id ( friend . DescribeFriendsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_with_profile ( True ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_friends_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , withProfile = true , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_friends_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , withProfile = true , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeBlackList 블랙리스트 취득 요청한 사용자가 차단한 사용자ID의 페이지네이션 리스트를 취득합니다. 차단된 사용자는 친구 요청 전송이나 팔로우를 할 수 없게 됩니다. 사용자ID만을 반환하며, 완전한 사용자 프로필은 포함하지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 블랙리스트에 등록된 사용자 ID 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeBlackList ( \u0026 friend . DescribeBlackListRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeBlackListRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeBlackList ( ( new DescribeBlackListRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeBlackListRequest ; import io.gs2.friend.result.DescribeBlackListResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeBlackListResult result = client . describeBlackList ( new DescribeBlackListRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List String \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeBlackListResult \u003e asyncResult = null ; yield return client . DescribeBlackList ( new Gs2 . Gs2Friend . Request . DescribeBlackListRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeBlackList ( new Gs2Friend . DescribeBlackListRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_black_list ( friend . DescribeBlackListRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_black_list ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_black_list_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeBlackListByUserId 사용자 ID를 지정하여 블랙리스트 조회 지정된 사용자가 차단한 사용자 ID의 페이지네이션된 목록을 조회합니다(서버 사이드 조작). 사용자 ID만 반환하며, 전체 사용자 프로필 정보는 포함하지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 블랙리스트에 등록된 사용자 ID 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeBlackListByUserId ( \u0026 friend . DescribeBlackListByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeBlackListByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeBlackListByUserId ( ( new DescribeBlackListByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeBlackListByUserIdRequest ; import io.gs2.friend.result.DescribeBlackListByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeBlackListByUserIdResult result = client . describeBlackListByUserId ( new DescribeBlackListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List String \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeBlackListByUserIdResult \u003e asyncResult = null ; yield return client . DescribeBlackListByUserId ( new Gs2 . Gs2Friend . Request . DescribeBlackListByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeBlackListByUserId ( new Gs2Friend . DescribeBlackListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_black_list_by_user_id ( friend . DescribeBlackListByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_black_list_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_black_list_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; registerBlackList 블랙리스트에 등록 지정된 대상 사용자를 요청한 사용자의 블랙리스트에 추가합니다. 차단되면 대상 사용자는 친구 요청 전송이나 팔로우를 할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID Result 타입 설명 item BlackList 블랙리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . RegisterBlackList ( \u0026 friend . RegisterBlackListRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\RegisterBlackListRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e registerBlackList ( ( new RegisterBlackListRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.RegisterBlackListRequest ; import io.gs2.friend.result.RegisterBlackListResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { RegisterBlackListResult result = client . registerBlackList ( new RegisterBlackListRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); BlackList item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . RegisterBlackListResult \u003e asyncResult = null ; yield return client . RegisterBlackList ( new Gs2 . Gs2Friend . Request . RegisterBlackListRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . registerBlackList ( new Gs2Friend . RegisterBlackListRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . register_black_list ( friend . RegisterBlackListRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.register_black_list ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.register_black_list_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; registerBlackListByUserId 사용자 ID를 지정하여 블랙리스트에 등록 지정된 대상 사용자를 지정된 사용자의 블랙리스트에 추가합니다(서버 사이드 조작). 차단되면 대상 사용자는 친구 요청 전송이나 팔로우를 할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BlackList 블랙리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . RegisterBlackListByUserId ( \u0026 friend . RegisterBlackListByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\RegisterBlackListByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e registerBlackListByUserId ( ( new RegisterBlackListByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.RegisterBlackListByUserIdRequest ; import io.gs2.friend.result.RegisterBlackListByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { RegisterBlackListByUserIdResult result = client . registerBlackListByUserId ( new RegisterBlackListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); BlackList item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . RegisterBlackListByUserIdResult \u003e asyncResult = null ; yield return client . RegisterBlackListByUserId ( new Gs2 . Gs2Friend . Request . RegisterBlackListByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . registerBlackListByUserId ( new Gs2Friend . RegisterBlackListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . register_black_list_by_user_id ( friend . RegisterBlackListByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.register_black_list_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.register_black_list_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unregisterBlackList 블랙리스트에서 사용자 삭제 지정된 대상 사용자를 요청한 사용자의 블랙리스트에서 삭제합니다. 삭제 후, 대상 사용자는 다시 친구 요청 전송 및 팔로우가 가능해집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID Result 타입 설명 item BlackList 블랙리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . UnregisterBlackList ( \u0026 friend . UnregisterBlackListRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\UnregisterBlackListRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e unregisterBlackList ( ( new UnregisterBlackListRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.UnregisterBlackListRequest ; import io.gs2.friend.result.UnregisterBlackListResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { UnregisterBlackListResult result = client . unregisterBlackList ( new UnregisterBlackListRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); BlackList item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . UnregisterBlackListResult \u003e asyncResult = null ; yield return client . UnregisterBlackList ( new Gs2 . Gs2Friend . Request . UnregisterBlackListRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . unregisterBlackList ( new Gs2Friend . UnregisterBlackListRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . unregister_black_list ( friend . UnregisterBlackListRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.unregister_black_list ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.unregister_black_list_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unregisterBlackListByUserId 사용자 ID를 지정하여 블랙리스트에서 사용자 삭제 지정된 대상 사용자를 지정된 사용자의 블랙리스트에서 삭제합니다(서버 사이드 조작). 삭제 후, 대상 사용자는 다시 친구 요청 전송 및 팔로우가 가능해집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BlackList 블랙리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . UnregisterBlackListByUserId ( \u0026 friend . UnregisterBlackListByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\UnregisterBlackListByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e unregisterBlackListByUserId ( ( new UnregisterBlackListByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.UnregisterBlackListByUserIdRequest ; import io.gs2.friend.result.UnregisterBlackListByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { UnregisterBlackListByUserIdResult result = client . unregisterBlackListByUserId ( new UnregisterBlackListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); BlackList item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . UnregisterBlackListByUserIdResult \u003e asyncResult = null ; yield return client . UnregisterBlackListByUserId ( new Gs2 . Gs2Friend . Request . UnregisterBlackListByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . unregisterBlackListByUserId ( new Gs2Friend . UnregisterBlackListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . unregister_black_list_by_user_id ( friend . UnregisterBlackListByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.unregister_black_list_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.unregister_black_list_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeFollows 팔로우 중인 사용자 목록 조회 요청한 사용자가 팔로우하고 있는 사용자의 페이지네이션된 목록을 조회합니다. withProfile 을 true 로 설정하면 각 팔로우 사용자의 프로필 정보(팔로워 공개 범위)도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 withProfile bool false 프로필 정보도 함께 조회할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 사용자가 팔로우하는 사용자 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeFollows ( \u0026 friend . DescribeFollowsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), WithProfile : pointy . Bool ( true ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeFollowsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeFollows ( ( new DescribeFollowsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withWithProfile ( true ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeFollowsRequest ; import io.gs2.friend.result.DescribeFollowsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeFollowsResult result = client . describeFollows ( new DescribeFollowsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withWithProfile ( true ) . withPageToken ( null ) . withLimit ( null ) ); List FollowUser \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeFollowsResult \u003e asyncResult = null ; yield return client . DescribeFollows ( new Gs2 . Gs2Friend . Request . DescribeFollowsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithWithProfile ( true ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeFollows ( new Gs2Friend . DescribeFollowsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withWithProfile ( true ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_follows ( friend . DescribeFollowsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_with_profile ( True ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_follows ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , withProfile = true , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_follows_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , withProfile = true , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeFollowsByUserId 사용자 ID를 지정하여 팔로우 중인 사용자 목록 조회 지정된 사용자가 팔로우하고 있는 사용자의 페이지네이션된 목록을 조회합니다(서버 사이드 조작). withProfile 을 true 로 설정하면 각 팔로우 사용자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 사용자가 팔로우하는 사용자 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeFollowsByUserId ( \u0026 friend . DescribeFollowsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), WithProfile : pointy . Bool ( true ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeFollowsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeFollowsByUserId ( ( new DescribeFollowsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withWithProfile ( true ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeFollowsByUserIdRequest ; import io.gs2.friend.result.DescribeFollowsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeFollowsByUserIdResult result = client . describeFollowsByUserId ( new DescribeFollowsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withWithProfile ( true ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List FollowUser \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeFollowsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeFollowsByUserId ( new Gs2 . Gs2Friend . Request . DescribeFollowsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithWithProfile ( true ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeFollowsByUserId ( new Gs2Friend . DescribeFollowsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withWithProfile ( true ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_follows_by_user_id ( friend . DescribeFollowsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_with_profile ( True ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_follows_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , withProfile = true , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_follows_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , withProfile = true , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getFollow 팔로우 중인 사용자 조회 요청한 사용자가 팔로우하고 있는 특정 사용자 정보를 조회합니다. withProfile 을 true 로 설정하면 팔로우 사용자의 프로필 정보(팔로워 공개 범위)도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 Result 타입 설명 item FollowUser 팔로우 중인 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetFollow ( \u0026 friend . GetFollowRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), WithProfile : pointy . Bool ( true ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetFollowRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getFollow ( ( new GetFollowRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withWithProfile ( true ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetFollowRequest ; import io.gs2.friend.result.GetFollowResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetFollowResult result = client . getFollow ( new GetFollowRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( true ) ); FollowUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetFollowResult \u003e asyncResult = null ; yield return client . GetFollow ( new Gs2 . Gs2Friend . Request . GetFollowRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithWithProfile ( true ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getFollow ( new Gs2Friend . GetFollowRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( true ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_follow ( friend . GetFollowRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) . with_with_profile ( True ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_follow ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , withProfile = true , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_follow_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , withProfile = true , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getFollowByUserId 사용자 ID를 지정하여 팔로우 중인 사용자 조회 지정된 사용자가 팔로우하고 있는 특정 사용자 정보를 조회합니다(서버 사이드 조작). withProfile 을 true 로 설정하면 팔로우 사용자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FollowUser 팔로우 중인 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetFollowByUserId ( \u0026 friend . GetFollowByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), WithProfile : pointy . Bool ( true ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetFollowByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getFollowByUserId ( ( new GetFollowByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withWithProfile ( true ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetFollowByUserIdRequest ; import io.gs2.friend.result.GetFollowByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetFollowByUserIdResult result = client . getFollowByUserId ( new GetFollowByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( true ) . withTimeOffsetToken ( null ) ); FollowUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetFollowByUserIdResult \u003e asyncResult = null ; yield return client . GetFollowByUserId ( new Gs2 . Gs2Friend . Request . GetFollowByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithWithProfile ( true ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getFollowByUserId ( new Gs2Friend . GetFollowByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( true ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_follow_by_user_id ( friend . GetFollowByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_with_profile ( True ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_follow_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , withProfile = true , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_follow_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , withProfile = true , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; follow 사용자 팔로우 지정된 대상 사용자를 요청한 사용자의 팔로우 목록에 추가합니다. 팔로우는 대상 사용자의 승인을 필요로 하지 않는 일방향 관계입니다. 팔로우 후, 대상 사용자의 팔로워 공개 프로필 정보를 열람할 수 있게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 팔로우하고 싶은 상대의 사용자 ID Result 타입 설명 item FollowUser 팔로우한 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . Follow ( \u0026 friend . FollowRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\FollowRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e follow ( ( new FollowRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.FollowRequest ; import io.gs2.friend.result.FollowResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { FollowResult result = client . follow ( new FollowRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); FollowUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . FollowResult \u003e asyncResult = null ; yield return client . Follow ( new Gs2 . Gs2Friend . Request . FollowRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . follow ( new Gs2Friend . FollowRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . follow ( friend . FollowRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.follow ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.follow_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; followByUserId 사용자 ID를 지정하여 팔로우 지정된 대상 사용자를 지정된 사용자의 팔로우 목록에 추가합니다(서버 사이드 조작). 팔로우는 대상 사용자의 승인을 필요로 하지 않는 일방향 관계입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 팔로우하고 싶은 상대의 사용자 ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FollowUser 팔로우한 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . FollowByUserId ( \u0026 friend . FollowByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\FollowByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e followByUserId ( ( new FollowByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.FollowByUserIdRequest ; import io.gs2.friend.result.FollowByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { FollowByUserIdResult result = client . followByUserId ( new FollowByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withTimeOffsetToken ( null ) ); FollowUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . FollowByUserIdResult \u003e asyncResult = null ; yield return client . FollowByUserId ( new Gs2 . Gs2Friend . Request . FollowByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . followByUserId ( new Gs2Friend . FollowByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . follow_by_user_id ( friend . FollowByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.follow_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.follow_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unfollow 사용자 팔로우 해제 지정된 대상 사용자를 요청한 사용자의 팔로우 목록에서 삭제합니다. 팔로우 해제 후에는 대상 사용자의 팔로워 전용 프로필 정보를 열람할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID Result 타입 설명 item FollowUser 언팔로우한 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . Unfollow ( \u0026 friend . UnfollowRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\UnfollowRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e unfollow ( ( new UnfollowRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.UnfollowRequest ; import io.gs2.friend.result.UnfollowResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { UnfollowResult result = client . unfollow ( new UnfollowRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); FollowUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . UnfollowResult \u003e asyncResult = null ; yield return client . Unfollow ( new Gs2 . Gs2Friend . Request . UnfollowRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . unfollow ( new Gs2Friend . UnfollowRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . unfollow ( friend . UnfollowRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.unfollow ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.unfollow_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unfollowByUserId 사용자 ID를 지정하여 팔로우 해제 지정된 대상 사용자를 지정된 사용자의 팔로우 목록에서 삭제합니다(서버 사이드 작업). 팔로우 해제 후에는 대상 사용자의 팔로워 전용 프로필 정보를 열람할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FollowUser 언팔로우한 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . UnfollowByUserId ( \u0026 friend . UnfollowByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\UnfollowByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e unfollowByUserId ( ( new UnfollowByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.UnfollowByUserIdRequest ; import io.gs2.friend.result.UnfollowByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { UnfollowByUserIdResult result = client . unfollowByUserId ( new UnfollowByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withTimeOffsetToken ( null ) ); FollowUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . UnfollowByUserIdResult \u003e asyncResult = null ; yield return client . UnfollowByUserId ( new Gs2 . Gs2Friend . Request . UnfollowByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . unfollowByUserId ( new Gs2Friend . UnfollowByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . unfollow_by_user_id ( friend . UnfollowByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.unfollow_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.unfollow_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getFriend 친구 조회 요청한 사용자의 특정 친구 정보를 조회합니다. withProfile 을 true 로 설정하면 친구의 프로필 정보(친구 공개 범위)도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 Result 타입 설명 item FriendUser 친구 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetFriend ( \u0026 friend . GetFriendRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), WithProfile : pointy . Bool ( true ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetFriendRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getFriend ( ( new GetFriendRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withWithProfile ( true ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetFriendRequest ; import io.gs2.friend.result.GetFriendResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetFriendResult result = client . getFriend ( new GetFriendRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( true ) ); FriendUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetFriendResult \u003e asyncResult = null ; yield return client . GetFriend ( new Gs2 . Gs2Friend . Request . GetFriendRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithWithProfile ( true ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getFriend ( new Gs2Friend . GetFriendRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( true ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_friend ( friend . GetFriendRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) . with_with_profile ( True ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_friend ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , withProfile = true , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_friend_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , withProfile = true , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getFriendByUserId 사용자 ID를 지정하여 친구 조회 지정된 사용자의 특정 친구 정보를 조회합니다(서버 사이드 조작). withProfile 을 true 로 설정하면 친구의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendUser 친구 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetFriendByUserId ( \u0026 friend . GetFriendByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), WithProfile : pointy . Bool ( true ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetFriendByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getFriendByUserId ( ( new GetFriendByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withWithProfile ( true ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetFriendByUserIdRequest ; import io.gs2.friend.result.GetFriendByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetFriendByUserIdResult result = client . getFriendByUserId ( new GetFriendByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( true ) . withTimeOffsetToken ( null ) ); FriendUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetFriendByUserIdResult \u003e asyncResult = null ; yield return client . GetFriendByUserId ( new Gs2 . Gs2Friend . Request . GetFriendByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithWithProfile ( true ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getFriendByUserId ( new Gs2Friend . GetFriendByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( true ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_friend_by_user_id ( friend . GetFriendByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_with_profile ( True ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_friend_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , withProfile = true , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_friend_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , withProfile = true , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; addFriend 친구 추가 친구 요청 절차를 거치지 않고, 지정된 대상 사용자를 요청한 사용자의 친구로 직접 추가합니다. 일방향 친구 관계를 생성합니다. 추가 후 대상 사용자의 프로필이 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID Result 타입 설명 item FriendUser 추가한 친구 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . AddFriend ( \u0026 friend . AddFriendRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\AddFriendRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e addFriend ( ( new AddFriendRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.AddFriendRequest ; import io.gs2.friend.result.AddFriendResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { AddFriendResult result = client . addFriend ( new AddFriendRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); FriendUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . AddFriendResult \u003e asyncResult = null ; yield return client . AddFriend ( new Gs2 . Gs2Friend . Request . AddFriendRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . addFriend ( new Gs2Friend . AddFriendRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . add_friend ( friend . AddFriendRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.add_friend ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.add_friend_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; addFriendByUserId 사용자 ID를 지정하여 친구 추가 친구 요청 절차를 거치지 않고, 지정된 대상 사용자를 지정된 사용자의 친구로 직접 추가합니다(서버 사이드 조작). 일방향 친구 관계를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendUser 추가한 친구 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . AddFriendByUserId ( \u0026 friend . AddFriendByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\AddFriendByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e addFriendByUserId ( ( new AddFriendByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.AddFriendByUserIdRequest ; import io.gs2.friend.result.AddFriendByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { AddFriendByUserIdResult result = client . addFriendByUserId ( new AddFriendByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); FriendUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . AddFriendByUserIdResult \u003e asyncResult = null ; yield return client . AddFriendByUserId ( new Gs2 . Gs2Friend . Request . AddFriendByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . addFriendByUserId ( new Gs2Friend . AddFriendByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . add_friend_by_user_id ( friend . AddFriendByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.add_friend_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.add_friend_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteFriend 친구 삭제 지정된 대상 사용자를 요청한 사용자의 친구 목록에서 삭제합니다. 삭제 전에 대상 사용자의 프로필이 로드되며, 삭제된 친구 정보가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID Result 타입 설명 item FriendUser 삭제한 친구 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DeleteFriend ( \u0026 friend . DeleteFriendRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DeleteFriendRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e deleteFriend ( ( new DeleteFriendRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DeleteFriendRequest ; import io.gs2.friend.result.DeleteFriendResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DeleteFriendResult result = client . deleteFriend ( new DeleteFriendRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); FriendUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DeleteFriendResult \u003e asyncResult = null ; yield return client . DeleteFriend ( new Gs2 . Gs2Friend . Request . DeleteFriendRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . deleteFriend ( new Gs2Friend . DeleteFriendRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . delete_friend ( friend . DeleteFriendRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.delete_friend ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.delete_friend_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteFriendByUserId 사용자 ID를 지정하여 친구 삭제 지정된 대상 사용자를 지정된 사용자의 친구 목록에서 삭제합니다(서버 사이드 조작). 삭제된 친구 정보가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendUser 삭제한 친구 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DeleteFriendByUserId ( \u0026 friend . DeleteFriendByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DeleteFriendByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e deleteFriendByUserId ( ( new DeleteFriendByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DeleteFriendByUserIdRequest ; import io.gs2.friend.result.DeleteFriendByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DeleteFriendByUserIdResult result = client . deleteFriendByUserId ( new DeleteFriendByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); FriendUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DeleteFriendByUserIdResult \u003e asyncResult = null ; yield return client . DeleteFriendByUserId ( new Gs2 . Gs2Friend . Request . DeleteFriendByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . deleteFriendByUserId ( new Gs2Friend . DeleteFriendByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . delete_friend_by_user_id ( friend . DeleteFriendByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.delete_friend_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.delete_friend_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSendRequests 송신한 친구 요청 목록 조회 요청한 사용자가 송신한, 응답 대기 중인 친구 요청의 페이지네이션된 목록을 조회합니다. withProfile 을 true 로 설정하면 각 요청에 대해 대상 사용자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 withProfile bool false 프로필 정보도 함께 조회할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 친구 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeSendRequests ( \u0026 friend . DescribeSendRequestsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), WithProfile : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeSendRequestsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeSendRequests ( ( new DescribeSendRequestsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withWithProfile ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeSendRequestsRequest ; import io.gs2.friend.result.DescribeSendRequestsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeSendRequestsResult result = client . describeSendRequests ( new DescribeSendRequestsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withWithProfile ( null ) . withPageToken ( null ) . withLimit ( null ) ); List FriendRequest \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeSendRequestsResult \u003e asyncResult = null ; yield return client . DescribeSendRequests ( new Gs2 . Gs2Friend . Request . DescribeSendRequestsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithWithProfile ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeSendRequests ( new Gs2Friend . DescribeSendRequestsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withWithProfile ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_send_requests ( friend . DescribeSendRequestsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_with_profile ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_send_requests ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , withProfile = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_send_requests_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , withProfile = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeSendRequestsByUserId 사용자 ID를 지정하여 송신한 친구 요청 목록 조회 지정된 사용자가 송신한 친구 요청의 페이지네이션된 목록을 조회합니다(서버 사이드 조작). withProfile 을 true 로 설정하면 각 요청에 대해 대상 사용자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 친구 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeSendRequestsByUserId ( \u0026 friend . DescribeSendRequestsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), WithProfile : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeSendRequestsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeSendRequestsByUserId ( ( new DescribeSendRequestsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withWithProfile ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeSendRequestsByUserIdRequest ; import io.gs2.friend.result.DescribeSendRequestsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeSendRequestsByUserIdResult result = client . describeSendRequestsByUserId ( new DescribeSendRequestsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withWithProfile ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List FriendRequest \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeSendRequestsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeSendRequestsByUserId ( new Gs2 . Gs2Friend . Request . DescribeSendRequestsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithWithProfile ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeSendRequestsByUserId ( new Gs2Friend . DescribeSendRequestsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withWithProfile ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_send_requests_by_user_id ( friend . DescribeSendRequestsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_with_profile ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_send_requests_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , withProfile = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_send_requests_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , withProfile = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getSendRequest 송신한 친구 요청 조회 요청한 사용자가 지정된 대상 사용자에게 송신한 특정 친구 요청을 조회합니다. withProfile 을 true 로 설정하면 대상 사용자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 Result 타입 설명 item FriendRequest 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetSendRequest ( \u0026 friend . GetSendRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), WithProfile : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetSendRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getSendRequest ( ( new GetSendRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withWithProfile ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetSendRequestRequest ; import io.gs2.friend.result.GetSendRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetSendRequestResult result = client . getSendRequest ( new GetSendRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetSendRequestResult \u003e asyncResult = null ; yield return client . GetSendRequest ( new Gs2 . Gs2Friend . Request . GetSendRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithWithProfile ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getSendRequest ( new Gs2Friend . GetSendRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_send_request ( friend . GetSendRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) . with_with_profile ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_send_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , withProfile = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_send_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , withProfile = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSendRequestByUserId 사용자 ID를 지정하여 송신한 친구 요청 조회 지정된 사용자가 지정된 대상 사용자에게 송신한 특정 친구 요청을 조회합니다(서버 사이드 조작). withProfile 을 true 로 설정하면 대상 사용자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendRequest 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetSendRequestByUserId ( \u0026 friend . GetSendRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : nil , WithProfile : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetSendRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getSendRequestByUserId ( ( new GetSendRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( null ) -\u003e withWithProfile ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetSendRequestByUserIdRequest ; import io.gs2.friend.result.GetSendRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetSendRequestByUserIdResult result = client . getSendRequestByUserId ( new GetSendRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withWithProfile ( null ) . withTimeOffsetToken ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetSendRequestByUserIdResult \u003e asyncResult = null ; yield return client . GetSendRequestByUserId ( new Gs2 . Gs2Friend . Request . GetSendRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( null ) . WithWithProfile ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getSendRequestByUserId ( new Gs2Friend . GetSendRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withWithProfile ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_send_request_by_user_id ( friend . GetSendRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( None ) . with_with_profile ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_send_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , withProfile = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_send_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , withProfile = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendRequest 친구 요청 전송 지정된 대상 사용자에게 친구 요청을 전송합니다. 자기 자신에게는 요청을 보낼 수 없습니다. 자신의 “현재 친구” 수가 1000명에 도달한 경우 새로운 요청을 보낼 수 없습니다. “미승낙 친구 요청\"이 1건 이상 존재하는 경우, 가장 오래된 “미승낙 친구 요청\"을 철회하고 새로운 요청을 전송합니다. 그리고 친구 요청을 받는 쪽도 “미승낙 친구 요청\"이 1000건 존재하는 경우, 가장 오래된 “미승낙 친구 요청\"을 철회하고 새로운 요청을 수락합니다. withProfile 을 true 로 설정하면 대상 사용자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 친구가 되고 싶은 상대의 사용자 ID withProfile bool false 프로필 정보도 함께 조회할지 여부 Result 타입 설명 item FriendRequest 송신한 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . SendRequest ( \u0026 friend . SendRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), WithProfile : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\SendRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e sendRequest ( ( new SendRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withWithProfile ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.SendRequestRequest ; import io.gs2.friend.result.SendRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { SendRequestResult result = client . sendRequest ( new SendRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . SendRequestResult \u003e asyncResult = null ; yield return client . SendRequest ( new Gs2 . Gs2Friend . Request . SendRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithWithProfile ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . sendRequest ( new Gs2Friend . SendRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withWithProfile ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . send_request ( friend . SendRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) . with_with_profile ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.send_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , withProfile = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.send_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , withProfile = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendRequestByUserId 사용자 ID를 지정하여 친구 요청 전송 지정된 사용자를 대신하여 지정된 대상 사용자에게 친구 요청을 전송합니다(서버 사이드 조작). 자기 자신에게는 요청을 보낼 수 없습니다. 자신의 “현재 친구” 수가 1000명에 도달한 경우 새로운 요청을 보낼 수 없습니다. “미승낙 친구 요청\"이 1건 이상 존재하는 경우, 가장 오래된 “미승낙 친구 요청\"을 철회하고 새로운 요청을 전송합니다. 그리고 친구 요청을 받는 쪽도 “미승낙 친구 요청\"이 1000건 존재하는 경우, 가장 오래된 “미승낙 친구 요청\"을 철회하고 새로운 요청을 수락합니다. withProfile 을 true 로 설정하면 대상 사용자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 친구가 되고 싶은 상대의 사용자 ID withProfile bool false 프로필 정보도 함께 조회할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendRequest 송신한 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . SendRequestByUserId ( \u0026 friend . SendRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : nil , WithProfile : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\SendRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e sendRequestByUserId ( ( new SendRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( null ) -\u003e withWithProfile ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.SendRequestByUserIdRequest ; import io.gs2.friend.result.SendRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { SendRequestByUserIdResult result = client . sendRequestByUserId ( new SendRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withWithProfile ( null ) . withTimeOffsetToken ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . SendRequestByUserIdResult \u003e asyncResult = null ; yield return client . SendRequestByUserId ( new Gs2 . Gs2Friend . Request . SendRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( null ) . WithWithProfile ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . sendRequestByUserId ( new Gs2Friend . SendRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withWithProfile ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . send_request_by_user_id ( friend . SendRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( None ) . with_with_profile ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.send_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , withProfile = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.send_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , withProfile = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRequest 송신한 친구 요청 취소 요청한 사용자가 지정된 대상 사용자에게 이전에 송신한 친구 요청을 취소(삭제)합니다. 요청은 발신자의 송신함과 수신자의 수신함 양쪽에서 모두 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID Result 타입 설명 item FriendRequest 삭제한 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DeleteRequest ( \u0026 friend . DeleteRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DeleteRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e deleteRequest ( ( new DeleteRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DeleteRequestRequest ; import io.gs2.friend.result.DeleteRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DeleteRequestResult result = client . deleteRequest ( new DeleteRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DeleteRequestResult \u003e asyncResult = null ; yield return client . DeleteRequest ( new Gs2 . Gs2Friend . Request . DeleteRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . deleteRequest ( new Gs2Friend . DeleteRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . delete_request ( friend . DeleteRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.delete_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.delete_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRequestByUserId 사용자 ID를 지정하여 송신한 친구 요청 취소 지정된 사용자가 지정된 대상 사용자에게 이전에 송신한 친구 요청을 취소(삭제)합니다(서버 사이드 조작). 요청은 발신자의 송신함과 수신자의 수신함 양쪽에서 모두 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendRequest 삭제한 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DeleteRequestByUserId ( \u0026 friend . DeleteRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DeleteRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e deleteRequestByUserId ( ( new DeleteRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DeleteRequestByUserIdRequest ; import io.gs2.friend.result.DeleteRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DeleteRequestByUserIdResult result = client . deleteRequestByUserId ( new DeleteRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withTimeOffsetToken ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DeleteRequestByUserIdResult \u003e asyncResult = null ; yield return client . DeleteRequestByUserId ( new Gs2 . Gs2Friend . Request . DeleteRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . deleteRequestByUserId ( new Gs2Friend . DeleteRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . delete_request_by_user_id ( friend . DeleteRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.delete_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.delete_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetUserId = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeReceiveRequests 수신한 친구 요청 목록 조회 요청한 사용자에게 전송된, 승낙 또는 거부 대기 중인 친구 요청의 페이지네이션된 목록을 조회합니다. withProfile 을 true 로 설정하면 각 요청에 대해 발신자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 withProfile bool false 프로필 정보도 함께 조회할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 친구 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeReceiveRequests ( \u0026 friend . DescribeReceiveRequestsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), WithProfile : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeReceiveRequestsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeReceiveRequests ( ( new DescribeReceiveRequestsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withWithProfile ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeReceiveRequestsRequest ; import io.gs2.friend.result.DescribeReceiveRequestsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeReceiveRequestsResult result = client . describeReceiveRequests ( new DescribeReceiveRequestsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withWithProfile ( null ) . withPageToken ( null ) . withLimit ( null ) ); List FriendRequest \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeReceiveRequestsResult \u003e asyncResult = null ; yield return client . DescribeReceiveRequests ( new Gs2 . Gs2Friend . Request . DescribeReceiveRequestsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithWithProfile ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeReceiveRequests ( new Gs2Friend . DescribeReceiveRequestsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withWithProfile ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_receive_requests ( friend . DescribeReceiveRequestsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_with_profile ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_receive_requests ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , withProfile = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_receive_requests_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , withProfile = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeReceiveRequestsByUserId 사용자 ID를 지정하여 수신한 친구 요청 목록 조회 지정된 사용자에게 전송된 친구 요청의 페이지네이션된 목록을 조회합니다(서버 사이드 조작). withProfile 을 true 로 설정하면 각 요청에 대해 발신자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 친구 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . DescribeReceiveRequestsByUserId ( \u0026 friend . DescribeReceiveRequestsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), WithProfile : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\DescribeReceiveRequestsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e describeReceiveRequestsByUserId ( ( new DescribeReceiveRequestsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withWithProfile ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.DescribeReceiveRequestsByUserIdRequest ; import io.gs2.friend.result.DescribeReceiveRequestsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { DescribeReceiveRequestsByUserIdResult result = client . describeReceiveRequestsByUserId ( new DescribeReceiveRequestsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withWithProfile ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List FriendRequest \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . DescribeReceiveRequestsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeReceiveRequestsByUserId ( new Gs2 . Gs2Friend . Request . DescribeReceiveRequestsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithWithProfile ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . describeReceiveRequestsByUserId ( new Gs2Friend . DescribeReceiveRequestsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withWithProfile ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . describe_receive_requests_by_user_id ( friend . DescribeReceiveRequestsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_with_profile ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.describe_receive_requests_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , withProfile = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'friend' ) api_result_handler = client.describe_receive_requests_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , withProfile = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getReceiveRequest 수신한 친구 요청 조회 지정된 발신자로부터 요청한 사용자에게 전송된 특정 친구 요청을 조회합니다. withProfile 을 true 로 설정하면 발신자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 fromUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 Result 타입 설명 item FriendRequest 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetReceiveRequest ( \u0026 friend . GetReceiveRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), WithProfile : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetReceiveRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getReceiveRequest ( ( new GetReceiveRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) -\u003e withWithProfile ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetReceiveRequestRequest ; import io.gs2.friend.result.GetReceiveRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetReceiveRequestResult result = client . getReceiveRequest ( new GetReceiveRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( \"user-0002\" ) . withWithProfile ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetReceiveRequestResult \u003e asyncResult = null ; yield return client . GetReceiveRequest ( new Gs2 . Gs2Friend . Request . GetReceiveRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithFromUserId ( \"user-0002\" ) . WithWithProfile ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getReceiveRequest ( new Gs2Friend . GetReceiveRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( \"user-0002\" ) . withWithProfile ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_receive_request ( friend . GetReceiveRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_from_user_id ( 'user-0002' ) . with_with_profile ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_receive_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , fromUserId = \"user-0002\" , withProfile = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_receive_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , fromUserId = \"user-0002\" , withProfile = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getReceiveRequestByUserId 사용자 ID를 지정하여 수신한 친구 요청 조회 지정된 발신자로부터 지정된 사용자에게 전송된 특정 친구 요청을 조회합니다(서버 사이드 조작). withProfile 을 true 로 설정하면 발신자의 프로필 정보도 함께 로드되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID fromUserId string  ~ 128자 사용자ID withProfile bool false 프로필 정보도 함께 조회할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendRequest 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetReceiveRequestByUserId ( \u0026 friend . GetReceiveRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), WithProfile : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetReceiveRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getReceiveRequestByUserId ( ( new GetReceiveRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) -\u003e withWithProfile ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetReceiveRequestByUserIdRequest ; import io.gs2.friend.result.GetReceiveRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetReceiveRequestByUserIdResult result = client . getReceiveRequestByUserId ( new GetReceiveRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withFromUserId ( \"user-0002\" ) . withWithProfile ( null ) . withTimeOffsetToken ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetReceiveRequestByUserIdResult \u003e asyncResult = null ; yield return client . GetReceiveRequestByUserId ( new Gs2 . Gs2Friend . Request . GetReceiveRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithFromUserId ( \"user-0002\" ) . WithWithProfile ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getReceiveRequestByUserId ( new Gs2Friend . GetReceiveRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withFromUserId ( \"user-0002\" ) . withWithProfile ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_receive_request_by_user_id ( friend . GetReceiveRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_from_user_id ( 'user-0002' ) . with_with_profile ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_receive_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , fromUserId = \"user-0002\" , withProfile = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_receive_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , fromUserId = \"user-0002\" , withProfile = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acceptRequest 친구 요청 승낙 지정된 발신자로부터의 보류 중인 친구 요청을 승낙합니다. 승낙하면 두 사용자 간에 양방향 친구 관계가 성립되며, 친구 요청은 승낙됨으로 표시됩니다. 양쪽 사용자는 서로의 친구 목록에 표시되며 서로의 친구 등급 프로필 정보를 열람할 수 있게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 fromUserId string  ~ 128자 사용자ID Result 타입 설명 item FriendRequest 승낙한 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . AcceptRequest ( \u0026 friend . AcceptRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\AcceptRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e acceptRequest ( ( new AcceptRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.AcceptRequestRequest ; import io.gs2.friend.result.AcceptRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { AcceptRequestResult result = client . acceptRequest ( new AcceptRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( \"user-0002\" ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . AcceptRequestResult \u003e asyncResult = null ; yield return client . AcceptRequest ( new Gs2 . Gs2Friend . Request . AcceptRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithFromUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . acceptRequest ( new Gs2Friend . AcceptRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . accept_request ( friend . AcceptRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_from_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.accept_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , fromUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.accept_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , fromUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acceptRequestByUserId 사용자 ID를 지정하여 친구 요청 승낙 지정된 사용자에 대한 지정된 발신자로부터의 보류 중인 친구 요청을 승낙합니다(서버 사이드 조작). 승낙하면 두 사용자 간에 양방향 친구 관계가 성립됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID fromUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendRequest 승낙한 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . AcceptRequestByUserId ( \u0026 friend . AcceptRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\AcceptRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e acceptRequestByUserId ( ( new AcceptRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.AcceptRequestByUserIdRequest ; import io.gs2.friend.result.AcceptRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { AcceptRequestByUserIdResult result = client . acceptRequestByUserId ( new AcceptRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withFromUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . AcceptRequestByUserIdResult \u003e asyncResult = null ; yield return client . AcceptRequestByUserId ( new Gs2 . Gs2Friend . Request . AcceptRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithFromUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . acceptRequestByUserId ( new Gs2Friend . AcceptRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withFromUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . accept_request_by_user_id ( friend . AcceptRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_from_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.accept_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , fromUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.accept_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , fromUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; rejectRequest 친구 요청 거부 지정된 발신자로부터의 보류 중인 친구 요청을 거부합니다. 친구 요청은 거부됨으로 표시된 후 삭제됩니다. 친구 관계는 성립되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 fromUserId string  ~ 128자 사용자ID Result 타입 설명 item FriendRequest 거부한 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . RejectRequest ( \u0026 friend . RejectRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\RejectRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e rejectRequest ( ( new RejectRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.RejectRequestRequest ; import io.gs2.friend.result.RejectRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { RejectRequestResult result = client . rejectRequest ( new RejectRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( \"user-0002\" ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . RejectRequestResult \u003e asyncResult = null ; yield return client . RejectRequest ( new Gs2 . Gs2Friend . Request . RejectRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithFromUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . rejectRequest ( new Gs2Friend . RejectRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . reject_request ( friend . RejectRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_from_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.reject_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , fromUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.reject_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , fromUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; rejectRequestByUserId 사용자 ID를 지정하여 친구 요청 거부 지정된 사용자에 대한 지정된 발신자로부터의 보류 중인 친구 요청을 거부합니다(서버 사이드 조작). 친구 요청은 거부됨으로 표시된 후 삭제됩니다. 친구 관계는 성립되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID fromUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FriendRequest 거부한 친구 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . RejectRequestByUserId ( \u0026 friend . RejectRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\RejectRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e rejectRequestByUserId ( ( new RejectRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.RejectRequestByUserIdRequest ; import io.gs2.friend.result.RejectRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { RejectRequestByUserIdResult result = client . rejectRequestByUserId ( new RejectRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withFromUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); FriendRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . RejectRequestByUserIdResult \u003e asyncResult = null ; yield return client . RejectRequestByUserId ( new Gs2 . Gs2Friend . Request . RejectRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithFromUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . rejectRequestByUserId ( new Gs2Friend . RejectRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withFromUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . reject_request_by_user_id ( friend . RejectRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_from_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.reject_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , fromUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.reject_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , fromUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getPublicProfile 공개 프로필 취득 지정된 사용자의 프로필 중 공개 부분만을 취득합니다. 팔로우나 친구 상태와 관계없이 모든 사용자에게 표시되는 프로필 정보입니다. GetProfile 과 달리, 대상 사용자와의 관계는 필요하지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item PublicProfile 공개 프로필 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/friend\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := friend . Gs2FriendRestClient { Session : \u0026 session , } result , err := client . GetPublicProfile ( \u0026 friend . GetPublicProfileRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Friend\\Gs2FriendRestClient ; use Gs2\\Friend\\Request\\GetPublicProfileRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2FriendRestClient ( $session ); try { $result = $client -\u003e getPublicProfile ( ( new GetPublicProfileRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.friend.rest.Gs2FriendRestClient ; import io.gs2.friend.request.GetPublicProfileRequest ; import io.gs2.friend.result.GetPublicProfileResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2FriendRestClient client = new Gs2FriendRestClient ( session ); try { GetPublicProfileResult result = client . getPublicProfile ( new GetPublicProfileRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); PublicProfile item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2FriendRestClient ( session ); AsyncResult Gs2 . Gs2Friend . Result . GetPublicProfileResult \u003e asyncResult = null ; yield return client . GetPublicProfile ( new Gs2 . Gs2Friend . Request . GetPublicProfileRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Friend from '@/gs2/friend' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Friend . Gs2FriendRestClient ( session ); try { const result = await client . getPublicProfile ( new Gs2Friend . GetPublicProfileRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import friend session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = friend . Gs2FriendRestClient ( session ) try : result = client . get_public_profile ( friend . GetPublicProfileRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'friend' ) api_result = client.get_public_profile ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'friend' ) api_result_handler = client.get_public_profile_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Friend SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Friend SDK API 레퍼런스","url":"/ko/api_reference/friend/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 게이트웨이 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. firebaseSecret string ~ 1024자 Firebase 알림 송신에 사용하는 시크릿 토큰 Firebase Cloud Messaging(FCM)의 서버 키 또는 시크릿 토큰입니다. 대상 플레이어가 오프라인이어서 게임 내 WebSocket 알림을 수신할 수 없는 경우, 모바일 푸시 알림 전달을 활성화하기 위해 필요합니다. logSetting LogSetting 로그 출력 설정 게이트웨이 조작의 로그 데이터를 GS2-Log로 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 WebSocket 세션 관리, 알림 전달, Firebase 토큰 조작에 대한 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. WebSocketSession WebSocketSession WebSocket 세션은 GS2 서버와 클라이언트 간의 지속적인 연결로, 실시간 양방향 통신을 수행합니다. 서버에 대해 클라이언트 측에서 식별자로 사용자 ID를 등록합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 webSocketSessionId string ※ ~ 1024자 WebSocket 세션 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 connectionId string  ~ 128자 커넥션 ID 이 WebSocket 접속에 할당된 고유 식별자입니다. 알림 송신 시 특정 클라이언트 접속을 식별하는 데 사용됩니다. namespaceName string  ~ 128자 네임스페이스 이름 userId string  ~ 128자 사용자ID sessionId string ~ 128자 세션 ID 이 WebSocket 접속에 연관 지을 수 있는 선택적 세션 식별자입니다. WebSocket 세션을 애플리케이션 레벨의 세션 컨텍스트와 연관시키는 데 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 FirebaseToken Firebase 디바이스 토큰 Firebase 디바이스 토큰은 모바일 푸시 알림을 이용할 때 필요합니다. GS2-Gateway는 게임 내 푸시 알림 기능을 제공하여 매치메이킹 완료 시나 미션 달성 시 푸시 알림을 받을 수 있지만 알림 대상 플레이어가 오프라인인 경우 모바일 푸시 알림으로 전달할 수 있습니다. 이때 알림 대상 디바이스를 특정하여 알림을 보내는 데 사용되는 것이 Firebase 디바이스 토큰입니다. 이름 그대로 Firebase라는 외부 서비스를 이용하므로, 토큰 취득 방법 등 자세한 내용은 Firebase 문서를 확인해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 firebaseTokenId string ※ ~ 1024자 Firebase 디바이스 토큰 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID token string  ~ 1024자 Firebase Cloud Messaging의 디바이스 토큰 클라이언트 디바이스에서 취득한 FCM 등록 토큰입니다. 플레이어가 오프라인이어서 게임 내 WebSocket 알림을 수신할 수 없는 경우, 모바일 푸시 알림을 전달할 특정 디바이스를 식별합니다. 토큰은 디바이스 고유의 값이며 앱을 재설치하거나 데이터를 삭제하면 변경될 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SendNotificationEntry 알림 송신 엔트리 플레이어에게 전달되는 알림 메시지를 나타냅니다. 온라인 상태의 플레이어에게는 먼저 WebSocket을 통해 알림이 시도됩니다. 플레이어가 오프라인이고 모바일 푸시 알림 전달이 활성화되어 있는 경우, Firebase Cloud Messaging을 통해 플레이어의 디바이스로 알림이 전달됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID issuer string  ~ 256자 알림 발신 서비스 이 알림을 발행한 GS2 서비스의 식별자입니다. 예를 들어 매치메이킹 완료 알림의 경우 “gs2-matchmaking”, 미션 달성 알림의 경우 “gs2-mission” 등입니다. 클라이언트가 알림 처리 방법을 결정하는 데 사용됩니다. subject string  ~ 128자 제목 알림 메시지의 제목 또는 요약입니다. 모바일 푸시 알림으로 전달되는 경우, 디바이스에서 알림 제목으로 표시됩니다. payload string  ~ 1024자 페이로드 알림의 JSON 데이터 본문입니다. 알림을 트리거한 이벤트에 관한 서비스별 상세 정보를 포함합니다. WebSocket을 통해서는 그대로 클라이언트에 전달되며, 전달 시에는 모바일 푸시 알림의 데이터에 포함됩니다. enableTransferMobileNotification bool false 알림 대상 사용자가 오프라인일 때 모바일 푸시 알림으로 전달할지 여부 활성화하면 대상 플레이어가 활성 WebSocket 연결을 가지고 있지 않은 경우, Firebase Cloud Messaging을 통해 모바일 디바이스로 알림이 전달됩니다. 네임스페이스에 Firebase 시크릿이 설정되어 있고 플레이어가 디바이스 토큰을 등록해 두어야 합니다. sound string {enableTransferMobileNotification} == true ~ 256자 재생할 음성 파일명 모바일 푸시 알림이 전달될 때 재생할 음성 파일명입니다. 모바일 푸시 알림 전달이 활성화되어 있는 경우에만 적용됩니다. 음성 파일은 클라이언트 애플리케이션 번들에 포함되어 있어야 합니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 gateway . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DescribeNamespacesRequest ; import io.gs2.gateway.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Gateway . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Gateway . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . describe_namespaces ( gateway . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'gateway' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 게이트웨이 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. firebaseSecret string ~ 1024자 Firebase 알림 송신에 사용하는 시크릿 토큰 Firebase Cloud Messaging(FCM)의 서버 키 또는 시크릿 토큰입니다. 대상 플레이어가 오프라인이어서 게임 내 WebSocket 알림을 수신할 수 없는 경우, 모바일 푸시 알림 전달을 활성화하기 위해 필요합니다. logSetting LogSetting 로그 출력 설정 게이트웨이 조작의 로그 데이터를 GS2-Log로 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 WebSocket 세션 관리, 알림 전달, Firebase 토큰 조작에 대한 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 gateway . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , FirebaseSecret : nil , LogSetting : \u0026 gateway . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withFirebaseSecret ( null ) -\u003e withLogSetting (( new \\Gs2\\Gateway\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.CreateNamespaceRequest ; import io.gs2.gateway.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withFirebaseSecret ( null ) . withLogSetting ( new io . gs2 . gateway . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Gateway . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithFirebaseSecret ( null ) . WithLogSetting ( new Gs2 . Gs2Gateway . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Gateway . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withFirebaseSecret ( null ) . withLogSetting ( new Gs2Gateway . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . create_namespace ( gateway . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_firebase_secret ( None ) . with_log_setting ( gateway . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , firebaseSecret = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , firebaseSecret = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 gateway . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.GetNamespaceStatusRequest ; import io.gs2.gateway.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Gateway . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Gateway . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . get_namespace_status ( gateway . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'gateway' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 gateway . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.GetNamespaceRequest ; import io.gs2.gateway.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Gateway . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Gateway . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . get_namespace ( gateway . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 게이트웨이 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. firebaseSecret string ~ 1024자 Firebase 알림 송신에 사용하는 시크릿 토큰 Firebase Cloud Messaging(FCM)의 서버 키 또는 시크릿 토큰입니다. 대상 플레이어가 오프라인이어서 게임 내 WebSocket 알림을 수신할 수 없는 경우, 모바일 푸시 알림 전달을 활성화하기 위해 필요합니다. logSetting LogSetting 로그 출력 설정 게이트웨이 조작의 로그 데이터를 GS2-Log로 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 WebSocket 세션 관리, 알림 전달, Firebase 토큰 조작에 대한 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 gateway . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , FirebaseSecret : pointy . String ( \"firebase-secret2\" ), LogSetting : \u0026 gateway . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withFirebaseSecret ( \"firebase-secret2\" ) -\u003e withLogSetting (( new \\Gs2\\Gateway\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.UpdateNamespaceRequest ; import io.gs2.gateway.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withFirebaseSecret ( \"firebase-secret2\" ) . withLogSetting ( new io . gs2 . gateway . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Gateway . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithFirebaseSecret ( \"firebase-secret2\" ) . WithLogSetting ( new Gs2 . Gs2Gateway . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Gateway . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withFirebaseSecret ( \"firebase-secret2\" ) . withLogSetting ( new Gs2Gateway . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . update_namespace ( gateway . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_firebase_secret ( 'firebase-secret2' ) . with_log_setting ( gateway . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , firebaseSecret = \"firebase-secret2\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , firebaseSecret = \"firebase-secret2\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 gateway . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DeleteNamespaceRequest ; import io.gs2.gateway.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Gateway . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Gateway . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . delete_namespace ( gateway . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 gateway . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.GetServiceVersionRequest ; import io.gs2.gateway.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Gateway . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Gateway . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . get_service_version ( gateway . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 gateway . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DumpUserDataByUserIdRequest ; import io.gs2.gateway.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Gateway . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Gateway . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . dump_user_data_by_user_id ( gateway . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'gateway' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 gateway . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.gateway.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Gateway . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Gateway . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( gateway . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'gateway' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 gateway . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.CleanUserDataByUserIdRequest ; import io.gs2.gateway.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Gateway . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Gateway . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . clean_user_data_by_user_id ( gateway . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'gateway' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 gateway . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.gateway.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Gateway . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Gateway . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( gateway . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'gateway' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 gateway . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.gateway.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Gateway . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Gateway . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( gateway . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'gateway' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 gateway . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.ImportUserDataByUserIdRequest ; import io.gs2.gateway.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Gateway . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Gateway . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . import_user_data_by_user_id ( gateway . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'gateway' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 gateway . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.CheckImportUserDataByUserIdRequest ; import io.gs2.gateway.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Gateway . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Gateway . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( gateway . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'gateway' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeWebSocketSessions WebSocket 세션 목록 조회 요청한 사용자의 활성 WebSocket 세션에 대한 페이지네이션 리스트를 조회합니다. 각 세션은 클라이언트 디바이스로부터의 활성 WebSocket 접속을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List WebSocket 세션 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DescribeWebSocketSessions ( \u0026 gateway . DescribeWebSocketSessionsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DescribeWebSocketSessionsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e describeWebSocketSessions ( ( new DescribeWebSocketSessionsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DescribeWebSocketSessionsRequest ; import io.gs2.gateway.result.DescribeWebSocketSessionsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DescribeWebSocketSessionsResult result = client . describeWebSocketSessions ( new DescribeWebSocketSessionsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List WebSocketSession \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DescribeWebSocketSessionsResult \u003e asyncResult = null ; yield return client . DescribeWebSocketSessions ( new Gs2 . Gs2Gateway . Request . DescribeWebSocketSessionsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . describeWebSocketSessions ( new Gs2Gateway . DescribeWebSocketSessionsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . describe_web_socket_sessions ( gateway . DescribeWebSocketSessionsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.describe_web_socket_sessions ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'gateway' ) api_result_handler = client.describe_web_socket_sessions_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeWebSocketSessionsByUserId 사용자 ID를 지정하여 WebSocket 세션 목록 조회 지정된 사용자의 활성 WebSocket 세션에 대한 페이지네이션 리스트를 조회합니다(서버 사이드 조작). 각 세션은 클라이언트 디바이스로부터의 활성 WebSocket 접속을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List WebSocket 세션 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DescribeWebSocketSessionsByUserId ( \u0026 gateway . DescribeWebSocketSessionsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DescribeWebSocketSessionsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e describeWebSocketSessionsByUserId ( ( new DescribeWebSocketSessionsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DescribeWebSocketSessionsByUserIdRequest ; import io.gs2.gateway.result.DescribeWebSocketSessionsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DescribeWebSocketSessionsByUserIdResult result = client . describeWebSocketSessionsByUserId ( new DescribeWebSocketSessionsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List WebSocketSession \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DescribeWebSocketSessionsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeWebSocketSessionsByUserId ( new Gs2 . Gs2Gateway . Request . DescribeWebSocketSessionsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . describeWebSocketSessionsByUserId ( new Gs2Gateway . DescribeWebSocketSessionsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . describe_web_socket_sessions_by_user_id ( gateway . DescribeWebSocketSessionsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.describe_web_socket_sessions_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'gateway' ) api_result_handler = client.describe_web_socket_sessions_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; setUserId WebSocket 세션에 사용자 ID 설정 현재 WebSocket 접속을 사용자 ID에 연결하여 세션을 생성 또는 갱신합니다. allowConcurrentAccess가 false인 경우, 동일한 사용자의 기존 세션은 force 플래그를 기준으로 처리됩니다: force가 false이고 다른 세션이 존재하는 경우, Conflict 오류가 반환됩니다(중복 로그인 방지). force가 true인 경우, 기존 세션은 연결 해제된 후 교체됩니다. sessionId가 지정된 경우, 동일한 sessionId의 접속은 허용됩니다(재접속에 유용). allowConcurrentAccess가 true인 경우, 동일한 사용자로부터의 다중 동시 접속이 허용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 connectionId string  ~ 128자 커넥션 ID 이 WebSocket 접속에 할당된 고유 식별자입니다. 알림 송신 시 특정 클라이언트 접속을 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 allowConcurrentAccess bool true 동시에 다른 클라이언트로부터의 접속을 허용할지 여부 sessionId string {allowConcurrentAccess} == false ~ 128자 allowConcurrentAccess를 false로 설정한 경우에도, 기존 접속과 동일한 sessionId라면 접속을 허용하기 위해 지정합니다. ※ allowConcurrentAccess이(가) false 이면 활성화 force bool? {allowConcurrentAccess} == false false 기존 WebSocket 세션을 연결 해제한 후 새로운 WebSocket 세션을 생성합니다. ※ allowConcurrentAccess이(가) false 이면 활성화 Result 타입 설명 item WebSocketSession 갱신한 WebSocket 세션 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . SetUserId ( \u0026 gateway . SetUserIdRequest { NamespaceName : pointy . String ( \"$hash\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AllowConcurrentAccess : pointy . Bool ( true ), SessionId : nil , Force : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\SetUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e setUserId ( ( new SetUserIdRequest ()) -\u003e withNamespaceName ( \" $hash \" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAllowConcurrentAccess ( true ) -\u003e withSessionId ( null ) -\u003e withForce ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.SetUserIdRequest ; import io.gs2.gateway.result.SetUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { SetUserIdResult result = client . setUserId ( new SetUserIdRequest () . withNamespaceName ( \"$hash\" ) . withAccessToken ( \"accessToken-0001\" ) . withAllowConcurrentAccess ( true ) . withSessionId ( null ) . withForce ( null ) ); WebSocketSession item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . SetUserIdResult \u003e asyncResult = null ; yield return client . SetUserId ( new Gs2 . Gs2Gateway . Request . SetUserIdRequest () . WithNamespaceName ( \"$hash\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAllowConcurrentAccess ( true ) . WithSessionId ( null ) . WithForce ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . setUserId ( new Gs2Gateway . SetUserIdRequest () . withNamespaceName ( \"$hash\" ) . withAccessToken ( \"accessToken-0001\" ) . withAllowConcurrentAccess ( true ) . withSessionId ( null ) . withForce ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . set_user_id ( gateway . SetUserIdRequest () . with_namespace_name ( '$hash' ) . with_access_token ( 'accessToken-0001' ) . with_allow_concurrent_access ( True ) . with_session_id ( None ) . with_force ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.set_user_id ({ namespaceName = \"$hash\" , accessToken = \"accessToken-0001\" , allowConcurrentAccess = true , sessionId = nil , force = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.set_user_id_async ({ namespaceName = \"$hash\" , accessToken = \"accessToken-0001\" , allowConcurrentAccess = true , sessionId = nil , force = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setUserIdByUserId 사용자 ID를 지정하여 WebSocket 세션에 사용자 ID 설정 현재 WebSocket 접속을 지정된 사용자 ID에 연결합니다(서버 사이드 조작). 동시 접속 제어 및 세션 관리 동작은 SetUserId와 동일합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 connectionId string  ~ 128자 커넥션 ID 이 WebSocket 접속에 할당된 고유 식별자입니다. 알림 송신 시 특정 클라이언트 접속을 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID allowConcurrentAccess bool true 동시에 다른 클라이언트로부터의 접속을 허용할지 여부 sessionId string {allowConcurrentAccess} == false ~ 128자 allowConcurrentAccess를 false로 설정한 경우에도, 기존 접속과 동일한 sessionId라면 접속을 허용하기 위해 지정합니다. ※ allowConcurrentAccess이(가) false 이면 활성화 force bool? {allowConcurrentAccess} == false false 기존 WebSocket 세션을 연결 해제한 후 새로운 WebSocket 세션을 생성합니다. ※ allowConcurrentAccess이(가) false 이면 활성화 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item WebSocketSession 갱신한 WebSocket 세션 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . SetUserIdByUserId ( \u0026 gateway . SetUserIdByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), AllowConcurrentAccess : pointy . Bool ( true ), SessionId : nil , Force : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\SetUserIdByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e setUserIdByUserId ( ( new SetUserIdByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAllowConcurrentAccess ( true ) -\u003e withSessionId ( null ) -\u003e withForce ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.SetUserIdByUserIdRequest ; import io.gs2.gateway.result.SetUserIdByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { SetUserIdByUserIdResult result = client . setUserIdByUserId ( new SetUserIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAllowConcurrentAccess ( true ) . withSessionId ( null ) . withForce ( null ) . withTimeOffsetToken ( null ) ); WebSocketSession item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . SetUserIdByUserIdResult \u003e asyncResult = null ; yield return client . SetUserIdByUserId ( new Gs2 . Gs2Gateway . Request . SetUserIdByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithAllowConcurrentAccess ( true ) . WithSessionId ( null ) . WithForce ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . setUserIdByUserId ( new Gs2Gateway . SetUserIdByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAllowConcurrentAccess ( true ) . withSessionId ( null ) . withForce ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . set_user_id_by_user_id ( gateway . SetUserIdByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_allow_concurrent_access ( True ) . with_session_id ( None ) . with_force ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.set_user_id_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , allowConcurrentAccess = true , sessionId = nil , force = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.set_user_id_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , allowConcurrentAccess = true , sessionId = nil , force = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendNotification 알림 전송 지정된 사용자의 모든 활성 WebSocket 세션에 알림 메시지를 전송합니다. 알림에는 제목과 페이로드, 선택적으로 음성 파일명이 포함됩니다. enableTransferMobileNotification이 true이고 사용자에게 활성 WebSocket 세션이 없는(오프라인) 경우, Firebase를 통해 모바일 푸시 알림으로 전달될 수 있습니다. 사용된 프로토콜과 알림을 수신한 접속 ID 목록이 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 userId string  ~ 128자 사용자ID subject string  ~ 128자 제목 알림 메시지의 제목 또는 요약입니다. 모바일 푸시 알림으로 전달되는 경우, 디바이스에서 알림 제목으로 표시됩니다. payload string  ~ 1024자 페이로드 알림의 JSON 데이터 본문입니다. 알림을 트리거한 이벤트에 관한 서비스별 상세 정보를 포함합니다. WebSocket을 통해서는 그대로 클라이언트에 전달되며, 전달 시에는 모바일 푸시 알림의 데이터에 포함됩니다. enableTransferMobileNotification bool false 알림 대상 사용자가 오프라인일 때 모바일 푸시 알림으로 전달할지 여부 활성화하면 대상 플레이어가 활성 WebSocket 연결을 가지고 있지 않은 경우, Firebase Cloud Messaging을 통해 모바일 디바이스로 알림이 전달됩니다. 네임스페이스에 Firebase 시크릿이 설정되어 있고 플레이어가 디바이스 토큰을 등록해 두어야 합니다. sound string {enableTransferMobileNotification} == true ~ 256자 재생할 음성 파일명 모바일 푸시 알림이 전달될 때 재생할 음성 파일명입니다. 모바일 푸시 알림 전달이 활성화되어 있는 경우에만 적용됩니다. 음성 파일은 클라이언트 애플리케이션 번들에 포함되어 있어야 합니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 protocol string 알림에 사용한 프로토콜 sendConnectionIds List 전송한 접속 ID 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . SendNotification ( \u0026 gateway . SendNotificationRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Subject : pointy . String ( \"subject\" ), Payload : pointy . String ( \"payload\" ), EnableTransferMobileNotification : pointy . Bool ( true ), Sound : pointy . String ( \"sound.wav\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } protocol := result . Protocol sendConnectionIds := result . SendConnectionIds use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\SendNotificationRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e sendNotification ( ( new SendNotificationRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSubject ( \"subject\" ) -\u003e withPayload ( \"payload\" ) -\u003e withEnableTransferMobileNotification ( true ) -\u003e withSound ( \"sound.wav\" ) -\u003e withTimeOffsetToken ( null ) ); $protocol = $result -\u003e getProtocol (); $sendConnectionIds = $result -\u003e getSendConnectionIds (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.SendNotificationRequest ; import io.gs2.gateway.result.SendNotificationResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { SendNotificationResult result = client . sendNotification ( new SendNotificationRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSubject ( \"subject\" ) . withPayload ( \"payload\" ) . withEnableTransferMobileNotification ( true ) . withSound ( \"sound.wav\" ) . withTimeOffsetToken ( null ) ); String protocol = result . getProtocol (); List String \u003e sendConnectionIds = result . getSendConnectionIds (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . SendNotificationResult \u003e asyncResult = null ; yield return client . SendNotification ( new Gs2 . Gs2Gateway . Request . SendNotificationRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSubject ( \"subject\" ) . WithPayload ( \"payload\" ) . WithEnableTransferMobileNotification ( true ) . WithSound ( \"sound.wav\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var protocol = result . Protocol ; var sendConnectionIds = result . SendConnectionIds ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . sendNotification ( new Gs2Gateway . SendNotificationRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSubject ( \"subject\" ) . withPayload ( \"payload\" ) . withEnableTransferMobileNotification ( true ) . withSound ( \"sound.wav\" ) . withTimeOffsetToken ( null ) ); const protocol = result . getProtocol (); const sendConnectionIds = result . getSendConnectionIds (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . send_notification ( gateway . SendNotificationRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_subject ( 'subject' ) . with_payload ( 'payload' ) . with_enable_transfer_mobile_notification ( True ) . with_sound ( 'sound.wav' ) . with_time_offset_token ( None ) ) protocol = result . protocol send_connection_ids = result . send_connection_ids except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.send_notification ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , subject = \"subject\" , payload = \"payload\" , enableTransferMobileNotification = true , sound = \"sound.wav\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result protocol = result.protocol ; sendConnectionIds = result.sendConnectionIds ; client = gs2 ( 'gateway' ) api_result_handler = client.send_notification_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , subject = \"subject\" , payload = \"payload\" , enableTransferMobileNotification = true , sound = \"sound.wav\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result protocol = result.protocol ; sendConnectionIds = result.sendConnectionIds ; disconnectByUserId 사용자 ID를 지정하여 WebSocket 세션 연결 해제 지정된 사용자의 모든 활성 WebSocket 세션을 연결 해제하고 삭제합니다. 연결 해제된 세션 목록이 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 연결 해제한 WebSocket 세션 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DisconnectByUserId ( \u0026 gateway . DisconnectByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DisconnectByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e disconnectByUserId ( ( new DisconnectByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DisconnectByUserIdRequest ; import io.gs2.gateway.result.DisconnectByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DisconnectByUserIdResult result = client . disconnectByUserId ( new DisconnectByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List WebSocketSession \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DisconnectByUserIdResult \u003e asyncResult = null ; yield return client . DisconnectByUserId ( new Gs2 . Gs2Gateway . Request . DisconnectByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . disconnectByUserId ( new Gs2Gateway . DisconnectByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . disconnect_by_user_id ( gateway . DisconnectByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.disconnect_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'gateway' ) api_result_handler = client.disconnect_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; disconnectAll 모든 WebSocket 세션 연결 해제 지정된 네임스페이스 내의 모든 WebSocket 세션을 연결 해제합니다. 모든 사용자의 세션에 영향을 미치는 네임스페이스 전체의 조작입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DisconnectAll ( \u0026 gateway . DisconnectAllRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DisconnectAllRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e disconnectAll ( ( new DisconnectAllRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DisconnectAllRequest ; import io.gs2.gateway.result.DisconnectAllResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DisconnectAllResult result = client . disconnectAll ( new DisconnectAllRequest () . withNamespaceName ( \"namespace-0001\" ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DisconnectAllResult \u003e asyncResult = null ; yield return client . DisconnectAll ( new Gs2 . Gs2Gateway . Request . DisconnectAllRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . disconnectAll ( new Gs2Gateway . DisconnectAllRequest () . withNamespaceName ( \"namespace-0001\" ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . disconnect_all ( gateway . DisconnectAllRequest () . with_namespace_name ( 'namespace-0001' ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.disconnect_all ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'gateway' ) api_result_handler = client.disconnect_all_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result setFirebaseToken Firebase 디바이스 토큰 설정 요청한 사용자의 Firebase Cloud Messaging (FCM) 디바이스 토큰을 등록 또는 갱신합니다. 사용자의 토큰이 이미 존재하는 경우 새로운 값으로 갱신되며, 존재하지 않는 경우 새로 생성됩니다. 이 토큰은 사용자가 오프라인(활성 WebSocket 세션이 없는) 상태일 때 모바일 푸시 알림을 전달하는 데 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 token string  ~ 1024자 Firebase Cloud Messaging의 디바이스 토큰 클라이언트 디바이스에서 취득한 FCM 등록 토큰입니다. 플레이어가 오프라인이어서 게임 내 WebSocket 알림을 수신할 수 없는 경우, 모바일 푸시 알림을 전달할 특정 디바이스를 식별합니다. 토큰은 디바이스 고유의 값이며 앱을 재설치하거나 데이터를 삭제하면 변경될 수 있습니다. Result 타입 설명 item FirebaseToken 생성한 Firebase 디바이스 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . SetFirebaseToken ( \u0026 gateway . SetFirebaseTokenRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Token : pointy . String ( \"firebase-token-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\SetFirebaseTokenRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e setFirebaseToken ( ( new SetFirebaseTokenRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withToken ( \"firebase-token-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.SetFirebaseTokenRequest ; import io.gs2.gateway.result.SetFirebaseTokenResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { SetFirebaseTokenResult result = client . setFirebaseToken ( new SetFirebaseTokenRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withToken ( \"firebase-token-0001\" ) ); FirebaseToken item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . SetFirebaseTokenResult \u003e asyncResult = null ; yield return client . SetFirebaseToken ( new Gs2 . Gs2Gateway . Request . SetFirebaseTokenRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithToken ( \"firebase-token-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . setFirebaseToken ( new Gs2Gateway . SetFirebaseTokenRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withToken ( \"firebase-token-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . set_firebase_token ( gateway . SetFirebaseTokenRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_token ( 'firebase-token-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.set_firebase_token ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , token = \"firebase-token-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.set_firebase_token_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , token = \"firebase-token-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setFirebaseTokenByUserId 사용자 ID를 지정하여 Firebase 디바이스 토큰 설정 지정된 사용자의 Firebase Cloud Messaging (FCM) 디바이스 토큰을 등록 또는 갱신합니다(서버 사이드 조작). 사용자의 토큰이 이미 존재하는 경우 갱신되며, 존재하지 않는 경우 새로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID token string  ~ 1024자 Firebase Cloud Messaging의 디바이스 토큰 클라이언트 디바이스에서 취득한 FCM 등록 토큰입니다. 플레이어가 오프라인이어서 게임 내 WebSocket 알림을 수신할 수 없는 경우, 모바일 푸시 알림을 전달할 특정 디바이스를 식별합니다. 토큰은 디바이스 고유의 값이며 앱을 재설치하거나 데이터를 삭제하면 변경될 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FirebaseToken 생성한 Firebase 디바이스 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . SetFirebaseTokenByUserId ( \u0026 gateway . SetFirebaseTokenByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Token : pointy . String ( \"firebase-token-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\SetFirebaseTokenByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e setFirebaseTokenByUserId ( ( new SetFirebaseTokenByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withToken ( \"firebase-token-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.SetFirebaseTokenByUserIdRequest ; import io.gs2.gateway.result.SetFirebaseTokenByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { SetFirebaseTokenByUserIdResult result = client . setFirebaseTokenByUserId ( new SetFirebaseTokenByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withToken ( \"firebase-token-0001\" ) . withTimeOffsetToken ( null ) ); FirebaseToken item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . SetFirebaseTokenByUserIdResult \u003e asyncResult = null ; yield return client . SetFirebaseTokenByUserId ( new Gs2 . Gs2Gateway . Request . SetFirebaseTokenByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithToken ( \"firebase-token-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . setFirebaseTokenByUserId ( new Gs2Gateway . SetFirebaseTokenByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withToken ( \"firebase-token-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . set_firebase_token_by_user_id ( gateway . SetFirebaseTokenByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_token ( 'firebase-token-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.set_firebase_token_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , token = \"firebase-token-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.set_firebase_token_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , token = \"firebase-token-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getFirebaseToken Firebase 디바이스 토큰 조회 요청한 사용자에게 등록되어 있는 Firebase Cloud Messaging (FCM) 디바이스 토큰을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item FirebaseToken Firebase 디바이스 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . GetFirebaseToken ( \u0026 gateway . GetFirebaseTokenRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\GetFirebaseTokenRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e getFirebaseToken ( ( new GetFirebaseTokenRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.GetFirebaseTokenRequest ; import io.gs2.gateway.result.GetFirebaseTokenResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { GetFirebaseTokenResult result = client . getFirebaseToken ( new GetFirebaseTokenRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); FirebaseToken item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . GetFirebaseTokenResult \u003e asyncResult = null ; yield return client . GetFirebaseToken ( new Gs2 . Gs2Gateway . Request . GetFirebaseTokenRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . getFirebaseToken ( new Gs2Gateway . GetFirebaseTokenRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . get_firebase_token ( gateway . GetFirebaseTokenRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.get_firebase_token ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.get_firebase_token_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getFirebaseTokenByUserId 사용자 ID를 지정하여 Firebase 디바이스 토큰 조회 지정된 사용자에게 등록되어 있는 Firebase Cloud Messaging (FCM) 디바이스 토큰을 조회합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FirebaseToken Firebase 디바이스 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . GetFirebaseTokenByUserId ( \u0026 gateway . GetFirebaseTokenByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\GetFirebaseTokenByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e getFirebaseTokenByUserId ( ( new GetFirebaseTokenByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.GetFirebaseTokenByUserIdRequest ; import io.gs2.gateway.result.GetFirebaseTokenByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { GetFirebaseTokenByUserIdResult result = client . getFirebaseTokenByUserId ( new GetFirebaseTokenByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); FirebaseToken item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . GetFirebaseTokenByUserIdResult \u003e asyncResult = null ; yield return client . GetFirebaseTokenByUserId ( new Gs2 . Gs2Gateway . Request . GetFirebaseTokenByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . getFirebaseTokenByUserId ( new Gs2Gateway . GetFirebaseTokenByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . get_firebase_token_by_user_id ( gateway . GetFirebaseTokenByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.get_firebase_token_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.get_firebase_token_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteFirebaseToken Firebase 디바이스 토큰 삭제 요청한 사용자에게 등록되어 있는 Firebase Cloud Messaging (FCM) 디바이스 토큰을 삭제합니다. 삭제 후, 사용자는 오프라인 상태일 때 모바일 푸시 알림을 수신할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item FirebaseToken 삭제한 Firebase 디바이스 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DeleteFirebaseToken ( \u0026 gateway . DeleteFirebaseTokenRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DeleteFirebaseTokenRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e deleteFirebaseToken ( ( new DeleteFirebaseTokenRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DeleteFirebaseTokenRequest ; import io.gs2.gateway.result.DeleteFirebaseTokenResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DeleteFirebaseTokenResult result = client . deleteFirebaseToken ( new DeleteFirebaseTokenRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); FirebaseToken item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DeleteFirebaseTokenResult \u003e asyncResult = null ; yield return client . DeleteFirebaseToken ( new Gs2 . Gs2Gateway . Request . DeleteFirebaseTokenRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . deleteFirebaseToken ( new Gs2Gateway . DeleteFirebaseTokenRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . delete_firebase_token ( gateway . DeleteFirebaseTokenRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.delete_firebase_token ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.delete_firebase_token_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteFirebaseTokenByUserId 사용자 ID를 지정하여 Firebase 디바이스 토큰 삭제 지정된 사용자에게 등록되어 있는 Firebase Cloud Messaging (FCM) 디바이스 토큰을 삭제합니다(서버 사이드 조작). 삭제 후, 사용자는 오프라인 상태일 때 모바일 푸시 알림을 수신할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item FirebaseToken 삭제한 Firebase 디바이스 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . DeleteFirebaseTokenByUserId ( \u0026 gateway . DeleteFirebaseTokenByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\DeleteFirebaseTokenByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e deleteFirebaseTokenByUserId ( ( new DeleteFirebaseTokenByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.DeleteFirebaseTokenByUserIdRequest ; import io.gs2.gateway.result.DeleteFirebaseTokenByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { DeleteFirebaseTokenByUserIdResult result = client . deleteFirebaseTokenByUserId ( new DeleteFirebaseTokenByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); FirebaseToken item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . DeleteFirebaseTokenByUserIdResult \u003e asyncResult = null ; yield return client . DeleteFirebaseTokenByUserId ( new Gs2 . Gs2Gateway . Request . DeleteFirebaseTokenByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . deleteFirebaseTokenByUserId ( new Gs2Gateway . DeleteFirebaseTokenByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . delete_firebase_token_by_user_id ( gateway . DeleteFirebaseTokenByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.delete_firebase_token_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'gateway' ) api_result_handler = client.delete_firebase_token_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendMobileNotificationByUserId 모바일 푸시 알림 전송 Firebase Cloud Messaging (FCM)을 통해 지정된 사용자에게 모바일 푸시 알림을 전송합니다. 알림에는 제목(subject), 페이로드(body), 선택적으로 음성 파일명이 포함됩니다. 알림을 전달하려면 사용자가 Firebase 디바이스 토큰을 등록해 두어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID subject string  ~ 256자 제목 payload string  ~ 1024자 페이로드 sound string ~ 256자 재생할 음성 파일명 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/gateway\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := gateway . Gs2GatewayRestClient { Session : \u0026 session , } result , err := client . SendMobileNotificationByUserId ( \u0026 gateway . SendMobileNotificationByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Subject : pointy . String ( \"subject\" ), Payload : pointy . String ( \"payload\" ), Sound : pointy . String ( \"sound.wav\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Gateway\\Gs2GatewayRestClient ; use Gs2\\Gateway\\Request\\SendMobileNotificationByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GatewayRestClient ( $session ); try { $result = $client -\u003e sendMobileNotificationByUserId ( ( new SendMobileNotificationByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSubject ( \"subject\" ) -\u003e withPayload ( \"payload\" ) -\u003e withSound ( \"sound.wav\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.gateway.rest.Gs2GatewayRestClient ; import io.gs2.gateway.request.SendMobileNotificationByUserIdRequest ; import io.gs2.gateway.result.SendMobileNotificationByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GatewayRestClient client = new Gs2GatewayRestClient ( session ); try { SendMobileNotificationByUserIdResult result = client . sendMobileNotificationByUserId ( new SendMobileNotificationByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSubject ( \"subject\" ) . withPayload ( \"payload\" ) . withSound ( \"sound.wav\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GatewayRestClient ( session ); AsyncResult Gs2 . Gs2Gateway . Result . SendMobileNotificationByUserIdResult \u003e asyncResult = null ; yield return client . SendMobileNotificationByUserId ( new Gs2 . Gs2Gateway . Request . SendMobileNotificationByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSubject ( \"subject\" ) . WithPayload ( \"payload\" ) . WithSound ( \"sound.wav\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Gateway from '@/gs2/gateway' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Gateway . Gs2GatewayRestClient ( session ); try { const result = await client . sendMobileNotificationByUserId ( new Gs2Gateway . SendMobileNotificationByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSubject ( \"subject\" ) . withPayload ( \"payload\" ) . withSound ( \"sound.wav\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import gateway session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = gateway . Gs2GatewayRestClient ( session ) try : result = client . send_mobile_notification_by_user_id ( gateway . SendMobileNotificationByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_subject ( 'subject' ) . with_payload ( 'payload' ) . with_sound ( 'sound.wav' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'gateway' ) api_result = client.send_mobile_notification_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , subject = \"subject\" , payload = \"payload\" , sound = \"sound.wav\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'gateway' ) api_result_handler = client.send_mobile_notification_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , subject = \"subject\" , payload = \"payload\" , sound = \"sound.wav\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Gateway SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Gateway SDK API 레퍼런스","url":"/ko/api_reference/gateway/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 그레이드 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. changeGradeScript ScriptSetting 그레이드가 변화했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - changeGrade logSetting LogSetting 로그 출력 설정 그레이드 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써, 그레이드 변경 및 랭크 캡 업데이트에 대한 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Status 스테이터스 스테이터스란 프로퍼티 ID마다 존재하는 엔티티로, 현재 그레이드의 값을 보유합니다. 프로퍼티 ID란 스테이터스 고유의 ID로, 개발자가 임의의 값을 설정할 수 있습니다. 연동되는 GS2-Experience의 프로퍼티 ID와 완전히 일치하는 값을 사용할 것을 강력히 권장합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 statusId string ※ ~ 1024자 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 1 1 ~ 9223372036854775805 현재 그레이드 이 스테이터스의 현재 그레이드 값입니다. 연동되는 GS2-Experience 모델의 랭크 캡을 결정하기 위해 그레이드 모델의 그레이드 엔트리 배열의 인덱스로 사용됩니다. 이 값이 변경되면 관련된 경험치 스테이터스의 랭크 캡이 해당 그레이드 엔트리에서 정의된 값으로 자동 갱신됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 GradeModel 그레이드 모델 그레이드 모델이란 캐릭터나 장비의 랭크를 나타내는 엔티티로, 그레이드에 따라 GS2-Experience의 랭크 캡을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gradeModelId string ※ ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 그레이드 모델 이름 그레이드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultGrades List 0 ~ 100 items 기본 그레이드 모델 리스트 신규 스테이터스 작성 시 평가되는 기본 그레이드 규칙의 순서가 있는 리스트입니다. 각 항목은 프로퍼티 ID의 정규 표현식 패턴과, 매칭된 경우 할당할 그레이드 값을 정의합니다. 어떤 패턴에도 매칭되지 않으면 기본 그레이드 값 0이 사용됩니다. experienceModelId string  ~ 1024자 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그레이드 모델과 연동시킬 GS2-Experience의 경험치 모델의 GRN입니다. 그레이드 값이 변경되면, 그레이드 엔트리의 매핑에 기반하여 연동된 경험치 모델의 랭크 캡이 자동으로 업데이트됩니다. 이를 통해 높은 그레이드가 더 높은 랭크 캡을 해제하는 그레이드 기반 성장을 구현할 수 있습니다. gradeEntries List  1 ~ 100 items 그레이드 엔트리 모델 리스트 각 그레이드 값을 연동된 GS2-Experience 모델의 랭크 캡에 매핑하는 그레이드 엔트리의 순서가 있는 리스트입니다. 배열의 인덱스가 그레이드 값에 대응하므로, 첫 번째 항목(인덱스 0)이 그레이드 0의 랭크 캡을, 두 번째 항목이 그레이드 1의 랭크 캡을 정의합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 리스트 그레이드를 기반으로 보상량을 스케일링하기 위한 이름이 지정된 배율 테이블의 컬렉션입니다. 여러 테이블을 정의하여 서로 다른 종류의 보상(예: 경험치, 통화, 아이템)에 다른 스케일링 규칙을 적용할 수 있습니다. DefaultGradeModel 기본 그레이드 모델 그레이드를 새로 생성할 때 프로퍼티 ID의 정규 표현식과의 매칭에 따라 기본 그레이드 값을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 propertyIdRegex string  ~ 1024자 프로퍼티 ID 정규 표현식 새로 생성된 그레이드 스테이터스의 프로퍼티 ID에 대해 매칭되는 정규 표현식 패턴입니다. 프로퍼티 ID가 이 패턴에 매칭되면, 0 대신 지정된 기본 그레이드 값이 초기 그레이드로 할당됩니다. 패턴은 순서대로 평가되며, 처음 매칭된 것이 사용됩니다. defaultGradeValue long  0 ~ 9223372036854775805 기본 그레이드 값 프로퍼티 ID가 propertyIdRegex 패턴에 매칭된 경우 새로 생성된 스테이터스에 할당되는 초기 그레이드 값입니다. 이 인덱스의 그레이드 엔트리가 대응하는 랭크 캡을 정의하므로, 이 값이 연동된 GS2-Experience 모델의 시작 랭크 캡을 결정합니다. GradeEntryModel 그레이드 엔트리 모델 그레이드 값과 연동된 GS2-Experience 모델의 랭크 캡 간의 매핑을 정의합니다. 각 항목은 프로퍼티 ID 매칭에 사용되는 정규 표현식 패턴도 지정하여, 그레이드업 조작에 사용할 수 있는 리소스와 그 프로퍼티 ID의 변환 방법을 결정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rankCapValue long  0 ~ 9223372036854775805 랭크 캡 값 이 그레이드가 적용되었을 때 연동된 GS2-Experience 모델에 설정할 랭크 캡 값입니다. 플레이어의 그레이드가 이 항목에 대응하는 값으로 변경되면, 관련된 경험치 스테이터스의 랭크 캡이 이 값으로 자동 업데이트되어 도달 가능한 최대 랭크가 제어됩니다. propertyIdRegex string  ~ 1024자 프로퍼티 ID 정규 표현식 그레이드업 매칭용 변수를 추출하기 위해 그레이드 스테이터스의 프로퍼티 ID에 적용되는 정규 표현식 패턴입니다. 이 패턴 내의 캡처 그룹(괄호로 둘러싸인 부분)은 gradeUpPropertyIdRegex에서 $1, $2 등으로 사용할 수 있습니다. 예를 들어 “character-(.+)“와 같은 패턴은 캐릭터 식별자를 추출하여 그레이드업 소재의 프로퍼티 ID 매칭에 사용합니다. gradeUpPropertyIdRegex string  ~ 1024자 그레이드업용 프로퍼티 ID 정규 표현식 그레이드 승급을 위해 소비할 수 있는 리소스의 프로퍼티 ID를 특정하는 정규 표현식 패턴입니다. 이 패턴은 propertyIdRegex의 캡처 그룹을 $1, $2 등으로 참조할 수 있습니다. 예를 들어 propertyIdRegex에서 “sword-001\"을 $1로 추출한 경우, 이 패턴을 “grade-up-material-$1\"로 설정하면 해당 검에 고유한 소재를 매칭시킬 수 있습니다. AcquireActionRate 보상 가산 테이블 현재 그레이드 값을 기준으로 보상량을 조정하는 이름이 지정된 배율 테이블을 정의합니다. 각 그레이드 값은 트랜잭션의 입수 액션에 적용되는 배율에 매핑되며, 그레이드가 높은 캐릭터나 장비일수록 더 많은 보상을 받을 수 있습니다. 표준적인 배정밀도 부동소수점수 모드와, 매우 큰 값에 대응하는 빅 넘버 모드를 모두 지원합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보상 가산 테이블 이름 그레이드 모델 내에서 이 배율 테이블을 고유하게 식별하는 이름입니다. 트랜잭션의 특정 입수 액션에 그레이드 기반 보상 스케일링을 적용할 때 참조됩니다. mode 문자열 열거형 enum {   “double”,   “big” } “double” 보상 가산 테이블 종류 배율 값의 수치 정밀도 모드를 선택합니다. “double” 모드는 대부분의 경우에 적합한 표준 부동소수점수를 사용합니다. “big” 모드는 최대 1024자리까지의 문자열 표현 숫자를 사용하여, 매우 큰 값 계산이 필요한 게임에 대응합니다. 정의 설명 double 2^48 미만의 부동소수점 수 big 문자열 표기로 1024자리 미만의 부동소수점 수 rates List {mode} == “double” ※ 1 ~ 1000 items 그레이드별 배율 리스트 (double 모드) 그레이드 값으로 인덱싱된 보상 배율의 배열로, 배정밀도 부동소수점수를 사용합니다. 인덱스 0의 항목이 그레이드 0의 배율, 인덱스 1이 그레이드 1의 배율이 됩니다. mode가 “double\"로 설정된 경우에 사용됩니다. ※ mode이(가) “double” 이면 필수 bigRates List {mode} == “big” ※ 1 ~ 1000 items 그레이드별 배율 리스트 (big 모드) 그레이드 값으로 인덱싱된 보상 배율의 배열로, 확장된 정밀도를 위해 문자열 표현 숫자를 사용합니다. 인덱스 0의 항목이 그레이드 0의 배율, 인덱스 1이 그레이드 1의 배율이 됩니다. 매우 큰 수치 계산이 필요한 게임을 위해 mode가 “big\"으로 설정된 경우에 사용됩니다. ※ mode이(가) “big” 이면 필수 AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentGradeMaster 현재 활성화된 그레이드 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 그레이드 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Grade 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 GradeModelMaster 그레이드 모델 마스터 그레이드 모델 마스터는 게임 내에서 사용되는 그레이드 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 그레이드 모델로 반영됩니다. 그레이드 모델이란 캐릭터나 장비의 랭크를 나타내는 엔티티로, 그레이드에 따라 GS2-Experience의 랭크 캡을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gradeModelId string ※ ~ 1024자 그레이드 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 그레이드 모델명 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultGrades List 0 ~ 100 items 기본 그레이드 모델 리스트 신규 스테이터스 작성 시 평가되는 기본 그레이드 규칙의 순서가 있는 리스트입니다. 각 항목은 프로퍼티 ID의 정규 표현식 패턴과, 매칭된 경우 할당할 그레이드 값을 정의합니다. 어떤 패턴에도 매칭되지 않으면 기본 그레이드 값 0이 사용됩니다. experienceModelId string  ~ 1024자 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그레이드 모델과 연동시킬 GS2-Experience의 경험치 모델의 GRN입니다. 그레이드 값이 변경되면, 그레이드 엔트리의 매핑에 기반하여 연동된 경험치 모델의 랭크 캡이 자동으로 업데이트됩니다. 이를 통해 높은 그레이드가 더 높은 랭크 캡을 해제하는 그레이드 기반 성장을 구현할 수 있습니다. gradeEntries List 0 ~ 100 items 그레이드 엔트리 모델 리스트 각 그레이드 값을 연동된 GS2-Experience 모델의 랭크 캡에 매핑하는 그레이드 엔트리의 순서가 있는 리스트입니다. 배열의 인덱스가 그레이드 값에 대응하므로, 첫 번째 항목(인덱스 0)이 그레이드 0의 랭크 캡을, 두 번째 항목이 그레이드 1의 랭크 캡을 정의합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 리스트 그레이드를 기반으로 보상량을 스케일링하기 위한 이름이 지정된 배율 테이블의 컬렉션입니다. 여러 테이블을 정의하여 서로 다른 종류의 보상(예: 경험치, 통화, 아이템)에 다른 스케일링 규칙을 적용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 grade . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DescribeNamespacesRequest ; import io.gs2.grade.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Grade . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Grade . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . describe_namespaces ( grade . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'grade' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 그레이드 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. changeGradeScript ScriptSetting 그레이드가 변화했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - changeGrade logSetting LogSetting 로그 출력 설정 그레이드 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써, 그레이드 변경 및 랭크 캡 업데이트에 대한 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 grade . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , ChangeGradeScript : nil , LogSetting : \u0026 grade . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withChangeGradeScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Grade\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.CreateNamespaceRequest ; import io.gs2.grade.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withChangeGradeScript ( null ) . withLogSetting ( new io . gs2 . grade . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Grade . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithChangeGradeScript ( null ) . WithLogSetting ( new Gs2 . Gs2Grade . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Grade . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withChangeGradeScript ( null ) . withLogSetting ( new Gs2Grade . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . create_namespace ( grade . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_change_grade_script ( None ) . with_log_setting ( grade . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , changeGradeScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , changeGradeScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 grade . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.GetNamespaceStatusRequest ; import io.gs2.grade.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Grade . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Grade . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . get_namespace_status ( grade . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'grade' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 grade . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.GetNamespaceRequest ; import io.gs2.grade.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Grade . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Grade . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . get_namespace ( grade . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 그레이드 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. changeGradeScript ScriptSetting 그레이드가 변화했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - changeGrade logSetting LogSetting 로그 출력 설정 그레이드 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써, 그레이드 변경 및 랭크 캡 업데이트에 대한 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 grade . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , ChangeGradeScript : \u0026 grade . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ), }, LogSetting : \u0026 grade . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withChangeGradeScript (( new \\Gs2\\Grade\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" )) -\u003e withLogSetting (( new \\Gs2\\Grade\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.UpdateNamespaceRequest ; import io.gs2.grade.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withChangeGradeScript ( new io . gs2 . grade . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" )) . withLogSetting ( new io . gs2 . grade . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Grade . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithChangeGradeScript ( new Gs2 . Gs2Grade . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" )) . WithLogSetting ( new Gs2 . Gs2Grade . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Grade . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withChangeGradeScript ( new Gs2Grade . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" )) . withLogSetting ( new Gs2Grade . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . update_namespace ( grade . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_change_grade_script ( grade . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003' )) . with_log_setting ( grade . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , changeGradeScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , changeGradeScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 grade . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DeleteNamespaceRequest ; import io.gs2.grade.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Grade . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Grade . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . delete_namespace ( grade . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 grade . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.GetServiceVersionRequest ; import io.gs2.grade.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Grade . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Grade . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . get_service_version ( grade . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 grade . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DumpUserDataByUserIdRequest ; import io.gs2.grade.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Grade . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Grade . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . dump_user_data_by_user_id ( grade . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'grade' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 grade . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.grade.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Grade . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Grade . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( grade . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'grade' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 grade . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.CleanUserDataByUserIdRequest ; import io.gs2.grade.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Grade . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Grade . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . clean_user_data_by_user_id ( grade . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'grade' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 grade . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.grade.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Grade . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Grade . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( grade . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'grade' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 grade . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.grade.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Grade . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Grade . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( grade . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'grade' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트를 실행 임포트에 사용할 수 있는 데이터는 GS2가 익스포트하여 얻은 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 grade . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.ImportUserDataByUserIdRequest ; import io.gs2.grade.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Grade . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Grade . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . import_user_data_by_user_id ( grade . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'grade' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 grade . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.CheckImportUserDataByUserIdRequest ; import io.gs2.grade.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Grade . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Grade . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( grade . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'grade' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeStatuses 스테이터스 목록 조회 요청한 사용자의 그레이드 스테이터스에 대한 페이지네이션 목록을 조회합니다. 각 스테이터스는 특정 그레이드 모델과 프로퍼티 ID에 연관된 그레이드 값을 나타냅니다. 옵션으로 그레이드 모델명 필터를 지정하여 특정 그레이드 모델의 스테이터스만 조회할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string ~ 128자 그레이드 모델명 accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DescribeStatuses ( \u0026 grade . DescribeStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DescribeStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e describeStatuses ( ( new DescribeStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DescribeStatusesRequest ; import io.gs2.grade.result.DescribeStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DescribeStatusesResult result = client . describeStatuses ( new DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DescribeStatusesResult \u003e asyncResult = null ; yield return client . DescribeStatuses ( new Gs2 . Gs2Grade . Request . DescribeStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . describeStatuses ( new Gs2Grade . DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . describe_statuses ( grade . DescribeStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_grade_name ( 'grade-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.describe_statuses ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'grade' ) api_result_handler = client.describe_statuses_async ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeStatusesByUserId 사용자 ID를 지정하여 스테이터스 목록 조회 지정된 사용자의 그레이드 스테이터스에 대한 페이지네이션 목록을 조회합니다(서버 사이드 작업). 각 스테이터스는 특정 그레이드 모델과 프로퍼티 ID에 연관된 그레이드 값을 나타냅니다. 옵션으로 그레이드 모델명 필터를 지정하여 특정 그레이드 모델의 스테이터스만 조회할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string ~ 128자 그레이드 모델명 userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DescribeStatusesByUserId ( \u0026 grade . DescribeStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DescribeStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e describeStatusesByUserId ( ( new DescribeStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DescribeStatusesByUserIdRequest ; import io.gs2.grade.result.DescribeStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DescribeStatusesByUserIdResult result = client . describeStatusesByUserId ( new DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DescribeStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeStatusesByUserId ( new Gs2 . Gs2Grade . Request . DescribeStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . describeStatusesByUserId ( new Gs2Grade . DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . describe_statuses_by_user_id ( grade . DescribeStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_grade_name ( 'grade-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.describe_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'grade' ) api_result_handler = client.describe_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getStatus 스테이터스 조회 그레이드 모델명과 프로퍼티 ID로 식별되는, 요청한 사용자의 그레이드 스테이터스를 조회합니다. 지정된 프로퍼티의 현재 그레이드 값을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . GetStatus ( \u0026 grade . GetStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\GetStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e getStatus ( ( new GetStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.GetStatusRequest ; import io.gs2.grade.result.GetStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { GetStatusResult result = client . getStatus ( new GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . GetStatusResult \u003e asyncResult = null ; yield return client . GetStatus ( new Gs2 . Gs2Grade . Request . GetStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . getStatus ( new Gs2Grade . GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . get_status ( grade . GetStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.get_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.get_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStatusByUserId 사용자 ID를 지정하여 스테이터스 조회 그레이드 모델명과 프로퍼티 ID로 식별되는, 지정된 사용자의 그레이드 스테이터스를 조회합니다(서버 사이드 작업). 지정된 프로퍼티의 현재 그레이드 값을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . GetStatusByUserId ( \u0026 grade . GetStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\GetStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e getStatusByUserId ( ( new GetStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.GetStatusByUserIdRequest ; import io.gs2.grade.result.GetStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { GetStatusByUserIdResult result = client . getStatusByUserId ( new GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . GetStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetStatusByUserId ( new Gs2 . Gs2Grade . Request . GetStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . getStatusByUserId ( new Gs2Grade . GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . get_status_by_user_id ( grade . GetStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.get_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.get_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; addGradeByUserId 사용자 ID를 지정하여 그레이드 가산 지정된 그레이드 모델과 프로퍼티에 대해, 사용자의 현재 그레이드에 지정된 값을 가산합니다. 그레이드 값 갱신 후, 연결된 GS2-Experience 스테이터스에 랭크 캡이 자동으로 적용됩니다. 랭크 캡 값은 새로운 그레이드 레벨에 일치하는 그레이드 엔트리에 의해 결정됩니다. 갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 0 0 ~ 9223372036854775805 획득 그레이드 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 가산 후 상태 experienceNamespaceName string GS2-Experience 네임스페이스 이름 experienceStatus Status 랭크 캡 갱신 후의 GS2-Experience 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . AddGradeByUserId ( \u0026 grade . AddGradeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), GradeValue : pointy . Int64 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item experienceNamespaceName := result . ExperienceNamespaceName experienceStatus := result . ExperienceStatus use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\AddGradeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e addGradeByUserId ( ( new AddGradeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withGradeValue ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $experienceNamespaceName = $result -\u003e getExperienceNamespaceName (); $experienceStatus = $result -\u003e getExperienceStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.AddGradeByUserIdRequest ; import io.gs2.grade.result.AddGradeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { AddGradeByUserIdResult result = client . addGradeByUserId ( new AddGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 10L ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); String experienceNamespaceName = result . getExperienceNamespaceName (); Status experienceStatus = result . getExperienceStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . AddGradeByUserIdResult \u003e asyncResult = null ; yield return client . AddGradeByUserId ( new Gs2 . Gs2Grade . Request . AddGradeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithGradeValue ( 10L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var experienceNamespaceName = result . ExperienceNamespaceName ; var experienceStatus = result . ExperienceStatus ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . addGradeByUserId ( new Gs2Grade . AddGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const experienceNamespaceName = result . getExperienceNamespaceName (); const experienceStatus = result . getExperienceStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . add_grade_by_user_id ( grade . AddGradeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) . with_grade_value ( 10 ) . with_time_offset_token ( None ) ) item = result . item experience_namespace_name = result . experience_namespace_name experience_status = result . experience_status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.add_grade_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , gradeValue = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; client = gs2 ( 'grade' ) api_result_handler = client.add_grade_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , gradeValue = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; subGrade 그레이드 감산 지정된 그레이드 모델과 프로퍼티에 대해, 요청한 사용자의 현재 그레이드에서 지정된 값을 감산합니다. 그레이드 값 갱신 후, 연결된 GS2-Experience 스테이터스에 랭크 캡이 자동으로 적용됩니다. 랭크 캡 값은 새로운 그레이드 레벨에 일치하는 그레이드 엔트리에 의해 결정됩니다. 갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 0 0 ~ 9223372036854775805 잃는 그레이드 Result 타입 설명 item Status 감산 후 상태 experienceNamespaceName string GS2-Experience 네임스페이스 이름 experienceStatus Status 랭크 캡 갱신 후의 GS2-Experience 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . SubGrade ( \u0026 grade . SubGradeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), GradeValue : pointy . Int64 ( 10 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item experienceNamespaceName := result . ExperienceNamespaceName experienceStatus := result . ExperienceStatus use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\SubGradeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e subGrade ( ( new SubGradeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withGradeValue ( 10 ) ); $item = $result -\u003e getItem (); $experienceNamespaceName = $result -\u003e getExperienceNamespaceName (); $experienceStatus = $result -\u003e getExperienceStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.SubGradeRequest ; import io.gs2.grade.result.SubGradeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { SubGradeResult result = client . subGrade ( new SubGradeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 10L ) ); Status item = result . getItem (); String experienceNamespaceName = result . getExperienceNamespaceName (); Status experienceStatus = result . getExperienceStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . SubGradeResult \u003e asyncResult = null ; yield return client . SubGrade ( new Gs2 . Gs2Grade . Request . SubGradeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithGradeValue ( 10L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var experienceNamespaceName = result . ExperienceNamespaceName ; var experienceStatus = result . ExperienceStatus ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . subGrade ( new Gs2Grade . SubGradeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 10 ) ); const item = result . getItem (); const experienceNamespaceName = result . getExperienceNamespaceName (); const experienceStatus = result . getExperienceStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . sub_grade ( grade . SubGradeRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) . with_grade_value ( 10 ) ) item = result . item experience_namespace_name = result . experience_namespace_name experience_status = result . experience_status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.sub_grade ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , gradeValue = 10 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; client = gs2 ( 'grade' ) api_result_handler = client.sub_grade_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , gradeValue = 10 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; subGradeByUserId 사용자 ID를 지정하여 그레이드 감산 지정된 그레이드 모델과 프로퍼티에 대해, 지정된 사용자의 현재 그레이드에서 지정된 값을 감산합니다(서버 사이드 작업). 그레이드 값 갱신 후, 연결된 GS2-Experience 스테이터스에 랭크 캡이 자동으로 적용됩니다. 랭크 캡 값은 새로운 그레이드 레벨에 일치하는 그레이드 엔트리에 의해 결정됩니다. 갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 0 0 ~ 9223372036854775805 잃는 그레이드 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 감산 후 상태 experienceNamespaceName string GS2-Experience 네임스페이스 이름 experienceStatus Status 랭크 캡 갱신 후의 GS2-Experience 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . SubGradeByUserId ( \u0026 grade . SubGradeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), GradeValue : pointy . Int64 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item experienceNamespaceName := result . ExperienceNamespaceName experienceStatus := result . ExperienceStatus use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\SubGradeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e subGradeByUserId ( ( new SubGradeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withGradeValue ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $experienceNamespaceName = $result -\u003e getExperienceNamespaceName (); $experienceStatus = $result -\u003e getExperienceStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.SubGradeByUserIdRequest ; import io.gs2.grade.result.SubGradeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { SubGradeByUserIdResult result = client . subGradeByUserId ( new SubGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 10L ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); String experienceNamespaceName = result . getExperienceNamespaceName (); Status experienceStatus = result . getExperienceStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . SubGradeByUserIdResult \u003e asyncResult = null ; yield return client . SubGradeByUserId ( new Gs2 . Gs2Grade . Request . SubGradeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithGradeValue ( 10L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var experienceNamespaceName = result . ExperienceNamespaceName ; var experienceStatus = result . ExperienceStatus ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . subGradeByUserId ( new Gs2Grade . SubGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const experienceNamespaceName = result . getExperienceNamespaceName (); const experienceStatus = result . getExperienceStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . sub_grade_by_user_id ( grade . SubGradeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) . with_grade_value ( 10 ) . with_time_offset_token ( None ) ) item = result . item experience_namespace_name = result . experience_namespace_name experience_status = result . experience_status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.sub_grade_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , gradeValue = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; client = gs2 ( 'grade' ) api_result_handler = client.sub_grade_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , gradeValue = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; setGradeByUserId 누적 획득 그레이드 설정 지정된 사용자의 그레이드 스테이터스의 그레이드 값을 직접 설정합니다(서버 사이드 작업). 갱신 전의 그레이드 스테이터스가 기록되어 감사 목적으로 ‘old’ 필드로 반환됩니다. 새로운 그레이드 값 설정 후, 연결된 GS2-Experience 스테이터스에 랭크 캡이 자동으로 적용됩니다. 랭크 캡 값은 새로운 그레이드 레벨에 일치하는 그레이드 엔트리에 의해 결정됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 1 1 ~ 9223372036854775805 현재 그레이드 이 스테이터스의 현재 그레이드 값입니다. 연동되는 GS2-Experience 모델의 랭크 캡을 결정하기 위해 그레이드 모델의 그레이드 엔트리 배열의 인덱스로 사용됩니다. 이 값이 변경되면 관련된 경험치 스테이터스의 랭크 캡이 해당 그레이드 엔트리에서 정의된 값으로 자동 갱신됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 갱신 후 상태 old Status 갱신 전 상태 experienceNamespaceName string GS2-Experience 네임스페이스 이름 experienceStatus Status 랭크 캡 갱신 후의 GS2-Experience 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . SetGradeByUserId ( \u0026 grade . SetGradeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), GradeValue : pointy . Int64 ( 100 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old experienceNamespaceName := result . ExperienceNamespaceName experienceStatus := result . ExperienceStatus use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\SetGradeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e setGradeByUserId ( ( new SetGradeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withGradeValue ( 100 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $experienceNamespaceName = $result -\u003e getExperienceNamespaceName (); $experienceStatus = $result -\u003e getExperienceStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.SetGradeByUserIdRequest ; import io.gs2.grade.result.SetGradeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { SetGradeByUserIdResult result = client . setGradeByUserId ( new SetGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 100L ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); Status old = result . getOld (); String experienceNamespaceName = result . getExperienceNamespaceName (); Status experienceStatus = result . getExperienceStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . SetGradeByUserIdResult \u003e asyncResult = null ; yield return client . SetGradeByUserId ( new Gs2 . Gs2Grade . Request . SetGradeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithGradeValue ( 100L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var experienceNamespaceName = result . ExperienceNamespaceName ; var experienceStatus = result . ExperienceStatus ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . setGradeByUserId ( new Gs2Grade . SetGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 100 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); const experienceNamespaceName = result . getExperienceNamespaceName (); const experienceStatus = result . getExperienceStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . set_grade_by_user_id ( grade . SetGradeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) . with_grade_value ( 100 ) . with_time_offset_token ( None ) ) item = result . item old = result . old experience_namespace_name = result . experience_namespace_name experience_status = result . experience_status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.set_grade_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , gradeValue = 100 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; client = gs2 ( 'grade' ) api_result_handler = client.set_grade_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , gradeValue = 100 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; applyRankCap GS2-Experience 스테이터스에 랭크 캡 적용 요청한 사용자의 현재 그레이드에 대응하는 랭크 캡을, 연결된 GS2-Experience 스테이터스에 적용합니다. 현재 그레이드 값에 일치하는 그레이드 엔트리를 참조하여 랭크 캡 값을 결정합니다. 그레이드가 외부에서 변경되어 Experience의 랭크 캡을 동기화해야 할 경우에 유용합니다. 갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. Result 타입 설명 item Status 상태 experienceNamespaceName string GS2-Experience 네임스페이스 이름 experienceStatus Status 랭크 캡 갱신 후의 GS2-Experience 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . ApplyRankCap ( \u0026 grade . ApplyRankCapRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item experienceNamespaceName := result . ExperienceNamespaceName experienceStatus := result . ExperienceStatus use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\ApplyRankCapRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e applyRankCap ( ( new ApplyRankCapRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); $experienceNamespaceName = $result -\u003e getExperienceNamespaceName (); $experienceStatus = $result -\u003e getExperienceStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.ApplyRankCapRequest ; import io.gs2.grade.result.ApplyRankCapResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { ApplyRankCapResult result = client . applyRankCap ( new ApplyRankCapRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) ); Status item = result . getItem (); String experienceNamespaceName = result . getExperienceNamespaceName (); Status experienceStatus = result . getExperienceStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . ApplyRankCapResult \u003e asyncResult = null ; yield return client . ApplyRankCap ( new Gs2 . Gs2Grade . Request . ApplyRankCapRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var experienceNamespaceName = result . ExperienceNamespaceName ; var experienceStatus = result . ExperienceStatus ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . applyRankCap ( new Gs2Grade . ApplyRankCapRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); const experienceNamespaceName = result . getExperienceNamespaceName (); const experienceStatus = result . getExperienceStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . apply_rank_cap ( grade . ApplyRankCapRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) ) item = result . item experience_namespace_name = result . experience_namespace_name experience_status = result . experience_status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.apply_rank_cap ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; client = gs2 ( 'grade' ) api_result_handler = client.apply_rank_cap_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; applyRankCapByUserId 사용자 ID를 지정하여 GS2-Experience 스테이터스에 랭크 캡 적용 지정된 사용자의 현재 그레이드에 대응하는 랭크 캡을, 연결된 GS2-Experience 스테이터스에 적용합니다(서버 사이드 작업). 현재 그레이드 값에 일치하는 그레이드 엔트리를 참조하여 랭크 캡 값을 결정합니다. 그레이드가 외부에서 변경되어 Experience의 랭크 캡을 동기화해야 할 경우에 유용합니다. 갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 experienceNamespaceName string GS2-Experience 네임스페이스 이름 experienceStatus Status 랭크 캡 갱신 후의 GS2-Experience 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . ApplyRankCapByUserId ( \u0026 grade . ApplyRankCapByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item experienceNamespaceName := result . ExperienceNamespaceName experienceStatus := result . ExperienceStatus use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\ApplyRankCapByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e applyRankCapByUserId ( ( new ApplyRankCapByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $experienceNamespaceName = $result -\u003e getExperienceNamespaceName (); $experienceStatus = $result -\u003e getExperienceStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.ApplyRankCapByUserIdRequest ; import io.gs2.grade.result.ApplyRankCapByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { ApplyRankCapByUserIdResult result = client . applyRankCapByUserId ( new ApplyRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); String experienceNamespaceName = result . getExperienceNamespaceName (); Status experienceStatus = result . getExperienceStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . ApplyRankCapByUserIdResult \u003e asyncResult = null ; yield return client . ApplyRankCapByUserId ( new Gs2 . Gs2Grade . Request . ApplyRankCapByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var experienceNamespaceName = result . ExperienceNamespaceName ; var experienceStatus = result . ExperienceStatus ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . applyRankCapByUserId ( new Gs2Grade . ApplyRankCapByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const experienceNamespaceName = result . getExperienceNamespaceName (); const experienceStatus = result . getExperienceStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . apply_rank_cap_by_user_id ( grade . ApplyRankCapByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item experience_namespace_name = result . experience_namespace_name experience_status = result . experience_status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.apply_rank_cap_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; client = gs2 ( 'grade' ) api_result_handler = client.apply_rank_cap_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; experienceNamespaceName = result.experienceNamespaceName ; experienceStatus = result.experienceStatus ; deleteStatusByUserId 사용자 ID를 지정하여 스테이터스 삭제 그레이드 모델명과 프로퍼티 ID로 식별되는, 지정된 사용자의 그레이드 스테이터스를 삭제합니다(서버 사이드 작업). 삭제된 스테이터스 데이터가 응답으로 반환됩니다. 연결된 GS2-Experience의 랭크 캡은 자동으로 갱신되지 않는다는 점에 주의하세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 삭제된 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DeleteStatusByUserId ( \u0026 grade . DeleteStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DeleteStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e deleteStatusByUserId ( ( new DeleteStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DeleteStatusByUserIdRequest ; import io.gs2.grade.result.DeleteStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DeleteStatusByUserIdResult result = client . deleteStatusByUserId ( new DeleteStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DeleteStatusByUserIdResult \u003e asyncResult = null ; yield return client . DeleteStatusByUserId ( new Gs2 . Gs2Grade . Request . DeleteStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . deleteStatusByUserId ( new Gs2Grade . DeleteStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . delete_status_by_user_id ( grade . DeleteStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.delete_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.delete_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyGrade 그레이드 검증 요청한 사용자의 그레이드 값이 지정된 조건을 만족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less(미만), lessEqual(이하), greater(초과), greaterEqual(이상), equal(일치), notEqual(불일치). 조건이 충족되지 않은 경우, 기대값과 실제 값을 포함한 설명적인 오류 메시지가 반환됩니다. multiplyValueSpecifyingQuantity가 true인 경우, 검증 임계값은 지정된 수량으로 곱해집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 그레이드가 지정한 값 미만일 것 lessEqual 그레이드가 지정한 값 이하일 것 greater 그레이드가 지정한 값을 초과할 것 greaterEqual 그레이드가 지정한 값 이상일 것 equal 그레이드가 지정한 값과 일치할 것 notEqual 그레이드가 지정한 값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 1 1 ~ 9223372036854775805 현재 그레이드 이 스테이터스의 현재 그레이드 값입니다. 연동되는 GS2-Experience 모델의 랭크 캡을 결정하기 위해 그레이드 모델의 그레이드 엔트리 배열의 인덱스로 사용됩니다. 이 값이 변경되면 관련된 경험치 스테이터스의 랭크 캡이 해당 그레이드 엔트리에서 정의된 값으로 자동 갱신됩니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Status 삭제된 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . VerifyGrade ( \u0026 grade . VerifyGradeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), VerifyType : pointy . String ( \"less\" ), PropertyId : pointy . String ( \"property-0001\" ), GradeValue : pointy . Int64 ( 2 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\VerifyGradeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e verifyGrade ( ( new VerifyGradeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withGradeValue ( 2 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.VerifyGradeRequest ; import io.gs2.grade.result.VerifyGradeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { VerifyGradeResult result = client . verifyGrade ( new VerifyGradeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 2L ) . withMultiplyValueSpecifyingQuantity ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . VerifyGradeResult \u003e asyncResult = null ; yield return client . VerifyGrade ( new Gs2 . Gs2Grade . Request . VerifyGradeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithVerifyType ( \"less\" ) . WithPropertyId ( \"property-0001\" ) . WithGradeValue ( 2L ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . verifyGrade ( new Gs2Grade . VerifyGradeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 2 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . verify_grade ( grade . VerifyGradeRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_grade_name ( 'grade-0001' ) . with_verify_type ( 'less' ) . with_property_id ( 'property-0001' ) . with_grade_value ( 2 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.verify_grade ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , verifyType = \"less\" , propertyId = \"property-0001\" , gradeValue = 2 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.verify_grade_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , verifyType = \"less\" , propertyId = \"property-0001\" , gradeValue = 2 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyGradeByUserId 사용자 ID를 지정하여 그레이드 검증 지정된 사용자의 그레이드 값이 지정된 조건을 만족하는지 검증합니다(서버 사이드 작업). 6가지 비교 연산자를 지원합니다: less(미만), lessEqual(이하), greater(초과), greaterEqual(이상), equal(일치), notEqual(불일치). 조건이 충족되지 않은 경우, 기대값과 실제 값을 포함한 설명적인 오류 메시지가 반환됩니다. multiplyValueSpecifyingQuantity가 true인 경우, 검증 임계값은 지정된 수량으로 곱해집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 그레이드가 지정한 값 미만일 것 lessEqual 그레이드가 지정한 값 이하일 것 greater 그레이드가 지정한 값을 초과할 것 greaterEqual 그레이드가 지정한 값 이상일 것 equal 그레이드가 지정한 값과 일치할 것 notEqual 그레이드가 지정한 값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 1 1 ~ 9223372036854775805 현재 그레이드 이 스테이터스의 현재 그레이드 값입니다. 연동되는 GS2-Experience 모델의 랭크 캡을 결정하기 위해 그레이드 모델의 그레이드 엔트리 배열의 인덱스로 사용됩니다. 이 값이 변경되면 관련된 경험치 스테이터스의 랭크 캡이 해당 그레이드 엔트리에서 정의된 값으로 자동 갱신됩니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 삭제된 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . VerifyGradeByUserId ( \u0026 grade . VerifyGradeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), VerifyType : pointy . String ( \"less\" ), PropertyId : pointy . String ( \"property-0001\" ), GradeValue : pointy . Int64 ( 2 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\VerifyGradeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e verifyGradeByUserId ( ( new VerifyGradeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withGradeValue ( 2 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.VerifyGradeByUserIdRequest ; import io.gs2.grade.result.VerifyGradeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { VerifyGradeByUserIdResult result = client . verifyGradeByUserId ( new VerifyGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 2L ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . VerifyGradeByUserIdResult \u003e asyncResult = null ; yield return client . VerifyGradeByUserId ( new Gs2 . Gs2Grade . Request . VerifyGradeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithVerifyType ( \"less\" ) . WithPropertyId ( \"property-0001\" ) . WithGradeValue ( 2L ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . verifyGradeByUserId ( new Gs2Grade . VerifyGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withVerifyType ( \"less\" ) . withPropertyId ( \"property-0001\" ) . withGradeValue ( 2 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . verify_grade_by_user_id ( grade . VerifyGradeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_verify_type ( 'less' ) . with_property_id ( 'property-0001' ) . with_grade_value ( 2 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.verify_grade_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , verifyType = \"less\" , propertyId = \"property-0001\" , gradeValue = 2 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.verify_grade_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , verifyType = \"less\" , propertyId = \"property-0001\" , gradeValue = 2 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyGradeUpMaterial 그레이드업에 사용하는 소재 검증 소재의 프로퍼티 ID가 지정된 프로퍼티의 그레이드업에 유효한지 검증합니다. 검증은 그레이드 엔트리의 PropertyIdRegex와 GradeUpPropertyIdRegex로부터 정규표현식 패턴을 생성하고, 소재의 프로퍼티 ID가 이에 일치하는지 확인합니다. 2가지 검증 유형을 지원합니다: ‘match’(소재가 패턴에 일치해야 함)와 ’notMatch’(소재가 패턴에 일치하지 않아야 함). 그레이드업을 위해 소비할 소재 아이템이 적합한지 검증하는 데 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. verifyType 문자열 열거형 enum {   “match”,   “notMatch” }  검증 종류 정의 설명 match 조건과 일치할 것 notMatch 조건과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. materialPropertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . VerifyGradeUpMaterial ( \u0026 grade . VerifyGradeUpMaterialRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), VerifyType : pointy . String ( \"match\" ), PropertyId : pointy . String ( \"property-0001\" ), MaterialPropertyId : pointy . String ( \"property-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\VerifyGradeUpMaterialRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e verifyGradeUpMaterial ( ( new VerifyGradeUpMaterialRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withVerifyType ( \"match\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withMaterialPropertyId ( \"property-0002\" ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.VerifyGradeUpMaterialRequest ; import io.gs2.grade.result.VerifyGradeUpMaterialResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { VerifyGradeUpMaterialResult result = client . verifyGradeUpMaterial ( new VerifyGradeUpMaterialRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withVerifyType ( \"match\" ) . withPropertyId ( \"property-0001\" ) . withMaterialPropertyId ( \"property-0002\" ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . VerifyGradeUpMaterialResult \u003e asyncResult = null ; yield return client . VerifyGradeUpMaterial ( new Gs2 . Gs2Grade . Request . VerifyGradeUpMaterialRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithVerifyType ( \"match\" ) . WithPropertyId ( \"property-0001\" ) . WithMaterialPropertyId ( \"property-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . verifyGradeUpMaterial ( new Gs2Grade . VerifyGradeUpMaterialRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGradeName ( \"grade-0001\" ) . withVerifyType ( \"match\" ) . withPropertyId ( \"property-0001\" ) . withMaterialPropertyId ( \"property-0002\" ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . verify_grade_up_material ( grade . VerifyGradeUpMaterialRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_grade_name ( 'grade-0001' ) . with_verify_type ( 'match' ) . with_property_id ( 'property-0001' ) . with_material_property_id ( 'property-0002' ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.verify_grade_up_material ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , verifyType = \"match\" , propertyId = \"property-0001\" , materialPropertyId = \"property-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'grade' ) api_result_handler = client.verify_grade_up_material_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , gradeName = \"grade-0001\" , verifyType = \"match\" , propertyId = \"property-0001\" , materialPropertyId = \"property-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result verifyGradeUpMaterialByUserId 사용자 ID를 지정하여 그레이드업에 사용하는 소재 검증 지정된 사용자의 지정된 프로퍼티의 그레이드업에 소재의 프로퍼티 ID가 유효한지 검증합니다(서버 사이드 작업). 검증은 그레이드 엔트리의 PropertyIdRegex와 GradeUpPropertyIdRegex로부터 정규표현식 패턴을 생성하고, 소재의 프로퍼티 ID가 이에 일치하는지 확인합니다. 2가지 검증 유형을 지원합니다: ‘match’(소재가 패턴에 일치해야 함)와 ’notMatch’(소재가 패턴에 일치하지 않아야 함). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. verifyType 문자열 열거형 enum {   “match”,   “notMatch” }  검증 종류 정의 설명 match 조건과 일치할 것 notMatch 조건과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. materialPropertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . VerifyGradeUpMaterialByUserId ( \u0026 grade . VerifyGradeUpMaterialByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), VerifyType : pointy . String ( \"match\" ), PropertyId : pointy . String ( \"property-0001\" ), MaterialPropertyId : pointy . String ( \"property-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\VerifyGradeUpMaterialByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e verifyGradeUpMaterialByUserId ( ( new VerifyGradeUpMaterialByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withVerifyType ( \"match\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withMaterialPropertyId ( \"property-0002\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.VerifyGradeUpMaterialByUserIdRequest ; import io.gs2.grade.result.VerifyGradeUpMaterialByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { VerifyGradeUpMaterialByUserIdResult result = client . verifyGradeUpMaterialByUserId ( new VerifyGradeUpMaterialByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withVerifyType ( \"match\" ) . withPropertyId ( \"property-0001\" ) . withMaterialPropertyId ( \"property-0002\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . VerifyGradeUpMaterialByUserIdResult \u003e asyncResult = null ; yield return client . VerifyGradeUpMaterialByUserId ( new Gs2 . Gs2Grade . Request . VerifyGradeUpMaterialByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithVerifyType ( \"match\" ) . WithPropertyId ( \"property-0001\" ) . WithMaterialPropertyId ( \"property-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . verifyGradeUpMaterialByUserId ( new Gs2Grade . VerifyGradeUpMaterialByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withVerifyType ( \"match\" ) . withPropertyId ( \"property-0001\" ) . withMaterialPropertyId ( \"property-0002\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . verify_grade_up_material_by_user_id ( grade . VerifyGradeUpMaterialByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_verify_type ( 'match' ) . with_property_id ( 'property-0001' ) . with_material_property_id ( 'property-0002' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.verify_grade_up_material_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , verifyType = \"match\" , propertyId = \"property-0001\" , materialPropertyId = \"property-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'grade' ) api_result_handler = client.verify_grade_up_material_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , verifyType = \"match\" , propertyId = \"property-0001\" , materialPropertyId = \"property-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result multiplyAcquireActionsByUserId 그레이드에 기반한 레이트로 입수 액션을 곱셈 지정된 입수 액션의 수량을 사용자의 현재 그레이드에 기반한 레이트 승수로 곱합니다. 레이트 승수는 지정된 rateName과 현재 그레이드 값을 사용하여 그레이드 모델의 acquireActionRates에서 조회됩니다. 곱해진 입수 액션은 트랜잭션으로 실행되며, 그레이드에 기반한 보상 스케일링(예: 그레이드가 높을수록 더 많은 리소스를 획득)을 실현합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. rateName string  ~ 128자 보상 가산 테이블 이름 그레이드 모델 내에서 이 배율 테이블을 고유하게 식별하는 이름입니다. 트랜잭션의 특정 입수 액션에 그레이드 기반 보상 스케일링을 적용할 때 참조됩니다. acquireActions List [] 0 ~ 100 items 입수 액션 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 보상 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . MultiplyAcquireActionsByUserId ( \u0026 grade . MultiplyAcquireActionsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), RateName : pointy . String ( \"rate-0001\" ), AcquireActions : [] grade . AcquireAction { grade . AcquireAction { Action : pointy . String ( \"Gs2Grade:AddRankCapByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"gradeName\\\": \\\"character\\\", \\\"propertyId\\\": \\\"property-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"rankCapValue\\\": 1}\" ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\MultiplyAcquireActionsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e multiplyAcquireActionsByUserId ( ( new MultiplyAcquireActionsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withRateName ( \"rate-0001\" ) -\u003e withAcquireActions ([ ( new AcquireAction ()) -\u003e withAction ( \"Gs2Grade:AddRankCapByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" gradeName \\\" : \\\" character \\\" , \\\" propertyId \\\" : \\\" property-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" rankCapValue \\\" : 1}\" ), ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.MultiplyAcquireActionsByUserIdRequest ; import io.gs2.grade.result.MultiplyAcquireActionsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { MultiplyAcquireActionsByUserIdResult result = client . multiplyAcquireActionsByUserId ( new MultiplyAcquireActionsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withRateName ( \"rate-0001\" ) . withAcquireActions ( Arrays . asList ( new AcquireAction () . withAction ( \"Gs2Grade:AddRankCapByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"gradeName\\\": \\\"character\\\", \\\"propertyId\\\": \\\"property-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"rankCapValue\\\": 1}\" ) )) . withTimeOffsetToken ( null ) ); List AcquireAction \u003e items = result . getItems (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . MultiplyAcquireActionsByUserIdResult \u003e asyncResult = null ; yield return client . MultiplyAcquireActionsByUserId ( new Gs2 . Gs2Grade . Request . MultiplyAcquireActionsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeName ( \"grade-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithRateName ( \"rate-0001\" ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Grade:AddRankCapByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"gradeName\\\": \\\"character\\\", \\\"propertyId\\\": \\\"property-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"rankCapValue\\\": 1}\" ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . multiplyAcquireActionsByUserId ( new Gs2Grade . MultiplyAcquireActionsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGradeName ( \"grade-0001\" ) . withPropertyId ( \"property-0001\" ) . withRateName ( \"rate-0001\" ) . withAcquireActions ([ new Gs2Grade . model . AcquireAction () . withAction ( \"Gs2Grade:AddRankCapByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"gradeName\\\": \\\"character\\\", \\\"propertyId\\\": \\\"property-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"rankCapValue\\\": 1}\" ), ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . multiply_acquire_actions_by_user_id ( grade . MultiplyAcquireActionsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_grade_name ( 'grade-0001' ) . with_property_id ( 'property-0001' ) . with_rate_name ( 'rate-0001' ) . with_acquire_actions ([ grade . AcquireAction () . with_action ( 'Gs2Grade:AddRankCapByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"gradeName\": \"character\", \"propertyId\": \"property-0001\", \"userId\": \"# {userId} \", \"rankCapValue\": 1}' ), ]) . with_time_offset_token ( None ) ) items = result . items transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.multiply_acquire_actions_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , rateName = \"rate-0001\" , acquireActions = { { action = \"Gs2Grade:AddRankCapByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" gradeName \\\" : \\\" character \\\" , \\\" propertyId \\\" : \\\" property-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" rankCapValue \\\" : 1}\" , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'grade' ) api_result_handler = client.multiply_acquire_actions_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , gradeName = \"grade-0001\" , propertyId = \"property-0001\" , rateName = \"rate-0001\" , acquireActions = { { action = \"Gs2Grade:AddRankCapByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" gradeName \\\" : \\\" character \\\" , \\\" propertyId \\\" : \\\" property-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" rankCapValue \\\" : 1}\" , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; describeGradeModels 그레이드 모델 목록 조회 지정된 네임스페이스에서 현재 유효화(공개)되어 있는 그레이드 모델의 목록을 조회합니다. 그레이드 모델은 그레이드 엔트리, 기본 그레이드, 연결된 Experience 모델, 획득 액션 배율을 포함하는 그레이드 구조를 정의합니다. 그레이드 모델 마스터와 달리 읽기 전용이며 현재 사용 중인 설정을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 그레이드 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DescribeGradeModels ( \u0026 grade . DescribeGradeModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DescribeGradeModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e describeGradeModels ( ( new DescribeGradeModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DescribeGradeModelsRequest ; import io.gs2.grade.result.DescribeGradeModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DescribeGradeModelsResult result = client . describeGradeModels ( new DescribeGradeModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List GradeModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DescribeGradeModelsResult \u003e asyncResult = null ; yield return client . DescribeGradeModels ( new Gs2 . Gs2Grade . Request . DescribeGradeModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . describeGradeModels ( new Gs2Grade . DescribeGradeModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . describe_grade_models ( grade . DescribeGradeModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.describe_grade_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'grade' ) api_result_handler = client.describe_grade_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getGradeModel 그레이드 모델 조회 이름을 지정하여 특정 현재 유효한 그레이드 모델의 상세 정보를 조회합니다. 연결된 Experience 서비스의 진행 레벨과 이에 관련된 랭크 캡 값을 정의하는 그레이드 엔트리를 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string  ~ 128자 그레이드 모델 이름 그레이드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GradeModel 그레이드 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . GetGradeModel ( \u0026 grade . GetGradeModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GradeName : pointy . String ( \"grade-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\GetGradeModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e getGradeModel ( ( new GetGradeModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGradeName ( \"grade-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.GetGradeModelRequest ; import io.gs2.grade.result.GetGradeModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { GetGradeModelResult result = client . getGradeModel ( new GetGradeModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-0001\" ) ); GradeModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . GetGradeModelResult \u003e asyncResult = null ; yield return client . GetGradeModel ( new Gs2 . Gs2Grade . Request . GetGradeModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGradeName ( \"grade-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . getGradeModel ( new Gs2Grade . GetGradeModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . get_grade_model ( grade . GetGradeModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_grade_name ( 'grade-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.get_grade_model ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.get_grade_model_async ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 그레이드 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 네임스페이스 내의 모든 그레이드 모델 마스터 정의를 활성화에 적합한 하나의 JSON 문서로 내보냅니다. 내보내는 데이터에는 그레이드 엔트리, 기본 그레이드, Experience 모델 링크, 입수 액션 레이트를 포함한 그레이드 모델이 포함됩니다. 활성화 전 마스터 데이터 확인이나 현재 마스터 설정의 백업에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentGradeMaster 활성화 가능한 그레이드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 grade . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.ExportMasterRequest ; import io.gs2.grade.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentGradeMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Grade . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Grade . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . export_master ( grade . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentGradeMaster 현재 활성화된 그레이드 모델 마스터 데이터 가져오기 지정된 네임스페이스에서 현재 활성화되어 사용 중인 그레이드 모델 마스터 데이터를 가져옵니다. 반환되는 데이터에는 현재 런타임 요청을 처리하고 있는 모든 그레이드 모델의 JSON 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentGradeMaster 현재 활성화된 그레이드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . GetCurrentGradeMaster ( \u0026 grade . GetCurrentGradeMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\GetCurrentGradeMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e getCurrentGradeMaster ( ( new GetCurrentGradeMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.GetCurrentGradeMasterRequest ; import io.gs2.grade.result.GetCurrentGradeMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { GetCurrentGradeMasterResult result = client . getCurrentGradeMaster ( new GetCurrentGradeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentGradeMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . GetCurrentGradeMasterResult \u003e asyncResult = null ; yield return client . GetCurrentGradeMaster ( new Gs2 . Gs2Grade . Request . GetCurrentGradeMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . getCurrentGradeMaster ( new Gs2Grade . GetCurrentGradeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . get_current_grade_master ( grade . GetCurrentGradeMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.get_current_grade_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.get_current_grade_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentGradeMaster 현재 활성화된 그레이드 모델 마스터 데이터 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 업데이트를 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 가져옵니다. 가져온 URL에 마스터 데이터를 업로드합니다. 업로드로 얻은 토큰을 전달하여 UpdateCurrentGradeMaster를 실행하면, 마스터 데이터가 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentGradeMaster ( \u0026 grade . PreUpdateCurrentGradeMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\PreUpdateCurrentGradeMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentGradeMaster ( ( new PreUpdateCurrentGradeMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.PreUpdateCurrentGradeMasterRequest ; import io.gs2.grade.result.PreUpdateCurrentGradeMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { PreUpdateCurrentGradeMasterResult result = client . preUpdateCurrentGradeMaster ( new PreUpdateCurrentGradeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . PreUpdateCurrentGradeMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentGradeMaster ( new Gs2 . Gs2Grade . Request . PreUpdateCurrentGradeMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . preUpdateCurrentGradeMaster ( new Gs2Grade . PreUpdateCurrentGradeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . pre_update_current_grade_master ( grade . PreUpdateCurrentGradeMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.pre_update_current_grade_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'grade' ) api_result_handler = client.pre_update_current_grade_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentGradeMaster 현재 활성화된 그레이드 모델 마스터 데이터 업데이트 새로운 그레이드 모델 마스터 데이터를 활성화하여, 현재 활성화된 설정을 교체합니다. 두 가지 모드를 지원합니다: ‘direct’는 인라인 마스터 데이터(1MB 미만 데이터에 적합), ‘preUpload’는 PreUpdate로 사전에 업로드한 데이터를 적용합니다. 활성화 후에는 모든 그레이드 관련 런타임 작업(그레이드 조회, 랭크 캡 적용, 입수 액션 레이트 곱셈)이 새로운 설정을 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentGradeMaster 업데이트된 현재 활성화된 그레이드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentGradeMaster ( \u0026 grade . UpdateCurrentGradeMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2023-12-25\\\", \\\"gradeModels\\\": [{\\\"name\\\": \\\"grade-0001\\\", \\\"metadata\\\": \\\"GRADE_0001\\\", \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\", \\\"defaultGrades\\\": [{\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\\\", \\\"defaultGradeValue\\\": 2}, {\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\\\", \\\"defaultGradeValue\\\": 3}, {\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\\\", \\\"defaultGradeValue\\\": 4}], \\\"gradeEntries\\\": [{\\\"rankCapValue\\\": 50, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 60, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 70, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 80, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}]}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\UpdateCurrentGradeMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e updateCurrentGradeMaster ( ( new UpdateCurrentGradeMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( '{\"version\": \"2023-12-25\", \"gradeModels\": [{\"name\": \"grade-0001\", \"metadata\": \"GRADE_0001\", \"experienceModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\", \"defaultGrades\": [{\"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\", \"defaultGradeValue\": 2}, {\"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\", \"defaultGradeValue\": 3}, {\"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\", \"defaultGradeValue\": 4}], \"gradeEntries\": [{\"rankCapValue\": 50, \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\", \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\"}, {\"rankCapValue\": 60, \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\", \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\"}, {\"rankCapValue\": 70, \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\", \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\"}, {\"rankCapValue\": 80, \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\", \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\"}]}]}' ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.UpdateCurrentGradeMasterRequest ; import io.gs2.grade.result.UpdateCurrentGradeMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { UpdateCurrentGradeMasterResult result = client . updateCurrentGradeMaster ( new UpdateCurrentGradeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-12-25\\\", \\\"gradeModels\\\": [{\\\"name\\\": \\\"grade-0001\\\", \\\"metadata\\\": \\\"GRADE_0001\\\", \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\", \\\"defaultGrades\\\": [{\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\\\", \\\"defaultGradeValue\\\": 2}, {\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\\\", \\\"defaultGradeValue\\\": 3}, {\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\\\", \\\"defaultGradeValue\\\": 4}], \\\"gradeEntries\\\": [{\\\"rankCapValue\\\": 50, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 60, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 70, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 80, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}]}]}\" ) . withUploadToken ( null ) ); CurrentGradeMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . UpdateCurrentGradeMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentGradeMaster ( new Gs2 . Gs2Grade . Request . UpdateCurrentGradeMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2023-12-25\\\", \\\"gradeModels\\\": [{\\\"name\\\": \\\"grade-0001\\\", \\\"metadata\\\": \\\"GRADE_0001\\\", \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\", \\\"defaultGrades\\\": [{\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\\\", \\\"defaultGradeValue\\\": 2}, {\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\\\", \\\"defaultGradeValue\\\": 3}, {\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\\\", \\\"defaultGradeValue\\\": 4}], \\\"gradeEntries\\\": [{\\\"rankCapValue\\\": 50, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 60, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 70, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 80, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}]}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . updateCurrentGradeMaster ( new Gs2Grade . UpdateCurrentGradeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-12-25\\\", \\\"gradeModels\\\": [{\\\"name\\\": \\\"grade-0001\\\", \\\"metadata\\\": \\\"GRADE_0001\\\", \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\\\", \\\"defaultGrades\\\": [{\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\\\", \\\"defaultGradeValue\\\": 2}, {\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\\\", \\\"defaultGradeValue\\\": 3}, {\\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\\\", \\\"defaultGradeValue\\\": 4}], \\\"gradeEntries\\\": [{\\\"rankCapValue\\\": 50, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 60, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 70, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}, {\\\"rankCapValue\\\": 80, \\\"propertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\\\", \\\"gradeUpPropertyIdRegex\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\\\"}]}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . update_current_grade_master ( grade . UpdateCurrentGradeMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2023-12-25\", \"gradeModels\": [{\"name\": \"grade-0001\", \"metadata\": \"GRADE_0001\", \"experienceModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\", \"defaultGrades\": [{\"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\", \"defaultGradeValue\": 2}, {\"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\", \"defaultGradeValue\": 3}, {\"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\", \"defaultGradeValue\": 4}], \"gradeEntries\": [{\"rankCapValue\": 50, \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\", \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\"}, {\"rankCapValue\": 60, \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\", \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\"}, {\"rankCapValue\": 70, \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\", \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\"}, {\"rankCapValue\": 80, \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\", \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\"}]}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.update_current_grade_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-12-25 \\\" , \\\" gradeModels \\\" : [{ \\\" name \\\" : \\\" grade-0001 \\\" , \\\" metadata \\\" : \\\" GRADE_0001 \\\" , \\\" experienceModelId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" , \\\" defaultGrades \\\" : [{ \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.* \\\" , \\\" defaultGradeValue \\\" : 2}, { \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.* \\\" , \\\" defaultGradeValue \\\" : 3}, { \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.* \\\" , \\\" defaultGradeValue \\\" : 4}], \\\" gradeEntries \\\" : [{ \\\" rankCapValue \\\" : 50, \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.* \\\" , \\\" gradeUpPropertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.* \\\" }, { \\\" rankCapValue \\\" : 60, \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.* \\\" , \\\" gradeUpPropertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.* \\\" }, { \\\" rankCapValue \\\" : 70, \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.* \\\" , \\\" gradeUpPropertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.* \\\" }, { \\\" rankCapValue \\\" : 80, \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.* \\\" , \\\" gradeUpPropertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.* \\\" }]}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.update_current_grade_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-12-25 \\\" , \\\" gradeModels \\\" : [{ \\\" name \\\" : \\\" grade-0001 \\\" , \\\" metadata \\\" : \\\" GRADE_0001 \\\" , \\\" experienceModelId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001 \\\" , \\\" defaultGrades \\\" : [{ \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.* \\\" , \\\" defaultGradeValue \\\" : 2}, { \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.* \\\" , \\\" defaultGradeValue \\\" : 3}, { \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.* \\\" , \\\" defaultGradeValue \\\" : 4}], \\\" gradeEntries \\\" : [{ \\\" rankCapValue \\\" : 50, \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.* \\\" , \\\" gradeUpPropertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.* \\\" }, { \\\" rankCapValue \\\" : 60, \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.* \\\" , \\\" gradeUpPropertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.* \\\" }, { \\\" rankCapValue \\\" : 70, \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.* \\\" , \\\" gradeUpPropertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.* \\\" }, { \\\" rankCapValue \\\" : 80, \\\" propertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.* \\\" , \\\" gradeUpPropertyIdRegex \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.* \\\" }]}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentGradeMasterFromGitHub 현재 활성화된 그레이드 모델 마스터 데이터를 GitHub에서 업데이트 지정된 GitHub 저장소에서 그레이드 모델 마스터 데이터를 체크아웃하여 활성화합니다. 체크아웃 설정에서 저장소, 브랜치/태그, 가져올 파일 경로를 지정합니다. 그레이드 설정이 저장소에서 버전 관리되는 Git 기반 마스터 데이터 관리 워크플로를 가능하게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentGradeMaster 업데이트된 현재 활성화된 그레이드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentGradeMasterFromGitHub ( \u0026 grade . UpdateCurrentGradeMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 grade . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\UpdateCurrentGradeMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e updateCurrentGradeMasterFromGitHub ( ( new UpdateCurrentGradeMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.UpdateCurrentGradeMasterFromGitHubRequest ; import io.gs2.grade.result.UpdateCurrentGradeMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { UpdateCurrentGradeMasterFromGitHubResult result = client . updateCurrentGradeMasterFromGitHub ( new UpdateCurrentGradeMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentGradeMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . UpdateCurrentGradeMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentGradeMasterFromGitHub ( new Gs2 . Gs2Grade . Request . UpdateCurrentGradeMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Grade . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . updateCurrentGradeMasterFromGitHub ( new Gs2Grade . UpdateCurrentGradeMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Grade . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . update_current_grade_master_from_git_hub ( grade . UpdateCurrentGradeMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( grade . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.update_current_grade_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.update_current_grade_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGradeModelMasters 그레이드 모델 마스터 목록 가져오기 이름 접두사 필터링이 가능한, 편집 가능한 그레이드 모델 마스터의 페이지네이션 리스트를 가져옵니다. 그레이드 모델 마스터는 그레이드 엔트리, 기본 그레이드, 연결된 Experience 모델, 입수 액션 레이트를 포함한 그레이드 구조를 정의합니다. 마스터에 대한 변경 사항은 CurrentGradeMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 그레이드 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 그레이드 모델 마스터의 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DescribeGradeModelMasters ( \u0026 grade . DescribeGradeModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DescribeGradeModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e describeGradeModelMasters ( ( new DescribeGradeModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DescribeGradeModelMastersRequest ; import io.gs2.grade.result.DescribeGradeModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DescribeGradeModelMastersResult result = client . describeGradeModelMasters ( new DescribeGradeModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List GradeModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DescribeGradeModelMastersResult \u003e asyncResult = null ; yield return client . DescribeGradeModelMasters ( new Gs2 . Gs2Grade . Request . DescribeGradeModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . describeGradeModelMasters ( new Gs2Grade . DescribeGradeModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . describe_grade_model_masters ( grade . DescribeGradeModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.describe_grade_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'grade' ) api_result_handler = client.describe_grade_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createGradeModelMaster 그레이드 모델 마스터를 신규 작성 새로운 편집 가능한 그레이드 모델 마스터 정의를 작성합니다. 주요 설정 항목: defaultGrades: 신규 사용자의 초기 그레이드 값 experienceModelId: 랭크 캡 관리를 위해 GS2-Experience 모델에 연결 gradeEntries: 각 그레이드 레벨의 랭크 캡 값과 프로퍼티 ID 매칭 패턴을 정의 acquireActionRates: 현재 그레이드에 기반하여 입수 액션에 적용되는 레이트 승수 변경 사항은 CurrentGradeMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 그레이드 모델명 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultGrades List 0 ~ 100 items 기본 그레이드 모델 리스트 신규 스테이터스 작성 시 평가되는 기본 그레이드 규칙의 순서가 있는 리스트입니다. 각 항목은 프로퍼티 ID의 정규 표현식 패턴과, 매칭된 경우 할당할 그레이드 값을 정의합니다. 어떤 패턴에도 매칭되지 않으면 기본 그레이드 값 0이 사용됩니다. experienceModelId string  ~ 1024자 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그레이드 모델과 연동시킬 GS2-Experience의 경험치 모델의 GRN입니다. 그레이드 값이 변경되면, 그레이드 엔트리의 매핑에 기반하여 연동된 경험치 모델의 랭크 캡이 자동으로 업데이트됩니다. 이를 통해 높은 그레이드가 더 높은 랭크 캡을 해제하는 그레이드 기반 성장을 구현할 수 있습니다. gradeEntries List 0 ~ 100 items 그레이드 엔트리 모델 리스트 각 그레이드 값을 연동된 GS2-Experience 모델의 랭크 캡에 매핑하는 그레이드 엔트리의 순서가 있는 리스트입니다. 배열의 인덱스가 그레이드 값에 대응하므로, 첫 번째 항목(인덱스 0)이 그레이드 0의 랭크 캡을, 두 번째 항목이 그레이드 1의 랭크 캡을 정의합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 리스트 그레이드를 기반으로 보상량을 스케일링하기 위한 이름이 지정된 배율 테이블의 컬렉션입니다. 여러 테이블을 정의하여 서로 다른 종류의 보상(예: 경험치, 통화, 아이템)에 다른 스케일링 규칙을 적용할 수 있습니다. Result 타입 설명 item GradeModelMaster 작성한 그레이드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . CreateGradeModelMaster ( \u0026 grade . CreateGradeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"grade-model-0001\" ), Description : nil , Metadata : nil , DefaultGrades : [] grade . DefaultGradeModel { grade . DefaultGradeModel { PropertyIdRegex : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" ), DefaultGradeValue : pointy . Int64 ( 2 ), }, }, ExperienceModelId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ), GradeEntries : [] grade . GradeEntryModel { grade . GradeEntryModel { Metadata : pointy . String ( \"GRADE_ENTRY_METADATA\" ), RankCapValue : pointy . Int64 ( 50 ), PropertyIdRegex : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" ), GradeUpPropertyIdRegex : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), }, }, AcquireActionRates : [] grade . AcquireActionRate { grade . AcquireActionRate { Name : pointy . String ( \"rate-0001\" ), Rates : [] * float64 { pointy . Float64 ( 1.0 ), pointy . Float64 ( 1.5 ), pointy . Float64 ( 2.0 ), }, }, grade . AcquireActionRate { Name : pointy . String ( \"rate-0002\" ), Rates : [] * float64 { pointy . Float64 ( 10.0 ), pointy . Float64 ( 15.5 ), pointy . Float64 ( 20.0 ), }, }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\CreateGradeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e createGradeModelMaster ( ( new CreateGradeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"grade-model-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withDefaultGrades ([ ( new \\Gs2\\Grade\\Model\\DefaultGradeModel ()) -\u003e withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" ) -\u003e withDefaultGradeValue ( 2 ), ]) -\u003e withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) -\u003e withGradeEntries ([ ( new \\Gs2\\Grade\\Model\\GradeEntryModel ()) -\u003e withMetadata ( \"GRADE_ENTRY_METADATA\" ) -\u003e withRankCapValue ( 50 ) -\u003e withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" ) -\u003e withGradeUpPropertyIdRegex ( 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' ), ]) -\u003e withAcquireActionRates ([ ( new \\Gs2\\Grade\\Model\\AcquireActionRate ()) -\u003e withName ( \"rate-0001\" ) -\u003e withRates ([ 1.0 , 1.5 , 2.0 , ]), ( new \\Gs2\\Grade\\Model\\AcquireActionRate ()) -\u003e withName ( \"rate-0002\" ) -\u003e withRates ([ 10.0 , 15.5 , 20.0 , ]), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.CreateGradeModelMasterRequest ; import io.gs2.grade.result.CreateGradeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { CreateGradeModelMasterResult result = client . createGradeModelMaster ( new CreateGradeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"grade-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDefaultGrades ( Arrays . asList ( new io . gs2 . grade . model . DefaultGradeModel () . withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" ) . withDefaultGradeValue ( 2L ) )) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) . withGradeEntries ( Arrays . asList ( new io . gs2 . grade . model . GradeEntryModel () . withMetadata ( \"GRADE_ENTRY_METADATA\" ) . withRankCapValue ( 50L ) . withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" ) . withGradeUpPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ) )) . withAcquireActionRates ( Arrays . asList ( new io . gs2 . grade . model . AcquireActionRate () . withName ( \"rate-0001\" ) . withRates ( Arrays . asList ( 1 . 0 , 1 . 5 , 2 . 0 )), new io . gs2 . grade . model . AcquireActionRate () . withName ( \"rate-0002\" ) . withRates ( Arrays . asList ( 10 . 0 , 15 . 5 , 20 . 0 )) )) ); GradeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . CreateGradeModelMasterResult \u003e asyncResult = null ; yield return client . CreateGradeModelMaster ( new Gs2 . Gs2Grade . Request . CreateGradeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"grade-model-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithDefaultGrades ( new Gs2 . Gs2Grade . Model . DefaultGradeModel [] { new Gs2 . Gs2Grade . Model . DefaultGradeModel () . WithPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" ) . WithDefaultGradeValue ( 2L ), }) . WithExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) . WithGradeEntries ( new Gs2 . Gs2Grade . Model . GradeEntryModel [] { new Gs2 . Gs2Grade . Model . GradeEntryModel () . WithMetadata ( \"GRADE_ENTRY_METADATA\" ) . WithRankCapValue ( 50L ) . WithPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" ) . WithGradeUpPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), }) . WithAcquireActionRates ( new Gs2 . Gs2Grade . Model . AcquireActionRate [] { new Gs2 . Gs2Grade . Model . AcquireActionRate () . WithName ( \"rate-0001\" ) . WithRates ( new double [] { 1.0 , 1.5 , 2.0 , }), new Gs2 . Gs2Grade . Model . AcquireActionRate () . WithName ( \"rate-0002\" ) . WithRates ( new double [] { 10.0 , 15.5 , 20.0 , }), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . createGradeModelMaster ( new Gs2Grade . CreateGradeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"grade-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDefaultGrades ([ new Gs2Grade . model . DefaultGradeModel () . withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" ) . withDefaultGradeValue ( 2 ), ]) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) . withGradeEntries ([ new Gs2Grade . model . GradeEntryModel () . withMetadata ( \"GRADE_ENTRY_METADATA\" ) . withRankCapValue ( 50 ) . withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" ) . withGradeUpPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), ]) . withAcquireActionRates ([ new Gs2Grade . model . AcquireActionRate () . withName ( \"rate-0001\" ) . withRates ([ 1.0 , 1.5 , 2.0 , ]), new Gs2Grade . model . AcquireActionRate () . withName ( \"rate-0002\" ) . withRates ([ 10.0 , 15.5 , 20.0 , ]), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . create_grade_model_master ( grade . CreateGradeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'grade-model-0001' ) . with_description ( None ) . with_metadata ( None ) . with_default_grades ([ grade . DefaultGradeModel () . with_property_id_regex ( 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*' ) . with_default_grade_value ( 2 ), ]) . with_experience_model_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001' ) . with_grade_entries ([ grade . GradeEntryModel () . with_metadata ( 'GRADE_ENTRY_METADATA' ) . with_rank_cap_value ( 50 ) . with_property_id_regex ( 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*' ) . with_grade_up_property_id_regex ( 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' ), ]) . with_acquire_action_rates ([ grade . AcquireActionRate () . with_name ( 'rate-0001' ) . with_rates ([ 1.0 , 1.5 , 2.0 , ]), grade . AcquireActionRate () . with_name ( 'rate-0002' ) . with_rates ([ 10.0 , 15.5 , 20.0 , ]), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.create_grade_model_master ({ namespaceName = \"namespace-0001\" , name = \"grade-model-0001\" , description = nil , metadata = nil , defaultGrades = { { propertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" , defaultGradeValue = 2 , } }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , gradeEntries = { { metadata = \"GRADE_ENTRY_METADATA\" , rankCapValue = 50 , propertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" , } }, acquireActionRates = { { name = \"rate-0001\" , rates = { 1.0 , 1.5 , 2.0 }, }, { name = \"rate-0002\" , rates = { 10.0 , 15.5 , 20.0 }, } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.create_grade_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"grade-model-0001\" , description = nil , metadata = nil , defaultGrades = { { propertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" , defaultGradeValue = 2 , } }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , gradeEntries = { { metadata = \"GRADE_ENTRY_METADATA\" , rankCapValue = 50 , propertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" , } }, acquireActionRates = { { name = \"rate-0001\" , rates = { 1.0 , 1.5 , 2.0 }, }, { name = \"rate-0002\" , rates = { 10.0 , 15.5 , 20.0 }, } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGradeModelMaster 그레이드 모델 마스터를 가져오기 이름을 지정하여, 특정 편집 가능한 그레이드 모델 마스터의 상세 정보를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string  ~ 128자 그레이드 모델명 Result 타입 설명 item GradeModelMaster 그레이드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . GetGradeModelMaster ( \u0026 grade . GetGradeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GradeName : pointy . String ( \"grade-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\GetGradeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e getGradeModelMaster ( ( new GetGradeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGradeName ( \"grade-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.GetGradeModelMasterRequest ; import io.gs2.grade.result.GetGradeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { GetGradeModelMasterResult result = client . getGradeModelMaster ( new GetGradeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-model-0001\" ) ); GradeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . GetGradeModelMasterResult \u003e asyncResult = null ; yield return client . GetGradeModelMaster ( new Gs2 . Gs2Grade . Request . GetGradeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGradeName ( \"grade-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . getGradeModelMaster ( new Gs2Grade . GetGradeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . get_grade_model_master ( grade . GetGradeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_grade_name ( 'grade-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.get_grade_model_master ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.get_grade_model_master_async ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGradeModelMaster 그레이드 모델 마스터를 업데이트 기존 그레이드 모델 마스터의 설명, 메타데이터, 기본 그레이드, Experience 모델 링크, 그레이드 엔트리, 입수 액션 레이트를 업데이트합니다. 그레이드 모델 이름은 작성 후 변경할 수 없습니다. 변경 사항은 CurrentGradeMaster API로 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string  ~ 128자 그레이드 모델명 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultGrades List 0 ~ 100 items 기본 그레이드 모델 리스트 신규 스테이터스 작성 시 평가되는 기본 그레이드 규칙의 순서가 있는 리스트입니다. 각 항목은 프로퍼티 ID의 정규 표현식 패턴과, 매칭된 경우 할당할 그레이드 값을 정의합니다. 어떤 패턴에도 매칭되지 않으면 기본 그레이드 값 0이 사용됩니다. experienceModelId string  ~ 1024자 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그레이드 모델과 연동시킬 GS2-Experience의 경험치 모델의 GRN입니다. 그레이드 값이 변경되면, 그레이드 엔트리의 매핑에 기반하여 연동된 경험치 모델의 랭크 캡이 자동으로 업데이트됩니다. 이를 통해 높은 그레이드가 더 높은 랭크 캡을 해제하는 그레이드 기반 성장을 구현할 수 있습니다. gradeEntries List 0 ~ 100 items 그레이드 엔트리 모델 리스트 각 그레이드 값을 연동된 GS2-Experience 모델의 랭크 캡에 매핑하는 그레이드 엔트리의 순서가 있는 리스트입니다. 배열의 인덱스가 그레이드 값에 대응하므로, 첫 번째 항목(인덱스 0)이 그레이드 0의 랭크 캡을, 두 번째 항목이 그레이드 1의 랭크 캡을 정의합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 리스트 그레이드를 기반으로 보상량을 스케일링하기 위한 이름이 지정된 배율 테이블의 컬렉션입니다. 여러 테이블을 정의하여 서로 다른 종류의 보상(예: 경험치, 통화, 아이템)에 다른 스케일링 규칙을 적용할 수 있습니다. Result 타입 설명 item GradeModelMaster 업데이트한 그레이드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . UpdateGradeModelMaster ( \u0026 grade . UpdateGradeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GradeName : pointy . String ( \"grade-model-0001\" ), Description : nil , Metadata : nil , DefaultGrades : [] grade . DefaultGradeModel { grade . DefaultGradeModel { PropertyIdRegex : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:ssr-.*\" ), DefaultGradeValue : pointy . Int64 ( 3 ), }, }, ExperienceModelId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ), GradeEntries : [] grade . GradeEntryModel { grade . GradeEntryModel { Metadata : pointy . String ( \"GRADE_ENTRY_METADATA1\" ), RankCapValue : pointy . Int64 ( 60 ), PropertyIdRegex : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:(.*):.*\" ), GradeUpPropertyIdRegex : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:$1:.*\" ), }, }, AcquireActionRates : [] grade . AcquireActionRate { grade . AcquireActionRate { Name : pointy . String ( \"rate-0001\" ), Mode : pointy . String ( \"big\" ), BigRates : [] * string { pointy . String ( \"100000000000000\" ), pointy . String ( \"10000000000000000000000000000\" ), pointy . String ( \"1000000000000000000000000000000000000000000\" ), }, }, grade . AcquireActionRate { Name : pointy . String ( \"rate-0002\" ), Mode : pointy . String ( \"big\" ), BigRates : [] * string { pointy . String ( \"100000000000000\" ), pointy . String ( \"10000000000000000000000000000\" ), pointy . String ( \"1000000000000000000000000000000000000000000\" ), }, }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\UpdateGradeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e updateGradeModelMaster ( ( new UpdateGradeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGradeName ( \"grade-model-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withDefaultGrades ([ ( new \\Gs2\\Grade\\Model\\DefaultGradeModel ()) -\u003e withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:ssr-.*\" ) -\u003e withDefaultGradeValue ( 3 ), ]) -\u003e withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) -\u003e withGradeEntries ([ ( new \\Gs2\\Grade\\Model\\GradeEntryModel ()) -\u003e withMetadata ( \"GRADE_ENTRY_METADATA1\" ) -\u003e withRankCapValue ( 60 ) -\u003e withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:(.*):.*\" ) -\u003e withGradeUpPropertyIdRegex ( 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:$1:.*' ), ]) -\u003e withAcquireActionRates ([ ( new \\Gs2\\Grade\\Model\\AcquireActionRate ()) -\u003e withName ( \"rate-0001\" ) -\u003e withMode ( \"big\" ) -\u003e withBigRates ([ \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , ]), ( new \\Gs2\\Grade\\Model\\AcquireActionRate ()) -\u003e withName ( \"rate-0002\" ) -\u003e withMode ( \"big\" ) -\u003e withBigRates ([ \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , ]), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.UpdateGradeModelMasterRequest ; import io.gs2.grade.result.UpdateGradeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { UpdateGradeModelMasterResult result = client . updateGradeModelMaster ( new UpdateGradeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDefaultGrades ( Arrays . asList ( new io . gs2 . grade . model . DefaultGradeModel () . withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:ssr-.*\" ) . withDefaultGradeValue ( 3L ) )) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) . withGradeEntries ( Arrays . asList ( new io . gs2 . grade . model . GradeEntryModel () . withMetadata ( \"GRADE_ENTRY_METADATA1\" ) . withRankCapValue ( 60L ) . withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:(.*):.*\" ) . withGradeUpPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:$1:.*\" ) )) . withAcquireActionRates ( Arrays . asList ( new io . gs2 . grade . model . AcquireActionRate () . withName ( \"rate-0001\" ) . withMode ( \"big\" ) . withBigRates ( Arrays . asList ( \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" )), new io . gs2 . grade . model . AcquireActionRate () . withName ( \"rate-0002\" ) . withMode ( \"big\" ) . withBigRates ( Arrays . asList ( \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" )) )) ); GradeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . UpdateGradeModelMasterResult \u003e asyncResult = null ; yield return client . UpdateGradeModelMaster ( new Gs2 . Gs2Grade . Request . UpdateGradeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGradeName ( \"grade-model-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithDefaultGrades ( new Gs2 . Gs2Grade . Model . DefaultGradeModel [] { new Gs2 . Gs2Grade . Model . DefaultGradeModel () . WithPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:ssr-.*\" ) . WithDefaultGradeValue ( 3L ), }) . WithExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) . WithGradeEntries ( new Gs2 . Gs2Grade . Model . GradeEntryModel [] { new Gs2 . Gs2Grade . Model . GradeEntryModel () . WithMetadata ( \"GRADE_ENTRY_METADATA1\" ) . WithRankCapValue ( 60L ) . WithPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:(.*):.*\" ) . WithGradeUpPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:$1:.*\" ), }) . WithAcquireActionRates ( new Gs2 . Gs2Grade . Model . AcquireActionRate [] { new Gs2 . Gs2Grade . Model . AcquireActionRate () . WithName ( \"rate-0001\" ) . WithMode ( \"big\" ) . WithBigRates ( new string [] { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , }), new Gs2 . Gs2Grade . Model . AcquireActionRate () . WithName ( \"rate-0002\" ) . WithMode ( \"big\" ) . WithBigRates ( new string [] { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , }), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . updateGradeModelMaster ( new Gs2Grade . UpdateGradeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDefaultGrades ([ new Gs2Grade . model . DefaultGradeModel () . withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:ssr-.*\" ) . withDefaultGradeValue ( 3 ), ]) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) . withGradeEntries ([ new Gs2Grade . model . GradeEntryModel () . withMetadata ( \"GRADE_ENTRY_METADATA1\" ) . withRankCapValue ( 60 ) . withPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:(.*):.*\" ) . withGradeUpPropertyIdRegex ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:$1:.*\" ), ]) . withAcquireActionRates ([ new Gs2Grade . model . AcquireActionRate () . withName ( \"rate-0001\" ) . withMode ( \"big\" ) . withBigRates ([ \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , ]), new Gs2Grade . model . AcquireActionRate () . withName ( \"rate-0002\" ) . withMode ( \"big\" ) . withBigRates ([ \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" , ]), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . update_grade_model_master ( grade . UpdateGradeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_grade_name ( 'grade-model-0001' ) . with_description ( None ) . with_metadata ( None ) . with_default_grades ([ grade . DefaultGradeModel () . with_property_id_regex ( 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:ssr-.*' ) . with_default_grade_value ( 3 ), ]) . with_experience_model_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001' ) . with_grade_entries ([ grade . GradeEntryModel () . with_metadata ( 'GRADE_ENTRY_METADATA1' ) . with_rank_cap_value ( 60 ) . with_property_id_regex ( 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:(.*):.*' ) . with_grade_up_property_id_regex ( 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:$1:.*' ), ]) . with_acquire_action_rates ([ grade . AcquireActionRate () . with_name ( 'rate-0001' ) . with_mode ( 'big' ) . with_big_rates ([ '100000000000000' , '10000000000000000000000000000' , '1000000000000000000000000000000000000000000' , ]), grade . AcquireActionRate () . with_name ( 'rate-0002' ) . with_mode ( 'big' ) . with_big_rates ([ '100000000000000' , '10000000000000000000000000000' , '1000000000000000000000000000000000000000000' , ]), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.update_grade_model_master ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-model-0001\" , description = nil , metadata = nil , defaultGrades = { { propertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:ssr-.*\" , defaultGradeValue = 3 , } }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , gradeEntries = { { metadata = \"GRADE_ENTRY_METADATA1\" , rankCapValue = 60 , propertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:(.*):.*\" , gradeUpPropertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:$1:.*\" , } }, acquireActionRates = { { name = \"rate-0001\" , mode = \"big\" , bigRates = { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" }, }, { name = \"rate-0002\" , mode = \"big\" , bigRates = { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" }, } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.update_grade_model_master_async ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-model-0001\" , description = nil , metadata = nil , defaultGrades = { { propertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:ssr-.*\" , defaultGradeValue = 3 , } }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , gradeEntries = { { metadata = \"GRADE_ENTRY_METADATA1\" , rankCapValue = 60 , propertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:(.*):.*\" , gradeUpPropertyIdRegex = \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0002:item:$1:.*\" , } }, acquireActionRates = { { name = \"rate-0001\" , mode = \"big\" , bigRates = { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" }, }, { name = \"rate-0002\" , mode = \"big\" , bigRates = { \"100000000000000\" , \"10000000000000000000000000000\" , \"1000000000000000000000000000000000000000000\" }, } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGradeModelMaster 그레이드 모델 마스터를 삭제 편집 가능한 그레이드 모델 마스터 정의를 삭제합니다. 마스터 데이터에만 영향을 미치며, 현재 활성화(공개)된 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gradeName string  ~ 128자 그레이드 모델명 Result 타입 설명 item GradeModelMaster 삭제한 그레이드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/grade\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := grade . Gs2GradeRestClient { Session : \u0026 session , } result , err := client . DeleteGradeModelMaster ( \u0026 grade . DeleteGradeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GradeName : pointy . String ( \"grade-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Grade\\Gs2GradeRestClient ; use Gs2\\Grade\\Request\\DeleteGradeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GradeRestClient ( $session ); try { $result = $client -\u003e deleteGradeModelMaster ( ( new DeleteGradeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGradeName ( \"grade-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.grade.rest.Gs2GradeRestClient ; import io.gs2.grade.request.DeleteGradeModelMasterRequest ; import io.gs2.grade.result.DeleteGradeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GradeRestClient client = new Gs2GradeRestClient ( session ); try { DeleteGradeModelMasterResult result = client . deleteGradeModelMaster ( new DeleteGradeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-model-0001\" ) ); GradeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GradeRestClient ( session ); AsyncResult Gs2 . Gs2Grade . Result . DeleteGradeModelMasterResult \u003e asyncResult = null ; yield return client . DeleteGradeModelMaster ( new Gs2 . Gs2Grade . Request . DeleteGradeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGradeName ( \"grade-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Grade from '@/gs2/grade' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Grade . Gs2GradeRestClient ( session ); try { const result = await client . deleteGradeModelMaster ( new Gs2Grade . DeleteGradeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGradeName ( \"grade-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import grade session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = grade . Gs2GradeRestClient ( session ) try : result = client . delete_grade_model_master ( grade . DeleteGradeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_grade_name ( 'grade-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'grade' ) api_result = client.delete_grade_model_master ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'grade' ) api_result_handler = client.delete_grade_model_master_async ({ namespaceName = \"namespace-0001\" , gradeName = \"grade-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Grade SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Grade SDK API 레퍼런스","url":"/ko/api_reference/grade/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 사용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스를 사용하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 blockingPolicy BlockingPolicyModel  블로킹 정책 GS2 서비스에 대한 액세스를 제어하는 이 네임스페이스의 보안 정책 설정입니다. 액세스 가능한 서비스, 지리적 제한 규칙, 익명 IP 감지, 호스팅 제공업체 IP 감지, 평판 기반 IP 필터링, 커스텀 IP 주소 허용/거부 목록을 정의합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 BlockingPolicyModel 블로킹 정책 GS2-Guard 네임스페이스의 포괄적인 액세스 제어 규칙을 정의합니다. 서비스 수준 액세스 제어, 국가별 지리적 제한, 익명 IP 감지(Tor/프록시), 호스팅 제공업체 IP 감지(VPN/렌탈 서버), IP 평판 필터링, 커스텀 IP 주소 허용/거부 목록 등 여러 보안 계층을 결합합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 passServices List  1 ~ 100 items 액세스 가능한 GS2 서비스 목록 이 가드 네임스페이스를 통해 클라이언트가 액세스할 수 있는 GS2 서비스 목록입니다. 이 목록에 포함된 서비스만 블로킹 정책의 보호 대상이 됩니다. 최소 하나 이상의 서비스를 지정해야 합니다. defaultRestriction 문자열 열거형 enum {   “Allow”,   “Deny” } “Allow” 제한 방침 설정된 감지 규칙 중 어느 것에도 일치하지 않는 요청에 적용되는 기본 동작입니다. “Allow\"는 일치하지 않는 모든 트래픽을 허용하고(블록리스트 방식), “Deny\"는 일치하지 않는 모든 트래픽을 차단합니다(허용리스트 방식). 정의 설명 Allow 조건에 일치하지 않는 액세스를 허용 Deny 조건에 일치하지 않는 액세스를 거부 locationDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 액세스 지역 감지 클라이언트의 액세스 지역 국가를 기반으로 한 지리적 제한을 활성화 또는 비활성화합니다. 활성화하면 국가별로 액세스가 필터링됩니다. 구체적인 국가와 허용/거부 동작은 locations 및 locationRestriction 필드에서 설정합니다. 정의 설명 Enable 활성화 Disable 비활성화 locations List {locationDetection} == “Enable” [] 1 ~ 100 items 액세스를 감지할 국가 목록 지리적 제한 필터링에 사용되는 국가 목록입니다. 각 국가는 ISO 3166-1 alpha-2 국가 코드로 지정합니다. 이 국가들이 허용되는지 거부되는지는 locationRestriction 설정에 따라 결정됩니다. locationDetection이 활성화된 경우에만 적용됩니다. ※ locationDetection이(가) “Enable” 이면 활성화 locationRestriction 문자열 열거형 enum {   “Allow”,   “Deny” } {locationDetection} == “Enable” ※ 국가 목록 일치 시 동작 locations 목록에 포함된 국가에서 온 요청에 대해 실행할 동작입니다. “Allow\"는 목록에 포함된 국가에서의 액세스만 허용하고(허용리스트), “Deny\"는 목록에 포함된 국가에서의 액세스를 차단합니다(블록리스트). locationDetection 및 locations 목록과 함께 동작합니다. 정의 설명 Allow 액세스를 허용 Deny 액세스를 거부 ※ locationDetection이(가) “Enable” 이면 필수 anonymousIpDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 익명 IP 서비스 감지 Tor 출구 노드나 공개 프록시 등 익명 IP 서비스로부터의 액세스 감지를 활성화 또는 비활성화합니다. 활성화하면 이러한 소스로부터의 요청이 식별되어 평가됩니다. 정의 설명 Enable 활성화 Disable 비활성화 anonymousIpRestriction 문자열 열거형 enum {   “Deny” } {anonymousIpDetection} == “Enable” “Deny” 익명 IP 감지 시 동작 익명 IP 서비스(Tor/공개 프록시)로부터의 액세스가 감지되었을 때 실행할 동작입니다. 현재는 해당 액세스를 차단하는 “Deny\"만 지원합니다. anonymousIpDetection이 활성화된 경우에만 적용됩니다. 정의 설명 Deny 액세스를 거부 ※ anonymousIpDetection이(가) “Enable” 이면 활성화 hostingProviderIpDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 호스팅 서비스 감지 공개 VPN 서비스나 렌탈 서버 등 호스팅 제공업체의 IP 주소로부터의 액세스 감지를 활성화 또는 비활성화합니다. 활성화하면 최종 사용자 디바이스가 아닌 클라우드 인프라나 호스팅 서비스에서 발생한 트래픽이 식별되어 평가됩니다. 정의 설명 Enable 활성화 Disable 비활성화 hostingProviderIpRestriction 문자열 열거형 enum {   “Deny” } {hostingProviderIpDetection} == “Enable” “Deny” 호스팅 서비스 감지 시 동작 호스팅 제공업체 IP(공개 VPN/렌탈 서버)로부터의 액세스가 감지되었을 때 실행할 동작입니다. 현재는 해당 액세스를 차단하는 “Deny\"만 지원합니다. hostingProviderIpDetection이 활성화된 경우에만 적용됩니다. 정의 설명 Deny 액세스를 거부 ※ hostingProviderIpDetection이(가) “Enable” 이면 활성화 reputationIpDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 악의적인 액세스 원본 IP 감지 알려진 악평을 가진 IP 주소로부터의 액세스 감지를 활성화 또는 비활성화합니다. 활성화하면 봇, DDoS 공격 등 악의적인 활동과 연관된 IP가 식별되어 평가됩니다. 정의 설명 Enable 활성화 Disable 비활성화 reputationIpRestriction 문자열 열거형 enum {   “Deny” } {reputationIpDetection} == “Enable” “Deny” 악의적인 액세스 원본 IP 감지 시 동작 악평을 가진 IP로부터의 액세스가 감지되었을 때 실행할 동작입니다. 현재는 해당 액세스를 차단하는 “Deny\"만 지원합니다. reputationIpDetection이 활성화된 경우에만 적용됩니다. 정의 설명 Deny 액세스를 거부 ※ reputationIpDetection이(가) “Enable” 이면 활성화 ipAddressesDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 액세스 원본 IP 감지 커스텀 IP 주소 기반 액세스 필터링을 활성화 또는 비활성화합니다. 활성화하면 ipAddresses 필드에 지정된 커스텀 IP 주소 목록에 대해 요청이 평가됩니다. 허용/거부 동작은 ipAddressRestriction으로 제어됩니다. 정의 설명 Enable 활성화 Disable 비활성화 ipAddresses List {ipAddressesDetection} == “Enable” 0 ~ 100 items IP 주소 범위 목록 커스텀 IP 기반 액세스 필터링에 사용되는 CIDR 표기법의 IP 주소 범위 목록입니다. 수신되는 각 요청의 소스 IP가 이 범위들에 대해 평가됩니다. 일치하는 IP가 허용되는지 거부되는지는 ipAddressRestriction으로 제어됩니다. ipAddressesDetection이 활성화된 경우에만 적용됩니다. ※ ipAddressesDetection이(가) “Enable” 이면 활성화 ipAddressRestriction 문자열 열거형 enum {   “Allow”,   “Deny” } {ipAddressesDetection} == “Enable” ※ IP 주소 목록 일치 시 동작 요청의 소스 IP가 커스텀 IP 주소 목록에 일치했을 때 실행할 동작입니다. “Allow\"는 목록에 포함된 IP로부터의 액세스만 허용하고(허용리스트), “Deny\"는 목록에 포함된 IP로부터의 액세스를 차단합니다(블록리스트). ipAddressesDetection이 활성화된 경우에만 적용됩니다. 정의 설명 Allow 액세스를 허용 Deny 액세스를 거부 ※ ipAddressesDetection이(가) “Enable” 이면 필수 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내 GS2-Guard 네임스페이스의 페이지네이션 리스트를 조회합니다. 각 네임스페이스는 IP 주소 탐지, 익명 IP 차단, 평판 기반 IP 필터링 등의 접근 제한을 제어하는 차단 정책을 정의합니다. 선택적으로 이름의 접두사 필터를 지정하여 결과를 좁힐 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guard\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guard . Gs2GuardRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 guard . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guard\\Gs2GuardRestClient ; use Gs2\\Guard\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuardRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guard.rest.Gs2GuardRestClient ; import io.gs2.guard.request.DescribeNamespacesRequest ; import io.gs2.guard.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuardRestClient client = new Gs2GuardRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuardRestClient ( session ); AsyncResult Gs2 . Gs2Guard . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Guard . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guard from '@/gs2/guard' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guard . Gs2GuardRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Guard . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guard session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guard . Gs2GuardRestClient ( session ) try : result = client . describe_namespaces ( guard . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guard' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guard' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스를 신규 생성 지정된 차단 정책으로 새로운 GS2-Guard 네임스페이스를 생성합니다. 차단 정책은 IP 주소 탐지, 익명 IP 차단, 평판 기반 IP 필터링 등의 접근 제어 규칙을 정의합니다. 네임스페이스는 초기 상태에서 「Deploying」 상태로 생성되며, 배포 완료 후 「Active」 상태로 전환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 blockingPolicy BlockingPolicyModel  블로킹 정책 GS2 서비스에 대한 액세스를 제어하는 이 네임스페이스의 보안 정책 설정입니다. 액세스 가능한 서비스, 지리적 제한 규칙, 익명 IP 감지, 호스팅 제공업체 IP 감지, 평판 기반 IP 필터링, 커스텀 IP 주소 허용/거부 목록을 정의합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guard\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guard . Gs2GuardRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 guard . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , BlockingPolicy : \u0026 guard . BlockingPolicyModel { PassServices : [] * string { pointy . String ( \"account\" ), }, DefaultRestriction : pointy . String ( \"Deny\" ), LocationDetection : pointy . String ( \"Disable\" ), AnonymousIpDetection : pointy . String ( \"Disable\" ), HostingProviderIpDetection : pointy . String ( \"Disable\" ), ReputationIpDetection : pointy . String ( \"Disable\" ), IpAddressesDetection : pointy . String ( \"Enable\" ), IpAddresses : [] * string { pointy . String ( \"192.168.0.0/24\" ), }, IpAddressRestriction : pointy . String ( \"Allow\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guard\\Gs2GuardRestClient ; use Gs2\\Guard\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuardRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withBlockingPolicy (( new \\Gs2\\Guard\\Model\\BlockingPolicyModel ()) -\u003e withPassServices ([ \"account\" , ]) -\u003e withDefaultRestriction ( \"Deny\" ) -\u003e withLocationDetection ( \"Disable\" ) -\u003e withAnonymousIpDetection ( \"Disable\" ) -\u003e withHostingProviderIpDetection ( \"Disable\" ) -\u003e withReputationIpDetection ( \"Disable\" ) -\u003e withIpAddressesDetection ( \"Enable\" ) -\u003e withIpAddresses ([ \"192.168.0.0/24\" , ]) -\u003e withIpAddressRestriction ( \"Allow\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guard.rest.Gs2GuardRestClient ; import io.gs2.guard.request.CreateNamespaceRequest ; import io.gs2.guard.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuardRestClient client = new Gs2GuardRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withBlockingPolicy ( new io . gs2 . guard . model . BlockingPolicyModel () . withPassServices ( Arrays . asList ( \"account\" )) . withDefaultRestriction ( \"Deny\" ) . withLocationDetection ( \"Disable\" ) . withAnonymousIpDetection ( \"Disable\" ) . withHostingProviderIpDetection ( \"Disable\" ) . withReputationIpDetection ( \"Disable\" ) . withIpAddressesDetection ( \"Enable\" ) . withIpAddresses ( Arrays . asList ( \"192.168.0.0/24\" )) . withIpAddressRestriction ( \"Allow\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuardRestClient ( session ); AsyncResult Gs2 . Gs2Guard . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Guard . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithBlockingPolicy ( new Gs2 . Gs2Guard . Model . BlockingPolicyModel () . WithPassServices ( new string [] { \"account\" , }) . WithDefaultRestriction ( \"Deny\" ) . WithLocationDetection ( \"Disable\" ) . WithAnonymousIpDetection ( \"Disable\" ) . WithHostingProviderIpDetection ( \"Disable\" ) . WithReputationIpDetection ( \"Disable\" ) . WithIpAddressesDetection ( \"Enable\" ) . WithIpAddresses ( new string [] { \"192.168.0.0/24\" , }) . WithIpAddressRestriction ( \"Allow\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guard from '@/gs2/guard' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guard . Gs2GuardRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Guard . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withBlockingPolicy ( new Gs2Guard . model . BlockingPolicyModel () . withPassServices ([ \"account\" , ]) . withDefaultRestriction ( \"Deny\" ) . withLocationDetection ( \"Disable\" ) . withAnonymousIpDetection ( \"Disable\" ) . withHostingProviderIpDetection ( \"Disable\" ) . withReputationIpDetection ( \"Disable\" ) . withIpAddressesDetection ( \"Enable\" ) . withIpAddresses ([ \"192.168.0.0/24\" , ]) . withIpAddressRestriction ( \"Allow\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guard session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guard . Gs2GuardRestClient ( session ) try : result = client . create_namespace ( guard . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_blocking_policy ( guard . BlockingPolicyModel () . with_pass_services ([ 'account' , ]) . with_default_restriction ( 'Deny' ) . with_location_detection ( 'Disable' ) . with_anonymous_ip_detection ( 'Disable' ) . with_hosting_provider_ip_detection ( 'Disable' ) . with_reputation_ip_detection ( 'Disable' ) . with_ip_addresses_detection ( 'Enable' ) . with_ip_addresses ([ '192.168.0.0/24' , ]) . with_ip_address_restriction ( 'Allow' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guard' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , blockingPolicy = { passServices = { \"account\" }, defaultRestriction = \"Deny\" , locationDetection = \"Disable\" , anonymousIpDetection = \"Disable\" , hostingProviderIpDetection = \"Disable\" , reputationIpDetection = \"Disable\" , ipAddressesDetection = \"Enable\" , ipAddresses = { \"192.168.0.0/24\" }, ipAddressRestriction = \"Allow\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guard' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , blockingPolicy = { passServices = { \"account\" }, defaultRestriction = \"Deny\" , locationDetection = \"Disable\" , anonymousIpDetection = \"Disable\" , hostingProviderIpDetection = \"Disable\" , reputationIpDetection = \"Disable\" , ipAddressesDetection = \"Enable\" , ipAddresses = { \"192.168.0.0/24\" }, ipAddressRestriction = \"Allow\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 GS2-Guard 네임스페이스의 현재 배포 상태를 조회합니다. 상태에는 「Deploying」(최초 배포 또는 업데이트 중), 「Active」(배포 완료, 네임스페이스 가동 중), 「Deleting」(정리 중)이 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 “Deploying” 배포 중 “Active” 가동 중 “Deleting” 삭제 중 “DELETED” 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guard\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guard . Gs2GuardRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 guard . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guard\\Gs2GuardRestClient ; use Gs2\\Guard\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuardRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guard.rest.Gs2GuardRestClient ; import io.gs2.guard.request.GetNamespaceStatusRequest ; import io.gs2.guard.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuardRestClient client = new Gs2GuardRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuardRestClient ( session ); AsyncResult Gs2 . Gs2Guard . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Guard . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guard from '@/gs2/guard' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guard . Gs2GuardRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Guard . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guard session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guard . Gs2GuardRestClient ( session ) try : result = client . get_namespace_status ( guard . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guard' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'guard' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 GS2-Guard 네임스페이스의 상세 정보를 조회합니다. 반환되는 데이터에는 네임스페이스명, 설명, 그리고 접근 제어 규칙을 포함한 설정된 차단 정책이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guard\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guard . Gs2GuardRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 guard . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guard\\Gs2GuardRestClient ; use Gs2\\Guard\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuardRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guard.rest.Gs2GuardRestClient ; import io.gs2.guard.request.GetNamespaceRequest ; import io.gs2.guard.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuardRestClient client = new Gs2GuardRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuardRestClient ( session ); AsyncResult Gs2 . Gs2Guard . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Guard . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guard from '@/gs2/guard' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guard . Gs2GuardRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Guard . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guard session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guard . Gs2GuardRestClient ( session ) try : result = client . get_namespace ( guard . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guard' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guard' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스를 업데이트 지정된 GS2-Guard 네임스페이스의 설명과 차단 정책을 업데이트합니다. 네임스페이스가 「Active」 상태여야 하며, 배포 중인 경우 업데이트가 거부됩니다. 업데이트 후, 새로운 차단 정책이 적용되는 동안 네임스페이스는 「Deploying」 상태가 되고, 완료 후 「Active」로 돌아갑니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 blockingPolicy BlockingPolicyModel  블로킹 정책 GS2 서비스에 대한 액세스를 제어하는 이 네임스페이스의 보안 정책 설정입니다. 액세스 가능한 서비스, 지리적 제한 규칙, 익명 IP 감지, 호스팅 제공업체 IP 감지, 평판 기반 IP 필터링, 커스텀 IP 주소 허용/거부 목록을 정의합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guard\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guard . Gs2GuardRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 guard . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), BlockingPolicy : \u0026 guard . BlockingPolicyModel { PassServices : [] * string { pointy . String ( \"account\" ), pointy . String ( \"dictionary\" ), pointy . String ( \"inventory\" ), }, DefaultRestriction : pointy . String ( \"Allow\" ), LocationDetection : pointy . String ( \"Enable\" ), Locations : [] * string { pointy . String ( \"CN\" ), }, LocationRestriction : pointy . String ( \"Deny\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guard\\Gs2GuardRestClient ; use Gs2\\Guard\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuardRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withBlockingPolicy (( new \\Gs2\\Guard\\Model\\BlockingPolicyModel ()) -\u003e withPassServices ([ \"account\" , \"dictionary\" , \"inventory\" , ]) -\u003e withDefaultRestriction ( \"Allow\" ) -\u003e withLocationDetection ( \"Enable\" ) -\u003e withLocations ([ \"CN\" , ]) -\u003e withLocationRestriction ( \"Deny\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guard.rest.Gs2GuardRestClient ; import io.gs2.guard.request.UpdateNamespaceRequest ; import io.gs2.guard.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuardRestClient client = new Gs2GuardRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withBlockingPolicy ( new io . gs2 . guard . model . BlockingPolicyModel () . withPassServices ( Arrays . asList ( \"account\" , \"dictionary\" , \"inventory\" )) . withDefaultRestriction ( \"Allow\" ) . withLocationDetection ( \"Enable\" ) . withLocations ( Arrays . asList ( \"CN\" )) . withLocationRestriction ( \"Deny\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuardRestClient ( session ); AsyncResult Gs2 . Gs2Guard . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Guard . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithBlockingPolicy ( new Gs2 . Gs2Guard . Model . BlockingPolicyModel () . WithPassServices ( new string [] { \"account\" , \"dictionary\" , \"inventory\" , }) . WithDefaultRestriction ( \"Allow\" ) . WithLocationDetection ( \"Enable\" ) . WithLocations ( new string [] { \"CN\" , }) . WithLocationRestriction ( \"Deny\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guard from '@/gs2/guard' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guard . Gs2GuardRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Guard . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withBlockingPolicy ( new Gs2Guard . model . BlockingPolicyModel () . withPassServices ([ \"account\" , \"dictionary\" , \"inventory\" , ]) . withDefaultRestriction ( \"Allow\" ) . withLocationDetection ( \"Enable\" ) . withLocations ([ \"CN\" , ]) . withLocationRestriction ( \"Deny\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guard session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guard . Gs2GuardRestClient ( session ) try : result = client . update_namespace ( guard . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_blocking_policy ( guard . BlockingPolicyModel () . with_pass_services ([ 'account' , 'dictionary' , 'inventory' , ]) . with_default_restriction ( 'Allow' ) . with_location_detection ( 'Enable' ) . with_locations ([ 'CN' , ]) . with_location_restriction ( 'Deny' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guard' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , blockingPolicy = { passServices = { \"account\" , \"dictionary\" , \"inventory\" }, defaultRestriction = \"Allow\" , locationDetection = \"Enable\" , locations = { \"CN\" }, locationRestriction = \"Deny\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guard' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , blockingPolicy = { passServices = { \"account\" , \"dictionary\" , \"inventory\" }, defaultRestriction = \"Allow\" , locationDetection = \"Enable\" , locations = { \"CN\" }, locationRestriction = \"Deny\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스를 삭제 지정된 GS2-Guard 네임스페이스를 삭제합니다. 배포가 아직 진행 중인 경우, 배포가 완료될 때까지 삭제가 거부됩니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guard\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guard . Gs2GuardRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 guard . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guard\\Gs2GuardRestClient ; use Gs2\\Guard\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuardRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guard.rest.Gs2GuardRestClient ; import io.gs2.guard.request.DeleteNamespaceRequest ; import io.gs2.guard.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuardRestClient client = new Gs2GuardRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuardRestClient ( session ); AsyncResult Gs2 . Gs2Guard . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Guard . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guard from '@/gs2/guard' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guard . Gs2GuardRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Guard . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guard session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guard . Gs2GuardRestClient ( session ) try : result = client . delete_namespace ( guard . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guard' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guard' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스의 버전 조회 GS2-Guard 마이크로서비스의 현재 버전을 반환합니다. 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guard\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guard . Gs2GuardRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 guard . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guard\\Gs2GuardRestClient ; use Gs2\\Guard\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuardRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guard.rest.Gs2GuardRestClient ; import io.gs2.guard.request.GetServiceVersionRequest ; import io.gs2.guard.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuardRestClient client = new Gs2GuardRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuardRestClient ( session ); AsyncResult Gs2 . Gs2Guard . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Guard . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guard from '@/gs2/guard' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guard . Gs2GuardRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Guard . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guard session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guard . Gs2GuardRestClient ( session ) try : result = client . get_service_version ( guard . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guard' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guard' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Guard SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Guard SDK API 레퍼런스","url":"/ko/api_reference/guard/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 길드 조작 시 분산 트랜잭션의 실행 방식을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. changeNotification NotificationSetting 길드 변경 통지 길드 정보(표시 이름, 속성, 가입 정책 등)가 갱신되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 길드 멤버가 길드의 변경 사항에 대해 실시간으로 알림을 받을 수 있습니다. joinNotification NotificationSetting 멤버 가입 통지 새로운 멤버가 길드에 가입했을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 자유 가입 및 참가 신청 승인 양쪽 모두에 대응합니다. 기존 멤버가 신규 가입을 통지받을 수 있게 됩니다. leaveNotification NotificationSetting 멤버 탈퇴 통지 멤버가 길드에서 탈퇴하거나 제명되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 자발적인 탈퇴와 길드 마스터에 의한 추방 양쪽 모두에 대응합니다. changeMemberNotification NotificationSetting 멤버 변경 통지 길드 멤버의 정보(롤, 메타데이터)가 갱신되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 메타데이터 변경으로 이 통지가 발생할지 여부는 changeMemberNotificationIgnoreChangeMetadata로 제어할 수 있습니다. changeMemberNotificationIgnoreChangeMetadata bool? false 멤버의 정보가 갱신되었을 때 통지를 발행할 때 메타데이터 변경을 무시할지 여부 receiveRequestNotification NotificationSetting 신청 수신 통지 길드가 사용자로부터 새로운 참가 신청을 수신했을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 길드 마스터 및 권한을 가진 멤버가 승인이 필요한 보류 신청을 통지받을 수 있게 됩니다. removeRequestNotification NotificationSetting 신청 삭제 통지 길드 참가 신청이 삭제되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 발신자에 의한 취소, 길드에 의한 거부, 또는 승인(신청 삭제 및 멤버 추가) 중 하나에 대응합니다. createGuildScript ScriptSetting 길드를 생성할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - createGuild updateGuildScript ScriptSetting 길드를 갱신할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - updateGuild joinGuildScript ScriptSetting 길드에 가입할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - joinGuild receiveJoinRequestScript ScriptSetting 길드에 참가 신청을 접수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveJoinRequest leaveGuildScript ScriptSetting 길드를 탈퇴할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - leaveGuild changeRoleScript ScriptSetting 멤버에게 할당된 롤을 변경할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - changeRole deleteGuildScript ScriptSetting 길드를 삭제할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteGuild logSetting LogSetting 로그 출력 설정 길드 조작의 로그 데이터를 GS2-Log 로 출력하기 위한 설정입니다. GS2-Log 의 네임스페이스를 지정하면 길드 생성, 참가, 탈퇴, 역할 변경의 API 요청·응답 로그를 수집할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Guild 길드 길드는 최대 5개의 속성을 가질 수 있으며, 길드 검색이나 길드 목록 표시 시 이용할 수 있습니다. 길드에는 참가 정책을 설정할 수 있으며, 자유 참가와 승인제를 선택할 수 있습니다. 자유 참가를 선택한 경우, 길드에 참가 요청을 하면 즉시 길드 멤버가 됩니다. 승인제를 선택한 경우, 길드에 참가 요청을 하면 길드 마스터 또는 길드 멤버가 승인할 때까지 길드 멤버가 되지 않습니다. 길드 멤버에게는 역할을 설정할 수 있으며, 길드 마스터, 길드 멤버에 더해 길드가 독자적으로 정의한 최대 10개의 커스텀 역할을 설정할 수 있습니다. 길드 멤버는 길드에 참가했을 때 기본으로 부여되는 역할을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 guildId string ※ ~ 1024자 길드 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. displayName string  ~ 64자 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. attribute1 int 0 ~ 2147483645 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. attribute2 int 0 ~ 2147483645 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute3 int 0 ~ 2147483645 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute4 int 0 ~ 2147483645 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute5 int 0 ~ 2147483645 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. metadata string ~ 1024자 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. joinPolicy 문자열 열거형 enum {   “anybody”,   “approval” }  참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다. 정의 설명 anybody 자유 참가 approval 승인제 customRoles List [] 0 ~ 10 items 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. guildMemberDefaultRole string ~ 128자 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. currentMaximumMemberCount int  1 ~ 2147483646 현재 최대 멤버 수 이 길드가 가질 수 있는 현재 최대 멤버 수입니다. 길드 생성 시 길드 모델의 defaultMaximumMemberCount 로 초기화되며, 길드 조작이나 획득 액션(예: 길드 확장 아이템)을 통해 maximumMemberCount 까지 늘릴 수 있습니다. members List [] 0 ~ 100 items 길드 멤버 목록 길드 마스터와 일반 멤버를 포함한, 이 길드의 모든 현재 멤버 목록입니다. 각 항목에는 멤버의 사용자 ID, 할당된 역할, 메타데이터, 참가 타임스탬프가 포함됩니다. 멤버 수는 currentMaximumMemberCount 를 초과할 수 없습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 JoinedGuild 가입 중인 길드 특정 길드에 대한 사용자의 멤버십을 나타냅니다. 사용자가 길드에 가입할 때(직접 가입 또는 신청 승인) 생성되며, 사용자가 탈퇴 또는 추방될 때 삭제됩니다. 사용자가 현재 어느 길드에 소속되어 있는지를 추적하여 maxConcurrentJoinGuilds 제한의 적용을 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 joinedGuildId string ※ ~ 1024자 참가 중인 길드 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 guildModelName string  ~ 128자 길드 모델 이름 가입 중인 길드가 속한 길드 모델의 이름입니다. 멤버십 제한, 롤 설정, 기타 길드 타입 설정을 포함하는 길드 모델 정의를 참조합니다. guildName string  ~ 128자 길드 이름 사용자가 가입한 길드의 고유한 이름(UUID)입니다. 길드 모델 내의 특정 길드 인스턴스를 식별하기 위해 사용됩니다. userId string  ~ 128자 사용자ID createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 LastGuildMasterActivity 마지막 길드 마스터 활동 길드 내에서 길드 마스터가 마지막으로 활동을 수행한 일시를 추적합니다. 이 타임스탬프는 비활성 기반 계승 시스템에서 사용됩니다. 길드 모델에서 설정된 inactivityPeriodDays가 길드 마스터의 활동 없이 경과하면, 리더십을 다른 멤버에게 자동으로 이양할 수 있습니다. 각 길드는 길드 마스터가 길드 조작을 수행할 때마다 업데이트되는 하나의 활동 기록을 가집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 ReceiveMemberRequest 받은 참가 요청 멤버 등록 신청을 접수한 상태임을 나타내는 엔티티입니다. 해당 길드가 받은 참가 요청입니다. 해당 길드가 승인하면 참가 요청은 삭제되고 멤버 목록에 등록됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자 ID 이 길드에 참가 요청을 보낸 플레이어의 GS2 사용자 ID입니다. 신청자를 식별하며, 승인 시 길드의 멤버 목록에 추가하거나 거부 시 통지하기 위해 사용됩니다. targetGuildName string  ~ 128자 대상 길드명 이 참가 요청을 수신한 길드의 고유한 이름(UUID)입니다. 이 보류 중인 요청을 수신함에 가지고 있는 특정 길드 인스턴스를 식별하며, 길드의 멤버 관리 조작과 요청을 대조하기 위해 사용됩니다. metadata string ~ 512자 메타데이터 자기소개 메시지나 신청 사유 등, 신청자가 이 참가 요청에 첨부한 임의의 데이터입니다. 길드 마스터가 요청을 승인 또는 거부할지 판단할 때 이 데이터를 확인할 수 있습니다. 최대 512자입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 SendMemberRequest 송신한 참가 요청 멤버 등록을 신청 중인 상태를 나타내는 엔티티입니다. 해당 사용자가 길드에 대해 송신한 참가 요청입니다. 대상 길드가 승인하면 참가 요청은 삭제되고 멤버 목록에 등록됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자 ID 이 길드 참가 요청을 송신한 플레이어의 GS2 사용자 ID입니다. 요청을 보낸 사용자를 식별하며, 승인 시 길드의 멤버 목록에 추가하기 위해 사용됩니다. targetGuildName string  ~ 128자 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. metadata string ~ 512자 메타데이터 자기소개 메시지나 신청 사유 등, 이 참가 요청에 첨부되는 임의의 데이터입니다. 길드 마스터가 요청을 심사할 때 이 데이터가 표시되어 승인 판단의 참고 자료로 사용할 수 있습니다. 최대 512자입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 IgnoreUser 거부 사용자 특정 길드에 대한 가입이 차단된 사용자를 나타냅니다. 사용자가 거부 리스트에 추가되면 참가 신청이 자동으로 거부되며, 가입 정책이 자유 가입으로 설정되어 있어도 길드에 가입할 수 없습니다. 길드 마스터가 원치 않는 멤버를 관리하기 위해 사용합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 GuildModel 길드 모델 길드 모델이란 길드에 가입 가능한 최대 인원수 설정 및 길드 내 직책별 권한 설정을 가지는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 guildModelId string ※ ~ 1024자 길드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultMaximumMemberCount int  1 ~ 2147483646 기본 최대 멤버 수 새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다. maximumMemberCount int  1 ~ 2147483646 최대 멤버 수 상한 길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다. inactivityPeriodDays int 7 1 ~ 365 무활동 기간(일수) 길드 마스터의 무활동이 이 일수를 초과한 경우, 남은 길드 멤버 중에서 새로운 길드 마스터가 자동으로 선출됩니다. 길드 마스터가 플레이를 중단했을 때 길드가 관리 불능 상태가 되는 것을 방지합니다. roles List  1 ~ 10 items 롤 모델 리스트 이 타입의 길드 내에서 이용 가능한 롤 정의 리스트입니다. guildMasterRole 및 guildMemberDefaultRole에서 참조되는 롤을 최소한 포함해야 합니다. 각 롤은 정책 문서를 통해 고유한 권한 집합을 정의합니다. 최대 10개의 롤을 정의할 수 있습니다. guildMasterRole string  ~ 128자 길드 마스터 롤 이름 길드 마스터에게 할당되는 롤의 이름입니다. roles 리스트에 정의된 롤을 참조해야 합니다. 길드 마스터는 일반적으로 참가 신청 승인, 멤버 추방, 롤 변경, 길드 설정 갱신 등 길드를 관리하는 모든 권한을 가집니다. guildMemberDefaultRole string  ~ 128자 기본 멤버 롤 이름 새로운 길드 멤버가 가입할 때 자동으로 할당되는 롤의 이름입니다. roles 리스트에 정의된 롤을 참조해야 합니다. 이는 길드 마스터에 의한 롤 변경 이전, 일반 멤버의 기본 권한 집합입니다. rejoinCoolTimeMinutes int 0 0 ~ 2147483646 재가입 쿨타임(분) 사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다. maxConcurrentJoinGuilds int 1 ~ 10 동시 가입 가능 길드 최대 수 사용자가 이 타입의 길드에 동시에 멤버로 가입할 수 있는 최대 수입니다. 플레이어가 여러 길드에 동시에 소속될 수 있는 디자인(예: 전투 길드와 소셜 길드)을 가능하게 합니다. 값은 1에서 10 사이입니다. maxConcurrentGuildMasterCount int 1 ~ 100 동시 존재 가능 길드 마스터 최대 수 하나의 길드에 동시에 존재할 수 있는 길드 마스터의 최대 인원수입니다. 여러 플레이어가 길드 마스터의 책임과 권한을 공유하는 공동 리더십 디자인을 가능하게 합니다. 값은 1에서 100 사이입니다. RoleModel 롤 모델 롤 모델은 길드 내에서의 역할을 정의하고, 각 역할별로 실행할 수 있는 처리에 관한 권한을 설정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. policyDocument string  ~ 10240자 정책 문서 이 역할의 권한을 정의하는 JSON 형식의 정책 문서입니다. 이 역할에 할당된 멤버에 대해 어떤 길드 조작(참가 요청 승인/거부, 멤버 추방, 길드 정보 업데이트, 멤버 역할 변경 등)이 허용되거나 거부되는지를 지정합니다. Member 멤버 길드 멤버 목록을 관리하는 엔티티 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID roleName string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. joinedAt long ※ 현재 시각 참가 일시 UNIX 시간·밀리초 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentGuildMaster 현재 활성화되어 있는 길드 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한, 길드 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Guild 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 GuildModelMaster 길드 모델 마스터 길드 모델 마스터는 게임 내에서 사용되는 길드 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·갱신 처리를 수행함으로써 실제로 게임에서 참조되는 길드 모델로 반영됩니다. 길드 모델 마스터란 길드의 가입 가능 최대 인원수 설정과, 길드 내 직책별 권한 설정을 가진 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 guildModelId string ※ ~ 1024자 길드 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultMaximumMemberCount int  0 ~ 2147483646 기본 최대 멤버 수 새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다. maximumMemberCount int  0 ~ 2147483646 최대 멤버 수 상한 길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다. inactivityPeriodDays int 7 1 ~ 365 무활동 기간(일수) 길드 마스터의 무활동이 이 일수를 초과한 경우, 남은 길드 멤버 중에서 새로운 길드 마스터가 자동으로 선출됩니다. 길드 마스터가 플레이를 중단했을 때 길드가 관리 불능 상태가 되는 것을 방지합니다. roles List  1 ~ 10 items 역할 모델 목록 이 길드 모델의 길드 내에서 이용할 수 있는 역할 정의 목록입니다. guildMasterRole 및 guildMemberDefaultRole 에서 참조되는 역할을 적어도 1개 포함해야 합니다. 최대 10개의 역할을 정의할 수 있습니다. guildMasterRole string  ~ 128자 길드 마스터 역할명 길드 마스터에게 할당되는 역할의 이름입니다. roles 목록에 정의된 역할을 참조해야 합니다. 길드 마스터는 일반적으로 길드를 관리하는 모든 권한을 가집니다. guildMemberDefaultRole string  ~ 128자 기본 멤버 역할명 새로운 길드 멤버가 참가했을 때 자동으로 할당되는 역할의 이름입니다. roles 목록에 정의된 역할을 참조해야 합니다. rejoinCoolTimeMinutes int 0 0 ~ 2147483646 재가입 쿨타임(분) 사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다. maxConcurrentJoinGuilds int 1 ~ 10 동시 참가 가능 길드 최대 수 사용자가 이 타입의 길드에 동시에 멤버로 참가할 수 있는 최대 수입니다. 값은 1에서 10까지의 범위입니다. maxConcurrentGuildMasterCount int 1 ~ 100 동시 존재 가능 길드 마스터 최대 수 하나의 길드에 동시에 존재할 수 있는 길드 마스터의 최대 인원수입니다. 공동 리더십 설계를 가능하게 합니다. 값은 1에서 100까지의 범위입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 guild . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeNamespacesRequest ; import io.gs2.guild.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Guild . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Guild . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_namespaces ( guild . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 길드 조작 시 분산 트랜잭션의 실행 방식을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. changeNotification NotificationSetting 길드 변경 통지 길드 정보(표시 이름, 속성, 가입 정책 등)가 갱신되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 길드 멤버가 길드의 변경 사항에 대해 실시간으로 알림을 받을 수 있습니다. joinNotification NotificationSetting 멤버 가입 통지 새로운 멤버가 길드에 가입했을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 자유 가입 및 참가 신청 승인 양쪽 모두에 대응합니다. 기존 멤버가 신규 가입을 통지받을 수 있게 됩니다. leaveNotification NotificationSetting 멤버 탈퇴 통지 멤버가 길드에서 탈퇴하거나 제명되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 자발적인 탈퇴와 길드 마스터에 의한 추방 양쪽 모두에 대응합니다. changeMemberNotification NotificationSetting 멤버 변경 통지 길드 멤버의 정보(롤, 메타데이터)가 갱신되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 메타데이터 변경으로 이 통지가 발생할지 여부는 changeMemberNotificationIgnoreChangeMetadata로 제어할 수 있습니다. changeMemberNotificationIgnoreChangeMetadata bool? false 멤버의 정보가 갱신되었을 때 통지를 발행할 때 메타데이터 변경을 무시할지 여부 receiveRequestNotification NotificationSetting 신청 수신 통지 길드가 사용자로부터 새로운 참가 신청을 수신했을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 길드 마스터 및 권한을 가진 멤버가 승인이 필요한 보류 신청을 통지받을 수 있게 됩니다. removeRequestNotification NotificationSetting 신청 삭제 통지 길드 참가 신청이 삭제되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 발신자에 의한 취소, 길드에 의한 거부, 또는 승인(신청 삭제 및 멤버 추가) 중 하나에 대응합니다. createGuildScript ScriptSetting 길드를 생성할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - createGuild updateGuildScript ScriptSetting 길드를 갱신할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - updateGuild joinGuildScript ScriptSetting 길드에 가입할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - joinGuild receiveJoinRequestScript ScriptSetting 길드에 참가 신청을 접수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveJoinRequest leaveGuildScript ScriptSetting 길드를 탈퇴할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - leaveGuild changeRoleScript ScriptSetting 멤버에게 할당된 롤을 변경할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - changeRole deleteGuildScript ScriptSetting 길드를 삭제할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteGuild logSetting LogSetting 로그 출력 설정 길드 조작의 로그 데이터를 GS2-Log 로 출력하기 위한 설정입니다. GS2-Log 의 네임스페이스를 지정하면 길드 생성, 참가, 탈퇴, 역할 변경의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 guild . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 guild . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ChangeNotification : nil , JoinNotification : nil , LeaveNotification : nil , ChangeMemberNotification : nil , ChangeMemberNotificationIgnoreChangeMetadata : nil , ReceiveRequestNotification : nil , RemoveRequestNotification : nil , CreateGuildScript : nil , UpdateGuildScript : nil , JoinGuildScript : nil , ReceiveJoinRequestScript : nil , LeaveGuildScript : nil , ChangeRoleScript : nil , DeleteGuildScript : nil , LogSetting : \u0026 guild . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Guild\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withChangeNotification ( null ) -\u003e withJoinNotification ( null ) -\u003e withLeaveNotification ( null ) -\u003e withChangeMemberNotification ( null ) -\u003e withChangeMemberNotificationIgnoreChangeMetadata ( null ) -\u003e withReceiveRequestNotification ( null ) -\u003e withRemoveRequestNotification ( null ) -\u003e withCreateGuildScript ( null ) -\u003e withUpdateGuildScript ( null ) -\u003e withJoinGuildScript ( null ) -\u003e withReceiveJoinRequestScript ( null ) -\u003e withLeaveGuildScript ( null ) -\u003e withChangeRoleScript ( null ) -\u003e withDeleteGuildScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Guild\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.CreateNamespaceRequest ; import io.gs2.guild.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . guild . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withChangeNotification ( null ) . withJoinNotification ( null ) . withLeaveNotification ( null ) . withChangeMemberNotification ( null ) . withChangeMemberNotificationIgnoreChangeMetadata ( null ) . withReceiveRequestNotification ( null ) . withRemoveRequestNotification ( null ) . withCreateGuildScript ( null ) . withUpdateGuildScript ( null ) . withJoinGuildScript ( null ) . withReceiveJoinRequestScript ( null ) . withLeaveGuildScript ( null ) . withChangeRoleScript ( null ) . withDeleteGuildScript ( null ) . withLogSetting ( new io . gs2 . guild . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Guild . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Guild . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithChangeNotification ( null ) . WithJoinNotification ( null ) . WithLeaveNotification ( null ) . WithChangeMemberNotification ( null ) . WithChangeMemberNotificationIgnoreChangeMetadata ( null ) . WithReceiveRequestNotification ( null ) . WithRemoveRequestNotification ( null ) . WithCreateGuildScript ( null ) . WithUpdateGuildScript ( null ) . WithJoinGuildScript ( null ) . WithReceiveJoinRequestScript ( null ) . WithLeaveGuildScript ( null ) . WithChangeRoleScript ( null ) . WithDeleteGuildScript ( null ) . WithLogSetting ( new Gs2 . Gs2Guild . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Guild . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Guild . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withChangeNotification ( null ) . withJoinNotification ( null ) . withLeaveNotification ( null ) . withChangeMemberNotification ( null ) . withChangeMemberNotificationIgnoreChangeMetadata ( null ) . withReceiveRequestNotification ( null ) . withRemoveRequestNotification ( null ) . withCreateGuildScript ( null ) . withUpdateGuildScript ( null ) . withJoinGuildScript ( null ) . withReceiveJoinRequestScript ( null ) . withLeaveGuildScript ( null ) . withChangeRoleScript ( null ) . withDeleteGuildScript ( null ) . withLogSetting ( new Gs2Guild . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . create_namespace ( guild . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( guild . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_change_notification ( None ) . with_join_notification ( None ) . with_leave_notification ( None ) . with_change_member_notification ( None ) . with_change_member_notification_ignore_change_metadata ( None ) . with_receive_request_notification ( None ) . with_remove_request_notification ( None ) . with_create_guild_script ( None ) . with_update_guild_script ( None ) . with_join_guild_script ( None ) . with_receive_join_request_script ( None ) . with_leave_guild_script ( None ) . with_change_role_script ( None ) . with_delete_guild_script ( None ) . with_log_setting ( guild . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, changeNotification = nil , joinNotification = nil , leaveNotification = nil , changeMemberNotification = nil , changeMemberNotificationIgnoreChangeMetadata = nil , receiveRequestNotification = nil , removeRequestNotification = nil , createGuildScript = nil , updateGuildScript = nil , joinGuildScript = nil , receiveJoinRequestScript = nil , leaveGuildScript = nil , changeRoleScript = nil , deleteGuildScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, changeNotification = nil , joinNotification = nil , leaveNotification = nil , changeMemberNotification = nil , changeMemberNotificationIgnoreChangeMetadata = nil , receiveRequestNotification = nil , removeRequestNotification = nil , createGuildScript = nil , updateGuildScript = nil , joinGuildScript = nil , receiveJoinRequestScript = nil , leaveGuildScript = nil , changeRoleScript = nil , deleteGuildScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 guild . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetNamespaceStatusRequest ; import io.gs2.guild.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Guild . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Guild . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_namespace_status ( guild . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'guild' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 guild . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetNamespaceRequest ; import io.gs2.guild.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Guild . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Guild . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_namespace ( guild . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 길드 조작 시 분산 트랜잭션의 실행 방식을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. changeNotification NotificationSetting 길드 변경 통지 길드 정보(표시 이름, 속성, 가입 정책 등)가 갱신되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 길드 멤버가 길드의 변경 사항에 대해 실시간으로 알림을 받을 수 있습니다. joinNotification NotificationSetting 멤버 가입 통지 새로운 멤버가 길드에 가입했을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 자유 가입 및 참가 신청 승인 양쪽 모두에 대응합니다. 기존 멤버가 신규 가입을 통지받을 수 있게 됩니다. leaveNotification NotificationSetting 멤버 탈퇴 통지 멤버가 길드에서 탈퇴하거나 제명되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 자발적인 탈퇴와 길드 마스터에 의한 추방 양쪽 모두에 대응합니다. changeMemberNotification NotificationSetting 멤버 변경 통지 길드 멤버의 정보(롤, 메타데이터)가 갱신되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 메타데이터 변경으로 이 통지가 발생할지 여부는 changeMemberNotificationIgnoreChangeMetadata로 제어할 수 있습니다. changeMemberNotificationIgnoreChangeMetadata bool? false 멤버의 정보가 갱신되었을 때 통지를 발행할 때 메타데이터 변경을 무시할지 여부 receiveRequestNotification NotificationSetting 신청 수신 통지 길드가 사용자로부터 새로운 참가 신청을 수신했을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 길드 마스터 및 권한을 가진 멤버가 승인이 필요한 보류 신청을 통지받을 수 있게 됩니다. removeRequestNotification NotificationSetting 신청 삭제 통지 길드 참가 신청이 삭제되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 발신자에 의한 취소, 길드에 의한 거부, 또는 승인(신청 삭제 및 멤버 추가) 중 하나에 대응합니다. createGuildScript ScriptSetting 길드를 생성할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - createGuild updateGuildScript ScriptSetting 길드를 갱신할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - updateGuild joinGuildScript ScriptSetting 길드에 가입할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - joinGuild receiveJoinRequestScript ScriptSetting 길드에 참가 신청을 접수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveJoinRequest leaveGuildScript ScriptSetting 길드를 탈퇴할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - leaveGuild changeRoleScript ScriptSetting 멤버에게 할당된 롤을 변경할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - changeRole deleteGuildScript ScriptSetting 길드를 삭제할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteGuild logSetting LogSetting 로그 출력 설정 길드 조작의 로그 데이터를 GS2-Log 로 출력하기 위한 설정입니다. GS2-Log 의 네임스페이스를 지정하면 길드 생성, 참가, 탈퇴, 역할 변경의 API 요청·응답 로그를 수집할 수 있습니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 guild . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 guild . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, ChangeNotification : nil , JoinNotification : nil , LeaveNotification : nil , ChangeMemberNotification : nil , ChangeMemberNotificationIgnoreChangeMetadata : nil , ReceiveRequestNotification : nil , RemoveRequestNotification : nil , CreateGuildScript : nil , UpdateGuildScript : nil , JoinGuildScript : nil , ReceiveJoinRequestScript : nil , LeaveGuildScript : nil , ChangeRoleScript : nil , DeleteGuildScript : nil , LogSetting : \u0026 guild . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Guild\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withChangeNotification ( null ) -\u003e withJoinNotification ( null ) -\u003e withLeaveNotification ( null ) -\u003e withChangeMemberNotification ( null ) -\u003e withChangeMemberNotificationIgnoreChangeMetadata ( null ) -\u003e withReceiveRequestNotification ( null ) -\u003e withRemoveRequestNotification ( null ) -\u003e withCreateGuildScript ( null ) -\u003e withUpdateGuildScript ( null ) -\u003e withJoinGuildScript ( null ) -\u003e withReceiveJoinRequestScript ( null ) -\u003e withLeaveGuildScript ( null ) -\u003e withChangeRoleScript ( null ) -\u003e withDeleteGuildScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Guild\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateNamespaceRequest ; import io.gs2.guild.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . guild . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withChangeNotification ( null ) . withJoinNotification ( null ) . withLeaveNotification ( null ) . withChangeMemberNotification ( null ) . withChangeMemberNotificationIgnoreChangeMetadata ( null ) . withReceiveRequestNotification ( null ) . withRemoveRequestNotification ( null ) . withCreateGuildScript ( null ) . withUpdateGuildScript ( null ) . withJoinGuildScript ( null ) . withReceiveJoinRequestScript ( null ) . withLeaveGuildScript ( null ) . withChangeRoleScript ( null ) . withDeleteGuildScript ( null ) . withLogSetting ( new io . gs2 . guild . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Guild . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Guild . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithChangeNotification ( null ) . WithJoinNotification ( null ) . WithLeaveNotification ( null ) . WithChangeMemberNotification ( null ) . WithChangeMemberNotificationIgnoreChangeMetadata ( null ) . WithReceiveRequestNotification ( null ) . WithRemoveRequestNotification ( null ) . WithCreateGuildScript ( null ) . WithUpdateGuildScript ( null ) . WithJoinGuildScript ( null ) . WithReceiveJoinRequestScript ( null ) . WithLeaveGuildScript ( null ) . WithChangeRoleScript ( null ) . WithDeleteGuildScript ( null ) . WithLogSetting ( new Gs2 . Gs2Guild . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Guild . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Guild . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withChangeNotification ( null ) . withJoinNotification ( null ) . withLeaveNotification ( null ) . withChangeMemberNotification ( null ) . withChangeMemberNotificationIgnoreChangeMetadata ( null ) . withReceiveRequestNotification ( null ) . withRemoveRequestNotification ( null ) . withCreateGuildScript ( null ) . withUpdateGuildScript ( null ) . withJoinGuildScript ( null ) . withReceiveJoinRequestScript ( null ) . withLeaveGuildScript ( null ) . withChangeRoleScript ( null ) . withDeleteGuildScript ( null ) . withLogSetting ( new Gs2Guild . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_namespace ( guild . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( guild . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_change_notification ( None ) . with_join_notification ( None ) . with_leave_notification ( None ) . with_change_member_notification ( None ) . with_change_member_notification_ignore_change_metadata ( None ) . with_receive_request_notification ( None ) . with_remove_request_notification ( None ) . with_create_guild_script ( None ) . with_update_guild_script ( None ) . with_join_guild_script ( None ) . with_receive_join_request_script ( None ) . with_leave_guild_script ( None ) . with_change_role_script ( None ) . with_delete_guild_script ( None ) . with_log_setting ( guild . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, changeNotification = nil , joinNotification = nil , leaveNotification = nil , changeMemberNotification = nil , changeMemberNotificationIgnoreChangeMetadata = nil , receiveRequestNotification = nil , removeRequestNotification = nil , createGuildScript = nil , updateGuildScript = nil , joinGuildScript = nil , receiveJoinRequestScript = nil , leaveGuildScript = nil , changeRoleScript = nil , deleteGuildScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, changeNotification = nil , joinNotification = nil , leaveNotification = nil , changeMemberNotification = nil , changeMemberNotificationIgnoreChangeMetadata = nil , receiveRequestNotification = nil , removeRequestNotification = nil , createGuildScript = nil , updateGuildScript = nil , joinGuildScript = nil , receiveJoinRequestScript = nil , leaveGuildScript = nil , changeRoleScript = nil , deleteGuildScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 guild . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteNamespaceRequest ; import io.gs2.guild.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Guild . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Guild . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_namespace ( guild . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 guild . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetServiceVersionRequest ; import io.gs2.guild.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Guild . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Guild . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_service_version ( guild . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 guild . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DumpUserDataByUserIdRequest ; import io.gs2.guild.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Guild . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Guild . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . dump_user_data_by_user_id ( guild . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'guild' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 guild . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.guild.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Guild . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Guild . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( guild . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'guild' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 guild . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.CleanUserDataByUserIdRequest ; import io.gs2.guild.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Guild . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Guild . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . clean_user_data_by_user_id ( guild . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'guild' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 guild . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.guild.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Guild . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Guild . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( guild . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'guild' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 guild . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.guild.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Guild . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Guild . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( guild . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'guild' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 guild . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.ImportUserDataByUserIdRequest ; import io.gs2.guild.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Guild . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Guild . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . import_user_data_by_user_id ( guild . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'guild' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 guild . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.CheckImportUserDataByUserIdRequest ; import io.gs2.guild.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Guild . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Guild . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( guild . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'guild' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; searchGuilds 길드 검색 다양한 필터 조건을 사용하여 길드를 검색합니다. displayName(부분 일치), 정수 속성(attributes1-5), 참가 정책에 의한 필터링을 지원합니다. 결과는 플레이어 수, 속성 값(오름차순/내림차순), 마지막 업데이트 일시로 정렬할 수 있습니다. 기본적으로 멤버가 정원을 채운 길드는 제외됩니다. includeFullMembersGuild를 true로 설정하면 포함할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 displayName string ~ 64자 검색할 길드 표시 이름 attributes1 List 0 ~ 10 items 검색할 속성1 attributes2 List 0 ~ 10 items 검색할 속성2 attributes3 List 0 ~ 10 items 검색할 속성3 attributes4 List 0 ~ 10 items 검색할 속성4 attributes5 List 0 ~ 10 items 검색할 속성5 joinPolicies List 0 ~ 10 items 검색할 길드 참가 방법 목록 includeFullMembersGuild bool? false 길드 멤버가 정원을 채운 길드를 검색 결과에 포함할지 여부 orderBy 문자열 열거형 enum {   “number_of_players”,   “attribute1_asc”,   “attribute1_desc”,   “attribute2_asc”,   “attribute2_desc”,   “attribute3_asc”,   “attribute3_desc”,   “attribute4_asc”,   “attribute4_desc”,   “attribute5_asc”,   “attribute5_desc”,   “last_updated” } “number_of_players” 정렬 순서 정의 설명 number_of_players 참가 플레이어 수 attribute1_asc 속성1 오름차순 attribute1_desc 속성1 내림차순 attribute2_asc 속성2 오름차순 attribute2_desc 속성2 내림차순 attribute3_asc 속성3 오름차순 attribute3_desc 속성3 내림차순 attribute4_asc 속성4 오름차순 attribute4_desc 속성4 내림차순 attribute5_asc 속성5 오름차순 attribute5_desc 속성5 내림차순 last_updated 최종 갱신 일시 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 길드 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . SearchGuilds ( \u0026 guild . SearchGuildsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DisplayName : nil , Attributes1 : nil , Attributes2 : nil , Attributes3 : nil , Attributes4 : nil , Attributes5 : nil , JoinPolicies : nil , IncludeFullMembersGuild : nil , OrderBy : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\SearchGuildsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e searchGuilds ( ( new SearchGuildsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDisplayName ( null ) -\u003e withAttributes1 ( null ) -\u003e withAttributes2 ( null ) -\u003e withAttributes3 ( null ) -\u003e withAttributes4 ( null ) -\u003e withAttributes5 ( null ) -\u003e withJoinPolicies ( null ) -\u003e withIncludeFullMembersGuild ( null ) -\u003e withOrderBy ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.SearchGuildsRequest ; import io.gs2.guild.result.SearchGuildsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { SearchGuildsResult result = client . searchGuilds ( new SearchGuildsRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDisplayName ( null ) . withAttributes1 ( null ) . withAttributes2 ( null ) . withAttributes3 ( null ) . withAttributes4 ( null ) . withAttributes5 ( null ) . withJoinPolicies ( null ) . withIncludeFullMembersGuild ( null ) . withOrderBy ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Guild \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . SearchGuildsResult \u003e asyncResult = null ; yield return client . SearchGuilds ( new Gs2 . Gs2Guild . Request . SearchGuildsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDisplayName ( null ) . WithAttributes1 ( null ) . WithAttributes2 ( null ) . WithAttributes3 ( null ) . WithAttributes4 ( null ) . WithAttributes5 ( null ) . WithJoinPolicies ( null ) . WithIncludeFullMembersGuild ( null ) . WithOrderBy ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . searchGuilds ( new Gs2Guild . SearchGuildsRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDisplayName ( null ) . withAttributes1 ( null ) . withAttributes2 ( null ) . withAttributes3 ( null ) . withAttributes4 ( null ) . withAttributes5 ( null ) . withJoinPolicies ( null ) . withIncludeFullMembersGuild ( null ) . withOrderBy ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . search_guilds ( guild . SearchGuildsRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) . with_display_name ( None ) . with_attributes1 ( None ) . with_attributes2 ( None ) . with_attributes3 ( None ) . with_attributes4 ( None ) . with_attributes5 ( None ) . with_join_policies ( None ) . with_include_full_members_guild ( None ) . with_order_by ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.search_guilds ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , displayName = nil , attributes1 = nil , attributes2 = nil , attributes3 = nil , attributes4 = nil , attributes5 = nil , joinPolicies = nil , includeFullMembersGuild = nil , orderBy = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.search_guilds_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , displayName = nil , attributes1 = nil , attributes2 = nil , attributes3 = nil , attributes4 = nil , attributes5 = nil , joinPolicies = nil , includeFullMembersGuild = nil , orderBy = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; searchGuildsByUserId 사용자 ID를 지정하여 길드 검색 다양한 필터 조건을 사용하여 길드를 검색합니다(서버 사이드 조작). 사용자용 버전과 동일한 필터링, 정렬, 정원 초과 길드 제외 옵션이 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID displayName string ~ 64자 검색할 길드 표시 이름 attributes1 List 0 ~ 10 items 검색할 속성1 attributes2 List 0 ~ 10 items 검색할 속성2 attributes3 List 0 ~ 10 items 검색할 속성3 attributes4 List 0 ~ 10 items 검색할 속성4 attributes5 List 0 ~ 10 items 검색할 속성5 joinPolicies List 0 ~ 10 items 검색할 길드 참가 방법 목록 includeFullMembersGuild bool? false 길드 멤버가 정원을 채운 길드를 검색 결과에 포함할지 여부 orderBy 문자열 열거형 enum {   “number_of_players”,   “attribute1_asc”,   “attribute1_desc”,   “attribute2_asc”,   “attribute2_desc”,   “attribute3_asc”,   “attribute3_desc”,   “attribute4_asc”,   “attribute4_desc”,   “attribute5_asc”,   “attribute5_desc”,   “last_updated” } “number_of_players” 정렬 순서 정의 설명 number_of_players 참가 플레이어 수 attribute1_asc 속성1 오름차순 attribute1_desc 속성1 내림차순 attribute2_asc 속성2 오름차순 attribute2_desc 속성2 내림차순 attribute3_asc 속성3 오름차순 attribute3_desc 속성3 내림차순 attribute4_asc 속성4 오름차순 attribute4_desc 속성4 내림차순 attribute5_asc 속성5 오름차순 attribute5_desc 속성5 내림차순 last_updated 최종 갱신 일시 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 길드 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . SearchGuildsByUserId ( \u0026 guild . SearchGuildsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), UserId : pointy . String ( \"user-0001\" ), DisplayName : nil , Attributes1 : nil , Attributes2 : nil , Attributes3 : nil , Attributes4 : nil , Attributes5 : nil , JoinPolicies : nil , IncludeFullMembersGuild : nil , OrderBy : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\SearchGuildsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e searchGuildsByUserId ( ( new SearchGuildsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDisplayName ( null ) -\u003e withAttributes1 ( null ) -\u003e withAttributes2 ( null ) -\u003e withAttributes3 ( null ) -\u003e withAttributes4 ( null ) -\u003e withAttributes5 ( null ) -\u003e withJoinPolicies ( null ) -\u003e withIncludeFullMembersGuild ( null ) -\u003e withOrderBy ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.SearchGuildsByUserIdRequest ; import io.gs2.guild.result.SearchGuildsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { SearchGuildsByUserIdResult result = client . searchGuildsByUserId ( new SearchGuildsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withUserId ( \"user-0001\" ) . withDisplayName ( null ) . withAttributes1 ( null ) . withAttributes2 ( null ) . withAttributes3 ( null ) . withAttributes4 ( null ) . withAttributes5 ( null ) . withJoinPolicies ( null ) . withIncludeFullMembersGuild ( null ) . withOrderBy ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Guild \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . SearchGuildsByUserIdResult \u003e asyncResult = null ; yield return client . SearchGuildsByUserId ( new Gs2 . Gs2Guild . Request . SearchGuildsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithUserId ( \"user-0001\" ) . WithDisplayName ( null ) . WithAttributes1 ( null ) . WithAttributes2 ( null ) . WithAttributes3 ( null ) . WithAttributes4 ( null ) . WithAttributes5 ( null ) . WithJoinPolicies ( null ) . WithIncludeFullMembersGuild ( null ) . WithOrderBy ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . searchGuildsByUserId ( new Gs2Guild . SearchGuildsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withUserId ( \"user-0001\" ) . withDisplayName ( null ) . withAttributes1 ( null ) . withAttributes2 ( null ) . withAttributes3 ( null ) . withAttributes4 ( null ) . withAttributes5 ( null ) . withJoinPolicies ( null ) . withIncludeFullMembersGuild ( null ) . withOrderBy ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . search_guilds_by_user_id ( guild . SearchGuildsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_user_id ( 'user-0001' ) . with_display_name ( None ) . with_attributes1 ( None ) . with_attributes2 ( None ) . with_attributes3 ( None ) . with_attributes4 ( None ) . with_attributes5 ( None ) . with_join_policies ( None ) . with_include_full_members_guild ( None ) . with_order_by ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.search_guilds_by_user_id ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , userId = \"user-0001\" , displayName = nil , attributes1 = nil , attributes2 = nil , attributes3 = nil , attributes4 = nil , attributes5 = nil , joinPolicies = nil , includeFullMembersGuild = nil , orderBy = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.search_guilds_by_user_id_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , userId = \"user-0001\" , displayName = nil , attributes1 = nil , attributes2 = nil , attributes3 = nil , attributes4 = nil , attributes5 = nil , joinPolicies = nil , includeFullMembersGuild = nil , orderBy = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createGuild 길드 신규 생성 새로운 길드를 생성하고, 요청한 사용자를 길드 마스터로 자동 등록합니다. 생성 전에 사용자의 maxConcurrentJoinGuilds 제한을 초과하지 않았는지 검증됩니다. 길드에는 표시 이름, 커스텀 속성(attribute1-5), 참가 정책, 커스텀 역할, 기본 멤버 역할을 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayName string  ~ 64자 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. attribute1 int 0 ~ 2147483645 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. attribute2 int 0 ~ 2147483645 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute3 int 0 ~ 2147483645 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute4 int 0 ~ 2147483645 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute5 int 0 ~ 2147483645 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. metadata string ~ 1024자 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. memberMetadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. joinPolicy 문자열 열거형 enum {   “anybody”,   “approval” }  참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다. 정의 설명 anybody 자유 참가 approval 승인제 customRoles List [] 0 ~ 10 items 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. guildMemberDefaultRole string ~ 128자 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. Result 타입 설명 item Guild 생성한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . CreateGuild ( \u0026 guild . CreateGuildRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), DisplayName : pointy . String ( \"My Guild\" ), Attribute1 : pointy . Int32 ( 1 ), Attribute2 : nil , Attribute3 : nil , Attribute4 : nil , Attribute5 : nil , Metadata : nil , MemberMetadata : nil , JoinPolicy : pointy . String ( \"anybody\" ), CustomRoles : nil , GuildMemberDefaultRole : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\CreateGuildRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e createGuild ( ( new CreateGuildRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withDisplayName ( \"My Guild\" ) -\u003e withAttribute1 ( 1 ) -\u003e withAttribute2 ( null ) -\u003e withAttribute3 ( null ) -\u003e withAttribute4 ( null ) -\u003e withAttribute5 ( null ) -\u003e withMetadata ( null ) -\u003e withMemberMetadata ( null ) -\u003e withJoinPolicy ( \"anybody\" ) -\u003e withCustomRoles ( null ) -\u003e withGuildMemberDefaultRole ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.CreateGuildRequest ; import io.gs2.guild.result.CreateGuildResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { CreateGuildResult result = client . createGuild ( new CreateGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDisplayName ( \"My Guild\" ) . withAttribute1 ( 1 ) . withAttribute2 ( null ) . withAttribute3 ( null ) . withAttribute4 ( null ) . withAttribute5 ( null ) . withMetadata ( null ) . withMemberMetadata ( null ) . withJoinPolicy ( \"anybody\" ) . withCustomRoles ( null ) . withGuildMemberDefaultRole ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . CreateGuildResult \u003e asyncResult = null ; yield return client . CreateGuild ( new Gs2 . Gs2Guild . Request . CreateGuildRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithDisplayName ( \"My Guild\" ) . WithAttribute1 ( 1 ) . WithAttribute2 ( null ) . WithAttribute3 ( null ) . WithAttribute4 ( null ) . WithAttribute5 ( null ) . WithMetadata ( null ) . WithMemberMetadata ( null ) . WithJoinPolicy ( \"anybody\" ) . WithCustomRoles ( null ) . WithGuildMemberDefaultRole ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . createGuild ( new Gs2Guild . CreateGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDisplayName ( \"My Guild\" ) . withAttribute1 ( 1 ) . withAttribute2 ( null ) . withAttribute3 ( null ) . withAttribute4 ( null ) . withAttribute5 ( null ) . withMetadata ( null ) . withMemberMetadata ( null ) . withJoinPolicy ( \"anybody\" ) . withCustomRoles ( null ) . withGuildMemberDefaultRole ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . create_guild ( guild . CreateGuildRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_display_name ( 'My Guild' ) . with_attribute1 ( 1 ) . with_attribute2 ( None ) . with_attribute3 ( None ) . with_attribute4 ( None ) . with_attribute5 ( None ) . with_metadata ( None ) . with_member_metadata ( None ) . with_join_policy ( 'anybody' ) . with_custom_roles ( None ) . with_guild_member_default_role ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.create_guild ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , displayName = \"My Guild\" , attribute1 = 1 , attribute2 = nil , attribute3 = nil , attribute4 = nil , attribute5 = nil , metadata = nil , memberMetadata = nil , joinPolicy = \"anybody\" , customRoles = nil , guildMemberDefaultRole = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.create_guild_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , displayName = \"My Guild\" , attribute1 = 1 , attribute2 = nil , attribute3 = nil , attribute4 = nil , attribute5 = nil , metadata = nil , memberMetadata = nil , joinPolicy = \"anybody\" , customRoles = nil , guildMemberDefaultRole = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createGuildByUserId 사용자 ID를 지정하여 길드 신규 생성 지정된 사용자를 길드 마스터로 하여 새로운 길드를 생성합니다(서버 사이드 조작). 사용자용 버전과 동일한 maxConcurrentJoinGuilds 검증이 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayName string  ~ 64자 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. attribute1 int 0 ~ 2147483645 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. attribute2 int 0 ~ 2147483645 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute3 int 0 ~ 2147483645 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute4 int 0 ~ 2147483645 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute5 int 0 ~ 2147483645 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. metadata string ~ 1024자 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. memberMetadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. joinPolicy 문자열 열거형 enum {   “anybody”,   “approval” }  참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다. 정의 설명 anybody 자유 참가 approval 승인제 customRoles List [] 0 ~ 10 items 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. guildMemberDefaultRole string ~ 128자 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Guild 생성한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . CreateGuildByUserId ( \u0026 guild . CreateGuildByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), DisplayName : pointy . String ( \"My Guild\" ), Attribute1 : pointy . Int32 ( 1 ), Attribute2 : nil , Attribute3 : nil , Attribute4 : nil , Attribute5 : nil , Metadata : nil , MemberMetadata : nil , JoinPolicy : pointy . String ( \"anybody\" ), CustomRoles : nil , GuildMemberDefaultRole : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\CreateGuildByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e createGuildByUserId ( ( new CreateGuildByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withDisplayName ( \"My Guild\" ) -\u003e withAttribute1 ( 1 ) -\u003e withAttribute2 ( null ) -\u003e withAttribute3 ( null ) -\u003e withAttribute4 ( null ) -\u003e withAttribute5 ( null ) -\u003e withMetadata ( null ) -\u003e withMemberMetadata ( null ) -\u003e withJoinPolicy ( \"anybody\" ) -\u003e withCustomRoles ( null ) -\u003e withGuildMemberDefaultRole ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.CreateGuildByUserIdRequest ; import io.gs2.guild.result.CreateGuildByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { CreateGuildByUserIdResult result = client . createGuildByUserId ( new CreateGuildByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDisplayName ( \"My Guild\" ) . withAttribute1 ( 1 ) . withAttribute2 ( null ) . withAttribute3 ( null ) . withAttribute4 ( null ) . withAttribute5 ( null ) . withMetadata ( null ) . withMemberMetadata ( null ) . withJoinPolicy ( \"anybody\" ) . withCustomRoles ( null ) . withGuildMemberDefaultRole ( null ) . withTimeOffsetToken ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . CreateGuildByUserIdResult \u003e asyncResult = null ; yield return client . CreateGuildByUserId ( new Gs2 . Gs2Guild . Request . CreateGuildByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithDisplayName ( \"My Guild\" ) . WithAttribute1 ( 1 ) . WithAttribute2 ( null ) . WithAttribute3 ( null ) . WithAttribute4 ( null ) . WithAttribute5 ( null ) . WithMetadata ( null ) . WithMemberMetadata ( null ) . WithJoinPolicy ( \"anybody\" ) . WithCustomRoles ( null ) . WithGuildMemberDefaultRole ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . createGuildByUserId ( new Gs2Guild . CreateGuildByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDisplayName ( \"My Guild\" ) . withAttribute1 ( 1 ) . withAttribute2 ( null ) . withAttribute3 ( null ) . withAttribute4 ( null ) . withAttribute5 ( null ) . withMetadata ( null ) . withMemberMetadata ( null ) . withJoinPolicy ( \"anybody\" ) . withCustomRoles ( null ) . withGuildMemberDefaultRole ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . create_guild_by_user_id ( guild . CreateGuildByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_display_name ( 'My Guild' ) . with_attribute1 ( 1 ) . with_attribute2 ( None ) . with_attribute3 ( None ) . with_attribute4 ( None ) . with_attribute5 ( None ) . with_metadata ( None ) . with_member_metadata ( None ) . with_join_policy ( 'anybody' ) . with_custom_roles ( None ) . with_guild_member_default_role ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.create_guild_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , displayName = \"My Guild\" , attribute1 = 1 , attribute2 = nil , attribute3 = nil , attribute4 = nil , attribute5 = nil , metadata = nil , memberMetadata = nil , joinPolicy = \"anybody\" , customRoles = nil , guildMemberDefaultRole = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.create_guild_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , displayName = \"My Guild\" , attribute1 = 1 , attribute2 = nil , attribute3 = nil , attribute4 = nil , attribute5 = nil , metadata = nil , memberMetadata = nil , joinPolicy = \"anybody\" , customRoles = nil , guildMemberDefaultRole = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGuild 길드 취득 멤버, 커스텀 속성, 참가 정책, 역할을 포함한 특정 길드의 상세 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. Result 타입 설명 item Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetGuild ( \u0026 guild . GetGuildRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetGuildRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getGuild ( ( new GetGuildRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetGuildRequest ; import io.gs2.guild.result.GetGuildResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetGuildResult result = client . getGuild ( new GetGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetGuildResult \u003e asyncResult = null ; yield return client . GetGuild ( new Gs2 . Gs2Guild . Request . GetGuildRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getGuild ( new Gs2Guild . GetGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_guild ( guild . GetGuildRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_guild ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_guild_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGuildByUserId 사용자 ID를 지정하여 길드 취득 멤버, 커스텀 속성, 참가 정책, 역할을 포함한 특정 길드의 상세 정보를 취득합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetGuildByUserId ( \u0026 guild . GetGuildByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetGuildByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getGuildByUserId ( ( new GetGuildByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetGuildByUserIdRequest ; import io.gs2.guild.result.GetGuildByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetGuildByUserIdResult result = client . getGuildByUserId ( new GetGuildByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTimeOffsetToken ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetGuildByUserIdResult \u003e asyncResult = null ; yield return client . GetGuildByUserId ( new Gs2 . Gs2Guild . Request . GetGuildByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getGuildByUserId ( new Gs2Guild . GetGuildByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_guild_by_user_id ( guild . GetGuildByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_guild_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_guild_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGuild 길드 업데이트 표시 이름, 커스텀 속성(attribute1-5), 메타데이터, 참가 정책, 커스텀 역할, 기본 멤버 역할을 포함한 길드의 설정을 업데이트합니다. 이전 길드 데이터와 새로운 길드 데이터를 모두 사용하여 UpdateGuildScript 콜백을 실행합니다. 모든 길드 멤버에게 업데이트를 알리는 변경 알림을 전송합니다. 액세스 토큰에는 길드 사용자로 Assume한 액세스 토큰을 지정해 주세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 길드를 갱신하려면 해당 역할의 PolicyDocument 에 Gs2Guild:UpdateGuild 권한이 필요합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayName string  ~ 64자 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. attribute1 int 0 ~ 2147483645 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. attribute2 int 0 ~ 2147483645 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute3 int 0 ~ 2147483645 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute4 int 0 ~ 2147483645 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute5 int 0 ~ 2147483645 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. metadata string ~ 1024자 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. joinPolicy 문자열 열거형 enum {   “anybody”,   “approval” }  참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다. 정의 설명 anybody 자유 참가 approval 승인제 customRoles List [] 0 ~ 10 items 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. guildMemberDefaultRole string ~ 128자 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateGuild ( \u0026 guild . UpdateGuildRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), DisplayName : pointy . String ( \"My Guild\" ), Attribute1 : pointy . Int32 ( 1 ), Attribute2 : nil , Attribute3 : nil , Attribute4 : nil , Attribute5 : nil , Metadata : nil , JoinPolicy : pointy . String ( \"anybody\" ), CustomRoles : nil , GuildMemberDefaultRole : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateGuildRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateGuild ( ( new UpdateGuildRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withDisplayName ( \"My Guild\" ) -\u003e withAttribute1 ( 1 ) -\u003e withAttribute2 ( null ) -\u003e withAttribute3 ( null ) -\u003e withAttribute4 ( null ) -\u003e withAttribute5 ( null ) -\u003e withMetadata ( null ) -\u003e withJoinPolicy ( \"anybody\" ) -\u003e withCustomRoles ( null ) -\u003e withGuildMemberDefaultRole ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateGuildRequest ; import io.gs2.guild.result.UpdateGuildResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateGuildResult result = client . updateGuild ( new UpdateGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDisplayName ( \"My Guild\" ) . withAttribute1 ( 1 ) . withAttribute2 ( null ) . withAttribute3 ( null ) . withAttribute4 ( null ) . withAttribute5 ( null ) . withMetadata ( null ) . withJoinPolicy ( \"anybody\" ) . withCustomRoles ( null ) . withGuildMemberDefaultRole ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateGuildResult \u003e asyncResult = null ; yield return client . UpdateGuild ( new Gs2 . Gs2Guild . Request . UpdateGuildRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithDisplayName ( \"My Guild\" ) . WithAttribute1 ( 1 ) . WithAttribute2 ( null ) . WithAttribute3 ( null ) . WithAttribute4 ( null ) . WithAttribute5 ( null ) . WithMetadata ( null ) . WithJoinPolicy ( \"anybody\" ) . WithCustomRoles ( null ) . WithGuildMemberDefaultRole ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateGuild ( new Gs2Guild . UpdateGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDisplayName ( \"My Guild\" ) . withAttribute1 ( 1 ) . withAttribute2 ( null ) . withAttribute3 ( null ) . withAttribute4 ( null ) . withAttribute5 ( null ) . withMetadata ( null ) . withJoinPolicy ( \"anybody\" ) . withCustomRoles ( null ) . withGuildMemberDefaultRole ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_guild ( guild . UpdateGuildRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_display_name ( 'My Guild' ) . with_attribute1 ( 1 ) . with_attribute2 ( None ) . with_attribute3 ( None ) . with_attribute4 ( None ) . with_attribute5 ( None ) . with_metadata ( None ) . with_join_policy ( 'anybody' ) . with_custom_roles ( None ) . with_guild_member_default_role ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_guild ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , displayName = \"My Guild\" , attribute1 = 1 , attribute2 = nil , attribute3 = nil , attribute4 = nil , attribute5 = nil , metadata = nil , joinPolicy = \"anybody\" , customRoles = nil , guildMemberDefaultRole = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_guild_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , displayName = \"My Guild\" , attribute1 = 1 , attribute2 = nil , attribute3 = nil , attribute4 = nil , attribute5 = nil , metadata = nil , joinPolicy = \"anybody\" , customRoles = nil , guildMemberDefaultRole = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGuildByGuildName 길드 이름을 지정하여 길드 업데이트 지정된 길드의 설정을 업데이트합니다(서버 사이드 조작). 길드 사용자용 버전과 동일한 UpdateGuildScript 콜백, 멤버 변경 알림이 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayName string  ~ 64자 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. attribute1 int 0 ~ 2147483645 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. attribute2 int 0 ~ 2147483645 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute3 int 0 ~ 2147483645 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute4 int 0 ~ 2147483645 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. attribute5 int 0 ~ 2147483645 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. metadata string ~ 1024자 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. joinPolicy 문자열 열거형 enum {   “anybody”,   “approval” }  참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다. 정의 설명 anybody 자유 참가 approval 승인제 customRoles List [] 0 ~ 10 items 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. guildMemberDefaultRole string ~ 128자 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateGuildByGuildName ( \u0026 guild . UpdateGuildByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), DisplayName : pointy . String ( \"My Guild\" ), Attribute1 : pointy . Int32 ( 1 ), Attribute2 : nil , Attribute3 : nil , Attribute4 : nil , Attribute5 : nil , Metadata : nil , JoinPolicy : pointy . String ( \"anybody\" ), CustomRoles : nil , GuildMemberDefaultRole : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateGuildByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateGuildByGuildName ( ( new UpdateGuildByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withDisplayName ( \"My Guild\" ) -\u003e withAttribute1 ( 1 ) -\u003e withAttribute2 ( null ) -\u003e withAttribute3 ( null ) -\u003e withAttribute4 ( null ) -\u003e withAttribute5 ( null ) -\u003e withMetadata ( null ) -\u003e withJoinPolicy ( \"anybody\" ) -\u003e withCustomRoles ( null ) -\u003e withGuildMemberDefaultRole ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateGuildByGuildNameRequest ; import io.gs2.guild.result.UpdateGuildByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateGuildByGuildNameResult result = client . updateGuildByGuildName ( new UpdateGuildByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildName ( \"guild-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDisplayName ( \"My Guild\" ) . withAttribute1 ( 1 ) . withAttribute2 ( null ) . withAttribute3 ( null ) . withAttribute4 ( null ) . withAttribute5 ( null ) . withMetadata ( null ) . withJoinPolicy ( \"anybody\" ) . withCustomRoles ( null ) . withGuildMemberDefaultRole ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateGuildByGuildNameResult \u003e asyncResult = null ; yield return client . UpdateGuildByGuildName ( new Gs2 . Gs2Guild . Request . UpdateGuildByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithDisplayName ( \"My Guild\" ) . WithAttribute1 ( 1 ) . WithAttribute2 ( null ) . WithAttribute3 ( null ) . WithAttribute4 ( null ) . WithAttribute5 ( null ) . WithMetadata ( null ) . WithJoinPolicy ( \"anybody\" ) . WithCustomRoles ( null ) . WithGuildMemberDefaultRole ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateGuildByGuildName ( new Gs2Guild . UpdateGuildByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildName ( \"guild-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDisplayName ( \"My Guild\" ) . withAttribute1 ( 1 ) . withAttribute2 ( null ) . withAttribute3 ( null ) . withAttribute4 ( null ) . withAttribute5 ( null ) . withMetadata ( null ) . withJoinPolicy ( \"anybody\" ) . withCustomRoles ( null ) . withGuildMemberDefaultRole ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_guild_by_guild_name ( guild . UpdateGuildByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_name ( 'guild-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_display_name ( 'My Guild' ) . with_attribute1 ( 1 ) . with_attribute2 ( None ) . with_attribute3 ( None ) . with_attribute4 ( None ) . with_attribute5 ( None ) . with_metadata ( None ) . with_join_policy ( 'anybody' ) . with_custom_roles ( None ) . with_guild_member_default_role ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_guild_by_guild_name ({ namespaceName = \"namespace-0001\" , guildName = \"guild-0001\" , guildModelName = \"guild-model-0001\" , displayName = \"My Guild\" , attribute1 = 1 , attribute2 = nil , attribute3 = nil , attribute4 = nil , attribute5 = nil , metadata = nil , joinPolicy = \"anybody\" , customRoles = nil , guildMemberDefaultRole = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_guild_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildName = \"guild-0001\" , guildModelName = \"guild-model-0001\" , displayName = \"My Guild\" , attribute1 = 1 , attribute2 = nil , attribute3 = nil , attribute4 = nil , attribute5 = nil , metadata = nil , joinPolicy = \"anybody\" , customRoles = nil , guildMemberDefaultRole = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMember 멤버 제명 지정된 사용자를 길드의 멤버 목록에서 삭제합니다. 삭제 전에 제명 후에도 길드에 최소 1명의 길드 마스터가 남아 있는지 검증합니다. 대상 사용자가 마지막 길드 마스터인 경우, GuildMasterRequired 오류로 작업이 거부됩니다. 액세스 토큰에는 길드 사용자로 Assume한 액세스 토큰을 지정해 주세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 멤버를 제명하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DeleteMember 권한이 필요합니다. targetUserId string  ~ 128자 제명할 사용자 ID Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteMember ( \u0026 guild . DeleteMemberRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteMemberRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteMember ( ( new DeleteMemberRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteMemberRequest ; import io.gs2.guild.result.DeleteMemberResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteMemberResult result = client . deleteMember ( new DeleteMemberRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteMemberResult \u003e asyncResult = null ; yield return client . DeleteMember ( new Gs2 . Gs2Guild . Request . DeleteMemberRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteMember ( new Gs2Guild . DeleteMemberRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_member ( guild . DeleteMemberRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_member ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_member_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMemberByGuildName 길드 이름을 지정하여 멤버 제명 지정된 길드의 멤버 목록에서 지정된 사용자를 삭제합니다(서버 사이드 조작). 길드 사용자용 버전과 동일한 길드 마스터 수 검증(GuildMasterRequired)이 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 targetUserId string  ~ 128자 제명할 사용자 ID Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteMemberByGuildName ( \u0026 guild . DeleteMemberByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteMemberByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteMemberByGuildName ( ( new DeleteMemberByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteMemberByGuildNameRequest ; import io.gs2.guild.result.DeleteMemberByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteMemberByGuildNameResult result = client . deleteMemberByGuildName ( new DeleteMemberByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTargetUserId ( \"user-0002\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteMemberByGuildNameResult \u003e asyncResult = null ; yield return client . DeleteMemberByGuildName ( new Gs2 . Gs2Guild . Request . DeleteMemberByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteMemberByGuildName ( new Gs2Guild . DeleteMemberByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_member_by_guild_name ( guild . DeleteMemberByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_member_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_member_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateMemberRole 멤버 역할 업데이트 특정 길드 멤버의 역할을 지정된 역할 이름으로 변경합니다. 업데이트 전에 대상 사용자가 길드의 멤버인지 검증합니다. 멤버의 역할 업데이트 타임스탬프도 갱신됩니다. 액세스 토큰에는 길드 사용자로 Assume한 액세스 토큰을 지정해 주세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 멤버의 역할을 갱신하려면 해당 역할의 PolicyDocument 에 Gs2Guild:UpdateMemberRole 권한이 필요합니다. targetUserId string  ~ 128자 업데이트할 사용자 ID roleName string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateMemberRole ( \u0026 guild . UpdateMemberRoleRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), RoleName : pointy . String ( \"role-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateMemberRoleRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateMemberRole ( ( new UpdateMemberRoleRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withRoleName ( \"role-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateMemberRoleRequest ; import io.gs2.guild.result.UpdateMemberRoleResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateMemberRoleResult result = client . updateMemberRole ( new UpdateMemberRoleRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withRoleName ( \"role-0001\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateMemberRoleResult \u003e asyncResult = null ; yield return client . UpdateMemberRole ( new Gs2 . Gs2Guild . Request . UpdateMemberRoleRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithRoleName ( \"role-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateMemberRole ( new Gs2Guild . UpdateMemberRoleRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) . withRoleName ( \"role-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_member_role ( guild . UpdateMemberRoleRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) . with_role_name ( 'role-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_member_role ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , roleName = \"role-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_member_role_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , roleName = \"role-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateMemberRoleByGuildName 길드 이름을 지정하여 멤버 역할 업데이트 지정된 길드의 특정 멤버의 역할을 변경합니다(서버 사이드 조작). 길드 사용자용 버전과 동일한 멤버 검증, 타임스탬프 업데이트가 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 targetUserId string  ~ 128자 업데이트할 사용자 ID roleName string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateMemberRoleByGuildName ( \u0026 guild . UpdateMemberRoleByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), RoleName : pointy . String ( \"role-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateMemberRoleByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateMemberRoleByGuildName ( ( new UpdateMemberRoleByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withRoleName ( \"role-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateMemberRoleByGuildNameRequest ; import io.gs2.guild.result.UpdateMemberRoleByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateMemberRoleByGuildNameResult result = client . updateMemberRoleByGuildName ( new UpdateMemberRoleByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTargetUserId ( \"user-0002\" ) . withRoleName ( \"role-0001\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateMemberRoleByGuildNameResult \u003e asyncResult = null ; yield return client . UpdateMemberRoleByGuildName ( new Gs2 . Gs2Guild . Request . UpdateMemberRoleByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithRoleName ( \"role-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateMemberRoleByGuildName ( new Gs2Guild . UpdateMemberRoleByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTargetUserId ( \"user-0002\" ) . withRoleName ( \"role-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_member_role_by_guild_name ( guild . UpdateMemberRoleByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_target_user_id ( 'user-0002' ) . with_role_name ( 'role-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_member_role_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , targetUserId = \"user-0002\" , roleName = \"role-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_member_role_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , targetUserId = \"user-0002\" , roleName = \"role-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; batchUpdateMemberRole 멤버 역할 일괄 업데이트 단일 작업으로 여러 길드 멤버의 역할을 업데이트합니다. 요청에서 지정된 멤버만 업데이트되며, 목록에 포함되지 않은 멤버는 현재 역할을 유지합니다. 액세스 토큰에는 길드 사용자로 Assume한 액세스 토큰을 지정해 주세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 변경을 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:BatchUpdateMemberRole 권한이 필요합니다. members List  1 ~ 100 items 업데이트할 멤버 목록 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . BatchUpdateMemberRole ( \u0026 guild . BatchUpdateMemberRoleRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Members : [] guild . Member { guild . Member { UserId : pointy . String ( \"user-0002\" ), RoleName : pointy . String ( \"role-0001\" ), }, guild . Member { UserId : pointy . String ( \"user-0003\" ), RoleName : pointy . String ( \"role-0002\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\BatchUpdateMemberRoleRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e batchUpdateMemberRole ( ( new BatchUpdateMemberRoleRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMembers ([ ( new Member ()) -\u003e withUserId ( \"user-0002\" ) -\u003e withRoleName ( \"role-0001\" ), ( new Member ()) -\u003e withUserId ( \"user-0003\" ) -\u003e withRoleName ( \"role-0002\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.BatchUpdateMemberRoleRequest ; import io.gs2.guild.result.BatchUpdateMemberRoleResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { BatchUpdateMemberRoleResult result = client . batchUpdateMemberRole ( new BatchUpdateMemberRoleRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMembers ( Arrays . asList ( new Member () . withUserId ( \"user-0002\" ) . withRoleName ( \"role-0001\" ), new Member () . withUserId ( \"user-0003\" ) . withRoleName ( \"role-0002\" ) )) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . BatchUpdateMemberRoleResult \u003e asyncResult = null ; yield return client . BatchUpdateMemberRole ( new Gs2 . Gs2Guild . Request . BatchUpdateMemberRoleRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMembers ( new Gs2 . Gs2Guild . Model . Member [] { new Gs2 . Gs2Guild . Model . Member () . WithUserId ( \"user-0002\" ) . WithRoleName ( \"role-0001\" ), new Gs2 . Gs2Guild . Model . Member () . WithUserId ( \"user-0003\" ) . WithRoleName ( \"role-0002\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . batchUpdateMemberRole ( new Gs2Guild . BatchUpdateMemberRoleRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMembers ([ new Gs2Guild . model . Member () . withUserId ( \"user-0002\" ) . withRoleName ( \"role-0001\" ), new Gs2Guild . model . Member () . withUserId ( \"user-0003\" ) . withRoleName ( \"role-0002\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . batch_update_member_role ( guild . BatchUpdateMemberRoleRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) . with_members ([ guild . Member () . with_user_id ( 'user-0002' ) . with_role_name ( 'role-0001' ), guild . Member () . with_user_id ( 'user-0003' ) . with_role_name ( 'role-0002' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.batch_update_member_role ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , members = { { user_id = \"user-0002\" , role_name = \"role-0001\" , }, { user_id = \"user-0003\" , role_name = \"role-0002\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.batch_update_member_role_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , members = { { user_id = \"user-0002\" , role_name = \"role-0001\" , }, { user_id = \"user-0003\" , role_name = \"role-0002\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; batchUpdateMemberRoleByGuildName 길드 이름을 지정하여 멤버 역할 일괄 업데이트 지정된 길드의 여러 멤버의 역할을 단일 작업으로 업데이트합니다(서버 사이드 조작). 요청에서 지정된 멤버만 업데이트되며, 포함되지 않은 멤버는 현재 역할을 유지합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 members List  1 ~ 100 items 업데이트할 멤버 목록 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . BatchUpdateMemberRoleByGuildName ( \u0026 guild . BatchUpdateMemberRoleByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), Members : [] guild . Member { guild . Member { UserId : pointy . String ( \"user-0002\" ), RoleName : pointy . String ( \"role-0001\" ), }, guild . Member { UserId : pointy . String ( \"user-0003\" ), RoleName : pointy . String ( \"role-0002\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\BatchUpdateMemberRoleByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e batchUpdateMemberRoleByGuildName ( ( new BatchUpdateMemberRoleByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withMembers ([ ( new Member ()) -\u003e withUserId ( \"user-0002\" ) -\u003e withRoleName ( \"role-0001\" ), ( new Member ()) -\u003e withUserId ( \"user-0003\" ) -\u003e withRoleName ( \"role-0002\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.BatchUpdateMemberRoleByGuildNameRequest ; import io.gs2.guild.result.BatchUpdateMemberRoleByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { BatchUpdateMemberRoleByGuildNameResult result = client . batchUpdateMemberRoleByGuildName ( new BatchUpdateMemberRoleByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withMembers ( Arrays . asList ( new Member () . withUserId ( \"user-0002\" ) . withRoleName ( \"role-0001\" ), new Member () . withUserId ( \"user-0003\" ) . withRoleName ( \"role-0002\" ) )) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . BatchUpdateMemberRoleByGuildNameResult \u003e asyncResult = null ; yield return client . BatchUpdateMemberRoleByGuildName ( new Gs2 . Gs2Guild . Request . BatchUpdateMemberRoleByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithMembers ( new Gs2 . Gs2Guild . Model . Member [] { new Gs2 . Gs2Guild . Model . Member () . WithUserId ( \"user-0002\" ) . WithRoleName ( \"role-0001\" ), new Gs2 . Gs2Guild . Model . Member () . WithUserId ( \"user-0003\" ) . WithRoleName ( \"role-0002\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . batchUpdateMemberRoleByGuildName ( new Gs2Guild . BatchUpdateMemberRoleByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withMembers ([ new Gs2Guild . model . Member () . withUserId ( \"user-0002\" ) . withRoleName ( \"role-0001\" ), new Gs2Guild . model . Member () . withUserId ( \"user-0003\" ) . withRoleName ( \"role-0002\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . batch_update_member_role_by_guild_name ( guild . BatchUpdateMemberRoleByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_members ([ guild . Member () . with_user_id ( 'user-0002' ) . with_role_name ( 'role-0001' ), guild . Member () . with_user_id ( 'user-0003' ) . with_role_name ( 'role-0002' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.batch_update_member_role_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , members = { { user_id = \"user-0002\" , role_name = \"role-0001\" , }, { user_id = \"user-0003\" , role_name = \"role-0002\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.batch_update_member_role_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , members = { { user_id = \"user-0002\" , role_name = \"role-0001\" , }, { user_id = \"user-0003\" , role_name = \"role-0002\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGuild 길드 삭제 길드 및 관련된 모든 데이터를 삭제합니다. 모든 길드 멤버가 삭제되며, 각 멤버의 LeaveGuildScript 콜백이 실행되고, LeaveNotification이 전송됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 길드를 삭제하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DeleteGuild 권한이 필요합니다. Result 타입 설명 item Guild 삭제한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteGuild ( \u0026 guild . DeleteGuildRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteGuildRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteGuild ( ( new DeleteGuildRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteGuildRequest ; import io.gs2.guild.result.DeleteGuildResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteGuildResult result = client . deleteGuild ( new DeleteGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteGuildResult \u003e asyncResult = null ; yield return client . DeleteGuild ( new Gs2 . Gs2Guild . Request . DeleteGuildRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteGuild ( new Gs2Guild . DeleteGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_guild ( guild . DeleteGuildRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_guild ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_guild_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGuildByGuildName 길드 이름을 지정하여 길드 삭제 지정된 길드 및 관련된 모든 데이터를 삭제합니다(서버 사이드 조작). 길드 사용자용 버전과 동일한 LeaveGuildScript 콜백, LeaveNotification이 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 Result 타입 설명 item Guild 삭제한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteGuildByGuildName ( \u0026 guild . DeleteGuildByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteGuildByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteGuildByGuildName ( ( new DeleteGuildByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteGuildByGuildNameRequest ; import io.gs2.guild.result.DeleteGuildByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteGuildByGuildNameResult result = client . deleteGuildByGuildName ( new DeleteGuildByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteGuildByGuildNameResult \u003e asyncResult = null ; yield return client . DeleteGuildByGuildName ( new Gs2 . Gs2Guild . Request . DeleteGuildByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteGuildByGuildName ( new Gs2Guild . DeleteGuildByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_guild_by_guild_name ( guild . DeleteGuildByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_guild_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_guild_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; increaseMaximumCurrentMaximumMemberCountByGuildName 길드 이름을 지정하여 최대 참가 가능 인원 추가 길드의 currentMaximumMemberCount를 지정된 값만큼 증가시킵니다. 결과 값은 길드 모델에서 정의된 maximumMemberCount를 초과할 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 value int 1 ~ 2147483646 최대 인원수의 증가량 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . IncreaseMaximumCurrentMaximumMemberCountByGuildName ( \u0026 guild . IncreaseMaximumCurrentMaximumMemberCountByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), Value : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\IncreaseMaximumCurrentMaximumMemberCountByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e increaseMaximumCurrentMaximumMemberCountByGuildName ( ( new IncreaseMaximumCurrentMaximumMemberCountByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withValue ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.IncreaseMaximumCurrentMaximumMemberCountByGuildNameRequest ; import io.gs2.guild.result.IncreaseMaximumCurrentMaximumMemberCountByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { IncreaseMaximumCurrentMaximumMemberCountByGuildNameResult result = client . increaseMaximumCurrentMaximumMemberCountByGuildName ( new IncreaseMaximumCurrentMaximumMemberCountByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withValue ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . IncreaseMaximumCurrentMaximumMemberCountByGuildNameResult \u003e asyncResult = null ; yield return client . IncreaseMaximumCurrentMaximumMemberCountByGuildName ( new Gs2 . Gs2Guild . Request . IncreaseMaximumCurrentMaximumMemberCountByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithValue ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . increaseMaximumCurrentMaximumMemberCountByGuildName ( new Gs2Guild . IncreaseMaximumCurrentMaximumMemberCountByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withValue ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . increase_maximum_current_maximum_member_count_by_guild_name ( guild . IncreaseMaximumCurrentMaximumMemberCountByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_value ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.increase_maximum_current_maximum_member_count_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , value = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.increase_maximum_current_maximum_member_count_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , value = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; decreaseMaximumCurrentMaximumMemberCount 최대 참가 가능 인원 감소 길드의 currentMaximumMemberCount를 지정된 값만큼 감소시킵니다. 결과 값은 0 미만이 될 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 감산을 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DecreaseCurrentMaximumMemberCount 권한이 필요합니다. value int 1 ~ 2147483646 최대 인원수의 감소량 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DecreaseMaximumCurrentMaximumMemberCount ( \u0026 guild . DecreaseMaximumCurrentMaximumMemberCountRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Value : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DecreaseMaximumCurrentMaximumMemberCountRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e decreaseMaximumCurrentMaximumMemberCount ( ( new DecreaseMaximumCurrentMaximumMemberCountRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withValue ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DecreaseMaximumCurrentMaximumMemberCountRequest ; import io.gs2.guild.result.DecreaseMaximumCurrentMaximumMemberCountResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DecreaseMaximumCurrentMaximumMemberCountResult result = client . decreaseMaximumCurrentMaximumMemberCount ( new DecreaseMaximumCurrentMaximumMemberCountRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withValue ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DecreaseMaximumCurrentMaximumMemberCountResult \u003e asyncResult = null ; yield return client . DecreaseMaximumCurrentMaximumMemberCount ( new Gs2 . Gs2Guild . Request . DecreaseMaximumCurrentMaximumMemberCountRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithValue ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . decreaseMaximumCurrentMaximumMemberCount ( new Gs2Guild . DecreaseMaximumCurrentMaximumMemberCountRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withValue ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . decrease_maximum_current_maximum_member_count ( guild . DecreaseMaximumCurrentMaximumMemberCountRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) . with_value ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.decrease_maximum_current_maximum_member_count ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , value = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.decrease_maximum_current_maximum_member_count_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , value = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; decreaseMaximumCurrentMaximumMemberCountByGuildName 길드 이름을 지정하여 최대 참가 가능 인원 감소 지정된 길드의 currentMaximumMemberCount를 지정된 값만큼 감소시킵니다(서버 사이드 조작). 결과 값은 0 미만이 될 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 value int 1 ~ 2147483646 최대 인원수의 감소량 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DecreaseMaximumCurrentMaximumMemberCountByGuildName ( \u0026 guild . DecreaseMaximumCurrentMaximumMemberCountByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), Value : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DecreaseMaximumCurrentMaximumMemberCountByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e decreaseMaximumCurrentMaximumMemberCountByGuildName ( ( new DecreaseMaximumCurrentMaximumMemberCountByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withValue ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DecreaseMaximumCurrentMaximumMemberCountByGuildNameRequest ; import io.gs2.guild.result.DecreaseMaximumCurrentMaximumMemberCountByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DecreaseMaximumCurrentMaximumMemberCountByGuildNameResult result = client . decreaseMaximumCurrentMaximumMemberCountByGuildName ( new DecreaseMaximumCurrentMaximumMemberCountByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withValue ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DecreaseMaximumCurrentMaximumMemberCountByGuildNameResult \u003e asyncResult = null ; yield return client . DecreaseMaximumCurrentMaximumMemberCountByGuildName ( new Gs2 . Gs2Guild . Request . DecreaseMaximumCurrentMaximumMemberCountByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithValue ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . decreaseMaximumCurrentMaximumMemberCountByGuildName ( new Gs2Guild . DecreaseMaximumCurrentMaximumMemberCountByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withValue ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . decrease_maximum_current_maximum_member_count_by_guild_name ( guild . DecreaseMaximumCurrentMaximumMemberCountByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_value ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.decrease_maximum_current_maximum_member_count_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , value = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.decrease_maximum_current_maximum_member_count_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , value = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyCurrentMaximumMemberCount 최대 참가 가능 인원수 검증 선택된 비교 연산자를 사용하여 길드의 currentMaximumMemberCount를 지정된 값과 비교 검증합니다. 지원되는 연산자: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증에 실패하면 오류가 반환됩니다. 트랜잭션의 조건부 로직에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 검증을 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:VerifyCurrentMaximumMemberCount 권한이 필요합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 최대 참가 가능 인원수가 지정값 미만일 것 lessEqual 최대 참가 가능 인원수가 지정값 이하일 것 greater 최대 참가 가능 인원수가 지정값 초과일 것 greaterEqual 최대 참가 가능 인원수가 지정값 이상일 것 equal 최대 참가 가능 인원수가 지정값과 일치할 것 notEqual 최대 참가 가능 인원수가 지정값과 일치하지 않을 것 value int 1 ~ 2147483646 최대 참가 가능 인원수 multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . VerifyCurrentMaximumMemberCount ( \u0026 guild . VerifyCurrentMaximumMemberCountRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : , VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\VerifyCurrentMaximumMemberCountRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e verifyCurrentMaximumMemberCount ( ( new VerifyCurrentMaximumMemberCountRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken () -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.VerifyCurrentMaximumMemberCountRequest ; import io.gs2.guild.result.VerifyCurrentMaximumMemberCountResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { VerifyCurrentMaximumMemberCountResult result = client . verifyCurrentMaximumMemberCount ( new VerifyCurrentMaximumMemberCountRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken () . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . VerifyCurrentMaximumMemberCountResult \u003e asyncResult = null ; yield return client . VerifyCurrentMaximumMemberCount ( new Gs2 . Gs2Guild . Request . VerifyCurrentMaximumMemberCountRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken () . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . verifyCurrentMaximumMemberCount ( new Gs2Guild . VerifyCurrentMaximumMemberCountRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken () . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . verify_current_maximum_member_count ( guild . VerifyCurrentMaximumMemberCountRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token () . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.verify_current_maximum_member_count ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.verify_current_maximum_member_count_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyCurrentMaximumMemberCountByGuildName 길드 이름을 지정하여 최대 참가 가능 인원수 검증 선택된 비교 연산자를 사용하여 지정된 길드의 currentMaximumMemberCount를 지정된 값과 비교 검증합니다(서버 사이드 조작). 지원되는 연산자: less, lessEqual, greater, greaterEqual, equal, notEqual. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 최대 참가 가능 인원수가 지정값 미만일 것 lessEqual 최대 참가 가능 인원수가 지정값 이하일 것 greater 최대 참가 가능 인원수가 지정값 초과일 것 greaterEqual 최대 참가 가능 인원수가 지정값 이상일 것 equal 최대 참가 가능 인원수가 지정값과 일치할 것 notEqual 최대 참가 가능 인원수가 지정값과 일치하지 않을 것 value int 1 ~ 2147483646 최대 참가 가능 인원수 multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . VerifyCurrentMaximumMemberCountByGuildName ( \u0026 guild . VerifyCurrentMaximumMemberCountByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\VerifyCurrentMaximumMemberCountByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e verifyCurrentMaximumMemberCountByGuildName ( ( new VerifyCurrentMaximumMemberCountByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.VerifyCurrentMaximumMemberCountByGuildNameRequest ; import io.gs2.guild.result.VerifyCurrentMaximumMemberCountByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { VerifyCurrentMaximumMemberCountByGuildNameResult result = client . verifyCurrentMaximumMemberCountByGuildName ( new VerifyCurrentMaximumMemberCountByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . VerifyCurrentMaximumMemberCountByGuildNameResult \u003e asyncResult = null ; yield return client . VerifyCurrentMaximumMemberCountByGuildName ( new Gs2 . Gs2Guild . Request . VerifyCurrentMaximumMemberCountByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . verifyCurrentMaximumMemberCountByGuildName ( new Gs2Guild . VerifyCurrentMaximumMemberCountByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . verify_current_maximum_member_count_by_guild_name ( guild . VerifyCurrentMaximumMemberCountByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.verify_current_maximum_member_count_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.verify_current_maximum_member_count_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyIncludeMember 길드 멤버에 사용자 ID가 포함되어 있는지 검증 지정된 사용자가 길드의 멤버인지 여부를 검증합니다. 2가지 검증 유형을 지원합니다: ‘include’는 사용자가 길드 멤버임을 확인하고, ’notInclude’는 사용자가 길드 멤버가 아님을 확인합니다. 검증에 실패하면 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 verifyType 문자열 열거형 enum {   “include”,   “notInclude” }  검증 종류 정의 설명 include 길드 멤버에 지정한 유저가 포함되어 있을 것 notInclude 길드 멤버에 지정한 유저가 포함되지 않을 것 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . VerifyIncludeMember ( \u0026 guild . VerifyIncludeMemberRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), VerifyType : pointy . String ( \"include\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\VerifyIncludeMemberRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e verifyIncludeMember ( ( new VerifyIncludeMemberRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withVerifyType ( \"include\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.VerifyIncludeMemberRequest ; import io.gs2.guild.result.VerifyIncludeMemberResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { VerifyIncludeMemberResult result = client . verifyIncludeMember ( new VerifyIncludeMemberRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVerifyType ( \"include\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . VerifyIncludeMemberResult \u003e asyncResult = null ; yield return client . VerifyIncludeMember ( new Gs2 . Gs2Guild . Request . VerifyIncludeMemberRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithVerifyType ( \"include\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . verifyIncludeMember ( new Gs2Guild . VerifyIncludeMemberRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVerifyType ( \"include\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . verify_include_member ( guild . VerifyIncludeMemberRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_access_token ( 'accessToken-0001' ) . with_verify_type ( 'include' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.verify_include_member ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , accessToken = \"accessToken-0001\" , verifyType = \"include\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.verify_include_member_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , accessToken = \"accessToken-0001\" , verifyType = \"include\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyIncludeMemberByUserId 사용자 ID를 지정하여 길드 멤버에 사용자 ID가 포함되어 있는지 검증 지정된 사용자가 길드의 멤버인지 여부를 검증합니다(서버 사이드 조작). 2가지 검증 유형을 지원합니다: ‘include’와 ’notInclude’. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID verifyType 문자열 열거형 enum {   “include”,   “notInclude” }  검증 종류 정의 설명 include 길드 멤버에 지정한 유저가 포함되어 있을 것 notInclude 길드 멤버에 지정한 유저가 포함되지 않을 것 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . VerifyIncludeMemberByUserId ( \u0026 guild . VerifyIncludeMemberByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), UserId : pointy . String ( \"user-0001\" ), VerifyType : pointy . String ( \"include\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\VerifyIncludeMemberByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e verifyIncludeMemberByUserId ( ( new VerifyIncludeMemberByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withVerifyType ( \"include\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.VerifyIncludeMemberByUserIdRequest ; import io.gs2.guild.result.VerifyIncludeMemberByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { VerifyIncludeMemberByUserIdResult result = client . verifyIncludeMemberByUserId ( new VerifyIncludeMemberByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withUserId ( \"user-0001\" ) . withVerifyType ( \"include\" ) . withTimeOffsetToken ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . VerifyIncludeMemberByUserIdResult \u003e asyncResult = null ; yield return client . VerifyIncludeMemberByUserId ( new Gs2 . Gs2Guild . Request . VerifyIncludeMemberByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithUserId ( \"user-0001\" ) . WithVerifyType ( \"include\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . verifyIncludeMemberByUserId ( new Gs2Guild . VerifyIncludeMemberByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withUserId ( \"user-0001\" ) . withVerifyType ( \"include\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . verify_include_member_by_user_id ( guild . VerifyIncludeMemberByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_user_id ( 'user-0001' ) . with_verify_type ( 'include' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.verify_include_member_by_user_id ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , userId = \"user-0001\" , verifyType = \"include\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.verify_include_member_by_user_id_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , userId = \"user-0001\" , verifyType = \"include\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setMaximumCurrentMaximumMemberCountByGuildName 길드 이름을 지정하여 최대 참가 가능 인원수 설정 길드의 currentMaximumMemberCount를 지정된 절대값으로 설정합니다. 증감 조작과 달리 차분을 적용하는 것이 아니라 값을 직접 설정합니다. 업데이트 후 길드와 업데이트 전 길드 상태를 모두 반환하여 호출자가 변경 사항을 추적할 수 있도록 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. value int 1 ~ 2147483646 설정할 최대 인원수 Result 타입 설명 item Guild 업데이트한 길드 old Guild 갱신 전 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . SetMaximumCurrentMaximumMemberCountByGuildName ( \u0026 guild . SetMaximumCurrentMaximumMemberCountByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), Value : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\SetMaximumCurrentMaximumMemberCountByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e setMaximumCurrentMaximumMemberCountByGuildName ( ( new SetMaximumCurrentMaximumMemberCountByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withValue ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.SetMaximumCurrentMaximumMemberCountByGuildNameRequest ; import io.gs2.guild.result.SetMaximumCurrentMaximumMemberCountByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { SetMaximumCurrentMaximumMemberCountByGuildNameResult result = client . setMaximumCurrentMaximumMemberCountByGuildName ( new SetMaximumCurrentMaximumMemberCountByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildName ( \"guild-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withValue ( null ) ); Guild item = result . getItem (); Guild old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . SetMaximumCurrentMaximumMemberCountByGuildNameResult \u003e asyncResult = null ; yield return client . SetMaximumCurrentMaximumMemberCountByGuildName ( new Gs2 . Gs2Guild . Request . SetMaximumCurrentMaximumMemberCountByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithValue ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . setMaximumCurrentMaximumMemberCountByGuildName ( new Gs2Guild . SetMaximumCurrentMaximumMemberCountByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildName ( \"guild-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withValue ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . set_maximum_current_maximum_member_count_by_guild_name ( guild . SetMaximumCurrentMaximumMemberCountByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_name ( 'guild-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_value ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.set_maximum_current_maximum_member_count_by_guild_name ({ namespaceName = \"namespace-0001\" , guildName = \"guild-0001\" , guildModelName = \"guild-model-0001\" , value = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'guild' ) api_result_handler = client.set_maximum_current_maximum_member_count_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildName = \"guild-0001\" , guildModelName = \"guild-model-0001\" , value = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; assume 길드 유저로서 행동하기 위한 액세스 토큰 취득 요청한 유저가 길드 엔티티로서 조작을 실행할 수 있는 액세스 토큰을 발급합니다. 이 토큰은 길드 설정 갱신, 멤버 관리, 참가 요청의 승낙/거부, 차단 목록 관리 등의 길드 관리 조작에 필요합니다. 요청한 유저는 길드의 멤버여야 합니다. 그렇지 않은 경우 NotIncludedGuildMember 오류가 반환됩니다. 응답에는 액세스 토큰, 길드의 유저ID, 토큰의 유효 기간 타임스탬프가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. Result 타입 설명 token string 길드용 액세스 토큰 userId string 사용자ID expire long 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . Assume ( \u0026 guild . AssumeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } token := result . Token userId := result . UserId expire := result . Expire use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\AssumeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e assume ( ( new AssumeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) ); $token = $result -\u003e getToken (); $userId = $result -\u003e getUserId (); $expire = $result -\u003e getExpire (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.AssumeRequest ; import io.gs2.guild.result.AssumeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { AssumeResult result = client . assume ( new AssumeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); String token = result . getToken (); String userId = result . getUserId (); long expire = result . getExpire (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . AssumeResult \u003e asyncResult = null ; yield return client . Assume ( new Gs2 . Gs2Guild . Request . AssumeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var token = result . Token ; var userId = result . UserId ; var expire = result . Expire ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . assume ( new Gs2Guild . AssumeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); const token = result . getToken (); const userId = result . getUserId (); const expire = result . getExpire (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . assume ( guild . AssumeRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) ) token = result . token user_id = result . user_id expire = result . expire except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.assume ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; client = gs2 ( 'guild' ) api_result_handler = client.assume_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; assumeByUserId 유저ID를 지정하여 길드 유저로서 행동하기 위한 액세스 토큰 취득 지정된 유저가 길드 엔티티로서 조작을 실행할 수 있는 액세스 토큰을 발급합니다(서버 사이드 조작). 지정된 유저는 길드의 멤버여야 합니다. 그렇지 않은 경우 NotIncludedGuildMember 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 token string 길드용 액세스 토큰 userId string 사용자ID expire long 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . AssumeByUserId ( \u0026 guild . AssumeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } token := result . Token userId := result . UserId expire := result . Expire use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\AssumeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e assumeByUserId ( ( new AssumeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $token = $result -\u003e getToken (); $userId = $result -\u003e getUserId (); $expire = $result -\u003e getExpire (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.AssumeByUserIdRequest ; import io.gs2.guild.result.AssumeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { AssumeByUserIdResult result = client . assumeByUserId ( new AssumeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTimeOffsetToken ( null ) ); String token = result . getToken (); String userId = result . getUserId (); long expire = result . getExpire (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . AssumeByUserIdResult \u003e asyncResult = null ; yield return client . AssumeByUserId ( new Gs2 . Gs2Guild . Request . AssumeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var token = result . Token ; var userId = result . UserId ; var expire = result . Expire ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . assumeByUserId ( new Gs2Guild . AssumeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTimeOffsetToken ( null ) ); const token = result . getToken (); const userId = result . getUserId (); const expire = result . getExpire (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . assume_by_user_id ( guild . AssumeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_time_offset_token ( None ) ) token = result . token user_id = result . user_id expire = result . expire except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.assume_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; client = gs2 ( 'guild' ) api_result_handler = client.assume_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result token = result.token ; userId = result.userId ; expire = result.expire ; describeJoinedGuilds 참가 중인 길드 목록 조회 요청한 사용자가 현재 멤버로 참가하고 있는 길드의 페이지네이션 리스트를 조회합니다. 옵션으로 길드 모델 이름 필터를 지정하여 특정 길드 모델에 참가한 길드만 조회할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가 중인 길드 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeJoinedGuilds ( \u0026 guild . DescribeJoinedGuildsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeJoinedGuildsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeJoinedGuilds ( ( new DescribeJoinedGuildsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeJoinedGuildsRequest ; import io.gs2.guild.result.DescribeJoinedGuildsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeJoinedGuildsResult result = client . describeJoinedGuilds ( new DescribeJoinedGuildsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List JoinedGuild \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeJoinedGuildsResult \u003e asyncResult = null ; yield return client . DescribeJoinedGuilds ( new Gs2 . Gs2Guild . Request . DescribeJoinedGuildsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeJoinedGuilds ( new Gs2Guild . DescribeJoinedGuildsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_joined_guilds ( guild . DescribeJoinedGuildsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_joined_guilds ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_joined_guilds_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeJoinedGuildsByUserId 사용자 ID를 지정하여 참가 중인 길드 목록 조회 지정된 사용자가 현재 멤버로 참가하고 있는 길드의 페이지네이션 리스트를 조회합니다(서버 사이드 조작). 옵션으로 길드 모델 이름 필터를 지정하여 특정 길드 모델에 참가한 길드만 조회할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 참가 중인 길드 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeJoinedGuildsByUserId ( \u0026 guild . DescribeJoinedGuildsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeJoinedGuildsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeJoinedGuildsByUserId ( ( new DescribeJoinedGuildsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeJoinedGuildsByUserIdRequest ; import io.gs2.guild.result.DescribeJoinedGuildsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeJoinedGuildsByUserIdResult result = client . describeJoinedGuildsByUserId ( new DescribeJoinedGuildsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List JoinedGuild \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeJoinedGuildsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeJoinedGuildsByUserId ( new Gs2 . Gs2Guild . Request . DescribeJoinedGuildsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeJoinedGuildsByUserId ( new Gs2Guild . DescribeJoinedGuildsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_joined_guilds_by_user_id ( guild . DescribeJoinedGuildsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_joined_guilds_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_joined_guilds_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getJoinedGuild 참가 중인 길드 조회 길드 모델 이름과 길드 이름으로 식별되는, 요청한 사용자가 참가하고 있는 특정 길드의 멤버십 정보를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. Result 타입 설명 item JoinedGuild 참가 중인 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetJoinedGuild ( \u0026 guild . GetJoinedGuildRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetJoinedGuildRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getJoinedGuild ( ( new GetJoinedGuildRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetJoinedGuildRequest ; import io.gs2.guild.result.GetJoinedGuildResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetJoinedGuildResult result = client . getJoinedGuild ( new GetJoinedGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); JoinedGuild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetJoinedGuildResult \u003e asyncResult = null ; yield return client . GetJoinedGuild ( new Gs2 . Gs2Guild . Request . GetJoinedGuildRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getJoinedGuild ( new Gs2Guild . GetJoinedGuildRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_joined_guild ( guild . GetJoinedGuildRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_joined_guild ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_joined_guild_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getJoinedGuildByUserId 사용자 ID를 지정하여 참가 중인 길드 조회 지정된 사용자가 참가하고 있는 특정 길드의 멤버십 정보를 조회합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item JoinedGuild 참가 중인 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetJoinedGuildByUserId ( \u0026 guild . GetJoinedGuildByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetJoinedGuildByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getJoinedGuildByUserId ( ( new GetJoinedGuildByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetJoinedGuildByUserIdRequest ; import io.gs2.guild.result.GetJoinedGuildByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetJoinedGuildByUserIdResult result = client . getJoinedGuildByUserId ( new GetJoinedGuildByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTimeOffsetToken ( null ) ); JoinedGuild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetJoinedGuildByUserIdResult \u003e asyncResult = null ; yield return client . GetJoinedGuildByUserId ( new Gs2 . Gs2Guild . Request . GetJoinedGuildByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getJoinedGuildByUserId ( new Gs2Guild . GetJoinedGuildByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_joined_guild_by_user_id ( guild . GetJoinedGuildByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_joined_guild_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_joined_guild_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateMemberMetadata 멤버의 메타데이터 업데이트 지정된 길드 내 요청한 사용자의 멤버십 메타데이터를 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 metadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateMemberMetadata ( \u0026 guild . UpdateMemberMetadataRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Metadata : pointy . String ( \"metadata-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateMemberMetadataRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateMemberMetadata ( ( new UpdateMemberMetadataRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMetadata ( \"metadata-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateMemberMetadataRequest ; import io.gs2.guild.result.UpdateMemberMetadataResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateMemberMetadataResult result = client . updateMemberMetadata ( new UpdateMemberMetadataRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMetadata ( \"metadata-0001\" ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateMemberMetadataResult \u003e asyncResult = null ; yield return client . UpdateMemberMetadata ( new Gs2 . Gs2Guild . Request . UpdateMemberMetadataRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMetadata ( \"metadata-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateMemberMetadata ( new Gs2Guild . UpdateMemberMetadataRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMetadata ( \"metadata-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_member_metadata ( guild . UpdateMemberMetadataRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_access_token ( 'accessToken-0001' ) . with_metadata ( 'metadata-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_member_metadata ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , accessToken = \"accessToken-0001\" , metadata = \"metadata-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_member_metadata_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , accessToken = \"accessToken-0001\" , metadata = \"metadata-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateMemberMetadataByUserId 사용자 ID를 지정하여 멤버의 메타데이터 업데이트 지정된 길드 내 지정된 사용자의 멤버십 메타데이터를 업데이트합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. userId string  ~ 128자 업데이트할 사용자 ID metadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Guild 업데이트한 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateMemberMetadataByUserId ( \u0026 guild . UpdateMemberMetadataByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), UserId : pointy . String ( \"user-0001\" ), Metadata : pointy . String ( \"metadata-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateMemberMetadataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateMemberMetadataByUserId ( ( new UpdateMemberMetadataByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMetadata ( \"metadata-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateMemberMetadataByUserIdRequest ; import io.gs2.guild.result.UpdateMemberMetadataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateMemberMetadataByUserIdResult result = client . updateMemberMetadataByUserId ( new UpdateMemberMetadataByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withUserId ( \"user-0001\" ) . withMetadata ( \"metadata-0001\" ) . withTimeOffsetToken ( null ) ); Guild item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateMemberMetadataByUserIdResult \u003e asyncResult = null ; yield return client . UpdateMemberMetadataByUserId ( new Gs2 . Gs2Guild . Request . UpdateMemberMetadataByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithUserId ( \"user-0001\" ) . WithMetadata ( \"metadata-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateMemberMetadataByUserId ( new Gs2Guild . UpdateMemberMetadataByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withUserId ( \"user-0001\" ) . withMetadata ( \"metadata-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_member_metadata_by_user_id ( guild . UpdateMemberMetadataByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_user_id ( 'user-0001' ) . with_metadata ( 'metadata-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_member_metadata_by_user_id ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , userId = \"user-0001\" , metadata = \"metadata-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_member_metadata_by_user_id_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , userId = \"user-0001\" , metadata = \"metadata-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; withdrawal 길드에서 탈퇴 요청한 사용자가 지정된 길드에서 탈퇴합니다. 길드 모델에 재가입 쿨다운(rejoinCoolTimeMinutes)이 설정되어 있는 경우, 쿨다운 기간이 경과할 때까지 같은 길드에 다시 가입할 수 없습니다. 사용자가 유일한 길드 마스터인 경우, 리더가 없는 길드가 되는 것을 방지하기 위해 GuildMasterRequired 오류로 탈퇴가 거부됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. Result 타입 설명 item JoinedGuild 탈퇴한 길드 guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . Withdrawal ( \u0026 guild . WithdrawalRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\WithdrawalRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e withdrawal ( ( new WithdrawalRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.WithdrawalRequest ; import io.gs2.guild.result.WithdrawalResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { WithdrawalResult result = client . withdrawal ( new WithdrawalRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); JoinedGuild item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . WithdrawalResult \u003e asyncResult = null ; yield return client . Withdrawal ( new Gs2 . Gs2Guild . Request . WithdrawalRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . withdrawal ( new Gs2Guild . WithdrawalRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . withdrawal ( guild . WithdrawalRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.withdrawal ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.withdrawal_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; withdrawalByUserId 사용자 ID를 지정하여 길드에서 탈퇴 지정된 사용자가 지정된 길드에서 탈퇴합니다(서버 사이드 조작). 사용자용 버전과 동일한 재가입 쿨다운 및 길드 마스터 검증이 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item JoinedGuild 탈퇴한 길드 guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . WithdrawalByUserId ( \u0026 guild . WithdrawalByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\WithdrawalByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e withdrawalByUserId ( ( new WithdrawalByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.WithdrawalByUserIdRequest ; import io.gs2.guild.result.WithdrawalByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { WithdrawalByUserIdResult result = client . withdrawalByUserId ( new WithdrawalByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTimeOffsetToken ( null ) ); JoinedGuild item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . WithdrawalByUserIdResult \u003e asyncResult = null ; yield return client . WithdrawalByUserId ( new Gs2 . Gs2Guild . Request . WithdrawalByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . withdrawalByUserId ( new Gs2Guild . WithdrawalByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . withdrawal_by_user_id ( guild . WithdrawalByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) . with_time_offset_token ( None ) ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.withdrawal_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.withdrawal_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; getLastGuildMasterActivity 길드 마스터의 마지막 활동 일시 취득 길드 마스터가 마지막으로 활동을 수행한 일시의 타임스탬프를 취득합니다. 이 정보는 PromoteSeniorMember에 의한 자동 계승 대상이 될 만큼 길드 마스터가 비활성 상태인지 판정하는 데 사용됩니다. 비활성 임계값은 길드 모델의 inactivityPeriodDays 설정에 기반하여 계산됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 취득하려면 해당 역할의 PolicyDocument 에 Gs2Guild:GetLastGuildMasterActivity 권한이 필요합니다. Result 타입 설명 item LastGuildMasterActivity 마지막 길드 마스터 활동 guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetLastGuildMasterActivity ( \u0026 guild . GetLastGuildMasterActivityRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetLastGuildMasterActivityRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getLastGuildMasterActivity ( ( new GetLastGuildMasterActivityRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken () ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetLastGuildMasterActivityRequest ; import io.gs2.guild.result.GetLastGuildMasterActivityResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetLastGuildMasterActivityResult result = client . getLastGuildMasterActivity ( new GetLastGuildMasterActivityRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken () ); LastGuildMasterActivity item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetLastGuildMasterActivityResult \u003e asyncResult = null ; yield return client . GetLastGuildMasterActivity ( new Gs2 . Gs2Guild . Request . GetLastGuildMasterActivityRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getLastGuildMasterActivity ( new Gs2Guild . GetLastGuildMasterActivityRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken () ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_last_guild_master_activity ( guild . GetLastGuildMasterActivityRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token () ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_last_guild_master_activity ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.get_last_guild_master_activity_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; getLastGuildMasterActivityByGuildName 길드 이름을 지정하여 길드 마스터의 마지막 활동 일시 취득 지정된 길드의 길드 마스터가 마지막으로 활동을 수행한 일시의 타임스탬프를 취득합니다(서버 사이드 조작). 이 정보는 길드 마스터가 자동 계승 대상이 될 만큼 비활성 상태인지 판정하는 데 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 Result 타입 설명 item LastGuildMasterActivity 마지막 길드 마스터 활동 guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetLastGuildMasterActivityByGuildName ( \u0026 guild . GetLastGuildMasterActivityByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetLastGuildMasterActivityByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getLastGuildMasterActivityByGuildName ( ( new GetLastGuildMasterActivityByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetLastGuildMasterActivityByGuildNameRequest ; import io.gs2.guild.result.GetLastGuildMasterActivityByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetLastGuildMasterActivityByGuildNameResult result = client . getLastGuildMasterActivityByGuildName ( new GetLastGuildMasterActivityByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); LastGuildMasterActivity item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetLastGuildMasterActivityByGuildNameResult \u003e asyncResult = null ; yield return client . GetLastGuildMasterActivityByGuildName ( new Gs2 . Gs2Guild . Request . GetLastGuildMasterActivityByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getLastGuildMasterActivityByGuildName ( new Gs2Guild . GetLastGuildMasterActivityByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_last_guild_master_activity_by_guild_name ( guild . GetLastGuildMasterActivityByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_last_guild_master_activity_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.get_last_guild_master_activity_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; promoteSeniorMember 길드 마스터가 일정 기간 로그인하지 않은 경우, 가장 오래된 길드 멤버를 길드 마스터로 승격 길드 마스터가 inactivityPeriodDays의 임계값(24시간 × inactivityPeriodDays로 계산)을 초과하여 비활성 상태인지 확인합니다. 조건을 충족하는 경우, 가장 오래 근속한 비마스터 멤버(JoinedAt 타임스탬프로 판정)가 길드 마스터 역할로 승격됩니다. maxConcurrentGuildMasterCount가 1인 경우, 승격이 이루어지기 전에 비활성 상태인 길드 마스터가 기본 멤버 역할로 강등됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 에 따라 결정됩니다. 승격을 수행하려면 해당 역할의 PolicyDocument 에 Gs2Guild:PromoteSeniorMember 권한이 필요합니다. Result 타입 설명 item LastGuildMasterActivity 마지막 길드 마스터 활동 guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . PromoteSeniorMember ( \u0026 guild . PromoteSeniorMemberRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\PromoteSeniorMemberRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e promoteSeniorMember ( ( new PromoteSeniorMemberRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken () ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.PromoteSeniorMemberRequest ; import io.gs2.guild.result.PromoteSeniorMemberResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { PromoteSeniorMemberResult result = client . promoteSeniorMember ( new PromoteSeniorMemberRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken () ); LastGuildMasterActivity item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . PromoteSeniorMemberResult \u003e asyncResult = null ; yield return client . PromoteSeniorMember ( new Gs2 . Gs2Guild . Request . PromoteSeniorMemberRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . promoteSeniorMember ( new Gs2Guild . PromoteSeniorMemberRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken () ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . promote_senior_member ( guild . PromoteSeniorMemberRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token () ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.promote_senior_member ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.promote_senior_member_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; promoteSeniorMemberByGuildName 길드 이름을 지정하여, 일정 기간 로그인하지 않은 길드 마스터를 최고참 멤버로 교체 지정된 길드의 길드 마스터가 inactivityPeriodDays의 임계값을 초과하여 비활성 상태인지 확인합니다(서버 사이드 조작). 조건을 충족하는 경우, 가장 오래 근속한 비마스터 멤버(JoinedAt 타임스탬프로 판정)가 길드 마스터 역할로 승격됩니다. maxConcurrentGuildMasterCount가 1인 경우, 승격이 이루어지기 전에 비활성 상태인 길드 마스터가 기본 멤버 역할로 강등됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 Result 타입 설명 item LastGuildMasterActivity 마지막 길드 마스터 활동 guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . PromoteSeniorMemberByGuildName ( \u0026 guild . PromoteSeniorMemberByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), GuildName : pointy . String ( \"guild-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\PromoteSeniorMemberByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e promoteSeniorMemberByGuildName ( ( new PromoteSeniorMemberByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withGuildName ( \"guild-0001\" ) ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.PromoteSeniorMemberByGuildNameRequest ; import io.gs2.guild.result.PromoteSeniorMemberByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { PromoteSeniorMemberByGuildNameResult result = client . promoteSeniorMemberByGuildName ( new PromoteSeniorMemberByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); LastGuildMasterActivity item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . PromoteSeniorMemberByGuildNameResult \u003e asyncResult = null ; yield return client . PromoteSeniorMemberByGuildName ( new Gs2 . Gs2Guild . Request . PromoteSeniorMemberByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithGuildName ( \"guild-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . promoteSeniorMemberByGuildName ( new Gs2Guild . PromoteSeniorMemberByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withGuildName ( \"guild-0001\" ) ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . promote_senior_member_by_guild_name ( guild . PromoteSeniorMemberByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_guild_name ( 'guild-0001' ) ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.promote_senior_member_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.promote_senior_member_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , guildName = \"guild-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; describeReceiveRequests 수신한 참가 요청 목록 조회 길드에 전송되어 승인 대기 중인 참가 요청의 페이지네이션 리스트를 조회합니다. Assume한 길드 사용자의 액세스 토큰이 필요합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )으로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 로 결정됩니다. 목록을 조회하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DescribeReceiveRequests 권한이 필요합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가 요청 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeReceiveRequests ( \u0026 guild . DescribeReceiveRequestsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeReceiveRequestsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeReceiveRequests ( ( new DescribeReceiveRequestsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeReceiveRequestsRequest ; import io.gs2.guild.result.DescribeReceiveRequestsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeReceiveRequestsResult result = client . describeReceiveRequests ( new DescribeReceiveRequestsRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List ReceiveMemberRequest \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeReceiveRequestsResult \u003e asyncResult = null ; yield return client . DescribeReceiveRequests ( new Gs2 . Gs2Guild . Request . DescribeReceiveRequestsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeReceiveRequests ( new Gs2Guild . DescribeReceiveRequestsRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_receive_requests ( guild . DescribeReceiveRequestsRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_receive_requests ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_receive_requests_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeReceiveRequestsByGuildName 길드 이름을 지정하여 수신한 참가 요청 목록 조회 지정된 길드에 전송되어 승인 대기 중인 참가 요청의 페이지네이션 리스트를 조회합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가 요청 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeReceiveRequestsByGuildName ( \u0026 guild . DescribeReceiveRequestsByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : nil , GuildName : pointy . String ( \"guild-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeReceiveRequestsByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeReceiveRequestsByGuildName ( ( new DescribeReceiveRequestsByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeReceiveRequestsByGuildNameRequest ; import io.gs2.guild.result.DescribeReceiveRequestsByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeReceiveRequestsByGuildNameResult result = client . describeReceiveRequestsByGuildName ( new DescribeReceiveRequestsByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withGuildName ( \"guild-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List ReceiveMemberRequest \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeReceiveRequestsByGuildNameResult \u003e asyncResult = null ; yield return client . DescribeReceiveRequestsByGuildName ( new Gs2 . Gs2Guild . Request . DescribeReceiveRequestsByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( null ) . WithGuildName ( \"guild-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeReceiveRequestsByGuildName ( new Gs2Guild . DescribeReceiveRequestsByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withGuildName ( \"guild-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_receive_requests_by_guild_name ( guild . DescribeReceiveRequestsByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( None ) . with_guild_name ( 'guild-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_receive_requests_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = nil , guildName = \"guild-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_receive_requests_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = nil , guildName = \"guild-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getReceiveRequest 수신한 참가 요청 조회 지정된 사용자로부터 길드가 수신한 특정 참가 요청을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )으로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 로 결정됩니다. 조회하려면 해당 역할의 PolicyDocument 에 Gs2Guild:GetReceiveRequest 권한이 필요합니다. fromUserId string  ~ 128자 사용자ID Result 타입 설명 item ReceiveMemberRequest 참가 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetReceiveRequest ( \u0026 guild . GetReceiveRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), FromUserId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetReceiveRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getReceiveRequest ( ( new GetReceiveRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withFromUserId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetReceiveRequestRequest ; import io.gs2.guild.result.GetReceiveRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetReceiveRequestResult result = client . getReceiveRequest ( new GetReceiveRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( null ) ); ReceiveMemberRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetReceiveRequestResult \u003e asyncResult = null ; yield return client . GetReceiveRequest ( new Gs2 . Gs2Guild . Request . GetReceiveRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithFromUserId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getReceiveRequest ( new Gs2Guild . GetReceiveRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_receive_request ( guild . GetReceiveRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-0001' ) . with_access_token ( 'accessToken-0001' ) . with_from_user_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_receive_request ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , accessToken = \"accessToken-0001\" , fromUserId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_receive_request_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , accessToken = \"accessToken-0001\" , fromUserId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getReceiveRequestByGuildName 길드 이름을 지정하여 수신한 참가 요청 조회 지정된 사용자로부터 지정된 길드가 수신한 특정 참가 요청을 조회합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 fromUserId string  ~ 128자 사용자ID Result 타입 설명 item ReceiveMemberRequest 참가 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetReceiveRequestByGuildName ( \u0026 guild . GetReceiveRequestByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : nil , GuildName : pointy . String ( \"guild-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetReceiveRequestByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getReceiveRequestByGuildName ( ( new GetReceiveRequestByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetReceiveRequestByGuildNameRequest ; import io.gs2.guild.result.GetReceiveRequestByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetReceiveRequestByGuildNameResult result = client . getReceiveRequestByGuildName ( new GetReceiveRequestByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withGuildName ( \"guild-0001\" ) . withFromUserId ( \"user-0002\" ) ); ReceiveMemberRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetReceiveRequestByGuildNameResult \u003e asyncResult = null ; yield return client . GetReceiveRequestByGuildName ( new Gs2 . Gs2Guild . Request . GetReceiveRequestByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( null ) . WithGuildName ( \"guild-0001\" ) . WithFromUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getReceiveRequestByGuildName ( new Gs2Guild . GetReceiveRequestByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withGuildName ( \"guild-0001\" ) . withFromUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_receive_request_by_guild_name ( guild . GetReceiveRequestByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( None ) . with_guild_name ( 'guild-0001' ) . with_from_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_receive_request_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = nil , guildName = \"guild-0001\" , fromUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_receive_request_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = nil , guildName = \"guild-0001\" , fromUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acceptRequest 참가 요청 수락 보류 중인 참가 요청을 수락하고, 요청한 사용자를 길드 멤버로 추가합니다. 사용자에게는 길드의 기본 멤버 역할이 할당되며, 원래 요청의 멤버 메타데이터가 유지됩니다. 요청은 길드의 수신함과 발신자의 발신함 양쪽에서 삭제됩니다. 사용자의 maxConcurrentJoinGuilds 제한을 초과하지 않았는지, 길드의 최대 멤버 수에 도달하지 않았는지 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )으로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 로 결정됩니다. 승인하려면 해당 역할의 PolicyDocument 에 Gs2Guild:AcceptRequest 권한이 필요합니다. fromUserId string  ~ 128자 사용자ID Result 타입 설명 item ReceiveMemberRequest 수락한 참가 요청 guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . AcceptRequest ( \u0026 guild . AcceptRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), FromUserId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\AcceptRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e acceptRequest ( ( new AcceptRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withFromUserId ( null ) ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.AcceptRequestRequest ; import io.gs2.guild.result.AcceptRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { AcceptRequestResult result = client . acceptRequest ( new AcceptRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( null ) ); ReceiveMemberRequest item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . AcceptRequestResult \u003e asyncResult = null ; yield return client . AcceptRequest ( new Gs2 . Gs2Guild . Request . AcceptRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithFromUserId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . acceptRequest ( new Gs2Guild . AcceptRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withFromUserId ( null ) ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . accept_request ( guild . AcceptRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-0001' ) . with_access_token ( 'accessToken-0001' ) . with_from_user_id ( None ) ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.accept_request ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , accessToken = \"accessToken-0001\" , fromUserId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.accept_request_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , accessToken = \"accessToken-0001\" , fromUserId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; acceptRequestByGuildName 길드 이름을 지정하여 참가 요청 수락 지정된 길드의 보류 중인 참가 요청을 수락하고, 요청한 사용자를 길드 멤버로 추가합니다(서버 사이드 조작). 길드 사용자용 버전과 동일한 멤버 할당, 메타데이터 유지, 제한 검증이 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 fromUserId string  ~ 128자 사용자ID Result 타입 설명 item ReceiveMemberRequest 수락한 참가 요청 guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . AcceptRequestByGuildName ( \u0026 guild . AcceptRequestByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : nil , GuildName : pointy . String ( \"guild-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\AcceptRequestByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e acceptRequestByGuildName ( ( new AcceptRequestByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.AcceptRequestByGuildNameRequest ; import io.gs2.guild.result.AcceptRequestByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { AcceptRequestByGuildNameResult result = client . acceptRequestByGuildName ( new AcceptRequestByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withGuildName ( \"guild-0001\" ) . withFromUserId ( \"user-0002\" ) ); ReceiveMemberRequest item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . AcceptRequestByGuildNameResult \u003e asyncResult = null ; yield return client . AcceptRequestByGuildName ( new Gs2 . Gs2Guild . Request . AcceptRequestByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( null ) . WithGuildName ( \"guild-0001\" ) . WithFromUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . acceptRequestByGuildName ( new Gs2Guild . AcceptRequestByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withGuildName ( \"guild-0001\" ) . withFromUserId ( \"user-0002\" ) ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . accept_request_by_guild_name ( guild . AcceptRequestByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( None ) . with_guild_name ( 'guild-0001' ) . with_from_user_id ( 'user-0002' ) ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.accept_request_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = nil , guildName = \"guild-0001\" , fromUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.accept_request_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = nil , guildName = \"guild-0001\" , fromUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; rejectRequest 참가 요청 거부 보류 중인 참가 요청을 거부하고, 길드의 수신함과 발신자의 발신함 양쪽에서 삭제합니다. 요청한 사용자는 길드에 추가되지 않습니다. 관계는 형성되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )으로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 로 결정됩니다. 거부하려면 해당 역할의 PolicyDocument 에 Gs2Guild:RejectRequest 권한이 필요합니다. fromUserId string  ~ 128자 사용자ID Result 타입 설명 item ReceiveMemberRequest 거부한 참가 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . RejectRequest ( \u0026 guild . RejectRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : nil , AccessToken : , FromUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\RejectRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e rejectRequest ( ( new RejectRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withAccessToken () -\u003e withFromUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.RejectRequestRequest ; import io.gs2.guild.result.RejectRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { RejectRequestResult result = client . rejectRequest ( new RejectRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withAccessToken () . withFromUserId ( \"user-0002\" ) ); ReceiveMemberRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . RejectRequestResult \u003e asyncResult = null ; yield return client . RejectRequest ( new Gs2 . Gs2Guild . Request . RejectRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( null ) . WithAccessToken () . WithFromUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . rejectRequest ( new Gs2Guild . RejectRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withAccessToken () . withFromUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . reject_request ( guild . RejectRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( None ) . with_access_token () . with_from_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.reject_request ({ namespaceName = \"namespace-0001\" , guildModelName = nil , accessToken = , fromUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.reject_request_async ({ namespaceName = \"namespace-0001\" , guildModelName = nil , accessToken = , fromUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; rejectRequestByGuildName 길드 이름을 지정하여 참가 요청 거부 지정된 길드의 보류 중인 참가 요청을 거부합니다(서버 사이드 조작). 요청은 길드의 수신함과 발신자의 발신함 양쪽에서 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 fromUserId string  ~ 128자 사용자ID Result 타입 설명 item ReceiveMemberRequest 거부한 참가 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . RejectRequestByGuildName ( \u0026 guild . RejectRequestByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : nil , GuildName : pointy . String ( \"guild-0001\" ), FromUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\RejectRequestByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e rejectRequestByGuildName ( ( new RejectRequestByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withGuildName ( \"guild-0001\" ) -\u003e withFromUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.RejectRequestByGuildNameRequest ; import io.gs2.guild.result.RejectRequestByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { RejectRequestByGuildNameResult result = client . rejectRequestByGuildName ( new RejectRequestByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withGuildName ( \"guild-0001\" ) . withFromUserId ( \"user-0002\" ) ); ReceiveMemberRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . RejectRequestByGuildNameResult \u003e asyncResult = null ; yield return client . RejectRequestByGuildName ( new Gs2 . Gs2Guild . Request . RejectRequestByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( null ) . WithGuildName ( \"guild-0001\" ) . WithFromUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . rejectRequestByGuildName ( new Gs2Guild . RejectRequestByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( null ) . withGuildName ( \"guild-0001\" ) . withFromUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . reject_request_by_guild_name ( guild . RejectRequestByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( None ) . with_guild_name ( 'guild-0001' ) . with_from_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.reject_request_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = nil , guildName = \"guild-0001\" , fromUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.reject_request_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = nil , guildName = \"guild-0001\" , fromUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSendRequests 보낸 참가 요청 목록 취득 요청한 사용자가 보낸, 응답 대기 중인 길드 참가 요청의 페이지네이션 목록을 취득합니다. 길드 모델 이름으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeSendRequests ( \u0026 guild . DescribeSendRequestsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-0002\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeSendRequestsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeSendRequests ( ( new DescribeSendRequestsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-0002\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeSendRequestsRequest ; import io.gs2.guild.result.DescribeSendRequestsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeSendRequestsResult result = client . describeSendRequests ( new DescribeSendRequestsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-0002\" ) . withPageToken ( null ) . withLimit ( null ) ); List SendMemberRequest \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeSendRequestsResult \u003e asyncResult = null ; yield return client . DescribeSendRequests ( new Gs2 . Gs2Guild . Request . DescribeSendRequestsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-0002\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeSendRequests ( new Gs2Guild . DescribeSendRequestsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-0002\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_send_requests ( guild . DescribeSendRequestsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-0002' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_send_requests ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-0002\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_send_requests_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-0002\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeSendRequestsByUserId 사용자 ID를 지정하여 보낸 참가 요청 목록 취득 지정된 사용자가 보낸 길드 참가 요청의 페이지네이션 목록을 취득합니다(서버 사이드 조작). 길드 모델 이름으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 참가 요청 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeSendRequestsByUserId ( \u0026 guild . DescribeSendRequestsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeSendRequestsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeSendRequestsByUserId ( ( new DescribeSendRequestsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeSendRequestsByUserIdRequest ; import io.gs2.guild.result.DescribeSendRequestsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeSendRequestsByUserIdResult result = client . describeSendRequestsByUserId ( new DescribeSendRequestsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List SendMemberRequest \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeSendRequestsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeSendRequestsByUserId ( new Gs2 . Gs2Guild . Request . DescribeSendRequestsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeSendRequestsByUserId ( new Gs2Guild . DescribeSendRequestsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_send_requests_by_user_id ( guild . DescribeSendRequestsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_send_requests_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_send_requests_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getSendRequest 보낸 참가 요청 취득 요청한 사용자가 지정된 대상 길드에 보낸 특정 참가 요청을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. Result 타입 설명 item SendMemberRequest 참가 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetSendRequest ( \u0026 guild . GetSendRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-0002\" ), TargetGuildName : pointy . String ( \"guild-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetSendRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getSendRequest ( ( new GetSendRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-0002\" ) -\u003e withTargetGuildName ( \"guild-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetSendRequestRequest ; import io.gs2.guild.result.GetSendRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetSendRequestResult result = client . getSendRequest ( new GetSendRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-0002\" ) . withTargetGuildName ( \"guild-0002\" ) ); SendMemberRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetSendRequestResult \u003e asyncResult = null ; yield return client . GetSendRequest ( new Gs2 . Gs2Guild . Request . GetSendRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-0002\" ) . WithTargetGuildName ( \"guild-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getSendRequest ( new Gs2Guild . GetSendRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-0002\" ) . withTargetGuildName ( \"guild-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_send_request ( guild . GetSendRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-0002' ) . with_target_guild_name ( 'guild-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_send_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-0002\" , targetGuildName = \"guild-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_send_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-0002\" , targetGuildName = \"guild-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSendRequestByUserId 사용자 ID를 지정하여 보낸 참가 요청 취득 지정된 사용자가 지정된 대상 길드에 보낸 특정 참가 요청을 취득합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SendMemberRequest 참가 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetSendRequestByUserId ( \u0026 guild . GetSendRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : nil , TargetGuildName : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetSendRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getSendRequestByUserId ( ( new GetSendRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withTargetGuildName ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetSendRequestByUserIdRequest ; import io.gs2.guild.result.GetSendRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetSendRequestByUserIdResult result = client . getSendRequestByUserId ( new GetSendRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( null ) . withTargetGuildName ( null ) . withTimeOffsetToken ( null ) ); SendMemberRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetSendRequestByUserIdResult \u003e asyncResult = null ; yield return client . GetSendRequestByUserId ( new Gs2 . Gs2Guild . Request . GetSendRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( null ) . WithTargetGuildName ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getSendRequestByUserId ( new Gs2Guild . GetSendRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( null ) . withTargetGuildName ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_send_request_by_user_id ( guild . GetSendRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( None ) . with_target_guild_name ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_send_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = nil , targetGuildName = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_send_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = nil , targetGuildName = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendRequest 참가 요청 전송 지정된 길드에 참가 요청을 전송합니다. 동작은 길드의 참가 정책에 따라 달라집니다: “anybody” 정책: 사용자는 승인 없이 기본 역할로 길드 멤버로 즉시 추가됩니다. 승인 필요 정책: 발신자의 발신함과 길드의 수신함 양쪽에 참가 요청이 생성되며, 길드 마스터의 승인을 기다립니다. 전송 전에 다음 검증이 수행됩니다: 사용자가 길드의 거부 목록에 없는지, 재가입 쿨다운 기간이 경과했는지(이전에 탈퇴한 경우), maxConcurrentJoinGuilds 제한을 초과하지 않았는지. 커스텀 멤버 메타데이터를 요청에 포함할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 전송 대상 길드 이름 metadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. Result 타입 설명 item Guild 참가한 길드 승인이 필요하지 않은 길드에 참가했을 때 응답됩니다 sendMemberRequest SendMemberRequest 보낸 참가 요청 승인이 필요한 길드에 참가 요청을 보냈을 때 응답됩니다 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . SendRequest ( \u0026 guild . SendRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-0002\" ), TargetGuildName : pointy . String ( \"guild-0002\" ), Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item sendMemberRequest := result . SendMemberRequest use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\SendRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e sendRequest ( ( new SendRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-0002\" ) -\u003e withTargetGuildName ( \"guild-0002\" ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); $sendMemberRequest = $result -\u003e getSendMemberRequest (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.SendRequestRequest ; import io.gs2.guild.result.SendRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { SendRequestResult result = client . sendRequest ( new SendRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-0002\" ) . withTargetGuildName ( \"guild-0002\" ) . withMetadata ( null ) ); Guild item = result . getItem (); SendMemberRequest sendMemberRequest = result . getSendMemberRequest (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . SendRequestResult \u003e asyncResult = null ; yield return client . SendRequest ( new Gs2 . Gs2Guild . Request . SendRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-0002\" ) . WithTargetGuildName ( \"guild-0002\" ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var sendMemberRequest = result . SendMemberRequest ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . sendRequest ( new Gs2Guild . SendRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-0002\" ) . withTargetGuildName ( \"guild-0002\" ) . withMetadata ( null ) ); const item = result . getItem (); const sendMemberRequest = result . getSendMemberRequest (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . send_request ( guild . SendRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-0002' ) . with_target_guild_name ( 'guild-0002' ) . with_metadata ( None ) ) item = result . item send_member_request = result . send_member_request except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.send_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-0002\" , targetGuildName = \"guild-0002\" , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendMemberRequest = result.sendMemberRequest ; client = gs2 ( 'guild' ) api_result_handler = client.send_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-0002\" , targetGuildName = \"guild-0002\" , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendMemberRequest = result.sendMemberRequest ; sendRequestByUserId 사용자 ID를 지정하여 참가 요청 전송 지정된 사용자를 대신하여 지정된 길드에 참가 요청을 전송합니다(서버 사이드 조작). 사용자용 버전과 동일한 참가 정책 동작, 검증(거부 목록, 쿨다운, 동시 길드 제한), 승인 흐름이 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 전송 대상 길드 이름 metadata string ~ 512자 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Guild 참가한 길드 승인이 필요하지 않은 길드에 참가했을 때 응답됩니다 sendMemberRequest SendMemberRequest 보낸 참가 요청 승인이 필요한 길드에 참가 요청을 보냈을 때 응답됩니다 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . SendRequestByUserId ( \u0026 guild . SendRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : nil , TargetGuildName : nil , Metadata : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item sendMemberRequest := result . SendMemberRequest use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\SendRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e sendRequestByUserId ( ( new SendRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withTargetGuildName ( null ) -\u003e withMetadata ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $sendMemberRequest = $result -\u003e getSendMemberRequest (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.SendRequestByUserIdRequest ; import io.gs2.guild.result.SendRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { SendRequestByUserIdResult result = client . sendRequestByUserId ( new SendRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( null ) . withTargetGuildName ( null ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); Guild item = result . getItem (); SendMemberRequest sendMemberRequest = result . getSendMemberRequest (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . SendRequestByUserIdResult \u003e asyncResult = null ; yield return client . SendRequestByUserId ( new Gs2 . Gs2Guild . Request . SendRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( null ) . WithTargetGuildName ( null ) . WithMetadata ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var sendMemberRequest = result . SendMemberRequest ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . sendRequestByUserId ( new Gs2Guild . SendRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( null ) . withTargetGuildName ( null ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const sendMemberRequest = result . getSendMemberRequest (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . send_request_by_user_id ( guild . SendRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( None ) . with_target_guild_name ( None ) . with_metadata ( None ) . with_time_offset_token ( None ) ) item = result . item send_member_request = result . send_member_request except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.send_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = nil , targetGuildName = nil , metadata = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendMemberRequest = result.sendMemberRequest ; client = gs2 ( 'guild' ) api_result_handler = client.send_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = nil , targetGuildName = nil , metadata = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendMemberRequest = result.sendMemberRequest ; deleteRequest 보낸 참가 요청 취소 요청한 사용자가 이전에 보낸 길드 참가 요청을 취소(삭제)합니다. 요청은 발신자의 발신함과 대상 길드의 수신함 양쪽에서 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. Result 타입 설명 item SendMemberRequest 삭제된 참가 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteRequest ( \u0026 guild . DeleteRequestRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), GuildModelName : pointy . String ( \"guild-0002\" ), TargetGuildName : pointy . String ( \"guild-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteRequestRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteRequest ( ( new DeleteRequestRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withGuildModelName ( \"guild-0002\" ) -\u003e withTargetGuildName ( \"guild-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteRequestRequest ; import io.gs2.guild.result.DeleteRequestResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteRequestResult result = client . deleteRequest ( new DeleteRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-0002\" ) . withTargetGuildName ( \"guild-0002\" ) ); SendMemberRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteRequestResult \u003e asyncResult = null ; yield return client . DeleteRequest ( new Gs2 . Gs2Guild . Request . DeleteRequestRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithGuildModelName ( \"guild-0002\" ) . WithTargetGuildName ( \"guild-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteRequest ( new Gs2Guild . DeleteRequestRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withGuildModelName ( \"guild-0002\" ) . withTargetGuildName ( \"guild-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_request ( guild . DeleteRequestRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_guild_model_name ( 'guild-0002' ) . with_target_guild_name ( 'guild-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_request ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-0002\" , targetGuildName = \"guild-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_request_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , guildModelName = \"guild-0002\" , targetGuildName = \"guild-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRequestByUserId 사용자 ID를 지정하여 보낸 참가 요청 취소 지정된 사용자가 이전에 보낸 길드 참가 요청을 취소(삭제)합니다(서버 사이드 조작). 요청은 발신자의 발신함과 대상 길드의 수신함 양쪽에서 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. targetGuildName string  ~ 128자 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SendMemberRequest 삭제된 참가 요청 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteRequestByUserId ( \u0026 guild . DeleteRequestByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), GuildModelName : nil , TargetGuildName : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteRequestByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteRequestByUserId ( ( new DeleteRequestByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGuildModelName ( null ) -\u003e withTargetGuildName ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteRequestByUserIdRequest ; import io.gs2.guild.result.DeleteRequestByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteRequestByUserIdResult result = client . deleteRequestByUserId ( new DeleteRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( null ) . withTargetGuildName ( null ) . withTimeOffsetToken ( null ) ); SendMemberRequest item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteRequestByUserIdResult \u003e asyncResult = null ; yield return client . DeleteRequestByUserId ( new Gs2 . Gs2Guild . Request . DeleteRequestByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithGuildModelName ( null ) . WithTargetGuildName ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteRequestByUserId ( new Gs2Guild . DeleteRequestByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withGuildModelName ( null ) . withTargetGuildName ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_request_by_user_id ( guild . DeleteRequestByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_guild_model_name ( None ) . with_target_guild_name ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_request_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = nil , targetGuildName = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_request_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , guildModelName = nil , targetGuildName = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeIgnoreUsers 참가를 거부하는 사용자 ID 목록 취득 길드의 거부 목록(블랙리스트)에 등록된 사용자의 페이지네이션 목록을 취득합니다. 이 목록에 포함된 사용자는 길드에 참가 요청을 보낼 수 없습니다. Assume한 길드 사용자의 액세스 토큰이 필요합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )으로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 로 결정됩니다. 목록을 조회하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DescribeIgnoreUser 권한이 필요합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가를 거부하는 사용자 ID 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeIgnoreUsers ( \u0026 guild . DescribeIgnoreUsersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeIgnoreUsersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeIgnoreUsers ( ( new DescribeIgnoreUsersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken () -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeIgnoreUsersRequest ; import io.gs2.guild.result.DescribeIgnoreUsersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeIgnoreUsersResult result = client . describeIgnoreUsers ( new DescribeIgnoreUsersRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken () . withPageToken ( null ) . withLimit ( null ) ); List IgnoreUser \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeIgnoreUsersResult \u003e asyncResult = null ; yield return client . DescribeIgnoreUsers ( new Gs2 . Gs2Guild . Request . DescribeIgnoreUsersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken () . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeIgnoreUsers ( new Gs2Guild . DescribeIgnoreUsersRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken () . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_ignore_users ( guild . DescribeIgnoreUsersRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token () . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_ignore_users ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_ignore_users_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeIgnoreUsersByGuildName 길드명을 지정하여 참가를 거부하는 사용자 ID 목록 취득 지정된 길드의 거부 목록(블랙리스트)에 등록된 사용자의 페이지네이션 목록을 취득합니다(서버 사이드 조작). 이 목록에 포함된 사용자는 길드에 참가 요청을 보낼 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 참가를 거부하는 사용자 ID 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeIgnoreUsersByGuildName ( \u0026 guild . DescribeIgnoreUsersByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-0001\" ), GuildName : pointy . String ( \"guildName-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeIgnoreUsersByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeIgnoreUsersByGuildName ( ( new DescribeIgnoreUsersByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-0001\" ) -\u003e withGuildName ( \"guildName-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeIgnoreUsersByGuildNameRequest ; import io.gs2.guild.result.DescribeIgnoreUsersByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeIgnoreUsersByGuildNameResult result = client . describeIgnoreUsersByGuildName ( new DescribeIgnoreUsersByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withGuildName ( \"guildName-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List IgnoreUser \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeIgnoreUsersByGuildNameResult \u003e asyncResult = null ; yield return client . DescribeIgnoreUsersByGuildName ( new Gs2 . Gs2Guild . Request . DescribeIgnoreUsersByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-0001\" ) . WithGuildName ( \"guildName-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeIgnoreUsersByGuildName ( new Gs2Guild . DescribeIgnoreUsersByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withGuildName ( \"guildName-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_ignore_users_by_guild_name ( guild . DescribeIgnoreUsersByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-0001' ) . with_guild_name ( 'guildName-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_ignore_users_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , guildName = \"guildName-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_ignore_users_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , guildName = \"guildName-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getIgnoreUser 참가를 거부하는 사용자 ID 취득 특정 사용자가 길드의 거부 목록(블랙리스트)에 포함되어 있는지 확인합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )으로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 로 결정됩니다. 조회하려면 해당 역할의 PolicyDocument 에 Gs2Guild:GetIgnoreUser 권한이 필요합니다. userId string  ~ 128자 사용자ID Result 타입 설명 item IgnoreUser 참가를 거부하는 사용자 ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetIgnoreUser ( \u0026 guild . GetIgnoreUserRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), UserId : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetIgnoreUserRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getIgnoreUser ( ( new GetIgnoreUserRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withUserId ( \"user-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetIgnoreUserRequest ; import io.gs2.guild.result.GetIgnoreUserResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetIgnoreUserResult result = client . getIgnoreUser ( new GetIgnoreUserRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withUserId ( \"user-0001\" ) ); IgnoreUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetIgnoreUserResult \u003e asyncResult = null ; yield return client . GetIgnoreUser ( new Gs2 . Gs2Guild . Request . GetIgnoreUserRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithUserId ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getIgnoreUser ( new Gs2Guild . GetIgnoreUserRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withUserId ( \"user-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_ignore_user ( guild . GetIgnoreUserRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) . with_user_id ( 'user-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_ignore_user ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , userId = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_ignore_user_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , userId = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getIgnoreUserByGuildName 길드명을 지정하여 참가를 거부하는 사용자 ID 취득 특정 사용자가 지정된 길드의 거부 목록(블랙리스트)에 포함되어 있는지 확인합니다(서버 사이드 조작). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item IgnoreUser 참가를 거부하는 사용자 ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetIgnoreUserByGuildName ( \u0026 guild . GetIgnoreUserByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-0001\" ), GuildName : pointy . String ( \"guildName-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetIgnoreUserByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getIgnoreUserByGuildName ( ( new GetIgnoreUserByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-0001\" ) -\u003e withGuildName ( \"guildName-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetIgnoreUserByGuildNameRequest ; import io.gs2.guild.result.GetIgnoreUserByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetIgnoreUserByGuildNameResult result = client . getIgnoreUserByGuildName ( new GetIgnoreUserByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withGuildName ( \"guildName-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); IgnoreUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetIgnoreUserByGuildNameResult \u003e asyncResult = null ; yield return client . GetIgnoreUserByGuildName ( new Gs2 . Gs2Guild . Request . GetIgnoreUserByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-0001\" ) . WithGuildName ( \"guildName-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getIgnoreUserByGuildName ( new Gs2Guild . GetIgnoreUserByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withGuildName ( \"guildName-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_ignore_user_by_guild_name ( guild . GetIgnoreUserByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-0001' ) . with_guild_name ( 'guildName-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_ignore_user_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , guildName = \"guildName-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_ignore_user_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , guildName = \"guildName-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; addIgnoreUser 참가를 거부하는 사용자 ID 추가 사용자를 길드의 거부 목록(블랙리스트)에 추가합니다. 추가된 사용자는 이 길드에 참가 요청을 보낼 수 없게 됩니다. 이미 보류 중인 참가 요청이 있는 경우 자동으로 삭제되지는 않습니다. 별도로 거부해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )으로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 로 결정됩니다. 추가하려면 해당 역할의 PolicyDocument 에 Gs2Guild:AddIgnoreUser 권한이 필요합니다. userId string  ~ 128자 사용자ID Result 타입 설명 item IgnoreUser 참가를 거부하는 사용자 ID guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . AddIgnoreUser ( \u0026 guild . AddIgnoreUserRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), UserId : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\AddIgnoreUserRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e addIgnoreUser ( ( new AddIgnoreUserRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withUserId ( \"user-0001\" ) ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.AddIgnoreUserRequest ; import io.gs2.guild.result.AddIgnoreUserResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { AddIgnoreUserResult result = client . addIgnoreUser ( new AddIgnoreUserRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withUserId ( \"user-0001\" ) ); IgnoreUser item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . AddIgnoreUserResult \u003e asyncResult = null ; yield return client . AddIgnoreUser ( new Gs2 . Gs2Guild . Request . AddIgnoreUserRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithUserId ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . addIgnoreUser ( new Gs2Guild . AddIgnoreUserRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withUserId ( \"user-0001\" ) ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . add_ignore_user ( guild . AddIgnoreUserRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) . with_user_id ( 'user-0001' ) ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.add_ignore_user ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , userId = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.add_ignore_user_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , userId = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; addIgnoreUserByGuildName 길드 이름을 지정하여 참가를 거부하는 사용자 ID 추가 지정된 길드의 거부 리스트(블랙리스트)에 사용자를 추가합니다(서버 사이드 조작). 추가된 사용자는 이 길드에 참가 요청을 보낼 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item IgnoreUser 참가를 거부하는 사용자 ID guild Guild 길드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . AddIgnoreUserByGuildName ( \u0026 guild . AddIgnoreUserByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-0001\" ), GuildName : pointy . String ( \"guildName-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item guild := result . Guild use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\AddIgnoreUserByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e addIgnoreUserByGuildName ( ( new AddIgnoreUserByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-0001\" ) -\u003e withGuildName ( \"guildName-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $guild = $result -\u003e getGuild (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.AddIgnoreUserByGuildNameRequest ; import io.gs2.guild.result.AddIgnoreUserByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { AddIgnoreUserByGuildNameResult result = client . addIgnoreUserByGuildName ( new AddIgnoreUserByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withGuildName ( \"guildName-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); IgnoreUser item = result . getItem (); Guild guild = result . getGuild (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . AddIgnoreUserByGuildNameResult \u003e asyncResult = null ; yield return client . AddIgnoreUserByGuildName ( new Gs2 . Gs2Guild . Request . AddIgnoreUserByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-0001\" ) . WithGuildName ( \"guildName-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var guild = result . Guild ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . addIgnoreUserByGuildName ( new Gs2Guild . AddIgnoreUserByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withGuildName ( \"guildName-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const guild = result . getGuild (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . add_ignore_user_by_guild_name ( guild . AddIgnoreUserByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-0001' ) . with_guild_name ( 'guildName-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item guild = result . guild except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.add_ignore_user_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , guildName = \"guildName-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; client = gs2 ( 'guild' ) api_result_handler = client.add_ignore_user_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , guildName = \"guildName-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; guild = result.guild ; deleteIgnoreUser 참가를 거부하는 사용자 ID 삭제 길드의 거부 리스트(블랙리스트)에서 사용자를 삭제합니다. 삭제 후, 해당 사용자는 다시 이 길드에 참가 요청을 보낼 수 있게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 길드용 액세스 토큰 assume (또는 assumeByUserId )으로 취득한 토큰 문자열입니다. 권한은 assume 을 호출한 멤버의 역할의 PolicyDocument 로 결정됩니다. 삭제하려면 해당 역할의 PolicyDocument 에 Gs2Guild:DeleteIgnoreUser 권한이 필요합니다. userId string  ~ 128자 사용자ID Result 타입 설명 item IgnoreUser 참가를 거부하는 사용자 ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteIgnoreUser ( \u0026 guild . DeleteIgnoreUserRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), UserId : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteIgnoreUserRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteIgnoreUser ( ( new DeleteIgnoreUserRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withUserId ( \"user-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteIgnoreUserRequest ; import io.gs2.guild.result.DeleteIgnoreUserResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteIgnoreUserResult result = client . deleteIgnoreUser ( new DeleteIgnoreUserRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withUserId ( \"user-0001\" ) ); IgnoreUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteIgnoreUserResult \u003e asyncResult = null ; yield return client . DeleteIgnoreUser ( new Gs2 . Gs2Guild . Request . DeleteIgnoreUserRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithUserId ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteIgnoreUser ( new Gs2Guild . DeleteIgnoreUserRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withUserId ( \"user-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_ignore_user ( guild . DeleteIgnoreUserRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_access_token ( 'accessToken-0001' ) . with_user_id ( 'user-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_ignore_user ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , userId = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_ignore_user_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , accessToken = \"accessToken-0001\" , userId = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteIgnoreUserByGuildName 길드 이름을 지정하여 참가를 거부하는 사용자 ID 삭제 지정된 길드의 거부 리스트(블랙리스트)에서 사용자를 삭제합니다(서버 사이드 조작). 삭제 후, 해당 사용자는 다시 이 길드에 참가 요청을 보낼 수 있게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item IgnoreUser 참가를 거부하는 사용자 ID 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteIgnoreUserByGuildName ( \u0026 guild . DeleteIgnoreUserByGuildNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-0001\" ), GuildName : pointy . String ( \"guildName-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteIgnoreUserByGuildNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteIgnoreUserByGuildName ( ( new DeleteIgnoreUserByGuildNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-0001\" ) -\u003e withGuildName ( \"guildName-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteIgnoreUserByGuildNameRequest ; import io.gs2.guild.result.DeleteIgnoreUserByGuildNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteIgnoreUserByGuildNameResult result = client . deleteIgnoreUserByGuildName ( new DeleteIgnoreUserByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withGuildName ( \"guildName-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); IgnoreUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteIgnoreUserByGuildNameResult \u003e asyncResult = null ; yield return client . DeleteIgnoreUserByGuildName ( new Gs2 . Gs2Guild . Request . DeleteIgnoreUserByGuildNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-0001\" ) . WithGuildName ( \"guildName-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteIgnoreUserByGuildName ( new Gs2Guild . DeleteIgnoreUserByGuildNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) . withGuildName ( \"guildName-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_ignore_user_by_guild_name ( guild . DeleteIgnoreUserByGuildNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-0001' ) . with_guild_name ( 'guildName-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_ignore_user_by_guild_name ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , guildName = \"guildName-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_ignore_user_by_guild_name_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , guildName = \"guildName-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGuildModels 길드 모델 목록 취득 지정된 네임스페이스에서 현재 활성화(공개)되어 있는 길드 모델 목록을 취득합니다. 길드 모델은 최대 멤버 수, 역할 정의, 길드 마스터 역할, 기본 멤버 역할, 재참가 쿨다운 기간, 동시 길드 참가 제한, 비활성 길드 마스터 승계 설정을 포함한 길드 구조를 정의합니다. 길드 모델 마스터와 달리 읽기 전용이며 현재 사용 중인 구성을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 길드 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeGuildModels ( \u0026 guild . DescribeGuildModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeGuildModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeGuildModels ( ( new DescribeGuildModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeGuildModelsRequest ; import io.gs2.guild.result.DescribeGuildModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeGuildModelsResult result = client . describeGuildModels ( new DescribeGuildModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List GuildModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeGuildModelsResult \u003e asyncResult = null ; yield return client . DescribeGuildModels ( new Gs2 . Gs2Guild . Request . DescribeGuildModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeGuildModels ( new Gs2Guild . DescribeGuildModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_guild_models ( guild . DescribeGuildModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_guild_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'guild' ) api_result_handler = client.describe_guild_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getGuildModel 길드 모델 취득 이름을 지정하여 특정한 현재 활성화된 길드 모델의 상세 정보를 취득합니다. 역할 정의, 최대 멤버 수 설정, 참가 정책 제약, 비활성 길드 마스터의 승계 기간(inactivityPeriodDays), 재참가 쿨다운 설정을 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GuildModel 길드 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetGuildModel ( \u0026 guild . GetGuildModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetGuildModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getGuildModel ( ( new GetGuildModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetGuildModelRequest ; import io.gs2.guild.result.GetGuildModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetGuildModelResult result = client . getGuildModel ( new GetGuildModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) ); GuildModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetGuildModelResult \u003e asyncResult = null ; yield return client . GetGuildModel ( new Gs2 . Gs2Guild . Request . GetGuildModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getGuildModel ( new Gs2Guild . GetGuildModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_guild_model ( guild . GetGuildModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_guild_model ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_guild_model_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 길드 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 네임스페이스 내의 모든 길드 모델 마스터 정의를, 활성화에 적합한 단일 JSON 문서로 내보냅니다. 내보내는 데이터에는 멤버 제한, 역할 정의, 참가 정책, 승계 설정을 포함한 길드 모델이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentGuildMaster 활성화 가능한 길드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 guild . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.ExportMasterRequest ; import io.gs2.guild.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentGuildMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Guild . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Guild . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . export_master ( guild . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentGuildMaster 현재 활성화된 길드 모델 마스터 취득 지정된 네임스페이스에서 현재 활성화되어 사용 중인 길드 모델 마스터 데이터를 취득합니다. 반환되는 데이터에는 현재 런타임 요청을 처리하고 있는 모든 길드 모델의 JSON 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentGuildMaster 현재 활성화된 길드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetCurrentGuildMaster ( \u0026 guild . GetCurrentGuildMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetCurrentGuildMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getCurrentGuildMaster ( ( new GetCurrentGuildMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetCurrentGuildMasterRequest ; import io.gs2.guild.result.GetCurrentGuildMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetCurrentGuildMasterResult result = client . getCurrentGuildMaster ( new GetCurrentGuildMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentGuildMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetCurrentGuildMasterResult \u003e asyncResult = null ; yield return client . GetCurrentGuildMaster ( new Gs2 . Gs2Guild . Request . GetCurrentGuildMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getCurrentGuildMaster ( new Gs2Guild . GetCurrentGuildMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_current_guild_master ( guild . GetCurrentGuildMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_current_guild_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_current_guild_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentGuildMaster 현재 활성화된 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentGuildMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentGuildMaster ( \u0026 guild . PreUpdateCurrentGuildMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\PreUpdateCurrentGuildMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentGuildMaster ( ( new PreUpdateCurrentGuildMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.PreUpdateCurrentGuildMasterRequest ; import io.gs2.guild.result.PreUpdateCurrentGuildMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { PreUpdateCurrentGuildMasterResult result = client . preUpdateCurrentGuildMaster ( new PreUpdateCurrentGuildMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . PreUpdateCurrentGuildMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentGuildMaster ( new Gs2 . Gs2Guild . Request . PreUpdateCurrentGuildMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . preUpdateCurrentGuildMaster ( new Gs2Guild . PreUpdateCurrentGuildMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . pre_update_current_guild_master ( guild . PreUpdateCurrentGuildMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.pre_update_current_guild_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'guild' ) api_result_handler = client.pre_update_current_guild_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentGuildMaster 현재 활성화된 길드 모델의 마스터 데이터를 갱신 새로운 길드 모델 마스터 데이터를 활성화하여 현재 활성화된 설정을 교체합니다. 2가지 모드를 지원합니다: ‘direct’는 인라인 마스터 데이터(1MB 미만의 데이터에 적합), ‘preUpload’는 PreUpdate로 사전에 업로드한 데이터를 적용합니다. 활성화 후, 모든 길드 관련 런타임 조작(길드 작성, 참가 요청, 멤버 관리)은 새로운 설정을 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentGuildMaster 갱신된 현재 활성화된 길드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentGuildMaster ( \u0026 guild . UpdateCurrentGuildMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2024-04-25\\\", \\\"guildModels\\\": [{\\\"name\\\": \\\"guild-0001\\\", \\\"defaultMaximumMemberCount\\\": 10, \\\"maximumMemberCount\\\": 50, \\\"inactivityPeriodDays\\\": 10, \\\"roles\\\": [{\\\"name\\\": \\\"master\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}, {\\\"name\\\": \\\"member\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}], \\\"guildMasterRole\\\": \\\"master\\\", \\\"guildMemberDefaultRole\\\": \\\"member\\\", \\\"rejoinCoolTimeMinutes\\\": 1440}, {\\\"name\\\": \\\"guild-0002\\\", \\\"defaultMaximumMemberCount\\\": 20, \\\"maximumMemberCount\\\": 40, \\\"inactivityPeriodDays\\\": 10, \\\"roles\\\": [{\\\"name\\\": \\\"master\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}, {\\\"name\\\": \\\"member\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}], \\\"guildMasterRole\\\": \\\"master\\\", \\\"guildMemberDefaultRole\\\": \\\"member\\\", \\\"rejoinCoolTimeMinutes\\\": 360}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateCurrentGuildMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateCurrentGuildMaster ( ( new UpdateCurrentGuildMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2024-04-25 \\\" , \\\" guildModels \\\" : [{ \\\" name \\\" : \\\" guild-0001 \\\" , \\\" defaultMaximumMemberCount \\\" : 10, \\\" maximumMemberCount \\\" : 50, \\\" inactivityPeriodDays \\\" : 10, \\\" roles \\\" : [{ \\\" name \\\" : \\\" master \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }, { \\\" name \\\" : \\\" member \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }], \\\" guildMasterRole \\\" : \\\" master \\\" , \\\" guildMemberDefaultRole \\\" : \\\" member \\\" , \\\" rejoinCoolTimeMinutes \\\" : 1440}, { \\\" name \\\" : \\\" guild-0002 \\\" , \\\" defaultMaximumMemberCount \\\" : 20, \\\" maximumMemberCount \\\" : 40, \\\" inactivityPeriodDays \\\" : 10, \\\" roles \\\" : [{ \\\" name \\\" : \\\" master \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }, { \\\" name \\\" : \\\" member \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }], \\\" guildMasterRole \\\" : \\\" master \\\" , \\\" guildMemberDefaultRole \\\" : \\\" member \\\" , \\\" rejoinCoolTimeMinutes \\\" : 360}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateCurrentGuildMasterRequest ; import io.gs2.guild.result.UpdateCurrentGuildMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateCurrentGuildMasterResult result = client . updateCurrentGuildMaster ( new UpdateCurrentGuildMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-04-25\\\", \\\"guildModels\\\": [{\\\"name\\\": \\\"guild-0001\\\", \\\"defaultMaximumMemberCount\\\": 10, \\\"maximumMemberCount\\\": 50, \\\"inactivityPeriodDays\\\": 10, \\\"roles\\\": [{\\\"name\\\": \\\"master\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}, {\\\"name\\\": \\\"member\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}], \\\"guildMasterRole\\\": \\\"master\\\", \\\"guildMemberDefaultRole\\\": \\\"member\\\", \\\"rejoinCoolTimeMinutes\\\": 1440}, {\\\"name\\\": \\\"guild-0002\\\", \\\"defaultMaximumMemberCount\\\": 20, \\\"maximumMemberCount\\\": 40, \\\"inactivityPeriodDays\\\": 10, \\\"roles\\\": [{\\\"name\\\": \\\"master\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}, {\\\"name\\\": \\\"member\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}], \\\"guildMasterRole\\\": \\\"master\\\", \\\"guildMemberDefaultRole\\\": \\\"member\\\", \\\"rejoinCoolTimeMinutes\\\": 360}]}\" ) . withUploadToken ( null ) ); CurrentGuildMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateCurrentGuildMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentGuildMaster ( new Gs2 . Gs2Guild . Request . UpdateCurrentGuildMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2024-04-25\\\", \\\"guildModels\\\": [{\\\"name\\\": \\\"guild-0001\\\", \\\"defaultMaximumMemberCount\\\": 10, \\\"maximumMemberCount\\\": 50, \\\"inactivityPeriodDays\\\": 10, \\\"roles\\\": [{\\\"name\\\": \\\"master\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}, {\\\"name\\\": \\\"member\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}], \\\"guildMasterRole\\\": \\\"master\\\", \\\"guildMemberDefaultRole\\\": \\\"member\\\", \\\"rejoinCoolTimeMinutes\\\": 1440}, {\\\"name\\\": \\\"guild-0002\\\", \\\"defaultMaximumMemberCount\\\": 20, \\\"maximumMemberCount\\\": 40, \\\"inactivityPeriodDays\\\": 10, \\\"roles\\\": [{\\\"name\\\": \\\"master\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}, {\\\"name\\\": \\\"member\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}], \\\"guildMasterRole\\\": \\\"master\\\", \\\"guildMemberDefaultRole\\\": \\\"member\\\", \\\"rejoinCoolTimeMinutes\\\": 360}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateCurrentGuildMaster ( new Gs2Guild . UpdateCurrentGuildMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-04-25\\\", \\\"guildModels\\\": [{\\\"name\\\": \\\"guild-0001\\\", \\\"defaultMaximumMemberCount\\\": 10, \\\"maximumMemberCount\\\": 50, \\\"inactivityPeriodDays\\\": 10, \\\"roles\\\": [{\\\"name\\\": \\\"master\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}, {\\\"name\\\": \\\"member\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}], \\\"guildMasterRole\\\": \\\"master\\\", \\\"guildMemberDefaultRole\\\": \\\"member\\\", \\\"rejoinCoolTimeMinutes\\\": 1440}, {\\\"name\\\": \\\"guild-0002\\\", \\\"defaultMaximumMemberCount\\\": 20, \\\"maximumMemberCount\\\": 40, \\\"inactivityPeriodDays\\\": 10, \\\"roles\\\": [{\\\"name\\\": \\\"master\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}, {\\\"name\\\": \\\"member\\\", \\\"policyDocument\\\": \\\"{\\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"2016-04-01\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Statements\\\\\\\\\\\\\\\": [{\\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Actions\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\\\\\\\\\"], \\\\\\\\\\\\\\\"Resources\\\\\\\\\\\\\\\": [\\\\\\\\\\\\\\\"*\\\\\\\\\\\\\\\"]}]}\\\"}], \\\"guildMasterRole\\\": \\\"master\\\", \\\"guildMemberDefaultRole\\\": \\\"member\\\", \\\"rejoinCoolTimeMinutes\\\": 360}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_current_guild_master ( guild . UpdateCurrentGuildMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2024-04-25\", \"guildModels\": [{\"name\": \"guild-0001\", \"defaultMaximumMemberCount\": 10, \"maximumMemberCount\": 50, \"inactivityPeriodDays\": 10, \"roles\": [{\"name\": \"master\", \"policyDocument\": \"{ \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]}\"}, {\"name\": \"member\", \"policyDocument\": \"{ \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]}\"}], \"guildMasterRole\": \"master\", \"guildMemberDefaultRole\": \"member\", \"rejoinCoolTimeMinutes\": 1440}, {\"name\": \"guild-0002\", \"defaultMaximumMemberCount\": 20, \"maximumMemberCount\": 40, \"inactivityPeriodDays\": 10, \"roles\": [{\"name\": \"master\", \"policyDocument\": \"{ \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]}\"}, {\"name\": \"member\", \"policyDocument\": \"{ \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]}\"}], \"guildMasterRole\": \"master\", \"guildMemberDefaultRole\": \"member\", \"rejoinCoolTimeMinutes\": 360}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_current_guild_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-04-25 \\\" , \\\" guildModels \\\" : [{ \\\" name \\\" : \\\" guild-0001 \\\" , \\\" defaultMaximumMemberCount \\\" : 10, \\\" maximumMemberCount \\\" : 50, \\\" inactivityPeriodDays \\\" : 10, \\\" roles \\\" : [{ \\\" name \\\" : \\\" master \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }, { \\\" name \\\" : \\\" member \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }], \\\" guildMasterRole \\\" : \\\" master \\\" , \\\" guildMemberDefaultRole \\\" : \\\" member \\\" , \\\" rejoinCoolTimeMinutes \\\" : 1440}, { \\\" name \\\" : \\\" guild-0002 \\\" , \\\" defaultMaximumMemberCount \\\" : 20, \\\" maximumMemberCount \\\" : 40, \\\" inactivityPeriodDays \\\" : 10, \\\" roles \\\" : [{ \\\" name \\\" : \\\" master \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }, { \\\" name \\\" : \\\" member \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }], \\\" guildMasterRole \\\" : \\\" master \\\" , \\\" guildMemberDefaultRole \\\" : \\\" member \\\" , \\\" rejoinCoolTimeMinutes \\\" : 360}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_current_guild_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-04-25 \\\" , \\\" guildModels \\\" : [{ \\\" name \\\" : \\\" guild-0001 \\\" , \\\" defaultMaximumMemberCount \\\" : 10, \\\" maximumMemberCount \\\" : 50, \\\" inactivityPeriodDays \\\" : 10, \\\" roles \\\" : [{ \\\" name \\\" : \\\" master \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }, { \\\" name \\\" : \\\" member \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }], \\\" guildMasterRole \\\" : \\\" master \\\" , \\\" guildMemberDefaultRole \\\" : \\\" member \\\" , \\\" rejoinCoolTimeMinutes \\\" : 1440}, { \\\" name \\\" : \\\" guild-0002 \\\" , \\\" defaultMaximumMemberCount \\\" : 20, \\\" maximumMemberCount \\\" : 40, \\\" inactivityPeriodDays \\\" : 10, \\\" roles \\\" : [{ \\\" name \\\" : \\\" master \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }, { \\\" name \\\" : \\\" member \\\" , \\\" policyDocument \\\" : \\\" { \\\\\\\\\\\\\\\" Version \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" 2016-04-01 \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Statements \\\\\\\\\\\\\\\" : [{ \\\\\\\\\\\\\\\" Effect \\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\" Allow \\\\\\\\\\\\\\\" , \\\\\\\\\\\\\\\" Actions \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" Gs2Guild:UpdateGuild \\\\\\\\\\\\\\\" ], \\\\\\\\\\\\\\\" Resources \\\\\\\\\\\\\\\" : [ \\\\\\\\\\\\\\\" * \\\\\\\\\\\\\\\" ]}]} \\\" }], \\\" guildMasterRole \\\" : \\\" master \\\" , \\\" guildMemberDefaultRole \\\" : \\\" member \\\" , \\\" rejoinCoolTimeMinutes \\\" : 360}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentGuildMasterFromGitHub 현재 활성화된 길드 모델의 마스터 데이터를 GitHub에서 갱신 지정된 GitHub 리포지토리에서 길드 모델 마스터 데이터를 체크아웃하여 활성화합니다. 체크아웃 설정에서 리포지토리, 브랜치/태그, 취득할 파일 경로를 지정합니다. 길드 설정이 리포지토리에서 버전 관리되는 Git 기반의 마스터 데이터 관리 워크플로를 가능하게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentGuildMaster 갱신된 현재 활성화된 길드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentGuildMasterFromGitHub ( \u0026 guild . UpdateCurrentGuildMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 guild . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateCurrentGuildMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateCurrentGuildMasterFromGitHub ( ( new UpdateCurrentGuildMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateCurrentGuildMasterFromGitHubRequest ; import io.gs2.guild.result.UpdateCurrentGuildMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateCurrentGuildMasterFromGitHubResult result = client . updateCurrentGuildMasterFromGitHub ( new UpdateCurrentGuildMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentGuildMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateCurrentGuildMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentGuildMasterFromGitHub ( new Gs2 . Gs2Guild . Request . UpdateCurrentGuildMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Guild . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateCurrentGuildMasterFromGitHub ( new Gs2Guild . UpdateCurrentGuildMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Guild . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_current_guild_master_from_git_hub ( guild . UpdateCurrentGuildMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( guild . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_current_guild_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_current_guild_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGuildModelMasters 길드 모델 마스터 목록 조회 이름 접두사 필터링이 가능한, 편집 가능한 길드 모델 마스터 정의의 페이지네이션 리스트를 조회합니다. 마스터에 대한 변경 사항은 CurrentGuildMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 길드 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 길드 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DescribeGuildModelMasters ( \u0026 guild . DescribeGuildModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DescribeGuildModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e describeGuildModelMasters ( ( new DescribeGuildModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DescribeGuildModelMastersRequest ; import io.gs2.guild.result.DescribeGuildModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DescribeGuildModelMastersResult result = client . describeGuildModelMasters ( new DescribeGuildModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List GuildModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DescribeGuildModelMastersResult \u003e asyncResult = null ; yield return client . DescribeGuildModelMasters ( new Gs2 . Gs2Guild . Request . DescribeGuildModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . describeGuildModelMasters ( new Gs2Guild . DescribeGuildModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . describe_guild_model_masters ( guild . DescribeGuildModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.describe_guild_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'guild' ) api_result_handler = client.describe_guild_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createGuildModelMaster 길드 모델 마스터를 신규 작성 새로운 편집 가능한 길드 모델 마스터 정의를 작성합니다. 주요 설정 항목: defaultMaximumMemberCount / maximumMemberCount: 길드 멤버 용량의 초깃값과 상한 roles: 이 모델의 길드 내에서 사용 가능한 역할 정의 guildMasterRole / guildMemberDefaultRole: 생성자 및 신규 멤버에게 각각 할당되는 역할 inactivityPeriodDays: 길드 마스터의 자동 승계가 트리거되기까지의 비활성 일수 rejoinCoolTimeMinutes: 탈퇴 후 같은 길드에 다시 가입할 수 있을 때까지의 쿨다운 기간 maxConcurrentJoinGuilds: 사용자가 동시에 참가할 수 있는 길드의 최대 수 maxConcurrentGuildMasterCount: 길드별로 허용되는 길드 마스터의 최대 수 변경 사항은 CurrentGuildMaster API로 마스터 데이터를 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultMaximumMemberCount int  0 ~ 2147483646 기본 최대 멤버 수 새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다. maximumMemberCount int  0 ~ 2147483646 최대 멤버 수 상한 길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다. inactivityPeriodDays int 7 1 ~ 365 무활동 기간(일수) 길드 마스터의 무활동이 이 일수를 초과한 경우, 남은 길드 멤버 중에서 새로운 길드 마스터가 자동으로 선출됩니다. 길드 마스터가 플레이를 중단했을 때 길드가 관리 불능 상태가 되는 것을 방지합니다. roles List  1 ~ 10 items 역할 모델 목록 이 길드 모델의 길드 내에서 이용할 수 있는 역할 정의 목록입니다. guildMasterRole 및 guildMemberDefaultRole 에서 참조되는 역할을 적어도 1개 포함해야 합니다. 최대 10개의 역할을 정의할 수 있습니다. guildMasterRole string  ~ 128자 길드 마스터 역할명 길드 마스터에게 할당되는 역할의 이름입니다. roles 목록에 정의된 역할을 참조해야 합니다. 길드 마스터는 일반적으로 길드를 관리하는 모든 권한을 가집니다. guildMemberDefaultRole string  ~ 128자 기본 멤버 역할명 새로운 길드 멤버가 참가했을 때 자동으로 할당되는 역할의 이름입니다. roles 목록에 정의된 역할을 참조해야 합니다. rejoinCoolTimeMinutes int 0 0 ~ 2147483646 재가입 쿨타임(분) 사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다. maxConcurrentJoinGuilds int 1 ~ 10 동시 참가 가능 길드 최대 수 사용자가 이 타입의 길드에 동시에 멤버로 참가할 수 있는 최대 수입니다. 값은 1에서 10까지의 범위입니다. maxConcurrentGuildMasterCount int 1 ~ 100 동시 존재 가능 길드 마스터 최대 수 하나의 길드에 동시에 존재할 수 있는 길드 마스터의 최대 인원수입니다. 공동 리더십 설계를 가능하게 합니다. 값은 1에서 100까지의 범위입니다. Result 타입 설명 item GuildModelMaster 작성한 길드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . CreateGuildModelMaster ( \u0026 guild . CreateGuildModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"guild-model-0001\" ), Description : nil , Metadata : nil , DefaultMaximumMemberCount : pointy . Int32 ( 10 ), MaximumMemberCount : pointy . Int32 ( 20 ), InactivityPeriodDays : nil , Roles : [] guild . RoleModel { guild . RoleModel { Name : pointy . String ( \"master\" ), PolicyDocument : pointy . String ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), }, guild . RoleModel { Name : pointy . String ( \"member\" ), PolicyDocument : pointy . String ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), }, }, GuildMasterRole : pointy . String ( \"master\" ), GuildMemberDefaultRole : pointy . String ( \"member\" ), RejoinCoolTimeMinutes : pointy . Int32 ( 1440 ), MaxConcurrentJoinGuilds : nil , MaxConcurrentGuildMasterCount : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\CreateGuildModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e createGuildModelMaster ( ( new CreateGuildModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"guild-model-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withDefaultMaximumMemberCount ( 10 ) -\u003e withMaximumMemberCount ( 20 ) -\u003e withInactivityPeriodDays ( null ) -\u003e withRoles ([ ( new \\Gs2\\Guild\\Model\\RoleModel ()) -\u003e withName ( \"master\" ) -\u003e withPolicyDocument ( \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" ), ( new \\Gs2\\Guild\\Model\\RoleModel ()) -\u003e withName ( \"member\" ) -\u003e withPolicyDocument ( \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" ), ]) -\u003e withGuildMasterRole ( \"master\" ) -\u003e withGuildMemberDefaultRole ( \"member\" ) -\u003e withRejoinCoolTimeMinutes ( 1440 ) -\u003e withMaxConcurrentJoinGuilds ( null ) -\u003e withMaxConcurrentGuildMasterCount ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.CreateGuildModelMasterRequest ; import io.gs2.guild.result.CreateGuildModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { CreateGuildModelMasterResult result = client . createGuildModelMaster ( new CreateGuildModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"guild-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDefaultMaximumMemberCount ( 10 ) . withMaximumMemberCount ( 20 ) . withInactivityPeriodDays ( null ) . withRoles ( Arrays . asList ( new io . gs2 . guild . model . RoleModel () . withName ( \"master\" ) . withPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), new io . gs2 . guild . model . RoleModel () . withName ( \"member\" ) . withPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ) )) . withGuildMasterRole ( \"master\" ) . withGuildMemberDefaultRole ( \"member\" ) . withRejoinCoolTimeMinutes ( 1440 ) . withMaxConcurrentJoinGuilds ( null ) . withMaxConcurrentGuildMasterCount ( null ) ); GuildModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . CreateGuildModelMasterResult \u003e asyncResult = null ; yield return client . CreateGuildModelMaster ( new Gs2 . Gs2Guild . Request . CreateGuildModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"guild-model-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithDefaultMaximumMemberCount ( 10 ) . WithMaximumMemberCount ( 20 ) . WithInactivityPeriodDays ( null ) . WithRoles ( new Gs2 . Gs2Guild . Model . RoleModel [] { new Gs2 . Gs2Guild . Model . RoleModel () . WithName ( \"master\" ) . WithPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), new Gs2 . Gs2Guild . Model . RoleModel () . WithName ( \"member\" ) . WithPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), }) . WithGuildMasterRole ( \"master\" ) . WithGuildMemberDefaultRole ( \"member\" ) . WithRejoinCoolTimeMinutes ( 1440 ) . WithMaxConcurrentJoinGuilds ( null ) . WithMaxConcurrentGuildMasterCount ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . createGuildModelMaster ( new Gs2Guild . CreateGuildModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"guild-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDefaultMaximumMemberCount ( 10 ) . withMaximumMemberCount ( 20 ) . withInactivityPeriodDays ( null ) . withRoles ([ new Gs2Guild . model . RoleModel () . withName ( \"master\" ) . withPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), new Gs2Guild . model . RoleModel () . withName ( \"member\" ) . withPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), ]) . withGuildMasterRole ( \"master\" ) . withGuildMemberDefaultRole ( \"member\" ) . withRejoinCoolTimeMinutes ( 1440 ) . withMaxConcurrentJoinGuilds ( null ) . withMaxConcurrentGuildMasterCount ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . create_guild_model_master ( guild . CreateGuildModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'guild-model-0001' ) . with_description ( None ) . with_metadata ( None ) . with_default_maximum_member_count ( 10 ) . with_maximum_member_count ( 20 ) . with_inactivity_period_days ( None ) . with_roles ([ guild . RoleModel () . with_name ( 'master' ) . with_policy_document ( '{\"Version\": \"2016-04-01\", \"Statements\": [{\"Effect\": \"Allow\", \"Action\": [\"Gs2Guild:UpdateGuild\"], \"Resources\": [\"*\"]}]}' ), guild . RoleModel () . with_name ( 'member' ) . with_policy_document ( '{\"Version\": \"2016-04-01\", \"Statements\": [{\"Effect\": \"Allow\", \"Action\": [\"Gs2Guild:UpdateGuild\"], \"Resources\": [\"*\"]}]}' ), ]) . with_guild_master_role ( 'master' ) . with_guild_member_default_role ( 'member' ) . with_rejoin_cool_time_minutes ( 1440 ) . with_max_concurrent_join_guilds ( None ) . with_max_concurrent_guild_master_count ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.create_guild_model_master ({ namespaceName = \"namespace-0001\" , name = \"guild-model-0001\" , description = nil , metadata = nil , defaultMaximumMemberCount = 10 , maximumMemberCount = 20 , inactivityPeriodDays = nil , roles = { { name = \"master\" , policyDocument = \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" , }, { name = \"member\" , policyDocument = \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" , } }, guildMasterRole = \"master\" , guildMemberDefaultRole = \"member\" , rejoinCoolTimeMinutes = 1440 , maxConcurrentJoinGuilds = nil , maxConcurrentGuildMasterCount = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.create_guild_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"guild-model-0001\" , description = nil , metadata = nil , defaultMaximumMemberCount = 10 , maximumMemberCount = 20 , inactivityPeriodDays = nil , roles = { { name = \"master\" , policyDocument = \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" , }, { name = \"member\" , policyDocument = \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" , } }, guildMasterRole = \"master\" , guildMemberDefaultRole = \"member\" , rejoinCoolTimeMinutes = 1440 , maxConcurrentJoinGuilds = nil , maxConcurrentGuildMasterCount = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGuildModelMaster 길드 모델 마스터 조회 이름을 지정하여 특정 편집 가능한 길드 모델 마스터의 상세 정보를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GuildModelMaster 길드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . GetGuildModelMaster ( \u0026 guild . GetGuildModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\GetGuildModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e getGuildModelMaster ( ( new GetGuildModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.GetGuildModelMasterRequest ; import io.gs2.guild.result.GetGuildModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { GetGuildModelMasterResult result = client . getGuildModelMaster ( new GetGuildModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) ); GuildModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . GetGuildModelMasterResult \u003e asyncResult = null ; yield return client . GetGuildModelMaster ( new Gs2 . Gs2Guild . Request . GetGuildModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . getGuildModelMaster ( new Gs2Guild . GetGuildModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . get_guild_model_master ( guild . GetGuildModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.get_guild_model_master ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.get_guild_model_master_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGuildModelMaster 길드 모델 마스터 업데이트 기존 길드 모델 마스터의 설정을 업데이트합니다. 이름을 제외한 모든 속성을 변경할 수 있으며, 멤버 제한, 역할, 재가입 쿨다운, 비활성 승계 설정 등이 포함됩니다. 변경 사항은 CurrentGuildMaster API로 마스터 데이터를 다시 활성화할 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultMaximumMemberCount int  0 ~ 2147483646 기본 최대 멤버 수 새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다. maximumMemberCount int  0 ~ 2147483646 최대 멤버 수 상한 길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다. inactivityPeriodDays int 7 1 ~ 365 무활동 기간(일수) 길드 마스터의 무활동이 이 일수를 초과한 경우, 남은 길드 멤버 중에서 새로운 길드 마스터가 자동으로 선출됩니다. 길드 마스터가 플레이를 중단했을 때 길드가 관리 불능 상태가 되는 것을 방지합니다. roles List  1 ~ 10 items 역할 모델 목록 이 길드 모델의 길드 내에서 이용할 수 있는 역할 정의 목록입니다. guildMasterRole 및 guildMemberDefaultRole 에서 참조되는 역할을 적어도 1개 포함해야 합니다. 최대 10개의 역할을 정의할 수 있습니다. guildMasterRole string  ~ 128자 길드 마스터 역할명 길드 마스터에게 할당되는 역할의 이름입니다. roles 목록에 정의된 역할을 참조해야 합니다. 길드 마스터는 일반적으로 길드를 관리하는 모든 권한을 가집니다. guildMemberDefaultRole string  ~ 128자 기본 멤버 역할명 새로운 길드 멤버가 참가했을 때 자동으로 할당되는 역할의 이름입니다. roles 목록에 정의된 역할을 참조해야 합니다. rejoinCoolTimeMinutes int 0 0 ~ 2147483646 재가입 쿨타임(분) 사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다. maxConcurrentJoinGuilds int 1 ~ 10 동시 참가 가능 길드 최대 수 사용자가 이 타입의 길드에 동시에 멤버로 참가할 수 있는 최대 수입니다. 값은 1에서 10까지의 범위입니다. maxConcurrentGuildMasterCount int 1 ~ 100 동시 존재 가능 길드 마스터 최대 수 하나의 길드에 동시에 존재할 수 있는 길드 마스터의 최대 인원수입니다. 공동 리더십 설계를 가능하게 합니다. 값은 1에서 100까지의 범위입니다. Result 타입 설명 item GuildModelMaster 업데이트한 길드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . UpdateGuildModelMaster ( \u0026 guild . UpdateGuildModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), DefaultMaximumMemberCount : pointy . Int32 ( 15 ), MaximumMemberCount : pointy . Int32 ( 25 ), InactivityPeriodDays : nil , Roles : [] guild . RoleModel { guild . RoleModel { Name : pointy . String ( \"master\" ), PolicyDocument : pointy . String ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\", \\\"Gs2Guild:DeleteMember\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), }, guild . RoleModel { Name : pointy . String ( \"member\" ), PolicyDocument : pointy . String ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), }, }, GuildMasterRole : pointy . String ( \"master\" ), GuildMemberDefaultRole : pointy . String ( \"member\" ), RejoinCoolTimeMinutes : pointy . Int32 ( 4320 ), MaxConcurrentJoinGuilds : nil , MaxConcurrentGuildMasterCount : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\UpdateGuildModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e updateGuildModelMaster ( ( new UpdateGuildModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) -\u003e withDefaultMaximumMemberCount ( 15 ) -\u003e withMaximumMemberCount ( 25 ) -\u003e withInactivityPeriodDays ( null ) -\u003e withRoles ([ ( new \\Gs2\\Guild\\Model\\RoleModel ()) -\u003e withName ( \"master\" ) -\u003e withPolicyDocument ( \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" , \\\" Gs2Guild:DeleteMember \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" ), ( new \\Gs2\\Guild\\Model\\RoleModel ()) -\u003e withName ( \"member\" ) -\u003e withPolicyDocument ( \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" ), ]) -\u003e withGuildMasterRole ( \"master\" ) -\u003e withGuildMemberDefaultRole ( \"member\" ) -\u003e withRejoinCoolTimeMinutes ( 4320 ) -\u003e withMaxConcurrentJoinGuilds ( null ) -\u003e withMaxConcurrentGuildMasterCount ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.UpdateGuildModelMasterRequest ; import io.gs2.guild.result.UpdateGuildModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { UpdateGuildModelMasterResult result = client . updateGuildModelMaster ( new UpdateGuildModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withDefaultMaximumMemberCount ( 15 ) . withMaximumMemberCount ( 25 ) . withInactivityPeriodDays ( null ) . withRoles ( Arrays . asList ( new io . gs2 . guild . model . RoleModel () . withName ( \"master\" ) . withPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\", \\\"Gs2Guild:DeleteMember\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), new io . gs2 . guild . model . RoleModel () . withName ( \"member\" ) . withPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ) )) . withGuildMasterRole ( \"master\" ) . withGuildMemberDefaultRole ( \"member\" ) . withRejoinCoolTimeMinutes ( 4320 ) . withMaxConcurrentJoinGuilds ( null ) . withMaxConcurrentGuildMasterCount ( null ) ); GuildModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . UpdateGuildModelMasterResult \u003e asyncResult = null ; yield return client . UpdateGuildModelMaster ( new Gs2 . Gs2Guild . Request . UpdateGuildModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . WithDefaultMaximumMemberCount ( 15 ) . WithMaximumMemberCount ( 25 ) . WithInactivityPeriodDays ( null ) . WithRoles ( new Gs2 . Gs2Guild . Model . RoleModel [] { new Gs2 . Gs2Guild . Model . RoleModel () . WithName ( \"master\" ) . WithPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\", \\\"Gs2Guild:DeleteMember\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), new Gs2 . Gs2Guild . Model . RoleModel () . WithName ( \"member\" ) . WithPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), }) . WithGuildMasterRole ( \"master\" ) . WithGuildMemberDefaultRole ( \"member\" ) . WithRejoinCoolTimeMinutes ( 4320 ) . WithMaxConcurrentJoinGuilds ( null ) . WithMaxConcurrentGuildMasterCount ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . updateGuildModelMaster ( new Gs2Guild . UpdateGuildModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withDefaultMaximumMemberCount ( 15 ) . withMaximumMemberCount ( 25 ) . withInactivityPeriodDays ( null ) . withRoles ([ new Gs2Guild . model . RoleModel () . withName ( \"master\" ) . withPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\", \\\"Gs2Guild:DeleteMember\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), new Gs2Guild . model . RoleModel () . withName ( \"member\" ) . withPolicyDocument ( \"{\\\"Version\\\": \\\"2016-04-01\\\", \\\"Statements\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [\\\"Gs2Guild:UpdateGuild\\\"], \\\"Resources\\\": [\\\"*\\\"]}]}\" ), ]) . withGuildMasterRole ( \"master\" ) . withGuildMemberDefaultRole ( \"member\" ) . withRejoinCoolTimeMinutes ( 4320 ) . withMaxConcurrentJoinGuilds ( null ) . withMaxConcurrentGuildMasterCount ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . update_guild_model_master ( guild . UpdateGuildModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"hoge\": \"fuga\"}' ) . with_default_maximum_member_count ( 15 ) . with_maximum_member_count ( 25 ) . with_inactivity_period_days ( None ) . with_roles ([ guild . RoleModel () . with_name ( 'master' ) . with_policy_document ( '{\"Version\": \"2016-04-01\", \"Statements\": [{\"Effect\": \"Allow\", \"Action\": [\"Gs2Guild:UpdateGuild\", \"Gs2Guild:DeleteMember\"], \"Resources\": [\"*\"]}]}' ), guild . RoleModel () . with_name ( 'member' ) . with_policy_document ( '{\"Version\": \"2016-04-01\", \"Statements\": [{\"Effect\": \"Allow\", \"Action\": [\"Gs2Guild:UpdateGuild\"], \"Resources\": [\"*\"]}]}' ), ]) . with_guild_master_role ( 'master' ) . with_guild_member_default_role ( 'member' ) . with_rejoin_cool_time_minutes ( 4320 ) . with_max_concurrent_join_guilds ( None ) . with_max_concurrent_guild_master_count ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.update_guild_model_master ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , defaultMaximumMemberCount = 15 , maximumMemberCount = 25 , inactivityPeriodDays = nil , roles = { { name = \"master\" , policyDocument = \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" , \\\" Gs2Guild:DeleteMember \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" , }, { name = \"member\" , policyDocument = \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" , } }, guildMasterRole = \"master\" , guildMemberDefaultRole = \"member\" , rejoinCoolTimeMinutes = 4320 , maxConcurrentJoinGuilds = nil , maxConcurrentGuildMasterCount = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.update_guild_model_master_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , defaultMaximumMemberCount = 15 , maximumMemberCount = 25 , inactivityPeriodDays = nil , roles = { { name = \"master\" , policyDocument = \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" , \\\" Gs2Guild:DeleteMember \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" , }, { name = \"member\" , policyDocument = \"{ \\\" Version \\\" : \\\" 2016-04-01 \\\" , \\\" Statements \\\" : [{ \\\" Effect \\\" : \\\" Allow \\\" , \\\" Action \\\" : [ \\\" Gs2Guild:UpdateGuild \\\" ], \\\" Resources \\\" : [ \\\" * \\\" ]}]}\" , } }, guildMasterRole = \"master\" , guildMemberDefaultRole = \"member\" , rejoinCoolTimeMinutes = 4320 , maxConcurrentJoinGuilds = nil , maxConcurrentGuildMasterCount = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGuildModelMaster 길드 모델 마스터 삭제 편집 가능한 길드 모델 마스터 정의를 삭제합니다. 마스터 데이터만 영향을 받으며, 현재 활성화(공개)되어 있는 모델은 마스터 데이터가 다시 활성화될 때까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GuildModelMaster 삭제한 길드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/guild\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := guild . Gs2GuildRestClient { Session : \u0026 session , } result , err := client . DeleteGuildModelMaster ( \u0026 guild . DeleteGuildModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GuildModelName : pointy . String ( \"guild-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Guild\\Gs2GuildRestClient ; use Gs2\\Guild\\Request\\DeleteGuildModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2GuildRestClient ( $session ); try { $result = $client -\u003e deleteGuildModelMaster ( ( new DeleteGuildModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGuildModelName ( \"guild-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.guild.rest.Gs2GuildRestClient ; import io.gs2.guild.request.DeleteGuildModelMasterRequest ; import io.gs2.guild.result.DeleteGuildModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2GuildRestClient client = new Gs2GuildRestClient ( session ); try { DeleteGuildModelMasterResult result = client . deleteGuildModelMaster ( new DeleteGuildModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) ); GuildModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2GuildRestClient ( session ); AsyncResult Gs2 . Gs2Guild . Result . DeleteGuildModelMasterResult \u003e asyncResult = null ; yield return client . DeleteGuildModelMaster ( new Gs2 . Gs2Guild . Request . DeleteGuildModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGuildModelName ( \"guild-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Guild from '@/gs2/guild' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Guild . Gs2GuildRestClient ( session ); try { const result = await client . deleteGuildModelMaster ( new Gs2Guild . DeleteGuildModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGuildModelName ( \"guild-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import guild session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = guild . Gs2GuildRestClient ( session ) try : result = client . delete_guild_model_master ( guild . DeleteGuildModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_guild_model_name ( 'guild-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'guild' ) api_result = client.delete_guild_model_master ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'guild' ) api_result_handler = client.delete_guild_model_master_async ({ namespaceName = \"namespace-0001\" , guildModelName = \"guild-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Guild SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Guild SDK API 레퍼런스","url":"/ko/api_reference/guild/sdk/"},{"content":"모델 Identifier 크레덴셜 GS2 API에 액세스하기 위해 사용되는 크레덴셜입니다. 크레덴셜은 클라이언트 ID와 클라이언트 시크릿으로 구성되며, 크레덴셜을 사용한 액세스는 크레덴셜 소유자인 사용자의 권한에 따라 액세스가 제한됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 clientId string  UUID ~ 256자 클라이언트ID userName string  ~ 128자 사용자 이름 이 크레덴셜을 소유한 GS2-Identifier 사용자의 이름입니다. 크레덴셜은 이 사용자에게 연결된 보안 정책에 따라 권한을 상속받습니다. clientSecret string  UUID ~ 100자 클라이언트 시크릿 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Password 비밀번호 사용자의 권한에 따라 매니지먼트 콘솔에 로그인하기 위한 비밀번호입니다. 비밀번호를 설정하면 하나의 프로젝트에 서로 다른 계정으로 로그인할 수 있으며, 접근 가능한 정보에 제한을 둘 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 passwordId string ※ ~ 1024자 패스워드 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 1024자 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN userName string  ~ 128자 사용자 이름 이 비밀번호를 소유하는 GS2-Identifier 사용자의 이름입니다. 사용자는 이 사용자 이름과 대응하는 비밀번호로 매니지먼트 콘솔에 로그인하며, 사용자에게 할당된 보안 정책에 따라 접근이 제한됩니다. enableTwoFactorAuthentication 문자열 열거형 enum {   “RFC6238”,   “Disable” } “Disable” 2단계 인증 이 비밀번호로 매니지먼트 콘솔에 로그인할 때 TOTP 기반 2단계 인증(RFC 6238)을 필요로 할지를 제어합니다. “RFC6238\"로 설정하면 사용자는 비밀번호에 더해 인증 앱의 유효한 일회용 코드를 제공해야 합니다. “Disable\"로 설정하면 비밀번호만 필요합니다. 정의 설명 RFC6238 활성화 Disable 비활성화 twoFactorAuthenticationSetting TwoFactorAuthenticationSetting {enableTwoFactorAuthentication} == “RFC6238” 2단계 인증 설정 이 비밀번호의 TOTP 설정으로, 공유 비밀 키와 설정 상태를 포함합니다. enableTwoFactorAuthentication이 “RFC6238\"로 설정된 경우에만 존재합니다. 사용자가 인증 앱 설정을 완료했는지를 추적하는 검증 상태(Verifying/Enable)를 포함합니다. ※ enableTwoFactorAuthentication이(가) “RFC6238” 이면 활성화 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 AttachSecurityPolicy 할당된 보안 정책 GS2-Identifier 사용자와 보안 정책의 연결을 관리합니다. 각 사용자는 해당 사용자에게 적용되는 보안 정책 GRN 목록을 포함하는 하나의 할당 레코드를 가집니다. 사용자의 크리덴셜이 API 접근에 사용될 때, 할당된 모든 정책이 평가되어 요청된 작업이 허용되는지 거부되는지가 판정됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string ※ ~ 1024자 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 securityPolicyIds List [] 0 ~ 100 items 보안 정책 GRN 목록 이 사용자에게 할당된 보안 정책 목록입니다. 여러 정책을 할당할 수 있으며, 그 권한은 결합(합집합)됩니다. 할당된 정책 중 하나라도 액션을 허용하면 해당 액션은 허용됩니다. 사용자당 최대 100개의 정책을 할당할 수 있습니다. attachedAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 User GS2-Identifier 사용자 프로젝트에 접근 가능한 게임 개발자를 나타내는 엔티티입니다. 사용자는 프로그램에서 접근하기 위한 크리덴셜과, 사용자의 권한에 따라 매니지먼트 콘솔에 로그인하여 프로젝트를 관리할 수 있는 비밀번호를 등록할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string ※ ~ 1024자 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SecurityPolicy 보안 정책 사용자가 사용할 수 있는 API의 종류와 접근 가능한 리소스의 제한을 정의합니다. 접근 제한 규칙은 정책 문서라는 JSON 형식의 정의 데이터를 사용합니다. 정책 문서의 사양에 대해서는 개발 문서 내 정책 문서에 대한 설명 페이지 를 참조하십시오. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 securityPolicyId string ※ ~ 1024자 보안 정책 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 보안 정책 이름 보안 정책 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 policy string  ~ 524288자 정책 문서 이 보안 정책의 접근 제어 규칙을 정의하는 JSON 문서입니다. 어떤 GS2 API 액션을 허용 또는 거부할지, 그리고 규칙이 적용되는 리소스(GRN 패턴으로 식별)를 지정합니다. 여러 스테이트먼트를 조합하여 세밀한 접근 제어를 만들 수 있습니다. 최대 512KB입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 ProjectToken 프로젝트 토큰 크리덴셜(클라이언트 ID와 클라이언트 시크릿)로 인증하여 발행되는 임시 접근 토큰입니다. 이 토큰은 프로젝트 내 모든 GS2 API 호출의 인가에 사용됩니다. 토큰에는 유효 기간이 있으며, 정기적으로 갱신해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 token string ~ 1024자 프로젝트 토큰 API 인증에 사용되는 토큰 문자열입니다. 크리덴셜로 로그인에 성공하면 생성됩니다. 최대 1024자입니다. TwoFactorAuthenticationSetting 2단계 인증 설정 매니지먼트 콘솔 비밀번호에 대한 TOTP 기반 2단계 인증(RFC 6238) 설정입니다. 시간 기반 일회용 비밀번호의 생성과 검증에 사용되는 공유 비밀 키를 저장합니다. 사용자가 인증 앱을 올바르게 설정했는지 확인하기 위해, 완전히 활성화되기 전에 검증 단계를 거칩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 status 문자열 열거형 enum {   “Verifying”,   “Enable” } “Verifying” 상태 2단계 인증 설정의 현재 상태입니다. “Verifying\"은 사용자가 설정을 시작했지만 아직 인증 앱의 유효한 TOTP 코드를 확인하지 않았음을 나타냅니다. “Enable\"은 설정이 완료되어 콘솔 로그인 시 2단계 인증이 실제로 적용되고 있음을 나타냅니다. 정의 설명 Verifying 검증 중 Enable 활성화 메서드 describeIdentifiers 크리덴셜 목록 취득 지정된 사용자와 연결된 OAuth 크리덴셜(클라이언트 ID/시크릿 쌍)의 페이지네이션 리스트를 취득합니다. 크리덴셜은 Login API를 사용하여 프로젝트 토큰을 취득하기 위한 프로그램 방식의 인증에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 크리덴셜 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DescribeIdentifiers ( \u0026 identifier . DescribeIdentifiersRequest { UserName : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DescribeIdentifiersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e describeIdentifiers ( ( new DescribeIdentifiersRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DescribeIdentifiersRequest ; import io.gs2.identifier.result.DescribeIdentifiersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DescribeIdentifiersResult result = client . describeIdentifiers ( new DescribeIdentifiersRequest () . withUserName ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Identifier \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DescribeIdentifiersResult \u003e asyncResult = null ; yield return client . DescribeIdentifiers ( new Gs2 . Gs2Identifier . Request . DescribeIdentifiersRequest () . WithUserName ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . describeIdentifiers ( new Gs2Identifier . DescribeIdentifiersRequest () . withUserName ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . describe_identifiers ( identifier . DescribeIdentifiersRequest () . with_user_name ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.describe_identifiers ({ userName = \"user-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'identifier' ) api_result_handler = client.describe_identifiers_async ({ userName = \"user-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createIdentifier 크리덴셜을 신규 작성 지정된 사용자에 대해 새로운 OAuth 크리덴셜(클라이언트 ID와 클라이언트 시크릿)을 생성합니다. 클라이언트 시크릿은 이 응답에서만 반환되며, 이후에는 다시 취득할 수 없습니다. 안전하게 보관하십시오. 크리덴셜은 Login API로 프로젝트 토큰을 취득하기 위한 프로그램 방식의 API 액세스에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 크레덴셜을 소유한 GS2-Identifier 사용자의 이름입니다. 크레덴셜은 이 사용자에게 연결된 보안 정책에 따라 권한을 상속받습니다. Result 타입 설명 item Identifier 작성한 크리덴셜 clientSecret string 클라이언트 시크릿 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . CreateIdentifier ( \u0026 identifier . CreateIdentifierRequest { UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item clientSecret := result . ClientSecret use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\CreateIdentifierRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e createIdentifier ( ( new CreateIdentifierRequest ()) -\u003e withUserName ( \"user-0001\" ) ); $item = $result -\u003e getItem (); $clientSecret = $result -\u003e getClientSecret (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.CreateIdentifierRequest ; import io.gs2.identifier.result.CreateIdentifierResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { CreateIdentifierResult result = client . createIdentifier ( new CreateIdentifierRequest () . withUserName ( \"user-0001\" ) ); Identifier item = result . getItem (); String clientSecret = result . getClientSecret (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . CreateIdentifierResult \u003e asyncResult = null ; yield return client . CreateIdentifier ( new Gs2 . Gs2Identifier . Request . CreateIdentifierRequest () . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var clientSecret = result . ClientSecret ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . createIdentifier ( new Gs2Identifier . CreateIdentifierRequest () . withUserName ( \"user-0001\" ) ); const item = result . getItem (); const clientSecret = result . getClientSecret (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . create_identifier ( identifier . CreateIdentifierRequest () . with_user_name ( 'user-0001' ) ) item = result . item client_secret = result . client_secret except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.create_identifier ({ userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; clientSecret = result.clientSecret ; client = gs2 ( 'identifier' ) api_result_handler = client.create_identifier_async ({ userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; clientSecret = result.clientSecret ; getIdentifier 크리덴셜을 취득 클라이언트 ID로 식별되는 특정 크리덴셜의 메타데이터를 취득합니다. 보안상의 이유로 클라이언트 시크릿은 응답에 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 크레덴셜을 소유한 GS2-Identifier 사용자의 이름입니다. 크레덴셜은 이 사용자에게 연결된 보안 정책에 따라 권한을 상속받습니다. clientId string  UUID ~ 256자 클라이언트ID Result 타입 설명 item Identifier 크리덴셜 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . GetIdentifier ( \u0026 identifier . GetIdentifierRequest { UserName : pointy . String ( \"user-0001\" ), ClientId : pointy . String ( \"client-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\GetIdentifierRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e getIdentifier ( ( new GetIdentifierRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withClientId ( \"client-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.GetIdentifierRequest ; import io.gs2.identifier.result.GetIdentifierResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { GetIdentifierResult result = client . getIdentifier ( new GetIdentifierRequest () . withUserName ( \"user-0001\" ) . withClientId ( \"client-0001\" ) ); Identifier item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . GetIdentifierResult \u003e asyncResult = null ; yield return client . GetIdentifier ( new Gs2 . Gs2Identifier . Request . GetIdentifierRequest () . WithUserName ( \"user-0001\" ) . WithClientId ( \"client-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . getIdentifier ( new Gs2Identifier . GetIdentifierRequest () . withUserName ( \"user-0001\" ) . withClientId ( \"client-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . get_identifier ( identifier . GetIdentifierRequest () . with_user_name ( 'user-0001' ) . with_client_id ( 'client-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.get_identifier ({ userName = \"user-0001\" , clientId = \"client-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.get_identifier_async ({ userName = \"user-0001\" , clientId = \"client-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteIdentifier 크리덴셜을 삭제 지정된 크리덴셜을 무효화하여 삭제합니다. 삭제 후 클라이언트 ID와 클라이언트 시크릿은 인증에 사용할 수 없게 됩니다. 이 크리덴셜로 이미 취득한 프로젝트 토큰은 유효 기간까지 유효합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 크레덴셜을 소유한 GS2-Identifier 사용자의 이름입니다. 크레덴셜은 이 사용자에게 연결된 보안 정책에 따라 권한을 상속받습니다. clientId string  UUID ~ 256자 클라이언트ID Result 타입 설명 item Identifier 크리덴셜 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DeleteIdentifier ( \u0026 identifier . DeleteIdentifierRequest { UserName : pointy . String ( \"user-0001\" ), ClientId : pointy . String ( \"client-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DeleteIdentifierRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e deleteIdentifier ( ( new DeleteIdentifierRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withClientId ( \"client-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DeleteIdentifierRequest ; import io.gs2.identifier.result.DeleteIdentifierResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DeleteIdentifierResult result = client . deleteIdentifier ( new DeleteIdentifierRequest () . withUserName ( \"user-0001\" ) . withClientId ( \"client-0001\" ) ); Identifier item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DeleteIdentifierResult \u003e asyncResult = null ; yield return client . DeleteIdentifier ( new Gs2 . Gs2Identifier . Request . DeleteIdentifierRequest () . WithUserName ( \"user-0001\" ) . WithClientId ( \"client-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . deleteIdentifier ( new Gs2Identifier . DeleteIdentifierRequest () . withUserName ( \"user-0001\" ) . withClientId ( \"client-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . delete_identifier ( identifier . DeleteIdentifierRequest () . with_user_name ( 'user-0001' ) . with_client_id ( 'client-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.delete_identifier ({ userName = \"user-0001\" , clientId = \"client-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.delete_identifier_async ({ userName = \"user-0001\" , clientId = \"client-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeAttachedGuards 할당된 GS2-Guard Namespace GRN 목록 취득 지정된 크리덴셜에 할당된 GS2-Guard 네임스페이스의 리스트를 취득합니다. 가드가 할당되어 있는 경우, 이 크리덴셜을 사용한 API 요청은 가드 서비스에서 정의된 추가 액세스 제어 검사(IP 기반 차단 등)의 대상이 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 clientId string  UUID ~ 256자 클라이언트ID userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List GS2-Guard Namespace GRN의 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DescribeAttachedGuards ( \u0026 identifier . DescribeAttachedGuardsRequest { ClientId : pointy . String ( \"client-0001\" ), UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DescribeAttachedGuardsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e describeAttachedGuards ( ( new DescribeAttachedGuardsRequest ()) -\u003e withClientId ( \"client-0001\" ) -\u003e withUserName ( \"user-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DescribeAttachedGuardsRequest ; import io.gs2.identifier.result.DescribeAttachedGuardsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DescribeAttachedGuardsResult result = client . describeAttachedGuards ( new DescribeAttachedGuardsRequest () . withClientId ( \"client-0001\" ) . withUserName ( \"user-0001\" ) ); List String \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DescribeAttachedGuardsResult \u003e asyncResult = null ; yield return client . DescribeAttachedGuards ( new Gs2 . Gs2Identifier . Request . DescribeAttachedGuardsRequest () . WithClientId ( \"client-0001\" ) . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . describeAttachedGuards ( new Gs2Identifier . DescribeAttachedGuardsRequest () . withClientId ( \"client-0001\" ) . withUserName ( \"user-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . describe_attached_guards ( identifier . DescribeAttachedGuardsRequest () . with_client_id ( 'client-0001' ) . with_user_name ( 'user-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.describe_attached_guards ({ clientId = \"client-0001\" , userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'identifier' ) api_result_handler = client.describe_attached_guards_async ({ clientId = \"client-0001\" , userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; attachGuard 크리덴셜에 GS2-Guard Namespace GRN을 할당 추가적인 액세스 제어를 위해 GS2-Guard 네임스페이스를 지정된 크리덴셜에 할당합니다. 할당 후, 이 크리덴셜을 사용한 API 요청은 가드의 차단 정책(IP 감지, 익명 IP 필터링, 평판 기반 필터링 등)으로 검증됩니다. 조작 후 크리덴셜에 할당된 가드 네임스페이스의 전체 리스트를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clientId string  UUID ~ 256자 클라이언트ID guardNamespaceId string  ~ 1024자 할당할 GS2-Guard Namespace GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 items List GS2-Guard Namespace GRN의 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . AttachGuard ( \u0026 identifier . AttachGuardRequest { UserName : pointy . String ( \"user-0001\" ), ClientId : pointy . String ( \"client-0001\" ), GuardNamespaceId : pointy . String ( \"guard-namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\AttachGuardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e attachGuard ( ( new AttachGuardRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withClientId ( \"client-0001\" ) -\u003e withGuardNamespaceId ( \"guard-namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.AttachGuardRequest ; import io.gs2.identifier.result.AttachGuardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { AttachGuardResult result = client . attachGuard ( new AttachGuardRequest () . withUserName ( \"user-0001\" ) . withClientId ( \"client-0001\" ) . withGuardNamespaceId ( \"guard-namespace-0001\" ) ); List String \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . AttachGuardResult \u003e asyncResult = null ; yield return client . AttachGuard ( new Gs2 . Gs2Identifier . Request . AttachGuardRequest () . WithUserName ( \"user-0001\" ) . WithClientId ( \"client-0001\" ) . WithGuardNamespaceId ( \"guard-namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . attachGuard ( new Gs2Identifier . AttachGuardRequest () . withUserName ( \"user-0001\" ) . withClientId ( \"client-0001\" ) . withGuardNamespaceId ( \"guard-namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . attach_guard ( identifier . AttachGuardRequest () . with_user_name ( 'user-0001' ) . with_client_id ( 'client-0001' ) . with_guard_namespace_id ( 'guard-namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.attach_guard ({ userName = \"user-0001\" , clientId = \"client-0001\" , guardNamespaceId = \"guard-namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'identifier' ) api_result_handler = client.attach_guard_async ({ userName = \"user-0001\" , clientId = \"client-0001\" , guardNamespaceId = \"guard-namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; detachGuard GS2-Guard Namespace GRN을 크리덴셜에서 제외합니다 지정된 크리덴셜에서 GS2-Guard 네임스페이스를 삭제합니다. 삭제 후, 이 크리덴셜을 사용한 API 요청은 해당 가드의 액세스 제어 검사 대상이 아니게 됩니다. 크리덴셜에 계속 할당되어 있는 가드 네임스페이스의 리스트를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clientId string  UUID ~ 256자 클라이언트ID guardNamespaceId string  ~ 1024자 GS2-Guard Namespace의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 items List GS2-Guard Namespace GRN의 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DetachGuard ( \u0026 identifier . DetachGuardRequest { UserName : pointy . String ( \"user-0001\" ), ClientId : pointy . String ( \"client-0001\" ), GuardNamespaceId : pointy . String ( \"guard-namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DetachGuardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e detachGuard ( ( new DetachGuardRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withClientId ( \"client-0001\" ) -\u003e withGuardNamespaceId ( \"guard-namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DetachGuardRequest ; import io.gs2.identifier.result.DetachGuardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DetachGuardResult result = client . detachGuard ( new DetachGuardRequest () . withUserName ( \"user-0001\" ) . withClientId ( \"client-0001\" ) . withGuardNamespaceId ( \"guard-namespace-0001\" ) ); List String \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DetachGuardResult \u003e asyncResult = null ; yield return client . DetachGuard ( new Gs2 . Gs2Identifier . Request . DetachGuardRequest () . WithUserName ( \"user-0001\" ) . WithClientId ( \"client-0001\" ) . WithGuardNamespaceId ( \"guard-namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . detachGuard ( new Gs2Identifier . DetachGuardRequest () . withUserName ( \"user-0001\" ) . withClientId ( \"client-0001\" ) . withGuardNamespaceId ( \"guard-namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . detach_guard ( identifier . DetachGuardRequest () . with_user_name ( 'user-0001' ) . with_client_id ( 'client-0001' ) . with_guard_namespace_id ( 'guard-namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.detach_guard ({ userName = \"user-0001\" , clientId = \"client-0001\" , guardNamespaceId = \"guard-namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'identifier' ) api_result_handler = client.detach_guard_async ({ userName = \"user-0001\" , clientId = \"client-0001\" , guardNamespaceId = \"guard-namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 identifier . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.GetServiceVersionRequest ; import io.gs2.identifier.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Identifier . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Identifier . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . get_service_version ( identifier . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createPassword 패스워드를 신규 작성 지정된 GS2-Identifier 사용자의 패스워드 크리덴셜을 작성합니다. 작성 후, 사용자는 LoginByUser API를 사용하여 사용자 이름과 패스워드로 인증하고 프로젝트 토큰을 취득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 비밀번호를 소유하는 GS2-Identifier 사용자의 이름입니다. 사용자는 이 사용자 이름과 대응하는 비밀번호로 매니지먼트 콘솔에 로그인하며, 사용자에게 할당된 보안 정책에 따라 접근이 제한됩니다. password string  ~ 1024자 비밀번호 매니지먼트 콘솔 인증에 사용되는 해시화된 비밀번호입니다. 비밀번호 생성 시 설정되며, 로그인 시 사용자 입력과 대조됩니다. 내부적으로 저장되며, API를 통해 반환되지 않습니다. Result 타입 설명 item Password 작성한 패스워드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . CreatePassword ( \u0026 identifier . CreatePasswordRequest { UserName : pointy . String ( \"user-0001\" ), Password : pointy . String ( \"password-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\CreatePasswordRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e createPassword ( ( new CreatePasswordRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withPassword ( \"password-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.CreatePasswordRequest ; import io.gs2.identifier.result.CreatePasswordResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { CreatePasswordResult result = client . createPassword ( new CreatePasswordRequest () . withUserName ( \"user-0001\" ) . withPassword ( \"password-0001\" ) ); Password item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . CreatePasswordResult \u003e asyncResult = null ; yield return client . CreatePassword ( new Gs2 . Gs2Identifier . Request . CreatePasswordRequest () . WithUserName ( \"user-0001\" ) . WithPassword ( \"password-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . createPassword ( new Gs2Identifier . CreatePasswordRequest () . withUserName ( \"user-0001\" ) . withPassword ( \"password-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . create_password ( identifier . CreatePasswordRequest () . with_user_name ( 'user-0001' ) . with_password ( 'password-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.create_password ({ userName = \"user-0001\" , password = \"password-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.create_password_async ({ userName = \"user-0001\" , password = \"password-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getPassword 패스워드를 취득 지정된 사용자의 패스워드 메타데이터를 취득합니다. 실제 패스워드 값은 반환되지 않습니다. MFA 설정이나 작성 시각 등의 메타데이터만 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 비밀번호를 소유하는 GS2-Identifier 사용자의 이름입니다. 사용자는 이 사용자 이름과 대응하는 비밀번호로 매니지먼트 콘솔에 로그인하며, 사용자에게 할당된 보안 정책에 따라 접근이 제한됩니다. Result 타입 설명 item Password 비밀번호 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . GetPassword ( \u0026 identifier . GetPasswordRequest { UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\GetPasswordRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e getPassword ( ( new GetPasswordRequest ()) -\u003e withUserName ( \"user-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.GetPasswordRequest ; import io.gs2.identifier.result.GetPasswordResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { GetPasswordResult result = client . getPassword ( new GetPasswordRequest () . withUserName ( \"user-0001\" ) ); Password item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . GetPasswordResult \u003e asyncResult = null ; yield return client . GetPassword ( new Gs2 . Gs2Identifier . Request . GetPasswordRequest () . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . getPassword ( new Gs2Identifier . GetPasswordRequest () . withUserName ( \"user-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . get_password ( identifier . GetPasswordRequest () . with_user_name ( 'user-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.get_password ({ userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.get_password_async ({ userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; enableMfa MFA를 활성화 지정된 사용자의 TOTP(Time-based One-Time Password) 기반 다요소 인증 설정을 시작합니다. TOTP 시크릿 키를 생성하고 MFA 상태를 “Verifying\"으로 설정합니다. TOTP 패스코드를 검증하여 설정을 완료하기 위해 ChallengeMfa API에서 사용할 챌린지 토큰을 반환합니다. MFA가 이미 활성화되어 있는 경우 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 비밀번호를 소유하는 GS2-Identifier 사용자의 이름입니다. 사용자는 이 사용자 이름과 대응하는 비밀번호로 매니지먼트 콘솔에 로그인하며, 사용자에게 할당된 보안 정책에 따라 접근이 제한됩니다. Result 타입 설명 item Password 업데이트한 패스워드 challengeToken string Challenge Token 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . EnableMfa ( \u0026 identifier . EnableMfaRequest { UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item challengeToken := result . ChallengeToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\EnableMfaRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e enableMfa ( ( new EnableMfaRequest ()) -\u003e withUserName ( \"user-0001\" ) ); $item = $result -\u003e getItem (); $challengeToken = $result -\u003e getChallengeToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.EnableMfaRequest ; import io.gs2.identifier.result.EnableMfaResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { EnableMfaResult result = client . enableMfa ( new EnableMfaRequest () . withUserName ( \"user-0001\" ) ); Password item = result . getItem (); String challengeToken = result . getChallengeToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . EnableMfaResult \u003e asyncResult = null ; yield return client . EnableMfa ( new Gs2 . Gs2Identifier . Request . EnableMfaRequest () . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var challengeToken = result . ChallengeToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . enableMfa ( new Gs2Identifier . EnableMfaRequest () . withUserName ( \"user-0001\" ) ); const item = result . getItem (); const challengeToken = result . getChallengeToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . enable_mfa ( identifier . EnableMfaRequest () . with_user_name ( 'user-0001' ) ) item = result . item challenge_token = result . challenge_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.enable_mfa ({ userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; challengeToken = result.challengeToken ; client = gs2 ( 'identifier' ) api_result_handler = client.enable_mfa_async ({ userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; challengeToken = result.challengeToken ; challengeMfa MFA 유효성 확인 6자리 TOTP(Time-based One-Time Password) 코드를 검증하여 MFA 설정을 완료합니다. MFA 상태가 “Verifying”(EnableMfa로 설정됨)이어야 합니다. 그렇지 않으면 오류가 반환됩니다. 검증 성공 후 MFA 상태가 “Enable\"로 변경되며, 이후 LoginByUser를 통한 로그인에는 TOTP 코드가 필요합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 비밀번호를 소유하는 GS2-Identifier 사용자의 이름입니다. 사용자는 이 사용자 이름과 대응하는 비밀번호로 매니지먼트 콘솔에 로그인하며, 사용자에게 할당된 보안 정책에 따라 접근이 제한됩니다. passcode string  6 ~ 6자 일회용 비밀번호 코드 Result 타입 설명 item Password 업데이트한 패스워드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . ChallengeMfa ( \u0026 identifier . ChallengeMfaRequest { UserName : pointy . String ( \"user-0001\" ), Passcode : pointy . String ( \"012345\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\ChallengeMfaRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e challengeMfa ( ( new ChallengeMfaRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withPasscode ( \"012345\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.ChallengeMfaRequest ; import io.gs2.identifier.result.ChallengeMfaResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { ChallengeMfaResult result = client . challengeMfa ( new ChallengeMfaRequest () . withUserName ( \"user-0001\" ) . withPasscode ( \"012345\" ) ); Password item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . ChallengeMfaResult \u003e asyncResult = null ; yield return client . ChallengeMfa ( new Gs2 . Gs2Identifier . Request . ChallengeMfaRequest () . WithUserName ( \"user-0001\" ) . WithPasscode ( \"012345\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . challengeMfa ( new Gs2Identifier . ChallengeMfaRequest () . withUserName ( \"user-0001\" ) . withPasscode ( \"012345\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . challenge_mfa ( identifier . ChallengeMfaRequest () . with_user_name ( 'user-0001' ) . with_passcode ( '012345' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.challenge_mfa ({ userName = \"user-0001\" , passcode = \"012345\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.challenge_mfa_async ({ userName = \"user-0001\" , passcode = \"012345\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; disableMfa MFA를 비활성화 지정된 사용자의 다요소 인증을 비활성화합니다. TOTP 시크릿 키와 MFA 설정이 초기화됩니다. 이후 로그인에서는 패스워드 인증만 필요하게 됩니다. MFA가 이미 비활성화되어 있는 경우 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 비밀번호를 소유하는 GS2-Identifier 사용자의 이름입니다. 사용자는 이 사용자 이름과 대응하는 비밀번호로 매니지먼트 콘솔에 로그인하며, 사용자에게 할당된 보안 정책에 따라 접근이 제한됩니다. Result 타입 설명 item Password 업데이트한 패스워드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DisableMfa ( \u0026 identifier . DisableMfaRequest { UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DisableMfaRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e disableMfa ( ( new DisableMfaRequest ()) -\u003e withUserName ( \"user-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DisableMfaRequest ; import io.gs2.identifier.result.DisableMfaResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DisableMfaResult result = client . disableMfa ( new DisableMfaRequest () . withUserName ( \"user-0001\" ) ); Password item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DisableMfaResult \u003e asyncResult = null ; yield return client . DisableMfa ( new Gs2 . Gs2Identifier . Request . DisableMfaRequest () . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . disableMfa ( new Gs2Identifier . DisableMfaRequest () . withUserName ( \"user-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . disable_mfa ( identifier . DisableMfaRequest () . with_user_name ( 'user-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.disable_mfa ({ userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.disable_mfa_async ({ userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deletePassword 패스워드를 삭제 지정된 사용자의 패스워드 크리덴셜을 삭제합니다. 삭제 후, 사용자는 LoginByUser API로 인증할 수 없게 됩니다. MFA 설정도 함께 삭제됩니다. Login API를 통한 크리덴셜 기반 인증(클라이언트 ID/시크릿)은 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 비밀번호를 소유하는 GS2-Identifier 사용자의 이름입니다. 사용자는 이 사용자 이름과 대응하는 비밀번호로 매니지먼트 콘솔에 로그인하며, 사용자에게 할당된 보안 정책에 따라 접근이 제한됩니다. Result 타입 설명 item Password 비밀번호 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DeletePassword ( \u0026 identifier . DeletePasswordRequest { UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DeletePasswordRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e deletePassword ( ( new DeletePasswordRequest ()) -\u003e withUserName ( \"user-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DeletePasswordRequest ; import io.gs2.identifier.result.DeletePasswordResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DeletePasswordResult result = client . deletePassword ( new DeletePasswordRequest () . withUserName ( \"user-0001\" ) ); Password item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DeletePasswordResult \u003e asyncResult = null ; yield return client . DeletePassword ( new Gs2 . Gs2Identifier . Request . DeletePasswordRequest () . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . deletePassword ( new Gs2Identifier . DeletePasswordRequest () . withUserName ( \"user-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . delete_password ( identifier . DeletePasswordRequest () . with_user_name ( 'user-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.delete_password ({ userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.delete_password_async ({ userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getHasSecurityPolicy 할당된 보안 정책 목록 취득 지정된 사용자에게 현재 할당되어 있는 모든 보안 정책을 취득합니다. 할당된 정책의 조합에 따라 사용자의 유효한 API 권한이 결정됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 보안 정책 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . GetHasSecurityPolicy ( \u0026 identifier . GetHasSecurityPolicyRequest { UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\GetHasSecurityPolicyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e getHasSecurityPolicy ( ( new GetHasSecurityPolicyRequest ()) -\u003e withUserName ( \"user-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.GetHasSecurityPolicyRequest ; import io.gs2.identifier.result.GetHasSecurityPolicyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { GetHasSecurityPolicyResult result = client . getHasSecurityPolicy ( new GetHasSecurityPolicyRequest () . withUserName ( \"user-0001\" ) ); List SecurityPolicy \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . GetHasSecurityPolicyResult \u003e asyncResult = null ; yield return client . GetHasSecurityPolicy ( new Gs2 . Gs2Identifier . Request . GetHasSecurityPolicyRequest () . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . getHasSecurityPolicy ( new Gs2Identifier . GetHasSecurityPolicyRequest () . withUserName ( \"user-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . get_has_security_policy ( identifier . GetHasSecurityPolicyRequest () . with_user_name ( 'user-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.get_has_security_policy ({ userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'identifier' ) api_result_handler = client.get_has_security_policy_async ({ userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; attachSecurityPolicy 사용자에게 보안 정책을 할당 GRN을 지정하여 보안 정책을 사용자에게 할당합니다. 할당 전에 정책이 로드 및 검증됩니다. 커스텀 정책과 GS2에서 정의한 공통 정책 모두 할당할 수 있습니다. 사용자에게는 여러 정책을 할당할 수 있으며, 유효한 권한은 할당된 모든 정책의 합집합이 됩니다. 작업 후 사용자에게 현재 할당되어 있는 보안 정책의 전체 목록을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. securityPolicyId string  ~ 1024자 할당할 보안 정책의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 items List 사용자에게 할당한 보안 정책 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . AttachSecurityPolicy ( \u0026 identifier . AttachSecurityPolicyRequest { UserName : pointy . String ( \"user-0001\" ), SecurityPolicyId : pointy . String ( \"securityPolicyId-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\AttachSecurityPolicyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e attachSecurityPolicy ( ( new AttachSecurityPolicyRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withSecurityPolicyId ( \"securityPolicyId-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.AttachSecurityPolicyRequest ; import io.gs2.identifier.result.AttachSecurityPolicyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { AttachSecurityPolicyResult result = client . attachSecurityPolicy ( new AttachSecurityPolicyRequest () . withUserName ( \"user-0001\" ) . withSecurityPolicyId ( \"securityPolicyId-0001\" ) ); List SecurityPolicy \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . AttachSecurityPolicyResult \u003e asyncResult = null ; yield return client . AttachSecurityPolicy ( new Gs2 . Gs2Identifier . Request . AttachSecurityPolicyRequest () . WithUserName ( \"user-0001\" ) . WithSecurityPolicyId ( \"securityPolicyId-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . attachSecurityPolicy ( new Gs2Identifier . AttachSecurityPolicyRequest () . withUserName ( \"user-0001\" ) . withSecurityPolicyId ( \"securityPolicyId-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . attach_security_policy ( identifier . AttachSecurityPolicyRequest () . with_user_name ( 'user-0001' ) . with_security_policy_id ( 'securityPolicyId-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.attach_security_policy ({ userName = \"user-0001\" , securityPolicyId = \"securityPolicyId-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'identifier' ) api_result_handler = client.attach_security_policy_async ({ userName = \"user-0001\" , securityPolicyId = \"securityPolicyId-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; detachSecurityPolicy 할당된 보안 정책을 사용자로부터 해제 GRN을 지정하여 보안 정책을 사용자로부터 해제합니다. 해제 후, 사용자는 이 정책으로 부여되었던 권한을 잃게 됩니다. 작업 후 사용자에게 계속 할당되어 있는 보안 정책의 리스트를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. securityPolicyId string  ~ 1024자 해제할 보안 정책의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 items List 해제한 후 사용자에게 계속 할당되어 있는 보안 정책 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DetachSecurityPolicy ( \u0026 identifier . DetachSecurityPolicyRequest { UserName : pointy . String ( \"user-0001\" ), SecurityPolicyId : pointy . String ( \"securityPolicyId-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DetachSecurityPolicyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e detachSecurityPolicy ( ( new DetachSecurityPolicyRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withSecurityPolicyId ( \"securityPolicyId-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DetachSecurityPolicyRequest ; import io.gs2.identifier.result.DetachSecurityPolicyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DetachSecurityPolicyResult result = client . detachSecurityPolicy ( new DetachSecurityPolicyRequest () . withUserName ( \"user-0001\" ) . withSecurityPolicyId ( \"securityPolicyId-0001\" ) ); List SecurityPolicy \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DetachSecurityPolicyResult \u003e asyncResult = null ; yield return client . DetachSecurityPolicy ( new Gs2 . Gs2Identifier . Request . DetachSecurityPolicyRequest () . WithUserName ( \"user-0001\" ) . WithSecurityPolicyId ( \"securityPolicyId-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . detachSecurityPolicy ( new Gs2Identifier . DetachSecurityPolicyRequest () . withUserName ( \"user-0001\" ) . withSecurityPolicyId ( \"securityPolicyId-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . detach_security_policy ( identifier . DetachSecurityPolicyRequest () . with_user_name ( 'user-0001' ) . with_security_policy_id ( 'securityPolicyId-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.detach_security_policy ({ userName = \"user-0001\" , securityPolicyId = \"securityPolicyId-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'identifier' ) api_result_handler = client.detach_security_policy_async ({ userName = \"user-0001\" , securityPolicyId = \"securityPolicyId-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeUsers 사용자 목록 취득 현재 프로젝트 하위의 GS2-Identifier 사용자에 대한 페이지네이션 리스트를 취득합니다. 사용자는 API 접근 제어를 위한 크리덴셜(클라이언트 ID/시크릿), 비밀번호, 보안 정책을 보유할 수 있는 엔티티입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 사용자 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DescribeUsers ( \u0026 identifier . DescribeUsersRequest { PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DescribeUsersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e describeUsers ( ( new DescribeUsersRequest ()) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DescribeUsersRequest ; import io.gs2.identifier.result.DescribeUsersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DescribeUsersResult result = client . describeUsers ( new DescribeUsersRequest () . withPageToken ( null ) . withLimit ( null ) ); List User \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DescribeUsersResult \u003e asyncResult = null ; yield return client . DescribeUsers ( new Gs2 . Gs2Identifier . Request . DescribeUsersRequest () . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . describeUsers ( new Gs2Identifier . DescribeUsersRequest () . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . describe_users ( identifier . DescribeUsersRequest () . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.describe_users ({ pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'identifier' ) api_result_handler = client.describe_users_async ({ pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createUser 사용자 신규 생성 지정된 이름과 설명으로 새로운 GS2-Identifier 사용자를 생성합니다. 생성 후, API 접근 권한을 제어하기 위해 크리덴셜, 비밀번호, 보안 정책을 할당할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 Result 타입 설명 item User 생성한 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . CreateUser ( \u0026 identifier . CreateUserRequest { Name : pointy . String ( \"user-0001\" ), Description : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\CreateUserRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e createUser ( ( new CreateUserRequest ()) -\u003e withName ( \"user-0001\" ) -\u003e withDescription ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.CreateUserRequest ; import io.gs2.identifier.result.CreateUserResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { CreateUserResult result = client . createUser ( new CreateUserRequest () . withName ( \"user-0001\" ) . withDescription ( null ) ); User item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . CreateUserResult \u003e asyncResult = null ; yield return client . CreateUser ( new Gs2 . Gs2Identifier . Request . CreateUserRequest () . WithName ( \"user-0001\" ) . WithDescription ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . createUser ( new Gs2Identifier . CreateUserRequest () . withName ( \"user-0001\" ) . withDescription ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . create_user ( identifier . CreateUserRequest () . with_name ( 'user-0001' ) . with_description ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.create_user ({ name = \"user-0001\" , description = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.create_user_async ({ name = \"user-0001\" , description = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateUser 사용자 갱신 기존 GS2-Identifier 사용자의 설명을 갱신합니다. 사용자 이름은 생성 후 변경할 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 Result 타입 설명 item User 갱신 후 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . UpdateUser ( \u0026 identifier . UpdateUserRequest { UserName : pointy . String ( \"user-0001\" ), Description : pointy . String ( \"description1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\UpdateUserRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e updateUser ( ( new UpdateUserRequest ()) -\u003e withUserName ( \"user-0001\" ) -\u003e withDescription ( \"description1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.UpdateUserRequest ; import io.gs2.identifier.result.UpdateUserResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { UpdateUserResult result = client . updateUser ( new UpdateUserRequest () . withUserName ( \"user-0001\" ) . withDescription ( \"description1\" ) ); User item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . UpdateUserResult \u003e asyncResult = null ; yield return client . UpdateUser ( new Gs2 . Gs2Identifier . Request . UpdateUserRequest () . WithUserName ( \"user-0001\" ) . WithDescription ( \"description1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . updateUser ( new Gs2Identifier . UpdateUserRequest () . withUserName ( \"user-0001\" ) . withDescription ( \"description1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . update_user ( identifier . UpdateUserRequest () . with_user_name ( 'user-0001' ) . with_description ( 'description1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.update_user ({ userName = \"user-0001\" , description = \"description1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.update_user_async ({ userName = \"user-0001\" , description = \"description1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getUser 사용자 취득 사용자 이름을 지정하여 특정 GS2-Identifier 사용자의 상세 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item User 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . GetUser ( \u0026 identifier . GetUserRequest { UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\GetUserRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e getUser ( ( new GetUserRequest ()) -\u003e withUserName ( \"user-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.GetUserRequest ; import io.gs2.identifier.result.GetUserResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { GetUserResult result = client . getUser ( new GetUserRequest () . withUserName ( \"user-0001\" ) ); User item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . GetUserResult \u003e asyncResult = null ; yield return client . GetUser ( new Gs2 . Gs2Identifier . Request . GetUserRequest () . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . getUser ( new Gs2Identifier . GetUserRequest () . withUserName ( \"user-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . get_user ( identifier . GetUserRequest () . with_user_name ( 'user-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.get_user ({ userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.get_user_async ({ userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteUser 사용자 삭제 GS2-Identifier 사용자와 크리덴셜, 비밀번호, 보안 정책 할당을 포함한 모든 관련 데이터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item User 삭제한 사용자 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DeleteUser ( \u0026 identifier . DeleteUserRequest { UserName : pointy . String ( \"user-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DeleteUserRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e deleteUser ( ( new DeleteUserRequest ()) -\u003e withUserName ( \"user-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DeleteUserRequest ; import io.gs2.identifier.result.DeleteUserResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DeleteUserResult result = client . deleteUser ( new DeleteUserRequest () . withUserName ( \"user-0001\" ) ); User item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DeleteUserResult \u003e asyncResult = null ; yield return client . DeleteUser ( new Gs2 . Gs2Identifier . Request . DeleteUserRequest () . WithUserName ( \"user-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . deleteUser ( new Gs2Identifier . DeleteUserRequest () . withUserName ( \"user-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . delete_user ( identifier . DeleteUserRequest () . with_user_name ( 'user-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.delete_user ({ userName = \"user-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.delete_user_async ({ userName = \"user-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSecurityPolicies 보안 정책 목록 취득 현재 프로젝트에서 정의된 커스텀 보안 정책의 페이지네이션 리스트를 취득합니다. 보안 정책은 사용자가 실행할 수 있는 GS2 API 조작을 제어하는 인가 규칙을 정의하는 JSON 문서입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 보안 정책 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DescribeSecurityPolicies ( \u0026 identifier . DescribeSecurityPoliciesRequest { PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DescribeSecurityPoliciesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e describeSecurityPolicies ( ( new DescribeSecurityPoliciesRequest ()) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DescribeSecurityPoliciesRequest ; import io.gs2.identifier.result.DescribeSecurityPoliciesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DescribeSecurityPoliciesResult result = client . describeSecurityPolicies ( new DescribeSecurityPoliciesRequest () . withPageToken ( null ) . withLimit ( null ) ); List SecurityPolicy \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DescribeSecurityPoliciesResult \u003e asyncResult = null ; yield return client . DescribeSecurityPolicies ( new Gs2 . Gs2Identifier . Request . DescribeSecurityPoliciesRequest () . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . describeSecurityPolicies ( new Gs2Identifier . DescribeSecurityPoliciesRequest () . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . describe_security_policies ( identifier . DescribeSecurityPoliciesRequest () . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.describe_security_policies ({ pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'identifier' ) api_result_handler = client.describe_security_policies_async ({ pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeCommonSecurityPolicies GS2 정의 보안 정책 목록 취득 GS2가 제공하는 내장 보안 정책의 페이지네이션 리스트를 취득합니다. 이러한 공통 정책은 일반적인 사용 사례를 커버하며, 커스텀 정책과 함께 사용자에게 할당할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 보안 정책 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DescribeCommonSecurityPolicies ( \u0026 identifier . DescribeCommonSecurityPoliciesRequest { PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DescribeCommonSecurityPoliciesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e describeCommonSecurityPolicies ( ( new DescribeCommonSecurityPoliciesRequest ()) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DescribeCommonSecurityPoliciesRequest ; import io.gs2.identifier.result.DescribeCommonSecurityPoliciesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DescribeCommonSecurityPoliciesResult result = client . describeCommonSecurityPolicies ( new DescribeCommonSecurityPoliciesRequest () . withPageToken ( null ) . withLimit ( null ) ); List SecurityPolicy \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DescribeCommonSecurityPoliciesResult \u003e asyncResult = null ; yield return client . DescribeCommonSecurityPolicies ( new Gs2 . Gs2Identifier . Request . DescribeCommonSecurityPoliciesRequest () . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . describeCommonSecurityPolicies ( new Gs2Identifier . DescribeCommonSecurityPoliciesRequest () . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . describe_common_security_policies ( identifier . DescribeCommonSecurityPoliciesRequest () . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.describe_common_security_policies ({ pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'identifier' ) api_result_handler = client.describe_common_security_policies_async ({ pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createSecurityPolicy 보안 정책 신규 생성 이름, 설명, JSON 정책 문서를 사용하여 새로운 커스텀 보안 정책을 생성합니다. 정책 문서는 허용 또는 거부할 GS2 API 작업을 제어하는 인가 규칙을 정의합니다. 생성 후 AttachSecurityPolicy API를 사용하여 사용자에게 정책을 할당할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보안 정책 이름 보안 정책 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 policy string  ~ 524288자 정책 문서 이 보안 정책의 접근 제어 규칙을 정의하는 JSON 문서입니다. 어떤 GS2 API 액션을 허용 또는 거부할지, 그리고 규칙이 적용되는 리소스(GRN 패턴으로 식별)를 지정합니다. 여러 스테이트먼트를 조합하여 세밀한 접근 제어를 만들 수 있습니다. 최대 512KB입니다. Result 타입 설명 item SecurityPolicy 생성한 보안 정책 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . CreateSecurityPolicy ( \u0026 identifier . CreateSecurityPolicyRequest { Name : pointy . String ( \"policy-0001\" ), Description : nil , Policy : pointy . String ( \"{}\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\CreateSecurityPolicyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e createSecurityPolicy ( ( new CreateSecurityPolicyRequest ()) -\u003e withName ( \"policy-0001\" ) -\u003e withDescription ( null ) -\u003e withPolicy ( \"{}\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.CreateSecurityPolicyRequest ; import io.gs2.identifier.result.CreateSecurityPolicyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { CreateSecurityPolicyResult result = client . createSecurityPolicy ( new CreateSecurityPolicyRequest () . withName ( \"policy-0001\" ) . withDescription ( null ) . withPolicy ( \"{}\" ) ); SecurityPolicy item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . CreateSecurityPolicyResult \u003e asyncResult = null ; yield return client . CreateSecurityPolicy ( new Gs2 . Gs2Identifier . Request . CreateSecurityPolicyRequest () . WithName ( \"policy-0001\" ) . WithDescription ( null ) . WithPolicy ( \"{}\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . createSecurityPolicy ( new Gs2Identifier . CreateSecurityPolicyRequest () . withName ( \"policy-0001\" ) . withDescription ( null ) . withPolicy ( \"{}\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . create_security_policy ( identifier . CreateSecurityPolicyRequest () . with_name ( 'policy-0001' ) . with_description ( None ) . with_policy ( ' {} ' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.create_security_policy ({ name = \"policy-0001\" , description = nil , policy = \"{}\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.create_security_policy_async ({ name = \"policy-0001\" , description = nil , policy = \"{}\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateSecurityPolicy 보안 정책 갱신 기존 보안 정책의 설명과 정책 문서를 갱신합니다. 변경 사항은 이 정책이 할당되어 있는 모든 사용자에게 즉시 반영됩니다. 정책 이름은 생성 후 변경할 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 securityPolicyName string  ~ 128자 보안 정책 이름 보안 정책 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 policy string  ~ 524288자 정책 문서 이 보안 정책의 접근 제어 규칙을 정의하는 JSON 문서입니다. 어떤 GS2 API 액션을 허용 또는 거부할지, 그리고 규칙이 적용되는 리소스(GRN 패턴으로 식별)를 지정합니다. 여러 스테이트먼트를 조합하여 세밀한 접근 제어를 만들 수 있습니다. 최대 512KB입니다. Result 타입 설명 item SecurityPolicy 갱신 후 보안 정책 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . UpdateSecurityPolicy ( \u0026 identifier . UpdateSecurityPolicyRequest { SecurityPolicyName : pointy . String ( \"policy-0001\" ), Description : pointy . String ( \"description1\" ), Policy : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\UpdateSecurityPolicyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e updateSecurityPolicy ( ( new UpdateSecurityPolicyRequest ()) -\u003e withSecurityPolicyName ( \"policy-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withPolicy ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.UpdateSecurityPolicyRequest ; import io.gs2.identifier.result.UpdateSecurityPolicyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { UpdateSecurityPolicyResult result = client . updateSecurityPolicy ( new UpdateSecurityPolicyRequest () . withSecurityPolicyName ( \"policy-0001\" ) . withDescription ( \"description1\" ) . withPolicy ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) ); SecurityPolicy item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . UpdateSecurityPolicyResult \u003e asyncResult = null ; yield return client . UpdateSecurityPolicy ( new Gs2 . Gs2Identifier . Request . UpdateSecurityPolicyRequest () . WithSecurityPolicyName ( \"policy-0001\" ) . WithDescription ( \"description1\" ) . WithPolicy ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . updateSecurityPolicy ( new Gs2Identifier . UpdateSecurityPolicyRequest () . withSecurityPolicyName ( \"policy-0001\" ) . withDescription ( \"description1\" ) . withPolicy ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . update_security_policy ( identifier . UpdateSecurityPolicyRequest () . with_security_policy_name ( 'policy-0001' ) . with_description ( 'description1' ) . with_policy ( '{\"hoge\": \"fuga\"}' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.update_security_policy ({ securityPolicyName = \"policy-0001\" , description = \"description1\" , policy = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.update_security_policy_async ({ securityPolicyName = \"policy-0001\" , description = \"description1\" , policy = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSecurityPolicy 보안 정책 취득 JSON 정책 문서를 포함하여 특정 보안 정책의 상세 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 securityPolicyName string  ~ 128자 보안 정책 이름 보안 정책 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item SecurityPolicy 보안 정책 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . GetSecurityPolicy ( \u0026 identifier . GetSecurityPolicyRequest { SecurityPolicyName : pointy . String ( \"policy-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\GetSecurityPolicyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e getSecurityPolicy ( ( new GetSecurityPolicyRequest ()) -\u003e withSecurityPolicyName ( \"policy-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.GetSecurityPolicyRequest ; import io.gs2.identifier.result.GetSecurityPolicyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { GetSecurityPolicyResult result = client . getSecurityPolicy ( new GetSecurityPolicyRequest () . withSecurityPolicyName ( \"policy-0001\" ) ); SecurityPolicy item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . GetSecurityPolicyResult \u003e asyncResult = null ; yield return client . GetSecurityPolicy ( new Gs2 . Gs2Identifier . Request . GetSecurityPolicyRequest () . WithSecurityPolicyName ( \"policy-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . getSecurityPolicy ( new Gs2Identifier . GetSecurityPolicyRequest () . withSecurityPolicyName ( \"policy-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . get_security_policy ( identifier . GetSecurityPolicyRequest () . with_security_policy_name ( 'policy-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.get_security_policy ({ securityPolicyName = \"policy-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.get_security_policy_async ({ securityPolicyName = \"policy-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSecurityPolicy 보안 정책 삭제 커스텀 보안 정책을 삭제합니다. 이 정책이 아직 사용자에게 할당되어 있는 경우, 해당 사용자는 이 정책으로 부여되었던 권한을 잃게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 securityPolicyName string  ~ 128자 보안 정책 이름 보안 정책 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item SecurityPolicy 보안 정책 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . DeleteSecurityPolicy ( \u0026 identifier . DeleteSecurityPolicyRequest { SecurityPolicyName : pointy . String ( \"policy-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\DeleteSecurityPolicyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e deleteSecurityPolicy ( ( new DeleteSecurityPolicyRequest ()) -\u003e withSecurityPolicyName ( \"policy-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.DeleteSecurityPolicyRequest ; import io.gs2.identifier.result.DeleteSecurityPolicyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { DeleteSecurityPolicyResult result = client . deleteSecurityPolicy ( new DeleteSecurityPolicyRequest () . withSecurityPolicyName ( \"policy-0001\" ) ); SecurityPolicy item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . DeleteSecurityPolicyResult \u003e asyncResult = null ; yield return client . DeleteSecurityPolicy ( new Gs2 . Gs2Identifier . Request . DeleteSecurityPolicyRequest () . WithSecurityPolicyName ( \"policy-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . deleteSecurityPolicy ( new Gs2Identifier . DeleteSecurityPolicyRequest () . withSecurityPolicyName ( \"policy-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . delete_security_policy ( identifier . DeleteSecurityPolicyRequest () . with_security_policy_name ( 'policy-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.delete_security_policy ({ securityPolicyName = \"policy-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.delete_security_policy_async ({ securityPolicyName = \"policy-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; login 프로젝트 토큰 취득 OAuth2 클라이언트 크리덴셜(클라이언트 ID와 클라이언트 시크릿)을 사용하여 인증하고, 프로젝트 토큰(Bearer 토큰)을 반환합니다. 클라이언트 시크릿은 저장된 크리덴셜과 대조됩니다. 유효하지 않은 경우 Unauthorized 오류가 반환됩니다. 반환되는 토큰의 유효 기간은 36000초(10시간)이며, 이후의 모든 GS2 API 요청에서 Bearer 토큰으로 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 client_id string  UUID ~ 256자 클라이언트ID client_secret string  UUID ~ 100자 클라이언트 시크릿 Result 타입 설명 access_token string 프로젝트 토큰 token_type string Bearer expires_in int 유효 기간(초) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . Login ( \u0026 identifier . LoginRequest { ClientId : pointy . String ( \"client-0001\" ), ClientSecret : pointy . String ( \"secret-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } accessToken := result . AccessToken tokenType := result . TokenType expiresIn := result . ExpiresIn ownerId := result . OwnerId use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\LoginRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e login ( ( new LoginRequest ()) -\u003e withClientId ( \"client-0001\" ) -\u003e withClientSecret ( \"secret-0001\" ) ); $accessToken = $result -\u003e getAccessToken (); $tokenType = $result -\u003e getTokenType (); $expiresIn = $result -\u003e getExpiresIn (); $ownerId = $result -\u003e getOwnerId (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.LoginRequest ; import io.gs2.identifier.result.LoginResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { LoginResult result = client . login ( new LoginRequest () . withClientId ( \"client-0001\" ) . withClientSecret ( \"secret-0001\" ) ); String accessToken = result . getAccessToken (); String tokenType = result . getTokenType (); int expiresIn = result . getExpiresIn (); String ownerId = result . getOwnerId (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . LoginResult \u003e asyncResult = null ; yield return client . Login ( new Gs2 . Gs2Identifier . Request . LoginRequest () . WithClientId ( \"client-0001\" ) . WithClientSecret ( \"secret-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var accessToken = result . AccessToken ; var tokenType = result . TokenType ; var expiresIn = result . ExpiresIn ; var ownerId = result . OwnerId ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . login ( new Gs2Identifier . LoginRequest () . withClientId ( \"client-0001\" ) . withClientSecret ( \"secret-0001\" ) ); const accessToken = result . getAccessToken (); const tokenType = result . getTokenType (); const expiresIn = result . getExpiresIn (); const ownerId = result . getOwnerId (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . login ( identifier . LoginRequest () . with_client_id ( 'client-0001' ) . with_client_secret ( 'secret-0001' ) ) access_token = result . access_token token_type = result . token_type expires_in = result . expires_in owner_id = result . owner_id except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.login ({ clientId = \"client-0001\" , clientSecret = \"secret-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result accessToken = result.accessToken ; tokenType = result.tokenType ; expiresIn = result.expiresIn ; ownerId = result.ownerId ; client = gs2 ( 'identifier' ) api_result_handler = client.login_async ({ clientId = \"client-0001\" , clientSecret = \"secret-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result accessToken = result.accessToken ; tokenType = result.tokenType ; expiresIn = result.expiresIn ; ownerId = result.ownerId ; loginByUser GS2-Identifier 사용자를 지정하여 프로젝트 토큰을 취득 GS2-Identifier의 사용자 이름과 비밀번호를 사용하여 인증하고, 프로젝트 토큰을 반환합니다. 사용자에게 다중 요소 인증(MFA)이 활성화되어 있는 경우, otp 필드에 유효한 TOTP 패스코드도 제공해야 합니다. 제공하지 않으면 “require” 오류가 반환됩니다. 비밀번호가 먼저 검증되고, MFA가 활성화되어 있는 경우 이어서 TOTP 패스코드가 검증됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 password string  ~ 1024자 GS2-Identifier 사용자의 비밀번호 otp string 6 ~ 6자 패스코드 Result 타입 설명 item ProjectToken 프로젝트 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/identifier\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := identifier . Gs2IdentifierRestClient { Session : \u0026 session , } result , err := client . LoginByUser ( \u0026 identifier . LoginByUserRequest { UserName : pointy . String ( \"user-name\" ), Password : pointy . String ( \"password\" ), Otp : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Identifier\\Gs2IdentifierRestClient ; use Gs2\\Identifier\\Request\\LoginByUserRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdentifierRestClient ( $session ); try { $result = $client -\u003e loginByUser ( ( new LoginByUserRequest ()) -\u003e withUserName ( \"user-name\" ) -\u003e withPassword ( \"password\" ) -\u003e withOtp ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.identifier.rest.Gs2IdentifierRestClient ; import io.gs2.identifier.request.LoginByUserRequest ; import io.gs2.identifier.result.LoginByUserResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdentifierRestClient client = new Gs2IdentifierRestClient ( session ); try { LoginByUserResult result = client . loginByUser ( new LoginByUserRequest () . withUserName ( \"user-name\" ) . withPassword ( \"password\" ) . withOtp ( null ) ); ProjectToken item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdentifierRestClient ( session ); AsyncResult Gs2 . Gs2Identifier . Result . LoginByUserResult \u003e asyncResult = null ; yield return client . LoginByUser ( new Gs2 . Gs2Identifier . Request . LoginByUserRequest () . WithUserName ( \"user-name\" ) . WithPassword ( \"password\" ) . WithOtp ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Identifier from '@/gs2/identifier' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Identifier . Gs2IdentifierRestClient ( session ); try { const result = await client . loginByUser ( new Gs2Identifier . LoginByUserRequest () . withUserName ( \"user-name\" ) . withPassword ( \"password\" ) . withOtp ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import identifier session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = identifier . Gs2IdentifierRestClient ( session ) try : result = client . login_by_user ( identifier . LoginByUserRequest () . with_user_name ( 'user-name' ) . with_password ( 'password' ) . with_otp ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'identifier' ) api_result = client.login_by_user ({ userName = \"user-name\" , password = \"password\" , otp = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'identifier' ) api_result_handler = client.login_by_user_async ({ userName = \"user-name\" , password = \"password\" , otp = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Identifier SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Identifier SDK API 레퍼런스","url":"/ko/api_reference/identifier/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 방치 보상 부여 시 트랜잭션의 처리 방법을 제어하는 설정입니다. receiveScript ScriptSetting 보상을 받았을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receive overrideAcquireActionsScriptId string ~ 1024자 방치 보상의 입수 액션을 동적으로 결정하는 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - overrideAcquireActions logSetting LogSetting 로그 출력 설정 방치 보상 조작과 관련된 API 요청 및 응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 방치 스테이터스 생성, 보상 수취, 타이밍 문제 디버깅에 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Status 스테이터스 처음으로 GetIdleStatus 를 호출했을 때 생성되며, 그 시점부터 방치 시간의 카운트가 시작됩니다. 방치 시간의 카운트는 보상을 받으면 리셋됩니다. GS2-Schedule 의 이벤트가 연관되어 있는 경우, 이벤트 개최 전에는 Category 에 액세스할 수 없으며, 스테이터스를 생성할 수도 없습니다. 이벤트가 연관되어 있는 경우, 스테이터스는 이벤트의 반복 횟수를 보유합니다. 현재 이벤트ID와 스테이터스 생성 시의 이벤트ID가 일치하지 않는 경우, 현재 이벤트의 반복 횟수와 스테이터스가 보유한 반복 횟수가 일치하지 않는 경우, 또는 이벤트의 시작 시각보다 앞서 스테이터스가 생성된 경우, 대기 시간은 리셋됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 statusId string ※ ~ 1024자 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. userId string  ~ 128자 사용자ID randomSeed long 0 0 ~ 9223372036854775805 난수 시드 방치 보상 계산 시 결정론적 난수 생성에 사용되는 시드 값입니다. 보상 계산이 재현 가능하고 일관성이 있음을 보장하여 서버가 보상 결과를 검증할 수 있도록 합니다. 보상을 받을 때마다 갱신됩니다. idleMinutes int  0 ~ 2147483646 방치 시간(분) 마지막 보상 수취 또는 스테이터스 생성 이후의 누적 방치 시간(분)입니다. 이 값은 idleStartedAt 으로부터의 경과 시간으로 계산되며, maximumIdleMinutes 로 상한이 설정됩니다. 이용 가능한 보상 수는 이 값을 카테고리 모델의 rewardIntervalMinutes 로 나누어 결정됩니다. nextRewardsAt long 다음으로 추가 보상을 받을 수 있는 시각 UNIX 시간·밀리초 maximumIdleMinutes int 0 0 ~ 2147483646 최대 방치 시간(분) 이 스테이터스가 축적할 수 있는 최대 방치 시간(분)입니다. 스테이터스 생성 시 카테고리 모델의 defaultMaximumIdleMinutes 로 초기화됩니다. 입수 액션을 통해 사용자별로 늘릴 수 있으며, 프리미엄 사용자나 이벤트 참가자가 더 많은 방치 보상을 축적할 수 있도록 합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 CategoryModel 카테고리 모델 카테고리 모델이란, 방치 보상을 얻을 수 있는 대기 카테고리를 설정하는 엔티티입니다. 설정에는 대기 시간별 보상이나 최대 대기 시간 등의 정보가 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rewardIntervalMinutes int  0 ~ 2147483646 보상 간격(분) 각 방치 보상 사이의 시간 간격(분)입니다. 예를 들어 60으로 설정하면, 사용자는 방치 시간 60분마다 보상 1유닛을 획득합니다. 보상의 총 개수는 (경과 방치 분수) / rewardIntervalMinutes로 계산되며, acquireActions 배열을 순환합니다. defaultMaximumIdleMinutes int  0 ~ 2147483646 기본 최대 방치 시간(분) 이 카테고리의 새로운 스테이터스에 대한 기본 최대 방치 시간(분)입니다. 이 제한을 초과하는 방치 시간은 추가 보상을 축적하지 않습니다. 이 값은 스테이터스 생성 시 각 스테이터스의 maximumIdleMinutes 에 복사되며, 입수 액션을 통해 사용자별로 확장할 수 있습니다. rewardResetMode 문자열 열거형 enum {   “Reset”,   “CarryOver” } “Reset” 보상 리셋 모드 사용자가 보상을 받은 후 방치 시간의 처리 방법을 결정합니다. “Reset\"은 방치 시간을 0으로 되돌리며, 부분적인 간격 시간은 소실됩니다. “CarryOver\"는 추가 보상을 얻기에 부족했던 나머지 시간을 유지하여 다음 보상 사이클에 반영됩니다. 정의 설명 Reset 대기 시간을 0으로 리셋 CarryOver 보상을 받기에 부족했던 나머지 시간을 이월 acquireActions List [] 1 ~ 100 items 대기 시간마다 얻을 수 있는 입수 액션 리스트 대기 시간을 “X분\"이라고 가정하면 “X / rewardIntervalMinutes\"가 보상을 받을 수 있는 횟수가 되지만, 여기서 지정한 배열의 요소를 반복함으로써 대기 시간마다 다른 보상을 부여할 수 있습니다. idlePeriodScheduleId string ~ 1024자 방치 기간 스케줄ID 방치 시간이 축적되는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 방치 시간이 카운트됩니다. 이벤트가 반복되는 경우, 스테이터스는 반복 횟수를 추적하고 새로운 사이클이 시작될 때 방치 시간을 리셋하여 이벤트 기간마다 보상이 계산되도록 합니다. receivePeriodScheduleId string ~ 1024자 수취 기간 스케줄ID 사용자가 축적된 방치 보상을 받을 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 보상 수취가 허용됩니다. 이를 통해 방치 축적 기간과는 별도의 기간 한정 보상 수취 기간을 설정할 수 있습니다. VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 AcquireAction 입수 액션 방치 보상으로 사용되는 단일 입수 액션을 나타냅니다. 액션 타입(예: 아이템 추가, 통화 증가)과 그 요청 파라미터로 구성됩니다. 방치 보상을 수령하면 이러한 액션들이 트랜잭션으로 조합되어 실행되며, 사용자에게 보상이 지급됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireActionList 입수 액션 리스트 하나의 보상 간격에서 함께 지급되는 여러 입수 액션을 그룹화하는 래퍼입니다. 각 AcquireActionList는 카테고리 모델의 acquireActions 배열 내 하나의 보상 주기에 대응하며, 각 간격마다 서로 다른 보상 조합을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 0 ~ 100 items 입수 액션 리스트 이 보상 간격이 트리거될 때 함께 실행되는 입수 액션의 집합입니다. 여러 액션을 조합하여 하나의 방치 보상 주기에서 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 리스트당 최대 100개의 액션입니다. CurrentCategoryMaster 현재 활성화된 카테고리 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 카테고리 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Idle 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 CategoryModelMaster 카테고리 모델 마스터 카테고리 모델 마스터는 게임 내에서 사용되는 카테고리 모델을 편집·관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트 및 업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 카테고리 모델로 반영됩니다. 카테고리 모델이란 방치 보상을 얻을 수 있는 대기 카테고리를 설정하는 엔티티입니다. 설정에는 대기 시간별 보상이나 최대 방치 시간 등의 정보가 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 카테고리 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rewardIntervalMinutes int  0 ~ 2147483646 보상 간격(분) 각 방치 보상 사이의 시간 간격(분)입니다. 예를 들어 60으로 설정하면, 사용자는 방치 시간 60분마다 보상 1유닛을 획득합니다. 보상의 총 개수는 (경과 방치 분수) / rewardIntervalMinutes로 계산되며, acquireActions 배열을 순환합니다. defaultMaximumIdleMinutes int  0 ~ 2147483646 기본 최대 방치 시간(분) 이 카테고리의 새로운 스테이터스에 대한 기본 최대 방치 시간(분)입니다. 이 제한을 초과하는 방치 시간은 추가 보상을 축적하지 않습니다. 이 값은 스테이터스 생성 시 각 스테이터스의 maximumIdleMinutes 에 복사되며, 입수 액션을 통해 사용자별로 확장할 수 있습니다. rewardResetMode 문자열 열거형 enum {   “Reset”,   “CarryOver” } “Reset” 보상 리셋 모드 사용자가 보상을 받은 후 방치 시간의 처리 방법을 결정합니다. “Reset\"은 방치 시간을 0으로 되돌리며, 부분적인 간격 시간은 소실됩니다. “CarryOver\"는 추가 보상을 얻기에 부족했던 나머지 시간을 유지하여 다음 보상 사이클에 반영됩니다. 정의 설명 Reset 대기 시간을 0으로 리셋 CarryOver 보상을 받기에 부족했던 나머지 시간을 이월 acquireActions List [] 1 ~ 100 items 대기 시간마다 얻을 수 있는 입수 액션 리스트 대기 시간을 “X분\"이라고 가정하면 “X / rewardIntervalMinutes\"가 보상을 받을 수 있는 횟수가 되지만, 여기서 지정한 배열의 요소를 반복함으로써 대기 시간마다 다른 보상을 부여할 수 있습니다. idlePeriodScheduleId string ~ 1024자 방치 기간 스케줄ID 방치 시간이 축적되는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 방치 시간이 카운트됩니다. 이벤트가 반복되는 경우, 스테이터스는 반복 횟수를 추적하고 새로운 사이클이 시작될 때 방치 시간을 리셋하여 이벤트 기간마다 보상이 계산되도록 합니다. receivePeriodScheduleId string ~ 1024자 수취 기간 스케줄ID 사용자가 축적된 방치 보상을 받을 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 보상 수취가 허용됩니다. 이를 통해 방치 축적 기간과는 별도의 기간 한정 보상 수취 기간을 설정할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 idle . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DescribeNamespacesRequest ; import io.gs2.idle.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Idle . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Idle . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . describe_namespaces ( idle . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'idle' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 생성 GS2-Idle 서비스의 새로운 네임스페이스를 생성합니다. 트랜잭션 설정, receiveScript(방치 보상 지급 전에 실행되어 처리를 검증하거나 변경할 수 있음), overrideAcquireActionsScriptId(배율 적용 등 입수 액션 변경), 로그 설정을 구성할 수 있습니다. 생성 후, 방치 보상 설정을 정의하려면 마스터 데이터를 통해 카테고리 모델을 설정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 방치 보상 부여 시 트랜잭션의 처리 방법을 제어하는 설정입니다. receiveScript ScriptSetting 보상을 받았을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receive overrideAcquireActionsScriptId string ~ 1024자 방치 보상의 입수 액션을 동적으로 결정하는 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - overrideAcquireActions logSetting LogSetting 로그 출력 설정 방치 보상 조작과 관련된 API 요청 및 응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 방치 스테이터스 생성, 보상 수취, 타이밍 문제 디버깅에 유용합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 idle . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 idle . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ReceiveScript : nil , OverrideAcquireActionsScriptId : nil , LogSetting : \u0026 idle . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Idle\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withReceiveScript ( null ) -\u003e withOverrideAcquireActionsScriptId ( null ) -\u003e withLogSetting (( new \\Gs2\\Idle\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.CreateNamespaceRequest ; import io.gs2.idle.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . idle . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReceiveScript ( null ) . withOverrideAcquireActionsScriptId ( null ) . withLogSetting ( new io . gs2 . idle . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Idle . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Idle . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithReceiveScript ( null ) . WithOverrideAcquireActionsScriptId ( null ) . WithLogSetting ( new Gs2 . Gs2Idle . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Idle . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Idle . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReceiveScript ( null ) . withOverrideAcquireActionsScriptId ( null ) . withLogSetting ( new Gs2Idle . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . create_namespace ( idle . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( idle . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_receive_script ( None ) . with_override_acquire_actions_script_id ( None ) . with_log_setting ( idle . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, receiveScript = nil , overrideAcquireActionsScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, receiveScript = nil , overrideAcquireActionsScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 idle . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.GetNamespaceStatusRequest ; import io.gs2.idle.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Idle . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Idle . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . get_namespace_status ( idle . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'idle' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 idle . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.GetNamespaceRequest ; import io.gs2.idle.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Idle . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Idle . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . get_namespace ( idle . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 업데이트 지정한 네임스페이스의 설정을 업데이트합니다. 설명, 트랜잭션 설정, receiveScript(방치 보상 지급 전에 실행), overrideAcquireActionsScriptId(입수 액션 변경), 로그 설정을 변경할 수 있습니다. 변경 사항은 이후 작업에 즉시 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 방치 보상 부여 시 트랜잭션의 처리 방법을 제어하는 설정입니다. receiveScript ScriptSetting 보상을 받았을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receive overrideAcquireActionsScriptId string ~ 1024자 방치 보상의 입수 액션을 동적으로 결정하는 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - overrideAcquireActions logSetting LogSetting 로그 출력 설정 방치 보상 조작과 관련된 API 요청 및 응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 방치 스테이터스 생성, 보상 수취, 타이밍 문제 디버깅에 유용합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 idle . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 idle . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, ReceiveScript : nil , OverrideAcquireActionsScriptId : nil , LogSetting : \u0026 idle . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Idle\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withReceiveScript ( null ) -\u003e withOverrideAcquireActionsScriptId ( null ) -\u003e withLogSetting (( new \\Gs2\\Idle\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.UpdateNamespaceRequest ; import io.gs2.idle.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . idle . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withReceiveScript ( null ) . withOverrideAcquireActionsScriptId ( null ) . withLogSetting ( new io . gs2 . idle . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Idle . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Idle . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithReceiveScript ( null ) . WithOverrideAcquireActionsScriptId ( null ) . WithLogSetting ( new Gs2 . Gs2Idle . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Idle . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Idle . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withReceiveScript ( null ) . withOverrideAcquireActionsScriptId ( null ) . withLogSetting ( new Gs2Idle . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . update_namespace ( idle . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( idle . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_receive_script ( None ) . with_override_acquire_actions_script_id ( None ) . with_log_setting ( idle . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, receiveScript = nil , overrideAcquireActionsScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, receiveScript = nil , overrideAcquireActionsScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 idle . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DeleteNamespaceRequest ; import io.gs2.idle.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Idle . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Idle . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . delete_namespace ( idle . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 idle . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.GetServiceVersionRequest ; import io.gs2.idle.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Idle . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Idle . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . get_service_version ( idle . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 idle . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DumpUserDataByUserIdRequest ; import io.gs2.idle.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Idle . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Idle . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . dump_user_data_by_user_id ( idle . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'idle' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 덤프가 완료된 경우 출력 데이터의 URL을 반환합니다. 덤프가 아직 진행 중인 경우 URL은 비어 있습니다. 덤프된 데이터에는 지정된 사용자의 모든 방치 상태 레코드가 gzip 형식으로 압축되어 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 idle . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.idle.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Idle . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Idle . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( idle . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'idle' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 idle . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.CleanUserDataByUserIdRequest ; import io.gs2.idle.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Idle . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Idle . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . clean_user_data_by_user_id ( idle . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'idle' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 클린 작업의 완료 상태를 반환합니다. 클린 작업은 동일한 소유자가 소유한 모든 네임스페이스에 걸쳐, 지정된 사용자의 모든 방치 상태 레코드를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 idle . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.idle.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Idle . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Idle . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( idle . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'idle' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 idle . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.idle.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Idle . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Idle . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( idle . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'idle' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 idle . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.ImportUserDataByUserIdRequest ; import io.gs2.idle.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Idle . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Idle . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . import_user_data_by_user_id ( idle . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'idle' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 완료 상태와, 가능한 경우 임포트 로그의 URL을 반환합니다. 임포트는 방치 상태 데이터를 포함하는 업로드된 ZIP 파일을 처리하고, JSON 구조를 검증한 뒤 지정된 사용자의 레코드를 복원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 idle . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.CheckImportUserDataByUserIdRequest ; import io.gs2.idle.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Idle . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Idle . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( idle . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'idle' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeStatuses 스테이터스 목록 조회 지정된 네임스페이스 내 인증된 사용자의 방치 스테이터스에 대한 페이지네이션된 목록을 조회합니다. 각 스테이터스는 카테고리별 방치 상태를 나타내며, 방치 누적이 시작된 시각과 현재 최대 대기 시간을 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DescribeStatuses ( \u0026 idle . DescribeStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DescribeStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e describeStatuses ( ( new DescribeStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DescribeStatusesRequest ; import io.gs2.idle.result.DescribeStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DescribeStatusesResult result = client . describeStatuses ( new DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DescribeStatusesResult \u003e asyncResult = null ; yield return client . DescribeStatuses ( new Gs2 . Gs2Idle . Request . DescribeStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . describeStatuses ( new Gs2Idle . DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . describe_statuses ( idle . DescribeStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.describe_statuses ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'idle' ) api_result_handler = client.describe_statuses_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeStatusesByUserId 사용자 ID를 지정하여 스테이터스 목록 조회 지정된 사용자의 방치 스테이터스에 대한 페이지네이션된 목록을 조회합니다. 각 스테이터스는 카테고리별 방치 상태를 나타내며, 방치 누적이 시작된 시각과 현재 최대 대기 시간을 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DescribeStatusesByUserId ( \u0026 idle . DescribeStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DescribeStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e describeStatusesByUserId ( ( new DescribeStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DescribeStatusesByUserIdRequest ; import io.gs2.idle.result.DescribeStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DescribeStatusesByUserIdResult result = client . describeStatusesByUserId ( new DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DescribeStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeStatusesByUserId ( new Gs2 . Gs2Idle . Request . DescribeStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . describeStatusesByUserId ( new Gs2Idle . DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . describe_statuses_by_user_id ( idle . DescribeStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.describe_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'idle' ) api_result_handler = client.describe_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getStatus 스테이터스 조회 인증된 사용자의 특정 카테고리에 대한 방치 스테이터스를 조회합니다. 스테이터스 레코드가 아직 존재하지 않는 경우, 현재 시각을 방치 시작 시각으로, 카테고리 모델의 defaultMaximumIdleMinutes를 최대 대기 시간으로 하여 자동으로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . GetStatus ( \u0026 idle . GetStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\GetStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e getStatus ( ( new GetStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.GetStatusRequest ; import io.gs2.idle.result.GetStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { GetStatusResult result = client . getStatus ( new GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategoryName ( \"category-0001\" ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . GetStatusResult \u003e asyncResult = null ; yield return client . GetStatus ( new Gs2 . Gs2Idle . Request . GetStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCategoryName ( \"category-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . getStatus ( new Gs2Idle . GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategoryName ( \"category-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . get_status ( idle . GetStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_category_name ( 'category-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.get_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , categoryName = \"category-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.get_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , categoryName = \"category-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStatusByUserId 사용자 ID를 지정하여 스테이터스 조회 지정된 사용자의 특정 카테고리에 대한 방치 스테이터스를 조회합니다. 스테이터스 레코드가 아직 존재하지 않는 경우, 현재 시각을 방치 시작 시각으로, 카테고리 모델의 defaultMaximumIdleMinutes를 최대 대기 시간으로 하여 자동으로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . GetStatusByUserId ( \u0026 idle . GetStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\GetStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e getStatusByUserId ( ( new GetStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.GetStatusByUserIdRequest ; import io.gs2.idle.result.GetStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { GetStatusByUserIdResult result = client . getStatusByUserId ( new GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . GetStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetStatusByUserId ( new Gs2 . Gs2Idle . Request . GetStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . getStatusByUserId ( new Gs2Idle . GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . get_status_by_user_id ( idle . GetStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_category_name ( 'category-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.get_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.get_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; prediction 획득 보상 목록 조회 실제로 수령하지 않고, 현재 대기 시간을 기준으로 받을 수 있는 보상을 계산하여 반환합니다. 계산은 경과한 대기 시간을 rewardIntervalMinutes로 나눈 값을 기준으로 하며, maximumIdleMinutes로 상한이 설정됩니다. 이것은 스테이터스를 변경하거나 대기 타이머를 리셋하지 않는 읽기 전용 조작입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. Result 타입 설명 items List 보상 status Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . Prediction ( \u0026 idle . PredictionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\PredictionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e prediction ( ( new PredictionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) ); $items = $result -\u003e getItems (); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.PredictionRequest ; import io.gs2.idle.result.PredictionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { PredictionResult result = client . prediction ( new PredictionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategoryName ( \"category-0001\" ) ); List AcquireAction \u003e items = result . getItems (); Status status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . PredictionResult \u003e asyncResult = null ; yield return client . Prediction ( new Gs2 . Gs2Idle . Request . PredictionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCategoryName ( \"category-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . prediction ( new Gs2Idle . PredictionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategoryName ( \"category-0001\" ) ); const items = result . getItems (); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . prediction ( idle . PredictionRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_category_name ( 'category-0001' ) ) items = result . items status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.prediction ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , categoryName = \"category-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; status = result.status ; client = gs2 ( 'idle' ) api_result_handler = client.prediction_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , categoryName = \"category-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; status = result.status ; predictionByUserId 사용자 ID를 지정하여 획득 보상 목록 조회 지정된 사용자의 현재 대기 시간을 기준으로, 실제로 수령하지 않고 받을 수 있는 보상을 계산하여 반환합니다. 계산은 경과한 대기 시간을 rewardIntervalMinutes로 나눈 값을 기준으로 하며, maximumIdleMinutes로 상한이 설정됩니다. 이것은 스테이터스를 변경하거나 대기 타이머를 리셋하지 않는 읽기 전용 조작입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 보상 status Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . PredictionByUserId ( \u0026 idle . PredictionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\PredictionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e predictionByUserId ( ( new PredictionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.PredictionByUserIdRequest ; import io.gs2.idle.result.PredictionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { PredictionByUserIdResult result = client . predictionByUserId ( new PredictionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withTimeOffsetToken ( null ) ); List AcquireAction \u003e items = result . getItems (); Status status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . PredictionByUserIdResult \u003e asyncResult = null ; yield return client . PredictionByUserId ( new Gs2 . Gs2Idle . Request . PredictionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . predictionByUserId ( new Gs2Idle . PredictionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . prediction_by_user_id ( idle . PredictionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_category_name ( 'category-0001' ) . with_time_offset_token ( None ) ) items = result . items status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.prediction_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; status = result.status ; client = gs2 ( 'idle' ) api_result_handler = client.prediction_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; status = result.status ; receive 보상 수령 누적된 대기 시간을 기준으로, 지정된 카테고리의 방치 보상을 수령합니다. 보상량은 경과한 대기 시간을 rewardIntervalMinutes로 나눈 값으로 계산되며, maximumIdleMinutes로 상한이 설정됩니다. receiveScript가 설정되어 있는 경우, 보상 지급 전에 실행되어 수령 조작을 변경하거나 거부할 수 있습니다. overrideAcquireActionsScriptId를 통해 입수 액션(배율 보정 적용 등)을 변경하는 것도 가능합니다. 수령 후, 대기 타이머는 현재 시각으로 리셋됩니다. rewardResetMode가 설정되어 있는 경우, 대기 타이머의 동작이 달라질 수 있습니다. 계산된 보상의 입수 액션을 포함하는 트랜잭션을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 items List 보상 status Status 갱신한 스테이터스 transactionId string 발행된 트랜잭션 ID stampSheet string 퀘스트 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . Receive ( \u0026 idle . ReceiveRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items status := result . Status transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\ReceiveRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e receive ( ( new ReceiveRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withConfig ( null ) ); $items = $result -\u003e getItems (); $status = $result -\u003e getStatus (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.ReceiveRequest ; import io.gs2.idle.result.ReceiveResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { ReceiveResult result = client . receive ( new ReceiveRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategoryName ( \"category-0001\" ) . withConfig ( null ) ); List AcquireAction \u003e items = result . getItems (); Status status = result . getStatus (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . ReceiveResult \u003e asyncResult = null ; yield return client . Receive ( new Gs2 . Gs2Idle . Request . ReceiveRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var status = result . Status ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . receive ( new Gs2Idle . ReceiveRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategoryName ( \"category-0001\" ) . withConfig ( null ) ); const items = result . getItems (); const status = result . getStatus (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . receive ( idle . ReceiveRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_category_name ( 'category-0001' ) . with_config ( None ) ) items = result . items status = result . status transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.receive ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , categoryName = \"category-0001\" , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; status = result.status ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'idle' ) api_result_handler = client.receive_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , categoryName = \"category-0001\" , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; status = result.status ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; receiveByUserId 사용자 ID를 지정하여 보상 수령 지정된 사용자와 카테고리의 누적된 대기 시간을 기준으로 방치 보상을 수령합니다. 보상량은 경과한 대기 시간을 rewardIntervalMinutes로 나눈 값으로 계산되며, maximumIdleMinutes로 상한이 설정됩니다. receiveScript가 설정되어 있는 경우, 보상 지급 전에 실행되어 수령 조작을 변경하거나 거부할 수 있습니다. overrideAcquireActionsScriptId를 통해 입수 액션(배율 보정 적용 등)을 변경하는 것도 가능합니다. 수령 후, 대기 타이머는 현재 시각으로 리셋됩니다. 계산된 보상의 입수 액션을 포함하는 트랜잭션을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 보상 status Status 갱신한 스테이터스 transactionId string 발행된 트랜잭션 ID stampSheet string 퀘스트 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . ReceiveByUserId ( \u0026 idle . ReceiveByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items status := result . Status transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\ReceiveByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e receiveByUserId ( ( new ReceiveByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $status = $result -\u003e getStatus (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.ReceiveByUserIdRequest ; import io.gs2.idle.result.ReceiveByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { ReceiveByUserIdResult result = client . receiveByUserId ( new ReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); List AcquireAction \u003e items = result . getItems (); Status status = result . getStatus (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . ReceiveByUserIdResult \u003e asyncResult = null ; yield return client . ReceiveByUserId ( new Gs2 . Gs2Idle . Request . ReceiveByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var status = result . Status ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . receiveByUserId ( new Gs2Idle . ReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const status = result . getStatus (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . receive_by_user_id ( idle . ReceiveByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_category_name ( 'category-0001' ) . with_config ( None ) . with_time_offset_token ( None ) ) items = result . items status = result . status transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.receive_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; status = result.status ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'idle' ) api_result_handler = client.receive_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; status = result.status ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; increaseMaximumIdleMinutesByUserId 사용자 ID를 지정하여 최대 대기 시간을 가산 지정된 카테고리에서 사용자의 최대 대기 시간에 지정된 분(分) 수를 가산합니다. 최대 대기 시간은 방치 보상이 누적될 수 있는 시간의 상한을 결정합니다. 스테이터스가 아직 존재하지 않는 경우, 가산을 적용하기 전에 자동으로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. increaseMinutes int 1 ~ 2147483646 최대 대기 시간 증가량(분) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 갱신한 스테이터스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . IncreaseMaximumIdleMinutesByUserId ( \u0026 idle . IncreaseMaximumIdleMinutesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), IncreaseMinutes : pointy . Int32 ( 5 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\IncreaseMaximumIdleMinutesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e increaseMaximumIdleMinutesByUserId ( ( new IncreaseMaximumIdleMinutesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withIncreaseMinutes ( 5 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.IncreaseMaximumIdleMinutesByUserIdRequest ; import io.gs2.idle.result.IncreaseMaximumIdleMinutesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { IncreaseMaximumIdleMinutesByUserIdResult result = client . increaseMaximumIdleMinutesByUserId ( new IncreaseMaximumIdleMinutesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withIncreaseMinutes ( 5 ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . IncreaseMaximumIdleMinutesByUserIdResult \u003e asyncResult = null ; yield return client . IncreaseMaximumIdleMinutesByUserId ( new Gs2 . Gs2Idle . Request . IncreaseMaximumIdleMinutesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithIncreaseMinutes ( 5 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . increaseMaximumIdleMinutesByUserId ( new Gs2Idle . IncreaseMaximumIdleMinutesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withIncreaseMinutes ( 5 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . increase_maximum_idle_minutes_by_user_id ( idle . IncreaseMaximumIdleMinutesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_category_name ( 'category-0001' ) . with_increase_minutes ( 5 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.increase_maximum_idle_minutes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , increaseMinutes = 5 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.increase_maximum_idle_minutes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , increaseMinutes = 5 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; decreaseMaximumIdleMinutes 최대 대기 시간을 감산 지정된 카테고리에서 인증된 사용자의 최대 대기 시간에서 지정된 분(分) 수를 감산합니다. 최대 대기 시간은 0 미만으로 내려갈 수 없습니다. 스테이터스가 아직 존재하지 않는 경우, 감산을 적용하기 전에 자동으로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. decreaseMinutes int 1 ~ 2147483646 최대 대기 시간 감소량(분) Result 타입 설명 item Status 갱신한 스테이터스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DecreaseMaximumIdleMinutes ( \u0026 idle . DecreaseMaximumIdleMinutesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), DecreaseMinutes : pointy . Int32 ( 5 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DecreaseMaximumIdleMinutesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e decreaseMaximumIdleMinutes ( ( new DecreaseMaximumIdleMinutesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withDecreaseMinutes ( 5 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DecreaseMaximumIdleMinutesRequest ; import io.gs2.idle.result.DecreaseMaximumIdleMinutesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DecreaseMaximumIdleMinutesResult result = client . decreaseMaximumIdleMinutes ( new DecreaseMaximumIdleMinutesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategoryName ( \"category-0001\" ) . withDecreaseMinutes ( 5 ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DecreaseMaximumIdleMinutesResult \u003e asyncResult = null ; yield return client . DecreaseMaximumIdleMinutes ( new Gs2 . Gs2Idle . Request . DecreaseMaximumIdleMinutesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithDecreaseMinutes ( 5 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . decreaseMaximumIdleMinutes ( new Gs2Idle . DecreaseMaximumIdleMinutesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCategoryName ( \"category-0001\" ) . withDecreaseMinutes ( 5 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . decrease_maximum_idle_minutes ( idle . DecreaseMaximumIdleMinutesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_category_name ( 'category-0001' ) . with_decrease_minutes ( 5 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.decrease_maximum_idle_minutes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , categoryName = \"category-0001\" , decreaseMinutes = 5 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.decrease_maximum_idle_minutes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , categoryName = \"category-0001\" , decreaseMinutes = 5 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; decreaseMaximumIdleMinutesByUserId 사용자 ID를 지정하여 최대 대기 시간을 감산 지정된 카테고리에서 사용자의 최대 대기 시간에서 지정된 분(分) 수를 감산합니다. 최대 대기 시간은 0 미만으로 내려갈 수 없습니다. 스테이터스가 아직 존재하지 않는 경우, 감산을 적용하기 전에 자동으로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. decreaseMinutes int 1 ~ 2147483646 최대 대기 시간 감소량(분) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 갱신한 스테이터스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DecreaseMaximumIdleMinutesByUserId ( \u0026 idle . DecreaseMaximumIdleMinutesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), DecreaseMinutes : pointy . Int32 ( 5 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DecreaseMaximumIdleMinutesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e decreaseMaximumIdleMinutesByUserId ( ( new DecreaseMaximumIdleMinutesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withDecreaseMinutes ( 5 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DecreaseMaximumIdleMinutesByUserIdRequest ; import io.gs2.idle.result.DecreaseMaximumIdleMinutesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DecreaseMaximumIdleMinutesByUserIdResult result = client . decreaseMaximumIdleMinutesByUserId ( new DecreaseMaximumIdleMinutesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withDecreaseMinutes ( 5 ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DecreaseMaximumIdleMinutesByUserIdResult \u003e asyncResult = null ; yield return client . DecreaseMaximumIdleMinutesByUserId ( new Gs2 . Gs2Idle . Request . DecreaseMaximumIdleMinutesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithDecreaseMinutes ( 5 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . decreaseMaximumIdleMinutesByUserId ( new Gs2Idle . DecreaseMaximumIdleMinutesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withDecreaseMinutes ( 5 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . decrease_maximum_idle_minutes_by_user_id ( idle . DecreaseMaximumIdleMinutesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_category_name ( 'category-0001' ) . with_decrease_minutes ( 5 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.decrease_maximum_idle_minutes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , decreaseMinutes = 5 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.decrease_maximum_idle_minutes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , decreaseMinutes = 5 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setMaximumIdleMinutesByUserId 사용자 ID를 지정하여 최대 대기 시간을 설정 지정된 카테고리에서 사용자의 최대 대기 시간을 지정된 절대값으로 설정합니다. 가산/감산 조작과 달리, 현재 최대 대기 시간을 직접 대체합니다. 갱신 후 스테이터스와 갱신 전 스테이터스를 모두 반환하므로, 호출한 측에서 변경 내용을 확인할 수 있습니다. 스테이터스가 아직 존재하지 않는 경우, 값을 적용하기 전에 자동으로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. maximumIdleMinutes int 1 ~ 2147483646 설정할 최대 대기 시간 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 갱신한 스테이터스 old Status 갱신 전 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . SetMaximumIdleMinutesByUserId ( \u0026 idle . SetMaximumIdleMinutesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), MaximumIdleMinutes : pointy . Int32 ( 5 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\SetMaximumIdleMinutesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e setMaximumIdleMinutesByUserId ( ( new SetMaximumIdleMinutesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withMaximumIdleMinutes ( 5 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.SetMaximumIdleMinutesByUserIdRequest ; import io.gs2.idle.result.SetMaximumIdleMinutesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { SetMaximumIdleMinutesByUserIdResult result = client . setMaximumIdleMinutesByUserId ( new SetMaximumIdleMinutesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withMaximumIdleMinutes ( 5 ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); Status old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . SetMaximumIdleMinutesByUserIdResult \u003e asyncResult = null ; yield return client . SetMaximumIdleMinutesByUserId ( new Gs2 . Gs2Idle . Request . SetMaximumIdleMinutesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithMaximumIdleMinutes ( 5 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . setMaximumIdleMinutesByUserId ( new Gs2Idle . SetMaximumIdleMinutesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCategoryName ( \"category-0001\" ) . withMaximumIdleMinutes ( 5 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . set_maximum_idle_minutes_by_user_id ( idle . SetMaximumIdleMinutesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_category_name ( 'category-0001' ) . with_maximum_idle_minutes ( 5 ) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.set_maximum_idle_minutes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , maximumIdleMinutes = 5 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'idle' ) api_result_handler = client.set_maximum_idle_minutes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , categoryName = \"category-0001\" , maximumIdleMinutes = 5 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; describeCategoryModels 카테고리 모델 목록 조회 지정된 네임스페이스 내 현재 활성 상태(공개됨)인 카테고리 모델 목록을 조회합니다. 이는 마스터 데이터 갱신 프로세스를 통해 활성화된 모델이며, 플레이어가 이용할 수 있는 방치 보상 설정을 정의합니다. 각 모델에는 보상 간격, 최대 대기 시간, 보상 리셋 모드, 입수 액션, 스케줄 참조 등의 설정이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 카테고리 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DescribeCategoryModels ( \u0026 idle . DescribeCategoryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DescribeCategoryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e describeCategoryModels ( ( new DescribeCategoryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DescribeCategoryModelsRequest ; import io.gs2.idle.result.DescribeCategoryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DescribeCategoryModelsResult result = client . describeCategoryModels ( new DescribeCategoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List CategoryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DescribeCategoryModelsResult \u003e asyncResult = null ; yield return client . DescribeCategoryModels ( new Gs2 . Gs2Idle . Request . DescribeCategoryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . describeCategoryModels ( new Gs2Idle . DescribeCategoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . describe_category_models ( idle . DescribeCategoryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.describe_category_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'idle' ) api_result_handler = client.describe_category_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getCategoryModel 카테고리 모델 조회 이름을 지정하여 특정 활성 카테고리 모델의 상세 정보를 조회합니다. 모델에는 rewardIntervalMinutes(보상이 누적되는 간격), defaultMaximumIdleMinutes(대기 시간의 상한), acquireActions(부여되는 보상), 그리고 대기 기간과 수령 기간을 제어하는 선택적 스케줄 참조를 포함한 방치 보상 설정이 정의되어 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CategoryModel 카테고리 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . GetCategoryModel ( \u0026 idle . GetCategoryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\GetCategoryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e getCategoryModel ( ( new GetCategoryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.GetCategoryModelRequest ; import io.gs2.idle.result.GetCategoryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { GetCategoryModelResult result = client . getCategoryModel ( new GetCategoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) ); CategoryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . GetCategoryModelResult \u003e asyncResult = null ; yield return client . GetCategoryModel ( new Gs2 . Gs2Idle . Request . GetCategoryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . getCategoryModel ( new Gs2Idle . GetCategoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . get_category_model ( idle . GetCategoryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.get_category_model ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.get_category_model_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 카테고리 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 네임스페이스 내 모든 카테고리 모델 마스터를 활성화에 적합한 JSON 문서로 내보냅니다. 내보내는 데이터에는 각 카테고리 모델의 전체 설정(보상 간격, 최대 대기 시간, 보상 리셋 모드, 입수 액션, 스케줄 참조)이 포함됩니다. 이 데이터는 다른 네임스페이스에서 마스터 데이터를 활성화하는 데 사용하거나, 버전 관리 목적으로 저장할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentCategoryMaster 활성화 가능한 카테고리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 idle . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.ExportMasterRequest ; import io.gs2.idle.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentCategoryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Idle . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Idle . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . export_master ( idle . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentCategoryMaster 현재 활성화된 카테고리 모델 마스터 데이터 조회 네임스페이스 내에서 이용 가능한 카테고리 모델을 정의하는, 현재 활성화된 마스터 데이터를 조회합니다. 이는 마지막으로 활성화된 데이터이며, 플레이어에 대한 카테고리 모델 요청 제공에 사용되고 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentCategoryMaster 현재 활성화된 카테고리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . GetCurrentCategoryMaster ( \u0026 idle . GetCurrentCategoryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\GetCurrentCategoryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e getCurrentCategoryMaster ( ( new GetCurrentCategoryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.GetCurrentCategoryMasterRequest ; import io.gs2.idle.result.GetCurrentCategoryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { GetCurrentCategoryMasterResult result = client . getCurrentCategoryMaster ( new GetCurrentCategoryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentCategoryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . GetCurrentCategoryMasterResult \u003e asyncResult = null ; yield return client . GetCurrentCategoryMaster ( new Gs2 . Gs2Idle . Request . GetCurrentCategoryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . getCurrentCategoryMaster ( new Gs2Idle . GetCurrentCategoryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . get_current_category_master ( idle . GetCurrentCategoryMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.get_current_category_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.get_current_category_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentCategoryMaster 현재 활성화된 카테고리 모델 마스터 데이터 갱신 (3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 진행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 획득합니다. 획득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentCategoryMaster에 업로드로 획득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentCategoryMaster ( \u0026 idle . PreUpdateCurrentCategoryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\PreUpdateCurrentCategoryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentCategoryMaster ( ( new PreUpdateCurrentCategoryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.PreUpdateCurrentCategoryMasterRequest ; import io.gs2.idle.result.PreUpdateCurrentCategoryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { PreUpdateCurrentCategoryMasterResult result = client . preUpdateCurrentCategoryMaster ( new PreUpdateCurrentCategoryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . PreUpdateCurrentCategoryMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentCategoryMaster ( new Gs2 . Gs2Idle . Request . PreUpdateCurrentCategoryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . preUpdateCurrentCategoryMaster ( new Gs2Idle . PreUpdateCurrentCategoryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . pre_update_current_category_master ( idle . PreUpdateCurrentCategoryMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.pre_update_current_category_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'idle' ) api_result_handler = client.pre_update_current_category_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentCategoryMaster 현재 활성화된 카테고리 모델의 마스터 데이터를 업데이트 현재 활성화된 카테고리 모델을 대체할 새로운 마스터 데이터를 활성화합니다. 2가지 모드를 지원합니다: “direct\"는 인라인 JSON 데이터용(작은 페이로드에 적합), “preUpload\"는 서명된 URL을 통해 업로드된 데이터용(1MB를 초과하는 데이터에 필요하며, PreUpdate에서 획득한 토큰을 사용). 활성화 후, 새로운 카테고리 모델은 즉시 방치 보상 처리에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentCategoryMaster 업데이트된 현재 활성화된 카테고리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentCategoryMaster ( \u0026 idle . UpdateCurrentCategoryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2023-06-06\\\", \\\"categoryModels\\\": [{\\\"name\\\": \\\"category-0001\\\", \\\"rewardIntervalMinutes\\\": 5, \\\"defaultMaximumIdleMinutes\\\": 1440, \\\"rewardResetMode\\\": \\\"Reset\\\", \\\"acquireActions\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 10}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 5}}]}]}, {\\\"name\\\": \\\"category-0002\\\", \\\"rewardIntervalMinutes\\\": 5, \\\"defaultMaximumIdleMinutes\\\": 1440, \\\"acquireActions\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 10}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 5}}]}], \\\"idlePeriodScheduleId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\", \\\"receivePeriodScheduleId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\\\"}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\UpdateCurrentCategoryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e updateCurrentCategoryMaster ( ( new UpdateCurrentCategoryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2023-06-06 \\\" , \\\" categoryModels \\\" : [{ \\\" name \\\" : \\\" category-0001 \\\" , \\\" rewardIntervalMinutes \\\" : 5, \\\" defaultMaximumIdleMinutes \\\" : 1440, \\\" rewardResetMode \\\" : \\\" Reset \\\" , \\\" acquireActions \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 10}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 5}}]}]}, { \\\" name \\\" : \\\" category-0002 \\\" , \\\" rewardIntervalMinutes \\\" : 5, \\\" defaultMaximumIdleMinutes \\\" : 1440, \\\" acquireActions \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 10}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 5}}]}], \\\" idlePeriodScheduleId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" , \\\" receivePeriodScheduleId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002 \\\" }]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.UpdateCurrentCategoryMasterRequest ; import io.gs2.idle.result.UpdateCurrentCategoryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { UpdateCurrentCategoryMasterResult result = client . updateCurrentCategoryMaster ( new UpdateCurrentCategoryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-06-06\\\", \\\"categoryModels\\\": [{\\\"name\\\": \\\"category-0001\\\", \\\"rewardIntervalMinutes\\\": 5, \\\"defaultMaximumIdleMinutes\\\": 1440, \\\"rewardResetMode\\\": \\\"Reset\\\", \\\"acquireActions\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 10}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 5}}]}]}, {\\\"name\\\": \\\"category-0002\\\", \\\"rewardIntervalMinutes\\\": 5, \\\"defaultMaximumIdleMinutes\\\": 1440, \\\"acquireActions\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 10}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 5}}]}], \\\"idlePeriodScheduleId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\", \\\"receivePeriodScheduleId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\\\"}]}\" ) . withUploadToken ( null ) ); CurrentCategoryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . UpdateCurrentCategoryMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentCategoryMaster ( new Gs2 . Gs2Idle . Request . UpdateCurrentCategoryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2023-06-06\\\", \\\"categoryModels\\\": [{\\\"name\\\": \\\"category-0001\\\", \\\"rewardIntervalMinutes\\\": 5, \\\"defaultMaximumIdleMinutes\\\": 1440, \\\"rewardResetMode\\\": \\\"Reset\\\", \\\"acquireActions\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 10}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 5}}]}]}, {\\\"name\\\": \\\"category-0002\\\", \\\"rewardIntervalMinutes\\\": 5, \\\"defaultMaximumIdleMinutes\\\": 1440, \\\"acquireActions\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 10}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 5}}]}], \\\"idlePeriodScheduleId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\", \\\"receivePeriodScheduleId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\\\"}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . updateCurrentCategoryMaster ( new Gs2Idle . UpdateCurrentCategoryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-06-06\\\", \\\"categoryModels\\\": [{\\\"name\\\": \\\"category-0001\\\", \\\"rewardIntervalMinutes\\\": 5, \\\"defaultMaximumIdleMinutes\\\": 1440, \\\"rewardResetMode\\\": \\\"Reset\\\", \\\"acquireActions\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 10}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 5}}]}]}, {\\\"name\\\": \\\"category-0002\\\", \\\"rewardIntervalMinutes\\\": 5, \\\"defaultMaximumIdleMinutes\\\": 1440, \\\"acquireActions\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 10}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"experienceName\\\": \\\"player\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"propertyId\\\": \\\"player\\\", \\\"experienceValue\\\": 5}}]}], \\\"idlePeriodScheduleId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\", \\\"receivePeriodScheduleId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\\\"}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . update_current_category_master ( idle . UpdateCurrentCategoryMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2023-06-06\", \"categoryModels\": [{\"name\": \"category-0001\", \"rewardIntervalMinutes\": 5, \"defaultMaximumIdleMinutes\": 1440, \"rewardResetMode\": \"Reset\", \"acquireActions\": [{\"acquireActions\": [{\"action\": \"Gs2Experience:AddExperienceByUserId\", \"request\": {\"namespaceName\": \"namespace-0001\", \"experienceName\": \"player\", \"userId\": \"# {userId} \", \"propertyId\": \"player\", \"experienceValue\": 10}}]}, {\"acquireActions\": [{\"action\": \"Gs2Experience:AddExperienceByUserId\", \"request\": {\"namespaceName\": \"namespace-0001\", \"experienceName\": \"player\", \"userId\": \"# {userId} \", \"propertyId\": \"player\", \"experienceValue\": 5}}]}]}, {\"name\": \"category-0002\", \"rewardIntervalMinutes\": 5, \"defaultMaximumIdleMinutes\": 1440, \"acquireActions\": [{\"acquireActions\": [{\"action\": \"Gs2Experience:AddExperienceByUserId\", \"request\": {\"namespaceName\": \"namespace-0001\", \"experienceName\": \"player\", \"userId\": \"# {userId} \", \"propertyId\": \"player\", \"experienceValue\": 10}}]}, {\"acquireActions\": [{\"action\": \"Gs2Experience:AddExperienceByUserId\", \"request\": {\"namespaceName\": \"namespace-0001\", \"experienceName\": \"player\", \"userId\": \"# {userId} \", \"propertyId\": \"player\", \"experienceValue\": 5}}]}], \"idlePeriodScheduleId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\", \"receivePeriodScheduleId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\"}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.update_current_category_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-06-06 \\\" , \\\" categoryModels \\\" : [{ \\\" name \\\" : \\\" category-0001 \\\" , \\\" rewardIntervalMinutes \\\" : 5, \\\" defaultMaximumIdleMinutes \\\" : 1440, \\\" rewardResetMode \\\" : \\\" Reset \\\" , \\\" acquireActions \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 10}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 5}}]}]}, { \\\" name \\\" : \\\" category-0002 \\\" , \\\" rewardIntervalMinutes \\\" : 5, \\\" defaultMaximumIdleMinutes \\\" : 1440, \\\" acquireActions \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 10}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 5}}]}], \\\" idlePeriodScheduleId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" , \\\" receivePeriodScheduleId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002 \\\" }]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.update_current_category_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-06-06 \\\" , \\\" categoryModels \\\" : [{ \\\" name \\\" : \\\" category-0001 \\\" , \\\" rewardIntervalMinutes \\\" : 5, \\\" defaultMaximumIdleMinutes \\\" : 1440, \\\" rewardResetMode \\\" : \\\" Reset \\\" , \\\" acquireActions \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 10}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 5}}]}]}, { \\\" name \\\" : \\\" category-0002 \\\" , \\\" rewardIntervalMinutes \\\" : 5, \\\" defaultMaximumIdleMinutes \\\" : 1440, \\\" acquireActions \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 10}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" experienceName \\\" : \\\" player \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" propertyId \\\" : \\\" player \\\" , \\\" experienceValue \\\" : 5}}]}], \\\" idlePeriodScheduleId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" , \\\" receivePeriodScheduleId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002 \\\" }]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentCategoryMasterFromGitHub 현재 활성화된 카테고리 모델의 마스터 데이터를 GitHub에서 업데이트 GitHub 리포지토리에서 마스터 데이터를 가져와 현재 카테고리 모델 설정으로 활성화합니다. 체크아웃 설정에서 마스터 데이터 JSON을 가져올 리포지토리, 브랜치/태그, 파일 경로를 지정합니다. 이를 통해 버전 관리를 활용한 GitOps 방식의 방치 보상 설정 관리가 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentCategoryMaster 업데이트된 현재 활성화된 카테고리 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentCategoryMasterFromGitHub ( \u0026 idle . UpdateCurrentCategoryMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 idle . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\UpdateCurrentCategoryMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e updateCurrentCategoryMasterFromGitHub ( ( new UpdateCurrentCategoryMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.UpdateCurrentCategoryMasterFromGitHubRequest ; import io.gs2.idle.result.UpdateCurrentCategoryMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { UpdateCurrentCategoryMasterFromGitHubResult result = client . updateCurrentCategoryMasterFromGitHub ( new UpdateCurrentCategoryMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentCategoryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . UpdateCurrentCategoryMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentCategoryMasterFromGitHub ( new Gs2 . Gs2Idle . Request . UpdateCurrentCategoryMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Idle . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . updateCurrentCategoryMasterFromGitHub ( new Gs2Idle . UpdateCurrentCategoryMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Idle . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . update_current_category_master_from_git_hub ( idle . UpdateCurrentCategoryMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( idle . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.update_current_category_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.update_current_category_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCategoryModelMasters 카테고리 모델 마스터 목록 조회 지정한 네임스페이스 내의 편집 가능한 카테고리 모델 마스터의 페이지네이션된 목록을 조회합니다. 카테고리 모델 마스터는 방치 보상 설정을 정의하는 카테고리 모델의 편집 가능한 버전입니다. 마스터에 대한 변경 사항은 현재 마스터 데이터 업데이트 프로세스를 통해 활성화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 카테고리 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 카테고리 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DescribeCategoryModelMasters ( \u0026 idle . DescribeCategoryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DescribeCategoryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e describeCategoryModelMasters ( ( new DescribeCategoryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DescribeCategoryModelMastersRequest ; import io.gs2.idle.result.DescribeCategoryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DescribeCategoryModelMastersResult result = client . describeCategoryModelMasters ( new DescribeCategoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List CategoryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DescribeCategoryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeCategoryModelMasters ( new Gs2 . Gs2Idle . Request . DescribeCategoryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . describeCategoryModelMasters ( new Gs2Idle . DescribeCategoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . describe_category_model_masters ( idle . DescribeCategoryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.describe_category_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'idle' ) api_result_handler = client.describe_category_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createCategoryModelMaster 카테고리 모델 마스터 생성 방치 보상 설정을 정의하는 새로운 편집 가능한 카테고리 모델 마스터를 생성합니다. 주요 설정으로는 rewardIntervalMinutes(보상이 쌓이는 간격), defaultMaximumIdleMinutes(방치 시간의 상한), rewardResetMode(수령 시 보상을 리셋할지 여부), acquireActions(지급할 보상)이 있습니다. 선택적으로 idlePeriodScheduleId와 receivePeriodScheduleId에 GS2-Schedule 이벤트를 참조하여 방치 누적 및 보상 수령이 활성화되는 기간을 제어할 수 있습니다. 생성한 마스터는 현재 마스터 데이터 업데이트 프로세스를 통해 활성화해야 적용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rewardIntervalMinutes int  0 ~ 2147483646 보상 간격(분) 각 방치 보상 사이의 시간 간격(분)입니다. 예를 들어 60으로 설정하면, 사용자는 방치 시간 60분마다 보상 1유닛을 획득합니다. 보상의 총 개수는 (경과 방치 분수) / rewardIntervalMinutes로 계산되며, acquireActions 배열을 순환합니다. defaultMaximumIdleMinutes int  0 ~ 2147483646 기본 최대 방치 시간(분) 이 카테고리의 새로운 스테이터스에 대한 기본 최대 방치 시간(분)입니다. 이 제한을 초과하는 방치 시간은 추가 보상을 축적하지 않습니다. 이 값은 스테이터스 생성 시 각 스테이터스의 maximumIdleMinutes 에 복사되며, 입수 액션을 통해 사용자별로 확장할 수 있습니다. rewardResetMode 문자열 열거형 enum {   “Reset”,   “CarryOver” } “Reset” 보상 리셋 모드 사용자가 보상을 받은 후 방치 시간의 처리 방법을 결정합니다. “Reset\"은 방치 시간을 0으로 되돌리며, 부분적인 간격 시간은 소실됩니다. “CarryOver\"는 추가 보상을 얻기에 부족했던 나머지 시간을 유지하여 다음 보상 사이클에 반영됩니다. 정의 설명 Reset 대기 시간을 0으로 리셋 CarryOver 보상을 받기에 부족했던 나머지 시간을 이월 acquireActions List [] 1 ~ 100 items 대기 시간마다 얻을 수 있는 입수 액션 리스트 대기 시간을 “X분\"이라고 가정하면 “X / rewardIntervalMinutes\"가 보상을 받을 수 있는 횟수가 되지만, 여기서 지정한 배열의 요소를 반복함으로써 대기 시간마다 다른 보상을 부여할 수 있습니다. idlePeriodScheduleId string ~ 1024자 방치 기간 스케줄ID 방치 시간이 축적되는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 방치 시간이 카운트됩니다. 이벤트가 반복되는 경우, 스테이터스는 반복 횟수를 추적하고 새로운 사이클이 시작될 때 방치 시간을 리셋하여 이벤트 기간마다 보상이 계산되도록 합니다. receivePeriodScheduleId string ~ 1024자 수취 기간 스케줄ID 사용자가 축적된 방치 보상을 받을 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 보상 수취가 허용됩니다. 이를 통해 방치 축적 기간과는 별도의 기간 한정 보상 수취 기간을 설정할 수 있습니다. Result 타입 설명 item CategoryModelMaster 생성한 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . CreateCategoryModelMaster ( \u0026 idle . CreateCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"category-model-0001\" ), Description : nil , Metadata : nil , RewardIntervalMinutes : pointy . Int32 ( 5 ), DefaultMaximumIdleMinutes : pointy . Int32 ( 1440 ), RewardResetMode : pointy . String ( \"Reset\" ), AcquireActions : [] idle . AcquireActionList { idle . AcquireActionList { AcquireActions : [] idle . AcquireAction { idle . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request1\" ), }, idle . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request2\" ), }, }, }, idle . AcquireActionList { AcquireActions : [] idle . AcquireAction { idle . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request3\" ), }, }, }, }, IdlePeriodScheduleId : nil , ReceivePeriodScheduleId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\CreateCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e createCategoryModelMaster ( ( new CreateCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"category-model-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withRewardIntervalMinutes ( 5 ) -\u003e withDefaultMaximumIdleMinutes ( 1440 ) -\u003e withRewardResetMode ( \"Reset\" ) -\u003e withAcquireActions ([ ( new \\Gs2\\Idle\\Model\\AcquireActionList ()) -\u003e withAcquireActions ([ ( new \\Gs2\\Idle\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), ( new \\Gs2\\Idle\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request2\" ), ]), ( new \\Gs2\\Idle\\Model\\AcquireActionList ()) -\u003e withAcquireActions ([ ( new \\Gs2\\Idle\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request3\" ), ]), ]) -\u003e withIdlePeriodScheduleId ( null ) -\u003e withReceivePeriodScheduleId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.CreateCategoryModelMasterRequest ; import io.gs2.idle.result.CreateCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { CreateCategoryModelMasterResult result = client . createCategoryModelMaster ( new CreateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"category-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withRewardIntervalMinutes ( 5 ) . withDefaultMaximumIdleMinutes ( 1440 ) . withRewardResetMode ( \"Reset\" ) . withAcquireActions ( Arrays . asList ( new io . gs2 . idle . model . AcquireActionList () . withAcquireActions ( Arrays . asList ( new io . gs2 . idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), new io . gs2 . idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request2\" ) )), new io . gs2 . idle . model . AcquireActionList () . withAcquireActions ( Arrays . asList ( new io . gs2 . idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request3\" ) )) )) . withIdlePeriodScheduleId ( null ) . withReceivePeriodScheduleId ( null ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . CreateCategoryModelMasterResult \u003e asyncResult = null ; yield return client . CreateCategoryModelMaster ( new Gs2 . Gs2Idle . Request . CreateCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"category-model-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithRewardIntervalMinutes ( 5 ) . WithDefaultMaximumIdleMinutes ( 1440 ) . WithRewardResetMode ( \"Reset\" ) . WithAcquireActions ( new Gs2 . Gs2Idle . Model . AcquireActionList [] { new Gs2 . Gs2Idle . Model . AcquireActionList () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request2\" ), }), new Gs2 . Gs2Idle . Model . AcquireActionList () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request3\" ), }), }) . WithIdlePeriodScheduleId ( null ) . WithReceivePeriodScheduleId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . createCategoryModelMaster ( new Gs2Idle . CreateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"category-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withRewardIntervalMinutes ( 5 ) . withDefaultMaximumIdleMinutes ( 1440 ) . withRewardResetMode ( \"Reset\" ) . withAcquireActions ([ new Gs2Idle . model . AcquireActionList () . withAcquireActions ([ new Gs2Idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), new Gs2Idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request2\" ), ]), new Gs2Idle . model . AcquireActionList () . withAcquireActions ([ new Gs2Idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request3\" ), ]), ]) . withIdlePeriodScheduleId ( null ) . withReceivePeriodScheduleId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . create_category_model_master ( idle . CreateCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'category-model-0001' ) . with_description ( None ) . with_metadata ( None ) . with_reward_interval_minutes ( 5 ) . with_default_maximum_idle_minutes ( 1440 ) . with_reward_reset_mode ( 'Reset' ) . with_acquire_actions ([ idle . AcquireActionList () . with_acquire_actions ([ idle . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request1' ), idle . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request2' ), ]), idle . AcquireActionList () . with_acquire_actions ([ idle . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request3' ), ]), ]) . with_idle_period_schedule_id ( None ) . with_receive_period_schedule_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.create_category_model_master ({ namespaceName = \"namespace-0001\" , name = \"category-model-0001\" , description = nil , metadata = nil , rewardIntervalMinutes = 5 , defaultMaximumIdleMinutes = 1440 , rewardResetMode = \"Reset\" , acquireActions = { { acquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request1\" , }, { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request2\" , } }, }, { acquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request3\" , } }, } }, idlePeriodScheduleId = nil , receivePeriodScheduleId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.create_category_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"category-model-0001\" , description = nil , metadata = nil , rewardIntervalMinutes = 5 , defaultMaximumIdleMinutes = 1440 , rewardResetMode = \"Reset\" , acquireActions = { { acquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request1\" , }, { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request2\" , } }, }, { acquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request3\" , } }, } }, idlePeriodScheduleId = nil , receivePeriodScheduleId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCategoryModelMaster 카테고리 모델 마스터 조회 특정 편집 가능한 카테고리 모델 마스터의 상세 정보를 조회합니다. 보상 간격, 최대 방치 시간, 보상 리셋 모드, 입수 액션, 스케줄 참조를 포함한 전체 설정을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CategoryModelMaster 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . GetCategoryModelMaster ( \u0026 idle . GetCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\GetCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e getCategoryModelMaster ( ( new GetCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.GetCategoryModelMasterRequest ; import io.gs2.idle.result.GetCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { GetCategoryModelMasterResult result = client . getCategoryModelMaster ( new GetCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-model-0001\" ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . GetCategoryModelMasterResult \u003e asyncResult = null ; yield return client . GetCategoryModelMaster ( new Gs2 . Gs2Idle . Request . GetCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . getCategoryModelMaster ( new Gs2Idle . GetCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . get_category_model_master ( idle . GetCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.get_category_model_master ({ namespaceName = \"namespace-0001\" , categoryName = \"category-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.get_category_model_master_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCategoryModelMaster 카테고리 모델 마스터 업데이트 기존 카테고리 모델 마스터의 설정을 업데이트합니다. 보상 간격, 최대 방치 시간, 보상 리셋 모드, 입수 액션, 스케줄 참조를 변경할 수 있습니다. 변경 사항은 마스터 데이터 업데이트 프로세스에서 다시 활성화될 때까지 현재 활성화된 모델에 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rewardIntervalMinutes int  0 ~ 2147483646 보상 간격(분) 각 방치 보상 사이의 시간 간격(분)입니다. 예를 들어 60으로 설정하면, 사용자는 방치 시간 60분마다 보상 1유닛을 획득합니다. 보상의 총 개수는 (경과 방치 분수) / rewardIntervalMinutes로 계산되며, acquireActions 배열을 순환합니다. defaultMaximumIdleMinutes int  0 ~ 2147483646 기본 최대 방치 시간(분) 이 카테고리의 새로운 스테이터스에 대한 기본 최대 방치 시간(분)입니다. 이 제한을 초과하는 방치 시간은 추가 보상을 축적하지 않습니다. 이 값은 스테이터스 생성 시 각 스테이터스의 maximumIdleMinutes 에 복사되며, 입수 액션을 통해 사용자별로 확장할 수 있습니다. rewardResetMode 문자열 열거형 enum {   “Reset”,   “CarryOver” } “Reset” 보상 리셋 모드 사용자가 보상을 받은 후 방치 시간의 처리 방법을 결정합니다. “Reset\"은 방치 시간을 0으로 되돌리며, 부분적인 간격 시간은 소실됩니다. “CarryOver\"는 추가 보상을 얻기에 부족했던 나머지 시간을 유지하여 다음 보상 사이클에 반영됩니다. 정의 설명 Reset 대기 시간을 0으로 리셋 CarryOver 보상을 받기에 부족했던 나머지 시간을 이월 acquireActions List [] 1 ~ 100 items 대기 시간마다 얻을 수 있는 입수 액션 리스트 대기 시간을 “X분\"이라고 가정하면 “X / rewardIntervalMinutes\"가 보상을 받을 수 있는 횟수가 되지만, 여기서 지정한 배열의 요소를 반복함으로써 대기 시간마다 다른 보상을 부여할 수 있습니다. idlePeriodScheduleId string ~ 1024자 방치 기간 스케줄ID 방치 시간이 축적되는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 방치 시간이 카운트됩니다. 이벤트가 반복되는 경우, 스테이터스는 반복 횟수를 추적하고 새로운 사이클이 시작될 때 방치 시간을 리셋하여 이벤트 기간마다 보상이 계산되도록 합니다. receivePeriodScheduleId string ~ 1024자 수취 기간 스케줄ID 사용자가 축적된 방치 보상을 받을 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 보상 수취가 허용됩니다. 이를 통해 방치 축적 기간과는 별도의 기간 한정 보상 수취 기간을 설정할 수 있습니다. Result 타입 설명 item CategoryModelMaster 업데이트한 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . UpdateCategoryModelMaster ( \u0026 idle . UpdateCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-model-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), RewardIntervalMinutes : pointy . Int32 ( 10 ), DefaultMaximumIdleMinutes : pointy . Int32 ( 2880 ), RewardResetMode : nil , AcquireActions : [] idle . AcquireActionList { idle . AcquireActionList { AcquireActions : [] idle . AcquireAction { idle . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request4\" ), }, idle . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request5\" ), }, }, }, idle . AcquireActionList { AcquireActions : [] idle . AcquireAction { idle . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request6\" ), }, }, }, }, IdlePeriodScheduleId : nil , ReceivePeriodScheduleId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\UpdateCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e updateCategoryModelMaster ( ( new UpdateCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-model-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) -\u003e withRewardIntervalMinutes ( 10 ) -\u003e withDefaultMaximumIdleMinutes ( 2880 ) -\u003e withRewardResetMode ( null ) -\u003e withAcquireActions ([ ( new \\Gs2\\Idle\\Model\\AcquireActionList ()) -\u003e withAcquireActions ([ ( new \\Gs2\\Idle\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request4\" ), ( new \\Gs2\\Idle\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request5\" ), ]), ( new \\Gs2\\Idle\\Model\\AcquireActionList ()) -\u003e withAcquireActions ([ ( new \\Gs2\\Idle\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request6\" ), ]), ]) -\u003e withIdlePeriodScheduleId ( null ) -\u003e withReceivePeriodScheduleId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.UpdateCategoryModelMasterRequest ; import io.gs2.idle.result.UpdateCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { UpdateCategoryModelMasterResult result = client . updateCategoryModelMaster ( new UpdateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withRewardIntervalMinutes ( 10 ) . withDefaultMaximumIdleMinutes ( 2880 ) . withRewardResetMode ( null ) . withAcquireActions ( Arrays . asList ( new io . gs2 . idle . model . AcquireActionList () . withAcquireActions ( Arrays . asList ( new io . gs2 . idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request4\" ), new io . gs2 . idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request5\" ) )), new io . gs2 . idle . model . AcquireActionList () . withAcquireActions ( Arrays . asList ( new io . gs2 . idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request6\" ) )) )) . withIdlePeriodScheduleId ( null ) . withReceivePeriodScheduleId ( null ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . UpdateCategoryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCategoryModelMaster ( new Gs2 . Gs2Idle . Request . UpdateCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-model-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . WithRewardIntervalMinutes ( 10 ) . WithDefaultMaximumIdleMinutes ( 2880 ) . WithRewardResetMode ( null ) . WithAcquireActions ( new Gs2 . Gs2Idle . Model . AcquireActionList [] { new Gs2 . Gs2Idle . Model . AcquireActionList () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request4\" ), new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request5\" ), }), new Gs2 . Gs2Idle . Model . AcquireActionList () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request6\" ), }), }) . WithIdlePeriodScheduleId ( null ) . WithReceivePeriodScheduleId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . updateCategoryModelMaster ( new Gs2Idle . UpdateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withRewardIntervalMinutes ( 10 ) . withDefaultMaximumIdleMinutes ( 2880 ) . withRewardResetMode ( null ) . withAcquireActions ([ new Gs2Idle . model . AcquireActionList () . withAcquireActions ([ new Gs2Idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request4\" ), new Gs2Idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request5\" ), ]), new Gs2Idle . model . AcquireActionList () . withAcquireActions ([ new Gs2Idle . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request6\" ), ]), ]) . withIdlePeriodScheduleId ( null ) . withReceivePeriodScheduleId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . update_category_model_master ( idle . UpdateCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-model-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"hoge\": \"fuga\"}' ) . with_reward_interval_minutes ( 10 ) . with_default_maximum_idle_minutes ( 2880 ) . with_reward_reset_mode ( None ) . with_acquire_actions ([ idle . AcquireActionList () . with_acquire_actions ([ idle . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request4' ), idle . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request5' ), ]), idle . AcquireActionList () . with_acquire_actions ([ idle . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request6' ), ]), ]) . with_idle_period_schedule_id ( None ) . with_receive_period_schedule_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.update_category_model_master ({ namespaceName = \"namespace-0001\" , categoryName = \"category-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , rewardIntervalMinutes = 10 , defaultMaximumIdleMinutes = 2880 , rewardResetMode = nil , acquireActions = { { acquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request4\" , }, { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request5\" , } }, }, { acquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request6\" , } }, } }, idlePeriodScheduleId = nil , receivePeriodScheduleId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.update_category_model_master_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , rewardIntervalMinutes = 10 , defaultMaximumIdleMinutes = 2880 , rewardResetMode = nil , acquireActions = { { acquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request4\" , }, { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request5\" , } }, }, { acquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request6\" , } }, } }, idlePeriodScheduleId = nil , receivePeriodScheduleId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCategoryModelMaster 카테고리 모델 마스터 삭제 지정한 카테고리 모델 마스터를 삭제합니다. 현재 활성화된 모델에는 영향을 주지 않으며, 삭제는 마스터 데이터를 다시 활성화한 후에만 반영됩니다. 이 카테고리와 관련된 기존 사용자 상태는 자동으로 삭제되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CategoryModelMaster 삭제한 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/idle\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := idle . Gs2IdleRestClient { Session : \u0026 session , } result , err := client . DeleteCategoryModelMaster ( \u0026 idle . DeleteCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Idle\\Gs2IdleRestClient ; use Gs2\\Idle\\Request\\DeleteCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2IdleRestClient ( $session ); try { $result = $client -\u003e deleteCategoryModelMaster ( ( new DeleteCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.idle.rest.Gs2IdleRestClient ; import io.gs2.idle.request.DeleteCategoryModelMasterRequest ; import io.gs2.idle.result.DeleteCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2IdleRestClient client = new Gs2IdleRestClient ( session ); try { DeleteCategoryModelMasterResult result = client . deleteCategoryModelMaster ( new DeleteCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-model-0001\" ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2IdleRestClient ( session ); AsyncResult Gs2 . Gs2Idle . Result . DeleteCategoryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteCategoryModelMaster ( new Gs2 . Gs2Idle . Request . DeleteCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Idle from '@/gs2/idle' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Idle . Gs2IdleRestClient ( session ); try { const result = await client . deleteCategoryModelMaster ( new Gs2Idle . DeleteCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import idle session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = idle . Gs2IdleRestClient ( session ) try : result = client . delete_category_model_master ( idle . DeleteCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'idle' ) api_result = client.delete_category_model_master ({ namespaceName = \"namespace-0001\" , categoryName = \"category-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'idle' ) api_result_handler = client.delete_category_model_master_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Idle SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Idle SDK API 레퍼런스","url":"/ko/api_reference/idle/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 isAutomaticDeletingEnabled bool false 자동 삭제 활성화하면 메시지가 개봉(읽음 처리)된 후 사용자의 메시지 목록에서 자동으로 삭제됩니다. 클라이언트의 명시적인 삭제 작업 없이 수령이 완료된 메시지를 삭제하여 수신함을 정리합니다. 비활성화된 경우, 개봉된 메시지는 수동으로 삭제할 때까지 목록에 남아 있습니다. transactionSetting TransactionSetting 트랜잭션 설정 메시지에 첨부된 보상을 지급할 때 사용되는 분산 트랜잭션 처리 설정입니다. readAcquireActions 를 가진 메시지가 개봉되면 획득 액션이 생성·실행되어 보상이 지급됩니다. 자동 실행, 원자적 커밋, 비동기 처리를 지원합니다. receiveMessageScript ScriptSetting 메시지를 수신했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveMessage readMessageScript ScriptSetting 메시지를 개봉했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - readMessage deleteMessageScript ScriptSetting 메시지를 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteMessage receiveNotification NotificationSetting 수신 알림 사용자의 수신함에 새 메시지가 전달되었을 때 트리거되는 푸시 알림 설정입니다. GS2-Gateway를 사용하여 게임 클라이언트에 실시간 알림을 전송하며, 폴링 없이도 UI에서 새 메시지 표시나 수신함 갱신을 수행할 수 있게 합니다. logSetting LogSetting 로그 출력 설정 메시지 조작과 관련된 API 요청 및 응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 감사나 디버깅 목적으로 메시지의 전달, 개봉, 보상 수령, 삭제를 추적하는 데 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Message 메시지 게임 플레이어마다 준비되는 메시지 박스에 전달된 메시지 데이터. 메시지에는 개봉 상태가 있으며, 개봉 시 실행할 입수 액션을 설정할 수 있습니다. 메시지에는 유효 기한을 설정할 수 있으며, 유효 기한이 지난 메시지는 미읽음 상태, 개봉 후 읽음 상태와 관계없이 자동으로 삭제됩니다. 첨부된 보상을 받지 않은 경우에도 삭제됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 messageId string ※ ~ 1024자 메시지 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 발신자 정보, 표시 파라미터 등을 포함하는 JSON 문자열 등, 메시지의 내용을 나타내는 임의의 데이터입니다. GS2는 이 값을 해석하지 않으며, 메시지 UI 렌더링을 위해 게임 클라이언트에 그대로 전달됩니다. 최대 4096자입니다. isRead bool false 읽음 상태 메시지가 사용자에 의해 개봉되었는지 여부를 나타냅니다. 메시지가 개봉되면 이 플래그가 true로 설정되고, readAcquireActions가 실행되어 첨부된 보상이 지급되며, readAt 타임스탬프가 기록됩니다. 네임스페이스에서 isAutomaticDeletingEnabled가 설정되어 있는 경우, 읽음 처리 후 메시지가 삭제됩니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 입수 액션 사용자가 이 메시지를 개봉했을 때 실행되는 입수 액션 목록입니다. 아이템, 화폐, 리소스 등의 보상을 메시지에 첨부하기 위해 사용됩니다. 여러 액션을 조합하여 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 메시지당 최대 100개의 액션입니다. receivedAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 readAt long 0 개봉 일시 UNIX 시간·밀리초 expiresAt long 유효기간 일시 UNIX 시간·밀리초 revision long 0 0 ~ 9223372036854775805 리비전 GlobalMessage 글로벌 메시지 글로벌 메시지는 게임 플레이어 전체에게 메시지를 전달하는 구조입니다. 글로벌 메시지에는 유효 기간을 설정할 수 있으며, 각 게임 플레이어는 글로벌 메시지를 수신하는 처리를 실행함으로써 유효 기간 내의 글로벌 메시지 중 아직 수신하지 않은 메시지를 자신의 메시지함에 복사합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 globalMessageId string ※ ~ 1024자 전체 사용자 대상 메시지 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 글로벌 메시지 이름 글로벌 메시지 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 표시 파라미터 등을 포함하는 JSON 문자열 등, 글로벌 메시지의 내용을 나타내는 임의의 데이터입니다. 사용자가 이 글로벌 메시지를 수신하면 메타데이터는 수신함 내의 개별 메시지로 복사됩니다. GS2는 이 값을 해석하지 않습니다. 최대 4096자입니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 획득 액션 이 글로벌 메시지에서 복사된 메시지를 사용자가 개봉했을 때 실행되는 획득 액션 목록입니다. 이 액션들은 메타데이터와 함께 각 사용자의 개별 메시지로 복사됩니다. 글로벌 메시지당 최대 100개의 액션입니다. expiresTimeSpan TimeSpan 유효 기한까지의 기간 사용자가 이 글로벌 메시지를 수신(복사)한 시각부터, 복사된 메시지가 만료되어 수신함에서 자동 삭제되기까지의 기간입니다. 일, 시간, 분의 조합으로 지정합니다. 유효 기한에 도달하면 메시지는 읽음 상태와 관계없이 삭제되며, 아직 받지 않은 첨부 보상도 함께 삭제됩니다. messageReceptionPeriodEventId string ~ 1024자 메시지 수신 기간 이벤트 ID 이 글로벌 메시지를 수신(사용자의 수신함에 복사)할 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외에는 사용자가 글로벌 메시지 수신 작업을 실행하더라도 메시지가 전달되지 않습니다. 기간 한정 이벤트 공지나 시즌 캠페인 보상에 유용합니다. Received 수신 완료 글로벌 메시지 중복 전달을 방지하기 위해, 사용자가 이미 수신한 글로벌 메시지를 추적합니다. 사용자가 글로벌 메시지 수신 작업을 트리거하면, 시스템은 이 레코드를 확인하여 이미 수신한 메시지를 건너뜁니다. 각 사용자는 받은 편지함에 복사한 모든 글로벌 메시지의 이름을 누적하는 하나의 Received 레코드를 가집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 receivedId string ※ ~ 1024자 수신 완료된 글로벌 메시지 이름 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID receivedGlobalMessageNames List [] 0 ~ 100 items 수신 완료 글로벌 메시지 이름 목록 사용자가 이미 수신한 글로벌 메시지 이름 목록입니다. 글로벌 메시지 수신 작업이 실행되면, 이 목록에 이름이 포함된 메시지는 건너뜁니다. 최대 100건입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TimeSpan 타임스팬 일, 시간, 분의 조합으로 기간을 나타냅니다. 수신 시각을 기준으로 한 메시지의 유효 기간을 정의하는 데 사용됩니다. 예를 들어 7일, 0시간, 0분의 타임스팬은 사용자가 수신한 후 정확히 1주일 후에 메시지가 만료됨을 의미합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 days int 0 0 ~ 365 일수 이 타임스팬의 일수입니다. 시간, 분과 조합하여 총 기간이 계산됩니다. 최대 365일입니다. hours int 0 0 ~ 24 시간 이 타임스팬의 시간 수입니다. 일수, 분과 조합하여 총 기간이 계산됩니다. 최대 24시간입니다. minutes int 0 0 ~ 60 분 이 타임스팬의 분수입니다. 일수, 시간과 조합하여 총 기간이 계산됩니다. 최대 60분입니다. AcquireAction 획득 액션 보상으로 메시지에 첨부되는 단일 획득 액션을 나타냅니다. 액션 타입(예: 인벤토리에 아이템 추가, 통화 증가)과 그 요청 파라미터로 구성됩니다. 메시지가 개봉되면 이 액션들이 트랜잭션으로 조립되어 실행되고, 사용자에게 보상이 지급됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentMessageMaster 현재 활성화된 글로벌 메시지 마스터 데이터 현재 네임스페이스 내에서 유효한 글로벌 메시지의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Inbox 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 GlobalMessageMaster 글로벌 메시지 마스터 글로벌 메시지 마스터는 게임 내에서 사용되는 글로벌 메시지의 편집·관리용 데이터로, 관리 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·갱신 처리를 수행하면 실제로 게임에서 참조되는 글로벌 메시지로 반영됩니다. 글로벌 메시지는 게임 플레이어 전체에게 메시지를 전달하는 구조입니다. 글로벌 메시지에는 유효 기간을 설정할 수 있으며, 각 게임 플레이어는 글로벌 메시지를 수신하는 처리를 실행함으로써 유효 기간 내의 글로벌 메시지 중 아직 수신하지 않은 메시지를 자신의 메시지함에 복사합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 globalMessageId string ※ ~ 1024자 전체 사용자 대상 메시지 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 64자 글로벌 메시지 이름 네임스페이스 내에서 이 글로벌 메시지를 고유하게 식별하는 이름입니다. 각 사용자가 이미 수신한 글로벌 메시지를 추적하여 중복 전달을 방지하는 데 사용됩니다. 지정하지 않으면 UUID로 자동 생성됩니다. metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 표시 파라미터 등을 포함하는 JSON 문자열 등, 글로벌 메시지의 내용을 나타내는 임의의 데이터입니다. 사용자가 이 글로벌 메시지를 수신하면 메타데이터는 수신함 내의 개별 메시지로 복사됩니다. GS2는 이 값을 해석하지 않습니다. 최대 4096자입니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 획득 액션 이 글로벌 메시지에서 복사된 메시지를 사용자가 개봉했을 때 실행되는 획득 액션 목록입니다. 이 액션들은 메타데이터와 함께 각 사용자의 개별 메시지로 복사됩니다. 글로벌 메시지당 최대 100개의 액션입니다. expiresTimeSpan TimeSpan 유효 기한까지의 기간 사용자가 이 글로벌 메시지를 수신(복사)한 시각부터, 복사된 메시지가 만료되어 수신함에서 자동 삭제되기까지의 기간입니다. 일, 시간, 분의 조합으로 지정합니다. 유효 기한에 도달하면 메시지는 읽음 상태와 관계없이 삭제되며, 아직 받지 않은 첨부 보상도 함께 삭제됩니다. messageReceptionPeriodEventId string ~ 1024자 메시지 수신 기간 이벤트 ID 이 글로벌 메시지를 수신(사용자의 수신함에 복사)할 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외에는 사용자가 글로벌 메시지 수신 작업을 실행하더라도 메시지가 전달되지 않습니다. 기간 한정 이벤트 공지나 시즌 캠페인 보상에 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 inbox . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DescribeNamespacesRequest ; import io.gs2.inbox.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Inbox . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Inbox . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . describe_namespaces ( inbox . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inbox' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 GS2-Inbox 서비스의 새로운 네임스페이스를 생성합니다. isAutomaticDeletingEnabled(읽은 메시지의 자동 삭제 여부), 트랜잭션 설정, 스크립트 콜백(receiveMessageScript, readMessageScript, deleteMessageScript), receiveNotification(메시지 수신 이벤트의 푸시 알림 설정), 로그 설정을 구성할 수 있습니다. 생성 후 글로벌 메시지 마스터를 정의하고, 마스터 데이터 갱신 프로세스를 통해 활성화할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 isAutomaticDeletingEnabled bool false 자동 삭제 활성화하면 메시지가 개봉(읽음 처리)된 후 사용자의 메시지 목록에서 자동으로 삭제됩니다. 클라이언트의 명시적인 삭제 작업 없이 수령이 완료된 메시지를 삭제하여 수신함을 정리합니다. 비활성화된 경우, 개봉된 메시지는 수동으로 삭제할 때까지 목록에 남아 있습니다. transactionSetting TransactionSetting 트랜잭션 설정 메시지에 첨부된 보상을 지급할 때 사용되는 분산 트랜잭션 처리 설정입니다. readAcquireActions 를 가진 메시지가 개봉되면 획득 액션이 생성·실행되어 보상이 지급됩니다. 자동 실행, 원자적 커밋, 비동기 처리를 지원합니다. receiveMessageScript ScriptSetting 메시지를 수신했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveMessage readMessageScript ScriptSetting 메시지를 개봉했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - readMessage deleteMessageScript ScriptSetting 메시지를 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteMessage receiveNotification NotificationSetting 수신 알림 사용자의 수신함에 새 메시지가 전달되었을 때 트리거되는 푸시 알림 설정입니다. GS2-Gateway를 사용하여 게임 클라이언트에 실시간 알림을 전송하며, 폴링 없이도 UI에서 새 메시지 표시나 수신함 갱신을 수행할 수 있게 합니다. logSetting LogSetting 로그 출력 설정 메시지 조작과 관련된 API 요청 및 응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 감사나 디버깅 목적으로 메시지의 전달, 개봉, 보상 수령, 삭제를 추적하는 데 유용합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 inbox . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , IsAutomaticDeletingEnabled : nil , TransactionSetting : \u0026 inbox . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ReceiveMessageScript : nil , ReadMessageScript : nil , DeleteMessageScript : nil , ReceiveNotification : nil , LogSetting : \u0026 inbox . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withIsAutomaticDeletingEnabled ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Inbox\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withReceiveMessageScript ( null ) -\u003e withReadMessageScript ( null ) -\u003e withDeleteMessageScript ( null ) -\u003e withReceiveNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Inbox\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.CreateNamespaceRequest ; import io.gs2.inbox.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withIsAutomaticDeletingEnabled ( null ) . withTransactionSetting ( new io . gs2 . inbox . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReceiveMessageScript ( null ) . withReadMessageScript ( null ) . withDeleteMessageScript ( null ) . withReceiveNotification ( null ) . withLogSetting ( new io . gs2 . inbox . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Inbox . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithIsAutomaticDeletingEnabled ( null ) . WithTransactionSetting ( new Gs2 . Gs2Inbox . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithReceiveMessageScript ( null ) . WithReadMessageScript ( null ) . WithDeleteMessageScript ( null ) . WithReceiveNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Inbox . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Inbox . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withIsAutomaticDeletingEnabled ( null ) . withTransactionSetting ( new Gs2Inbox . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReceiveMessageScript ( null ) . withReadMessageScript ( null ) . withDeleteMessageScript ( null ) . withReceiveNotification ( null ) . withLogSetting ( new Gs2Inbox . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . create_namespace ( inbox . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_is_automatic_deleting_enabled ( None ) . with_transaction_setting ( inbox . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_receive_message_script ( None ) . with_read_message_script ( None ) . with_delete_message_script ( None ) . with_receive_notification ( None ) . with_log_setting ( inbox . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , isAutomaticDeletingEnabled = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, receiveMessageScript = nil , readMessageScript = nil , deleteMessageScript = nil , receiveNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , isAutomaticDeletingEnabled = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, receiveMessageScript = nil , readMessageScript = nil , deleteMessageScript = nil , receiveNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 inbox . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetNamespaceStatusRequest ; import io.gs2.inbox.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Inbox . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Inbox . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_namespace_status ( inbox . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'inbox' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 inbox . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetNamespaceRequest ; import io.gs2.inbox.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Inbox . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Inbox . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_namespace ( inbox . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 설명, 자동 삭제 설정, 트랜잭션 설정, 스크립트 콜백(receiveMessageScript, readMessageScript, deleteMessageScript), receiveNotification, 로그 설정을 변경할 수 있습니다. 변경 사항은 이후 작업에 즉시 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 isAutomaticDeletingEnabled bool false 자동 삭제 활성화하면 메시지가 개봉(읽음 처리)된 후 사용자의 메시지 목록에서 자동으로 삭제됩니다. 클라이언트의 명시적인 삭제 작업 없이 수령이 완료된 메시지를 삭제하여 수신함을 정리합니다. 비활성화된 경우, 개봉된 메시지는 수동으로 삭제할 때까지 목록에 남아 있습니다. transactionSetting TransactionSetting 트랜잭션 설정 메시지에 첨부된 보상을 지급할 때 사용되는 분산 트랜잭션 처리 설정입니다. readAcquireActions 를 가진 메시지가 개봉되면 획득 액션이 생성·실행되어 보상이 지급됩니다. 자동 실행, 원자적 커밋, 비동기 처리를 지원합니다. receiveMessageScript ScriptSetting 메시지를 수신했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveMessage readMessageScript ScriptSetting 메시지를 개봉했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - readMessage deleteMessageScript ScriptSetting 메시지를 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteMessage receiveNotification NotificationSetting 수신 알림 사용자의 수신함에 새 메시지가 전달되었을 때 트리거되는 푸시 알림 설정입니다. GS2-Gateway를 사용하여 게임 클라이언트에 실시간 알림을 전송하며, 폴링 없이도 UI에서 새 메시지 표시나 수신함 갱신을 수행할 수 있게 합니다. logSetting LogSetting 로그 출력 설정 메시지 조작과 관련된 API 요청 및 응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 감사나 디버깅 목적으로 메시지의 전달, 개봉, 보상 수령, 삭제를 추적하는 데 유용합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 inbox . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), IsAutomaticDeletingEnabled : pointy . Bool ( false ), TransactionSetting : \u0026 inbox . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, ReceiveMessageScript : \u0026 inbox . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ), }, ReadMessageScript : \u0026 inbox . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ), }, DeleteMessageScript : \u0026 inbox . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ), }, ReceiveNotification : nil , LogSetting : \u0026 inbox . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withIsAutomaticDeletingEnabled ( false ) -\u003e withTransactionSetting (( new \\Gs2\\Inbox\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withReceiveMessageScript (( new \\Gs2\\Inbox\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) -\u003e withReadMessageScript (( new \\Gs2\\Inbox\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) -\u003e withDeleteMessageScript (( new \\Gs2\\Inbox\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) -\u003e withReceiveNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Inbox\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.UpdateNamespaceRequest ; import io.gs2.inbox.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withIsAutomaticDeletingEnabled ( false ) . withTransactionSetting ( new io . gs2 . inbox . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withReceiveMessageScript ( new io . gs2 . inbox . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . withReadMessageScript ( new io . gs2 . inbox . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . withDeleteMessageScript ( new io . gs2 . inbox . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . withReceiveNotification ( null ) . withLogSetting ( new io . gs2 . inbox . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Inbox . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithIsAutomaticDeletingEnabled ( false ) . WithTransactionSetting ( new Gs2 . Gs2Inbox . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithReceiveMessageScript ( new Gs2 . Gs2Inbox . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . WithReadMessageScript ( new Gs2 . Gs2Inbox . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . WithDeleteMessageScript ( new Gs2 . Gs2Inbox . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . WithReceiveNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Inbox . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Inbox . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withIsAutomaticDeletingEnabled ( false ) . withTransactionSetting ( new Gs2Inbox . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withReceiveMessageScript ( new Gs2Inbox . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . withReadMessageScript ( new Gs2Inbox . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . withDeleteMessageScript ( new Gs2Inbox . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . withReceiveNotification ( null ) . withLogSetting ( new Gs2Inbox . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . update_namespace ( inbox . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_is_automatic_deleting_enabled ( False ) . with_transaction_setting ( inbox . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_receive_message_script ( inbox . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002' )) . with_read_message_script ( inbox . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004' )) . with_delete_message_script ( inbox . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006' )) . with_receive_notification ( None ) . with_log_setting ( inbox . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , isAutomaticDeletingEnabled = false , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, receiveMessageScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , }, readMessageScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , }, deleteMessageScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , }, receiveNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , isAutomaticDeletingEnabled = false , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, receiveMessageScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , }, readMessageScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , }, deleteMessageScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , }, receiveNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 inbox . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DeleteNamespaceRequest ; import io.gs2.inbox.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Inbox . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Inbox . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . delete_namespace ( inbox . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 inbox . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetServiceVersionRequest ; import io.gs2.inbox.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Inbox . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Inbox . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_service_version ( inbox . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 inbox . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DumpUserDataByUserIdRequest ; import io.gs2.inbox.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Inbox . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Inbox . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . dump_user_data_by_user_id ( inbox . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inbox' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 덤프가 완료된 경우 출력 데이터의 URL을 반환합니다. 덤프가 아직 진행 중인 경우 URL은 비어 있습니다. 덤프된 데이터에는 지정된 사용자의 모든 메시지 레코드와 수신 완료 글로벌 메시지 추적 데이터가 gzip 형식으로 압축되어 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 inbox . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.inbox.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Inbox . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Inbox . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( inbox . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'inbox' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 inbox . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.CleanUserDataByUserIdRequest ; import io.gs2.inbox.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Inbox . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Inbox . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . clean_user_data_by_user_id ( inbox . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inbox' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 클린 작업의 완료 상태를 반환합니다. 클린 작업은 동일한 소유자가 소유한 모든 네임스페이스에 걸쳐, 지정된 사용자의 모든 메시지 레코드와 수신 완료 글로벌 메시지 추적 데이터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 inbox . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.inbox.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Inbox . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Inbox . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( inbox . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inbox' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 inbox . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.inbox.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Inbox . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Inbox . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( inbox . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'inbox' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 inbox . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.ImportUserDataByUserIdRequest ; import io.gs2.inbox.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Inbox . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Inbox . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . import_user_data_by_user_id ( inbox . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inbox' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 완료 상태와, 이용 가능한 경우 임포트 로그의 URL을 반환합니다. 임포트는 받은 편지함 데이터(inbox.json)를 포함하는 업로드된 ZIP 파일을 처리하고, 각 레코드의 구조와 데이터 유형(Message 또는 Received)을 검증하여 지정된 사용자의 레코드를 복원합니다. 데이터 내 템플릿 변수는 임포트 중에 자동으로 치환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 inbox . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.CheckImportUserDataByUserIdRequest ; import io.gs2.inbox.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Inbox . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Inbox . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( inbox . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'inbox' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeMessages 메시지 목록 조회 인증된 사용자의 수신함에 있는 메시지의 페이지네이션 목록을 취득합니다. isRead 파라미터를 사용하여 읽음 상태로 필터링할 수 있습니다. 지정하지 않으면 읽음 상태와 관계없이 모든 메시지가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 isRead bool? 읽음 상태 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 메시지 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DescribeMessages ( \u0026 inbox . DescribeMessagesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), IsRead : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DescribeMessagesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e describeMessages ( ( new DescribeMessagesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withIsRead ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DescribeMessagesRequest ; import io.gs2.inbox.result.DescribeMessagesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DescribeMessagesResult result = client . describeMessages ( new DescribeMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withIsRead ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Message \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DescribeMessagesResult \u003e asyncResult = null ; yield return client . DescribeMessages ( new Gs2 . Gs2Inbox . Request . DescribeMessagesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithIsRead ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . describeMessages ( new Gs2Inbox . DescribeMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withIsRead ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . describe_messages ( inbox . DescribeMessagesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_is_read ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.describe_messages ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , isRead = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inbox' ) api_result_handler = client.describe_messages_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , isRead = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeMessagesByUserId 사용자 ID를 지정하여 메시지 목록 조회 지정된 사용자의 수신함에 있는 메시지의 페이지네이션 목록을 취득합니다. isRead 파라미터를 사용하여 읽음 상태로 필터링할 수 있습니다. 지정하지 않으면 읽음 상태와 관계없이 모든 메시지가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID isRead bool? 읽음 상태 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 메시지 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DescribeMessagesByUserId ( \u0026 inbox . DescribeMessagesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), IsRead : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DescribeMessagesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e describeMessagesByUserId ( ( new DescribeMessagesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withIsRead ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DescribeMessagesByUserIdRequest ; import io.gs2.inbox.result.DescribeMessagesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DescribeMessagesByUserIdResult result = client . describeMessagesByUserId ( new DescribeMessagesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withIsRead ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Message \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DescribeMessagesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeMessagesByUserId ( new Gs2 . Gs2Inbox . Request . DescribeMessagesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithIsRead ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . describeMessagesByUserId ( new Gs2Inbox . DescribeMessagesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withIsRead ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . describe_messages_by_user_id ( inbox . DescribeMessagesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_is_read ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.describe_messages_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , isRead = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inbox' ) api_result_handler = client.describe_messages_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , isRead = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; sendMessageByUserId 사용자 ID를 지정하여 메시지 발신 지정된 사용자의 수신함에 새로운 메시지를 생성하여 전달합니다. 메시지에는 메타데이터(임의의 JSON 콘텐츠)와 readAcquireActions(메시지 개봉 시 부여되는 보상)를 포함할 수 있습니다. 메시지의 유효기간은 절대 타임스탬프(expiresAt) 또는 전달 시점부터의 상대적인 기간(expiresTimeSpan)으로 설정할 수 있습니다. expiresAt가 지정된 경우 expiresTimeSpan보다 우선 적용됩니다. 메시지는 읽지 않은 상태(isRead=false)로 시작됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 발신자 정보, 표시 파라미터 등을 포함하는 JSON 문자열 등, 메시지의 내용을 나타내는 임의의 데이터입니다. GS2는 이 값을 해석하지 않으며, 메시지 UI 렌더링을 위해 게임 클라이언트에 그대로 전달됩니다. 최대 4096자입니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 입수 액션 사용자가 이 메시지를 개봉했을 때 실행되는 입수 액션 목록입니다. 아이템, 화폐, 리소스 등의 보상을 메시지에 첨부하기 위해 사용됩니다. 여러 액션을 조합하여 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 메시지당 최대 100개의 액션입니다. expiresAt long 유효기간 일시 UNIX 시간·밀리초 expiresTimeSpan TimeSpan 메시지를 수신한 시각(기준 시각)부터 메시지가 삭제될 때까지의 기간 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 생성된 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . SendMessageByUserId ( \u0026 inbox . SendMessageByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Metadata : pointy . String ( \"{\\\"type\\\": \\\"message\\\", \\\"body\\\": \\\"hello\\\"}\" ), ReadAcquireActions : nil , ExpiresAt : nil , ExpiresTimeSpan : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\SendMessageByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e sendMessageByUserId ( ( new SendMessageByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMetadata ( \"{ \\\" type \\\" : \\\" message \\\" , \\\" body \\\" : \\\" hello \\\" }\" ) -\u003e withReadAcquireActions ( null ) -\u003e withExpiresAt ( null ) -\u003e withExpiresTimeSpan ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.SendMessageByUserIdRequest ; import io.gs2.inbox.result.SendMessageByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { SendMessageByUserIdResult result = client . sendMessageByUserId ( new SendMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMetadata ( \"{\\\"type\\\": \\\"message\\\", \\\"body\\\": \\\"hello\\\"}\" ) . withReadAcquireActions ( null ) . withExpiresAt ( null ) . withExpiresTimeSpan ( null ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . SendMessageByUserIdResult \u003e asyncResult = null ; yield return client . SendMessageByUserId ( new Gs2 . Gs2Inbox . Request . SendMessageByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMetadata ( \"{\\\"type\\\": \\\"message\\\", \\\"body\\\": \\\"hello\\\"}\" ) . WithReadAcquireActions ( null ) . WithExpiresAt ( null ) . WithExpiresTimeSpan ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . sendMessageByUserId ( new Gs2Inbox . SendMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMetadata ( \"{\\\"type\\\": \\\"message\\\", \\\"body\\\": \\\"hello\\\"}\" ) . withReadAcquireActions ( null ) . withExpiresAt ( null ) . withExpiresTimeSpan ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . send_message_by_user_id ( inbox . SendMessageByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_metadata ( '{\"type\": \"message\", \"body\": \"hello\"}' ) . with_read_acquire_actions ( None ) . with_expires_at ( None ) . with_expires_time_span ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.send_message_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , metadata = \"{ \\\" type \\\" : \\\" message \\\" , \\\" body \\\" : \\\" hello \\\" }\" , readAcquireActions = nil , expiresAt = nil , expiresTimeSpan = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.send_message_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , metadata = \"{ \\\" type \\\" : \\\" message \\\" , \\\" body \\\" : \\\" hello \\\" }\" , readAcquireActions = nil , expiresAt = nil , expiresTimeSpan = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMessage 메시지 조회 메타데이터, 읽음 상태, 설정된 획득 액션을 포함한, 인증된 사용자의 수신함에 있는 특정 메시지의 상세 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. Result 타입 설명 item Message 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetMessage ( \u0026 inbox . GetMessageRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MessageName : pointy . String ( \"message-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetMessageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getMessage ( ( new GetMessageRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMessageName ( \"message-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetMessageRequest ; import io.gs2.inbox.result.GetMessageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetMessageResult result = client . getMessage ( new GetMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageName ( \"message-0001\" ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetMessageResult \u003e asyncResult = null ; yield return client . GetMessage ( new Gs2 . Gs2Inbox . Request . GetMessageRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMessageName ( \"message-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getMessage ( new Gs2Inbox . GetMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageName ( \"message-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_message ( inbox . GetMessageRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_message_name ( 'message-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_message ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageName = \"message-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.get_message_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageName = \"message-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMessageByUserId 사용자 ID를 지정하여 메시지 조회 메타데이터, 읽음 상태, 설정된 획득 액션을 포함한, 지정된 사용자의 수신함에 있는 특정 메시지의 상세 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetMessageByUserId ( \u0026 inbox . GetMessageByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MessageName : pointy . String ( \"message-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetMessageByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getMessageByUserId ( ( new GetMessageByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetMessageByUserIdRequest ; import io.gs2.inbox.result.GetMessageByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetMessageByUserIdResult result = client . getMessageByUserId ( new GetMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetMessageByUserIdResult \u003e asyncResult = null ; yield return client . GetMessageByUserId ( new Gs2 . Gs2Inbox . Request . GetMessageByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMessageName ( \"message-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getMessageByUserId ( new Gs2Inbox . GetMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_message_by_user_id ( inbox . GetMessageByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_message_name ( 'message-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_message_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.get_message_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; receiveGlobalMessage 아직 수신하지 않은 글로벌 메시지 수신 활성화되어 있는 글로벌 메시지를 인증된 사용자의 수신함에 개별 메시지로 변환합니다. 활성화되어 있는 글로벌 메시지 목록을 사용자의 수신 추적 레코드와 비교하여 미배포 메시지를 특정하고, 아직 수신하지 않은 메시지에 한해 새로운 메시지 사본을 생성합니다. 수신 추적 레코드는 갱신되어 이후 호출 시 중복 배포를 방지합니다. 새로 생성된 메시지 목록을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item List 수신한 메시지 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . ReceiveGlobalMessage ( \u0026 inbox . ReceiveGlobalMessageRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\ReceiveGlobalMessageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e receiveGlobalMessage ( ( new ReceiveGlobalMessageRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.ReceiveGlobalMessageRequest ; import io.gs2.inbox.result.ReceiveGlobalMessageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { ReceiveGlobalMessageResult result = client . receiveGlobalMessage ( new ReceiveGlobalMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List Message \u003e item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . ReceiveGlobalMessageResult \u003e asyncResult = null ; yield return client . ReceiveGlobalMessage ( new Gs2 . Gs2Inbox . Request . ReceiveGlobalMessageRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . receiveGlobalMessage ( new Gs2Inbox . ReceiveGlobalMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . receive_global_message ( inbox . ReceiveGlobalMessageRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.receive_global_message ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.receive_global_message_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; receiveGlobalMessageByUserId 사용자 ID를 지정하여 아직 수신하지 않은 글로벌 메시지 수신 활성화되어 있는 글로벌 메시지를 지정된 사용자의 수신함에 개별 메시지로 변환합니다. 활성화되어 있는 글로벌 메시지 목록을 사용자의 수신 추적 레코드와 비교하여 미배포 메시지를 특정하고, 아직 수신하지 않은 메시지에 한해 새로운 메시지 사본을 생성합니다. 수신 추적 레코드는 갱신되어 이후 호출 시 중복 배포를 방지합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item List 수신한 메시지 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . ReceiveGlobalMessageByUserId ( \u0026 inbox . ReceiveGlobalMessageByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\ReceiveGlobalMessageByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e receiveGlobalMessageByUserId ( ( new ReceiveGlobalMessageByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.ReceiveGlobalMessageByUserIdRequest ; import io.gs2.inbox.result.ReceiveGlobalMessageByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { ReceiveGlobalMessageByUserIdResult result = client . receiveGlobalMessageByUserId ( new ReceiveGlobalMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List Message \u003e item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . ReceiveGlobalMessageByUserIdResult \u003e asyncResult = null ; yield return client . ReceiveGlobalMessageByUserId ( new Gs2 . Gs2Inbox . Request . ReceiveGlobalMessageByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . receiveGlobalMessageByUserId ( new Gs2Inbox . ReceiveGlobalMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . receive_global_message_by_user_id ( inbox . ReceiveGlobalMessageByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.receive_global_message_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.receive_global_message_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; openMessage 메시지를 개봉 완료로 표시 인증된 사용자의 수신함에 있는 지정된 메시지를 읽음(개봉 완료) 상태로 표시합니다. 이는 획득 액션을 실행하지 않고 isRead를 true로 설정하는 단순한 상태 전환입니다. 읽음 처리와 동시에 관련된 보상을 실행하려면 대신 Read API를 사용하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. Result 타입 설명 item Message 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . OpenMessage ( \u0026 inbox . OpenMessageRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MessageName : pointy . String ( \"message-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\OpenMessageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e openMessage ( ( new OpenMessageRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMessageName ( \"message-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.OpenMessageRequest ; import io.gs2.inbox.result.OpenMessageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { OpenMessageResult result = client . openMessage ( new OpenMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageName ( \"message-0001\" ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . OpenMessageResult \u003e asyncResult = null ; yield return client . OpenMessage ( new Gs2 . Gs2Inbox . Request . OpenMessageRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMessageName ( \"message-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . openMessage ( new Gs2Inbox . OpenMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageName ( \"message-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . open_message ( inbox . OpenMessageRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_message_name ( 'message-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.open_message ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageName = \"message-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.open_message_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageName = \"message-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; openMessageByUserId 사용자 ID를 지정하여 메시지를 개봉 완료로 표시 지정된 사용자의 수신함에 있는 지정된 메시지를 읽음(개봉 완료) 상태로 표시합니다. 이는 획득 액션을 실행하지 않고 isRead를 true로 설정하는 단순한 상태 전환입니다. 읽음 처리와 동시에 관련된 보상을 실행하려면 대신 Read API를 사용하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . OpenMessageByUserId ( \u0026 inbox . OpenMessageByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MessageName : pointy . String ( \"message-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\OpenMessageByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e openMessageByUserId ( ( new OpenMessageByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.OpenMessageByUserIdRequest ; import io.gs2.inbox.result.OpenMessageByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { OpenMessageByUserIdResult result = client . openMessageByUserId ( new OpenMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . OpenMessageByUserIdResult \u003e asyncResult = null ; yield return client . OpenMessageByUserId ( new Gs2 . Gs2Inbox . Request . OpenMessageByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMessageName ( \"message-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . openMessageByUserId ( new Gs2Inbox . OpenMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . open_message_by_user_id ( inbox . OpenMessageByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_message_name ( 'message-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.open_message_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.open_message_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; closeMessageByUserId 사용자 ID를 지정하여 메시지를 미개봉 상태로 되돌리기 메시지의 읽음 상태를 읽지 않음(isRead=false)으로 되돌립니다. 이는 Open의 역방향 조작이며, 메시지를 읽지 않은 상태로 되돌릴 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . CloseMessageByUserId ( \u0026 inbox . CloseMessageByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MessageName : pointy . String ( \"message-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\CloseMessageByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e closeMessageByUserId ( ( new CloseMessageByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.CloseMessageByUserIdRequest ; import io.gs2.inbox.result.CloseMessageByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { CloseMessageByUserIdResult result = client . closeMessageByUserId ( new CloseMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . CloseMessageByUserIdResult \u003e asyncResult = null ; yield return client . CloseMessageByUserId ( new Gs2 . Gs2Inbox . Request . CloseMessageByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMessageName ( \"message-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . closeMessageByUserId ( new Gs2Inbox . CloseMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . close_message_by_user_id ( inbox . CloseMessageByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_message_name ( 'message-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.close_message_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.close_message_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; readMessage 메시지를 개봉 메시지를 읽음 처리하고, 설정된 readAcquireActions(보상)를 실행합니다. 메시지가 이미 개봉된 경우, 보상의 중복 지급을 방지하기 위해 「alreadyRead」 오류가 반환됩니다. 메시지에 획득 액션이 없는 경우, 트랜잭션을 생성하지 않고 단순히 읽음으로 표시됩니다. 획득 액션이 있는 경우, 보상 트랜잭션이 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item Message 메시지 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . ReadMessage ( \u0026 inbox . ReadMessageRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MessageName : pointy . String ( \"message-0001\" ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\ReadMessageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e readMessage ( ( new ReadMessageRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.ReadMessageRequest ; import io.gs2.inbox.result.ReadMessageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { ReadMessageResult result = client . readMessage ( new ReadMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageName ( \"message-0001\" ) . withConfig ( null ) ); Message item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . ReadMessageResult \u003e asyncResult = null ; yield return client . ReadMessage ( new Gs2 . Gs2Inbox . Request . ReadMessageRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMessageName ( \"message-0001\" ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . readMessage ( new Gs2Inbox . ReadMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageName ( \"message-0001\" ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . read_message ( inbox . ReadMessageRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_message_name ( 'message-0001' ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.read_message ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageName = \"message-0001\" , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'inbox' ) api_result_handler = client.read_message_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageName = \"message-0001\" , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; readMessageByUserId 사용자 ID를 지정하여 메시지를 개봉 지정된 사용자의 메시지를 읽음 처리하고, 설정된 readAcquireActions(보상)를 실행합니다. 메시지가 이미 개봉된 경우, 보상의 중복 지급을 방지하기 위해 「alreadyRead」 오류가 반환됩니다. 메시지에 획득 액션이 없는 경우, 트랜잭션을 생성하지 않고 단순히 읽음으로 표시됩니다. 획득 액션이 있는 경우, 보상 트랜잭션이 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 메시지 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . ReadMessageByUserId ( \u0026 inbox . ReadMessageByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MessageName : pointy . String ( \"message-0001\" ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\ReadMessageByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e readMessageByUserId ( ( new ReadMessageByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.ReadMessageByUserIdRequest ; import io.gs2.inbox.result.ReadMessageByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { ReadMessageByUserIdResult result = client . readMessageByUserId ( new ReadMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . ReadMessageByUserIdResult \u003e asyncResult = null ; yield return client . ReadMessageByUserId ( new Gs2 . Gs2Inbox . Request . ReadMessageByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMessageName ( \"message-0001\" ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . readMessageByUserId ( new Gs2Inbox . ReadMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . read_message_by_user_id ( inbox . ReadMessageByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_message_name ( 'message-0001' ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.read_message_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'inbox' ) api_result_handler = client.read_message_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; batchReadMessages 메시지를 일괄 개봉 여러 메시지를 한 번에 원자적으로 개봉하고, 읽음으로 표시하여 결합된 readAcquireActions(보상)를 실행합니다. 지정된 메시지 중 하나라도 이미 개봉된 경우, 「alreadyRead」 오류가 반환되며 메시지는 처리되지 않습니다. 획득 액션이 없는 메시지는 즉시 읽음으로 표시되며, 보상이 있는 메시지는 하나의 트랜잭션으로 함께 처리됩니다. 한 번의 배치 작업으로 최대 10건의 메시지를 개봉할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 messageNames List  1 ~ 10 items 메시지 이름 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 items List 메시지 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . BatchReadMessages ( \u0026 inbox . BatchReadMessagesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MessageNames : [] * string { pointy . String ( \"message-0001\" ), pointy . String ( \"message-0002\" ), }, Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\BatchReadMessagesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e batchReadMessages ( ( new BatchReadMessagesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMessageNames ([ \"message-0001\" , \"message-0002\" , ]) -\u003e withConfig ( null ) ); $items = $result -\u003e getItems (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.BatchReadMessagesRequest ; import io.gs2.inbox.result.BatchReadMessagesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { BatchReadMessagesResult result = client . batchReadMessages ( new BatchReadMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageNames ( Arrays . asList ( \"message-0001\" , \"message-0002\" )) . withConfig ( null ) ); List Message \u003e items = result . getItems (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . BatchReadMessagesResult \u003e asyncResult = null ; yield return client . BatchReadMessages ( new Gs2 . Gs2Inbox . Request . BatchReadMessagesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMessageNames ( new string [] { \"message-0001\" , \"message-0002\" , }) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . batchReadMessages ( new Gs2Inbox . BatchReadMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageNames ([ \"message-0001\" , \"message-0002\" , ]) . withConfig ( null ) ); const items = result . getItems (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . batch_read_messages ( inbox . BatchReadMessagesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_message_names ([ 'message-0001' , 'message-0002' , ]) . with_config ( None ) ) items = result . items transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.batch_read_messages ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageNames = { \"message-0001\" , \"message-0002\" }, config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'inbox' ) api_result_handler = client.batch_read_messages_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageNames = { \"message-0001\" , \"message-0002\" }, config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; batchReadMessagesByUserId 사용자 ID를 지정하여 메시지를 일괄 개봉 지정된 사용자의 여러 메시지를 한 번에 원자적으로 개봉하고 읽음으로 표시하여, 결합된 readAcquireActions(보상)를 실행합니다. 지정된 메시지 중 하나라도 이미 개봉된 경우, “alreadyRead” 오류가 반환되며 메시지는 처리되지 않습니다. 입수 액션이 없는 메시지는 즉시 읽음으로 표시되며, 보상이 있는 메시지는 단일 트랜잭션에서 함께 처리됩니다. 한 번의 배치 작업으로 최대 10건의 메시지를 개봉할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID messageNames List  1 ~ 10 items 메시지 이름 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 메시지 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . BatchReadMessagesByUserId ( \u0026 inbox . BatchReadMessagesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MessageNames : [] * string { pointy . String ( \"message-0001\" ), pointy . String ( \"message-0002\" ), }, Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\BatchReadMessagesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e batchReadMessagesByUserId ( ( new BatchReadMessagesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMessageNames ([ \"message-0001\" , \"message-0002\" , ]) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.BatchReadMessagesByUserIdRequest ; import io.gs2.inbox.result.BatchReadMessagesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { BatchReadMessagesByUserIdResult result = client . batchReadMessagesByUserId ( new BatchReadMessagesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageNames ( Arrays . asList ( \"message-0001\" , \"message-0002\" )) . withConfig ( null ) . withTimeOffsetToken ( null ) ); List Message \u003e items = result . getItems (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . BatchReadMessagesByUserIdResult \u003e asyncResult = null ; yield return client . BatchReadMessagesByUserId ( new Gs2 . Gs2Inbox . Request . BatchReadMessagesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMessageNames ( new string [] { \"message-0001\" , \"message-0002\" , }) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . batchReadMessagesByUserId ( new Gs2Inbox . BatchReadMessagesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageNames ([ \"message-0001\" , \"message-0002\" , ]) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . batch_read_messages_by_user_id ( inbox . BatchReadMessagesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_message_names ([ 'message-0001' , 'message-0002' , ]) . with_config ( None ) . with_time_offset_token ( None ) ) items = result . items transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.batch_read_messages_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageNames = { \"message-0001\" , \"message-0002\" }, config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'inbox' ) api_result_handler = client.batch_read_messages_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageNames = { \"message-0001\" , \"message-0002\" }, config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; deleteMessage 메시지 삭제 인증된 사용자의 받은 편지함에서 메시지를 완전히 삭제합니다. 읽음 상태와 관계없이 메시지 레코드가 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. Result 타입 설명 item Message 삭제된 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DeleteMessage ( \u0026 inbox . DeleteMessageRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MessageName : pointy . String ( \"message-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DeleteMessageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e deleteMessage ( ( new DeleteMessageRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMessageName ( \"message-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DeleteMessageRequest ; import io.gs2.inbox.result.DeleteMessageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DeleteMessageResult result = client . deleteMessage ( new DeleteMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageName ( \"message-0001\" ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DeleteMessageResult \u003e asyncResult = null ; yield return client . DeleteMessage ( new Gs2 . Gs2Inbox . Request . DeleteMessageRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMessageName ( \"message-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . deleteMessage ( new Gs2Inbox . DeleteMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMessageName ( \"message-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . delete_message ( inbox . DeleteMessageRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_message_name ( 'message-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.delete_message ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageName = \"message-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.delete_message_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , messageName = \"message-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMessageByUserId 사용자 ID를 지정하여 메시지 삭제 지정된 사용자의 받은 편지함에서 메시지를 완전히 삭제합니다. 읽음 상태와 관계없이 메시지 레코드가 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Message 삭제된 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DeleteMessageByUserId ( \u0026 inbox . DeleteMessageByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MessageName : pointy . String ( \"message-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DeleteMessageByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e deleteMessageByUserId ( ( new DeleteMessageByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMessageName ( \"message-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DeleteMessageByUserIdRequest ; import io.gs2.inbox.result.DeleteMessageByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DeleteMessageByUserIdResult result = client . deleteMessageByUserId ( new DeleteMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); Message item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DeleteMessageByUserIdResult \u003e asyncResult = null ; yield return client . DeleteMessageByUserId ( new Gs2 . Gs2Inbox . Request . DeleteMessageByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMessageName ( \"message-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . deleteMessageByUserId ( new Gs2Inbox . DeleteMessageByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMessageName ( \"message-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . delete_message_by_user_id ( inbox . DeleteMessageByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_message_name ( 'message-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.delete_message_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.delete_message_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , messageName = \"message-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGlobalMessages 전체 사용자 대상 메시지 목록 조회 지정된 네임스페이스 내에서 현재 활성화되어 있는 글로벌 메시지의 목록을 취득합니다. 수신 기간 내의 메시지만 반환되며, 수신 기간을 벗어난 메시지는 제외됩니다. 글로벌 메시지는 ReceiveGlobalMessage API를 사용하여 개별 사용자 메시지로 변환할 수 있는 브로드캐스트 메시지입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 전체 사용자 대상 메시지 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DescribeGlobalMessages ( \u0026 inbox . DescribeGlobalMessagesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DescribeGlobalMessagesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e describeGlobalMessages ( ( new DescribeGlobalMessagesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DescribeGlobalMessagesRequest ; import io.gs2.inbox.result.DescribeGlobalMessagesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DescribeGlobalMessagesResult result = client . describeGlobalMessages ( new DescribeGlobalMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) ); List GlobalMessage \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DescribeGlobalMessagesResult \u003e asyncResult = null ; yield return client . DescribeGlobalMessages ( new Gs2 . Gs2Inbox . Request . DescribeGlobalMessagesRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . describeGlobalMessages ( new Gs2Inbox . DescribeGlobalMessagesRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . describe_global_messages ( inbox . DescribeGlobalMessagesRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.describe_global_messages ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inbox' ) api_result_handler = client.describe_global_messages_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getGlobalMessage 전체 사용자 대상 메시지 조회 이름을 지정하여 특정 글로벌 메시지를 취득합니다. 메시지는 수신 기간 내에 있어야 합니다. 수신 기간을 벗어난 경우 404 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. globalMessageName string  ~ 128자 글로벌 메시지 이름 글로벌 메시지 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GlobalMessage 전체 사용자 대상 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetGlobalMessage ( \u0026 inbox . GetGlobalMessageRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GlobalMessageName : pointy . String ( \"globalMessage-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetGlobalMessageRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getGlobalMessage ( ( new GetGlobalMessageRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGlobalMessageName ( \"globalMessage-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetGlobalMessageRequest ; import io.gs2.inbox.result.GetGlobalMessageResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetGlobalMessageResult result = client . getGlobalMessage ( new GetGlobalMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withGlobalMessageName ( \"globalMessage-0001\" ) ); GlobalMessage item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetGlobalMessageResult \u003e asyncResult = null ; yield return client . GetGlobalMessage ( new Gs2 . Gs2Inbox . Request . GetGlobalMessageRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGlobalMessageName ( \"globalMessage-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getGlobalMessage ( new Gs2Inbox . GetGlobalMessageRequest () . withNamespaceName ( \"namespace-0001\" ) . withGlobalMessageName ( \"globalMessage-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_global_message ( inbox . GetGlobalMessageRequest () . with_namespace_name ( 'namespace-0001' ) . with_global_message_name ( 'globalMessage-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_global_message ({ namespaceName = \"namespace-0001\" , globalMessageName = \"globalMessage-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.get_global_message_async ({ namespaceName = \"namespace-0001\" , globalMessageName = \"globalMessage-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getReceivedByUserId 사용자 ID를 지정하여 수신 완료 글로벌 메시지 취득 지정된 사용자가 이미 수신한 글로벌 메시지 이름 목록을 취득합니다. 이 추적 레코드는 ReceiveGlobalMessage가 아직 사용자에게 전달되지 않은 글로벌 메시지를 판별하여 중복 전달을 방지하는 데 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Received 수신 완료 글로벌 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetReceivedByUserId ( \u0026 inbox . GetReceivedByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetReceivedByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getReceivedByUserId ( ( new GetReceivedByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetReceivedByUserIdRequest ; import io.gs2.inbox.result.GetReceivedByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetReceivedByUserIdResult result = client . getReceivedByUserId ( new GetReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Received item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetReceivedByUserIdResult \u003e asyncResult = null ; yield return client . GetReceivedByUserId ( new Gs2 . Gs2Inbox . Request . GetReceivedByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getReceivedByUserId ( new Gs2Inbox . GetReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_received_by_user_id ( inbox . GetReceivedByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_received_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.get_received_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateReceivedByUserId 사용자 ID를 지정하여 수신 완료 글로벌 메시지 갱신 사용자가 수신한 글로벌 메시지 이름 목록을 직접 갱신합니다. 특정 글로벌 메시지를 수신 완료로 수동으로 표시하거나, 재전달을 위해 수신 상태를 초기화하는 데 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID receivedGlobalMessageNames List [] 0 ~ 100 items 수신 완료 글로벌 메시지 이름 목록 사용자가 이미 수신한 글로벌 메시지 이름 목록입니다. 글로벌 메시지 수신 작업이 실행되면, 이 목록에 이름이 포함된 메시지는 건너뜁니다. 최대 100건입니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Received 갱신된 수신 완료 글로벌 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . UpdateReceivedByUserId ( \u0026 inbox . UpdateReceivedByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ReceivedGlobalMessageNames : [] * string { pointy . String ( \"message-3001\" ), pointy . String ( \"message-3002\" ), pointy . String ( \"message-3003\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\UpdateReceivedByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e updateReceivedByUserId ( ( new UpdateReceivedByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withReceivedGlobalMessageNames ([ \"message-3001\" , \"message-3002\" , \"message-3003\" , ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.UpdateReceivedByUserIdRequest ; import io.gs2.inbox.result.UpdateReceivedByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { UpdateReceivedByUserIdResult result = client . updateReceivedByUserId ( new UpdateReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withReceivedGlobalMessageNames ( Arrays . asList ( \"message-3001\" , \"message-3002\" , \"message-3003\" )) . withTimeOffsetToken ( null ) ); Received item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . UpdateReceivedByUserIdResult \u003e asyncResult = null ; yield return client . UpdateReceivedByUserId ( new Gs2 . Gs2Inbox . Request . UpdateReceivedByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithReceivedGlobalMessageNames ( new string [] { \"message-3001\" , \"message-3002\" , \"message-3003\" , }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . updateReceivedByUserId ( new Gs2Inbox . UpdateReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withReceivedGlobalMessageNames ([ \"message-3001\" , \"message-3002\" , \"message-3003\" , ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . update_received_by_user_id ( inbox . UpdateReceivedByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_received_global_message_names ([ 'message-3001' , 'message-3002' , 'message-3003' , ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.update_received_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , receivedGlobalMessageNames = { \"message-3001\" , \"message-3002\" , \"message-3003\" }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.update_received_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , receivedGlobalMessageNames = { \"message-3001\" , \"message-3002\" , \"message-3003\" }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteReceivedByUserId 사용자 ID를 지정하여 수신 완료 글로벌 메시지 삭제 지정된 사용자의 수신 추적 레코드를 삭제합니다. 삭제 후, 다음 ReceiveGlobalMessage 호출 시 모든 활성 글로벌 메시지가 미수신으로 처리되어 개별 메시지로 다시 전달됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Received 수신 완료 글로벌 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DeleteReceivedByUserId ( \u0026 inbox . DeleteReceivedByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DeleteReceivedByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e deleteReceivedByUserId ( ( new DeleteReceivedByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DeleteReceivedByUserIdRequest ; import io.gs2.inbox.result.DeleteReceivedByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DeleteReceivedByUserIdResult result = client . deleteReceivedByUserId ( new DeleteReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Received item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DeleteReceivedByUserIdResult \u003e asyncResult = null ; yield return client . DeleteReceivedByUserId ( new Gs2 . Gs2Inbox . Request . DeleteReceivedByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . deleteReceivedByUserId ( new Gs2Inbox . DeleteReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . delete_received_by_user_id ( inbox . DeleteReceivedByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.delete_received_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.delete_received_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 글로벌 메시지 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 네임스페이스 내의 모든 글로벌 메시지 마스터를 활성화에 적합한 JSON 문서로 내보냅니다. 내보내지는 데이터에는 각 글로벌 메시지의 전체 설정(메타데이터, 개봉 시 획득 액션, 유효기간 설정, 수신 기간 참조)이 포함됩니다. 이 데이터는 다른 네임스페이스에서 마스터 데이터를 활성화하는 데 사용하거나 버전 관리 목적으로 저장할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentMessageMaster 활성화 가능한 글로벌 메시지의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 inbox . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.ExportMasterRequest ; import io.gs2.inbox.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentMessageMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Inbox . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Inbox . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . export_master ( inbox . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentMessageMaster 현재 활성화되어 있는 글로벌 메시지의 마스터 데이터 조회 네임스페이스 내에서 이용 가능한 글로벌 메시지를 정의하는, 현재 활성화되어 있는 마스터 데이터를 취득합니다. 이는 마지막으로 활성화된 데이터이며, 글로벌 메시지 요청 및 ReceiveGlobalMessage 조작을 제공하는 데 사용되고 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentMessageMaster 현재 활성화되어 있는 글로벌 메시지의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetCurrentMessageMaster ( \u0026 inbox . GetCurrentMessageMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetCurrentMessageMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getCurrentMessageMaster ( ( new GetCurrentMessageMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetCurrentMessageMasterRequest ; import io.gs2.inbox.result.GetCurrentMessageMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetCurrentMessageMasterResult result = client . getCurrentMessageMaster ( new GetCurrentMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentMessageMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetCurrentMessageMasterResult \u003e asyncResult = null ; yield return client . GetCurrentMessageMaster ( new Gs2 . Gs2Inbox . Request . GetCurrentMessageMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getCurrentMessageMaster ( new Gs2Inbox . GetCurrentMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_current_message_master ( inbox . GetCurrentMessageMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_current_message_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.get_current_message_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentMessageMaster 현재 활성화되어 있는 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계에 걸쳐 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentMessageMaster에 업로드로 취득한 토큰을 전달하여 실행함으로써 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentMessageMaster ( \u0026 inbox . PreUpdateCurrentMessageMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\PreUpdateCurrentMessageMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentMessageMaster ( ( new PreUpdateCurrentMessageMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.PreUpdateCurrentMessageMasterRequest ; import io.gs2.inbox.result.PreUpdateCurrentMessageMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { PreUpdateCurrentMessageMasterResult result = client . preUpdateCurrentMessageMaster ( new PreUpdateCurrentMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . PreUpdateCurrentMessageMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentMessageMaster ( new Gs2 . Gs2Inbox . Request . PreUpdateCurrentMessageMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . preUpdateCurrentMessageMaster ( new Gs2Inbox . PreUpdateCurrentMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . pre_update_current_message_master ( inbox . PreUpdateCurrentMessageMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.pre_update_current_message_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'inbox' ) api_result_handler = client.pre_update_current_message_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentMessageMaster 현재 활성화되어 있는 글로벌 메시지의 마스터 데이터 갱신 현재 활성화되어 있는 글로벌 메시지를 교체할 새로운 마스터 데이터를 활성화합니다. 두 가지 모드를 지원합니다: 「direct」는 인라인 JSON 데이터용(작은 페이로드에 적합), 「preUpload」는 서명된 URL을 통해 업로드된 데이터용(1MB를 초과하는 데이터에 필요하며, PreUpdate에서 취득한 토큰을 사용). 활성화 후, 새로운 글로벌 메시지는 ReceiveGlobalMessage 조작에서 즉시 이용할 수 있게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentMessageMaster 갱신된, 현재 활성화되어 있는 글로벌 메시지의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentMessageMaster ( \u0026 inbox . UpdateCurrentMessageMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2020-03-12\\\",\\n \\\"globalMessages\\\": [\\n {\\n \\\"name\\\": \\\"message-0001\\\",\\n \\\"metadata\\\": \\\"hoge\\\"\\n },\\n {\\n \\\"name\\\": \\\"message-0002\\\",\\n \\\"metadata\\\": \\\"fuga\\\",\\n \\\"readAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId-request\\\"\\n }\\n ],\\n \\\"expiresTimeSpan\\\": {\\n \\\"days\\\": 1,\\n \\\"hours\\\": 2,\\n \\\"minutes\\\": 3\\n }\\n },\\n {\\n \\\"name\\\": \\\"message-0003\\\",\\n \\\"metadata\\\": \\\"piyo\\\",\\n \\\"expiresAt\\\": 1000\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\UpdateCurrentMessageMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e updateCurrentMessageMaster ( ( new UpdateCurrentMessageMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2020-03-12 \\\" , \\n \\\" globalMessages \\\" : [ \\n { \\n \\\" name \\\" : \\\" message-0001 \\\" , \\n \\\" metadata \\\" : \\\" hoge \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" message-0002 \\\" , \\n \\\" metadata \\\" : \\\" fuga \\\" , \\n \\\" readAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId-request \\\"\\n } \\n ], \\n \\\" expiresTimeSpan \\\" : { \\n \\\" days \\\" : 1, \\n \\\" hours \\\" : 2, \\n \\\" minutes \\\" : 3 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" message-0003 \\\" , \\n \\\" metadata \\\" : \\\" piyo \\\" , \\n \\\" expiresAt \\\" : 1000 \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.UpdateCurrentMessageMasterRequest ; import io.gs2.inbox.result.UpdateCurrentMessageMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { UpdateCurrentMessageMasterResult result = client . updateCurrentMessageMaster ( new UpdateCurrentMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2020-03-12\\\",\\n \\\"globalMessages\\\": [\\n {\\n \\\"name\\\": \\\"message-0001\\\",\\n \\\"metadata\\\": \\\"hoge\\\"\\n },\\n {\\n \\\"name\\\": \\\"message-0002\\\",\\n \\\"metadata\\\": \\\"fuga\\\",\\n \\\"readAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId-request\\\"\\n }\\n ],\\n \\\"expiresTimeSpan\\\": {\\n \\\"days\\\": 1,\\n \\\"hours\\\": 2,\\n \\\"minutes\\\": 3\\n }\\n },\\n {\\n \\\"name\\\": \\\"message-0003\\\",\\n \\\"metadata\\\": \\\"piyo\\\",\\n \\\"expiresAt\\\": 1000\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentMessageMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . UpdateCurrentMessageMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentMessageMaster ( new Gs2 . Gs2Inbox . Request . UpdateCurrentMessageMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2020-03-12\\\",\\n \\\"globalMessages\\\": [\\n {\\n \\\"name\\\": \\\"message-0001\\\",\\n \\\"metadata\\\": \\\"hoge\\\"\\n },\\n {\\n \\\"name\\\": \\\"message-0002\\\",\\n \\\"metadata\\\": \\\"fuga\\\",\\n \\\"readAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId-request\\\"\\n }\\n ],\\n \\\"expiresTimeSpan\\\": {\\n \\\"days\\\": 1,\\n \\\"hours\\\": 2,\\n \\\"minutes\\\": 3\\n }\\n },\\n {\\n \\\"name\\\": \\\"message-0003\\\",\\n \\\"metadata\\\": \\\"piyo\\\",\\n \\\"expiresAt\\\": 1000\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . updateCurrentMessageMaster ( new Gs2Inbox . UpdateCurrentMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2020-03-12\\\",\\n \\\"globalMessages\\\": [\\n {\\n \\\"name\\\": \\\"message-0001\\\",\\n \\\"metadata\\\": \\\"hoge\\\"\\n },\\n {\\n \\\"name\\\": \\\"message-0002\\\",\\n \\\"metadata\\\": \\\"fuga\\\",\\n \\\"readAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId-request\\\"\\n }\\n ],\\n \\\"expiresTimeSpan\\\": {\\n \\\"days\\\": 1,\\n \\\"hours\\\": 2,\\n \\\"minutes\\\": 3\\n }\\n },\\n {\\n \\\"name\\\": \\\"message-0003\\\",\\n \\\"metadata\\\": \\\"piyo\\\",\\n \\\"expiresAt\\\": 1000\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . update_current_message_master ( inbox . UpdateCurrentMessageMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2020-03-12\", \\n \"globalMessages\": [ \\n { \\n \"name\": \"message-0001\", \\n \"metadata\": \"hoge\" \\n }, \\n { \\n \"name\": \"message-0002\", \\n \"metadata\": \"fuga\", \\n \"readAcquireActions\": [ \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId-request\" \\n } \\n ], \\n \"expiresTimeSpan\": { \\n \"days\": 1, \\n \"hours\": 2, \\n \"minutes\": 3 \\n } \\n }, \\n { \\n \"name\": \"message-0003\", \\n \"metadata\": \"piyo\", \\n \"expiresAt\": 1000 \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.update_current_message_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2020-03-12 \\\" , \\n \\\" globalMessages \\\" : [ \\n { \\n \\\" name \\\" : \\\" message-0001 \\\" , \\n \\\" metadata \\\" : \\\" hoge \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" message-0002 \\\" , \\n \\\" metadata \\\" : \\\" fuga \\\" , \\n \\\" readAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId-request \\\"\\n } \\n ], \\n \\\" expiresTimeSpan \\\" : { \\n \\\" days \\\" : 1, \\n \\\" hours \\\" : 2, \\n \\\" minutes \\\" : 3 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" message-0003 \\\" , \\n \\\" metadata \\\" : \\\" piyo \\\" , \\n \\\" expiresAt \\\" : 1000 \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.update_current_message_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2020-03-12 \\\" , \\n \\\" globalMessages \\\" : [ \\n { \\n \\\" name \\\" : \\\" message-0001 \\\" , \\n \\\" metadata \\\" : \\\" hoge \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" message-0002 \\\" , \\n \\\" metadata \\\" : \\\" fuga \\\" , \\n \\\" readAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId-request \\\"\\n } \\n ], \\n \\\" expiresTimeSpan \\\" : { \\n \\\" days \\\" : 1, \\n \\\" hours \\\" : 2, \\n \\\" minutes \\\" : 3 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" message-0003 \\\" , \\n \\\" metadata \\\" : \\\" piyo \\\" , \\n \\\" expiresAt \\\" : 1000 \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentMessageMasterFromGitHub 현재 활성화되어 있는 글로벌 메시지의 마스터 데이터를 GitHub에서 갱신 GitHub 리포지토리에서 마스터 데이터를 취득하여 현재 글로벌 메시지 설정으로 활성화합니다. 체크아웃 설정에서 마스터 데이터 JSON을 취득할 리포지토리, 브랜치/태그 및 파일 경로를 지정합니다. 파일 내의 템플릿 변수(region, ownerId, userId)는 처리 중에 자동으로 치환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentMessageMaster 갱신된, 현재 활성화되어 있는 글로벌 메시지의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentMessageMasterFromGitHub ( \u0026 inbox . UpdateCurrentMessageMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 inbox . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\UpdateCurrentMessageMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e updateCurrentMessageMasterFromGitHub ( ( new UpdateCurrentMessageMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.UpdateCurrentMessageMasterFromGitHubRequest ; import io.gs2.inbox.result.UpdateCurrentMessageMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { UpdateCurrentMessageMasterFromGitHubResult result = client . updateCurrentMessageMasterFromGitHub ( new UpdateCurrentMessageMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentMessageMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . UpdateCurrentMessageMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentMessageMasterFromGitHub ( new Gs2 . Gs2Inbox . Request . UpdateCurrentMessageMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Inbox . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . updateCurrentMessageMasterFromGitHub ( new Gs2Inbox . UpdateCurrentMessageMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Inbox . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . update_current_message_master_from_git_hub ( inbox . UpdateCurrentMessageMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( inbox . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.update_current_message_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.update_current_message_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGlobalMessageMasters 전체 사용자 대상 메시지 목록 조회 수신 기간과 관계없이, 지정된 네임스페이스 내의 모든 글로벌 메시지 마스터의 페이지네이션 목록을 취득합니다. 아직 활성화되지 않은 메시지나 이미 기한이 만료된 메시지도 포함하는, 관리용 화면입니다. 이름 접두사를 이용한 선택적 필터링을 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 전체 사용자 대상 메시지 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 전체 사용자 대상 메시지 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DescribeGlobalMessageMasters ( \u0026 inbox . DescribeGlobalMessageMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DescribeGlobalMessageMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e describeGlobalMessageMasters ( ( new DescribeGlobalMessageMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DescribeGlobalMessageMastersRequest ; import io.gs2.inbox.result.DescribeGlobalMessageMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DescribeGlobalMessageMastersResult result = client . describeGlobalMessageMasters ( new DescribeGlobalMessageMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List GlobalMessageMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DescribeGlobalMessageMastersResult \u003e asyncResult = null ; yield return client . DescribeGlobalMessageMasters ( new Gs2 . Gs2Inbox . Request . DescribeGlobalMessageMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . describeGlobalMessageMasters ( new Gs2Inbox . DescribeGlobalMessageMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . describe_global_message_masters ( inbox . DescribeGlobalMessageMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.describe_global_message_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inbox' ) api_result_handler = client.describe_global_message_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createGlobalMessageMaster 글로벌 메시지 마스터 신규 생성 전체 사용자에게 브로드캐스트되는 새로운 글로벌 메시지 템플릿을 생성합니다. readAcquireActions(메시지 개봉 시 부여되는 보상)와, 메시지의 유효기간을 사용자가 수신한 시점부터의 상대적인 기간(expiresTimeSpan)으로 설정할 수 있습니다. 선택적으로, messageReceptionPeriodEventId에 GS2-Schedule의 이벤트를 참조하여 사용자가 메시지를 수신할 수 있는 시간대를 제어할 수 있습니다. 생성한 마스터는 현재 마스터 데이터의 갱신 프로세스를 통해 활성화해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  UUID ~ 64자 글로벌 메시지 이름 네임스페이스 내에서 이 글로벌 메시지를 고유하게 식별하는 이름입니다. 각 사용자가 이미 수신한 글로벌 메시지를 추적하여 중복 전달을 방지하는 데 사용됩니다. 지정하지 않으면 UUID로 자동 생성됩니다. metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 표시 파라미터 등을 포함하는 JSON 문자열 등, 글로벌 메시지의 내용을 나타내는 임의의 데이터입니다. 사용자가 이 글로벌 메시지를 수신하면 메타데이터는 수신함 내의 개별 메시지로 복사됩니다. GS2는 이 값을 해석하지 않습니다. 최대 4096자입니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 획득 액션 이 글로벌 메시지에서 복사된 메시지를 사용자가 개봉했을 때 실행되는 획득 액션 목록입니다. 이 액션들은 메타데이터와 함께 각 사용자의 개별 메시지로 복사됩니다. 글로벌 메시지당 최대 100개의 액션입니다. expiresTimeSpan TimeSpan 유효 기한까지의 기간 사용자가 이 글로벌 메시지를 수신(복사)한 시각부터, 복사된 메시지가 만료되어 수신함에서 자동 삭제되기까지의 기간입니다. 일, 시간, 분의 조합으로 지정합니다. 유효 기한에 도달하면 메시지는 읽음 상태와 관계없이 삭제되며, 아직 받지 않은 첨부 보상도 함께 삭제됩니다. messageReceptionPeriodEventId string ~ 1024자 메시지 수신 기간 이벤트 ID 이 글로벌 메시지를 수신(사용자의 수신함에 복사)할 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외에는 사용자가 글로벌 메시지 수신 작업을 실행하더라도 메시지가 전달되지 않습니다. 기간 한정 이벤트 공지나 시즌 캠페인 보상에 유용합니다. Result 타입 설명 item GlobalMessageMaster 생성한 전체 사용자 대상 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . CreateGlobalMessageMaster ( \u0026 inbox . CreateGlobalMessageMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"globalMessageMaster-0001\" ), Metadata : pointy . String ( \"{\\\"type\\\": \\\"globalMessageMaster\\\", \\\"body\\\": \\\"hello\\\"}\" ), ReadAcquireActions : [] inbox . AcquireAction { inbox . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId-request\" ), }, }, ExpiresTimeSpan : nil , MessageReceptionPeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\CreateGlobalMessageMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e createGlobalMessageMaster ( ( new CreateGlobalMessageMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"globalMessageMaster-0001\" ) -\u003e withMetadata ( \"{ \\\" type \\\" : \\\" globalMessageMaster \\\" , \\\" body \\\" : \\\" hello \\\" }\" ) -\u003e withReadAcquireActions ([ ( new \\Gs2\\Inbox\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"Gs2Inventory:AcquireItemSetByUserId-request\" ), ]) -\u003e withExpiresTimeSpan ( null ) -\u003e withMessageReceptionPeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.CreateGlobalMessageMasterRequest ; import io.gs2.inbox.result.CreateGlobalMessageMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { CreateGlobalMessageMasterResult result = client . createGlobalMessageMaster ( new CreateGlobalMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"globalMessageMaster-0001\" ) . withMetadata ( \"{\\\"type\\\": \\\"globalMessageMaster\\\", \\\"body\\\": \\\"hello\\\"}\" ) . withReadAcquireActions ( Arrays . asList ( new io . gs2 . inbox . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"Gs2Inventory:AcquireItemSetByUserId-request\" ) )) . withExpiresTimeSpan ( null ) . withMessageReceptionPeriodEventId ( null ) ); GlobalMessageMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . CreateGlobalMessageMasterResult \u003e asyncResult = null ; yield return client . CreateGlobalMessageMaster ( new Gs2 . Gs2Inbox . Request . CreateGlobalMessageMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"globalMessageMaster-0001\" ) . WithMetadata ( \"{\\\"type\\\": \\\"globalMessageMaster\\\", \\\"body\\\": \\\"hello\\\"}\" ) . WithReadAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"Gs2Inventory:AcquireItemSetByUserId-request\" ), }) . WithExpiresTimeSpan ( null ) . WithMessageReceptionPeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . createGlobalMessageMaster ( new Gs2Inbox . CreateGlobalMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"globalMessageMaster-0001\" ) . withMetadata ( \"{\\\"type\\\": \\\"globalMessageMaster\\\", \\\"body\\\": \\\"hello\\\"}\" ) . withReadAcquireActions ([ new Gs2Inbox . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"Gs2Inventory:AcquireItemSetByUserId-request\" ), ]) . withExpiresTimeSpan ( null ) . withMessageReceptionPeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . create_global_message_master ( inbox . CreateGlobalMessageMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'globalMessageMaster-0001' ) . with_metadata ( '{\"type\": \"globalMessageMaster\", \"body\": \"hello\"}' ) . with_read_acquire_actions ([ inbox . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( 'Gs2Inventory:AcquireItemSetByUserId-request' ), ]) . with_expires_time_span ( None ) . with_message_reception_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.create_global_message_master ({ namespaceName = \"namespace-0001\" , name = \"globalMessageMaster-0001\" , metadata = \"{ \\\" type \\\" : \\\" globalMessageMaster \\\" , \\\" body \\\" : \\\" hello \\\" }\" , readAcquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"Gs2Inventory:AcquireItemSetByUserId-request\" , } }, expiresTimeSpan = nil , messageReceptionPeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.create_global_message_master_async ({ namespaceName = \"namespace-0001\" , name = \"globalMessageMaster-0001\" , metadata = \"{ \\\" type \\\" : \\\" globalMessageMaster \\\" , \\\" body \\\" : \\\" hello \\\" }\" , readAcquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"Gs2Inventory:AcquireItemSetByUserId-request\" , } }, expiresTimeSpan = nil , messageReceptionPeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGlobalMessageMaster 전체 사용자 대상 메시지 조회 메타데이터, 개봉 시 획득 액션, 유효기간 설정, 수신 기간 설정을 포함한 특정 글로벌 메시지 마스터의 상세 정보를 취득합니다. GlobalMessage의 Get API와 달리, 수신 기간 내인지 여부와 관계없이 메시지를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. globalMessageName string  UUID ~ 64자 글로벌 메시지 이름 네임스페이스 내에서 이 글로벌 메시지를 고유하게 식별하는 이름입니다. 각 사용자가 이미 수신한 글로벌 메시지를 추적하여 중복 전달을 방지하는 데 사용됩니다. 지정하지 않으면 UUID로 자동 생성됩니다. Result 타입 설명 item GlobalMessageMaster 전체 사용자 대상 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . GetGlobalMessageMaster ( \u0026 inbox . GetGlobalMessageMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GlobalMessageName : pointy . String ( \"globalMessageMaster-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\GetGlobalMessageMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e getGlobalMessageMaster ( ( new GetGlobalMessageMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGlobalMessageName ( \"globalMessageMaster-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.GetGlobalMessageMasterRequest ; import io.gs2.inbox.result.GetGlobalMessageMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { GetGlobalMessageMasterResult result = client . getGlobalMessageMaster ( new GetGlobalMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGlobalMessageName ( \"globalMessageMaster-0001\" ) ); GlobalMessageMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . GetGlobalMessageMasterResult \u003e asyncResult = null ; yield return client . GetGlobalMessageMaster ( new Gs2 . Gs2Inbox . Request . GetGlobalMessageMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGlobalMessageName ( \"globalMessageMaster-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . getGlobalMessageMaster ( new Gs2Inbox . GetGlobalMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGlobalMessageName ( \"globalMessageMaster-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . get_global_message_master ( inbox . GetGlobalMessageMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_global_message_name ( 'globalMessageMaster-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.get_global_message_master ({ namespaceName = \"namespace-0001\" , globalMessageName = \"globalMessageMaster-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.get_global_message_master_async ({ namespaceName = \"namespace-0001\" , globalMessageName = \"globalMessageMaster-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGlobalMessageMaster 전체 사용자 대상 메시지 갱신 기존 글로벌 메시지 마스터의 속성을 갱신합니다. 메타데이터, 개봉 시 획득 액션(보상), 유효기간 설정, 수신 기간 이벤트 참조를 변경할 수 있습니다. 변경 사항은 현재 마스터 데이터의 갱신 프로세스를 통해 활성화해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. globalMessageName string  UUID ~ 64자 글로벌 메시지 이름 네임스페이스 내에서 이 글로벌 메시지를 고유하게 식별하는 이름입니다. 각 사용자가 이미 수신한 글로벌 메시지를 추적하여 중복 전달을 방지하는 데 사용됩니다. 지정하지 않으면 UUID로 자동 생성됩니다. metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 표시 파라미터 등을 포함하는 JSON 문자열 등, 글로벌 메시지의 내용을 나타내는 임의의 데이터입니다. 사용자가 이 글로벌 메시지를 수신하면 메타데이터는 수신함 내의 개별 메시지로 복사됩니다. GS2는 이 값을 해석하지 않습니다. 최대 4096자입니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 획득 액션 이 글로벌 메시지에서 복사된 메시지를 사용자가 개봉했을 때 실행되는 획득 액션 목록입니다. 이 액션들은 메타데이터와 함께 각 사용자의 개별 메시지로 복사됩니다. 글로벌 메시지당 최대 100개의 액션입니다. expiresTimeSpan TimeSpan 유효 기한까지의 기간 사용자가 이 글로벌 메시지를 수신(복사)한 시각부터, 복사된 메시지가 만료되어 수신함에서 자동 삭제되기까지의 기간입니다. 일, 시간, 분의 조합으로 지정합니다. 유효 기한에 도달하면 메시지는 읽음 상태와 관계없이 삭제되며, 아직 받지 않은 첨부 보상도 함께 삭제됩니다. messageReceptionPeriodEventId string ~ 1024자 메시지 수신 기간 이벤트 ID 이 글로벌 메시지를 수신(사용자의 수신함에 복사)할 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외에는 사용자가 글로벌 메시지 수신 작업을 실행하더라도 메시지가 전달되지 않습니다. 기간 한정 이벤트 공지나 시즌 캠페인 보상에 유용합니다. Result 타입 설명 item GlobalMessageMaster 갱신한 전체 사용자 대상 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . UpdateGlobalMessageMaster ( \u0026 inbox . UpdateGlobalMessageMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GlobalMessageName : pointy . String ( \"globalMessageMaster-0001\" ), Metadata : pointy . String ( \"{\\\"type\\\": \\\"globalMessageMaster2\\\", \\\"body\\\": \\\"hello2\\\"}\" ), ReadAcquireActions : [] inbox . AcquireAction { inbox . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId2\" ), Request : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId-request2\" ), }, }, ExpiresTimeSpan : \u0026 inbox . TimeSpan { Days : pointy . Int32 ( 1 ), Hours : pointy . Int32 ( 2 ), Minutes : pointy . Int32 ( 3 ), }, MessageReceptionPeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\UpdateGlobalMessageMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e updateGlobalMessageMaster ( ( new UpdateGlobalMessageMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGlobalMessageName ( \"globalMessageMaster-0001\" ) -\u003e withMetadata ( \"{ \\\" type \\\" : \\\" globalMessageMaster2 \\\" , \\\" body \\\" : \\\" hello2 \\\" }\" ) -\u003e withReadAcquireActions ([ ( new \\Gs2\\Inbox\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId2\" ) -\u003e withRequest ( \"Gs2Inventory:AcquireItemSetByUserId-request2\" ), ]) -\u003e withExpiresTimeSpan (( new \\Gs2\\Inbox\\Model\\TimeSpan ()) -\u003e withDays ( 1 ) -\u003e withHours ( 2 ) -\u003e withMinutes ( 3 )) -\u003e withMessageReceptionPeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.UpdateGlobalMessageMasterRequest ; import io.gs2.inbox.result.UpdateGlobalMessageMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { UpdateGlobalMessageMasterResult result = client . updateGlobalMessageMaster ( new UpdateGlobalMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGlobalMessageName ( \"globalMessageMaster-0001\" ) . withMetadata ( \"{\\\"type\\\": \\\"globalMessageMaster2\\\", \\\"body\\\": \\\"hello2\\\"}\" ) . withReadAcquireActions ( Arrays . asList ( new io . gs2 . inbox . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId2\" ) . withRequest ( \"Gs2Inventory:AcquireItemSetByUserId-request2\" ) )) . withExpiresTimeSpan ( new io . gs2 . inbox . model . TimeSpan () . withDays ( 1 ) . withHours ( 2 ) . withMinutes ( 3 )) . withMessageReceptionPeriodEventId ( null ) ); GlobalMessageMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . UpdateGlobalMessageMasterResult \u003e asyncResult = null ; yield return client . UpdateGlobalMessageMaster ( new Gs2 . Gs2Inbox . Request . UpdateGlobalMessageMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGlobalMessageName ( \"globalMessageMaster-0001\" ) . WithMetadata ( \"{\\\"type\\\": \\\"globalMessageMaster2\\\", \\\"body\\\": \\\"hello2\\\"}\" ) . WithReadAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId2\" ) . WithRequest ( \"Gs2Inventory:AcquireItemSetByUserId-request2\" ), }) . WithExpiresTimeSpan ( new Gs2 . Gs2Inbox . Model . TimeSpan_ () . WithDays ( 1 ) . WithHours ( 2 ) . WithMinutes ( 3 )) . WithMessageReceptionPeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . updateGlobalMessageMaster ( new Gs2Inbox . UpdateGlobalMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGlobalMessageName ( \"globalMessageMaster-0001\" ) . withMetadata ( \"{\\\"type\\\": \\\"globalMessageMaster2\\\", \\\"body\\\": \\\"hello2\\\"}\" ) . withReadAcquireActions ([ new Gs2Inbox . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId2\" ) . withRequest ( \"Gs2Inventory:AcquireItemSetByUserId-request2\" ), ]) . withExpiresTimeSpan ( new Gs2Inbox . model . TimeSpan () . withDays ( 1 ) . withHours ( 2 ) . withMinutes ( 3 )) . withMessageReceptionPeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . update_global_message_master ( inbox . UpdateGlobalMessageMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_global_message_name ( 'globalMessageMaster-0001' ) . with_metadata ( '{\"type\": \"globalMessageMaster2\", \"body\": \"hello2\"}' ) . with_read_acquire_actions ([ inbox . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId2' ) . with_request ( 'Gs2Inventory:AcquireItemSetByUserId-request2' ), ]) . with_expires_time_span ( inbox . TimeSpan () . with_days ( 1 ) . with_hours ( 2 ) . with_minutes ( 3 )) . with_message_reception_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.update_global_message_master ({ namespaceName = \"namespace-0001\" , globalMessageName = \"globalMessageMaster-0001\" , metadata = \"{ \\\" type \\\" : \\\" globalMessageMaster2 \\\" , \\\" body \\\" : \\\" hello2 \\\" }\" , readAcquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId2\" , request = \"Gs2Inventory:AcquireItemSetByUserId-request2\" , } }, expiresTimeSpan = { days = 1 , hours = 2 , minutes = 3 , }, messageReceptionPeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.update_global_message_master_async ({ namespaceName = \"namespace-0001\" , globalMessageName = \"globalMessageMaster-0001\" , metadata = \"{ \\\" type \\\" : \\\" globalMessageMaster2 \\\" , \\\" body \\\" : \\\" hello2 \\\" }\" , readAcquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId2\" , request = \"Gs2Inventory:AcquireItemSetByUserId-request2\" , } }, expiresTimeSpan = { days = 1 , hours = 2 , minutes = 3 , }, messageReceptionPeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGlobalMessageMaster 전체 사용자 대상 메시지 삭제 지정된 글로벌 메시지 마스터를 삭제합니다. 마스터 데이터의 갱신을 활성화한 후에는 메시지가 새로운 사용자 수신에 이용될 수 없습니다. 이미 개별 메시지로 사용자에게 수신된 메시지는 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. globalMessageName string  UUID ~ 64자 글로벌 메시지 이름 네임스페이스 내에서 이 글로벌 메시지를 고유하게 식별하는 이름입니다. 각 사용자가 이미 수신한 글로벌 메시지를 추적하여 중복 전달을 방지하는 데 사용됩니다. 지정하지 않으면 UUID로 자동 생성됩니다. Result 타입 설명 item GlobalMessageMaster 삭제한 전체 사용자 대상 메시지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inbox\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inbox . Gs2InboxRestClient { Session : \u0026 session , } result , err := client . DeleteGlobalMessageMaster ( \u0026 inbox . DeleteGlobalMessageMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GlobalMessageName : pointy . String ( \"globalMessageMaster-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inbox\\Gs2InboxRestClient ; use Gs2\\Inbox\\Request\\DeleteGlobalMessageMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InboxRestClient ( $session ); try { $result = $client -\u003e deleteGlobalMessageMaster ( ( new DeleteGlobalMessageMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGlobalMessageName ( \"globalMessageMaster-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inbox.rest.Gs2InboxRestClient ; import io.gs2.inbox.request.DeleteGlobalMessageMasterRequest ; import io.gs2.inbox.result.DeleteGlobalMessageMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InboxRestClient client = new Gs2InboxRestClient ( session ); try { DeleteGlobalMessageMasterResult result = client . deleteGlobalMessageMaster ( new DeleteGlobalMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGlobalMessageName ( \"globalMessageMaster-0001\" ) ); GlobalMessageMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InboxRestClient ( session ); AsyncResult Gs2 . Gs2Inbox . Result . DeleteGlobalMessageMasterResult \u003e asyncResult = null ; yield return client . DeleteGlobalMessageMaster ( new Gs2 . Gs2Inbox . Request . DeleteGlobalMessageMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGlobalMessageName ( \"globalMessageMaster-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inbox from '@/gs2/inbox' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inbox . Gs2InboxRestClient ( session ); try { const result = await client . deleteGlobalMessageMaster ( new Gs2Inbox . DeleteGlobalMessageMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withGlobalMessageName ( \"globalMessageMaster-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inbox session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inbox . Gs2InboxRestClient ( session ) try : result = client . delete_global_message_master ( inbox . DeleteGlobalMessageMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_global_message_name ( 'globalMessageMaster-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inbox' ) api_result = client.delete_global_message_master ({ namespaceName = \"namespace-0001\" , globalMessageName = \"globalMessageMaster-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inbox' ) api_result_handler = client.delete_global_message_master_async ({ namespaceName = \"namespace-0001\" , globalMessageName = \"globalMessageMaster-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Inbox SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Inbox SDK API 레퍼런스","url":"/ko/api_reference/inbox/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 아이템 획득 및 소비 등의 인벤토리 조작에 대한 분산 트랜잭션 처리를 설정합니다. 원활한 실행을 위한 자동 실행 모드, 여러 리소스에 대한 일관된 조작을 위한 원자적 커밋(atomic commit), 대규모 보상 배포를 위한 비동기 처리를 지원합니다. acquireScript ScriptSetting 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquire overflowScript ScriptSetting 입수 상한에 도달하여 입수할 수 없었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - overflowDone consumeScript ScriptSetting 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - consume simpleItemAcquireScript ScriptSetting 심플 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - simpleItemAcquire simpleItemConsumeScript ScriptSetting 심플 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - simpleItemConsume bigItemAcquireScript ScriptSetting 거대 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - bigItemAcquire bigItemConsumeScript ScriptSetting 거대 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - bigItemConsume logSetting LogSetting 로그 출력 설정 인벤토리 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그 및 분석을 위해 아이템의 입수, 소비, 용량 변경을 추적하는 데 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Inventory 인벤토리 인벤토리는 게임 플레이어가 소유한 아이템을 보관하기 위한 가방과 같은 것입니다. 가방에는 용량이 있으며, 플레이어마다 용량을 확장할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryId string ※ ~ 1024자 인벤토리 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. userId string  ~ 128자 사용자ID currentInventoryCapacityUsage int 0 0 ~ 2147483646 용량 사용량 아이템 세트에 의해 현재 사용되고 있는 인벤토리 슬롯의 수입니다. 새로운 아이템 스택이 추가될 때(예: allowMultipleStacks에 의해 새로운 슬롯이 생성될 때) 증가하고, 아이템 세트가 완전히 소비되거나 삭제될 때 감소합니다. currentInventoryMaxCapacity를 초과할 수 없습니다. currentInventoryMaxCapacity int  1 ~ 2147483646 최대 용량 이 사용자가 사용할 수 있는 인벤토리 슬롯의 현재 최대 수입니다. 인벤토리 모델의 initialCapacity로 초기화되며, 입수 액션 또는 직접적인 API 호출을 통해 모델의 maxCapacity까지 확장할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ItemSet 아이템 세트 아이템 세트는 게임 플레이어의 인벤토리 내에 저장된 소유물을 나타냅니다. 인벤토리 모델명과 아이템 모델명, 소지 수량, 유효기간 등을 보유합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemSetId string ※ ~ 1024자 아이템 세트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. count long  1 ~ 9223372036854775805 소지 수량 이 스택 내의 아이템 수입니다. 1부터 아이템 모델의 스택 상한까지의 범위입니다. 아이템을 입수하면 스택 상한까지 수량이 증가하고, 소비하면 감소합니다. 수량이 0이 되면 아이템 세트는 삭제되고 인벤토리 슬롯이 해제됩니다. referenceOf List [] 0 ~ 24 items 참조원 목록 이 아이템 세트에 등록된 외부 참조입니다. 어떤 시스템이 이 아이템을 사용하고 있는지(예: 무기로 장비, 편성에 할당)를 추적하는 데 사용됩니다. 아이템 세트당 최대 24개의 참조입니다. sortValue int  0 ~ 2147483646 표시 순서 아이템 모델의 sortValue에서 복사된 숫자 값으로, 인벤토리 내에서 아이템 세트를 표시용으로 정렬하는 데 사용됩니다. 값이 작을수록 먼저 표시됩니다. expiresAt long 0 유효기간 UNIX 시간·밀리초 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 ReferenceOf 소지품의 참조원 장비 슬롯이나 편성 바인드 등, 아이템 세트에 등록된 외부 참조를 나타냅니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 활성 참조원을 가진 아이템 세트는 소비나 삭제로부터 보호되어 사용 중인 아이템이 실수로 삭제되는 것을 방지합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 referenceOfId string ※ ~ 1024자 참조 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 아이템 세트를 식별하는 이름 이 참조가 부여된 아이템 세트의 UUID 이름입니다. 인벤토리 내의 어떤 특정 아이템 스택이 외부 시스템에서 참조되고 있는지를 식별하기 위해 사용됩니다. SimpleInventory 심플 인벤토리 심플 인벤토리는 게임 플레이어가 소유한 심플 아이템을 저장하기 위한 가방과 같은 것입니다. 심플 인벤토리에는 아이템 소지 수 상한이나 인벤토리 용량과 같은 기능은 없지만, 여러 아이템을 한꺼번에 증감시킬 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryId string ※ ~ 1024자 심플 인벤토리 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 inventoryName string  ~ 128자 심플 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 심플 인벤토리 모델의 이름입니다. 사용자의 심플 인벤토리 인스턴스를 모델 정의에 연결합니다. userId string  ~ 128자 사용자ID simpleItems List [] 0 ~ 1000 items 심플 아이템 목록 이 심플 인벤토리에 저장된 모든 아이템 소지품입니다. 여러 아이템을 한 번의 배치 작업으로 획득하거나 소비할 수 있습니다. 심플 인벤토리당 최대 1000개의 아이템입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SimpleItem 심플 아이템 심플 아이템은 게임 플레이어의 인벤토리 내에 저장된 소유물을 나타냅니다. 심플 아이템은 모델 이름과 소지 수량을 가집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemId string ※ ~ 1024자 심플 아이템 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count long  0 ~ 9223372036854775805 소지 수량 사용자가 소지한 이 아이템 종류의 수량입니다. 일반적인 인벤토리 아이템과 달리 심플 아이템에는 스택 상한이 없으며, 수량은 int64 범위 내에서 임의의 값을 가질 수 있습니다. 다른 심플 아이템과 함께 일괄 처리로 증감할 수 있습니다. revision long 0 0 ~ 9223372036854775805 리비전 BigInventory 거대 인벤토리 거대 인벤토리는 일반 인벤토리에서는 다룰 수 없는 큰 수량의 아이템을 게임 플레이어별로 관리하기 위한 가방과 같은 구조입니다. 거대 아이템은 아이템 소지 수량을 int64 범위를 초과하여 보유할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryId string ※ ~ 1024자 거대 인벤토리 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 inventoryName string  ~ 128자 거대 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 거대 인벤토리 모델의 이름입니다. 사용자의 거대 인벤토리 인스턴스를 모델 정의에 연결합니다. userId string  ~ 128자 사용자ID bigItems List 0 ~ 1000 items 거대 아이템 목록 이 거대 인벤토리에 저장된 모든 거대 아이템 소지품입니다. 각 아이템은 거대 십진 정수 문자열로 수량을 보유합니다. 거대 인벤토리당 최대 1000개의 아이템입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 BigItem 거대 아이템 거대 아이템은 게임 플레이어의 거대 인벤토리 내에 저장되어 있는 소유물을 나타냅니다. 거대 아이템 모델 이름과, int64 범위를 초과하는 소지 수량을 보유합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemId string ※ ~ 1024자 거대 아이템 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID itemName string  ~ 128자 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count string  ~ 1024자 소지 수량 최대 1024자리까지의 정수값 문자열 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 InventoryModel 인벤토리 모델 인벤토리는 게임 플레이어가 소유한 아이템을 담는 가방과 같은 것입니다. 인벤토리에는 용량을 설정할 수 있으며, 용량을 초과하여 소유할 수 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialCapacity int  0 ~ 2147483646 초기 크기 인벤토리가 처음 생성될 때 사용자에게 제공되는 인벤토리 칸의 수입니다. 각 칸에는 하나의 아이템 스택을 저장할 수 있습니다. 사용자는 게임 플레이 액션을 통해 maxCapacity까지 용량을 확장할 수 있습니다. maxCapacity int  0 ~ 2147483646 최대 크기 사용자가 확장할 수 있는 인벤토리 칸의 상한값입니다. 이 값을 초과하여 용량을 늘릴 수 없습니다. 모든 칸이 사용 중이고 아이템을 더 이상 스택할 수 없는 경우, 오버플로우 스크립트가 초과분을 처리하지 않는 한 입수는 실패합니다. protectReferencedItem bool? false 참조된 아이템 보호 활성화하면 (referenceOf 메커니즘을 통해) 참조가 등록된 아이템 세트는 소비하거나 삭제할 수 없게 됩니다. 다른 시스템에서 사용 중인 아이템(예: 장착 중인 장비, 편성에 연결된 아이템)이 실수로 삭제되는 것을 방지합니다. itemModels List [] 1 ~ 1000 items 아이템 모델 목록 이 인벤토리에 저장할 수 있는 아이템의 종류입니다. 각 아이템 모델은 한 종류의 아이템에 대한 스택 및 입수 동작을 정의합니다. 인벤토리 모델당 최대 1000개의 아이템 모델까지 설정할 수 있습니다. ItemModel 아이템 모델 아이템은 포션 ×99 처럼, 하나의 인벤토리 칸에 여러 개를 모아서 소지할 수 있습니다. 이렇게 한 칸에 여러 개를 모으는 것을 “스택\"이라고 하며, 아이템마다 스택 가능한 상한 수를 설정할 수 있습니다. 스택 상한에 도달했을 때의 동작도 아이템마다 설정할 수 있습니다. 구체적으로는 다음 중 하나를 선택할 수 있습니다: 새로운 인벤토리 칸을 추가하여 추가로 소지할 수 있도록 한다 상한에 도달했으므로 더 이상 입수할 수 없도록 한다 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 아이템 모델 이름 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 메커니즘이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. stackingLimit long  1 ~ 9223372036854775805 스택 가능한 최대 수량 하나의 인벤토리 칸(스택)에 보관할 수 있는 이 아이템의 최대 수입니다. 이 상한에 도달하면 allowMultipleStacks 설정에 따라 새로운 칸이 할당되거나 추가 입수가 차단됩니다. allowMultipleStacks bool  복수 스택 허용 활성화하면 스택 상한에 도달했을 때 새로운 인벤토리 칸이 자동으로 할당되어 이 아이템의 추가 수량을 저장합니다(추가 용량을 소비합니다). 비활성화하면 기존 칸에서 스택 상한에 도달한 시점에 입수가 차단됩니다. sortValue int  0 ~ 2147483646 표시 순서 인벤토리 내 아이템을 표시용으로 정렬하기 위한 수치입니다. 값이 작을수록 먼저 표시됩니다. 이 값은 ItemSet 레코드에도 복사되어 소지 아이템의 일관된 정렬을 가능하게 합니다. SimpleInventoryModel 심플 인벤토리 모델 일반적인 InventoryModel에서는 인벤토리 안에 저장할 수 있는 아이템의 용량 제한을 설정할 수 있었습니다. 하지만 심플 인벤토리에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량을 보유할 뿐입니다. 다만 심플 인벤토리에서는 여러 아이템의 증감 처리를 한 번의 처리로 실행할 수 있는 API를 사용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 심플 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. simpleItemModels List [] 1 ~ 1000 items 심플 아이템 모델 목록 이 심플 인벤토리에 저장할 수 있는 아이템의 종류입니다. 일반적인 인벤토리와 달리 심플 아이템에는 스택 상한이나 용량 제약이 없습니다. 심플 인벤토리 모델당 최대 1000개의 아이템 모델을 사용할 수 있습니다. SimpleItemModel 심플 아이템 모델 ItemModel에서는 스택할 수 있는 수량의 최댓값을 설정할 수 있어, 일정 수를 초과하는 경우 여러 스택으로 나누는 구현이 가능했습니다. 심플 아이템에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량만을 보관합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 심플 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. BigInventoryModel 거대 인벤토리 모델 일반적인 InventoryModel이나 SimpleInventoryModel에서는 인벤토리에 저장할 수 있는 아이템의 수가 int64 범위로 제한되었습니다. 인플레이션 계열 게임에서는 더 넓은 범위의 값이 필요한 경우가 있습니다. 거대 인벤토리 모델에서는 인벤토리에 저장할 수 있는 아이템의 수가 최대 1024자리의 정수값을 가질 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 거대 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. bigItemModels List [] 1 ~ 1000 items 거대 아이템 모델 목록 이 거대 인벤토리에 저장할 수 있는 아이템의 종류입니다. 각 거대 아이템 모델은 최대 1024자리의 정수 문자열로 표현되는 수량을 보유할 수 있습니다. 거대 인벤토리 모델당 최대 1000개의 아이템 모델까지 설정할 수 있습니다. BigItemModel 거대 아이템 모델 거대 아이템 모델은 거대 인벤토리 모델에 저장되는 거대 아이템을 정의하는 모델입니다. 거대 아이템은 소지 수량을 int64 범위를 초과하여 보유할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 거대 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. AcquireCount 심플 아이템의 입수 수량 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count long  1 ~ 9223372036854775805 입수하는 양 ConsumeCount 심플 아이템의 소비 수량 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count long  1 ~ 9223372036854775805 소비 수량 HeldCount 심플 아이템의 소지 수량 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. count long  0 ~ 9223372036854775805 소지 수량 CurrentItemModelMaster 현재 활성화된 아이템 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 아이템 모델의 정의를 기술한 마스터 데이터입니다. GS2는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 포맷의 JSON 파일을 작성함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Inventory 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 InventoryModelMaster 인벤토리 모델 마스터 인벤토리 모델 마스터는 게임 내에서 사용되는 인벤토리 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 인벤토리 모델로 반영됩니다. 인벤토리는 게임 플레이어가 소유한 아이템을 저장하는 가방과 같은 것입니다. 인벤토리는 용량을 설정할 수 있으며, 용량을 초과하여 소유할 수 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 인벤토리 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 initialCapacity int  0 ~ 2147483646 초기 크기 인벤토리가 처음 생성될 때 사용자에게 제공되는 인벤토리 칸의 수입니다. 각 칸에는 하나의 아이템 스택을 저장할 수 있습니다. 사용자는 게임 플레이 액션을 통해 maxCapacity까지 용량을 확장할 수 있습니다. maxCapacity int  0 ~ 2147483646 최대 크기 사용자가 확장할 수 있는 인벤토리 칸의 상한값입니다. 이 값을 초과하여 용량을 늘릴 수 없습니다. 모든 칸이 사용 중이고 아이템을 더 이상 스택할 수 없는 경우, 오버플로우 스크립트가 초과분을 처리하지 않는 한 입수는 실패합니다. protectReferencedItem bool false 참조된 아이템 보호 활성화하면 (referenceOf 메커니즘을 통해) 참조가 등록된 아이템 세트는 소비하거나 삭제할 수 없게 됩니다. 다른 시스템에서 사용 중인 아이템(예: 장착 중인 장비, 편성에 연결된 아이템)이 실수로 삭제되는 것을 방지합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ItemModelMaster 아이템 모델 마스터 아이템 모델 마스터는 게임 내에서 사용되는 아이템 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 아이템 모델로 반영됩니다. 아이템은 포션 ×99처럼, 하나의 인벤토리 슬롯에 여러 개를 함께 소지할 수 있습니다. 이처럼 한 슬롯에 여러 개를 모으는 것을 “스택\"이라고 하며, 아이템마다 스택 가능한 상한 수를 설정할 수 있습니다. 스택 상한에 도달했을 때의 동작도 아이템마다 설정할 수 있습니다. 구체적으로는 다음 중 하나를 선택할 수 있습니다: 새 인벤토리 슬롯을 추가하여 계속 입수할 수 있도록 함 상한에 도달했으므로 더 이상 입수할 수 없도록 함 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 아이템 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 inventoryName string  ~ 128자 인벤토리 모델명 이 아이템이 속한 인벤토리 모델의 이름입니다. 이 아이템 종류를 저장할 수 있는 인벤토리를 결정하고, 인벤토리의 용량 설정 및 보호 설정과 연관시킵니다. name string  ~ 128자 아이템 모델명 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 처리가 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명하고 있습니다. stackingLimit long  1 ~ 9223372036854775805 스택 가능한 최대 수량 하나의 인벤토리 칸(스택)에 보관할 수 있는 이 아이템의 최대 수입니다. 이 상한에 도달하면 allowMultipleStacks 설정에 따라 새로운 칸이 할당되거나 추가 입수가 차단됩니다. allowMultipleStacks bool  복수 스택 허용 활성화하면 스택 상한에 도달했을 때 새로운 인벤토리 칸이 자동으로 할당되어 이 아이템의 추가 수량을 저장합니다(추가 용량을 소비합니다). 비활성화하면 기존 칸에서 스택 상한에 도달한 시점에 입수가 차단됩니다. sortValue int  0 ~ 2147483646 표시 순서 인벤토리 내 아이템을 표시용으로 정렬하기 위한 수치입니다. 값이 작을수록 먼저 표시됩니다. 이 값은 ItemSet 레코드에도 복사되어 소지 아이템의 일관된 정렬을 가능하게 합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SimpleInventoryModelMaster 심플 인벤토리 모델 마스터 심플 인벤토리 모델 마스터는 게임 내에서 사용되는 심플 인벤토리 모델의 편집 및 관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 임시로 보관됩니다. 임포트 및 갱신 처리를 수행함으로써, 실제로 게임에서 참조되는 심플 인벤토리 모델로 반영됩니다. 일반적인 InventoryModel에서는 인벤토리 내에 저장할 수 있는 아이템의 용량 제한이 가능했습니다. 하지만 심플 인벤토리에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량만을 보관합니다. 다만 심플 인벤토리에서는 여러 아이템의 증감 처리를 한 번의 처리로 실행할 수 있는 API를 이용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 심플 인벤토리 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SimpleItemModelMaster 심플 아이템 모델 마스터 심플 아이템 모델 마스터는 게임 내에서 사용되는 심플 아이템 모델의 편집 및 관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 임시로 보관됩니다. 임포트 및 갱신 처리를 수행함으로써, 실제로 게임에서 참조되는 심플 아이템 모델로 반영됩니다. ItemModel에서는 스택할 수 있는 수량의 최댓값을 설정할 수 있어, 일정 수를 초과하는 경우 여러 스택으로 나누는 구현이 가능했습니다. 심플 아이템에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량만을 보관합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 심플 아이템 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 BigInventoryModelMaster 거대 인벤토리 모델 마스터 거대 인벤토리 모델 마스터는 게임 내에서 사용되는 거대 인벤토리 모델의 편집 및 관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 임시로 보관됩니다. 임포트 및 갱신 처리를 수행함으로써, 실제로 게임에서 참조되는 거대 인벤토리 모델로 반영됩니다. 일반적인 InventoryModel이나 SimpleInventoryModel에서는 인벤토리에 저장할 수 있는 아이템의 수가 int64 범위로 제한되었습니다. 인플레이션 계열 게임에서는 더 넓은 범위의 값이 필요한 경우가 있습니다. 거대 인벤토리 모델에서는 인벤토리에 저장할 수 있는 아이템의 수가 최대 1024자리의 정수값을 가질 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 거대 인벤토리 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 BigItemModelMaster 거대 아이템 모델 마스터 거대 아이템 모델 마스터는 게임 내에서 사용되는 거대 아이템 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 거대 아이템 모델로 반영됩니다. 거대 아이템 모델은 거대 인벤토리 모델에 저장되는 거대 아이템을 정의하는 모델입니다. 거대 아이템은 소지 수량을 int64 범위를 초과하여 보유할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 거대 아이템 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 거대 아이템 모델명 거대 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 inventory . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeNamespacesRequest ; import io.gs2.inventory.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Inventory . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Inventory . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_namespaces ( inventory . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 지정된 설정으로 새로운 인벤토리 네임스페이스를 생성합니다. 표준 인벤토리 아이템에 대해 아이템 획득(acquireScript), 오버플로 처리(overflowScript), 소비(consumeScript)의 GS2-Script 트리거를 설정할 수 있습니다. 심플 아이템(simpleItemAcquireScript, simpleItemConsumeScript)과 빅 아이템(bigItemAcquireScript, bigItemConsumeScript)에는 개별 스크립트 설정을 사용할 수 있습니다. 오버플로 스크립트는 아이템 획득이 인벤토리 용량을 초과할 때 호출되며, GS2-Inbox 등으로의 전송을 가능하게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 아이템 획득 및 소비 등의 인벤토리 조작에 대한 분산 트랜잭션 처리를 설정합니다. 원활한 실행을 위한 자동 실행 모드, 여러 리소스에 대한 일관된 조작을 위한 원자적 커밋(atomic commit), 대규모 보상 배포를 위한 비동기 처리를 지원합니다. acquireScript ScriptSetting 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquire overflowScript ScriptSetting 입수 상한에 도달하여 입수할 수 없었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - overflowDone consumeScript ScriptSetting 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - consume simpleItemAcquireScript ScriptSetting 심플 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - simpleItemAcquire simpleItemConsumeScript ScriptSetting 심플 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - simpleItemConsume bigItemAcquireScript ScriptSetting 거대 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - bigItemAcquire bigItemConsumeScript ScriptSetting 거대 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - bigItemConsume logSetting LogSetting 로그 출력 설정 인벤토리 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그 및 분석을 위해 아이템의 입수, 소비, 용량 변경을 추적하는 데 유용합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 inventory . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , AcquireScript : nil , OverflowScript : nil , ConsumeScript : nil , SimpleItemAcquireScript : nil , SimpleItemConsumeScript : nil , BigItemAcquireScript : nil , BigItemConsumeScript : nil , LogSetting : \u0026 inventory . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withAcquireScript ( null ) -\u003e withOverflowScript ( null ) -\u003e withConsumeScript ( null ) -\u003e withSimpleItemAcquireScript ( null ) -\u003e withSimpleItemConsumeScript ( null ) -\u003e withBigItemAcquireScript ( null ) -\u003e withBigItemConsumeScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Inventory\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CreateNamespaceRequest ; import io.gs2.inventory.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAcquireScript ( null ) . withOverflowScript ( null ) . withConsumeScript ( null ) . withSimpleItemAcquireScript ( null ) . withSimpleItemConsumeScript ( null ) . withBigItemAcquireScript ( null ) . withBigItemConsumeScript ( null ) . withLogSetting ( new io . gs2 . inventory . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Inventory . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithAcquireScript ( null ) . WithOverflowScript ( null ) . WithConsumeScript ( null ) . WithSimpleItemAcquireScript ( null ) . WithSimpleItemConsumeScript ( null ) . WithBigItemAcquireScript ( null ) . WithBigItemConsumeScript ( null ) . WithLogSetting ( new Gs2 . Gs2Inventory . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Inventory . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAcquireScript ( null ) . withOverflowScript ( null ) . withConsumeScript ( null ) . withSimpleItemAcquireScript ( null ) . withSimpleItemConsumeScript ( null ) . withBigItemAcquireScript ( null ) . withBigItemConsumeScript ( null ) . withLogSetting ( new Gs2Inventory . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . create_namespace ( inventory . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_acquire_script ( None ) . with_overflow_script ( None ) . with_consume_script ( None ) . with_simple_item_acquire_script ( None ) . with_simple_item_consume_script ( None ) . with_big_item_acquire_script ( None ) . with_big_item_consume_script ( None ) . with_log_setting ( inventory . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , acquireScript = nil , overflowScript = nil , consumeScript = nil , simpleItemAcquireScript = nil , simpleItemConsumeScript = nil , bigItemAcquireScript = nil , bigItemConsumeScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , acquireScript = nil , overflowScript = nil , consumeScript = nil , simpleItemAcquireScript = nil , simpleItemConsumeScript = nil , bigItemAcquireScript = nil , bigItemConsumeScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 inventory . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetNamespaceStatusRequest ; import io.gs2.inventory.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Inventory . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Inventory . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_namespace_status ( inventory . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'inventory' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 inventory . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetNamespaceRequest ; import io.gs2.inventory.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Inventory . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Inventory . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_namespace ( inventory . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 인벤토리 네임스페이스의 설정을 갱신합니다. 표준, 심플, 빅 아이템에 대한 아이템 획득, 오버플로 처리, 소비의 GS2-Script 트리거를 변경할 수 있습니다. 스크립트 설정 변경은 이후 작업에 즉시 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 아이템 획득 및 소비 등의 인벤토리 조작에 대한 분산 트랜잭션 처리를 설정합니다. 원활한 실행을 위한 자동 실행 모드, 여러 리소스에 대한 일관된 조작을 위한 원자적 커밋(atomic commit), 대규모 보상 배포를 위한 비동기 처리를 지원합니다. acquireScript ScriptSetting 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquire overflowScript ScriptSetting 입수 상한에 도달하여 입수할 수 없었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - overflowDone consumeScript ScriptSetting 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - consume simpleItemAcquireScript ScriptSetting 심플 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - simpleItemAcquire simpleItemConsumeScript ScriptSetting 심플 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - simpleItemConsume bigItemAcquireScript ScriptSetting 거대 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - bigItemAcquire bigItemConsumeScript ScriptSetting 거대 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - bigItemConsume logSetting LogSetting 로그 출력 설정 인벤토리 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그 및 분석을 위해 아이템의 입수, 소비, 용량 변경을 추적하는 데 유용합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 inventory . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , AcquireScript : \u0026 inventory . ScriptSetting { TriggerScriptId : pointy . String ( \"script-1001\" ), DoneTriggerScriptId : pointy . String ( \"script-1002\" ), DoneTriggerQueueNamespaceId : pointy . String ( \"namespace-1001\" ), }, OverflowScript : \u0026 inventory . ScriptSetting { DoneTriggerScriptId : pointy . String ( \"script-1003\" ), DoneTriggerQueueNamespaceId : pointy . String ( \"script-1004\" ), }, ConsumeScript : \u0026 inventory . ScriptSetting { TriggerScriptId : pointy . String ( \"script-1005\" ), DoneTriggerScriptId : pointy . String ( \"script-1006\" ), DoneTriggerQueueNamespaceId : pointy . String ( \"namespace-1001\" ), }, SimpleItemAcquireScript : nil , SimpleItemConsumeScript : nil , BigItemAcquireScript : nil , BigItemConsumeScript : nil , LogSetting : \u0026 inventory . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withAcquireScript (( new \\Gs2\\Inventory\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"script-1001\" ) -\u003e withDoneTriggerScriptId ( \"script-1002\" ) -\u003e withDoneTriggerQueueNamespaceId ( \"namespace-1001\" )) -\u003e withOverflowScript (( new \\Gs2\\Inventory\\Model\\ScriptSetting ()) -\u003e withDoneTriggerScriptId ( \"script-1003\" ) -\u003e withDoneTriggerQueueNamespaceId ( \"script-1004\" )) -\u003e withConsumeScript (( new \\Gs2\\Inventory\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"script-1005\" ) -\u003e withDoneTriggerScriptId ( \"script-1006\" ) -\u003e withDoneTriggerQueueNamespaceId ( \"namespace-1001\" )) -\u003e withSimpleItemAcquireScript ( null ) -\u003e withSimpleItemConsumeScript ( null ) -\u003e withBigItemAcquireScript ( null ) -\u003e withBigItemConsumeScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Inventory\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateNamespaceRequest ; import io.gs2.inventory.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAcquireScript ( new io . gs2 . inventory . model . ScriptSetting () . withTriggerScriptId ( \"script-1001\" ) . withDoneTriggerScriptId ( \"script-1002\" ) . withDoneTriggerQueueNamespaceId ( \"namespace-1001\" )) . withOverflowScript ( new io . gs2 . inventory . model . ScriptSetting () . withDoneTriggerScriptId ( \"script-1003\" ) . withDoneTriggerQueueNamespaceId ( \"script-1004\" )) . withConsumeScript ( new io . gs2 . inventory . model . ScriptSetting () . withTriggerScriptId ( \"script-1005\" ) . withDoneTriggerScriptId ( \"script-1006\" ) . withDoneTriggerQueueNamespaceId ( \"namespace-1001\" )) . withSimpleItemAcquireScript ( null ) . withSimpleItemConsumeScript ( null ) . withBigItemAcquireScript ( null ) . withBigItemConsumeScript ( null ) . withLogSetting ( new io . gs2 . inventory . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Inventory . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithAcquireScript ( new Gs2 . Gs2Inventory . Model . ScriptSetting () . WithTriggerScriptId ( \"script-1001\" ) . WithDoneTriggerScriptId ( \"script-1002\" ) . WithDoneTriggerQueueNamespaceId ( \"namespace-1001\" )) . WithOverflowScript ( new Gs2 . Gs2Inventory . Model . ScriptSetting () . WithDoneTriggerScriptId ( \"script-1003\" ) . WithDoneTriggerQueueNamespaceId ( \"script-1004\" )) . WithConsumeScript ( new Gs2 . Gs2Inventory . Model . ScriptSetting () . WithTriggerScriptId ( \"script-1005\" ) . WithDoneTriggerScriptId ( \"script-1006\" ) . WithDoneTriggerQueueNamespaceId ( \"namespace-1001\" )) . WithSimpleItemAcquireScript ( null ) . WithSimpleItemConsumeScript ( null ) . WithBigItemAcquireScript ( null ) . WithBigItemConsumeScript ( null ) . WithLogSetting ( new Gs2 . Gs2Inventory . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Inventory . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAcquireScript ( new Gs2Inventory . model . ScriptSetting () . withTriggerScriptId ( \"script-1001\" ) . withDoneTriggerScriptId ( \"script-1002\" ) . withDoneTriggerQueueNamespaceId ( \"namespace-1001\" )) . withOverflowScript ( new Gs2Inventory . model . ScriptSetting () . withDoneTriggerScriptId ( \"script-1003\" ) . withDoneTriggerQueueNamespaceId ( \"script-1004\" )) . withConsumeScript ( new Gs2Inventory . model . ScriptSetting () . withTriggerScriptId ( \"script-1005\" ) . withDoneTriggerScriptId ( \"script-1006\" ) . withDoneTriggerQueueNamespaceId ( \"namespace-1001\" )) . withSimpleItemAcquireScript ( null ) . withSimpleItemConsumeScript ( null ) . withBigItemAcquireScript ( null ) . withBigItemConsumeScript ( null ) . withLogSetting ( new Gs2Inventory . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_namespace ( inventory . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_acquire_script ( inventory . ScriptSetting () . with_trigger_script_id ( 'script-1001' ) . with_done_trigger_script_id ( 'script-1002' ) . with_done_trigger_queue_namespace_id ( 'namespace-1001' )) . with_overflow_script ( inventory . ScriptSetting () . with_done_trigger_script_id ( 'script-1003' ) . with_done_trigger_queue_namespace_id ( 'script-1004' )) . with_consume_script ( inventory . ScriptSetting () . with_trigger_script_id ( 'script-1005' ) . with_done_trigger_script_id ( 'script-1006' ) . with_done_trigger_queue_namespace_id ( 'namespace-1001' )) . with_simple_item_acquire_script ( None ) . with_simple_item_consume_script ( None ) . with_big_item_acquire_script ( None ) . with_big_item_consume_script ( None ) . with_log_setting ( inventory . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , acquireScript = { triggerScriptId = \"script-1001\" , doneTriggerScriptId = \"script-1002\" , doneTriggerQueueNamespaceId = \"namespace-1001\" , }, overflowScript = { doneTriggerScriptId = \"script-1003\" , doneTriggerQueueNamespaceId = \"script-1004\" , }, consumeScript = { triggerScriptId = \"script-1005\" , doneTriggerScriptId = \"script-1006\" , doneTriggerQueueNamespaceId = \"namespace-1001\" , }, simpleItemAcquireScript = nil , simpleItemConsumeScript = nil , bigItemAcquireScript = nil , bigItemConsumeScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , acquireScript = { triggerScriptId = \"script-1001\" , doneTriggerScriptId = \"script-1002\" , doneTriggerQueueNamespaceId = \"namespace-1001\" , }, overflowScript = { doneTriggerScriptId = \"script-1003\" , doneTriggerQueueNamespaceId = \"script-1004\" , }, consumeScript = { triggerScriptId = \"script-1005\" , doneTriggerScriptId = \"script-1006\" , doneTriggerQueueNamespaceId = \"namespace-1001\" , }, simpleItemAcquireScript = nil , simpleItemConsumeScript = nil , bigItemAcquireScript = nil , bigItemConsumeScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 inventory . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteNamespaceRequest ; import io.gs2.inventory.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Inventory . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Inventory . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_namespace ( inventory . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 inventory . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetServiceVersionRequest ; import io.gs2.inventory.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Inventory . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Inventory . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_service_version ( inventory . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 inventory . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DumpUserDataByUserIdRequest ; import io.gs2.inventory.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Inventory . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Inventory . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . dump_user_data_by_user_id ( inventory . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inventory' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID와 연결된 데이터의 덤프가 완료되었는지 확인 이전에 시작된 사용자 데이터 덤프 작업의 진행 상황을 확인합니다. 덤프에는 사용자가 소유한 모든 인벤토리 데이터, 아이템 세트, 심플 아이템, 빅 아이템이 포함됩니다. 완료 시 익스포트된 데이터를 다운로드할 수 있는 URL을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 inventory . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.inventory.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Inventory . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Inventory . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( inventory . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'inventory' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 inventory . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CleanUserDataByUserIdRequest ; import io.gs2.inventory.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Inventory . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Inventory . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . clean_user_data_by_user_id ( inventory . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inventory' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 이전에 시작된 사용자 데이터 클리닝 작업의 진행 상황을 확인합니다. 클리닝을 통해 이 서비스의 모든 네임스페이스에 걸친 사용자의 인벤토리 데이터, 아이템 세트, 심플 아이템, 빅 아이템이 모두 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 inventory . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.inventory.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Inventory . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Inventory . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( inventory . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inventory' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 inventory . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.inventory.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Inventory . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Inventory . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( inventory . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'inventory' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 inventory . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.ImportUserDataByUserIdRequest ; import io.gs2.inventory.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Inventory . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Inventory . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . import_user_data_by_user_id ( inventory . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inventory' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID와 연결된 데이터의 임포트가 완료되었는지 확인 이전에 시작된 사용자 데이터 임포트 작업의 진행 상황을 확인합니다. 임포트를 통해 이전에 익스포트된 데이터로부터 인벤토리 데이터, 아이템 세트, 심플 아이템, 빅 아이템이 복원됩니다. 완료 시 임포트 로그를 다운로드할 수 있는 URL을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 inventory . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CheckImportUserDataByUserIdRequest ; import io.gs2.inventory.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Inventory . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Inventory . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( inventory . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'inventory' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeInventories 인벤토리 목록 취득 요청한 사용자의 인벤토리 페이지네이션 목록을 취득합니다. 각 인벤토리는 특정 인벤토리 모델에 대한 현재 용량(아이템 슬롯 수)을 추적합니다. 인벤토리는 사용자가 처음으로 아이템을 입수했을 때 자동으로 생성되며, 초기 용량은 인벤토리 모델의 initialCapacity 로 설정됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 인벤토리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeInventories ( \u0026 inventory . DescribeInventoriesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeInventoriesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeInventories ( ( new DescribeInventoriesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeInventoriesRequest ; import io.gs2.inventory.result.DescribeInventoriesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeInventoriesResult result = client . describeInventories ( new DescribeInventoriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Inventory \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeInventoriesResult \u003e asyncResult = null ; yield return client . DescribeInventories ( new Gs2 . Gs2Inventory . Request . DescribeInventoriesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeInventories ( new Gs2Inventory . DescribeInventoriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_inventories ( inventory . DescribeInventoriesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_inventories ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_inventories_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeInventoriesByUserId 사용자 ID를 지정하여 인벤토리 목록을 취득 지정된 사용자의 인벤토리 페이지네이션 목록을 취득합니다. 각 인벤토리는 특정 인벤토리 모델에 대한 현재 용량(아이템 슬롯 수)을 추적합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 인벤토리 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeInventoriesByUserId ( \u0026 inventory . DescribeInventoriesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeInventoriesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeInventoriesByUserId ( ( new DescribeInventoriesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeInventoriesByUserIdRequest ; import io.gs2.inventory.result.DescribeInventoriesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeInventoriesByUserIdResult result = client . describeInventoriesByUserId ( new DescribeInventoriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Inventory \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeInventoriesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeInventoriesByUserId ( new Gs2 . Gs2Inventory . Request . DescribeInventoriesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeInventoriesByUserId ( new Gs2Inventory . DescribeInventoriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_inventories_by_user_id ( inventory . DescribeInventoriesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_inventories_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_inventories_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getInventory 인벤토리를 취득 지정된 인벤토리 모델에 대한 요청 사용자의 인벤토리(현재 용량 포함)를 취득합니다. 이 인벤토리에서 아이템을 한 번도 입수한 적이 없는 경우, 데이터는 반환되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetInventory ( \u0026 inventory . GetInventoryRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetInventoryRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getInventory ( ( new GetInventoryRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetInventoryRequest ; import io.gs2.inventory.result.GetInventoryResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetInventoryResult result = client . getInventory ( new GetInventoryRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Inventory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetInventoryResult \u003e asyncResult = null ; yield return client . GetInventory ( new Gs2 . Gs2Inventory . Request . GetInventoryRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getInventory ( new Gs2Inventory . GetInventoryRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_inventory ( inventory . GetInventoryRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_inventory ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_inventory_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getInventoryByUserId 사용자 ID를 지정하여 인벤토리를 취득 지정된 인벤토리 모델에 대한 사용자의 인벤토리(현재 용량 포함)를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetInventoryByUserId ( \u0026 inventory . GetInventoryByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetInventoryByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getInventoryByUserId ( ( new GetInventoryByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetInventoryByUserIdRequest ; import io.gs2.inventory.result.GetInventoryByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetInventoryByUserIdResult result = client . getInventoryByUserId ( new GetInventoryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Inventory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetInventoryByUserIdResult \u003e asyncResult = null ; yield return client . GetInventoryByUserId ( new Gs2 . Gs2Inventory . Request . GetInventoryByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getInventoryByUserId ( new Gs2Inventory . GetInventoryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_inventory_by_user_id ( inventory . GetInventoryByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_inventory_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_inventory_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; addCapacityByUserId 사용자 ID를 지정하여 인벤토리의 용량 크기를 가산 지정된 양만큼 사용자의 인벤토리 용량을 증가시킵니다. 결과 용량은 인벤토리 모델의 maxCapacity 를 초과할 수 없습니다. 인벤토리가 아직 존재하지 않는 경우, initialCapacity 로 자동 생성된 후 지정된 값이 가산됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. userId string  ~ 128자 사용자ID addCapacityValue int  1 ~ 2147483646 가산할 용량 크기 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Inventory 용량 가산 후의 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . AddCapacityByUserId ( \u0026 inventory . AddCapacityByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), AddCapacityValue : pointy . Int32 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\AddCapacityByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e addCapacityByUserId ( ( new AddCapacityByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAddCapacityValue ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.AddCapacityByUserIdRequest ; import io.gs2.inventory.result.AddCapacityByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { AddCapacityByUserIdResult result = client . addCapacityByUserId ( new AddCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withAddCapacityValue ( 1 ) . withTimeOffsetToken ( null ) ); Inventory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . AddCapacityByUserIdResult \u003e asyncResult = null ; yield return client . AddCapacityByUserId ( new Gs2 . Gs2Inventory . Request . AddCapacityByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithAddCapacityValue ( 1 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . addCapacityByUserId ( new Gs2Inventory . AddCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withAddCapacityValue ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . add_capacity_by_user_id ( inventory . AddCapacityByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_add_capacity_value ( 1 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.add_capacity_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , addCapacityValue = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.add_capacity_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , addCapacityValue = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setCapacityByUserId 사용자 ID를 지정하여 인벤토리의 용량 크기를 설정 사용자의 인벤토리 용량을 지정된 절대값으로 설정합니다. 갱신 전후의 인벤토리 상태를 모두 반환하므로, 신구 용량 값을 비교할 수 있습니다. 새로운 용량 값은 인벤토리 모델의 maxCapacity 를 초과할 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. userId string  ~ 128자 사용자ID newCapacityValue int  1 ~ 2147483646 인벤토리의 새로운 최대 용량 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Inventory 갱신 후 인벤토리 old Inventory 갱신 전 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . SetCapacityByUserId ( \u0026 inventory . SetCapacityByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), NewCapacityValue : pointy . Int32 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\SetCapacityByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e setCapacityByUserId ( ( new SetCapacityByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withNewCapacityValue ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.SetCapacityByUserIdRequest ; import io.gs2.inventory.result.SetCapacityByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { SetCapacityByUserIdResult result = client . setCapacityByUserId ( new SetCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withNewCapacityValue ( 10 ) . withTimeOffsetToken ( null ) ); Inventory item = result . getItem (); Inventory old = result . getOld (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . SetCapacityByUserIdResult \u003e asyncResult = null ; yield return client . SetCapacityByUserId ( new Gs2 . Gs2Inventory . Request . SetCapacityByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithNewCapacityValue ( 10 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . setCapacityByUserId ( new Gs2Inventory . SetCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withNewCapacityValue ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . set_capacity_by_user_id ( inventory . SetCapacityByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_new_capacity_value ( 10 ) . with_time_offset_token ( None ) ) item = result . item old = result . old except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.set_capacity_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , newCapacityValue = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; client = gs2 ( 'inventory' ) api_result_handler = client.set_capacity_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , newCapacityValue = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; deleteInventoryByUserId 인벤토리를 삭제 지정된 사용자의 인벤토리와 이에 관련된 모든 아이템 세트를 삭제합니다. 이 작업은 인벤토리와 그 안에 저장된 모든 아이템을 영구적으로 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteInventoryByUserId ( \u0026 inventory . DeleteInventoryByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteInventoryByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteInventoryByUserId ( ( new DeleteInventoryByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteInventoryByUserIdRequest ; import io.gs2.inventory.result.DeleteInventoryByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteInventoryByUserIdResult result = client . deleteInventoryByUserId ( new DeleteInventoryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Inventory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteInventoryByUserIdResult \u003e asyncResult = null ; yield return client . DeleteInventoryByUserId ( new Gs2 . Gs2Inventory . Request . DeleteInventoryByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteInventoryByUserId ( new Gs2Inventory . DeleteInventoryByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_inventory_by_user_id ( inventory . DeleteInventoryByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_inventory_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_inventory_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyInventoryCurrentMaxCapacity 현재 인벤토리의 최대 용량을 검증 사용자의 현재 최대 인벤토리 용량이 지정된 조건을 만족하는지 검증합니다. 6개의 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증에는 저장된 원시 값이 아닌, 버프 적용 후의 용량 값(GS2-Buff 의 활성 버프 효과를 반영)이 사용됩니다. 조건이 충족되지 않으면 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 현재 인벤토리의 최대 용량이 지정 값 미만일 것 lessEqual 현재 인벤토리의 최대 용량이 지정 값 이하일 것 greater 현재 인벤토리의 최대 용량이 지정 값 초과일 것 greaterEqual 현재 인벤토리의 최대 용량이 지정 값 이상일 것 equal 현재 인벤토리의 최대 용량이 지정 값과 일치할 것 notEqual 현재 인벤토리의 최대 용량이 지정 값과 일치하지 않을 것 currentInventoryMaxCapacity int  0 ~ 2147483646 현재 인벤토리의 최대 용량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifyInventoryCurrentMaxCapacity ( \u0026 inventory . VerifyInventoryCurrentMaxCapacityRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), VerifyType : pointy . String ( \"less\" ), CurrentInventoryMaxCapacity : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifyInventoryCurrentMaxCapacityRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifyInventoryCurrentMaxCapacity ( ( new VerifyInventoryCurrentMaxCapacityRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withCurrentInventoryMaxCapacity ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifyInventoryCurrentMaxCapacityRequest ; import io.gs2.inventory.result.VerifyInventoryCurrentMaxCapacityResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifyInventoryCurrentMaxCapacityResult result = client . verifyInventoryCurrentMaxCapacity ( new VerifyInventoryCurrentMaxCapacityRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withVerifyType ( \"less\" ) . withCurrentInventoryMaxCapacity ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Inventory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifyInventoryCurrentMaxCapacityResult \u003e asyncResult = null ; yield return client . VerifyInventoryCurrentMaxCapacity ( new Gs2 . Gs2Inventory . Request . VerifyInventoryCurrentMaxCapacityRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithVerifyType ( \"less\" ) . WithCurrentInventoryMaxCapacity ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifyInventoryCurrentMaxCapacity ( new Gs2Inventory . VerifyInventoryCurrentMaxCapacityRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withVerifyType ( \"less\" ) . withCurrentInventoryMaxCapacity ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_inventory_current_max_capacity ( inventory . VerifyInventoryCurrentMaxCapacityRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_verify_type ( 'less' ) . with_current_inventory_max_capacity ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_inventory_current_max_capacity ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , inventoryName = \"inventory-0001\" , verifyType = \"less\" , currentInventoryMaxCapacity = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_inventory_current_max_capacity_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , inventoryName = \"inventory-0001\" , verifyType = \"less\" , currentInventoryMaxCapacity = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyInventoryCurrentMaxCapacityByUserId 사용자 ID를 지정하여 인벤토리의 최대 용량을 검증 지정된 사용자의 현재 최대 인벤토리 용량이 지정된 조건을 만족하는지 검증합니다. 6개의 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증에는 버프 적용 후의 용량 값(GS2-Buff 의 활성 버프 효과를 반영)이 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 현재 인벤토리의 최대 용량이 지정 값 미만일 것 lessEqual 현재 인벤토리의 최대 용량이 지정 값 이하일 것 greater 현재 인벤토리의 최대 용량이 지정 값 초과일 것 greaterEqual 현재 인벤토리의 최대 용량이 지정 값 이상일 것 equal 현재 인벤토리의 최대 용량이 지정 값과 일치할 것 notEqual 현재 인벤토리의 최대 용량이 지정 값과 일치하지 않을 것 currentInventoryMaxCapacity int  0 ~ 2147483646 현재 인벤토리의 최대 용량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifyInventoryCurrentMaxCapacityByUserId ( \u0026 inventory . VerifyInventoryCurrentMaxCapacityByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), VerifyType : pointy . String ( \"less\" ), CurrentInventoryMaxCapacity : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifyInventoryCurrentMaxCapacityByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifyInventoryCurrentMaxCapacityByUserId ( ( new VerifyInventoryCurrentMaxCapacityByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withCurrentInventoryMaxCapacity ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifyInventoryCurrentMaxCapacityByUserIdRequest ; import io.gs2.inventory.result.VerifyInventoryCurrentMaxCapacityByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifyInventoryCurrentMaxCapacityByUserIdResult result = client . verifyInventoryCurrentMaxCapacityByUserId ( new VerifyInventoryCurrentMaxCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withVerifyType ( \"less\" ) . withCurrentInventoryMaxCapacity ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Inventory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifyInventoryCurrentMaxCapacityByUserIdResult \u003e asyncResult = null ; yield return client . VerifyInventoryCurrentMaxCapacityByUserId ( new Gs2 . Gs2Inventory . Request . VerifyInventoryCurrentMaxCapacityByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithVerifyType ( \"less\" ) . WithCurrentInventoryMaxCapacity ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifyInventoryCurrentMaxCapacityByUserId ( new Gs2Inventory . VerifyInventoryCurrentMaxCapacityByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withVerifyType ( \"less\" ) . withCurrentInventoryMaxCapacity ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_inventory_current_max_capacity_by_user_id ( inventory . VerifyInventoryCurrentMaxCapacityByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_verify_type ( 'less' ) . with_current_inventory_max_capacity ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_inventory_current_max_capacity_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , inventoryName = \"inventory-0001\" , verifyType = \"less\" , currentInventoryMaxCapacity = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_inventory_current_max_capacity_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , inventoryName = \"inventory-0001\" , verifyType = \"less\" , currentInventoryMaxCapacity = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeItemSets 아이템 세트 목록 취득 지정된 인벤토리 내 요청 사용자의 아이템 세트에 대한 페이지네이션이 적용된 리스트를 취득합니다. 각 아이템 세트는 특정 수량, 옵션의 유효기간, 옵션의 참조를 가진 아이템 스택을 나타냅니다. 아이템 모델이 복수 스택을 허용하는 경우, 동일한 아이템 종류가 서로 다른 수량과 유효기간을 가진 여러 아이템 세트 항목으로 표시됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 아이템 세트 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeItemSets ( \u0026 inventory . DescribeItemSetsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeItemSetsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeItemSets ( ( new DescribeItemSetsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeItemSetsRequest ; import io.gs2.inventory.result.DescribeItemSetsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeItemSetsResult result = client . describeItemSets ( new DescribeItemSetsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List ItemSet \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeItemSetsResult \u003e asyncResult = null ; yield return client . DescribeItemSets ( new Gs2 . Gs2Inventory . Request . DescribeItemSetsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeItemSets ( new Gs2Inventory . DescribeItemSetsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_item_sets ( inventory . DescribeItemSetsRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_item_sets ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_item_sets_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeItemSetsByUserId 사용자 ID를 지정하여 아이템 세트 목록 취득 지정된 인벤토리 내 사용자의 아이템 세트에 대한 페이지네이션이 적용된 리스트를 취득합니다. 각 아이템 세트는 특정 수량, 옵션의 유효기간, 옵션의 참조를 가진 아이템 스택을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 아이템 세트 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeItemSetsByUserId ( \u0026 inventory . DescribeItemSetsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeItemSetsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeItemSetsByUserId ( ( new DescribeItemSetsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeItemSetsByUserIdRequest ; import io.gs2.inventory.result.DescribeItemSetsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeItemSetsByUserIdResult result = client . describeItemSetsByUserId ( new DescribeItemSetsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ItemSet \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeItemSetsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeItemSetsByUserId ( new Gs2 . Gs2Inventory . Request . DescribeItemSetsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeItemSetsByUserId ( new Gs2Inventory . DescribeItemSetsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_item_sets_by_user_id ( inventory . DescribeItemSetsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_item_sets_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_item_sets_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getItemSet 아이템 세트 취득 요청 사용자의 인벤토리 내 지정된 아이템의 아이템 세트를 취득합니다. 옵션인 itemSetName으로 특정 스택으로 필터링할 수 있습니다. 지정하지 않으면 해당 아이템의 모든 스택이 반환됩니다. 관련된 아이템 모델과 인벤토리 정보도 함께 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string ~ 36자 아이템 세트를 식별하는 이름 Result 타입 설명 items List 아이템 세트 리스트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetItemSet ( \u0026 inventory . GetItemSetRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"itemSet-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetItemSetRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getItemSet ( ( new GetItemSetRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"itemSet-0001\" ) ); $items = $result -\u003e getItems (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetItemSetRequest ; import io.gs2.inventory.result.GetItemSetResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetItemSetResult result = client . getItemSet ( new GetItemSetRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"itemSet-0001\" ) ); List ItemSet \u003e items = result . getItems (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetItemSetResult \u003e asyncResult = null ; yield return client . GetItemSet ( new Gs2 . Gs2Inventory . Request . GetItemSetRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"itemSet-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getItemSet ( new Gs2Inventory . GetItemSetRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"itemSet-0001\" ) ); const items = result . getItems (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_item_set ( inventory . GetItemSetRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'itemSet-0001' ) ) items = result . items item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_item_set ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"itemSet-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.get_item_set_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"itemSet-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; getItemSetByUserId 사용자 ID를 지정하여 아이템 세트 취득 지정된 사용자의 인벤토리 내 특정 아이템의 아이템 세트를 취득합니다. 옵션인 itemSetName으로 특정 스택으로 필터링할 수 있습니다. 지정하지 않으면 해당 아이템의 모든 스택이 반환됩니다. 관련된 아이템 모델과 인벤토리 정보도 함께 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string ~ 36자 아이템 세트를 식별하는 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 아이템 세트 리스트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetItemSetByUserId ( \u0026 inventory . GetItemSetByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetItemSetByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getItemSetByUserId ( ( new GetItemSetByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetItemSetByUserIdRequest ; import io.gs2.inventory.result.GetItemSetByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetItemSetByUserIdResult result = client . getItemSetByUserId ( new GetItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( null ) . withTimeOffsetToken ( null ) ); List ItemSet \u003e items = result . getItems (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetItemSetByUserIdResult \u003e asyncResult = null ; yield return client . GetItemSetByUserId ( new Gs2 . Gs2Inventory . Request . GetItemSetByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getItemSetByUserId ( new Gs2Inventory . GetItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_item_set_by_user_id ( inventory . GetItemSetByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( None ) . with_time_offset_token ( None ) ) items = result . items item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_item_set_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.get_item_set_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; getItemWithSignature 서명과 함께 아이템 세트 취득 데이터의 진위를 검증하는 데 사용할 수 있는 암호 서명과 함께 아이템 세트를 취득합니다. 서명은 지정된 암호 키를 사용하여 생성되며, 외부 시스템이 아이템 데이터가 변조되지 않았음을 검증할 수 있습니다. 아이템 소지 여부를 제3자가 검증해야 하는 서버 권위적 검증 시나리오에 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string ~ 36자 아이템 세트를 식별하는 이름 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 items List 아이템 세트 리스트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 body string 서명 대상의 아이템 세트 정보 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetItemWithSignature ( \u0026 inventory . GetItemWithSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : nil , KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemModel := result . ItemModel inventory := result . Inventory body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetItemWithSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getItemWithSignature ( ( new GetItemWithSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( null ) -\u003e withKeyId ( \"key-0001\" ) ); $items = $result -\u003e getItems (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetItemWithSignatureRequest ; import io.gs2.inventory.result.GetItemWithSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetItemWithSignatureResult result = client . getItemWithSignature ( new GetItemWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( null ) . withKeyId ( \"key-0001\" ) ); List ItemSet \u003e items = result . getItems (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetItemWithSignatureResult \u003e asyncResult = null ; yield return client . GetItemWithSignature ( new Gs2 . Gs2Inventory . Request . GetItemWithSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( null ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getItemWithSignature ( new Gs2Inventory . GetItemWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( null ) . withKeyId ( \"key-0001\" ) ); const items = result . getItems (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_item_with_signature ( inventory . GetItemWithSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( None ) . with_key_id ( 'key-0001' ) ) items = result . items item_model = result . item_model inventory = result . inventory body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_item_with_signature ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = nil , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; body = result.body ; signature = result.signature ; client = gs2 ( 'inventory' ) api_result_handler = client.get_item_with_signature_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = nil , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; body = result.body ; signature = result.signature ; getItemWithSignatureByUserId 사용자 ID를 지정하여 서명이 포함된 아이템 세트 취득 지정된 사용자의 암호 서명이 포함된 아이템 세트를 취득합니다. 서명은 외부의 진위 검증을 위해 지정된 암호 키를 사용하여 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string ~ 36자 아이템 세트를 식별하는 이름 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 아이템 세트 리스트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 body string 서명 대상의 아이템 세트 정보 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetItemWithSignatureByUserId ( \u0026 inventory . GetItemWithSignatureByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : nil , KeyId : pointy . String ( \"key-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemModel := result . ItemModel inventory := result . Inventory body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetItemWithSignatureByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getItemWithSignatureByUserId ( ( new GetItemWithSignatureByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( null ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetItemWithSignatureByUserIdRequest ; import io.gs2.inventory.result.GetItemWithSignatureByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetItemWithSignatureByUserIdResult result = client . getItemWithSignatureByUserId ( new GetItemWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( null ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); List ItemSet \u003e items = result . getItems (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetItemWithSignatureByUserIdResult \u003e asyncResult = null ; yield return client . GetItemWithSignatureByUserId ( new Gs2 . Gs2Inventory . Request . GetItemWithSignatureByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( null ) . WithKeyId ( \"key-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getItemWithSignatureByUserId ( new Gs2Inventory . GetItemWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( null ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_item_with_signature_by_user_id ( inventory . GetItemWithSignatureByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( None ) . with_key_id ( 'key-0001' ) . with_time_offset_token ( None ) ) items = result . items item_model = result . item_model inventory = result . inventory body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_item_with_signature_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = nil , keyId = \"key-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; body = result.body ; signature = result.signature ; client = gs2 ( 'inventory' ) api_result_handler = client.get_item_with_signature_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = nil , keyId = \"key-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; body = result.body ; signature = result.signature ; acquireItemSetByUserId 사용자 ID를 지정하여 아이템 세트 입수 사용자의 인벤토리에 아이템을 추가합니다. 기존 아이템 세트에 여유(스택 제한 미만)가 있는 경우 그곳에 추가되며, 그렇지 않은 경우 복수 스택이 허용되어 있으면 새로운 아이템 세트가 생성됩니다. 선택적으로 expiresAt을 지정하여 새로 생성되는 아이템 세트의 유효기간을 설정할 수 있습니다. 유효기간이 이미 지난 아이템은 빈 것으로 취급됩니다. createNewItemSet이 true인 경우, 기존 세트에 여유가 있어도 항상 새로운 아이템 세트가 생성됩니다. 합계 수량이 인벤토리 용량을 초과하는 경우 오버플로우 수량이 반환되며, 네임스페이스 설정에 따라 오버플로우분이 GS2-Inbox로 전송될 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. userId string  ~ 128자 사용자ID acquireCount long  1 ~ 9223372036854775805 입수하는 양 expiresAt long 0 유효기간 UNIX 시간·밀리초 createNewItemSet bool false 기존 아이템 세트에 여유가 있더라도 새로운 아이템 세트를 생성할지 여부 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 가산 후 아이템 세트 리스트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 overflowCount long 소지 수량 상한을 초과하여 받지 못하고 GS2-Inbox로 전송한 아이템의 수량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . AcquireItemSetByUserId ( \u0026 inventory . AcquireItemSetByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-0001\" ), UserId : pointy . String ( \"user-0001\" ), AcquireCount : pointy . Int64 ( 5 ), ExpiresAt : pointy . Int64 ( 0 ), CreateNewItemSet : nil , ItemSetName : pointy . String ( \"itemSet-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemModel := result . ItemModel inventory := result . Inventory overflowCount := result . OverflowCount use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\AcquireItemSetByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e acquireItemSetByUserId ( ( new AcquireItemSetByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAcquireCount ( 5 ) -\u003e withExpiresAt ( 0 ) -\u003e withCreateNewItemSet ( null ) -\u003e withItemSetName ( \"itemSet-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); $overflowCount = $result -\u003e getOverflowCount (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.AcquireItemSetByUserIdRequest ; import io.gs2.inventory.result.AcquireItemSetByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { AcquireItemSetByUserIdResult result = client . acquireItemSetByUserId ( new AcquireItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-0001\" ) . withUserId ( \"user-0001\" ) . withAcquireCount ( 5L ) . withExpiresAt ( 0L ) . withCreateNewItemSet ( null ) . withItemSetName ( \"itemSet-0001\" ) . withTimeOffsetToken ( null ) ); List ItemSet \u003e items = result . getItems (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); long overflowCount = result . getOverflowCount (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . AcquireItemSetByUserIdResult \u003e asyncResult = null ; yield return client . AcquireItemSetByUserId ( new Gs2 . Gs2Inventory . Request . AcquireItemSetByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-0001\" ) . WithUserId ( \"user-0001\" ) . WithAcquireCount ( 5L ) . WithExpiresAt ( 0L ) . WithCreateNewItemSet ( null ) . WithItemSetName ( \"itemSet-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; var overflowCount = result . OverflowCount ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . acquireItemSetByUserId ( new Gs2Inventory . AcquireItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-0001\" ) . withUserId ( \"user-0001\" ) . withAcquireCount ( 5 ) . withExpiresAt ( 0 ) . withCreateNewItemSet ( null ) . withItemSetName ( \"itemSet-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); const overflowCount = result . getOverflowCount (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . acquire_item_set_by_user_id ( inventory . AcquireItemSetByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-0001' ) . with_user_id ( 'user-0001' ) . with_acquire_count ( 5 ) . with_expires_at ( 0 ) . with_create_new_item_set ( None ) . with_item_set_name ( 'itemSet-0001' ) . with_time_offset_token ( None ) ) items = result . items item_model = result . item_model inventory = result . inventory overflow_count = result . overflow_count except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.acquire_item_set_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-0001\" , userId = \"user-0001\" , acquireCount = 5 , expiresAt = 0 , createNewItemSet = nil , itemSetName = \"itemSet-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; overflowCount = result.overflowCount ; client = gs2 ( 'inventory' ) api_result_handler = client.acquire_item_set_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-0001\" , userId = \"user-0001\" , acquireCount = 5 , expiresAt = 0 , createNewItemSet = nil , itemSetName = \"itemSet-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; overflowCount = result.overflowCount ; acquireItemSetWithGradeByUserId 사용자 ID를 지정하여 GS2-Grade에 그레이드를 설정하면서 아이템 세트를 1개 입수 아이템을 1개 입수함과 동시에 GS2-Grade를 통해 그레이드 값을 설정합니다. 각 아이템이 서로 다른 그레이드 값을 가지는 품질/랭크 시스템(예: 스탯이 다른 장비)을 가진 아이템에 사용됩니다. 항상 새로운 아이템 세트가 생성되며(createNewItemSet의 동작), 아이템 입수 후 GS2-Grade의 SetGradeByUserId를 통해 그레이드가 설정됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. userId string  ~ 128자 사용자ID gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN gradeValue long  1 ~ 9223372036854775805 설정할 그레이드 값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ItemSet 가산 후 아이템 세트 status Status 설정한 그레이드 스테이터스 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 overflowCount long 소지 수량 상한을 초과하여 받지 못하고 GS2-Inbox로 전송한 아이템의 수량 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . AcquireItemSetWithGradeByUserId ( \u0026 inventory . AcquireItemSetWithGradeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), ItemName : pointy . String ( \"item-0001\" ), UserId : pointy . String ( \"user-0001\" ), GradeModelId : pointy . String ( \"grn:ap-northeast-1:YourOwnerId:grade:namespace-0001:model:grade-0001\" ), GradeValue : pointy . Int64 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item status := result . Status itemModel := result . ItemModel inventory := result . Inventory overflowCount := result . OverflowCount use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\AcquireItemSetWithGradeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e acquireItemSetWithGradeByUserId ( ( new AcquireItemSetWithGradeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withGradeModelId ( \"grn:ap-northeast-1:YourOwnerId:grade:namespace-0001:model:grade-0001\" ) -\u003e withGradeValue ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $status = $result -\u003e getStatus (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); $overflowCount = $result -\u003e getOverflowCount (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.AcquireItemSetWithGradeByUserIdRequest ; import io.gs2.inventory.result.AcquireItemSetWithGradeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { AcquireItemSetWithGradeByUserIdResult result = client . acquireItemSetWithGradeByUserId ( new AcquireItemSetWithGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withUserId ( \"user-0001\" ) . withGradeModelId ( \"grn:ap-northeast-1:YourOwnerId:grade:namespace-0001:model:grade-0001\" ) . withGradeValue ( 1L ) . withTimeOffsetToken ( null ) ); ItemSet item = result . getItem (); Status status = result . getStatus (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); long overflowCount = result . getOverflowCount (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . AcquireItemSetWithGradeByUserIdResult \u003e asyncResult = null ; yield return client . AcquireItemSetWithGradeByUserId ( new Gs2 . Gs2Inventory . Request . AcquireItemSetWithGradeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithItemName ( \"item-0001\" ) . WithUserId ( \"user-0001\" ) . WithGradeModelId ( \"grn:ap-northeast-1:YourOwnerId:grade:namespace-0001:model:grade-0001\" ) . WithGradeValue ( 1L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var status = result . Status ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; var overflowCount = result . OverflowCount ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . acquireItemSetWithGradeByUserId ( new Gs2Inventory . AcquireItemSetWithGradeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withUserId ( \"user-0001\" ) . withGradeModelId ( \"grn:ap-northeast-1:YourOwnerId:grade:namespace-0001:model:grade-0001\" ) . withGradeValue ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const status = result . getStatus (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); const overflowCount = result . getOverflowCount (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . acquire_item_set_with_grade_by_user_id ( inventory . AcquireItemSetWithGradeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_item_name ( 'item-0001' ) . with_user_id ( 'user-0001' ) . with_grade_model_id ( 'grn:ap-northeast-1:YourOwnerId:grade:namespace-0001:model:grade-0001' ) . with_grade_value ( 1 ) . with_time_offset_token ( None ) ) item = result . item status = result . status item_model = result . item_model inventory = result . inventory overflow_count = result . overflow_count except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.acquire_item_set_with_grade_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , userId = \"user-0001\" , gradeModelId = \"grn:ap-northeast-1:YourOwnerId:grade:namespace-0001:model:grade-0001\" , gradeValue = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; status = result.status ; itemModel = result.itemModel ; inventory = result.inventory ; overflowCount = result.overflowCount ; client = gs2 ( 'inventory' ) api_result_handler = client.acquire_item_set_with_grade_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , userId = \"user-0001\" , gradeModelId = \"grn:ap-northeast-1:YourOwnerId:grade:namespace-0001:model:grade-0001\" , gradeValue = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; status = result.status ; itemModel = result.itemModel ; inventory = result.inventory ; overflowCount = result.overflowCount ; consumeItemSet 아이템 세트를 소비 요청 사용자의 인벤토리 내 지정된 아이템의 수량을 감소시킵니다. itemSetName을 지정하면 해당 특정 스택만 소비 대상이 됩니다. 지정하지 않으면 해당 아이템 타입의 모든 스택에서 소비됩니다. 아이템 세트의 수량이 0이 되면 자동으로 삭제됩니다. 요청된 양을 소비하기에 충분한 아이템이 없는 경우 Insufficient 에러가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. consumeCount long  1 ~ 9223372036854775805 소비 수량 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 Result 타입 설명 items List 소비 후 아이템 세트 리스트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . ConsumeItemSet ( \u0026 inventory . ConsumeItemSetRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ConsumeCount : pointy . Int64 ( 1 ), ItemSetName : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\ConsumeItemSetRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e consumeItemSet ( ( new ConsumeItemSetRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withConsumeCount ( 1 ) -\u003e withItemSetName ( null ) ); $items = $result -\u003e getItems (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.ConsumeItemSetRequest ; import io.gs2.inventory.result.ConsumeItemSetResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { ConsumeItemSetResult result = client . consumeItemSet ( new ConsumeItemSetRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withConsumeCount ( 1L ) . withItemSetName ( null ) ); List ItemSet \u003e items = result . getItems (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . ConsumeItemSetResult \u003e asyncResult = null ; yield return client . ConsumeItemSet ( new Gs2 . Gs2Inventory . Request . ConsumeItemSetRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithConsumeCount ( 1L ) . WithItemSetName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . consumeItemSet ( new Gs2Inventory . ConsumeItemSetRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withConsumeCount ( 1 ) . withItemSetName ( null ) ); const items = result . getItems (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . consume_item_set ( inventory . ConsumeItemSetRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_consume_count ( 1 ) . with_item_set_name ( None ) ) items = result . items item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.consume_item_set ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , consumeCount = 1 , itemSetName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.consume_item_set_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , consumeCount = 1 , itemSetName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; consumeItemSetByUserId 사용자 ID를 지정하여 아이템 세트를 소비 지정된 사용자의 인벤토리 내 특정 아이템의 수량을 감소시킵니다. itemSetName을 지정하면 해당 특정 스택만 소비 대상이 됩니다. 지정하지 않으면 해당 아이템 타입의 모든 스택에서 소비됩니다. 아이템 세트의 수량이 0이 되면 자동으로 삭제됩니다. 충분한 아이템이 없는 경우 Insufficient 에러가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. consumeCount long  1 ~ 9223372036854775805 소비 수량 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 소비 후 아이템 세트 리스트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . ConsumeItemSetByUserId ( \u0026 inventory . ConsumeItemSetByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ConsumeCount : pointy . Int64 ( 1 ), ItemSetName : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\ConsumeItemSetByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e consumeItemSetByUserId ( ( new ConsumeItemSetByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withConsumeCount ( 1 ) -\u003e withItemSetName ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.ConsumeItemSetByUserIdRequest ; import io.gs2.inventory.result.ConsumeItemSetByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { ConsumeItemSetByUserIdResult result = client . consumeItemSetByUserId ( new ConsumeItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withConsumeCount ( 1L ) . withItemSetName ( null ) . withTimeOffsetToken ( null ) ); List ItemSet \u003e items = result . getItems (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . ConsumeItemSetByUserIdResult \u003e asyncResult = null ; yield return client . ConsumeItemSetByUserId ( new Gs2 . Gs2Inventory . Request . ConsumeItemSetByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithConsumeCount ( 1L ) . WithItemSetName ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . consumeItemSetByUserId ( new Gs2Inventory . ConsumeItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withConsumeCount ( 1 ) . withItemSetName ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . consume_item_set_by_user_id ( inventory . ConsumeItemSetByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_consume_count ( 1 ) . with_item_set_name ( None ) . with_time_offset_token ( None ) ) items = result . items item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.consume_item_set_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , consumeCount = 1 , itemSetName = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.consume_item_set_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , consumeCount = 1 , itemSetName = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; deleteItemSetByUserId 아이템 세트를 삭제 지정된 아이템을 사용자의 인벤토리에서 영구적으로 삭제합니다. itemSetName을 지정하면 해당 특정 스택만 삭제됩니다. 지정하지 않으면 해당 아이템 타입의 모든 스택이 삭제됩니다. 소비와 달리 이 작업은 특정 수량을 필요로 하지 않으며, 수량과 관계없이 아이템 세트 전체를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string ~ 36자 아이템 세트를 식별하는 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 삭제한 아이템 세트 리스트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteItemSetByUserId ( \u0026 inventory . DeleteItemSetByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"itemSet-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteItemSetByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteItemSetByUserId ( ( new DeleteItemSetByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"itemSet-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteItemSetByUserIdRequest ; import io.gs2.inventory.result.DeleteItemSetByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteItemSetByUserIdResult result = client . deleteItemSetByUserId ( new DeleteItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"itemSet-0001\" ) . withTimeOffsetToken ( null ) ); List ItemSet \u003e items = result . getItems (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteItemSetByUserIdResult \u003e asyncResult = null ; yield return client . DeleteItemSetByUserId ( new Gs2 . Gs2Inventory . Request . DeleteItemSetByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"itemSet-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteItemSetByUserId ( new Gs2Inventory . DeleteItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"itemSet-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_item_set_by_user_id ( inventory . DeleteItemSetByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'itemSet-0001' ) . with_time_offset_token ( None ) ) items = result . items item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_item_set_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"itemSet-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_item_set_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"itemSet-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemModel = result.itemModel ; inventory = result.inventory ; verifyItemSet 아이템 세트의 소지 수량 검증 요청 사용자의 합계 아이템 수량이 지정된 조건을 만족하는지 검증합니다. 수량은 지정된 아이템 타입의 모든 아이템 세트를 합산하여 계산됩니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 조건이 만족되지 않는 경우 반전된 조건명으로 에러가 반환됩니다(예: “less” 검사 실패 시 “greaterEqual” 에러를 반환합니다). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 count long  0 ~ 9223372036854775805 소지 수량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 items List 삭제한 아이템 세트 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifyItemSet ( \u0026 inventory . VerifyItemSetRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), ItemName : pointy . String ( \"item-0001\" ), VerifyType : pointy . String ( \"less\" ), ItemSetName : nil , Count : pointy . Int64 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifyItemSetRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifyItemSet ( ( new VerifyItemSetRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withItemSetName ( null ) -\u003e withCount ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifyItemSetRequest ; import io.gs2.inventory.result.VerifyItemSetResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifyItemSetResult result = client . verifyItemSet ( new VerifyItemSetRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withItemSetName ( null ) . withCount ( 10L ) . withMultiplyValueSpecifyingQuantity ( null ) ); List ItemSet \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifyItemSetResult \u003e asyncResult = null ; yield return client . VerifyItemSet ( new Gs2 . Gs2Inventory . Request . VerifyItemSetRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithItemName ( \"item-0001\" ) . WithVerifyType ( \"less\" ) . WithItemSetName ( null ) . WithCount ( 10L ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifyItemSet ( new Gs2Inventory . VerifyItemSetRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withItemSetName ( null ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_item_set ( inventory . VerifyItemSetRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_item_name ( 'item-0001' ) . with_verify_type ( 'less' ) . with_item_set_name ( None ) . with_count ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_item_set ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , itemSetName = nil , count = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_item_set_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , itemSetName = nil , count = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; verifyItemSetByUserId 사용자 ID를 지정하여 아이템 세트의 소지 수량 검증 지정된 사용자의 합계 아이템 수량이 지정된 조건을 만족하는지 검증합니다. 수량은 지정된 아이템 타입의 모든 아이템 세트를 합산하여 계산됩니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 count long  0 ~ 9223372036854775805 소지 수량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 삭제한 아이템 세트 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifyItemSetByUserId ( \u0026 inventory . VerifyItemSetByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), ItemName : pointy . String ( \"item-0001\" ), VerifyType : pointy . String ( \"less\" ), ItemSetName : nil , Count : pointy . Int64 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifyItemSetByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifyItemSetByUserId ( ( new VerifyItemSetByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withItemSetName ( null ) -\u003e withCount ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifyItemSetByUserIdRequest ; import io.gs2.inventory.result.VerifyItemSetByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifyItemSetByUserIdResult result = client . verifyItemSetByUserId ( new VerifyItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withItemSetName ( null ) . withCount ( 10L ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); List ItemSet \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifyItemSetByUserIdResult \u003e asyncResult = null ; yield return client . VerifyItemSetByUserId ( new Gs2 . Gs2Inventory . Request . VerifyItemSetByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithItemName ( \"item-0001\" ) . WithVerifyType ( \"less\" ) . WithItemSetName ( null ) . WithCount ( 10L ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifyItemSetByUserId ( new Gs2Inventory . VerifyItemSetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withItemSetName ( null ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_item_set_by_user_id ( inventory . VerifyItemSetByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_item_name ( 'item-0001' ) . with_verify_type ( 'less' ) . with_item_set_name ( None ) . with_count ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_item_set_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , itemSetName = nil , count = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_item_set_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , itemSetName = nil , count = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeReferenceOf 참조원 목록을 취득 요청 사용자의 특정 아이템 세트에 등록되어 있는 참조원 문자열 목록을 취득합니다. 참조원은 아이템 세트를 외부 엔티티(장비 슬롯 등)에 연관 짓기 위해 사용되며, 인벤토리 모델에서 protectReferencedItem 이 활성화된 경우, 참조원을 가진 아이템은 소비·삭제할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. Result 타입 설명 items List 이 소지품의 참조원 목록 itemSet ItemSet 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeReferenceOf ( \u0026 inventory . DescribeReferenceOfRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeReferenceOfRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeReferenceOf ( ( new DescribeReferenceOfRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) ); $items = $result -\u003e getItems (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeReferenceOfRequest ; import io.gs2.inventory.result.DescribeReferenceOfResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeReferenceOfResult result = client . describeReferenceOf ( new DescribeReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) ); List String \u003e items = result . getItems (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeReferenceOfResult \u003e asyncResult = null ; yield return client . DescribeReferenceOf ( new Gs2 . Gs2Inventory . Request . DescribeReferenceOfRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeReferenceOf ( new Gs2Inventory . DescribeReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) ); const items = result . getItems (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_reference_of ( inventory . DescribeReferenceOfRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) ) items = result . items item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_reference_of ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_reference_of_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; describeReferenceOfByUserId 사용자 ID를 지정하여 참조원 목록을 취득 지정된 사용자의 특정 아이템 세트에 등록되어 있는 참조원 문자열 목록을 취득합니다. 참조원은 아이템 세트를 외부 엔티티(장비 슬롯 등)에 연관 짓기 위해 사용되며, 인벤토리 모델에서 protectReferencedItem 이 활성화된 경우, 참조원을 가진 아이템은 소비·삭제할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 이 소지품의 참조원 목록 itemSet ItemSet 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeReferenceOfByUserId ( \u0026 inventory . DescribeReferenceOfByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeReferenceOfByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeReferenceOfByUserId ( ( new DescribeReferenceOfByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeReferenceOfByUserIdRequest ; import io.gs2.inventory.result.DescribeReferenceOfByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeReferenceOfByUserIdResult result = client . describeReferenceOfByUserId ( new DescribeReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withTimeOffsetToken ( null ) ); List String \u003e items = result . getItems (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeReferenceOfByUserIdResult \u003e asyncResult = null ; yield return client . DescribeReferenceOfByUserId ( new Gs2 . Gs2Inventory . Request . DescribeReferenceOfByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeReferenceOfByUserId ( new Gs2Inventory . DescribeReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_reference_of_by_user_id ( inventory . DescribeReferenceOfByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_time_offset_token ( None ) ) items = result . items item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_reference_of_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_reference_of_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; getReferenceOf 참조원을 취득 요청 사용자의 아이템 세트에 등록되어 있는 특정 참조원 문자열을 취득합니다. 관련된 아이템 세트, 아이템 모델, 인벤토리 데이터도 함께 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. Result 타입 설명 item string 이 소지품의 참조원 itemSet ItemSet 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetReferenceOf ( \u0026 inventory . GetReferenceOfRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), ReferenceOf : [ ' resource - 0001 ' ], } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetReferenceOfRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getReferenceOf ( ( new GetReferenceOfRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withReferenceOf ([ 'resource-0001' ]) ); $item = $result -\u003e getItem (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetReferenceOfRequest ; import io.gs2.inventory.result.GetReferenceOfResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetReferenceOfResult result = client . getReferenceOf ( new GetReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( [ ' resource - 0001 ' ] ) ); String item = result . getItem (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetReferenceOfResult \u003e asyncResult = null ; yield return client . GetReferenceOf ( new Gs2 . Gs2Inventory . Request . GetReferenceOfRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithReferenceOf ([ ' resource - 0001 ' ]), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getReferenceOf ( new Gs2Inventory . GetReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ([ 'resource-0001' ]) ); const item = result . getItem (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_reference_of ( inventory . GetReferenceOfRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_reference_of ([ 'resource-0001' ]) ) item = result . item item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_reference_of ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = [ 'resource-0001' ], }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.get_reference_of_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = [ 'resource-0001' ], }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; getReferenceOfByUserId 사용자 ID를 지정하여 참조원을 취득 지정된 사용자의 아이템 세트에 등록되어 있는 특정 참조원 문자열을 취득합니다. 관련된 아이템 세트, 아이템 모델, 인벤토리 데이터도 함께 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item string 이 소지품의 참조원 itemSet ItemSet 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetReferenceOfByUserId ( \u0026 inventory . GetReferenceOfByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), ReferenceOf : [ ' resource - 0001 ' ], TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetReferenceOfByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getReferenceOfByUserId ( ( new GetReferenceOfByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withReferenceOf ([ 'resource-0001' ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetReferenceOfByUserIdRequest ; import io.gs2.inventory.result.GetReferenceOfByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetReferenceOfByUserIdResult result = client . getReferenceOfByUserId ( new GetReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( [ ' resource - 0001 ' ] ) . withTimeOffsetToken ( null ) ); String item = result . getItem (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetReferenceOfByUserIdResult \u003e asyncResult = null ; yield return client . GetReferenceOfByUserId ( new Gs2 . Gs2Inventory . Request . GetReferenceOfByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithReferenceOf ([ ' resource - 0001 ' ]) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getReferenceOfByUserId ( new Gs2Inventory . GetReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ([ 'resource-0001' ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_reference_of_by_user_id ( inventory . GetReferenceOfByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_reference_of ([ 'resource-0001' ]) . with_time_offset_token ( None ) ) item = result . item item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_reference_of_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = [ 'resource-0001' ], timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.get_reference_of_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = [ 'resource-0001' ], timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; verifyReferenceOf 아이템의 참조원을 검증 요청 사용자의 아이템 세트 상의 참조원 상태를 검증합니다. 4개의 검증 타입을 지원: not_entry(참조원이 미등록), already_entry(참조원이 등록됨), empty(참조원이 0개), not_empty(참조원이 1개 이상 존재). 조건이 충족되지 않으면 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. verifyType 문자열 열거형 enum {   “not_entry”,   “already_entry”,   “empty”,   “not_empty” }  검증 종류 정의 설명 not_entry 지정한 참조원이 아직 등록되어 있지 않을 것 already_entry 지정한 참조원이 이미 등록되어 있을 것 empty 참조원으로 등록되어 있는 요소가 0개일 것 not_empty 참조원으로 등록되어 있는 요소가 1개 이상일 것 Result 타입 설명 item string 이 소지품의 참조원 itemSet ItemSet 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifyReferenceOf ( \u0026 inventory . VerifyReferenceOfRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), ReferenceOf : pointy . String ( \"resource-0001\" ), VerifyType : pointy . String ( \"not_entry\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifyReferenceOfRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifyReferenceOf ( ( new VerifyReferenceOfRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withReferenceOf ( \"resource-0001\" ) -\u003e withVerifyType ( \"not_entry\" ) ); $item = $result -\u003e getItem (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifyReferenceOfRequest ; import io.gs2.inventory.result.VerifyReferenceOfResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifyReferenceOfResult result = client . verifyReferenceOf ( new VerifyReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( \"resource-0001\" ) . withVerifyType ( \"not_entry\" ) ); String item = result . getItem (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifyReferenceOfResult \u003e asyncResult = null ; yield return client . VerifyReferenceOf ( new Gs2 . Gs2Inventory . Request . VerifyReferenceOfRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithReferenceOf ( \"resource-0001\" ) . WithVerifyType ( \"not_entry\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifyReferenceOf ( new Gs2Inventory . VerifyReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( \"resource-0001\" ) . withVerifyType ( \"not_entry\" ) ); const item = result . getItem (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_reference_of ( inventory . VerifyReferenceOfRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_reference_of ( 'resource-0001' ) . with_verify_type ( 'not_entry' ) ) item = result . item item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_reference_of ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = \"resource-0001\" , verifyType = \"not_entry\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_reference_of_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = \"resource-0001\" , verifyType = \"not_entry\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; verifyReferenceOfByUserId 사용자 ID를 지정하여 아이템의 참조원을 검증 지정된 사용자의 아이템 세트 상의 참조원 상태를 검증합니다. 4개의 검증 타입을 지원: not_entry(참조원이 미등록), already_entry(참조원이 등록됨), empty(참조원이 0개), not_empty(참조원이 1개 이상 존재). 조건이 충족되지 않으면 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. verifyType 문자열 열거형 enum {   “not_entry”,   “already_entry”,   “empty”,   “not_empty” }  검증 종류 정의 설명 not_entry 지정한 참조원이 아직 등록되어 있지 않을 것 already_entry 지정한 참조원이 이미 등록되어 있을 것 empty 참조원으로 등록되어 있는 요소가 0개일 것 not_empty 참조원으로 등록되어 있는 요소가 1개 이상일 것 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item string 이 소지품의 참조원 itemSet ItemSet 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifyReferenceOfByUserId ( \u0026 inventory . VerifyReferenceOfByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), ReferenceOf : pointy . String ( \"resource-0001\" ), VerifyType : pointy . String ( \"not_entry\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifyReferenceOfByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifyReferenceOfByUserId ( ( new VerifyReferenceOfByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withReferenceOf ( \"resource-0001\" ) -\u003e withVerifyType ( \"not_entry\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifyReferenceOfByUserIdRequest ; import io.gs2.inventory.result.VerifyReferenceOfByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifyReferenceOfByUserIdResult result = client . verifyReferenceOfByUserId ( new VerifyReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( \"resource-0001\" ) . withVerifyType ( \"not_entry\" ) . withTimeOffsetToken ( null ) ); String item = result . getItem (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifyReferenceOfByUserIdResult \u003e asyncResult = null ; yield return client . VerifyReferenceOfByUserId ( new Gs2 . Gs2Inventory . Request . VerifyReferenceOfByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithReferenceOf ( \"resource-0001\" ) . WithVerifyType ( \"not_entry\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifyReferenceOfByUserId ( new Gs2Inventory . VerifyReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( \"resource-0001\" ) . withVerifyType ( \"not_entry\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_reference_of_by_user_id ( inventory . VerifyReferenceOfByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_reference_of ( 'resource-0001' ) . with_verify_type ( 'not_entry' ) . with_time_offset_token ( None ) ) item = result . item item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_reference_of_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = \"resource-0001\" , verifyType = \"not_entry\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_reference_of_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = \"resource-0001\" , verifyType = \"not_entry\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; addReferenceOf 참조원을 추가 요청 사용자의 지정된 아이템 세트에 참조원 문자열을 등록합니다. 참조원은 아이템 세트를 외부 엔티티(장비 슬롯이나 캐릭터 등)에 연관 짓습니다. 인벤토리 모델에서 protectReferencedItem 이 활성화된 경우, 참조원을 가진 아이템은 소비·삭제할 수 없게 되어, 장비 중인 아이템이 실수로 소비되는 것을 방지할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. Result 타입 설명 item string 이 소지품의 참조원 itemSet ItemSet 참조원 추가 후의 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . AddReferenceOf ( \u0026 inventory . AddReferenceOfRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), ReferenceOf : [ ' resource - 0001 ' ], } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\AddReferenceOfRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e addReferenceOf ( ( new AddReferenceOfRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withReferenceOf ([ 'resource-0001' ]) ); $item = $result -\u003e getItem (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.AddReferenceOfRequest ; import io.gs2.inventory.result.AddReferenceOfResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { AddReferenceOfResult result = client . addReferenceOf ( new AddReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( [ ' resource - 0001 ' ] ) ); String item = result . getItem (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . AddReferenceOfResult \u003e asyncResult = null ; yield return client . AddReferenceOf ( new Gs2 . Gs2Inventory . Request . AddReferenceOfRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithReferenceOf ([ ' resource - 0001 ' ]), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . addReferenceOf ( new Gs2Inventory . AddReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ([ 'resource-0001' ]) ); const item = result . getItem (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . add_reference_of ( inventory . AddReferenceOfRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_reference_of ([ 'resource-0001' ]) ) item = result . item item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.add_reference_of ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = [ 'resource-0001' ], }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.add_reference_of_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = [ 'resource-0001' ], }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; addReferenceOfByUserId 사용자 ID를 지정하여 아이템에 참조원을 추가 지정된 사용자의 지정된 아이템 세트에 참조원 문자열을 등록합니다. 참조원은 아이템 세트를 외부 엔티티(장비 슬롯이나 캐릭터 등)에 연관 짓습니다. 인벤토리 모델에서 protectReferencedItem 이 활성화된 경우, 참조원을 가진 아이템은 소비·삭제할 수 없게 되어, 장비 중인 아이템이 실수로 소비되는 것을 방지할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item string 이 소지품의 참조원 itemSet ItemSet 참조원 추가 후의 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . AddReferenceOfByUserId ( \u0026 inventory . AddReferenceOfByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), ReferenceOf : [ ' resource - 0001 ' ], TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\AddReferenceOfByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e addReferenceOfByUserId ( ( new AddReferenceOfByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withReferenceOf ([ 'resource-0001' ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.AddReferenceOfByUserIdRequest ; import io.gs2.inventory.result.AddReferenceOfByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { AddReferenceOfByUserIdResult result = client . addReferenceOfByUserId ( new AddReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( [ ' resource - 0001 ' ] ) . withTimeOffsetToken ( null ) ); String item = result . getItem (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . AddReferenceOfByUserIdResult \u003e asyncResult = null ; yield return client . AddReferenceOfByUserId ( new Gs2 . Gs2Inventory . Request . AddReferenceOfByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithReferenceOf ([ ' resource - 0001 ' ]) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . addReferenceOfByUserId ( new Gs2Inventory . AddReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ([ 'resource-0001' ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . add_reference_of_by_user_id ( inventory . AddReferenceOfByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_reference_of ([ 'resource-0001' ]) . with_time_offset_token ( None ) ) item = result . item item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.add_reference_of_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = [ 'resource-0001' ], timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.add_reference_of_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = [ 'resource-0001' ], timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; deleteReferenceOf 참조원을 삭제 요청 사용자의 지정된 아이템 세트에서 특정 참조원 문자열을 삭제합니다. 삭제 후, protectReferencedItem 이 활성화되어 있고 다른 참조원이 남아있지 않은 경우, 아이템은 다시 소비·삭제가 가능해집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. Result 타입 설명 item string 이 소지품의 참조원 itemSet ItemSet 참조원 삭제 후의 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteReferenceOf ( \u0026 inventory . DeleteReferenceOfRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), ReferenceOf : pointy . String ( \"resource-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteReferenceOfRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteReferenceOf ( ( new DeleteReferenceOfRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withReferenceOf ( \"resource-0001\" ) ); $item = $result -\u003e getItem (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteReferenceOfRequest ; import io.gs2.inventory.result.DeleteReferenceOfResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteReferenceOfResult result = client . deleteReferenceOf ( new DeleteReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( \"resource-0001\" ) ); String item = result . getItem (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteReferenceOfResult \u003e asyncResult = null ; yield return client . DeleteReferenceOf ( new Gs2 . Gs2Inventory . Request . DeleteReferenceOfRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithReferenceOf ( \"resource-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteReferenceOf ( new Gs2Inventory . DeleteReferenceOfRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( \"resource-0001\" ) ); const item = result . getItem (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_reference_of ( inventory . DeleteReferenceOfRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_reference_of ( 'resource-0001' ) ) item = result . item item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_reference_of ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = \"resource-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_reference_of_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = \"resource-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; deleteReferenceOfByUserId 사용자 ID를 지정하여 아이템의 참조원을 삭제 지정된 사용자의 지정된 아이템 세트에서 특정 참조원 문자열을 삭제합니다. 삭제 후, protectReferencedItem 이 활성화되어 있고 다른 참조원이 남아있지 않은 경우, 아이템은 다시 소비·삭제가 가능해집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item string 이 소지품의 참조원 itemSet ItemSet 참조원 삭제 후의 아이템 세트 itemModel ItemModel 아이템 모델 inventory Inventory 인벤토리 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteReferenceOfByUserId ( \u0026 inventory . DeleteReferenceOfByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ItemSetName : pointy . String ( \"item-set-0001\" ), ReferenceOf : pointy . String ( \"resource-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemSet := result . ItemSet itemModel := result . ItemModel inventory := result . Inventory use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteReferenceOfByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteReferenceOfByUserId ( ( new DeleteReferenceOfByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withItemSetName ( \"item-set-0001\" ) -\u003e withReferenceOf ( \"resource-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $itemSet = $result -\u003e getItemSet (); $itemModel = $result -\u003e getItemModel (); $inventory = $result -\u003e getInventory (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteReferenceOfByUserIdRequest ; import io.gs2.inventory.result.DeleteReferenceOfByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteReferenceOfByUserIdResult result = client . deleteReferenceOfByUserId ( new DeleteReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( \"resource-0001\" ) . withTimeOffsetToken ( null ) ); String item = result . getItem (); ItemSet itemSet = result . getItemSet (); ItemModel itemModel = result . getItemModel (); Inventory inventory = result . getInventory (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteReferenceOfByUserIdResult \u003e asyncResult = null ; yield return client . DeleteReferenceOfByUserId ( new Gs2 . Gs2Inventory . Request . DeleteReferenceOfByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithItemSetName ( \"item-set-0001\" ) . WithReferenceOf ( \"resource-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemSet = result . ItemSet ; var itemModel = result . ItemModel ; var inventory = result . Inventory ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteReferenceOfByUserId ( new Gs2Inventory . DeleteReferenceOfByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withItemSetName ( \"item-set-0001\" ) . withReferenceOf ( \"resource-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const itemSet = result . getItemSet (); const itemModel = result . getItemModel (); const inventory = result . getInventory (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_reference_of_by_user_id ( inventory . DeleteReferenceOfByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_item_set_name ( 'item-set-0001' ) . with_reference_of ( 'resource-0001' ) . with_time_offset_token ( None ) ) item = result . item item_set = result . item_set item_model = result . item_model inventory = result . inventory except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_reference_of_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = \"resource-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_reference_of_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , itemSetName = \"item-set-0001\" , referenceOf = \"resource-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemSet = result.itemSet ; itemModel = result.itemModel ; inventory = result.inventory ; describeSimpleItems 심플 아이템 목록 조회 지정된 심플 인벤토리 내에서 요청 사용자의 심플 아이템의 페이지네이션된 목록을 조회합니다. 각 심플 아이템은 스택, 유효기간, 참조를 갖지 않으며, 아이템 타입별로 단일 수량 값을 추적합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 심플 아이템 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeSimpleItems ( \u0026 inventory . DescribeSimpleItemsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeSimpleItemsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeSimpleItems ( ( new DescribeSimpleItemsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeSimpleItemsRequest ; import io.gs2.inventory.result.DescribeSimpleItemsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeSimpleItemsResult result = client . describeSimpleItems ( new DescribeSimpleItemsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List SimpleItem \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeSimpleItemsResult \u003e asyncResult = null ; yield return client . DescribeSimpleItems ( new Gs2 . Gs2Inventory . Request . DescribeSimpleItemsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeSimpleItems ( new Gs2Inventory . DescribeSimpleItemsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_simple_items ( inventory . DescribeSimpleItemsRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_simple_items ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_simple_items_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 목록 조회 지정된 심플 인벤토리 내에서 사용자의 심플 아이템의 페이지네이션된 목록을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 심플 아이템 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeSimpleItemsByUserId ( \u0026 inventory . DescribeSimpleItemsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeSimpleItemsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeSimpleItemsByUserId ( ( new DescribeSimpleItemsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeSimpleItemsByUserIdRequest ; import io.gs2.inventory.result.DescribeSimpleItemsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeSimpleItemsByUserIdResult result = client . describeSimpleItemsByUserId ( new DescribeSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List SimpleItem \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeSimpleItemsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeSimpleItemsByUserId ( new Gs2 . Gs2Inventory . Request . DescribeSimpleItemsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeSimpleItemsByUserId ( new Gs2Inventory . DescribeSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_simple_items_by_user_id ( inventory . DescribeSimpleItemsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_simple_items_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_simple_items_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getSimpleItem 심플 아이템 조회 지정된 이름의 요청 사용자의 심플 아이템(현재 수량과 관련된 아이템 모델 포함)을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. Result 타입 설명 item SimpleItem 심플 아이템 itemModel SimpleItemModel 심플 아이템 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetSimpleItem ( \u0026 inventory . GetSimpleItemRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemModel := result . ItemModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetSimpleItemRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getSimpleItem ( ( new GetSimpleItemRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) ); $item = $result -\u003e getItem (); $itemModel = $result -\u003e getItemModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetSimpleItemRequest ; import io.gs2.inventory.result.GetSimpleItemResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetSimpleItemResult result = client . getSimpleItem ( new GetSimpleItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) ); SimpleItem item = result . getItem (); SimpleItemModel itemModel = result . getItemModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetSimpleItemResult \u003e asyncResult = null ; yield return client . GetSimpleItem ( new Gs2 . Gs2Inventory . Request . GetSimpleItemRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemModel = result . ItemModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getSimpleItem ( new Gs2Inventory . GetSimpleItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) ); const item = result . getItem (); const itemModel = result . getItemModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_simple_item ( inventory . GetSimpleItemRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) ) item = result . item item_model = result . item_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_simple_item ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemModel = result.itemModel ; client = gs2 ( 'inventory' ) api_result_handler = client.get_simple_item_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemModel = result.itemModel ; getSimpleItemByUserId 사용자 ID를 지정하여 심플 아이템 조회 지정된 사용자의 특정 이름의 심플 아이템(현재 수량과 관련된 아이템 모델 포함)을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SimpleItem 심플 아이템 itemModel SimpleItemModel 심플 아이템 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetSimpleItemByUserId ( \u0026 inventory . GetSimpleItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemModel := result . ItemModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetSimpleItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getSimpleItemByUserId ( ( new GetSimpleItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $itemModel = $result -\u003e getItemModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetSimpleItemByUserIdRequest ; import io.gs2.inventory.result.GetSimpleItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetSimpleItemByUserIdResult result = client . getSimpleItemByUserId ( new GetSimpleItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withTimeOffsetToken ( null ) ); SimpleItem item = result . getItem (); SimpleItemModel itemModel = result . getItemModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetSimpleItemByUserIdResult \u003e asyncResult = null ; yield return client . GetSimpleItemByUserId ( new Gs2 . Gs2Inventory . Request . GetSimpleItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemModel = result . ItemModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getSimpleItemByUserId ( new Gs2Inventory . GetSimpleItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const itemModel = result . getItemModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_simple_item_by_user_id ( inventory . GetSimpleItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_time_offset_token ( None ) ) item = result . item item_model = result . item_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_simple_item_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemModel = result.itemModel ; client = gs2 ( 'inventory' ) api_result_handler = client.get_simple_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemModel = result.itemModel ; getSimpleItemWithSignature 서명과 함께 심플 아이템 조회 진위 검증을 위한 암호 서명과 함께 심플 아이템을 조회합니다. 서명은 지정된 암호 키를 사용하여 생성되며, 외부 시스템이 아이템 데이터를 검증할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item SimpleItem 심플 아이템 simpleItemModel SimpleItemModel 심플 아이템 모델 body string 서명 대상 심플 아이템 정보 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetSimpleItemWithSignature ( \u0026 inventory . GetSimpleItemWithSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item simpleItemModel := result . SimpleItemModel body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetSimpleItemWithSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getSimpleItemWithSignature ( ( new GetSimpleItemWithSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $simpleItemModel = $result -\u003e getSimpleItemModel (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetSimpleItemWithSignatureRequest ; import io.gs2.inventory.result.GetSimpleItemWithSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetSimpleItemWithSignatureResult result = client . getSimpleItemWithSignature ( new GetSimpleItemWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withKeyId ( \"key-0001\" ) ); SimpleItem item = result . getItem (); SimpleItemModel simpleItemModel = result . getSimpleItemModel (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetSimpleItemWithSignatureResult \u003e asyncResult = null ; yield return client . GetSimpleItemWithSignature ( new Gs2 . Gs2Inventory . Request . GetSimpleItemWithSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var simpleItemModel = result . SimpleItemModel ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getSimpleItemWithSignature ( new Gs2Inventory . GetSimpleItemWithSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const simpleItemModel = result . getSimpleItemModel (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_simple_item_with_signature ( inventory . GetSimpleItemWithSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_key_id ( 'key-0001' ) ) item = result . item simple_item_model = result . simple_item_model body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_simple_item_with_signature ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; simpleItemModel = result.simpleItemModel ; body = result.body ; signature = result.signature ; client = gs2 ( 'inventory' ) api_result_handler = client.get_simple_item_with_signature_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; simpleItemModel = result.simpleItemModel ; body = result.body ; signature = result.signature ; getSimpleItemWithSignatureByUserId 사용자 ID를 지정하여 서명이 포함된 심플 아이템 조회 외부의 진위 검증을 위한 암호 서명과 함께 지정된 사용자의 심플 아이템을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SimpleItem 심플 아이템 simpleItemModel SimpleItemModel 심플 아이템 모델 body string 서명 대상 심플 아이템 정보 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetSimpleItemWithSignatureByUserId ( \u0026 inventory . GetSimpleItemWithSignatureByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), KeyId : pointy . String ( \"key-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item simpleItemModel := result . SimpleItemModel body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetSimpleItemWithSignatureByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getSimpleItemWithSignatureByUserId ( ( new GetSimpleItemWithSignatureByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $simpleItemModel = $result -\u003e getSimpleItemModel (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetSimpleItemWithSignatureByUserIdRequest ; import io.gs2.inventory.result.GetSimpleItemWithSignatureByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetSimpleItemWithSignatureByUserIdResult result = client . getSimpleItemWithSignatureByUserId ( new GetSimpleItemWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); SimpleItem item = result . getItem (); SimpleItemModel simpleItemModel = result . getSimpleItemModel (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetSimpleItemWithSignatureByUserIdResult \u003e asyncResult = null ; yield return client . GetSimpleItemWithSignatureByUserId ( new Gs2 . Gs2Inventory . Request . GetSimpleItemWithSignatureByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithKeyId ( \"key-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var simpleItemModel = result . SimpleItemModel ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getSimpleItemWithSignatureByUserId ( new Gs2Inventory . GetSimpleItemWithSignatureByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const simpleItemModel = result . getSimpleItemModel (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_simple_item_with_signature_by_user_id ( inventory . GetSimpleItemWithSignatureByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_key_id ( 'key-0001' ) . with_time_offset_token ( None ) ) item = result . item simple_item_model = result . simple_item_model body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_simple_item_with_signature_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , keyId = \"key-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; simpleItemModel = result.simpleItemModel ; body = result.body ; signature = result.signature ; client = gs2 ( 'inventory' ) api_result_handler = client.get_simple_item_with_signature_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , keyId = \"key-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; simpleItemModel = result.simpleItemModel ; body = result.body ; signature = result.signature ; acquireSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 입수 입수 수량의 배치를 사용하여 사용자의 심플 인벤토리에 아이템을 추가합니다. 단일 원자적 작업으로 여러 아이템을 입수할 수 있습니다. acquireCounts 배열로 각 아이템의 이름과 수량을 지정합니다. 일반적인 아이템 세트와 달리, 심플 아이템에는 용량 제한, 스택 제한, 유효기간이 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID acquireCounts List  1 ~ 100 items 심플 아이템의 입수 수량 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 가산 후 심플 아이템 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . AcquireSimpleItemsByUserId ( \u0026 inventory . AcquireSimpleItemsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), UserId : pointy . String ( \"user-0001\" ), AcquireCounts : [] inventory . AcquireCount { inventory . AcquireCount { ItemName : pointy . String ( \"item-0001\" ), Count : pointy . Int64 ( 5 ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\AcquireSimpleItemsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e acquireSimpleItemsByUserId ( ( new AcquireSimpleItemsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAcquireCounts ([ ( new \\Gs2\\Inventory\\Model\\AcquireCount ()) -\u003e withItemName ( \"item-0001\" ) -\u003e withCount ( 5 ), ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.AcquireSimpleItemsByUserIdRequest ; import io.gs2.inventory.result.AcquireSimpleItemsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { AcquireSimpleItemsByUserIdResult result = client . acquireSimpleItemsByUserId ( new AcquireSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withAcquireCounts ( Arrays . asList ( new io . gs2 . inventory . model . AcquireCount () . withItemName ( \"item-0001\" ) . withCount ( 5L ) )) . withTimeOffsetToken ( null ) ); List SimpleItem \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . AcquireSimpleItemsByUserIdResult \u003e asyncResult = null ; yield return client . AcquireSimpleItemsByUserId ( new Gs2 . Gs2Inventory . Request . AcquireSimpleItemsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithUserId ( \"user-0001\" ) . WithAcquireCounts ( new Gs2 . Gs2Inventory . Model . AcquireCount [] { new Gs2 . Gs2Inventory . Model . AcquireCount () . WithItemName ( \"item-0001\" ) . WithCount ( 5L ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . acquireSimpleItemsByUserId ( new Gs2Inventory . AcquireSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withAcquireCounts ([ new Gs2Inventory . model . AcquireCount () . withItemName ( \"item-0001\" ) . withCount ( 5 ), ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . acquire_simple_items_by_user_id ( inventory . AcquireSimpleItemsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_user_id ( 'user-0001' ) . with_acquire_counts ([ inventory . AcquireCount () . with_item_name ( 'item-0001' ) . with_count ( 5 ), ]) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.acquire_simple_items_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , acquireCounts = { { itemName = \"item-0001\" , count = 5 , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.acquire_simple_items_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , acquireCounts = { { itemName = \"item-0001\" , count = 5 , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; consumeSimpleItems 심플 아이템 소비 소비 수량의 배치를 사용하여 요청 사용자의 심플 인벤토리 내 아이템 수량을 감소시킵니다. 단일 원자적 작업으로 여러 아이템을 소비할 수 있습니다. 어느 하나의 아이템 수량이라도 부족한 경우, 작업 전체가 실패합니다. 지정된 아이템 중 하나라도 충분하지 않은 경우, Insufficient 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 consumeCounts List  1 ~ 100 items 심플 아이템의 소비 수량 리스트 Result 타입 설명 items List 소비 후 심플 아이템 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . ConsumeSimpleItems ( \u0026 inventory . ConsumeSimpleItemsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ConsumeCounts : [] inventory . ConsumeCount { inventory . ConsumeCount { ItemName : pointy . String ( \"item-0001\" ), Count : pointy . Int64 ( 5 ), }, inventory . ConsumeCount { ItemName : pointy . String ( \"item-0002\" ), Count : pointy . Int64 ( 3 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\ConsumeSimpleItemsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e consumeSimpleItems ( ( new ConsumeSimpleItemsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withConsumeCounts ([ ( new ConsumeCount ()) -\u003e withItemName ( \"item-0001\" ) -\u003e withCount ( 5 ), ( new ConsumeCount ()) -\u003e withItemName ( \"item-0002\" ) -\u003e withCount ( 3 ), ]) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.ConsumeSimpleItemsRequest ; import io.gs2.inventory.result.ConsumeSimpleItemsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { ConsumeSimpleItemsResult result = client . consumeSimpleItems ( new ConsumeSimpleItemsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConsumeCounts ( Arrays . asList ( new ConsumeCount () . withItemName ( \"item-0001\" ) . withCount ( 5L ), new ConsumeCount () . withItemName ( \"item-0002\" ) . withCount ( 3L ) )) ); List SimpleItem \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . ConsumeSimpleItemsResult \u003e asyncResult = null ; yield return client . ConsumeSimpleItems ( new Gs2 . Gs2Inventory . Request . ConsumeSimpleItemsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithConsumeCounts ( new Gs2 . Gs2Inventory . Model . ConsumeCount [] { new Gs2 . Gs2Inventory . Model . ConsumeCount () . WithItemName ( \"item-0001\" ) . WithCount ( 5L ), new Gs2 . Gs2Inventory . Model . ConsumeCount () . WithItemName ( \"item-0002\" ) . WithCount ( 3L ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . consumeSimpleItems ( new Gs2Inventory . ConsumeSimpleItemsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConsumeCounts ([ new Gs2Inventory . model . ConsumeCount () . withItemName ( \"item-0001\" ) . withCount ( 5 ), new Gs2Inventory . model . ConsumeCount () . withItemName ( \"item-0002\" ) . withCount ( 3 ), ]) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . consume_simple_items ( inventory . ConsumeSimpleItemsRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_consume_counts ([ inventory . ConsumeCount () . with_item_name ( 'item-0001' ) . with_count ( 5 ), inventory . ConsumeCount () . with_item_name ( 'item-0002' ) . with_count ( 3 ), ]) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.consume_simple_items ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , consumeCounts = { { item_name = \"item-0001\" , count = 5 , }, { item_name = \"item-0002\" , count = 3 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.consume_simple_items_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , consumeCounts = { { item_name = \"item-0001\" , count = 5 , }, { item_name = \"item-0002\" , count = 3 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; consumeSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 소비 소비 수량의 배치를 사용하여 지정된 사용자의 심플 인벤토리 내 아이템 수량을 감소시킵니다. 단일 원자적 작업으로 여러 아이템을 소비할 수 있습니다. 어느 하나의 아이템 수량이라도 부족한 경우, 작업 전체가 실패합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID consumeCounts List  1 ~ 100 items 심플 아이템의 소비 수량 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 소비 후 심플 아이템 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . ConsumeSimpleItemsByUserId ( \u0026 inventory . ConsumeSimpleItemsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ConsumeCounts : [] inventory . ConsumeCount { inventory . ConsumeCount { ItemName : pointy . String ( \"item-0001\" ), Count : pointy . Int64 ( 5 ), }, inventory . ConsumeCount { ItemName : pointy . String ( \"item-0002\" ), Count : pointy . Int64 ( 3 ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\ConsumeSimpleItemsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e consumeSimpleItemsByUserId ( ( new ConsumeSimpleItemsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withConsumeCounts ([ ( new ConsumeCount ()) -\u003e withItemName ( \"item-0001\" ) -\u003e withCount ( 5 ), ( new ConsumeCount ()) -\u003e withItemName ( \"item-0002\" ) -\u003e withCount ( 3 ), ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.ConsumeSimpleItemsByUserIdRequest ; import io.gs2.inventory.result.ConsumeSimpleItemsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { ConsumeSimpleItemsByUserIdResult result = client . consumeSimpleItemsByUserId ( new ConsumeSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withConsumeCounts ( Arrays . asList ( new ConsumeCount () . withItemName ( \"item-0001\" ) . withCount ( 5L ), new ConsumeCount () . withItemName ( \"item-0002\" ) . withCount ( 3L ) )) . withTimeOffsetToken ( null ) ); List SimpleItem \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . ConsumeSimpleItemsByUserIdResult \u003e asyncResult = null ; yield return client . ConsumeSimpleItemsByUserId ( new Gs2 . Gs2Inventory . Request . ConsumeSimpleItemsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithConsumeCounts ( new Gs2 . Gs2Inventory . Model . ConsumeCount [] { new Gs2 . Gs2Inventory . Model . ConsumeCount () . WithItemName ( \"item-0001\" ) . WithCount ( 5L ), new Gs2 . Gs2Inventory . Model . ConsumeCount () . WithItemName ( \"item-0002\" ) . WithCount ( 3L ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . consumeSimpleItemsByUserId ( new Gs2Inventory . ConsumeSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withConsumeCounts ([ new Gs2Inventory . model . ConsumeCount () . withItemName ( \"item-0001\" ) . withCount ( 5 ), new Gs2Inventory . model . ConsumeCount () . withItemName ( \"item-0002\" ) . withCount ( 3 ), ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . consume_simple_items_by_user_id ( inventory . ConsumeSimpleItemsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_consume_counts ([ inventory . ConsumeCount () . with_item_name ( 'item-0001' ) . with_count ( 5 ), inventory . ConsumeCount () . with_item_name ( 'item-0002' ) . with_count ( 3 ), ]) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.consume_simple_items_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , consumeCounts = { { item_name = \"item-0001\" , count = 5 , }, { item_name = \"item-0002\" , count = 3 , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.consume_simple_items_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , consumeCounts = { { item_name = \"item-0001\" , count = 5 , }, { item_name = \"item-0002\" , count = 3 , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; setSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 설정 단일 원자적 작업으로 여러 심플 아이템의 절대 수량을 설정합니다. counts 배열로 각 아이템의 이름과 목표 수량을 지정합니다. 입수/소비가 상대적 연산인 것과 달리, 이 경우 현재 수량을 완전히 덮어씁니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID counts List  1 ~ 100 items 심플 아이템의 소지 수량 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 갱신 후 심플 아이템 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . SetSimpleItemsByUserId ( \u0026 inventory . SetSimpleItemsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), Counts : [] inventory . HeldCount { inventory . HeldCount { ItemName : pointy . String ( \"item-0001\" ), Count : pointy . Int64 ( 5 ), }, inventory . HeldCount { ItemName : pointy . String ( \"item-0002\" ), Count : pointy . Int64 ( 3 ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\SetSimpleItemsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e setSimpleItemsByUserId ( ( new SetSimpleItemsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCounts ([ ( new HeldCount ()) -\u003e withItemName ( \"item-0001\" ) -\u003e withCount ( 5 ), ( new HeldCount ()) -\u003e withItemName ( \"item-0002\" ) -\u003e withCount ( 3 ), ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.SetSimpleItemsByUserIdRequest ; import io.gs2.inventory.result.SetSimpleItemsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { SetSimpleItemsByUserIdResult result = client . setSimpleItemsByUserId ( new SetSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withCounts ( Arrays . asList ( new HeldCount () . withItemName ( \"item-0001\" ) . withCount ( 5L ), new HeldCount () . withItemName ( \"item-0002\" ) . withCount ( 3L ) )) . withTimeOffsetToken ( null ) ); List SimpleItem \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . SetSimpleItemsByUserIdResult \u003e asyncResult = null ; yield return client . SetSimpleItemsByUserId ( new Gs2 . Gs2Inventory . Request . SetSimpleItemsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithCounts ( new Gs2 . Gs2Inventory . Model . HeldCount [] { new Gs2 . Gs2Inventory . Model . HeldCount () . WithItemName ( \"item-0001\" ) . WithCount ( 5L ), new Gs2 . Gs2Inventory . Model . HeldCount () . WithItemName ( \"item-0002\" ) . WithCount ( 3L ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . setSimpleItemsByUserId ( new Gs2Inventory . SetSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withCounts ([ new Gs2Inventory . model . HeldCount () . withItemName ( \"item-0001\" ) . withCount ( 5 ), new Gs2Inventory . model . HeldCount () . withItemName ( \"item-0002\" ) . withCount ( 3 ), ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . set_simple_items_by_user_id ( inventory . SetSimpleItemsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_counts ([ inventory . HeldCount () . with_item_name ( 'item-0001' ) . with_count ( 5 ), inventory . HeldCount () . with_item_name ( 'item-0002' ) . with_count ( 3 ), ]) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.set_simple_items_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , counts = { { item_name = \"item-0001\" , count = 5 , }, { item_name = \"item-0002\" , count = 3 , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.set_simple_items_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , counts = { { item_name = \"item-0001\" , count = 5 , }, { item_name = \"item-0002\" , count = 3 , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; deleteSimpleItemsByUserId 심플 아이템 삭제 지정된 사용자의 지정된 심플 인벤토리 내 모든 심플 아이템을 삭제합니다. 인벤토리 내 모든 아이템 데이터가 영구적으로 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteSimpleItemsByUserId ( \u0026 inventory . DeleteSimpleItemsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteSimpleItemsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteSimpleItemsByUserId ( ( new DeleteSimpleItemsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteSimpleItemsByUserIdRequest ; import io.gs2.inventory.result.DeleteSimpleItemsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteSimpleItemsByUserIdResult result = client . deleteSimpleItemsByUserId ( new DeleteSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteSimpleItemsByUserIdResult \u003e asyncResult = null ; yield return client . DeleteSimpleItemsByUserId ( new Gs2 . Gs2Inventory . Request . DeleteSimpleItemsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteSimpleItemsByUserId ( new Gs2Inventory . DeleteSimpleItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_simple_items_by_user_id ( inventory . DeleteSimpleItemsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_simple_items_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'inventory' ) api_result_handler = client.delete_simple_items_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result verifySimpleItem 심플 아이템 소지 수량 검증 요청 사용자의 심플 아이템 수량이 지정된 조건을 만족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 조건을 만족하지 않는 경우 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 count long  0 ~ 9223372036854775805 소지 수량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item SimpleItem 심플 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifySimpleItem ( \u0026 inventory . VerifySimpleItemRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), ItemName : pointy . String ( \"item-0001\" ), VerifyType : pointy . String ( \"less\" ), Count : pointy . Int64 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifySimpleItemRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifySimpleItem ( ( new VerifySimpleItemRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withCount ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifySimpleItemRequest ; import io.gs2.inventory.result.VerifySimpleItemResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifySimpleItemResult result = client . verifySimpleItem ( new VerifySimpleItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withCount ( 10L ) . withMultiplyValueSpecifyingQuantity ( null ) ); SimpleItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifySimpleItemResult \u003e asyncResult = null ; yield return client . VerifySimpleItem ( new Gs2 . Gs2Inventory . Request . VerifySimpleItemRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithItemName ( \"item-0001\" ) . WithVerifyType ( \"less\" ) . WithCount ( 10L ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifySimpleItem ( new Gs2Inventory . VerifySimpleItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_simple_item ( inventory . VerifySimpleItemRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_item_name ( 'item-0001' ) . with_verify_type ( 'less' ) . with_count ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_simple_item ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_simple_item_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifySimpleItemByUserId 사용자 ID를 지정하여 심플 아이템 소지 수량 검증 지정된 사용자의 심플 아이템 수량이 지정된 조건을 만족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 count long  0 ~ 9223372036854775805 소지 수량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SimpleItem 심플 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifySimpleItemByUserId ( \u0026 inventory . VerifySimpleItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), ItemName : pointy . String ( \"item-0001\" ), VerifyType : pointy . String ( \"less\" ), Count : pointy . Int64 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifySimpleItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifySimpleItemByUserId ( ( new VerifySimpleItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withCount ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifySimpleItemByUserIdRequest ; import io.gs2.inventory.result.VerifySimpleItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifySimpleItemByUserIdResult result = client . verifySimpleItemByUserId ( new VerifySimpleItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withCount ( 10L ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); SimpleItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifySimpleItemByUserIdResult \u003e asyncResult = null ; yield return client . VerifySimpleItemByUserId ( new Gs2 . Gs2Inventory . Request . VerifySimpleItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithItemName ( \"item-0001\" ) . WithVerifyType ( \"less\" ) . WithCount ( 10L ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifySimpleItemByUserId ( new Gs2Inventory . VerifySimpleItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_simple_item_by_user_id ( inventory . VerifySimpleItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_item_name ( 'item-0001' ) . with_verify_type ( 'less' ) . with_count ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_simple_item_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_simple_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeBigItems 거대 아이템 목록 조회 지정된 거대 인벤토리 내에서 요청 사용자가 소지한 거대 아이템의 페이지네이션된 목록을 조회합니다. 거대 아이템은 문자열 기반의 임의 정밀도 수량을 사용하며, 표준적인 정수의 한계를 초과하는 값에 적합합니다. 한 번도 입수한 적 없는 아이템은 결과에 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 거대 아이템 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeBigItems ( \u0026 inventory . DescribeBigItemsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeBigItemsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeBigItems ( ( new DescribeBigItemsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeBigItemsRequest ; import io.gs2.inventory.result.DescribeBigItemsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeBigItemsResult result = client . describeBigItems ( new DescribeBigItemsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List BigItem \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeBigItemsResult \u003e asyncResult = null ; yield return client . DescribeBigItems ( new Gs2 . Gs2Inventory . Request . DescribeBigItemsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeBigItems ( new Gs2Inventory . DescribeBigItemsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_big_items ( inventory . DescribeBigItemsRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_big_items ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_big_items_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeBigItemsByUserId 사용자 ID를 지정하여 거대 아이템 목록 조회 지정된 거대 인벤토리 내에서 지정 사용자가 소지한 거대 아이템의 페이지네이션된 목록을 조회합니다. 거대 아이템은 문자열 기반의 임의 정밀도 수량을 사용하며, 표준적인 정수의 한계를 초과하는 값에 적합합니다. 한 번도 입수한 적 없는 아이템은 결과에 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 거대 아이템 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeBigItemsByUserId ( \u0026 inventory . DescribeBigItemsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeBigItemsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeBigItemsByUserId ( ( new DescribeBigItemsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeBigItemsByUserIdRequest ; import io.gs2.inventory.result.DescribeBigItemsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeBigItemsByUserIdResult result = client . describeBigItemsByUserId ( new DescribeBigItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List BigItem \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeBigItemsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeBigItemsByUserId ( new Gs2 . Gs2Inventory . Request . DescribeBigItemsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeBigItemsByUserId ( new Gs2Inventory . DescribeBigItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_big_items_by_user_id ( inventory . DescribeBigItemsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_big_items_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_big_items_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getBigItem 거대 아이템 조회 요청 사용자의 특정 거대 아이템과 그 문자열 기반 임의 정밀도 수량을 조회합니다. 응답에는 거대 아이템 데이터와 이와 관련된 거대 아이템 모델 정의가 모두 포함됩니다. 한 번도 입수한 적 없는 아이템의 경우, 데이터는 반환되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. Result 타입 설명 item BigItem 거대 아이템 itemModel BigItemModel 거대 아이템 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetBigItem ( \u0026 inventory . GetBigItemRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemModel := result . ItemModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetBigItemRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getBigItem ( ( new GetBigItemRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) ); $item = $result -\u003e getItem (); $itemModel = $result -\u003e getItemModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetBigItemRequest ; import io.gs2.inventory.result.GetBigItemResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetBigItemResult result = client . getBigItem ( new GetBigItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) ); BigItem item = result . getItem (); BigItemModel itemModel = result . getItemModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetBigItemResult \u003e asyncResult = null ; yield return client . GetBigItem ( new Gs2 . Gs2Inventory . Request . GetBigItemRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemModel = result . ItemModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getBigItem ( new Gs2Inventory . GetBigItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) ); const item = result . getItem (); const itemModel = result . getItemModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_big_item ( inventory . GetBigItemRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) ) item = result . item item_model = result . item_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_big_item ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemModel = result.itemModel ; client = gs2 ( 'inventory' ) api_result_handler = client.get_big_item_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemModel = result.itemModel ; getBigItemByUserId 사용자 ID를 지정하여 거대 아이템 조회 지정 사용자의 특정 거대 아이템과 그 문자열 기반 임의 정밀도 수량을 조회합니다. 응답에는 거대 아이템 데이터와 이와 관련된 거대 아이템 모델 정의가 모두 포함됩니다. 한 번도 입수한 적 없는 아이템의 경우, 데이터는 반환되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BigItem 거대 아이템 itemModel BigItemModel 거대 아이템 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetBigItemByUserId ( \u0026 inventory . GetBigItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item itemModel := result . ItemModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetBigItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getBigItemByUserId ( ( new GetBigItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $itemModel = $result -\u003e getItemModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetBigItemByUserIdRequest ; import io.gs2.inventory.result.GetBigItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetBigItemByUserIdResult result = client . getBigItemByUserId ( new GetBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withTimeOffsetToken ( null ) ); BigItem item = result . getItem (); BigItemModel itemModel = result . getItemModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetBigItemByUserIdResult \u003e asyncResult = null ; yield return client . GetBigItemByUserId ( new Gs2 . Gs2Inventory . Request . GetBigItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var itemModel = result . ItemModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getBigItemByUserId ( new Gs2Inventory . GetBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const itemModel = result . getItemModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_big_item_by_user_id ( inventory . GetBigItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_time_offset_token ( None ) ) item = result . item item_model = result . item_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_big_item_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemModel = result.itemModel ; client = gs2 ( 'inventory' ) api_result_handler = client.get_big_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; itemModel = result.itemModel ; acquireBigItemByUserId 사용자 ID를 지정하여 거대 아이템 입수 임의 정밀도 연산을 사용하여 사용자의 거대 아이템 수량에 지정된 수량을 가산합니다. acquireCount는 최대 1024자리의 유효한 정수 문자열이어야 하며, 형식이 올바르지 않으면 오류가 발생합니다. 아이템이 아직 존재하지 않는 경우 자동으로 생성됩니다. 네임스페이스 설정을 통해 거대 아이템 입수 시 커스텀 로직을 실행하는 GS2-Script를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. acquireCount string  ~ 1024자 거대 아이템의 입수 수량 최대 1024자리까지의 정수값 문자열 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BigItem 가산 후 거대 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . AcquireBigItemByUserId ( \u0026 inventory . AcquireBigItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), AcquireCount : pointy . String ( \"1234567890123456789012345678901234567890\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\AcquireBigItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e acquireBigItemByUserId ( ( new AcquireBigItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withAcquireCount ( \"1234567890123456789012345678901234567890\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.AcquireBigItemByUserIdRequest ; import io.gs2.inventory.result.AcquireBigItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { AcquireBigItemByUserIdResult result = client . acquireBigItemByUserId ( new AcquireBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withAcquireCount ( \"1234567890123456789012345678901234567890\" ) . withTimeOffsetToken ( null ) ); BigItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . AcquireBigItemByUserIdResult \u003e asyncResult = null ; yield return client . AcquireBigItemByUserId ( new Gs2 . Gs2Inventory . Request . AcquireBigItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithAcquireCount ( \"1234567890123456789012345678901234567890\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . acquireBigItemByUserId ( new Gs2Inventory . AcquireBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withAcquireCount ( \"1234567890123456789012345678901234567890\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . acquire_big_item_by_user_id ( inventory . AcquireBigItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_acquire_count ( '1234567890123456789012345678901234567890' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.acquire_big_item_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , itemName = \"item-0001\" , acquireCount = \"1234567890123456789012345678901234567890\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.acquire_big_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , itemName = \"item-0001\" , acquireCount = \"1234567890123456789012345678901234567890\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; consumeBigItem 거대 아이템 소비 임의 정밀도 연산을 사용하여 요청 사용자의 거대 아이템 수량에서 지정된 수량을 감산합니다. consumeCount는 최대 1024자리의 유효한 정수 문자열이어야 합니다. 현재 수량이 부족한 경우 Insufficient 오류가 반환되며, 감산은 이루어지지 않습니다. 네임스페이스 설정을 통해 거대 아이템 소비 시 커스텀 로직을 실행하는 GS2-Script를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. consumeCount string  ~ 1024자 거대 아이템의 소비 수량 최대 1024자리까지의 정수값 문자열 Result 타입 설명 item BigItem 소비 후 거대 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . ConsumeBigItem ( \u0026 inventory . ConsumeBigItemRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ConsumeCount : pointy . String ( \"1234567890123456789012345678901234567890\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\ConsumeBigItemRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e consumeBigItem ( ( new ConsumeBigItemRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withConsumeCount ( \"1234567890123456789012345678901234567890\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.ConsumeBigItemRequest ; import io.gs2.inventory.result.ConsumeBigItemResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { ConsumeBigItemResult result = client . consumeBigItem ( new ConsumeBigItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withConsumeCount ( \"1234567890123456789012345678901234567890\" ) ); BigItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . ConsumeBigItemResult \u003e asyncResult = null ; yield return client . ConsumeBigItem ( new Gs2 . Gs2Inventory . Request . ConsumeBigItemRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithItemName ( \"item-0001\" ) . WithConsumeCount ( \"1234567890123456789012345678901234567890\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . consumeBigItem ( new Gs2Inventory . ConsumeBigItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withItemName ( \"item-0001\" ) . withConsumeCount ( \"1234567890123456789012345678901234567890\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . consume_big_item ( inventory . ConsumeBigItemRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_access_token ( 'accessToken-0001' ) . with_item_name ( 'item-0001' ) . with_consume_count ( '1234567890123456789012345678901234567890' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.consume_big_item ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , consumeCount = \"1234567890123456789012345678901234567890\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.consume_big_item_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , accessToken = \"accessToken-0001\" , itemName = \"item-0001\" , consumeCount = \"1234567890123456789012345678901234567890\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; consumeBigItemByUserId 사용자 ID를 지정하여 거대 아이템 소비 임의 정밀도 연산을 사용하여 지정 사용자의 거대 아이템 수량에서 지정된 수량을 감산합니다. consumeCount는 최대 1024자리의 유효한 정수 문자열이어야 합니다. 현재 수량이 부족한 경우 Insufficient 오류가 반환되며, 감산은 이루어지지 않습니다. 네임스페이스 설정을 통해 거대 아이템 소비 시 커스텀 로직을 실행하는 GS2-Script를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. consumeCount string  ~ 1024자 거대 아이템의 소비 수량 최대 1024자리까지의 정수값 문자열 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BigItem 소비 후 거대 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . ConsumeBigItemByUserId ( \u0026 inventory . ConsumeBigItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), ConsumeCount : pointy . String ( \"1234567890123456789012345678901234567890\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\ConsumeBigItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e consumeBigItemByUserId ( ( new ConsumeBigItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withConsumeCount ( \"1234567890123456789012345678901234567890\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.ConsumeBigItemByUserIdRequest ; import io.gs2.inventory.result.ConsumeBigItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { ConsumeBigItemByUserIdResult result = client . consumeBigItemByUserId ( new ConsumeBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withConsumeCount ( \"1234567890123456789012345678901234567890\" ) . withTimeOffsetToken ( null ) ); BigItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . ConsumeBigItemByUserIdResult \u003e asyncResult = null ; yield return client . ConsumeBigItemByUserId ( new Gs2 . Gs2Inventory . Request . ConsumeBigItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithConsumeCount ( \"1234567890123456789012345678901234567890\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . consumeBigItemByUserId ( new Gs2Inventory . ConsumeBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withConsumeCount ( \"1234567890123456789012345678901234567890\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . consume_big_item_by_user_id ( inventory . ConsumeBigItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_consume_count ( '1234567890123456789012345678901234567890' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.consume_big_item_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , consumeCount = \"1234567890123456789012345678901234567890\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.consume_big_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , consumeCount = \"1234567890123456789012345678901234567890\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; setBigItemByUserId 사용자 ID를 지정하여 거대 아이템 설정 거대 아이템의 수량을 지정된 절대값으로 설정하여 현재 수량을 완전히 대체합니다. 수량은 최대 1024자리의 유효한 정수 문자열이어야 합니다. 아이템이 아직 존재하지 않는 경우 자동으로 생성됩니다. 입수·소비와 같은 상대적 연산과 달리, 정확한 값을 직접 설정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. count string  ~ 1024자 거대 아이템의 수량 최대 1024자리까지의 정수값 문자열 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BigItem 갱신 후 거대 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . SetBigItemByUserId ( \u0026 inventory . SetBigItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), Count : pointy . String ( \"1234567890123456789012345678901234567890\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\SetBigItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e setBigItemByUserId ( ( new SetBigItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withCount ( \"1234567890123456789012345678901234567890\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.SetBigItemByUserIdRequest ; import io.gs2.inventory.result.SetBigItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { SetBigItemByUserIdResult result = client . setBigItemByUserId ( new SetBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withCount ( \"1234567890123456789012345678901234567890\" ) . withTimeOffsetToken ( null ) ); BigItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . SetBigItemByUserIdResult \u003e asyncResult = null ; yield return client . SetBigItemByUserId ( new Gs2 . Gs2Inventory . Request . SetBigItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithCount ( \"1234567890123456789012345678901234567890\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . setBigItemByUserId ( new Gs2Inventory . SetBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withCount ( \"1234567890123456789012345678901234567890\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . set_big_item_by_user_id ( inventory . SetBigItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_count ( '1234567890123456789012345678901234567890' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.set_big_item_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , count = \"1234567890123456789012345678901234567890\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.set_big_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"inventory-0001\" , userId = \"user-0001\" , itemName = \"item-0001\" , count = \"1234567890123456789012345678901234567890\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteBigItemByUserId 거대 아이템 삭제 지정 사용자의 거대 아이템 데이터를 완전히 삭제합니다. 현재 수량과 관계없이 아이템 레코드가 완전히 삭제됩니다. 이 조작은 되돌릴 수 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BigItem 소비 후 거대 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteBigItemByUserId ( \u0026 inventory . DeleteBigItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), UserId : pointy . String ( \"user-0001\" ), ItemName : pointy . String ( \"item-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteBigItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteBigItemByUserId ( ( new DeleteBigItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteBigItemByUserIdRequest ; import io.gs2.inventory.result.DeleteBigItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteBigItemByUserIdResult result = client . deleteBigItemByUserId ( new DeleteBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withTimeOffsetToken ( null ) ); BigItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteBigItemByUserIdResult \u003e asyncResult = null ; yield return client . DeleteBigItemByUserId ( new Gs2 . Gs2Inventory . Request . DeleteBigItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithUserId ( \"user-0001\" ) . WithItemName ( \"item-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteBigItemByUserId ( new Gs2Inventory . DeleteBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withUserId ( \"user-0001\" ) . withItemName ( \"item-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_big_item_by_user_id ( inventory . DeleteBigItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_user_id ( 'user-0001' ) . with_item_name ( 'item-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_big_item_by_user_id ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , itemName = \"item-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_big_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , userId = \"user-0001\" , itemName = \"item-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyBigItem 거대 아이템의 소지 수량 검증 요청 사용자의 거대 아이템 수량이 지정된 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 비교는 문자열 기반 수량에 대해 임의 정밀도 연산으로 수행됩니다. 조건이 충족되지 않으면 오류가 반환되고, 충족되면 요청이 성공합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 count string  ~ 1024자 소지 수량 최대 1024자리까지의 정수값 문자열 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item BigItem 갱신 후 거대 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifyBigItem ( \u0026 inventory . VerifyBigItemRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), ItemName : pointy . String ( \"item-0001\" ), VerifyType : pointy . String ( \"less\" ), Count : 10 , MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifyBigItemRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifyBigItem ( ( new VerifyBigItemRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withCount ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifyBigItemRequest ; import io.gs2.inventory.result.VerifyBigItemResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifyBigItemResult result = client . verifyBigItem ( new VerifyBigItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); BigItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifyBigItemResult \u003e asyncResult = null ; yield return client . VerifyBigItem ( new Gs2 . Gs2Inventory . Request . VerifyBigItemRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithItemName ( \"item-0001\" ) . WithVerifyType ( \"less\" ) . WithCount ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifyBigItem ( new Gs2Inventory . VerifyBigItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_big_item ( inventory . VerifyBigItemRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_item_name ( 'item-0001' ) . with_verify_type ( 'less' ) . with_count ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_big_item ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_big_item_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyBigItemByUserId 사용자 ID를 지정하여 거대 아이템의 소지 수량 검증 지정 사용자의 거대 아이템 수량이 지정된 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 비교는 문자열 기반 수량에 대해 임의 정밀도 연산으로 수행됩니다. 조건이 충족되지 않으면 오류가 반환되고, 충족되면 요청이 성공합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 count string  ~ 1024자 소지 수량 최대 1024자리까지의 정수값 문자열 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BigItem 갱신 후 거대 아이템 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . VerifyBigItemByUserId ( \u0026 inventory . VerifyBigItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), InventoryName : pointy . String ( \"inventory-0001\" ), ItemName : pointy . String ( \"item-0001\" ), VerifyType : pointy . String ( \"less\" ), Count : 10 , MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\VerifyBigItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e verifyBigItemByUserId ( ( new VerifyBigItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withInventoryName ( \"inventory-0001\" ) -\u003e withItemName ( \"item-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withCount ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.VerifyBigItemByUserIdRequest ; import io.gs2.inventory.result.VerifyBigItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { VerifyBigItemByUserIdResult result = client . verifyBigItemByUserId ( new VerifyBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); BigItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . VerifyBigItemByUserIdResult \u003e asyncResult = null ; yield return client . VerifyBigItemByUserId ( new Gs2 . Gs2Inventory . Request . VerifyBigItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithInventoryName ( \"inventory-0001\" ) . WithItemName ( \"item-0001\" ) . WithVerifyType ( \"less\" ) . WithCount ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . verifyBigItemByUserId ( new Gs2Inventory . VerifyBigItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withInventoryName ( \"inventory-0001\" ) . withItemName ( \"item-0001\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . verify_big_item_by_user_id ( inventory . VerifyBigItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_inventory_name ( 'inventory-0001' ) . with_item_name ( 'item-0001' ) . with_verify_type ( 'less' ) . with_count ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.verify_big_item_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.verify_big_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , inventoryName = \"inventory-0001\" , itemName = \"item-0001\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeInventoryModels 인벤토리 모델 목록 취득 네임스페이스 내에서 현재 활성화된 인벤토리 모델의 리스트를 취득합니다. 이는 마스터 데이터의 갱신 프로세스를 통해 활성화된 모델이며, 각 인벤토리 타입의 용량 설정(initialCapacity, maxCapacity)과 아이템 보호 규칙(protectReferencedItem)을 정의합니다. 각 인벤토리 모델에는 해당 인벤토리 내 아이템의 스택 제한과 정렬 순서를 정의하는 관련 아이템 모델이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 인벤토리 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeInventoryModels ( \u0026 inventory . DescribeInventoryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeInventoryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeInventoryModels ( ( new DescribeInventoryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeInventoryModelsRequest ; import io.gs2.inventory.result.DescribeInventoryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeInventoryModelsResult result = client . describeInventoryModels ( new DescribeInventoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List InventoryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeInventoryModelsResult \u003e asyncResult = null ; yield return client . DescribeInventoryModels ( new Gs2 . Gs2Inventory . Request . DescribeInventoryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeInventoryModels ( new Gs2Inventory . DescribeInventoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_inventory_models ( inventory . DescribeInventoryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_inventory_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_inventory_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getInventoryModel 인벤토리 모델을 취득 초기 용량·최대 용량, 아이템 보호 설정 및 관련된 모든 아이템 모델을 포함한 특정 활성화된 인벤토리 모델을 취득합니다. 아이템 모델은 이 인벤토리 내에서의 아이템 저장 방식(스택 제한, 복수 스택 허용, 정렬 값)을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item InventoryModel 인벤토리 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetInventoryModel ( \u0026 inventory . GetInventoryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetInventoryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getInventoryModel ( ( new GetInventoryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetInventoryModelRequest ; import io.gs2.inventory.result.GetInventoryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetInventoryModelResult result = client . getInventoryModel ( new GetInventoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); InventoryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetInventoryModelResult \u003e asyncResult = null ; yield return client . GetInventoryModel ( new Gs2 . Gs2Inventory . Request . GetInventoryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getInventoryModel ( new Gs2Inventory . GetInventoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_inventory_model ( inventory . GetInventoryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_inventory_model ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_inventory_model_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeItemModels 아이템 모델 목록 취득 지정된 인벤토리 모델에 속하는, 현재 활성화된 아이템 모델의 리스트를 취득합니다. 각 아이템 모델은 스택 제한(스택당 최대 수량), 복수 스택 허용 여부, 표시 순서를 위한 정렬 값을 정의합니다. 이들은 마스터 데이터 갱신 프로세스를 통해 활성화된 모델입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 items List 아이템 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeItemModels ( \u0026 inventory . DescribeItemModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeItemModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeItemModels ( ( new DescribeItemModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeItemModelsRequest ; import io.gs2.inventory.result.DescribeItemModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeItemModelsResult result = client . describeItemModels ( new DescribeItemModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); List ItemModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeItemModelsResult \u003e asyncResult = null ; yield return client . DescribeItemModels ( new Gs2 . Gs2Inventory . Request . DescribeItemModelsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeItemModels ( new Gs2Inventory . DescribeItemModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_item_models ( inventory . DescribeItemModelsRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_item_models ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_item_models_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getItemModel 아이템 모델 취득 스택 제한, 복수 스택 허용, 정렬 값, 기타 설정을 포함한 특정 활성화된 아이템 모델을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델 이름 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item ItemModel 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetItemModel ( \u0026 inventory . GetItemModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetItemModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getItemModel ( ( new GetItemModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetItemModelRequest ; import io.gs2.inventory.result.GetItemModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetItemModelResult result = client . getItemModel ( new GetItemModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); ItemModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetItemModelResult \u003e asyncResult = null ; yield return client . GetItemModel ( new Gs2 . Gs2Inventory . Request . GetItemModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getItemModel ( new Gs2Inventory . GetItemModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_item_model ( inventory . GetItemModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_item_model ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_item_model_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSimpleInventoryModels 심플 인벤토리 모델 목록 취득 네임스페이스 내에서 현재 활성화된 심플 인벤토리 모델의 목록을 취득합니다. 심플 인벤토리 모델은 용량 제한, 유효 기간, 참조가 없는 간소화된 아이템 관리 시스템을 제공하며, 아이템은 이름과 수량의 쌍으로 추적됩니다. 각 모델에는 관련된 심플 아이템 모델이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 심플 인벤토리 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeSimpleInventoryModels ( \u0026 inventory . DescribeSimpleInventoryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeSimpleInventoryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeSimpleInventoryModels ( ( new DescribeSimpleInventoryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeSimpleInventoryModelsRequest ; import io.gs2.inventory.result.DescribeSimpleInventoryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeSimpleInventoryModelsResult result = client . describeSimpleInventoryModels ( new DescribeSimpleInventoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List SimpleInventoryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeSimpleInventoryModelsResult \u003e asyncResult = null ; yield return client . DescribeSimpleInventoryModels ( new Gs2 . Gs2Inventory . Request . DescribeSimpleInventoryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeSimpleInventoryModels ( new Gs2Inventory . DescribeSimpleInventoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_simple_inventory_models ( inventory . DescribeSimpleInventoryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_simple_inventory_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_simple_inventory_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getSimpleInventoryModel 심플 인벤토리 모델 취득 관련된 심플 아이템 모델을 포함하여, 특정 활성 심플 인벤토리 모델을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item SimpleInventoryModel 심플 인벤토리 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetSimpleInventoryModel ( \u0026 inventory . GetSimpleInventoryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetSimpleInventoryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getSimpleInventoryModel ( ( new GetSimpleInventoryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetSimpleInventoryModelRequest ; import io.gs2.inventory.result.GetSimpleInventoryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetSimpleInventoryModelResult result = client . getSimpleInventoryModel ( new GetSimpleInventoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); SimpleInventoryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetSimpleInventoryModelResult \u003e asyncResult = null ; yield return client . GetSimpleInventoryModel ( new Gs2 . Gs2Inventory . Request . GetSimpleInventoryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getSimpleInventoryModel ( new Gs2Inventory . GetSimpleInventoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_simple_inventory_model ( inventory . GetSimpleInventoryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_simple_inventory_model ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_simple_inventory_model_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSimpleItemModels 심플 아이템 모델 목록 취득 지정된 심플 인벤토리 모델에 속하는, 현재 활성화된 심플 아이템 모델의 리스트를 취득합니다. 심플 아이템 모델은 스택 제한, 유효기간, 참조가 없는 이름과 수량의 쌍으로 추적되는 아이템 타입을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 심플 아이템 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeSimpleItemModels ( \u0026 inventory . DescribeSimpleItemModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeSimpleItemModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeSimpleItemModels ( ( new DescribeSimpleItemModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeSimpleItemModelsRequest ; import io.gs2.inventory.result.DescribeSimpleItemModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeSimpleItemModelsResult result = client . describeSimpleItemModels ( new DescribeSimpleItemModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); List SimpleItemModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeSimpleItemModelsResult \u003e asyncResult = null ; yield return client . DescribeSimpleItemModels ( new Gs2 . Gs2Inventory . Request . DescribeSimpleItemModelsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeSimpleItemModels ( new Gs2Inventory . DescribeSimpleItemModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_simple_item_models ( inventory . DescribeSimpleItemModelsRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_simple_item_models ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_simple_item_models_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getSimpleItemModel 심플 아이템 모델을 취득 특정 활성화된 심플 아이템 모델과 그 설정을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SimpleItemModel 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetSimpleItemModel ( \u0026 inventory . GetSimpleItemModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetSimpleItemModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getSimpleItemModel ( ( new GetSimpleItemModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetSimpleItemModelRequest ; import io.gs2.inventory.result.GetSimpleItemModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetSimpleItemModelResult result = client . getSimpleItemModel ( new GetSimpleItemModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); SimpleItemModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetSimpleItemModelResult \u003e asyncResult = null ; yield return client . GetSimpleItemModel ( new Gs2 . Gs2Inventory . Request . GetSimpleItemModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getSimpleItemModel ( new Gs2Inventory . GetSimpleItemModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_simple_item_model ( inventory . GetSimpleItemModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_simple_item_model ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_simple_item_model_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeBigInventoryModels 거대 인벤토리 모델 목록을 취득 네임스페이스 내에서 현재 활성화된 거대 인벤토리 모델 목록을 취득합니다. 거대 인벤토리 모델은 표준 정수의 한계를 넘는 매우 큰 수량이 필요한 게임을 위해, 문자열 기반 숫자를 사용한 임의 정밀도의 아이템 수량을 지원합니다. 각 모델에는 관련된 거대 아이템 모델이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 거대 인벤토리 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeBigInventoryModels ( \u0026 inventory . DescribeBigInventoryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeBigInventoryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeBigInventoryModels ( ( new DescribeBigInventoryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeBigInventoryModelsRequest ; import io.gs2.inventory.result.DescribeBigInventoryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeBigInventoryModelsResult result = client . describeBigInventoryModels ( new DescribeBigInventoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List BigInventoryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeBigInventoryModelsResult \u003e asyncResult = null ; yield return client . DescribeBigInventoryModels ( new Gs2 . Gs2Inventory . Request . DescribeBigInventoryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeBigInventoryModels ( new Gs2Inventory . DescribeBigInventoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_big_inventory_models ( inventory . DescribeBigInventoryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_big_inventory_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_big_inventory_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getBigInventoryModel 거대 인벤토리 모델을 취득 관련된 거대 아이템 모델을 포함한, 특정 활성화된 거대 인벤토리 모델을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item BigInventoryModel 거대 인벤토리 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetBigInventoryModel ( \u0026 inventory . GetBigInventoryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetBigInventoryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getBigInventoryModel ( ( new GetBigInventoryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetBigInventoryModelRequest ; import io.gs2.inventory.result.GetBigInventoryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetBigInventoryModelResult result = client . getBigInventoryModel ( new GetBigInventoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); BigInventoryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetBigInventoryModelResult \u003e asyncResult = null ; yield return client . GetBigInventoryModel ( new Gs2 . Gs2Inventory . Request . GetBigInventoryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getBigInventoryModel ( new Gs2Inventory . GetBigInventoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_big_inventory_model ( inventory . GetBigInventoryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_big_inventory_model ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_big_inventory_model_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeBigItemModels 거대 아이템 모델 목록 취득 지정된 거대 인벤토리 모델에 속하는, 현재 활성화된 거대 아이템 모델의 리스트를 취득합니다. 거대 아이템 모델은 문자열 기반의 임의 정밀도 수량을 사용하는 아이템 타입을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 items List 거대 아이템 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeBigItemModels ( \u0026 inventory . DescribeBigItemModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeBigItemModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeBigItemModels ( ( new DescribeBigItemModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeBigItemModelsRequest ; import io.gs2.inventory.result.DescribeBigItemModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeBigItemModelsResult result = client . describeBigItemModels ( new DescribeBigItemModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); List BigItemModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeBigItemModelsResult \u003e asyncResult = null ; yield return client . DescribeBigItemModels ( new Gs2 . Gs2Inventory . Request . DescribeBigItemModelsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeBigItemModels ( new Gs2Inventory . DescribeBigItemModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_big_item_models ( inventory . DescribeBigItemModelsRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_big_item_models ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_big_item_models_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getBigItemModel 거대 아이템 모델을 취득 특정 활성화된 거대 아이템 모델과 그 설정을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item BigItemModel 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetBigItemModel ( \u0026 inventory . GetBigItemModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetBigItemModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getBigItemModel ( ( new GetBigItemModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetBigItemModelRequest ; import io.gs2.inventory.result.GetBigItemModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetBigItemModelResult result = client . getBigItemModel ( new GetBigItemModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); BigItemModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetBigItemModelResult \u003e asyncResult = null ; yield return client . GetBigItemModel ( new Gs2 . Gs2Inventory . Request . GetBigItemModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getBigItemModel ( new Gs2Inventory . GetBigItemModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_big_item_model ( inventory . GetBigItemModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_big_item_model ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_big_item_model_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 아이템 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 네임스페이스에서 현재의 인벤토리 모델 마스터, 아이템 모델 마스터, 심플 인벤토리/아이템 모델 마스터, 거대 인벤토리/아이템 모델 마스터를 JSON 형식으로 내보냅니다. 내보낸 데이터는 변경 사항을 활성화하기 위한 마스터 데이터 갱신 API의 입력으로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentItemModelMaster 활성화 가능한 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 inventory . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.ExportMasterRequest ; import io.gs2.inventory.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Inventory . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Inventory . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . export_master ( inventory . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentItemModelMaster 현재 활성화된 아이템 모델의 마스터 데이터를 취득 네임스페이스에서 마지막으로 활성화된 마스터 데이터를 취득합니다. 서비스에서 현재 사용되고 있는 모든 인벤토리 모델(표준, 심플, 거대)과 그 관련 아이템 모델이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentItemModelMaster 현재 활성화된 아이템 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetCurrentItemModelMaster ( \u0026 inventory . GetCurrentItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetCurrentItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getCurrentItemModelMaster ( ( new GetCurrentItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetCurrentItemModelMasterRequest ; import io.gs2.inventory.result.GetCurrentItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetCurrentItemModelMasterResult result = client . getCurrentItemModelMaster ( new GetCurrentItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetCurrentItemModelMasterResult \u003e asyncResult = null ; yield return client . GetCurrentItemModelMaster ( new Gs2 . Gs2Inventory . Request . GetCurrentItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getCurrentItemModelMaster ( new Gs2Inventory . GetCurrentItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_current_item_model_master ( inventory . GetCurrentItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_current_item_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_current_item_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentItemModelMaster 현재 활성화된 아이템 모델의 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentItemModelMaster에 업로드로 취득한 토큰을 전달하여 실행하면 마스터 데이터가 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentItemModelMaster ( \u0026 inventory . PreUpdateCurrentItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\PreUpdateCurrentItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentItemModelMaster ( ( new PreUpdateCurrentItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.PreUpdateCurrentItemModelMasterRequest ; import io.gs2.inventory.result.PreUpdateCurrentItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { PreUpdateCurrentItemModelMasterResult result = client . preUpdateCurrentItemModelMaster ( new PreUpdateCurrentItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . PreUpdateCurrentItemModelMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentItemModelMaster ( new Gs2 . Gs2Inventory . Request . PreUpdateCurrentItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . preUpdateCurrentItemModelMaster ( new Gs2Inventory . PreUpdateCurrentItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . pre_update_current_item_model_master ( inventory . PreUpdateCurrentItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.pre_update_current_item_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'inventory' ) api_result_handler = client.pre_update_current_item_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentItemModelMaster 현재 활성화된 아이템 모델의 마스터 데이터를 갱신 현재 활성화된 인벤토리 및 아이템 모델 정의를 대체하는 새로운 마스터 데이터를 활성화합니다. 2가지 모드를 지원합니다: ‘direct’(1MB 미만의 데이터에 적합한 인라인 형식), ‘preUpload’(사전 업로드 API로 업로드된 데이터용). 활성화 후에는 모든 인벤토리 조작이 새로운 모델 정의를 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentItemModelMaster 갱신된 현재 활성화된 아이템 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentItemModelMaster ( \u0026 inventory . UpdateCurrentItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2019-02-05\\\", \\\"inventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"initialCapacity\\\": 100, \\\"maxCapacity\\\": 999, \\\"itemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\", \\\"stackingLimit\\\": 99, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 1}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\", \\\"stackingLimit\\\": 49, \\\"allowMultipleStacks\\\": true, \\\"sortValue\\\": 2}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\", \\\"stackingLimit\\\": 9, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 3}]}, {\\\"name\\\": \\\"character\\\", \\\"metadata\\\": \\\"INVENTORY_CHARACTER\\\", \\\"initialCapacity\\\": 50, \\\"maxCapacity\\\": 99, \\\"itemModels\\\": [{\\\"name\\\": \\\"character-0001\\\", \\\"metadata\\\": \\\"CHARACTER_0001\\\", \\\"stackingLimit\\\": 99, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 1}, {\\\"name\\\": \\\"character-0002\\\", \\\"metadata\\\": \\\"CHARACTER_0002\\\", \\\"stackingLimit\\\": 49, \\\"allowMultipleStacks\\\": true, \\\"sortValue\\\": 2}, {\\\"name\\\": \\\"character-0003\\\", \\\"metadata\\\": \\\"CHARACTER_0003\\\", \\\"stackingLimit\\\": 9, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 3}]}], \\\"simpleInventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"simpleItemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\"}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\"}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\"}]}], \\\"bigInventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"bigItemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\"}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\"}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\"}]}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateCurrentItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateCurrentItemModelMaster ( ( new UpdateCurrentItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2019-02-05 \\\" , \\\" inventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" initialCapacity \\\" : 100, \\\" maxCapacity \\\" : 999, \\\" itemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" , \\\" stackingLimit \\\" : 99, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 1}, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" , \\\" stackingLimit \\\" : 49, \\\" allowMultipleStacks \\\" : true, \\\" sortValue \\\" : 2}, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" , \\\" stackingLimit \\\" : 9, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 3}]}, { \\\" name \\\" : \\\" character \\\" , \\\" metadata \\\" : \\\" INVENTORY_CHARACTER \\\" , \\\" initialCapacity \\\" : 50, \\\" maxCapacity \\\" : 99, \\\" itemModels \\\" : [{ \\\" name \\\" : \\\" character-0001 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0001 \\\" , \\\" stackingLimit \\\" : 99, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 1}, { \\\" name \\\" : \\\" character-0002 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0002 \\\" , \\\" stackingLimit \\\" : 49, \\\" allowMultipleStacks \\\" : true, \\\" sortValue \\\" : 2}, { \\\" name \\\" : \\\" character-0003 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0003 \\\" , \\\" stackingLimit \\\" : 9, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 3}]}], \\\" simpleInventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" simpleItemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" }, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" }, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" }]}], \\\" bigInventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" bigItemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" }, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" }, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" }]}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateCurrentItemModelMasterRequest ; import io.gs2.inventory.result.UpdateCurrentItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateCurrentItemModelMasterResult result = client . updateCurrentItemModelMaster ( new UpdateCurrentItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2019-02-05\\\", \\\"inventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"initialCapacity\\\": 100, \\\"maxCapacity\\\": 999, \\\"itemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\", \\\"stackingLimit\\\": 99, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 1}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\", \\\"stackingLimit\\\": 49, \\\"allowMultipleStacks\\\": true, \\\"sortValue\\\": 2}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\", \\\"stackingLimit\\\": 9, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 3}]}, {\\\"name\\\": \\\"character\\\", \\\"metadata\\\": \\\"INVENTORY_CHARACTER\\\", \\\"initialCapacity\\\": 50, \\\"maxCapacity\\\": 99, \\\"itemModels\\\": [{\\\"name\\\": \\\"character-0001\\\", \\\"metadata\\\": \\\"CHARACTER_0001\\\", \\\"stackingLimit\\\": 99, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 1}, {\\\"name\\\": \\\"character-0002\\\", \\\"metadata\\\": \\\"CHARACTER_0002\\\", \\\"stackingLimit\\\": 49, \\\"allowMultipleStacks\\\": true, \\\"sortValue\\\": 2}, {\\\"name\\\": \\\"character-0003\\\", \\\"metadata\\\": \\\"CHARACTER_0003\\\", \\\"stackingLimit\\\": 9, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 3}]}], \\\"simpleInventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"simpleItemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\"}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\"}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\"}]}], \\\"bigInventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"bigItemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\"}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\"}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\"}]}]}\" ) . withUploadToken ( null ) ); CurrentItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateCurrentItemModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentItemModelMaster ( new Gs2 . Gs2Inventory . Request . UpdateCurrentItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2019-02-05\\\", \\\"inventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"initialCapacity\\\": 100, \\\"maxCapacity\\\": 999, \\\"itemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\", \\\"stackingLimit\\\": 99, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 1}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\", \\\"stackingLimit\\\": 49, \\\"allowMultipleStacks\\\": true, \\\"sortValue\\\": 2}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\", \\\"stackingLimit\\\": 9, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 3}]}, {\\\"name\\\": \\\"character\\\", \\\"metadata\\\": \\\"INVENTORY_CHARACTER\\\", \\\"initialCapacity\\\": 50, \\\"maxCapacity\\\": 99, \\\"itemModels\\\": [{\\\"name\\\": \\\"character-0001\\\", \\\"metadata\\\": \\\"CHARACTER_0001\\\", \\\"stackingLimit\\\": 99, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 1}, {\\\"name\\\": \\\"character-0002\\\", \\\"metadata\\\": \\\"CHARACTER_0002\\\", \\\"stackingLimit\\\": 49, \\\"allowMultipleStacks\\\": true, \\\"sortValue\\\": 2}, {\\\"name\\\": \\\"character-0003\\\", \\\"metadata\\\": \\\"CHARACTER_0003\\\", \\\"stackingLimit\\\": 9, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 3}]}], \\\"simpleInventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"simpleItemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\"}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\"}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\"}]}], \\\"bigInventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"bigItemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\"}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\"}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\"}]}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateCurrentItemModelMaster ( new Gs2Inventory . UpdateCurrentItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2019-02-05\\\", \\\"inventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"initialCapacity\\\": 100, \\\"maxCapacity\\\": 999, \\\"itemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\", \\\"stackingLimit\\\": 99, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 1}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\", \\\"stackingLimit\\\": 49, \\\"allowMultipleStacks\\\": true, \\\"sortValue\\\": 2}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\", \\\"stackingLimit\\\": 9, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 3}]}, {\\\"name\\\": \\\"character\\\", \\\"metadata\\\": \\\"INVENTORY_CHARACTER\\\", \\\"initialCapacity\\\": 50, \\\"maxCapacity\\\": 99, \\\"itemModels\\\": [{\\\"name\\\": \\\"character-0001\\\", \\\"metadata\\\": \\\"CHARACTER_0001\\\", \\\"stackingLimit\\\": 99, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 1}, {\\\"name\\\": \\\"character-0002\\\", \\\"metadata\\\": \\\"CHARACTER_0002\\\", \\\"stackingLimit\\\": 49, \\\"allowMultipleStacks\\\": true, \\\"sortValue\\\": 2}, {\\\"name\\\": \\\"character-0003\\\", \\\"metadata\\\": \\\"CHARACTER_0003\\\", \\\"stackingLimit\\\": 9, \\\"allowMultipleStacks\\\": false, \\\"sortValue\\\": 3}]}], \\\"simpleInventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"simpleItemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\"}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\"}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\"}]}], \\\"bigInventoryModels\\\": [{\\\"name\\\": \\\"item\\\", \\\"metadata\\\": \\\"INVENTORY_ITEM\\\", \\\"bigItemModels\\\": [{\\\"name\\\": \\\"item-0001\\\", \\\"metadata\\\": \\\"ITEM_0001\\\"}, {\\\"name\\\": \\\"item-0002\\\", \\\"metadata\\\": \\\"ITEM_0002\\\"}, {\\\"name\\\": \\\"item-0003\\\", \\\"metadata\\\": \\\"ITEM_0003\\\"}]}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_current_item_model_master ( inventory . UpdateCurrentItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2019-02-05\", \"inventoryModels\": [{\"name\": \"item\", \"metadata\": \"INVENTORY_ITEM\", \"initialCapacity\": 100, \"maxCapacity\": 999, \"itemModels\": [{\"name\": \"item-0001\", \"metadata\": \"ITEM_0001\", \"stackingLimit\": 99, \"allowMultipleStacks\": false, \"sortValue\": 1}, {\"name\": \"item-0002\", \"metadata\": \"ITEM_0002\", \"stackingLimit\": 49, \"allowMultipleStacks\": true, \"sortValue\": 2}, {\"name\": \"item-0003\", \"metadata\": \"ITEM_0003\", \"stackingLimit\": 9, \"allowMultipleStacks\": false, \"sortValue\": 3}]}, {\"name\": \"character\", \"metadata\": \"INVENTORY_CHARACTER\", \"initialCapacity\": 50, \"maxCapacity\": 99, \"itemModels\": [{\"name\": \"character-0001\", \"metadata\": \"CHARACTER_0001\", \"stackingLimit\": 99, \"allowMultipleStacks\": false, \"sortValue\": 1}, {\"name\": \"character-0002\", \"metadata\": \"CHARACTER_0002\", \"stackingLimit\": 49, \"allowMultipleStacks\": true, \"sortValue\": 2}, {\"name\": \"character-0003\", \"metadata\": \"CHARACTER_0003\", \"stackingLimit\": 9, \"allowMultipleStacks\": false, \"sortValue\": 3}]}], \"simpleInventoryModels\": [{\"name\": \"item\", \"metadata\": \"INVENTORY_ITEM\", \"simpleItemModels\": [{\"name\": \"item-0001\", \"metadata\": \"ITEM_0001\"}, {\"name\": \"item-0002\", \"metadata\": \"ITEM_0002\"}, {\"name\": \"item-0003\", \"metadata\": \"ITEM_0003\"}]}], \"bigInventoryModels\": [{\"name\": \"item\", \"metadata\": \"INVENTORY_ITEM\", \"bigItemModels\": [{\"name\": \"item-0001\", \"metadata\": \"ITEM_0001\"}, {\"name\": \"item-0002\", \"metadata\": \"ITEM_0002\"}, {\"name\": \"item-0003\", \"metadata\": \"ITEM_0003\"}]}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_current_item_model_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2019-02-05 \\\" , \\\" inventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" initialCapacity \\\" : 100, \\\" maxCapacity \\\" : 999, \\\" itemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" , \\\" stackingLimit \\\" : 99, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 1}, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" , \\\" stackingLimit \\\" : 49, \\\" allowMultipleStacks \\\" : true, \\\" sortValue \\\" : 2}, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" , \\\" stackingLimit \\\" : 9, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 3}]}, { \\\" name \\\" : \\\" character \\\" , \\\" metadata \\\" : \\\" INVENTORY_CHARACTER \\\" , \\\" initialCapacity \\\" : 50, \\\" maxCapacity \\\" : 99, \\\" itemModels \\\" : [{ \\\" name \\\" : \\\" character-0001 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0001 \\\" , \\\" stackingLimit \\\" : 99, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 1}, { \\\" name \\\" : \\\" character-0002 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0002 \\\" , \\\" stackingLimit \\\" : 49, \\\" allowMultipleStacks \\\" : true, \\\" sortValue \\\" : 2}, { \\\" name \\\" : \\\" character-0003 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0003 \\\" , \\\" stackingLimit \\\" : 9, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 3}]}], \\\" simpleInventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" simpleItemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" }, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" }, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" }]}], \\\" bigInventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" bigItemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" }, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" }, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" }]}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_current_item_model_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2019-02-05 \\\" , \\\" inventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" initialCapacity \\\" : 100, \\\" maxCapacity \\\" : 999, \\\" itemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" , \\\" stackingLimit \\\" : 99, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 1}, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" , \\\" stackingLimit \\\" : 49, \\\" allowMultipleStacks \\\" : true, \\\" sortValue \\\" : 2}, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" , \\\" stackingLimit \\\" : 9, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 3}]}, { \\\" name \\\" : \\\" character \\\" , \\\" metadata \\\" : \\\" INVENTORY_CHARACTER \\\" , \\\" initialCapacity \\\" : 50, \\\" maxCapacity \\\" : 99, \\\" itemModels \\\" : [{ \\\" name \\\" : \\\" character-0001 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0001 \\\" , \\\" stackingLimit \\\" : 99, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 1}, { \\\" name \\\" : \\\" character-0002 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0002 \\\" , \\\" stackingLimit \\\" : 49, \\\" allowMultipleStacks \\\" : true, \\\" sortValue \\\" : 2}, { \\\" name \\\" : \\\" character-0003 \\\" , \\\" metadata \\\" : \\\" CHARACTER_0003 \\\" , \\\" stackingLimit \\\" : 9, \\\" allowMultipleStacks \\\" : false, \\\" sortValue \\\" : 3}]}], \\\" simpleInventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" simpleItemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" }, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" }, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" }]}], \\\" bigInventoryModels \\\" : [{ \\\" name \\\" : \\\" item \\\" , \\\" metadata \\\" : \\\" INVENTORY_ITEM \\\" , \\\" bigItemModels \\\" : [{ \\\" name \\\" : \\\" item-0001 \\\" , \\\" metadata \\\" : \\\" ITEM_0001 \\\" }, { \\\" name \\\" : \\\" item-0002 \\\" , \\\" metadata \\\" : \\\" ITEM_0002 \\\" }, { \\\" name \\\" : \\\" item-0003 \\\" , \\\" metadata \\\" : \\\" ITEM_0003 \\\" }]}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentItemModelMasterFromGitHub 현재 활성화된 아이템 모델의 마스터 데이터를 GitHub에서 갱신 지정된 GitHub 저장소에서 마스터 데이터를 취득하여 활성화합니다. 체크아웃 설정에서 저장소, 브랜치/태그, 취득할 파일 경로를 지정합니다. 마스터 데이터 내의 템플릿 변수는 활성화 시 설정된 값으로 치환됩니다. Git 워크플로를 통한 버전 관리된 마스터 데이터 관리를 가능하게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentItemModelMaster 갱신된 현재 활성화된 아이템 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentItemModelMasterFromGitHub ( \u0026 inventory . UpdateCurrentItemModelMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 inventory . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateCurrentItemModelMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateCurrentItemModelMasterFromGitHub ( ( new UpdateCurrentItemModelMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateCurrentItemModelMasterFromGitHubRequest ; import io.gs2.inventory.result.UpdateCurrentItemModelMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateCurrentItemModelMasterFromGitHubResult result = client . updateCurrentItemModelMasterFromGitHub ( new UpdateCurrentItemModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateCurrentItemModelMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentItemModelMasterFromGitHub ( new Gs2 . Gs2Inventory . Request . UpdateCurrentItemModelMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Inventory . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateCurrentItemModelMasterFromGitHub ( new Gs2Inventory . UpdateCurrentItemModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Inventory . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_current_item_model_master_from_git_hub ( inventory . UpdateCurrentItemModelMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( inventory . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_current_item_model_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_current_item_model_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeInventoryModelMasters 인벤토리 모델 마스터 목록 조회 네임스페이스 내의 편집 가능한 인벤토리 모델 마스터의 페이지네이션된 목록을 조회합니다. 이는 활성화 전에 변경 가능한 초안 정의입니다. 각 마스터는 인벤토리 타입의 용량 설정(initialCapacity, maxCapacity)과 아이템 보호 규칙을 정의합니다. 이름 접두사에 의한 선택적 필터링을 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 인벤토리 모델명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 인벤토리 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeInventoryModelMasters ( \u0026 inventory . DescribeInventoryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeInventoryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeInventoryModelMasters ( ( new DescribeInventoryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeInventoryModelMastersRequest ; import io.gs2.inventory.result.DescribeInventoryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeInventoryModelMastersResult result = client . describeInventoryModelMasters ( new DescribeInventoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List InventoryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeInventoryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeInventoryModelMasters ( new Gs2 . Gs2Inventory . Request . DescribeInventoryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeInventoryModelMasters ( new Gs2Inventory . DescribeInventoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_inventory_model_masters ( inventory . DescribeInventoryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_inventory_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_inventory_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createInventoryModelMaster 인벤토리 모델 마스터 신규 생성 새로운 인벤토리 타입을 정의하는 편집 가능한 인벤토리 모델 마스터를 생성합니다. 주요 설정에는 initialCapacity(신규 사용자의 초기 아이템 슬롯 수), maxCapacity(용량 확장 상한), protectReferencedItem(활성화 시 활성 참조가 있는 아이템의 소비를 방지)이 포함됩니다. 생성한 마스터는 마스터 데이터 갱신 프로세스를 통해 활성화해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialCapacity int  0 ~ 2147483646 초기 크기 인벤토리가 처음 생성될 때 사용자에게 제공되는 인벤토리 칸의 수입니다. 각 칸에는 하나의 아이템 스택을 저장할 수 있습니다. 사용자는 게임 플레이 액션을 통해 maxCapacity까지 용량을 확장할 수 있습니다. maxCapacity int  0 ~ 2147483646 최대 크기 사용자가 확장할 수 있는 인벤토리 칸의 상한값입니다. 이 값을 초과하여 용량을 늘릴 수 없습니다. 모든 칸이 사용 중이고 아이템을 더 이상 스택할 수 없는 경우, 오버플로우 스크립트가 초과분을 처리하지 않는 한 입수는 실패합니다. protectReferencedItem bool false 참조된 아이템 보호 활성화하면 (referenceOf 메커니즘을 통해) 참조가 등록된 아이템 세트는 소비하거나 삭제할 수 없게 됩니다. 다른 시스템에서 사용 중인 아이템(예: 장착 중인 장비, 편성에 연결된 아이템)이 실수로 삭제되는 것을 방지합니다. Result 타입 설명 item InventoryModelMaster 생성한 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CreateInventoryModelMaster ( \u0026 inventory . CreateInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"item\" ), Description : nil , Metadata : nil , InitialCapacity : pointy . Int32 ( 50 ), MaxCapacity : pointy . Int32 ( 100 ), ProtectReferencedItem : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CreateInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e createInventoryModelMaster ( ( new CreateInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"item\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withInitialCapacity ( 50 ) -\u003e withMaxCapacity ( 100 ) -\u003e withProtectReferencedItem ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CreateInventoryModelMasterRequest ; import io.gs2.inventory.result.CreateInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CreateInventoryModelMasterResult result = client . createInventoryModelMaster ( new CreateInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"item\" ) . withDescription ( null ) . withMetadata ( null ) . withInitialCapacity ( 50 ) . withMaxCapacity ( 100 ) . withProtectReferencedItem ( null ) ); InventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CreateInventoryModelMasterResult \u003e asyncResult = null ; yield return client . CreateInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . CreateInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"item\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithInitialCapacity ( 50 ) . WithMaxCapacity ( 100 ) . WithProtectReferencedItem ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . createInventoryModelMaster ( new Gs2Inventory . CreateInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"item\" ) . withDescription ( null ) . withMetadata ( null ) . withInitialCapacity ( 50 ) . withMaxCapacity ( 100 ) . withProtectReferencedItem ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . create_inventory_model_master ( inventory . CreateInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'item' ) . with_description ( None ) . with_metadata ( None ) . with_initial_capacity ( 50 ) . with_max_capacity ( 100 ) . with_protect_referenced_item ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.create_inventory_model_master ({ namespaceName = \"namespace-0001\" , name = \"item\" , description = nil , metadata = nil , initialCapacity = 50 , maxCapacity = 100 , protectReferencedItem = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.create_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"item\" , description = nil , metadata = nil , initialCapacity = 50 , maxCapacity = 100 , protectReferencedItem = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getInventoryModelMaster 인벤토리 모델 마스터 조회 용량 설정, 메타데이터, 아이템 보호 규칙을 포함한 특정 편집 가능한 인벤토리 모델 마스터의 전체 설정을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item InventoryModelMaster 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetInventoryModelMaster ( \u0026 inventory . GetInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getInventoryModelMaster ( ( new GetInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetInventoryModelMasterRequest ; import io.gs2.inventory.result.GetInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetInventoryModelMasterResult result = client . getInventoryModelMaster ( new GetInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); InventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetInventoryModelMasterResult \u003e asyncResult = null ; yield return client . GetInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . GetInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getInventoryModelMaster ( new Gs2Inventory . GetInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_inventory_model_master ( inventory . GetInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateInventoryModelMaster 인벤토리 모델 마스터 갱신 용량 설정(initialCapacity, maxCapacity), 메타데이터, protectReferencedItem을 포함한 기존 인벤토리 모델 마스터의 속성을 갱신합니다. 변경 사항은 마스터 데이터 갱신 프로세스를 통해 재활성화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialCapacity int  0 ~ 2147483646 초기 크기 인벤토리가 처음 생성될 때 사용자에게 제공되는 인벤토리 칸의 수입니다. 각 칸에는 하나의 아이템 스택을 저장할 수 있습니다. 사용자는 게임 플레이 액션을 통해 maxCapacity까지 용량을 확장할 수 있습니다. maxCapacity int  0 ~ 2147483646 최대 크기 사용자가 확장할 수 있는 인벤토리 칸의 상한값입니다. 이 값을 초과하여 용량을 늘릴 수 없습니다. 모든 칸이 사용 중이고 아이템을 더 이상 스택할 수 없는 경우, 오버플로우 스크립트가 초과분을 처리하지 않는 한 입수는 실패합니다. protectReferencedItem bool false 참조된 아이템 보호 활성화하면 (referenceOf 메커니즘을 통해) 참조가 등록된 아이템 세트는 소비하거나 삭제할 수 없게 됩니다. 다른 시스템에서 사용 중인 아이템(예: 장착 중인 장비, 편성에 연결된 아이템)이 실수로 삭제되는 것을 방지합니다. Result 타입 설명 item InventoryModelMaster 갱신한 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateInventoryModelMaster ( \u0026 inventory . UpdateInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"ITEM_INVENTORY_MASTER\" ), InitialCapacity : pointy . Int32 ( 150 ), MaxCapacity : pointy . Int32 ( 250 ), ProtectReferencedItem : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateInventoryModelMaster ( ( new UpdateInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"ITEM_INVENTORY_MASTER\" ) -\u003e withInitialCapacity ( 150 ) -\u003e withMaxCapacity ( 250 ) -\u003e withProtectReferencedItem ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateInventoryModelMasterRequest ; import io.gs2.inventory.result.UpdateInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateInventoryModelMasterResult result = client . updateInventoryModelMaster ( new UpdateInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_INVENTORY_MASTER\" ) . withInitialCapacity ( 150 ) . withMaxCapacity ( 250 ) . withProtectReferencedItem ( null ) ); InventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateInventoryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . UpdateInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"ITEM_INVENTORY_MASTER\" ) . WithInitialCapacity ( 150 ) . WithMaxCapacity ( 250 ) . WithProtectReferencedItem ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateInventoryModelMaster ( new Gs2Inventory . UpdateInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_INVENTORY_MASTER\" ) . withInitialCapacity ( 150 ) . withMaxCapacity ( 250 ) . withProtectReferencedItem ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_inventory_model_master ( inventory . UpdateInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_description ( 'description1' ) . with_metadata ( 'ITEM_INVENTORY_MASTER' ) . with_initial_capacity ( 150 ) . with_max_capacity ( 250 ) . with_protect_referenced_item ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , description = \"description1\" , metadata = \"ITEM_INVENTORY_MASTER\" , initialCapacity = 150 , maxCapacity = 250 , protectReferencedItem = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , description = \"description1\" , metadata = \"ITEM_INVENTORY_MASTER\" , initialCapacity = 150 , maxCapacity = 250 , protectReferencedItem = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteInventoryModelMaster 인벤토리 모델 마스터 삭제 지정된 인벤토리 모델 마스터를 삭제합니다. 삭제는 마스터 데이터가 재활성화될 때까지 현재 활성 상태인 모델에 영향을 미치지 않습니다. 이 모델과 관련된 기존 사용자 인벤토리나 아이템은 자동으로 삭제되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item InventoryModelMaster 삭제한 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteInventoryModelMaster ( \u0026 inventory . DeleteInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteInventoryModelMaster ( ( new DeleteInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteInventoryModelMasterRequest ; import io.gs2.inventory.result.DeleteInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteInventoryModelMasterResult result = client . deleteInventoryModelMaster ( new DeleteInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); InventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteInventoryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . DeleteInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteInventoryModelMaster ( new Gs2Inventory . DeleteInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_inventory_model_master ( inventory . DeleteInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeItemModelMasters 아이템 모델 마스터 목록 취득 지정된 인벤토리 모델 마스터에 속하는, 편집 가능한 아이템 모델 마스터의 페이지네이션 목록을 취득합니다. 이들은 유효화 이전에 변경 가능한 초안 정의이며, 인벤토리 내 아이템의 스택 제한, 복수 스택 허용 여부, 정렬 값을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 아이템 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeItemModelMasters ( \u0026 inventory . DescribeItemModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeItemModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeItemModelMasters ( ( new DescribeItemModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeItemModelMastersRequest ; import io.gs2.inventory.result.DescribeItemModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeItemModelMastersResult result = client . describeItemModelMasters ( new DescribeItemModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withPageToken ( null ) . withLimit ( null ) ); List ItemModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeItemModelMastersResult \u003e asyncResult = null ; yield return client . DescribeItemModelMasters ( new Gs2 . Gs2Inventory . Request . DescribeItemModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeItemModelMasters ( new Gs2Inventory . DescribeItemModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_item_model_masters ( inventory . DescribeItemModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_item_model_masters ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_item_model_masters_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createItemModelMaster 아이템 모델 마스터 신규 생성 지정된 인벤토리 내의 새로운 아이템 타입을 정의하는 편집 가능한 아이템 모델 마스터를 생성합니다. 주요 설정으로는 stackingLimit(스택당 최대 수량), allowMultipleStacks(동일한 아이템이 여러 인벤토리 슬롯을 차지할 수 있는지 여부), sortValue(표시 순서 우선도)가 있습니다. allowMultipleStacks가 활성화된 경우, 스택 제한을 초과하는 아이템 획득은 실패하지 않고 추가 ItemSet 엔트리를 생성합니다. 생성한 마스터는 마스터 데이터 갱신 프로세스를 통해 유효화해야 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템이 속한 인벤토리 모델의 이름입니다. 이 아이템 종류를 저장할 수 있는 인벤토리를 결정하고, 인벤토리의 용량 설정 및 보호 설정과 연관시킵니다. name string  ~ 128자 아이템 모델명 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 처리가 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명하고 있습니다. stackingLimit long  1 ~ 9223372036854775805 스택 가능한 최대 수량 하나의 인벤토리 칸(스택)에 보관할 수 있는 이 아이템의 최대 수입니다. 이 상한에 도달하면 allowMultipleStacks 설정에 따라 새로운 칸이 할당되거나 추가 입수가 차단됩니다. allowMultipleStacks bool  복수 스택 허용 활성화하면 스택 상한에 도달했을 때 새로운 인벤토리 칸이 자동으로 할당되어 이 아이템의 추가 수량을 저장합니다(추가 용량을 소비합니다). 비활성화하면 기존 칸에서 스택 상한에 도달한 시점에 입수가 차단됩니다. sortValue int  0 ~ 2147483646 표시 순서 인벤토리 내 아이템을 표시용으로 정렬하기 위한 수치입니다. 값이 작을수록 먼저 표시됩니다. 이 값은 ItemSet 레코드에도 복사되어 소지 아이템의 일관된 정렬을 가능하게 합니다. Result 타입 설명 item ItemModelMaster 생성한 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CreateItemModelMaster ( \u0026 inventory . CreateItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), Name : pointy . String ( \"item-master-0001\" ), Description : nil , Metadata : nil , StackingLimit : pointy . Int64 ( 99 ), AllowMultipleStacks : pointy . Bool ( false ), SortValue : pointy . Int32 ( 10 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CreateItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e createItemModelMaster ( ( new CreateItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withName ( \"item-master-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withStackingLimit ( 99 ) -\u003e withAllowMultipleStacks ( false ) -\u003e withSortValue ( 10 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CreateItemModelMasterRequest ; import io.gs2.inventory.result.CreateItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CreateItemModelMasterResult result = client . createItemModelMaster ( new CreateItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withName ( \"item-master-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withStackingLimit ( 99L ) . withAllowMultipleStacks ( false ) . withSortValue ( 10 ) ); ItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CreateItemModelMasterResult \u003e asyncResult = null ; yield return client . CreateItemModelMaster ( new Gs2 . Gs2Inventory . Request . CreateItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithName ( \"item-master-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithStackingLimit ( 99L ) . WithAllowMultipleStacks ( false ) . WithSortValue ( 10 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . createItemModelMaster ( new Gs2Inventory . CreateItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withName ( \"item-master-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withStackingLimit ( 99 ) . withAllowMultipleStacks ( false ) . withSortValue ( 10 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . create_item_model_master ( inventory . CreateItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_name ( 'item-master-0001' ) . with_description ( None ) . with_metadata ( None ) . with_stacking_limit ( 99 ) . with_allow_multiple_stacks ( False ) . with_sort_value ( 10 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.create_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , name = \"item-master-0001\" , description = nil , metadata = nil , stackingLimit = 99 , allowMultipleStacks = false , sortValue = 10 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.create_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , name = \"item-master-0001\" , description = nil , metadata = nil , stackingLimit = 99 , allowMultipleStacks = false , sortValue = 10 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getItemModelMaster 아이템 모델 마스터 취득 스택 제한, 복수 스택 허용 여부, 정렬 값, 메타데이터를 포함한, 특정 편집 가능한 아이템 모델 마스터의 전체 설정을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ItemModelMaster 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetItemModelMaster ( \u0026 inventory . GetItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getItemModelMaster ( ( new GetItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetItemModelMasterRequest ; import io.gs2.inventory.result.GetItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetItemModelMasterResult result = client . getItemModelMaster ( new GetItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); ItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetItemModelMasterResult \u003e asyncResult = null ; yield return client . GetItemModelMaster ( new Gs2 . Gs2Inventory . Request . GetItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getItemModelMaster ( new Gs2Inventory . GetItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_item_model_master ( inventory . GetItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateItemModelMaster 아이템 모델 마스터 갱신 스택 제한, 복수 스택 허용 여부, 정렬 값, 메타데이터를 포함한 기존 아이템 모델 마스터의 속성을 갱신합니다. 변경 사항은 마스터 데이터 갱신 프로세스를 통해 재유효화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 처리가 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명하고 있습니다. stackingLimit long  1 ~ 9223372036854775805 스택 가능한 최대 수량 하나의 인벤토리 칸(스택)에 보관할 수 있는 이 아이템의 최대 수입니다. 이 상한에 도달하면 allowMultipleStacks 설정에 따라 새로운 칸이 할당되거나 추가 입수가 차단됩니다. allowMultipleStacks bool  복수 스택 허용 활성화하면 스택 상한에 도달했을 때 새로운 인벤토리 칸이 자동으로 할당되어 이 아이템의 추가 수량을 저장합니다(추가 용량을 소비합니다). 비활성화하면 기존 칸에서 스택 상한에 도달한 시점에 입수가 차단됩니다. sortValue int  0 ~ 2147483646 표시 순서 인벤토리 내 아이템을 표시용으로 정렬하기 위한 수치입니다. 값이 작을수록 먼저 표시됩니다. 이 값은 ItemSet 레코드에도 복사되어 소지 아이템의 일관된 정렬을 가능하게 합니다. Result 타입 설명 item ItemModelMaster 갱신한 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateItemModelMaster ( \u0026 inventory . UpdateItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"ITEM_MASTER_0001\" ), StackingLimit : pointy . Int64 ( 49 ), AllowMultipleStacks : pointy . Bool ( true ), SortValue : pointy . Int32 ( 30 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateItemModelMaster ( ( new UpdateItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"ITEM_MASTER_0001\" ) -\u003e withStackingLimit ( 49 ) -\u003e withAllowMultipleStacks ( true ) -\u003e withSortValue ( 30 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateItemModelMasterRequest ; import io.gs2.inventory.result.UpdateItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateItemModelMasterResult result = client . updateItemModelMaster ( new UpdateItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_MASTER_0001\" ) . withStackingLimit ( 49L ) . withAllowMultipleStacks ( true ) . withSortValue ( 30 ) ); ItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateItemModelMasterResult \u003e asyncResult = null ; yield return client . UpdateItemModelMaster ( new Gs2 . Gs2Inventory . Request . UpdateItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"ITEM_MASTER_0001\" ) . WithStackingLimit ( 49L ) . WithAllowMultipleStacks ( true ) . WithSortValue ( 30 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateItemModelMaster ( new Gs2Inventory . UpdateItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_MASTER_0001\" ) . withStackingLimit ( 49 ) . withAllowMultipleStacks ( true ) . withSortValue ( 30 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_item_model_master ( inventory . UpdateItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) . with_description ( 'description1' ) . with_metadata ( 'ITEM_MASTER_0001' ) . with_stacking_limit ( 49 ) . with_allow_multiple_stacks ( True ) . with_sort_value ( 30 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , description = \"description1\" , metadata = \"ITEM_MASTER_0001\" , stackingLimit = 49 , allowMultipleStacks = true , sortValue = 30 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , description = \"description1\" , metadata = \"ITEM_MASTER_0001\" , stackingLimit = 49 , allowMultipleStacks = true , sortValue = 30 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteItemModelMaster 아이템 모델 마스터 삭제 지정된 아이템 모델 마스터를 삭제합니다. 삭제는 마스터 데이터가 재유효화될 때까지 현재 활성 모델에 영향을 미치지 않습니다. 이 모델과 관련된 기존 사용자 아이템은 자동으로 삭제되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ItemModelMaster 삭제한 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteItemModelMaster ( \u0026 inventory . DeleteItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteItemModelMaster ( ( new DeleteItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteItemModelMasterRequest ; import io.gs2.inventory.result.DeleteItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteItemModelMasterResult result = client . deleteItemModelMaster ( new DeleteItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); ItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteItemModelMasterResult \u003e asyncResult = null ; yield return client . DeleteItemModelMaster ( new Gs2 . Gs2Inventory . Request . DeleteItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteItemModelMaster ( new Gs2Inventory . DeleteItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_item_model_master ( inventory . DeleteItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSimpleInventoryModelMasters 심플 인벤토리 모델 마스터 목록 취득 네임스페이스 내의 편집 가능한 심플 인벤토리 모델 마스터의 페이지네이션 목록을 취득합니다. 이들은 마스터 데이터 갱신 프로세스를 통한 유효화 이전에 변경 가능한 초안 정의입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 심플 인벤토리 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 심플 인벤토리 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeSimpleInventoryModelMasters ( \u0026 inventory . DescribeSimpleInventoryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeSimpleInventoryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeSimpleInventoryModelMasters ( ( new DescribeSimpleInventoryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeSimpleInventoryModelMastersRequest ; import io.gs2.inventory.result.DescribeSimpleInventoryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeSimpleInventoryModelMastersResult result = client . describeSimpleInventoryModelMasters ( new DescribeSimpleInventoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SimpleInventoryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeSimpleInventoryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeSimpleInventoryModelMasters ( new Gs2 . Gs2Inventory . Request . DescribeSimpleInventoryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeSimpleInventoryModelMasters ( new Gs2Inventory . DescribeSimpleInventoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_simple_inventory_model_masters ( inventory . DescribeSimpleInventoryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_simple_inventory_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_simple_inventory_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createSimpleInventoryModelMaster 심플 인벤토리 모델 마스터 신규 생성 편집 가능한 심플 인벤토리 모델 마스터를 생성합니다. 일반 인벤토리 모델과 달리 심플 인벤토리 모델에는 용량 제한, 아이템 유효 기간, 참조 관리가 없습니다. 생성한 마스터는 마스터 데이터 갱신 프로세스를 통해 유효화해야 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item SimpleInventoryModelMaster 생성한 심플 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CreateSimpleInventoryModelMaster ( \u0026 inventory . CreateSimpleInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"item\" ), Description : nil , Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CreateSimpleInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e createSimpleInventoryModelMaster ( ( new CreateSimpleInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"item\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CreateSimpleInventoryModelMasterRequest ; import io.gs2.inventory.result.CreateSimpleInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CreateSimpleInventoryModelMasterResult result = client . createSimpleInventoryModelMaster ( new CreateSimpleInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"item\" ) . withDescription ( null ) . withMetadata ( null ) ); SimpleInventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CreateSimpleInventoryModelMasterResult \u003e asyncResult = null ; yield return client . CreateSimpleInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . CreateSimpleInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"item\" ) . WithDescription ( null ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . createSimpleInventoryModelMaster ( new Gs2Inventory . CreateSimpleInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"item\" ) . withDescription ( null ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . create_simple_inventory_model_master ( inventory . CreateSimpleInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'item' ) . with_description ( None ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.create_simple_inventory_model_master ({ namespaceName = \"namespace-0001\" , name = \"item\" , description = nil , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.create_simple_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"item\" , description = nil , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSimpleInventoryModelMaster 심플 인벤토리 모델 마스터 취득 특정 편집 가능한 심플 인벤토리 모델 마스터의 전체 설정을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SimpleInventoryModelMaster 심플 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetSimpleInventoryModelMaster ( \u0026 inventory . GetSimpleInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetSimpleInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getSimpleInventoryModelMaster ( ( new GetSimpleInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetSimpleInventoryModelMasterRequest ; import io.gs2.inventory.result.GetSimpleInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetSimpleInventoryModelMasterResult result = client . getSimpleInventoryModelMaster ( new GetSimpleInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); SimpleInventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetSimpleInventoryModelMasterResult \u003e asyncResult = null ; yield return client . GetSimpleInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . GetSimpleInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getSimpleInventoryModelMaster ( new Gs2Inventory . GetSimpleInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_simple_inventory_model_master ( inventory . GetSimpleInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_simple_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_simple_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateSimpleInventoryModelMaster 심플 인벤토리 모델 마스터 갱신 기존 심플 인벤토리 모델 마스터의 속성을 갱신합니다. 변경 사항은 마스터 데이터가 재유효화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item SimpleInventoryModelMaster 갱신한 심플 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateSimpleInventoryModelMaster ( \u0026 inventory . UpdateSimpleInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"ITEM_INVENTORY_MASTER\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateSimpleInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateSimpleInventoryModelMaster ( ( new UpdateSimpleInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"ITEM_INVENTORY_MASTER\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateSimpleInventoryModelMasterRequest ; import io.gs2.inventory.result.UpdateSimpleInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateSimpleInventoryModelMasterResult result = client . updateSimpleInventoryModelMaster ( new UpdateSimpleInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_INVENTORY_MASTER\" ) ); SimpleInventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateSimpleInventoryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateSimpleInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . UpdateSimpleInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"ITEM_INVENTORY_MASTER\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateSimpleInventoryModelMaster ( new Gs2Inventory . UpdateSimpleInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_INVENTORY_MASTER\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_simple_inventory_model_master ( inventory . UpdateSimpleInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_description ( 'description1' ) . with_metadata ( 'ITEM_INVENTORY_MASTER' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_simple_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , description = \"description1\" , metadata = \"ITEM_INVENTORY_MASTER\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_simple_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , description = \"description1\" , metadata = \"ITEM_INVENTORY_MASTER\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSimpleInventoryModelMaster 심플 인벤토리 모델 마스터 삭제 지정된 심플 인벤토리 모델 마스터를 삭제합니다. 삭제는 마스터 데이터가 재유효화될 때까지 현재 활성 모델에 영향을 미치지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SimpleInventoryModelMaster 삭제한 심플 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteSimpleInventoryModelMaster ( \u0026 inventory . DeleteSimpleInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteSimpleInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteSimpleInventoryModelMaster ( ( new DeleteSimpleInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteSimpleInventoryModelMasterRequest ; import io.gs2.inventory.result.DeleteSimpleInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteSimpleInventoryModelMasterResult result = client . deleteSimpleInventoryModelMaster ( new DeleteSimpleInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); SimpleInventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteSimpleInventoryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteSimpleInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . DeleteSimpleInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteSimpleInventoryModelMaster ( new Gs2Inventory . DeleteSimpleInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_simple_inventory_model_master ( inventory . DeleteSimpleInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_simple_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_simple_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSimpleItemModelMasters 심플 아이템 모델 마스터 목록 취득 지정된 심플 인벤토리 모델 마스터에 속하는, 편집 가능한 심플 아이템 모델 마스터의 페이지네이션 목록을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. namePrefix string ~ 64자 심플 아이템 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 심플 아이템 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeSimpleItemModelMasters ( \u0026 inventory . DescribeSimpleItemModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeSimpleItemModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeSimpleItemModelMasters ( ( new DescribeSimpleItemModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeSimpleItemModelMastersRequest ; import io.gs2.inventory.result.DescribeSimpleItemModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeSimpleItemModelMastersResult result = client . describeSimpleItemModelMasters ( new DescribeSimpleItemModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SimpleItemModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeSimpleItemModelMastersResult \u003e asyncResult = null ; yield return client . DescribeSimpleItemModelMasters ( new Gs2 . Gs2Inventory . Request . DescribeSimpleItemModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeSimpleItemModelMasters ( new Gs2Inventory . DescribeSimpleItemModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_simple_item_model_masters ( inventory . DescribeSimpleItemModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_simple_item_model_masters ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_simple_item_model_masters_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createSimpleItemModelMaster 심플 아이템 모델 마스터 신규 생성 지정된 심플 인벤토리 내의 새로운 아이템 타입을 정의하는 편집 가능한 심플 아이템 모델 마스터를 생성합니다. 생성한 마스터는 마스터 데이터 갱신 프로세스를 통해 유효화해야 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. name string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item SimpleItemModelMaster 생성한 심플 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CreateSimpleItemModelMaster ( \u0026 inventory . CreateSimpleItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), Name : pointy . String ( \"item-master-0001\" ), Description : nil , Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CreateSimpleItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e createSimpleItemModelMaster ( ( new CreateSimpleItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withName ( \"item-master-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CreateSimpleItemModelMasterRequest ; import io.gs2.inventory.result.CreateSimpleItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CreateSimpleItemModelMasterResult result = client . createSimpleItemModelMaster ( new CreateSimpleItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withName ( \"item-master-0001\" ) . withDescription ( null ) . withMetadata ( null ) ); SimpleItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CreateSimpleItemModelMasterResult \u003e asyncResult = null ; yield return client . CreateSimpleItemModelMaster ( new Gs2 . Gs2Inventory . Request . CreateSimpleItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithName ( \"item-master-0001\" ) . WithDescription ( null ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . createSimpleItemModelMaster ( new Gs2Inventory . CreateSimpleItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withName ( \"item-master-0001\" ) . withDescription ( null ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . create_simple_item_model_master ( inventory . CreateSimpleItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_name ( 'item-master-0001' ) . with_description ( None ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.create_simple_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , name = \"item-master-0001\" , description = nil , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.create_simple_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , name = \"item-master-0001\" , description = nil , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSimpleItemModelMaster 심플 아이템 모델 마스터 취득 특정 편집 가능한 심플 아이템 모델 마스터의 전체 설정을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SimpleItemModelMaster 심플 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetSimpleItemModelMaster ( \u0026 inventory . GetSimpleItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetSimpleItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getSimpleItemModelMaster ( ( new GetSimpleItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetSimpleItemModelMasterRequest ; import io.gs2.inventory.result.GetSimpleItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetSimpleItemModelMasterResult result = client . getSimpleItemModelMaster ( new GetSimpleItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); SimpleItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetSimpleItemModelMasterResult \u003e asyncResult = null ; yield return client . GetSimpleItemModelMaster ( new Gs2 . Gs2Inventory . Request . GetSimpleItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getSimpleItemModelMaster ( new Gs2Inventory . GetSimpleItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_simple_item_model_master ( inventory . GetSimpleItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_simple_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_simple_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateSimpleItemModelMaster 심플 아이템 모델 마스터 갱신 기존 심플 아이템 모델 마스터의 속성을 갱신합니다. 변경 사항은 마스터 데이터가 재유효화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item SimpleItemModelMaster 갱신한 심플 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateSimpleItemModelMaster ( \u0026 inventory . UpdateSimpleItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"ITEM_MASTER_0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateSimpleItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateSimpleItemModelMaster ( ( new UpdateSimpleItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"ITEM_MASTER_0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateSimpleItemModelMasterRequest ; import io.gs2.inventory.result.UpdateSimpleItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateSimpleItemModelMasterResult result = client . updateSimpleItemModelMaster ( new UpdateSimpleItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_MASTER_0001\" ) ); SimpleItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateSimpleItemModelMasterResult \u003e asyncResult = null ; yield return client . UpdateSimpleItemModelMaster ( new Gs2 . Gs2Inventory . Request . UpdateSimpleItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"ITEM_MASTER_0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateSimpleItemModelMaster ( new Gs2Inventory . UpdateSimpleItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_MASTER_0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_simple_item_model_master ( inventory . UpdateSimpleItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) . with_description ( 'description1' ) . with_metadata ( 'ITEM_MASTER_0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_simple_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , description = \"description1\" , metadata = \"ITEM_MASTER_0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_simple_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , description = \"description1\" , metadata = \"ITEM_MASTER_0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSimpleItemModelMaster 심플 아이템 모델 마스터 삭제 지정된 심플 아이템 모델 마스터를 삭제합니다. 삭제는 마스터 데이터가 재유효화될 때까지 현재 활성 모델에 영향을 미치지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SimpleItemModelMaster 삭제한 심플 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteSimpleItemModelMaster ( \u0026 inventory . DeleteSimpleItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteSimpleItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteSimpleItemModelMaster ( ( new DeleteSimpleItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteSimpleItemModelMasterRequest ; import io.gs2.inventory.result.DeleteSimpleItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteSimpleItemModelMasterResult result = client . deleteSimpleItemModelMaster ( new DeleteSimpleItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); SimpleItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteSimpleItemModelMasterResult \u003e asyncResult = null ; yield return client . DeleteSimpleItemModelMaster ( new Gs2 . Gs2Inventory . Request . DeleteSimpleItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteSimpleItemModelMaster ( new Gs2Inventory . DeleteSimpleItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_simple_item_model_master ( inventory . DeleteSimpleItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_simple_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_simple_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeBigInventoryModelMasters 거대 인벤토리 모델 마스터 목록 취득 네임스페이스 내의 편집 가능한 거대 인벤토리 모델 마스터의 페이지네이션 리스트를 취득합니다. 이는 임의 정밀도의 아이템 수량을 사용하는 인벤토리 타입의 초안 정의입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 거대 인벤토리 모델명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 거대 인벤토리 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeBigInventoryModelMasters ( \u0026 inventory . DescribeBigInventoryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeBigInventoryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeBigInventoryModelMasters ( ( new DescribeBigInventoryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeBigInventoryModelMastersRequest ; import io.gs2.inventory.result.DescribeBigInventoryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeBigInventoryModelMastersResult result = client . describeBigInventoryModelMasters ( new DescribeBigInventoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List BigInventoryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeBigInventoryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeBigInventoryModelMasters ( new Gs2 . Gs2Inventory . Request . DescribeBigInventoryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeBigInventoryModelMasters ( new Gs2Inventory . DescribeBigInventoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_big_inventory_model_masters ( inventory . DescribeBigInventoryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_big_inventory_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_big_inventory_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createBigInventoryModelMaster 거대 인벤토리 모델 마스터를 신규 작성 임의 정밀도의 아이템 관리를 위한 편집 가능한 거대 인벤토리 모델 마스터를 생성합니다. 생성한 마스터는 마스터 데이터 갱신 프로세스를 통해 활성화해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item BigInventoryModelMaster 생성한 거대 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CreateBigInventoryModelMaster ( \u0026 inventory . CreateBigInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"item\" ), Description : nil , Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CreateBigInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e createBigInventoryModelMaster ( ( new CreateBigInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"item\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CreateBigInventoryModelMasterRequest ; import io.gs2.inventory.result.CreateBigInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CreateBigInventoryModelMasterResult result = client . createBigInventoryModelMaster ( new CreateBigInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"item\" ) . withDescription ( null ) . withMetadata ( null ) ); BigInventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CreateBigInventoryModelMasterResult \u003e asyncResult = null ; yield return client . CreateBigInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . CreateBigInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"item\" ) . WithDescription ( null ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . createBigInventoryModelMaster ( new Gs2Inventory . CreateBigInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"item\" ) . withDescription ( null ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . create_big_inventory_model_master ( inventory . CreateBigInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'item' ) . with_description ( None ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.create_big_inventory_model_master ({ namespaceName = \"namespace-0001\" , name = \"item\" , description = nil , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.create_big_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"item\" , description = nil , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBigInventoryModelMaster 거대 인벤토리 모델 마스터를 취득 특정 편집 가능한 거대 인벤토리 모델 마스터의 전체 설정을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item BigInventoryModelMaster 거대 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetBigInventoryModelMaster ( \u0026 inventory . GetBigInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetBigInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getBigInventoryModelMaster ( ( new GetBigInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetBigInventoryModelMasterRequest ; import io.gs2.inventory.result.GetBigInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetBigInventoryModelMasterResult result = client . getBigInventoryModelMaster ( new GetBigInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); BigInventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetBigInventoryModelMasterResult \u003e asyncResult = null ; yield return client . GetBigInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . GetBigInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getBigInventoryModelMaster ( new Gs2Inventory . GetBigInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_big_inventory_model_master ( inventory . GetBigInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_big_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_big_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateBigInventoryModelMaster 거대 인벤토리 모델 마스터를 갱신 기존 거대 인벤토리 모델 마스터의 속성을 갱신합니다. 변경 사항은 마스터 데이터가 재활성화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item BigInventoryModelMaster 갱신한 거대 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateBigInventoryModelMaster ( \u0026 inventory . UpdateBigInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"ITEM_INVENTORY_MASTER\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateBigInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateBigInventoryModelMaster ( ( new UpdateBigInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"ITEM_INVENTORY_MASTER\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateBigInventoryModelMasterRequest ; import io.gs2.inventory.result.UpdateBigInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateBigInventoryModelMasterResult result = client . updateBigInventoryModelMaster ( new UpdateBigInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_INVENTORY_MASTER\" ) ); BigInventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateBigInventoryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateBigInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . UpdateBigInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"ITEM_INVENTORY_MASTER\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateBigInventoryModelMaster ( new Gs2Inventory . UpdateBigInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_INVENTORY_MASTER\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_big_inventory_model_master ( inventory . UpdateBigInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_description ( 'description1' ) . with_metadata ( 'ITEM_INVENTORY_MASTER' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_big_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , description = \"description1\" , metadata = \"ITEM_INVENTORY_MASTER\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_big_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , description = \"description1\" , metadata = \"ITEM_INVENTORY_MASTER\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteBigInventoryModelMaster 거대 인벤토리 모델 마스터를 삭제 지정된 거대 인벤토리 모델 마스터를 삭제합니다. 삭제는 마스터 데이터가 재활성화될 때까지 현재 활성화된 모델에 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item BigInventoryModelMaster 삭제한 거대 인벤토리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteBigInventoryModelMaster ( \u0026 inventory . DeleteBigInventoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteBigInventoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteBigInventoryModelMaster ( ( new DeleteBigInventoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteBigInventoryModelMasterRequest ; import io.gs2.inventory.result.DeleteBigInventoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteBigInventoryModelMasterResult result = client . deleteBigInventoryModelMaster ( new DeleteBigInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); BigInventoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteBigInventoryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteBigInventoryModelMaster ( new Gs2 . Gs2Inventory . Request . DeleteBigInventoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteBigInventoryModelMaster ( new Gs2Inventory . DeleteBigInventoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_big_inventory_model_master ( inventory . DeleteBigInventoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_big_inventory_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_big_inventory_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeBigItemModelMasters 거대 아이템 모델 마스터 목록을 취득 지정된 거대 인벤토리 모델 마스터에 속하는, 편집 가능한 거대 아이템 모델 마스터의 페이지네이션 목록을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. namePrefix string ~ 64자 거대 아이템 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 거대 아이템 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DescribeBigItemModelMasters ( \u0026 inventory . DescribeBigItemModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DescribeBigItemModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e describeBigItemModelMasters ( ( new DescribeBigItemModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DescribeBigItemModelMastersRequest ; import io.gs2.inventory.result.DescribeBigItemModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DescribeBigItemModelMastersResult result = client . describeBigItemModelMasters ( new DescribeBigItemModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List BigItemModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DescribeBigItemModelMastersResult \u003e asyncResult = null ; yield return client . DescribeBigItemModelMasters ( new Gs2 . Gs2Inventory . Request . DescribeBigItemModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . describeBigItemModelMasters ( new Gs2Inventory . DescribeBigItemModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . describe_big_item_model_masters ( inventory . DescribeBigItemModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.describe_big_item_model_masters ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'inventory' ) api_result_handler = client.describe_big_item_model_masters_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createBigItemModelMaster 거대 아이템 모델 마스터를 신규 생성 지정된 거대 인벤토리 내의 임의 정밀도 수량을 가진 새로운 아이템 타입을 정의하는 편집 가능한 거대 아이템 모델 마스터를 생성합니다. 생성한 마스터는 마스터 데이터 갱신 프로세스를 통해 유효화해야 사용할 수 있게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. name string  ~ 128자 거대 아이템 모델명 거대 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item BigItemModelMaster 생성한 거대 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . CreateBigItemModelMaster ( \u0026 inventory . CreateBigItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), Name : pointy . String ( \"item-master-0001\" ), Description : nil , Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\CreateBigItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e createBigItemModelMaster ( ( new CreateBigItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withName ( \"item-master-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.CreateBigItemModelMasterRequest ; import io.gs2.inventory.result.CreateBigItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { CreateBigItemModelMasterResult result = client . createBigItemModelMaster ( new CreateBigItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withName ( \"item-master-0001\" ) . withDescription ( null ) . withMetadata ( null ) ); BigItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . CreateBigItemModelMasterResult \u003e asyncResult = null ; yield return client . CreateBigItemModelMaster ( new Gs2 . Gs2Inventory . Request . CreateBigItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithName ( \"item-master-0001\" ) . WithDescription ( null ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . createBigItemModelMaster ( new Gs2Inventory . CreateBigItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withName ( \"item-master-0001\" ) . withDescription ( null ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . create_big_item_model_master ( inventory . CreateBigItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_name ( 'item-master-0001' ) . with_description ( None ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.create_big_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , name = \"item-master-0001\" , description = nil , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.create_big_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , name = \"item-master-0001\" , description = nil , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBigItemModelMaster 거대 아이템 모델 마스터를 취득 특정 편집 가능한 거대 아이템 모델 마스터의 전체 설정을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델명 거대 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item BigItemModelMaster 거대 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . GetBigItemModelMaster ( \u0026 inventory . GetBigItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\GetBigItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e getBigItemModelMaster ( ( new GetBigItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.GetBigItemModelMasterRequest ; import io.gs2.inventory.result.GetBigItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { GetBigItemModelMasterResult result = client . getBigItemModelMaster ( new GetBigItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); BigItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . GetBigItemModelMasterResult \u003e asyncResult = null ; yield return client . GetBigItemModelMaster ( new Gs2 . Gs2Inventory . Request . GetBigItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . getBigItemModelMaster ( new Gs2Inventory . GetBigItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . get_big_item_model_master ( inventory . GetBigItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.get_big_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.get_big_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateBigItemModelMaster 거대 아이템 모델 마스터를 갱신 기존 거대 아이템 모델 마스터의 속성을 갱신합니다. 변경 사항은 마스터 데이터가 재유효화될 때까지 반영되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델명 거대 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item BigItemModelMaster 갱신한 거대 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . UpdateBigItemModelMaster ( \u0026 inventory . UpdateBigItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"ITEM_MASTER_0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\UpdateBigItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e updateBigItemModelMaster ( ( new UpdateBigItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"ITEM_MASTER_0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.UpdateBigItemModelMasterRequest ; import io.gs2.inventory.result.UpdateBigItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { UpdateBigItemModelMasterResult result = client . updateBigItemModelMaster ( new UpdateBigItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_MASTER_0001\" ) ); BigItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . UpdateBigItemModelMasterResult \u003e asyncResult = null ; yield return client . UpdateBigItemModelMaster ( new Gs2 . Gs2Inventory . Request . UpdateBigItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"ITEM_MASTER_0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . updateBigItemModelMaster ( new Gs2Inventory . UpdateBigItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"ITEM_MASTER_0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . update_big_item_model_master ( inventory . UpdateBigItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) . with_description ( 'description1' ) . with_metadata ( 'ITEM_MASTER_0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.update_big_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , description = \"description1\" , metadata = \"ITEM_MASTER_0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.update_big_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , description = \"description1\" , metadata = \"ITEM_MASTER_0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteBigItemModelMaster 거대 아이템 모델 마스터를 삭제 지정된 거대 아이템 모델 마스터를 삭제합니다. 삭제는 마스터 데이터가 재유효화될 때까지 현재 활성화된 모델에 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델명 거대 아이템 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item BigItemModelMaster 삭제한 거대 아이템 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/inventory\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := inventory . Gs2InventoryRestClient { Session : \u0026 session , } result , err := client . DeleteBigItemModelMaster ( \u0026 inventory . DeleteBigItemModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InventoryName : pointy . String ( \"item\" ), ItemName : pointy . String ( \"item-master-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Inventory\\Gs2InventoryRestClient ; use Gs2\\Inventory\\Request\\DeleteBigItemModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2InventoryRestClient ( $session ); try { $result = $client -\u003e deleteBigItemModelMaster ( ( new DeleteBigItemModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInventoryName ( \"item\" ) -\u003e withItemName ( \"item-master-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.inventory.rest.Gs2InventoryRestClient ; import io.gs2.inventory.request.DeleteBigItemModelMasterRequest ; import io.gs2.inventory.result.DeleteBigItemModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2InventoryRestClient client = new Gs2InventoryRestClient ( session ); try { DeleteBigItemModelMasterResult result = client . deleteBigItemModelMaster ( new DeleteBigItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); BigItemModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2InventoryRestClient ( session ); AsyncResult Gs2 . Gs2Inventory . Result . DeleteBigItemModelMasterResult \u003e asyncResult = null ; yield return client . DeleteBigItemModelMaster ( new Gs2 . Gs2Inventory . Request . DeleteBigItemModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInventoryName ( \"item\" ) . WithItemName ( \"item-master-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Inventory from '@/gs2/inventory' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Inventory . Gs2InventoryRestClient ( session ); try { const result = await client . deleteBigItemModelMaster ( new Gs2Inventory . DeleteBigItemModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withInventoryName ( \"item\" ) . withItemName ( \"item-master-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import inventory session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = inventory . Gs2InventoryRestClient ( session ) try : result = client . delete_big_item_model_master ( inventory . DeleteBigItemModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_inventory_name ( 'item' ) . with_item_name ( 'item-master-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'inventory' ) api_result = client.delete_big_item_model_master ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'inventory' ) api_result_handler = client.delete_big_item_model_master_async ({ namespaceName = \"namespace-0001\" , inventoryName = \"item\" , itemName = \"item-master-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Inventory SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Inventory SDK API 레퍼런스","url":"/ko/api_reference/inventory/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 잡 큐 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. enableAutoRun bool false 서버 사이드에서 자동으로 잡을 실행할지 여부 활성화하면 등록된 잡은 클라이언트가 폴링하여 실행할 필요 없이 서버 사이드에서 자동으로 실행됩니다. 비활성화된 경우, 클라이언트는 명시적으로 run API를 호출하여 잡을 처리해야 하며, pushNotification을 통해 새로운 잡에 대한 알림을 받을 수 있습니다. runNotification NotificationSetting  실행 알림 잡 큐의 잡이 실행되었을 때 GS2-Gateway를 통한 푸시 알림 설정입니다. 알림에는 잡의 결과가 포함되어 있어, 클라이언트는 추가 API 호출 없이 보상을 표시하거나 오류를 처리할 수 있습니다. pushNotification NotificationSetting {enableAutoRun} == false 푸시 알림 새로운 잡이 잡 큐에 등록되었을 때 GS2-Gateway를 통한 푸시 알림 설정입니다. enableAutoRun이 비활성화된 경우에만 사용할 수 있습니다. 새로 등록된 잡을 처리하도록 클라이언트에 run API 호출을 요청하기 위해 사용됩니다. ※ enableAutoRun이(가) “false” 이면 활성화 logSetting LogSetting 로그 출력 설정 잡 큐 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버깅 및 분석을 위해 잡의 등록, 실행, 재시도, 실패를 추적하는 데 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Job 잡 잡 큐란 즉시 처리를 완료하지 않고 처리를 지연 실행하기 위한 구조입니다. 예를 들어 캐릭터를 입수했을 때 즉시 실행해야 하는 처리는 소지품에 캐릭터를 저장하는 것입니다. 반면, 즉시 처리하지 않아도 되는 처리로는 도감에 등록한다 는 처리가 있습니다. 이처럼 즉시 처리할 필요가 없는 처리를 잡 큐를 경유하여 처리하도록 하면 장애에 강한 설계로 만들 수 있습니다. 왜냐하면 도감 서비스가 어떤 장애로 인해 정지되어 있더라도, 도감에 등록되지 않은 상태로 게임을 계속할 수 있기 때문입니다. 잡 큐에 쌓인 처리는 실패하더라도 장애가 해소된 후 재시도함으로써 결과적으로 올바른 상태로 만들 수 있습니다. GS2에서는 이러한 최종 일관성 처리를 권장하며, 다양한 상황에서 잡 큐를 이용한 지연 처리가 이루어집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 jobId string ※ ~ 1024자 잡 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID scriptId string  ~ 1024자 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN args string  ~ 5242880자 인수 잡의 실행 시 스크립트에 전달할 JSON 형식의 요청 파라미터입니다. 액션 타입이나 대상 리소스 등 구체적인 조작 내용을 포함합니다. 최대 5MB입니다. currentRetryCount int 0 0 ~ 100 현재 재시도 횟수 실패 후 이 잡이 재시도된 횟수입니다. 재시도 가능한 오류로 실행이 종료될 때마다 증가합니다. 이 횟수가 maxTryCount에 도달하면 잡은 영구적인 실패로 표시됩니다. maxTryCount int 3 1 ~ 100 최대 시도 횟수 최초 시도와 재시도를 포함하여 이 잡을 실행할 수 있는 최대 횟수입니다. 모든 시도가 실패하면 잡은 포기됩니다. 기본값은 3, 최대값은 100입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 JobResult 잡 실행 결과(상세) 단일 잡 실행 시도의 결과를 기록합니다. 각 시도마다 개별 JobResult가 생성되므로, 여러 번 재시도된 잡에는 여러 개의 결과가 존재합니다. statusCode는 잡이 성공했는지 실패했는지를 나타냅니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 jobResultId string ※ ~ 1024자 잡 실행 결과 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 jobId string  ~ 1024자 잡 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN scriptId string ~ 1024자 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN args string ~ 5242880자 인수 이 실행 시도에서 스크립트에 전달된 JSON 형식의 요청 파라미터입니다. tryNumber int  0 ~ 10000 시도 횟수 이 실행 결과의 일련 시도 번호로, 0부터 시작합니다. 첫 번째 시도는 0, 첫 번째 재시도는 1이며, 이후도 같은 방식입니다. 결과를 특정 재시도 시도와 연결하는 데 사용됩니다. statusCode int  0 ~ 1000 상태 코드 스크립트 실행에서 반환된 HTTP 상태 코드입니다. 2xx 코드는 성공을 나타내고, 그 외의 코드는 실패를 나타냅니다. 재시도 가능한 오류인 경우 maxTryCount에 도달하지 않았다면 자동으로 재시도가 이루어질 수 있습니다. result string  ~ 5242880자 응답 내용 스크립트 실행에서 반환된 JSON 형식의 응답 본문입니다. 성공 시에는 결과 데이터를, 실패 시에는 오류 상세 정보를 포함합니다. 최대 5MB입니다. tryAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 JobEntry 등록 잡 잡 큐에 새로운 잡을 등록하기 위한 파라미터를 나타냅니다. 실행할 스크립트, JSON 인수, 최대 재시도 횟수를 포함합니다. 잡을 큐에 푸시할 때의 입력으로 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 scriptId string  ~ 1024자 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN args string “{}” ~ 131072자 인수 잡 실행 시 스크립트에 전달할 JSON 형식의 요청 파라미터입니다. 기본값은 빈 JSON 객체 “{}” 입니다. 최대 128KB입니다. maxTryCount int 3 0 ~ 100 최대 시도 횟수 최초 시도와 재시도를 포함하여 잡을 실행할 수 있는 최대 횟수입니다. 기본값은 3이며, 최대값은 100입니다. JobResultBody 잡의 실행 결과 시도 번호, 상태 코드, 응답 내용, 실행 타임스탬프를 포함하는 잡 실행 결과의 경량 표현입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 tryNumber int  1 ~ 10000 시도 횟수 이 실행 결과의 일련 시도 번호로, 1부터 시작합니다. 어느 재시도 시도가 이 결과를 생성했는지 식별하는 데 사용됩니다. statusCode int  0 ~ 1000 상태 코드 스크립트 실행에서 반환된 HTTP 상태 코드입니다. 2xx 코드는 성공을 나타내고, 그 외의 코드는 실패를 나타냅니다. 재시도 가능한 오류인 경우 maxTryCount에 도달하지 않았다면 자동으로 재시도가 이루어질 수 있습니다. result string  ~ 5242880자 응답 내용 스크립트 실행에서 반환된 JSON 형식의 응답 본문입니다. 성공 시에는 결과 데이터를, 실패 시에는 오류 상세 정보를 포함합니다. 최대 5MB입니다. tryAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 job_queue . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.DescribeNamespacesRequest ; import io.gs2.jobQueue.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2JobQueue . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2JobQueue . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . describe_namespaces ( job_queue . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'job_queue' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스를 신규 생성 지정된 설정으로 새로운 잡 큐 네임스페이스를 생성합니다. enableAutoRun 설정에 따라 잡이 등록 시 자동으로 실행되는지(true), 아니면 Run API를 통한 수동 실행을 위해 큐에 대기하는지(false)를 제어합니다. pushNotification을 설정하면 잡이 큐에 추가될 때 통지를 받을 수 있고, runNotification을 설정하면 잡의 실행이 완료될 때 통지를 받을 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 잡 큐 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. enableAutoRun bool false 서버 사이드에서 자동으로 잡을 실행할지 여부 활성화하면 등록된 잡은 클라이언트가 폴링하여 실행할 필요 없이 서버 사이드에서 자동으로 실행됩니다. 비활성화된 경우, 클라이언트는 명시적으로 run API를 호출하여 잡을 처리해야 하며, pushNotification을 통해 새로운 잡에 대한 알림을 받을 수 있습니다. pushNotification NotificationSetting {enableAutoRun} == false 푸시 알림 새로운 잡이 잡 큐에 등록되었을 때 GS2-Gateway를 통한 푸시 알림 설정입니다. enableAutoRun이 비활성화된 경우에만 사용할 수 있습니다. 새로 등록된 잡을 처리하도록 클라이언트에 run API 호출을 요청하기 위해 사용됩니다. ※ enableAutoRun이(가) “false” 이면 활성화 runNotification NotificationSetting  실행 알림 잡 큐의 잡이 실행되었을 때 GS2-Gateway를 통한 푸시 알림 설정입니다. 알림에는 잡의 결과가 포함되어 있어, 클라이언트는 추가 API 호출 없이 보상을 표시하거나 오류를 처리할 수 있습니다. logSetting LogSetting 로그 출력 설정 잡 큐 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버깅 및 분석을 위해 잡의 등록, 실행, 재시도, 실패를 추적하는 데 유용합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 job_queue . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , EnableAutoRun : nil , PushNotification : nil , RunNotification : nil , LogSetting : \u0026 jobQueue . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withEnableAutoRun ( null ) -\u003e withPushNotification ( null ) -\u003e withRunNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\JobQueue\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.CreateNamespaceRequest ; import io.gs2.jobQueue.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withEnableAutoRun ( null ) . withPushNotification ( null ) . withRunNotification ( null ) . withLogSetting ( new io . gs2 . jobQueue . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2JobQueue . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithEnableAutoRun ( null ) . WithPushNotification ( null ) . WithRunNotification ( null ) . WithLogSetting ( new Gs2 . Gs2JobQueue . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . createNamespace ( new Gs2JobQueue . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withEnableAutoRun ( null ) . withPushNotification ( null ) . withRunNotification ( null ) . withLogSetting ( new Gs2JobQueue . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . create_namespace ( job_queue . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_enable_auto_run ( None ) . with_push_notification ( None ) . with_run_notification ( None ) . with_log_setting ( job_queue . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , enableAutoRun = nil , pushNotification = nil , runNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , enableAutoRun = nil , pushNotification = nil , runNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 job_queue . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.GetNamespaceStatusRequest ; import io.gs2.jobQueue.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2JobQueue . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2JobQueue . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . get_namespace_status ( job_queue . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'job_queue' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 job_queue . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.GetNamespaceRequest ; import io.gs2.jobQueue.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2JobQueue . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . getNamespace ( new Gs2JobQueue . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . get_namespace ( job_queue . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스를 갱신 지정된 잡 큐 네임스페이스의 설정을 갱신합니다. enableAutoRun 설정을 변경하여 자동 실행 모드와 수동 실행 모드를 전환하거나, 푸시 통지·실행 통지 설정을 갱신할 수 있습니다. 변경 사항은 이후 작업에 즉시 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 잡 큐 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. enableAutoRun bool false 서버 사이드에서 자동으로 잡을 실행할지 여부 활성화하면 등록된 잡은 클라이언트가 폴링하여 실행할 필요 없이 서버 사이드에서 자동으로 실행됩니다. 비활성화된 경우, 클라이언트는 명시적으로 run API를 호출하여 잡을 처리해야 하며, pushNotification을 통해 새로운 잡에 대한 알림을 받을 수 있습니다. pushNotification NotificationSetting {enableAutoRun} == false 푸시 알림 새로운 잡이 잡 큐에 등록되었을 때 GS2-Gateway를 통한 푸시 알림 설정입니다. enableAutoRun이 비활성화된 경우에만 사용할 수 있습니다. 새로 등록된 잡을 처리하도록 클라이언트에 run API 호출을 요청하기 위해 사용됩니다. ※ enableAutoRun이(가) “false” 이면 활성화 runNotification NotificationSetting  실행 알림 잡 큐의 잡이 실행되었을 때 GS2-Gateway를 통한 푸시 알림 설정입니다. 알림에는 잡의 결과가 포함되어 있어, 클라이언트는 추가 API 호출 없이 보상을 표시하거나 오류를 처리할 수 있습니다. logSetting LogSetting 로그 출력 설정 잡 큐 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버깅 및 분석을 위해 잡의 등록, 실행, 재시도, 실패를 추적하는 데 유용합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 job_queue . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , EnableAutoRun : nil , PushNotification : nil , RunNotification : nil , LogSetting : \u0026 jobQueue . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withEnableAutoRun ( null ) -\u003e withPushNotification ( null ) -\u003e withRunNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\JobQueue\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.UpdateNamespaceRequest ; import io.gs2.jobQueue.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withEnableAutoRun ( null ) . withPushNotification ( null ) . withRunNotification ( null ) . withLogSetting ( new io . gs2 . jobQueue . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2JobQueue . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithEnableAutoRun ( null ) . WithPushNotification ( null ) . WithRunNotification ( null ) . WithLogSetting ( new Gs2 . Gs2JobQueue . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2JobQueue . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withEnableAutoRun ( null ) . withPushNotification ( null ) . withRunNotification ( null ) . withLogSetting ( new Gs2JobQueue . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . update_namespace ( job_queue . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_enable_auto_run ( None ) . with_push_notification ( None ) . with_run_notification ( None ) . with_log_setting ( job_queue . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , enableAutoRun = nil , pushNotification = nil , runNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , enableAutoRun = nil , pushNotification = nil , runNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 job_queue . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.DeleteNamespaceRequest ; import io.gs2.jobQueue.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2JobQueue . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2JobQueue . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . delete_namespace ( job_queue . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 job_queue . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.GetServiceVersionRequest ; import io.gs2.jobQueue.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2JobQueue . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2JobQueue . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . get_service_version ( job_queue . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 job_queue . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.DumpUserDataByUserIdRequest ; import io.gs2.jobQueue.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2JobQueue . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2JobQueue . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . dump_user_data_by_user_id ( job_queue . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'job_queue' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 이전에 시작된 사용자 데이터 덤프 작업의 진행 상황을 확인합니다. 덤프에는 사용자의 모든 잡 큐 데이터와 잡 실행 결과가 포함됩니다. 완료되면 내보낸 데이터를 다운로드할 수 있는 URL을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 job_queue . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.jobQueue.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2JobQueue . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2JobQueue . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( job_queue . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'job_queue' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 job_queue . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.CleanUserDataByUserIdRequest ; import io.gs2.jobQueue.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2JobQueue . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2JobQueue . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . clean_user_data_by_user_id ( job_queue . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'job_queue' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 이전에 시작된 사용자 데이터 클리닝 작업의 진행 상황을 확인합니다. 클리닝을 수행하면 이 서비스의 모든 네임스페이스에 걸쳐 사용자의 잡 큐 데이터와 잡 실행 결과가 모두 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 job_queue . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.jobQueue.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2JobQueue . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2JobQueue . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( job_queue . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'job_queue' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 job_queue . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.jobQueue.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2JobQueue . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2JobQueue . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( job_queue . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'job_queue' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 job_queue . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.ImportUserDataByUserIdRequest ; import io.gs2.jobQueue.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2JobQueue . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2JobQueue . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . import_user_data_by_user_id ( job_queue . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'job_queue' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 이전에 시작된 사용자 데이터 임포트 작업의 진행 상황을 확인합니다. 임포트를 수행하면 이전에 내보낸 데이터로부터 잡 큐 데이터와 잡 실행 결과가 복원됩니다. 완료되면 임포트 로그를 다운로드할 수 있는 URL을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 job_queue . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.CheckImportUserDataByUserIdRequest ; import io.gs2.jobQueue.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2JobQueue . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2JobQueue . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( job_queue . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'job_queue' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeJobsByUserId 잡 목록 조회 지정한 사용자의 큐에 등록된 잡의 페이지네이션 목록을 조회합니다. 큐에 있는 잡은 Run API를 통해 수동으로 실행되거나, 네임스페이스에서 enableAutoRun이 활성화된 경우 자동으로 실행되기를 대기하고 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 잡 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . DescribeJobsByUserId ( \u0026 job_queue . DescribeJobsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\DescribeJobsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e describeJobsByUserId ( ( new DescribeJobsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.DescribeJobsByUserIdRequest ; import io.gs2.jobQueue.result.DescribeJobsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { DescribeJobsByUserIdResult result = client . describeJobsByUserId ( new DescribeJobsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Job \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . DescribeJobsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeJobsByUserId ( new Gs2 . Gs2JobQueue . Request . DescribeJobsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . describeJobsByUserId ( new Gs2JobQueue . DescribeJobsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . describe_jobs_by_user_id ( job_queue . DescribeJobsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.describe_jobs_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'job_queue' ) api_result_handler = client.describe_jobs_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getJobByUserId 잡 조회 스크립트 ID, 인수, 재시도 설정을 포함한 특정 잡의 상세 정보를 이름으로 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID jobName string  UUID ~ 36자 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Job 잡 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . GetJobByUserId ( \u0026 job_queue . GetJobByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), JobName : pointy . String ( \"job1\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\GetJobByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e getJobByUserId ( ( new GetJobByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withJobName ( \"job1\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.GetJobByUserIdRequest ; import io.gs2.jobQueue.result.GetJobByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { GetJobByUserIdResult result = client . getJobByUserId ( new GetJobByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withJobName ( \"job1\" ) . withTimeOffsetToken ( null ) ); Job item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . GetJobByUserIdResult \u003e asyncResult = null ; yield return client . GetJobByUserId ( new Gs2 . Gs2JobQueue . Request . GetJobByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithJobName ( \"job1\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . getJobByUserId ( new Gs2JobQueue . GetJobByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withJobName ( \"job1\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . get_job_by_user_id ( job_queue . GetJobByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_job_name ( 'job1' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.get_job_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , jobName = \"job1\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.get_job_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , jobName = \"job1\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; pushByUserId 사용자 ID를 지정하여 잡 등록 사용자의 잡 큐에 하나 이상의 잡을 등록합니다(최대 10건). 각 잡에는 실행할 GS2-Script, 인수, 최대 재시도 횟수를 지정합니다. 네임스페이스에서 enableAutoRun이 활성화된 경우, 잡은 등록 후 즉시 비동기로 실행되며, 응답의 autoRun 플래그가 true가 됩니다. enableAutoRun이 비활성화되어 있으면 잡은 큐에 추가되고 Run API를 통해 수동으로 실행해야 하며, autoRun 플래그는 false가 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID jobs List 0 ~ 10 items 추가할 잡 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 추가한 잡 목록 autoRun bool? 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . PushByUserId ( \u0026 job_queue . PushByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Jobs : [] jobQueue . JobEntry { jobQueue . JobEntry { ScriptId : pointy . String ( \"script-0001\" ), Args : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), }, jobQueue . JobEntry { ScriptId : pointy . String ( \"script-0001\" ), Args : pointy . String ( \"{\\\"piyo\\\": \\\"piyopiyo\\\"}\" ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items autoRun := result . AutoRun use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\PushByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e pushByUserId ( ( new PushByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withJobs ([ ( new \\Gs2\\JobQueue\\Model\\JobEntry ()) -\u003e withScriptId ( \"script-0001\" ) -\u003e withArgs ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ), ( new \\Gs2\\JobQueue\\Model\\JobEntry ()) -\u003e withScriptId ( \"script-0001\" ) -\u003e withArgs ( \"{ \\\" piyo \\\" : \\\" piyopiyo \\\" }\" ), ]) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $autoRun = $result -\u003e getAutoRun (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.PushByUserIdRequest ; import io.gs2.jobQueue.result.PushByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { PushByUserIdResult result = client . pushByUserId ( new PushByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withJobs ( Arrays . asList ( new io . gs2 . jobQueue . model . JobEntry () . withScriptId ( \"script-0001\" ) . withArgs ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), new io . gs2 . jobQueue . model . JobEntry () . withScriptId ( \"script-0001\" ) . withArgs ( \"{\\\"piyo\\\": \\\"piyopiyo\\\"}\" ) )) . withTimeOffsetToken ( null ) ); List Job \u003e items = result . getItems (); boolean autoRun = result . getAutoRun (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . PushByUserIdResult \u003e asyncResult = null ; yield return client . PushByUserId ( new Gs2 . Gs2JobQueue . Request . PushByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithJobs ( new Gs2 . Gs2JobQueue . Model . JobEntry [] { new Gs2 . Gs2JobQueue . Model . JobEntry () . WithScriptId ( \"script-0001\" ) . WithArgs ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), new Gs2 . Gs2JobQueue . Model . JobEntry () . WithScriptId ( \"script-0001\" ) . WithArgs ( \"{\\\"piyo\\\": \\\"piyopiyo\\\"}\" ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var autoRun = result . AutoRun ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . pushByUserId ( new Gs2JobQueue . PushByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withJobs ([ new Gs2JobQueue . model . JobEntry () . withScriptId ( \"script-0001\" ) . withArgs ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), new Gs2JobQueue . model . JobEntry () . withScriptId ( \"script-0001\" ) . withArgs ( \"{\\\"piyo\\\": \\\"piyopiyo\\\"}\" ), ]) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const autoRun = result . getAutoRun (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . push_by_user_id ( job_queue . PushByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_jobs ([ job_queue . JobEntry () . with_script_id ( 'script-0001' ) . with_args ( '{\"hoge\": \"fuga\"}' ), job_queue . JobEntry () . with_script_id ( 'script-0001' ) . with_args ( '{\"piyo\": \"piyopiyo\"}' ), ]) . with_time_offset_token ( None ) ) items = result . items auto_run = result . auto_run except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.push_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , jobs = { { scriptId = \"script-0001\" , args = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , }, { scriptId = \"script-0001\" , args = \"{ \\\" piyo \\\" : \\\" piyopiyo \\\" }\" , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; autoRun = result.autoRun ; client = gs2 ( 'job_queue' ) api_result_handler = client.push_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , jobs = { { scriptId = \"script-0001\" , args = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , }, { scriptId = \"script-0001\" , args = \"{ \\\" piyo \\\" : \\\" piyopiyo \\\" }\" , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; autoRun = result.autoRun ; run 잡 실행 요청 사용자의 잡 큐에서 다음 잡을 실행합니다. 네임스페이스에서 enableAutoRun이 활성화된 경우, 잡은 자동으로 실행되므로 이 API는 isLastJob=true로 즉시 반환됩니다. 실행이 성공한 후, 네임스페이스에 설정되어 있으면 실행 통지가 전송됩니다. 응답의 isLastJob 플래그로 큐 내 마지막 잡인지 여부를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Job 잡 result JobResultBody 잡 실행 결과 내용 isLastJob bool? 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . Run ( \u0026 job_queue . RunRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item result := result . Result isLastJob := result . IsLastJob use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\RunRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e run ( ( new RunRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); $result = $result -\u003e getResult (); $isLastJob = $result -\u003e getIsLastJob (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.RunRequest ; import io.gs2.jobQueue.result.RunResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { RunResult result = client . run ( new RunRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Job item = result . getItem (); JobResultBody result = result . getResult (); boolean isLastJob = result . getIsLastJob (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . RunResult \u003e asyncResult = null ; yield return client . Run ( new Gs2 . Gs2JobQueue . Request . RunRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var result = result . Result ; var isLastJob = result . IsLastJob ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . run ( new Gs2JobQueue . RunRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); const result = result . getResult (); const isLastJob = result . getIsLastJob (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . run ( job_queue . RunRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item result = result . result is_last_job = result . is_last_job except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.run ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; result = result.result ; isLastJob = result.isLastJob ; client = gs2 ( 'job_queue' ) api_result_handler = client.run_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; result = result.result ; isLastJob = result.isLastJob ; runByUserId 사용자 ID를 지정하여 잡 실행 지정한 사용자의 잡 큐에서 다음 잡을 실행합니다. 네임스페이스에서 enableAutoRun이 활성화된 경우, 잡은 자동으로 실행되므로 이 API는 isLastJob=true로 즉시 반환됩니다. 실행이 성공한 후, 네임스페이스에 설정되어 있으면 실행 통지가 전송됩니다. 응답의 isLastJob 플래그로 큐 내 마지막 잡인지 여부를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Job 잡 result JobResultBody 잡 실행 결과 내용 isLastJob bool? 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . RunByUserId ( \u0026 job_queue . RunByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item result := result . Result isLastJob := result . IsLastJob use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\RunByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e runByUserId ( ( new RunByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $result = $result -\u003e getResult (); $isLastJob = $result -\u003e getIsLastJob (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.RunByUserIdRequest ; import io.gs2.jobQueue.result.RunByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { RunByUserIdResult result = client . runByUserId ( new RunByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Job item = result . getItem (); JobResultBody result = result . getResult (); boolean isLastJob = result . getIsLastJob (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . RunByUserIdResult \u003e asyncResult = null ; yield return client . RunByUserId ( new Gs2 . Gs2JobQueue . Request . RunByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var result = result . Result ; var isLastJob = result . IsLastJob ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . runByUserId ( new Gs2JobQueue . RunByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const result = result . getResult (); const isLastJob = result . getIsLastJob (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . run_by_user_id ( job_queue . RunByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item result = result . result is_last_job = result . is_last_job except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.run_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; result = result.result ; isLastJob = result.isLastJob ; client = gs2 ( 'job_queue' ) api_result_handler = client.run_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; result = result.result ; isLastJob = result.isLastJob ; deleteJob 잡 삭제 요청 사용자의 잡 큐에서 특정 잡을 삭제합니다. 실행 상태와 관계없이 잡이 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 jobName string  UUID ~ 36자 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. Result 타입 설명 item Job 삭제한 잡 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . DeleteJob ( \u0026 job_queue . DeleteJobRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), JobName : pointy . String ( \"job1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\DeleteJobRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e deleteJob ( ( new DeleteJobRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withJobName ( \"job1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.DeleteJobRequest ; import io.gs2.jobQueue.result.DeleteJobResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { DeleteJobResult result = client . deleteJob ( new DeleteJobRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withJobName ( \"job1\" ) ); Job item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . DeleteJobResult \u003e asyncResult = null ; yield return client . DeleteJob ( new Gs2 . Gs2JobQueue . Request . DeleteJobRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithJobName ( \"job1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . deleteJob ( new Gs2JobQueue . DeleteJobRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withJobName ( \"job1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . delete_job ( job_queue . DeleteJobRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_job_name ( 'job1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.delete_job ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , jobName = \"job1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.delete_job_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , jobName = \"job1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteJobByUserId 사용자 ID를 지정하여 잡 삭제 지정한 사용자의 잡 큐에서 특정 잡을 삭제합니다. 실행 상태와 관계없이 잡이 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID jobName string  UUID ~ 36자 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Job 삭제한 잡 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . DeleteJobByUserId ( \u0026 job_queue . DeleteJobByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), JobName : pointy . String ( \"job1\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\DeleteJobByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e deleteJobByUserId ( ( new DeleteJobByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withJobName ( \"job1\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.DeleteJobByUserIdRequest ; import io.gs2.jobQueue.result.DeleteJobByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { DeleteJobByUserIdResult result = client . deleteJobByUserId ( new DeleteJobByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withJobName ( \"job1\" ) . withTimeOffsetToken ( null ) ); Job item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . DeleteJobByUserIdResult \u003e asyncResult = null ; yield return client . DeleteJobByUserId ( new Gs2 . Gs2JobQueue . Request . DeleteJobByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithJobName ( \"job1\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . deleteJobByUserId ( new Gs2JobQueue . DeleteJobByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withJobName ( \"job1\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . delete_job_by_user_id ( job_queue . DeleteJobByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_job_name ( 'job1' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.delete_job_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , jobName = \"job1\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.delete_job_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , jobName = \"job1\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getJobResult 잡 실행 결과 조회 요청 사용자의 특정 잡 실행 결과를 조회합니다. 결과에는 실행된 GS2-Script가 반환한 HTTP 상태 코드와 응답 본문이 포함됩니다. 옵션으로 시도 횟수를 지정하여 특정 재시도의 결과를 조회할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 jobName string  UUID ~ 36자 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. tryNumber int 0 ~ 10000 시도 횟수 Result 타입 설명 item JobResult 잡 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . GetJobResult ( \u0026 job_queue . GetJobResultRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), JobName : pointy . String ( \"job-0001\" ), TryNumber : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\GetJobResultRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e getJobResult ( ( new GetJobResultRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withJobName ( \"job-0001\" ) -\u003e withTryNumber ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.GetJobResultRequest ; import io.gs2.jobQueue.result.GetJobResultResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { GetJobResultResult result = client . getJobResult ( new GetJobResultRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withJobName ( \"job-0001\" ) . withTryNumber ( null ) ); JobResult item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . GetJobResultResult \u003e asyncResult = null ; yield return client . GetJobResult ( new Gs2 . Gs2JobQueue . Request . GetJobResultRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithJobName ( \"job-0001\" ) . WithTryNumber ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . getJobResult ( new Gs2JobQueue . GetJobResultRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withJobName ( \"job-0001\" ) . withTryNumber ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . get_job_result ( job_queue . GetJobResultRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_job_name ( 'job-0001' ) . with_try_number ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.get_job_result ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , jobName = \"job-0001\" , tryNumber = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.get_job_result_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , jobName = \"job-0001\" , tryNumber = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getJobResultByUserId 사용자 ID를 지정하여 잡 실행 결과 조회 지정한 사용자의 특정 잡 실행 결과를 조회합니다. 결과에는 실행된 GS2-Script가 반환한 HTTP 상태 코드와 응답 본문이 포함됩니다. 옵션으로 시도 횟수를 지정하여 특정 재시도의 결과를 조회할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID jobName string  UUID ~ 36자 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. tryNumber int 0 ~ 10000 시도 횟수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item JobResult 잡 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/jobQueue\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := job_queue . Gs2JobQueueRestClient { Session : \u0026 session , } result , err := client . GetJobResultByUserId ( \u0026 job_queue . GetJobResultByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), JobName : pointy . String ( \"job-0001\" ), TryNumber : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\JobQueue\\Gs2JobQueueRestClient ; use Gs2\\JobQueue\\Request\\GetJobResultByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2JobQueueRestClient ( $session ); try { $result = $client -\u003e getJobResultByUserId ( ( new GetJobResultByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withJobName ( \"job-0001\" ) -\u003e withTryNumber ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.jobQueue.rest.Gs2JobQueueRestClient ; import io.gs2.jobQueue.request.GetJobResultByUserIdRequest ; import io.gs2.jobQueue.result.GetJobResultByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2JobQueueRestClient client = new Gs2JobQueueRestClient ( session ); try { GetJobResultByUserIdResult result = client . getJobResultByUserId ( new GetJobResultByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withJobName ( \"job-0001\" ) . withTryNumber ( null ) . withTimeOffsetToken ( null ) ); JobResult item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2JobQueueRestClient ( session ); AsyncResult Gs2 . Gs2JobQueue . Result . GetJobResultByUserIdResult \u003e asyncResult = null ; yield return client . GetJobResultByUserId ( new Gs2 . Gs2JobQueue . Request . GetJobResultByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithJobName ( \"job-0001\" ) . WithTryNumber ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2JobQueue from '@/gs2/jobQueue' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2JobQueue . Gs2JobQueueRestClient ( session ); try { const result = await client . getJobResultByUserId ( new Gs2JobQueue . GetJobResultByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withJobName ( \"job-0001\" ) . withTryNumber ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import job_queue session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = job_queue . Gs2JobQueueRestClient ( session ) try : result = client . get_job_result_by_user_id ( job_queue . GetJobResultByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_job_name ( 'job-0001' ) . with_try_number ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'job_queue' ) api_result = client.get_job_result_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , jobName = \"job-0001\" , tryNumber = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'job_queue' ) api_result_handler = client.get_job_result_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , jobName = \"job-0001\" , tryNumber = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-JobQueue SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-JobQueue SDK API 레퍼런스","url":"/ko/api_reference/job_queue/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 암호화 키 작업의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 암호화·복호화 요청 등 키 사용 내역을 감사하는 데 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Key 암호화 키 GS2 에서 암호화 처리가 필요한 경우 여기서 생성하는 암호화 키의 GRN을 지정해야 합니다. 구체적인 암호화 키의 내용은 GS2 외부로 노출되지 않으며, 안전하게 암호화·복호화 처리를 수행할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 keyId string ※ ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 GitHubApiKey GitHub API 키 GS2 에는 마스터 데이터나 GS2-Deploy 템플릿 파일 등 파일을 업로드하는 인터페이스가 여러 개 있습니다. 이러한 인터페이스에 대해 데이터를 업로드하는 대신, GitHub의 특정 저장소의 특정 브랜치나 태그에서 설정을 반영하는 인터페이스가 제공됩니다. 이 인터페이스를 사용하기 위해 필요한 GitHub의 API 키를 저장합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string ※ ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 GitHub API 키 이름 GitHub API 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 apiKey string  ~ 1024자 API 키 GitHub 저장소에서 마스터 데이터나 GS2-Deploy 템플릿을 가져올 때 API 인증에 사용되는 GitHub 개인 액세스 토큰 또는 fine-grained 토큰입니다. 암호화하여 저장되며 API 응답에 노출되지 않습니다. 최대 1024자입니다. encryptionKeyName string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 key . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.DescribeNamespacesRequest ; import io.gs2.key.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Key . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Key . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . describe_namespaces ( key . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'key' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스를 신규 작성 새로운 키 관리 네임스페이스를 작성합니다. 네임스페이스는 암호화 키와 GitHub API 키의 컨테이너 역할을 합니다. 네임스페이스 내의 암호화 키는 GS2 서비스 전체에서 데이터 암호화·복호화에 사용되며, GitHub API 키는 GitHub 저장소로부터의 마스터 데이터 조작에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 암호화 키 작업의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 암호화·복호화 요청 등 키 사용 내역을 감사하는 데 유용합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 key . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , LogSetting : \u0026 key . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withLogSetting (( new \\Gs2\\Key\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.CreateNamespaceRequest ; import io.gs2.key.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withLogSetting ( new io . gs2 . key . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Key . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithLogSetting ( new Gs2 . Gs2Key . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Key . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withLogSetting ( new Gs2Key . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . create_namespace ( key . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_log_setting ( key . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스 상태 정의 설명 “ACTIVE” 활성 “DELETED” 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 key . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.GetNamespaceStatusRequest ; import io.gs2.key.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Key . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Key . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . get_namespace_status ( key . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'key' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 key . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.GetNamespaceRequest ; import io.gs2.key.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Key . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Key . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . get_namespace ( key . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스를 업데이트 지정된 키 관리 네임스페이스의 설정을 업데이트합니다. 설명이나 로그 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 암호화 키 작업의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 암호화·복호화 요청 등 키 사용 내역을 감사하는 데 유용합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 key . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), LogSetting : \u0026 key . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withLogSetting (( new \\Gs2\\Key\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.UpdateNamespaceRequest ; import io.gs2.key.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withLogSetting ( new io . gs2 . key . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Key . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithLogSetting ( new Gs2 . Gs2Key . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Key . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withLogSetting ( new Gs2Key . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . update_namespace ( key . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_log_setting ( key . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 key . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.DeleteNamespaceRequest ; import io.gs2.key.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Key . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Key . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . delete_namespace ( key . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 key . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.GetServiceVersionRequest ; import io.gs2.key.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Key . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Key . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . get_service_version ( key . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeKeys 암호화 키 목록 조회 지정된 네임스페이스 내 암호화 키의 페이지네이션된 목록을 조회합니다. 트랜잭션 보호나 민감한 설정의 암호화 등, GS2 서비스 전반에서 데이터 암호화·복호화에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 암호화 키 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 암호화 키 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . DescribeKeys ( \u0026 key . DescribeKeysRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\DescribeKeysRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e describeKeys ( ( new DescribeKeysRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.DescribeKeysRequest ; import io.gs2.key.result.DescribeKeysResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { DescribeKeysResult result = client . describeKeys ( new DescribeKeysRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Key \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . DescribeKeysResult \u003e asyncResult = null ; yield return client . DescribeKeys ( new Gs2 . Gs2Key . Request . DescribeKeysRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . describeKeys ( new Gs2Key . DescribeKeysRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . describe_keys ( key . DescribeKeysRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.describe_keys ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'key' ) api_result_handler = client.describe_keys_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createKey 암호화 키를 신규 작성 자동으로 생성된 랜덤 시크릿을 가진 새로운 암호화 키를 작성합니다. 생성된 키는 Encrypt/Decrypt API를 통해 데이터의 암호화·복호화에 사용할 수 있습니다. 시크릿 자체는 API를 통해 공개되지 않으며, 키의 메타데이터(이름, 설명, GRN)만 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 Result 타입 설명 item Key 작성한 암호화 키 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . CreateKey ( \u0026 key . CreateKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"key-0001\" ), Description : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\CreateKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e createKey ( ( new CreateKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"key-0001\" ) -\u003e withDescription ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.CreateKeyRequest ; import io.gs2.key.result.CreateKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { CreateKeyResult result = client . createKey ( new CreateKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"key-0001\" ) . withDescription ( null ) ); Key item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . CreateKeyResult \u003e asyncResult = null ; yield return client . CreateKey ( new Gs2 . Gs2Key . Request . CreateKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"key-0001\" ) . WithDescription ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . createKey ( new Gs2Key . CreateKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"key-0001\" ) . withDescription ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . create_key ( key . CreateKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'key-0001' ) . with_description ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.create_key ({ namespaceName = \"namespace-0001\" , name = \"key-0001\" , description = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.create_key_async ({ namespaceName = \"namespace-0001\" , name = \"key-0001\" , description = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateKey 암호화 키를 업데이트 기존 암호화 키의 설명을 업데이트합니다. 암호화 시크릿은 변경되지 않으며, 메타데이터만 업데이트할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. keyName string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 Result 타입 설명 item Key 업데이트한 암호화 키 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . UpdateKey ( \u0026 key . UpdateKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), KeyName : pointy . String ( \"key-0001\" ), Description : pointy . String ( \"description1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\UpdateKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e updateKey ( ( new UpdateKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withKeyName ( \"key-0001\" ) -\u003e withDescription ( \"description1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.UpdateKeyRequest ; import io.gs2.key.result.UpdateKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { UpdateKeyResult result = client . updateKey ( new UpdateKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) . withDescription ( \"description1\" ) ); Key item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . UpdateKeyResult \u003e asyncResult = null ; yield return client . UpdateKey ( new Gs2 . Gs2Key . Request . UpdateKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithKeyName ( \"key-0001\" ) . WithDescription ( \"description1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . updateKey ( new Gs2Key . UpdateKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) . withDescription ( \"description1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . update_key ( key . UpdateKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_key_name ( 'key-0001' ) . with_description ( 'description1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.update_key ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , description = \"description1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.update_key_async ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , description = \"description1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getKey 암호화 키를 조회 특정 암호화 키의 메타데이터를 조회합니다. 보안상의 이유로 암호화 시크릿은 응답에 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. keyName string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Key 암호화 키 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . GetKey ( \u0026 key . GetKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), KeyName : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\GetKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e getKey ( ( new GetKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withKeyName ( \"key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.GetKeyRequest ; import io.gs2.key.result.GetKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { GetKeyResult result = client . getKey ( new GetKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) ); Key item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . GetKeyResult \u003e asyncResult = null ; yield return client . GetKey ( new Gs2 . Gs2Key . Request . GetKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithKeyName ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . getKey ( new Gs2Key . GetKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . get_key ( key . GetKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_key_name ( 'key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.get_key ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.get_key_async ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteKey 암호화 키를 삭제 지정된 암호화 키와 그 시크릿을 완전히 삭제합니다. 삭제 후에는 이 키로 암호화된 데이터를 복호화할 수 없게 됩니다. 삭제 전에 다른 서비스가 이 키에 의존하고 있지 않은지 확인하세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. keyName string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Key 삭제한 암호화 키 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . DeleteKey ( \u0026 key . DeleteKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), KeyName : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\DeleteKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e deleteKey ( ( new DeleteKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withKeyName ( \"key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.DeleteKeyRequest ; import io.gs2.key.result.DeleteKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { DeleteKeyResult result = client . deleteKey ( new DeleteKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) ); Key item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . DeleteKeyResult \u003e asyncResult = null ; yield return client . DeleteKey ( new Gs2 . Gs2Key . Request . DeleteKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithKeyName ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . deleteKey ( new Gs2Key . DeleteKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . delete_key ( key . DeleteKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_key_name ( 'key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.delete_key ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.delete_key_async ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; encrypt 데이터를 암호화 지정된 암호화 키를 사용하여 제공된 평문 데이터를 암호화합니다. 암호화된 결과는 Base64 인코딩 문자열로 반환됩니다. 최대 데이터 크기는 512KB입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. keyName string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. data string  ~ 524288자 Result 타입 설명 data string 암호화된 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . Encrypt ( \u0026 key . EncryptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), KeyName : pointy . String ( \"key-0001\" ), Data : pointy . String ( \"hoge\" ), } ) if err != nil { panic ( \"error occurred\" ) } data := result . Data use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\EncryptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e encrypt ( ( new EncryptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withKeyName ( \"key-0001\" ) -\u003e withData ( \"hoge\" ) ); $data = $result -\u003e getData (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.EncryptRequest ; import io.gs2.key.result.EncryptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { EncryptResult result = client . encrypt ( new EncryptRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) . withData ( \"hoge\" ) ); String data = result . getData (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . EncryptResult \u003e asyncResult = null ; yield return client . Encrypt ( new Gs2 . Gs2Key . Request . EncryptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithKeyName ( \"key-0001\" ) . WithData ( \"hoge\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var data = result . Data ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . encrypt ( new Gs2Key . EncryptRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) . withData ( \"hoge\" ) ); const data = result . getData (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . encrypt ( key . EncryptRequest () . with_namespace_name ( 'namespace-0001' ) . with_key_name ( 'key-0001' ) . with_data ( 'hoge' ) ) data = result . data except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.encrypt ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , data = \"hoge\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result data = result.data ; client = gs2 ( 'key' ) api_result_handler = client.encrypt_async ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , data = \"hoge\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result data = result.data ; decrypt 데이터를 복호화 지정된 암호화 키를 사용하여 제공된 Base64 인코딩 암호화 데이터를 복호화합니다. 데이터는 동일한 키로 암호화되어 있어야 하며, 그렇지 않으면 복호화에 실패합니다. 원본 평문 데이터를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. keyName string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. data string  ~ 524288자 Result 타입 설명 data string 복호화된 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . Decrypt ( \u0026 key . DecryptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), KeyName : pointy . String ( \"key-0001\" ), Data : pointy . String ( \"hoge\" ), } ) if err != nil { panic ( \"error occurred\" ) } data := result . Data use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\DecryptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e decrypt ( ( new DecryptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withKeyName ( \"key-0001\" ) -\u003e withData ( \"hoge\" ) ); $data = $result -\u003e getData (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.DecryptRequest ; import io.gs2.key.result.DecryptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { DecryptResult result = client . decrypt ( new DecryptRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) . withData ( \"hoge\" ) ); String data = result . getData (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . DecryptResult \u003e asyncResult = null ; yield return client . Decrypt ( new Gs2 . Gs2Key . Request . DecryptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithKeyName ( \"key-0001\" ) . WithData ( \"hoge\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var data = result . Data ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . decrypt ( new Gs2Key . DecryptRequest () . withNamespaceName ( \"namespace-0001\" ) . withKeyName ( \"key-0001\" ) . withData ( \"hoge\" ) ); const data = result . getData (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . decrypt ( key . DecryptRequest () . with_namespace_name ( 'namespace-0001' ) . with_key_name ( 'key-0001' ) . with_data ( 'hoge' ) ) data = result . data except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.decrypt ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , data = \"hoge\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result data = result.data ; client = gs2 ( 'key' ) api_result_handler = client.decrypt_async ({ namespaceName = \"namespace-0001\" , keyName = \"key-0001\" , data = \"hoge\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result data = result.data ; describeGitHubApiKeys GitHub API 키 목록 조회 지정된 네임스페이스에 등록된 GitHub API 키의 페이지네이션된 목록을 조회합니다. GitHub API 키는 다른 GS2 서비스의 UpdateFromGitHub API를 통해 GitHub 저장소로부터 마스터 데이터를 가져오는 데 사용됩니다. API 키의 값은 암호화되어 저장되며, 목록 응답에는 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List GitHub API 키 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . DescribeGitHubApiKeys ( \u0026 key . DescribeGitHubApiKeysRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\DescribeGitHubApiKeysRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e describeGitHubApiKeys ( ( new DescribeGitHubApiKeysRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.DescribeGitHubApiKeysRequest ; import io.gs2.key.result.DescribeGitHubApiKeysResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { DescribeGitHubApiKeysResult result = client . describeGitHubApiKeys ( new DescribeGitHubApiKeysRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List GitHubApiKey \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . DescribeGitHubApiKeysResult \u003e asyncResult = null ; yield return client . DescribeGitHubApiKeys ( new Gs2 . Gs2Key . Request . DescribeGitHubApiKeysRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . describeGitHubApiKeys ( new Gs2Key . DescribeGitHubApiKeysRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . describe_git_hub_api_keys ( key . DescribeGitHubApiKeysRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.describe_git_hub_api_keys ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'key' ) api_result_handler = client.describe_git_hub_api_keys_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createGitHubApiKey GitHub API 키를 신규 작성 지정된 네임스페이스에 새로운 GitHub API 키를 등록합니다. API 키의 값은 저장 전에 지정된 암호화 키(encryptionKeyName)를 사용하여 암호화되어, 안전하게 관리됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 GitHub API 키 이름 GitHub API 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 apiKey string  ~ 1024자 API 키 GitHub 저장소에서 마스터 데이터나 GS2-Deploy 템플릿을 가져올 때 API 인증에 사용되는 GitHub 개인 액세스 토큰 또는 fine-grained 토큰입니다. 암호화하여 저장되며 API 응답에 노출되지 않습니다. 최대 1024자입니다. encryptionKeyName string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GitHubApiKey 생성한 GitHub API 키 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . CreateGitHubApiKey ( \u0026 key . CreateGitHubApiKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"api-key-0001\" ), Description : nil , ApiKey : pointy . String ( \"secret-0001\" ), EncryptionKeyName : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\CreateGitHubApiKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e createGitHubApiKey ( ( new CreateGitHubApiKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"api-key-0001\" ) -\u003e withDescription ( null ) -\u003e withApiKey ( \"secret-0001\" ) -\u003e withEncryptionKeyName ( \"key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.CreateGitHubApiKeyRequest ; import io.gs2.key.result.CreateGitHubApiKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { CreateGitHubApiKeyResult result = client . createGitHubApiKey ( new CreateGitHubApiKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"api-key-0001\" ) . withDescription ( null ) . withApiKey ( \"secret-0001\" ) . withEncryptionKeyName ( \"key-0001\" ) ); GitHubApiKey item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . CreateGitHubApiKeyResult \u003e asyncResult = null ; yield return client . CreateGitHubApiKey ( new Gs2 . Gs2Key . Request . CreateGitHubApiKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"api-key-0001\" ) . WithDescription ( null ) . WithApiKey ( \"secret-0001\" ) . WithEncryptionKeyName ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . createGitHubApiKey ( new Gs2Key . CreateGitHubApiKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"api-key-0001\" ) . withDescription ( null ) . withApiKey ( \"secret-0001\" ) . withEncryptionKeyName ( \"key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . create_git_hub_api_key ( key . CreateGitHubApiKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'api-key-0001' ) . with_description ( None ) . with_api_key ( 'secret-0001' ) . with_encryption_key_name ( 'key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.create_git_hub_api_key ({ namespaceName = \"namespace-0001\" , name = \"api-key-0001\" , description = nil , apiKey = \"secret-0001\" , encryptionKeyName = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.create_git_hub_api_key_async ({ namespaceName = \"namespace-0001\" , name = \"api-key-0001\" , description = nil , apiKey = \"secret-0001\" , encryptionKeyName = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGitHubApiKey GitHub API 키를 업데이트 기존 GitHub API 키의 설정을 업데이트합니다. 설명, API 키의 값, 저장에 사용할 암호화 키를 변경할 수 있습니다. 새로운 API 키의 값은 지정된 암호화 키로 재암호화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. apiKeyName string  ~ 128자 GitHub API 키 이름 GitHub API 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 apiKey string  ~ 1024자 API 키 GitHub 저장소에서 마스터 데이터나 GS2-Deploy 템플릿을 가져올 때 API 인증에 사용되는 GitHub 개인 액세스 토큰 또는 fine-grained 토큰입니다. 암호화하여 저장되며 API 응답에 노출되지 않습니다. 최대 1024자입니다. encryptionKeyName string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GitHubApiKey 갱신한 GitHub API 키 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . UpdateGitHubApiKey ( \u0026 key . UpdateGitHubApiKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ApiKeyName : pointy . String ( \"api-key-0001\" ), Description : pointy . String ( \"description1\" ), ApiKey : pointy . String ( \"secret-0004\" ), EncryptionKeyName : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\UpdateGitHubApiKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e updateGitHubApiKey ( ( new UpdateGitHubApiKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withApiKeyName ( \"api-key-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withApiKey ( \"secret-0004\" ) -\u003e withEncryptionKeyName ( \"key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.UpdateGitHubApiKeyRequest ; import io.gs2.key.result.UpdateGitHubApiKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { UpdateGitHubApiKeyResult result = client . updateGitHubApiKey ( new UpdateGitHubApiKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withApiKeyName ( \"api-key-0001\" ) . withDescription ( \"description1\" ) . withApiKey ( \"secret-0004\" ) . withEncryptionKeyName ( \"key-0001\" ) ); GitHubApiKey item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . UpdateGitHubApiKeyResult \u003e asyncResult = null ; yield return client . UpdateGitHubApiKey ( new Gs2 . Gs2Key . Request . UpdateGitHubApiKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithApiKeyName ( \"api-key-0001\" ) . WithDescription ( \"description1\" ) . WithApiKey ( \"secret-0004\" ) . WithEncryptionKeyName ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . updateGitHubApiKey ( new Gs2Key . UpdateGitHubApiKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withApiKeyName ( \"api-key-0001\" ) . withDescription ( \"description1\" ) . withApiKey ( \"secret-0004\" ) . withEncryptionKeyName ( \"key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . update_git_hub_api_key ( key . UpdateGitHubApiKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_api_key_name ( 'api-key-0001' ) . with_description ( 'description1' ) . with_api_key ( 'secret-0004' ) . with_encryption_key_name ( 'key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.update_git_hub_api_key ({ namespaceName = \"namespace-0001\" , apiKeyName = \"api-key-0001\" , description = \"description1\" , apiKey = \"secret-0004\" , encryptionKeyName = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.update_git_hub_api_key_async ({ namespaceName = \"namespace-0001\" , apiKeyName = \"api-key-0001\" , description = \"description1\" , apiKey = \"secret-0004\" , encryptionKeyName = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGitHubApiKey GitHub API 키를 조회 특정 GitHub API 키의 메타데이터를 조회합니다. 보안상의 이유로 실제 API 키의 값은 응답에 포함되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. apiKeyName string  ~ 128자 GitHub API 키 이름 GitHub API 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GitHubApiKey GitHub API 키 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . GetGitHubApiKey ( \u0026 key . GetGitHubApiKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ApiKeyName : pointy . String ( \"api-key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\GetGitHubApiKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e getGitHubApiKey ( ( new GetGitHubApiKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withApiKeyName ( \"api-key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.GetGitHubApiKeyRequest ; import io.gs2.key.result.GetGitHubApiKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { GetGitHubApiKeyResult result = client . getGitHubApiKey ( new GetGitHubApiKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withApiKeyName ( \"api-key-0001\" ) ); GitHubApiKey item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . GetGitHubApiKeyResult \u003e asyncResult = null ; yield return client . GetGitHubApiKey ( new Gs2 . Gs2Key . Request . GetGitHubApiKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithApiKeyName ( \"api-key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . getGitHubApiKey ( new Gs2Key . GetGitHubApiKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withApiKeyName ( \"api-key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . get_git_hub_api_key ( key . GetGitHubApiKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_api_key_name ( 'api-key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.get_git_hub_api_key ({ namespaceName = \"namespace-0001\" , apiKeyName = \"api-key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.get_git_hub_api_key_async ({ namespaceName = \"namespace-0001\" , apiKeyName = \"api-key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGitHubApiKey GitHub API 키 삭제 지정된 GitHub API 키와 암호화된 값을 완전히 삭제합니다. 삭제 후, 이 API 키를 참조하여 GitHub 마스터 데이터 갱신을 수행하는 서비스는 GitHub 저장소에 접근할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. apiKeyName string  ~ 128자 GitHub API 키 이름 GitHub API 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GitHubApiKey 삭제한 GitHub API 키 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/key\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := key . Gs2KeyRestClient { Session : \u0026 session , } result , err := client . DeleteGitHubApiKey ( \u0026 key . DeleteGitHubApiKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ApiKeyName : pointy . String ( \"api-key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Key\\Gs2KeyRestClient ; use Gs2\\Key\\Request\\DeleteGitHubApiKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2KeyRestClient ( $session ); try { $result = $client -\u003e deleteGitHubApiKey ( ( new DeleteGitHubApiKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withApiKeyName ( \"api-key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.key.rest.Gs2KeyRestClient ; import io.gs2.key.request.DeleteGitHubApiKeyRequest ; import io.gs2.key.result.DeleteGitHubApiKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2KeyRestClient client = new Gs2KeyRestClient ( session ); try { DeleteGitHubApiKeyResult result = client . deleteGitHubApiKey ( new DeleteGitHubApiKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withApiKeyName ( \"api-key-0001\" ) ); GitHubApiKey item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2KeyRestClient ( session ); AsyncResult Gs2 . Gs2Key . Result . DeleteGitHubApiKeyResult \u003e asyncResult = null ; yield return client . DeleteGitHubApiKey ( new Gs2 . Gs2Key . Request . DeleteGitHubApiKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithApiKeyName ( \"api-key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Key from '@/gs2/key' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Key . Gs2KeyRestClient ( session ); try { const result = await client . deleteGitHubApiKey ( new Gs2Key . DeleteGitHubApiKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withApiKeyName ( \"api-key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = key . Gs2KeyRestClient ( session ) try : result = client . delete_git_hub_api_key ( key . DeleteGitHubApiKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_api_key_name ( 'api-key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'key' ) api_result = client.delete_git_hub_api_key ({ namespaceName = \"namespace-0001\" , apiKeyName = \"api-key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'key' ) api_result_handler = client.delete_git_hub_api_key_async ({ namespaceName = \"namespace-0001\" , apiKeyName = \"api-key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Key SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Key SDK API 레퍼런스","url":"/ko/api_reference/key/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 카운트업이나 카운터 리셋 등 사용 횟수 제한 조작 시 트랜잭션 처리 방식을 제어하는 설정입니다. countUpScript ScriptSetting 카운트업 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - countUp logSetting LogSetting 로그 출력 설정 사용 횟수 제한 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그나 분석을 위해 카운터의 증가, 리셋, 제한 확인을 추적하는 데 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Counter 사용 횟수 제한의 현재 값 각 사용자의 사용 횟수 제한 모델에 속한 특정 카운터의 현재 사용 횟수를 추적합니다. 하나의 사용 횟수 제한 모델 아래에 여러 카운터를 만들 수 있습니다(예: 1회 한정 보상을 위해 퀘스트마다 하나의 카운터). 카운트 값은 카운트업 조작 시 지정되는 최대값과 비교되며, 사용 횟수 제한 모델의 리셋 일정에 따라 자동으로 0으로 리셋됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 counterId string ※ ~ 1024자 카운터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. name string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. userId string  ~ 128자 사용자ID count int 0 0 ~ 2147483646 카운트 값 이 카운터의 현재 사용 횟수입니다. countUp 조작으로 증가하며, 이때 지정된 최대값과 비교됩니다. 사용 횟수 제한 모델의 리셋 시점에 도달하면 자동으로 0으로 리셋됩니다. nextResetAt long 다음 리셋 시점 사용 횟수 제한 모델의 리셋 일정으로부터 계산된, 이 카운터가 다음에 0으로 리셋되는 타임스탬프입니다. “notReset” 타입인 경우 이 값은 설정되지 않습니다. 각 리셋이 발생한 후 자동으로 다시 계산됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 LimitModel 횟수 제한 모델 횟수 제한 모델에는 사용 횟수를 리셋하는 타이밍을 설정할 수 있습니다. 리셋 간격은 “매일”, “매주”, “매월”, “리셋하지 않음”, “일정 일수마다” 5가지 중에서 선택할 수 있습니다. 또한, 횟수 제한의 최대값은 마스터 데이터 쪽에서는 고정하지 않습니다. 이는 게임 내 컨텍스트에 따라 허용되는 최대 횟수를 동적으로 변경할 수 있도록 하기 위함입니다. 예를 들어 스텝업 가챠처럼, 구매 횟수 카운터가 3회 미만일 때 구매할 수 있는 상품 위 상품을 구매할 수 없을 때, 구매 횟수 카운터가 5회 미만이면 구매할 수 있는 다른 상품 과 같이, 상황에 따라 “최대 횟수\"를 전환할 수 있는 설계를 상정하고 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 limitModelId string ※ ~ 1024자 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” }  리셋 타이밍 이 횟수 제한 모델 하위의 카운터 값이 자동으로 0으로 리셋되는 타이밍을 결정합니다. notReset(영구적, 리셋 없음), daily(매일 지정된 시각에 리셋), weekly(지정된 요일에 리셋), monthly(지정된 날짜에 리셋), days(기준 일시로부터 일정 일수마다 리셋) 중에서 선택합니다. 모든 시각은 UTC입니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋 날짜 resetType이 “monthly\"인 경우 카운터가 리셋되는 날짜(일)입니다. 1~31 사이의 값이 유효합니다. 지정한 날짜가 해당 월의 일수를 초과하는 경우(예: 2월의 31일), 해당 월의 마지막 날에 리셋됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋 요일 resetType이 “weekly\"인 경우 카운터가 리셋되는 요일입니다. 이 요일의 resetHour(UTC)로 지정된 시각에 리셋됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 daily, weekly, monthly 리셋 타입에서 카운터가 리셋되는 UTC 시각(0~23)입니다. 예를 들어 값이 0이면 UTC 자정에 카운터가 리셋됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋 일수 resetType이 “days\"인 경우 카운터 리셋 간격(일수)입니다. 리셋 주기는 anchorTimestamp를 기준으로 계산됩니다. 예를 들어 days가 7이고 anchorTimestamp가 월요일 정오라면, 매주 월요일 정오에 카운터가 리셋됩니다. ※ resetType이(가) “days” 이면 필수 CurrentLimitMaster 현재 활성화된 사용 횟수 제한 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 사용 횟수 제한 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Limit 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 LimitModelMaster 사용 횟수 제한 모델 마스터 사용 횟수 제한 모델 마스터는 게임 내에서 사용되는 사용 횟수 제한 모델을 편집·관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행하면 실제로 게임에서 참조되는 사용 횟수 제한 모델로 반영됩니다. 사용 횟수 제한에는 사용 횟수를 리셋하는 시점을 설정할 수 있습니다. 리셋 간격은 「매일」「매주」「매월」「일정 일수」「리셋 안 함」의 5종류 중에서 선택할 수 있습니다. 또한 여기서 지정하는 시각은 모두 협정 세계시(UTC)입니다. 또한 사용 횟수 제한의 최대값은 마스터 데이터 쪽에서 고정하지 않습니다. 이는 게임 내 상황에 따라 허용되는 최대 횟수를 동적으로 변경할 수 있도록 하기 위함입니다. 예를 들어 스텝업 가챠처럼, 구매 횟수 카운터가 3회 미만인 경우 구매할 수 있는 상품 위 상품을 구매할 수 없는 경우, 구매 횟수 카운터가 5회 미만이면 구매할 수 있는 다른 상품 이처럼 상황에 따라 「최대 횟수」를 전환할 수 있는 설계를 상정하고 있습니다. 또한 이 사용 횟수 제한 모델에 연결된 카운터는 여러 개 만들 수 있습니다. 예를 들어 「한 번만 받을 수 있는 퀘스트 보상」이 여러 개 있는 경우, 퀘스트마다 개별 사용 횟수 제한 모델을 만들 필요 없이 하나의 사용 횟수 제한 모델을 공유하고 퀘스트마다 카운터만 나누어 생성함으로써 설정 종류가 과도하게 늘어나는 것을 방지할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 limitModelId string ※ ~ 1024자 횟수 제한 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 사용 횟수 제한 모델 이름 사용 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” }  리셋 타이밍 이 횟수 제한 모델 하위의 카운터 값이 자동으로 0으로 리셋되는 타이밍을 결정합니다. notReset(영구적, 리셋 없음), daily(매일 지정된 시각에 리셋), weekly(지정된 요일에 리셋), monthly(지정된 날짜에 리셋), days(기준 일시로부터 일정 일수마다 리셋) 중에서 선택합니다. 모든 시각은 UTC입니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋 날짜 resetType이 “monthly\"인 경우 카운터가 리셋되는 날짜(일)입니다. 1~31 사이의 값이 유효합니다. 지정한 날짜가 해당 월의 일수를 초과하는 경우(예: 2월의 31일), 해당 월의 마지막 날에 리셋됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋 요일 resetType이 “weekly\"인 경우 카운터가 리셋되는 요일입니다. 이 요일의 resetHour(UTC)로 지정된 시각에 리셋됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 daily, weekly, monthly 리셋 타입에서 카운터가 리셋되는 UTC 시각(0~23)입니다. 예를 들어 값이 0이면 UTC 자정에 카운터가 리셋됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋 일수 resetType이 “days\"인 경우 카운터 리셋 간격(일수)입니다. 리셋 주기는 anchorTimestamp를 기준으로 계산됩니다. 예를 들어 days가 7이고 anchorTimestamp가 월요일 정오라면, 매주 월요일 정오에 카운터가 리셋됩니다. ※ resetType이(가) “days” 이면 필수 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 limit . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DescribeNamespacesRequest ; import io.gs2.limit.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Limit . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Limit . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . describe_namespaces ( limit . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'limit' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 카운트업이나 카운터 리셋 등 사용 횟수 제한 조작 시 트랜잭션 처리 방식을 제어하는 설정입니다. countUpScript ScriptSetting 카운트업 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - countUp logSetting LogSetting 로그 출력 설정 사용 횟수 제한 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그나 분석을 위해 카운터의 증가, 리셋, 제한 확인을 추적하는 데 유용합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 limit . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , CountUpScript : nil , LogSetting : \u0026 limit . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withCountUpScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Limit\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CreateNamespaceRequest ; import io.gs2.limit.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withCountUpScript ( null ) . withLogSetting ( new io . gs2 . limit . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Limit . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithCountUpScript ( null ) . WithLogSetting ( new Gs2 . Gs2Limit . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Limit . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withCountUpScript ( null ) . withLogSetting ( new Gs2Limit . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . create_namespace ( limit . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_count_up_script ( None ) . with_log_setting ( limit . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , countUpScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , countUpScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 limit . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.GetNamespaceStatusRequest ; import io.gs2.limit.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Limit . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Limit . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . get_namespace_status ( limit . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'limit' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 limit . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.GetNamespaceRequest ; import io.gs2.limit.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Limit . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Limit . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . get_namespace ( limit . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 카운트업이나 카운터 리셋 등 사용 횟수 제한 조작 시 트랜잭션 처리 방식을 제어하는 설정입니다. countUpScript ScriptSetting 카운트업 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - countUp logSetting LogSetting 로그 출력 설정 사용 횟수 제한 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그나 분석을 위해 카운터의 증가, 리셋, 제한 확인을 추적하는 데 유용합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 limit . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , CountUpScript : nil , LogSetting : \u0026 limit . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withCountUpScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Limit\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.UpdateNamespaceRequest ; import io.gs2.limit.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withCountUpScript ( null ) . withLogSetting ( new io . gs2 . limit . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Limit . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithCountUpScript ( null ) . WithLogSetting ( new Gs2 . Gs2Limit . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Limit . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withCountUpScript ( null ) . withLogSetting ( new Gs2Limit . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . update_namespace ( limit . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_count_up_script ( None ) . with_log_setting ( limit . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , countUpScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , countUpScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 limit . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DeleteNamespaceRequest ; import io.gs2.limit.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Limit . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Limit . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . delete_namespace ( limit . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 limit . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.GetServiceVersionRequest ; import io.gs2.limit.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Limit . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Limit . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . get_service_version ( limit . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 limit . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DumpUserDataByUserIdRequest ; import io.gs2.limit.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Limit . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Limit . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . dump_user_data_by_user_id ( limit . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'limit' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 limit . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.limit.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Limit . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Limit . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( limit . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'limit' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 limit . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CleanUserDataByUserIdRequest ; import io.gs2.limit.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Limit . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Limit . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . clean_user_data_by_user_id ( limit . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'limit' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 limit . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.limit.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Limit . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Limit . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( limit . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'limit' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 limit . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.limit.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Limit . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Limit . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( limit . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'limit' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 limit . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.ImportUserDataByUserIdRequest ; import io.gs2.limit.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Limit . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Limit . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . import_user_data_by_user_id ( limit . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'limit' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 limit . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CheckImportUserDataByUserIdRequest ; import io.gs2.limit.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Limit . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Limit . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( limit . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'limit' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeCounters 카운터 목록 조회 요청한 사용자의 카운터 페이지네이션 목록을 조회합니다. 횟수 제한 모델명으로 필터링하여 특정 모델의 카운터만 조회할 수 있습니다. 각 카운터는 특정 액션이 실행된 횟수를 추적합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 limitName string ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 카운터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DescribeCounters ( \u0026 limit . DescribeCountersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), LimitName : pointy . String ( \"daily\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DescribeCountersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e describeCounters ( ( new DescribeCountersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DescribeCountersRequest ; import io.gs2.limit.result.DescribeCountersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DescribeCountersResult result = client . describeCounters ( new DescribeCountersRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withLimitName ( \"daily\" ) . withPageToken ( null ) . withLimit ( null ) ); List Counter \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DescribeCountersResult \u003e asyncResult = null ; yield return client . DescribeCounters ( new Gs2 . Gs2Limit . Request . DescribeCountersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithLimitName ( \"daily\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . describeCounters ( new Gs2Limit . DescribeCountersRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withLimitName ( \"daily\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . describe_counters ( limit . DescribeCountersRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_limit_name ( 'daily' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.describe_counters ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , limitName = \"daily\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'limit' ) api_result_handler = client.describe_counters_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , limitName = \"daily\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeCountersByUserId 사용자 ID를 지정하여 카운터 목록 조회 지정된 사용자의 카운터 페이지네이션 목록을 조회합니다. 횟수 제한 모델명으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID limitName string ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 카운터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DescribeCountersByUserId ( \u0026 limit . DescribeCountersByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), LimitName : pointy . String ( \"daily\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DescribeCountersByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e describeCountersByUserId ( ( new DescribeCountersByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DescribeCountersByUserIdRequest ; import io.gs2.limit.result.DescribeCountersByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DescribeCountersByUserIdResult result = client . describeCountersByUserId ( new DescribeCountersByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withLimitName ( \"daily\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Counter \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DescribeCountersByUserIdResult \u003e asyncResult = null ; yield return client . DescribeCountersByUserId ( new Gs2 . Gs2Limit . Request . DescribeCountersByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithLimitName ( \"daily\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . describeCountersByUserId ( new Gs2Limit . DescribeCountersByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withLimitName ( \"daily\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . describe_counters_by_user_id ( limit . DescribeCountersByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_limit_name ( 'daily' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.describe_counters_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , limitName = \"daily\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'limit' ) api_result_handler = client.describe_counters_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , limitName = \"daily\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getCounter 카운터 조회 지정된 횟수 제한 모델과 카운터명에 대한 요청 사용자의 카운터를 조회합니다. 현재 카운트 값을 반환합니다. 카운터가 존재하지 않는 경우 데이터는 반환되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. accessToken string  ~ 128자 액세스 토큰 counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. Result 타입 설명 item Counter 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . GetCounter ( \u0026 limit . GetCounterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"daily\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CounterName : pointy . String ( \"counter1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\GetCounterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e getCounter ( ( new GetCounterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCounterName ( \"counter1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.GetCounterRequest ; import io.gs2.limit.result.GetCounterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { GetCounterResult result = client . getCounter ( new GetCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withAccessToken ( \"accessToken-0001\" ) . withCounterName ( \"counter1\" ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . GetCounterResult \u003e asyncResult = null ; yield return client . GetCounter ( new Gs2 . Gs2Limit . Request . GetCounterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"daily\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCounterName ( \"counter1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . getCounter ( new Gs2Limit . GetCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withAccessToken ( \"accessToken-0001\" ) . withCounterName ( \"counter1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . get_counter ( limit . GetCounterRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'daily' ) . with_access_token ( 'accessToken-0001' ) . with_counter_name ( 'counter1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.get_counter ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , accessToken = \"accessToken-0001\" , counterName = \"counter1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.get_counter_async ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , accessToken = \"accessToken-0001\" , counterName = \"counter1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCounterByUserId 사용자 ID를 지정하여 카운터 조회 지정된 횟수 제한 모델과 카운터명에 대한 사용자의 카운터를 조회합니다. 현재 카운트 값을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. userId string  ~ 128자 사용자ID counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . GetCounterByUserId ( \u0026 limit . GetCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"daily\" ), UserId : pointy . String ( \"user-0001\" ), CounterName : pointy . String ( \"counter2\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\GetCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e getCounterByUserId ( ( new GetCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCounterName ( \"counter2\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.GetCounterByUserIdRequest ; import io.gs2.limit.result.GetCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { GetCounterByUserIdResult result = client . getCounterByUserId ( new GetCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"counter2\" ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . GetCounterByUserIdResult \u003e asyncResult = null ; yield return client . GetCounterByUserId ( new Gs2 . Gs2Limit . Request . GetCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"daily\" ) . WithUserId ( \"user-0001\" ) . WithCounterName ( \"counter2\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . getCounterByUserId ( new Gs2Limit . GetCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"counter2\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . get_counter_by_user_id ( limit . GetCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'daily' ) . with_user_id ( 'user-0001' ) . with_counter_name ( 'counter2' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.get_counter_by_user_id ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , userId = \"user-0001\" , counterName = \"counter2\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.get_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , userId = \"user-0001\" , counterName = \"counter2\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; countUp 카운트업 요청한 사용자의 카운터를 지정된 카운트업 값만큼 증가시킵니다. maxValue가 지정된 경우, 카운터는 해당 상한을 초과하지 않습니다. 작업이 최대값을 초과하는 경우 Overflow 오류가 반환됩니다. 카운터가 아직 존재하지 않는 경우, 카운트 0으로 자동 생성된 후 증가합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. accessToken string  ~ 128자 액세스 토큰 countUpValue int 1 1 ~ 2147483646 카운트업할 양 maxValue int 1 ~ 2147483646 카운트업을 허용하는 최댓값 Result 타입 설명 item Counter 카운트를 증가시킨 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CountUp ( \u0026 limit . CountUpRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"daily\" ), CounterName : pointy . String ( \"counter1\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CountUpValue : pointy . Int32 ( 1 ), MaxValue : pointy . Int32 ( 100 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CountUpRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e countUp ( ( new CountUpRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withCounterName ( \"counter1\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCountUpValue ( 1 ) -\u003e withMaxValue ( 100 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CountUpRequest ; import io.gs2.limit.result.CountUpResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CountUpResult result = client . countUp ( new CountUpRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter1\" ) . withAccessToken ( \"accessToken-0001\" ) . withCountUpValue ( 1 ) . withMaxValue ( 100 ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CountUpResult \u003e asyncResult = null ; yield return client . CountUp ( new Gs2 . Gs2Limit . Request . CountUpRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"daily\" ) . WithCounterName ( \"counter1\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCountUpValue ( 1 ) . WithMaxValue ( 100 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . countUp ( new Gs2Limit . CountUpRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter1\" ) . withAccessToken ( \"accessToken-0001\" ) . withCountUpValue ( 1 ) . withMaxValue ( 100 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . count_up ( limit . CountUpRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'daily' ) . with_counter_name ( 'counter1' ) . with_access_token ( 'accessToken-0001' ) . with_count_up_value ( 1 ) . with_max_value ( 100 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.count_up ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , counterName = \"counter1\" , accessToken = \"accessToken-0001\" , countUpValue = 1 , maxValue = 100 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.count_up_async ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , counterName = \"counter1\" , accessToken = \"accessToken-0001\" , countUpValue = 1 , maxValue = 100 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; countUpByUserId 사용자 ID를 지정하여 카운트업 지정된 사용자의 카운터를 지정된 카운트업 값만큼 증가시킵니다. maxValue가 지정된 경우, 카운터는 해당 상한을 초과하지 않습니다. 작업이 최대값을 초과하는 경우 Overflow 오류가 반환됩니다. 카운터가 아직 존재하지 않는 경우, 자동으로 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. userId string  ~ 128자 사용자ID countUpValue int 1 1 ~ 2147483646 카운트업할 양 maxValue int 1 ~ 2147483646 카운트업을 허용하는 최댓값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 카운트를 증가시킨 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CountUpByUserId ( \u0026 limit . CountUpByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"daily\" ), CounterName : pointy . String ( \"counter2\" ), UserId : pointy . String ( \"user-0001\" ), CountUpValue : pointy . Int32 ( 2 ), MaxValue : pointy . Int32 ( 100 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CountUpByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e countUpByUserId ( ( new CountUpByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withCounterName ( \"counter2\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCountUpValue ( 2 ) -\u003e withMaxValue ( 100 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CountUpByUserIdRequest ; import io.gs2.limit.result.CountUpByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CountUpByUserIdResult result = client . countUpByUserId ( new CountUpByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter2\" ) . withUserId ( \"user-0001\" ) . withCountUpValue ( 2 ) . withMaxValue ( 100 ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CountUpByUserIdResult \u003e asyncResult = null ; yield return client . CountUpByUserId ( new Gs2 . Gs2Limit . Request . CountUpByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"daily\" ) . WithCounterName ( \"counter2\" ) . WithUserId ( \"user-0001\" ) . WithCountUpValue ( 2 ) . WithMaxValue ( 100 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . countUpByUserId ( new Gs2Limit . CountUpByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter2\" ) . withUserId ( \"user-0001\" ) . withCountUpValue ( 2 ) . withMaxValue ( 100 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . count_up_by_user_id ( limit . CountUpByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'daily' ) . with_counter_name ( 'counter2' ) . with_user_id ( 'user-0001' ) . with_count_up_value ( 2 ) . with_max_value ( 100 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.count_up_by_user_id ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , counterName = \"counter2\" , userId = \"user-0001\" , countUpValue = 2 , maxValue = 100 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.count_up_by_user_id_async ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , counterName = \"counter2\" , userId = \"user-0001\" , countUpValue = 2 , maxValue = 100 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; countDownByUserId 사용자 ID를 지정하여 카운트다운 지정된 사용자의 카운터를 지정된 카운트다운 값만큼 감소시킵니다. 카운터 값은 0 미만으로 내려가지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. userId string  ~ 128자 사용자ID countDownValue int 1 1 ~ 2147483646 카운트다운할 양 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 카운트를 감소시킨 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CountDownByUserId ( \u0026 limit . CountDownByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"daily\" ), CounterName : pointy . String ( \"counter2\" ), UserId : pointy . String ( \"user-0001\" ), CountDownValue : pointy . Int32 ( 2 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CountDownByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e countDownByUserId ( ( new CountDownByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withCounterName ( \"counter2\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCountDownValue ( 2 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CountDownByUserIdRequest ; import io.gs2.limit.result.CountDownByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CountDownByUserIdResult result = client . countDownByUserId ( new CountDownByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter2\" ) . withUserId ( \"user-0001\" ) . withCountDownValue ( 2 ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CountDownByUserIdResult \u003e asyncResult = null ; yield return client . CountDownByUserId ( new Gs2 . Gs2Limit . Request . CountDownByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"daily\" ) . WithCounterName ( \"counter2\" ) . WithUserId ( \"user-0001\" ) . WithCountDownValue ( 2 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . countDownByUserId ( new Gs2Limit . CountDownByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter2\" ) . withUserId ( \"user-0001\" ) . withCountDownValue ( 2 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . count_down_by_user_id ( limit . CountDownByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'daily' ) . with_counter_name ( 'counter2' ) . with_user_id ( 'user-0001' ) . with_count_down_value ( 2 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.count_down_by_user_id ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , counterName = \"counter2\" , userId = \"user-0001\" , countDownValue = 2 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.count_down_by_user_id_async ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , counterName = \"counter2\" , userId = \"user-0001\" , countDownValue = 2 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCounterByUserId 사용자 ID를 지정하여 카운터 삭제 지정된 사용자의 카운터를 삭제하고 사용 횟수를 리셋합니다. 이를 통해 이 카운터에 대한 횟수 제한이 실질적으로 해제되어, 사용자는 다시 0부터 카운트를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. userId string  ~ 128자 사용자ID counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 삭제한 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DeleteCounterByUserId ( \u0026 limit . DeleteCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"daily\" ), UserId : pointy . String ( \"user-0001\" ), CounterName : pointy . String ( \"counter1\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DeleteCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e deleteCounterByUserId ( ( new DeleteCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCounterName ( \"counter1\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DeleteCounterByUserIdRequest ; import io.gs2.limit.result.DeleteCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DeleteCounterByUserIdResult result = client . deleteCounterByUserId ( new DeleteCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"counter1\" ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DeleteCounterByUserIdResult \u003e asyncResult = null ; yield return client . DeleteCounterByUserId ( new Gs2 . Gs2Limit . Request . DeleteCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"daily\" ) . WithUserId ( \"user-0001\" ) . WithCounterName ( \"counter1\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . deleteCounterByUserId ( new Gs2Limit . DeleteCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"daily\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"counter1\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . delete_counter_by_user_id ( limit . DeleteCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'daily' ) . with_user_id ( 'user-0001' ) . with_counter_name ( 'counter1' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.delete_counter_by_user_id ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , userId = \"user-0001\" , counterName = \"counter1\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.delete_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , limitName = \"daily\" , userId = \"user-0001\" , counterName = \"counter1\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyCounter 카운터 값 검증 요청한 사용자의 카운터 값이 지정된 조건을 충족하는지 검증합니다. less, lessEqual, greater, greaterEqual, equal, notEqual의 6가지 비교 연산자를 지원합니다. 조건이 충족되지 않는 경우, 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 카운터 값이 지정 값 미만일 것 lessEqual 카운터 값이 지정 값 이하일 것 greater 카운터 값이 지정 값을 초과할 것 greaterEqual 카운터 값이 지정 값 이상일 것 equal 카운터 값이 지정 값과 일치할 것 notEqual 카운터 값이 지정 값과 일치하지 않을 것 count int 0 0 ~ 2147483646 카운트 값 이 카운터의 현재 사용 횟수입니다. countUp 조작으로 증가하며, 이때 지정된 최대값과 비교됩니다. 사용 횟수 제한 모델의 리셋 시점에 도달하면 자동으로 0으로 리셋됩니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Counter 삭제한 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . VerifyCounter ( \u0026 limit . VerifyCounterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), LimitName : pointy . String ( \"daily\" ), CounterName : pointy . String ( \"counter2\" ), VerifyType : pointy . String ( \"less\" ), Count : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\VerifyCounterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e verifyCounter ( ( new VerifyCounterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withCounterName ( \"counter2\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withCount ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.VerifyCounterRequest ; import io.gs2.limit.result.VerifyCounterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { VerifyCounterResult result = client . verifyCounter ( new VerifyCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter2\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . VerifyCounterResult \u003e asyncResult = null ; yield return client . VerifyCounter ( new Gs2 . Gs2Limit . Request . VerifyCounterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithLimitName ( \"daily\" ) . WithCounterName ( \"counter2\" ) . WithVerifyType ( \"less\" ) . WithCount ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . verifyCounter ( new Gs2Limit . VerifyCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter2\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . verify_counter ( limit . VerifyCounterRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_limit_name ( 'daily' ) . with_counter_name ( 'counter2' ) . with_verify_type ( 'less' ) . with_count ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.verify_counter ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , limitName = \"daily\" , counterName = \"counter2\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.verify_counter_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , limitName = \"daily\" , counterName = \"counter2\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyCounterByUserId 사용자 ID를 지정하여 카운터 값 검증 지정된 사용자의 카운터 값이 지정된 조건을 충족하는지 검증합니다. less, lessEqual, greater, greaterEqual, equal, notEqual의 6가지 비교 연산자를 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 카운터 값이 지정 값 미만일 것 lessEqual 카운터 값이 지정 값 이하일 것 greater 카운터 값이 지정 값을 초과할 것 greaterEqual 카운터 값이 지정 값 이상일 것 equal 카운터 값이 지정 값과 일치할 것 notEqual 카운터 값이 지정 값과 일치하지 않을 것 count int 0 0 ~ 2147483646 카운트 값 이 카운터의 현재 사용 횟수입니다. countUp 조작으로 증가하며, 이때 지정된 최대값과 비교됩니다. 사용 횟수 제한 모델의 리셋 시점에 도달하면 자동으로 0으로 리셋됩니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 삭제한 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . VerifyCounterByUserId ( \u0026 limit . VerifyCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), LimitName : pointy . String ( \"daily\" ), CounterName : pointy . String ( \"counter2\" ), VerifyType : pointy . String ( \"less\" ), Count : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\VerifyCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e verifyCounterByUserId ( ( new VerifyCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withLimitName ( \"daily\" ) -\u003e withCounterName ( \"counter2\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withCount ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.VerifyCounterByUserIdRequest ; import io.gs2.limit.result.VerifyCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { VerifyCounterByUserIdResult result = client . verifyCounterByUserId ( new VerifyCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter2\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . VerifyCounterByUserIdResult \u003e asyncResult = null ; yield return client . VerifyCounterByUserId ( new Gs2 . Gs2Limit . Request . VerifyCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithLimitName ( \"daily\" ) . WithCounterName ( \"counter2\" ) . WithVerifyType ( \"less\" ) . WithCount ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . verifyCounterByUserId ( new Gs2Limit . VerifyCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withLimitName ( \"daily\" ) . withCounterName ( \"counter2\" ) . withVerifyType ( \"less\" ) . withCount ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . verify_counter_by_user_id ( limit . VerifyCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_limit_name ( 'daily' ) . with_counter_name ( 'counter2' ) . with_verify_type ( 'less' ) . with_count ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.verify_counter_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , limitName = \"daily\" , counterName = \"counter2\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.verify_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , limitName = \"daily\" , counterName = \"counter2\" , verifyType = \"less\" , count = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeLimitModels 횟수 제한 모델 리스트 조회 현재 활성화된 횟수 제한 모델의 리스트를 가져옵니다. 모델은 카운터의 리셋 타이밍(리셋 없음, 일별, 주별, 월별 등)과 관련 설정을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 횟수 제한 모델의 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DescribeLimitModels ( \u0026 limit . DescribeLimitModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DescribeLimitModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e describeLimitModels ( ( new DescribeLimitModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DescribeLimitModelsRequest ; import io.gs2.limit.result.DescribeLimitModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DescribeLimitModelsResult result = client . describeLimitModels ( new DescribeLimitModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List LimitModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DescribeLimitModelsResult \u003e asyncResult = null ; yield return client . DescribeLimitModels ( new Gs2 . Gs2Limit . Request . DescribeLimitModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . describeLimitModels ( new Gs2Limit . DescribeLimitModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . describe_limit_models ( limit . DescribeLimitModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.describe_limit_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'limit' ) api_result_handler = client.describe_limit_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getLimitModel 횟수 제한 모델 가져오기 지정된 횟수 제한 모델을 가져옵니다. 모델은 이 제한과 관련된 카운터의 리셋 타입과 타이밍을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item LimitModel 횟수 제한 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . GetLimitModel ( \u0026 limit . GetLimitModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"limit-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\GetLimitModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e getLimitModel ( ( new GetLimitModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"limit-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.GetLimitModelRequest ; import io.gs2.limit.result.GetLimitModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { GetLimitModelResult result = client . getLimitModel ( new GetLimitModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"limit-model-0001\" ) ); LimitModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . GetLimitModelResult \u003e asyncResult = null ; yield return client . GetLimitModel ( new Gs2 . Gs2Limit . Request . GetLimitModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"limit-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . getLimitModel ( new Gs2Limit . GetLimitModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"limit-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . get_limit_model ( limit . GetLimitModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'limit-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.get_limit_model ({ namespaceName = \"namespace-0001\" , limitName = \"limit-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.get_limit_model_async ({ namespaceName = \"namespace-0001\" , limitName = \"limit-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 횟수 제한 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 활성화되어 있는 횟수 제한 모델 마스터를 활성화 가능한 형식으로 내보냅니다. 내보낸 데이터는 다른 네임스페이스의 마스터 데이터 갱신이나 백업 용도로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentLimitMaster 활성화 가능한 횟수 제한 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 limit . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.ExportMasterRequest ; import io.gs2.limit.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentLimitMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Limit . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Limit . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . export_master ( limit . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentLimitMaster 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터 조회 지정된 네임스페이스의 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentLimitMaster 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . GetCurrentLimitMaster ( \u0026 limit . GetCurrentLimitMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\GetCurrentLimitMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e getCurrentLimitMaster ( ( new GetCurrentLimitMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.GetCurrentLimitMasterRequest ; import io.gs2.limit.result.GetCurrentLimitMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { GetCurrentLimitMasterResult result = client . getCurrentLimitMaster ( new GetCurrentLimitMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentLimitMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . GetCurrentLimitMasterResult \u003e asyncResult = null ; yield return client . GetCurrentLimitMaster ( new Gs2 . Gs2Limit . Request . GetCurrentLimitMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . getCurrentLimitMaster ( new Gs2Limit . GetCurrentLimitMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . get_current_limit_master ( limit . GetCurrentLimitMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.get_current_limit_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.get_current_limit_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentLimitMaster 현재 활성화되어 있는 횟수 제한 모델 마스터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 가져옵니다. 가져온 URL에 마스터 데이터를 업로드합니다. UpdateCurrentLimitMaster에 업로드로 얻은 토큰을 전달하여 실행하면 마스터 데이터가 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentLimitMaster ( \u0026 limit . PreUpdateCurrentLimitMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\PreUpdateCurrentLimitMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentLimitMaster ( ( new PreUpdateCurrentLimitMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.PreUpdateCurrentLimitMasterRequest ; import io.gs2.limit.result.PreUpdateCurrentLimitMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { PreUpdateCurrentLimitMasterResult result = client . preUpdateCurrentLimitMaster ( new PreUpdateCurrentLimitMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . PreUpdateCurrentLimitMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentLimitMaster ( new Gs2 . Gs2Limit . Request . PreUpdateCurrentLimitMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . preUpdateCurrentLimitMaster ( new Gs2Limit . PreUpdateCurrentLimitMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . pre_update_current_limit_master ( limit . PreUpdateCurrentLimitMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.pre_update_current_limit_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'limit' ) api_result_handler = client.pre_update_current_limit_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentLimitMaster 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터 갱신 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터를 갱신합니다. 인라인 설정용 ‘direct’ 모드와, 3단계 갱신 프로세스에서 사전에 업로드한 설정을 적용하는 ‘preUpload’ 모드, 이렇게 2가지 모드를 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentLimitMaster 갱신된 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentLimitMaster ( \u0026 limit . UpdateCurrentLimitMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-04-05\\\",\\n \\\"limitModels\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"metadata\\\": \\\"DAILY\\\",\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 9\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"metadata\\\": \\\"WEEKLY\\\",\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"sunday\\\",\\n \\\"resetHour\\\": 18\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\UpdateCurrentLimitMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e updateCurrentLimitMaster ( ( new UpdateCurrentLimitMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-04-05 \\\" , \\n \\\" limitModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" metadata \\\" : \\\" DAILY \\\" , \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 9 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" metadata \\\" : \\\" WEEKLY \\\" , \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" sunday \\\" , \\n \\\" resetHour \\\" : 18 \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.UpdateCurrentLimitMasterRequest ; import io.gs2.limit.result.UpdateCurrentLimitMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { UpdateCurrentLimitMasterResult result = client . updateCurrentLimitMaster ( new UpdateCurrentLimitMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-04-05\\\",\\n \\\"limitModels\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"metadata\\\": \\\"DAILY\\\",\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 9\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"metadata\\\": \\\"WEEKLY\\\",\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"sunday\\\",\\n \\\"resetHour\\\": 18\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentLimitMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . UpdateCurrentLimitMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentLimitMaster ( new Gs2 . Gs2Limit . Request . UpdateCurrentLimitMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-04-05\\\",\\n \\\"limitModels\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"metadata\\\": \\\"DAILY\\\",\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 9\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"metadata\\\": \\\"WEEKLY\\\",\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"sunday\\\",\\n \\\"resetHour\\\": 18\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . updateCurrentLimitMaster ( new Gs2Limit . UpdateCurrentLimitMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-04-05\\\",\\n \\\"limitModels\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"metadata\\\": \\\"DAILY\\\",\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 9\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"metadata\\\": \\\"WEEKLY\\\",\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"sunday\\\",\\n \\\"resetHour\\\": 18\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . update_current_limit_master ( limit . UpdateCurrentLimitMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-04-05\", \\n \"limitModels\": [ \\n { \\n \"name\": \"daily\", \\n \"metadata\": \"DAILY\", \\n \"resetType\": \"daily\", \\n \"resetHour\": 9 \\n }, \\n { \\n \"name\": \"weekly\", \\n \"metadata\": \"WEEKLY\", \\n \"resetType\": \"weekly\", \\n \"resetDayOfWeek\": \"sunday\", \\n \"resetHour\": 18 \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.update_current_limit_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-04-05 \\\" , \\n \\\" limitModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" metadata \\\" : \\\" DAILY \\\" , \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 9 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" metadata \\\" : \\\" WEEKLY \\\" , \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" sunday \\\" , \\n \\\" resetHour \\\" : 18 \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.update_current_limit_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-04-05 \\\" , \\n \\\" limitModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" metadata \\\" : \\\" DAILY \\\" , \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 9 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" metadata \\\" : \\\" WEEKLY \\\" , \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" sunday \\\" , \\n \\\" resetHour \\\" : 18 \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentLimitMasterFromGitHub 현재 활성화되어 있는 횟수 제한 모델 마스터를 GitHub에서 갱신 지정된 GitHub 리포지토리에서 마스터 데이터를 가져와 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터를 갱신합니다. GS2-Key에 저장된 API 키가 인증에 사용되며, 체크아웃할 브랜치, 태그 또는 커밋 해시를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentLimitMaster 갱신된 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentLimitMasterFromGitHub ( \u0026 limit . UpdateCurrentLimitMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 limit . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\UpdateCurrentLimitMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e updateCurrentLimitMasterFromGitHub ( ( new UpdateCurrentLimitMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.UpdateCurrentLimitMasterFromGitHubRequest ; import io.gs2.limit.result.UpdateCurrentLimitMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { UpdateCurrentLimitMasterFromGitHubResult result = client . updateCurrentLimitMasterFromGitHub ( new UpdateCurrentLimitMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentLimitMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . UpdateCurrentLimitMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentLimitMasterFromGitHub ( new Gs2 . Gs2Limit . Request . UpdateCurrentLimitMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Limit . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . updateCurrentLimitMasterFromGitHub ( new Gs2Limit . UpdateCurrentLimitMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Limit . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . update_current_limit_master_from_git_hub ( limit . UpdateCurrentLimitMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( limit . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.update_current_limit_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.update_current_limit_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeLimitModelMasters 횟수 제한 모델 마스터 목록 조회 횟수 제한 모델 마스터의 페이지네이션 목록을 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 횟수 제한 모델명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 횟수 제한 모델 마스터의 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DescribeLimitModelMasters ( \u0026 limit . DescribeLimitModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DescribeLimitModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e describeLimitModelMasters ( ( new DescribeLimitModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DescribeLimitModelMastersRequest ; import io.gs2.limit.result.DescribeLimitModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DescribeLimitModelMastersResult result = client . describeLimitModelMasters ( new DescribeLimitModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List LimitModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DescribeLimitModelMastersResult \u003e asyncResult = null ; yield return client . DescribeLimitModelMasters ( new Gs2 . Gs2Limit . Request . DescribeLimitModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . describeLimitModelMasters ( new Gs2Limit . DescribeLimitModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . describe_limit_model_masters ( limit . DescribeLimitModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.describe_limit_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'limit' ) api_result_handler = client.describe_limit_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createLimitModelMaster 횟수 제한 모델 마스터 신규 생성 지정된 리셋 타이밍 설정으로 새로운 횟수 제한 모델 마스터를 생성합니다. 리셋 타입은 notReset, daily, weekly, monthly, days 중에서 선택할 수 있으며, 정기 리셋을 위한 리셋 시각과 요일/날짜를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 사용 횟수 제한 모델 이름 사용 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” }  리셋 타이밍 이 횟수 제한 모델 하위의 카운터 값이 자동으로 0으로 리셋되는 타이밍을 결정합니다. notReset(영구적, 리셋 없음), daily(매일 지정된 시각에 리셋), weekly(지정된 요일에 리셋), monthly(지정된 날짜에 리셋), days(기준 일시로부터 일정 일수마다 리셋) 중에서 선택합니다. 모든 시각은 UTC입니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋 날짜 resetType이 “monthly\"인 경우 카운터가 리셋되는 날짜(일)입니다. 1~31 사이의 값이 유효합니다. 지정한 날짜가 해당 월의 일수를 초과하는 경우(예: 2월의 31일), 해당 월의 마지막 날에 리셋됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋 요일 resetType이 “weekly\"인 경우 카운터가 리셋되는 요일입니다. 이 요일의 resetHour(UTC)로 지정된 시각에 리셋됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 daily, weekly, monthly 리셋 타입에서 카운터가 리셋되는 UTC 시각(0~23)입니다. 예를 들어 값이 0이면 UTC 자정에 카운터가 리셋됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋 일수 resetType이 “days\"인 경우 카운터 리셋 간격(일수)입니다. 리셋 주기는 anchorTimestamp를 기준으로 계산됩니다. 예를 들어 days가 7이고 anchorTimestamp가 월요일 정오라면, 매주 월요일 정오에 카운터가 리셋됩니다. ※ resetType이(가) “days” 이면 필수 Result 타입 설명 item LimitModelMaster 생성한 횟수 제한 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . CreateLimitModelMaster ( \u0026 limit . CreateLimitModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"limit-model-0001\" ), Description : nil , Metadata : nil , ResetType : pointy . String ( \"monthly\" ), ResetDayOfMonth : pointy . Int32 ( 1 ), ResetDayOfWeek : pointy . String ( \"monday\" ), ResetHour : pointy . Int32 ( 5 ), AnchorTimestamp : pointy . Int64 ( 1000 ), Days : pointy . Int32 ( 10 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\CreateLimitModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e createLimitModelMaster ( ( new CreateLimitModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"limit-model-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withResetType ( \"monthly\" ) -\u003e withResetDayOfMonth ( 1 ) -\u003e withResetDayOfWeek ( \"monday\" ) -\u003e withResetHour ( 5 ) -\u003e withAnchorTimestamp ( 1000 ) -\u003e withDays ( 10 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.CreateLimitModelMasterRequest ; import io.gs2.limit.result.CreateLimitModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { CreateLimitModelMasterResult result = client . createLimitModelMaster ( new CreateLimitModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"limit-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withResetType ( \"monthly\" ) . withResetDayOfMonth ( 1 ) . withResetDayOfWeek ( \"monday\" ) . withResetHour ( 5 ) . withAnchorTimestamp ( 1000L ) . withDays ( 10 ) ); LimitModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . CreateLimitModelMasterResult \u003e asyncResult = null ; yield return client . CreateLimitModelMaster ( new Gs2 . Gs2Limit . Request . CreateLimitModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"limit-model-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithResetType ( \"monthly\" ) . WithResetDayOfMonth ( 1 ) . WithResetDayOfWeek ( \"monday\" ) . WithResetHour ( 5 ) . WithAnchorTimestamp ( 1000L ) . WithDays ( 10 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . createLimitModelMaster ( new Gs2Limit . CreateLimitModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"limit-model-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withResetType ( \"monthly\" ) . withResetDayOfMonth ( 1 ) . withResetDayOfWeek ( \"monday\" ) . withResetHour ( 5 ) . withAnchorTimestamp ( 1000 ) . withDays ( 10 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . create_limit_model_master ( limit . CreateLimitModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'limit-model-0001' ) . with_description ( None ) . with_metadata ( None ) . with_reset_type ( 'monthly' ) . with_reset_day_of_month ( 1 ) . with_reset_day_of_week ( 'monday' ) . with_reset_hour ( 5 ) . with_anchor_timestamp ( 1000 ) . with_days ( 10 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.create_limit_model_master ({ namespaceName = \"namespace-0001\" , name = \"limit-model-0001\" , description = nil , metadata = nil , resetType = \"monthly\" , resetDayOfMonth = 1 , resetDayOfWeek = \"monday\" , resetHour = 5 , anchorTimestamp = 1000 , days = 10 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.create_limit_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"limit-model-0001\" , description = nil , metadata = nil , resetType = \"monthly\" , resetDayOfMonth = 1 , resetDayOfWeek = \"monday\" , resetHour = 5 , anchorTimestamp = 1000 , days = 10 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getLimitModelMaster 횟수 제한 모델 마스터 조회 지정된 횟수 제한 모델 마스터를 조회합니다. 리셋 타입과 타이밍 설정을 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 사용 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. Result 타입 설명 item LimitModelMaster 횟수 제한 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . GetLimitModelMaster ( \u0026 limit . GetLimitModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"limit-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\GetLimitModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e getLimitModelMaster ( ( new GetLimitModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"limit-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.GetLimitModelMasterRequest ; import io.gs2.limit.result.GetLimitModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { GetLimitModelMasterResult result = client . getLimitModelMaster ( new GetLimitModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"limit-model-0001\" ) ); LimitModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . GetLimitModelMasterResult \u003e asyncResult = null ; yield return client . GetLimitModelMaster ( new Gs2 . Gs2Limit . Request . GetLimitModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"limit-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . getLimitModelMaster ( new Gs2Limit . GetLimitModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"limit-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . get_limit_model_master ( limit . GetLimitModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'limit-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.get_limit_model_master ({ namespaceName = \"namespace-0001\" , limitName = \"limit-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.get_limit_model_master_async ({ namespaceName = \"namespace-0001\" , limitName = \"limit-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateLimitModelMaster 횟수 제한 모델 마스터 갱신 지정된 횟수 제한 모델 마스터를 갱신합니다. 설명, 메타데이터, 리셋 타이밍 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 사용 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” }  리셋 타이밍 이 횟수 제한 모델 하위의 카운터 값이 자동으로 0으로 리셋되는 타이밍을 결정합니다. notReset(영구적, 리셋 없음), daily(매일 지정된 시각에 리셋), weekly(지정된 요일에 리셋), monthly(지정된 날짜에 리셋), days(기준 일시로부터 일정 일수마다 리셋) 중에서 선택합니다. 모든 시각은 UTC입니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋 날짜 resetType이 “monthly\"인 경우 카운터가 리셋되는 날짜(일)입니다. 1~31 사이의 값이 유효합니다. 지정한 날짜가 해당 월의 일수를 초과하는 경우(예: 2월의 31일), 해당 월의 마지막 날에 리셋됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋 요일 resetType이 “weekly\"인 경우 카운터가 리셋되는 요일입니다. 이 요일의 resetHour(UTC)로 지정된 시각에 리셋됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 daily, weekly, monthly 리셋 타입에서 카운터가 리셋되는 UTC 시각(0~23)입니다. 예를 들어 값이 0이면 UTC 자정에 카운터가 리셋됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋 일수 resetType이 “days\"인 경우 카운터 리셋 간격(일수)입니다. 리셋 주기는 anchorTimestamp를 기준으로 계산됩니다. 예를 들어 days가 7이고 anchorTimestamp가 월요일 정오라면, 매주 월요일 정오에 카운터가 리셋됩니다. ※ resetType이(가) “days” 이면 필수 Result 타입 설명 item LimitModelMaster 갱신한 횟수 제한 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . UpdateLimitModelMaster ( \u0026 limit . UpdateLimitModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"limit-model-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), ResetType : pointy . String ( \"daily\" ), ResetDayOfMonth : pointy . Int32 ( 1 ), ResetDayOfWeek : pointy . String ( \"monday\" ), ResetHour : pointy . Int32 ( 18 ), AnchorTimestamp : pointy . Int64 ( 2000 ), Days : pointy . Int32 ( 5 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\UpdateLimitModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e updateLimitModelMaster ( ( new UpdateLimitModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"limit-model-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) -\u003e withResetType ( \"daily\" ) -\u003e withResetDayOfMonth ( 1 ) -\u003e withResetDayOfWeek ( \"monday\" ) -\u003e withResetHour ( 18 ) -\u003e withAnchorTimestamp ( 2000 ) -\u003e withDays ( 5 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.UpdateLimitModelMasterRequest ; import io.gs2.limit.result.UpdateLimitModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { UpdateLimitModelMasterResult result = client . updateLimitModelMaster ( new UpdateLimitModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"limit-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withResetType ( \"daily\" ) . withResetDayOfMonth ( 1 ) . withResetDayOfWeek ( \"monday\" ) . withResetHour ( 18 ) . withAnchorTimestamp ( 2000L ) . withDays ( 5 ) ); LimitModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . UpdateLimitModelMasterResult \u003e asyncResult = null ; yield return client . UpdateLimitModelMaster ( new Gs2 . Gs2Limit . Request . UpdateLimitModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"limit-model-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . WithResetType ( \"daily\" ) . WithResetDayOfMonth ( 1 ) . WithResetDayOfWeek ( \"monday\" ) . WithResetHour ( 18 ) . WithAnchorTimestamp ( 2000L ) . WithDays ( 5 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . updateLimitModelMaster ( new Gs2Limit . UpdateLimitModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"limit-model-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withResetType ( \"daily\" ) . withResetDayOfMonth ( 1 ) . withResetDayOfWeek ( \"monday\" ) . withResetHour ( 18 ) . withAnchorTimestamp ( 2000 ) . withDays ( 5 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . update_limit_model_master ( limit . UpdateLimitModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'limit-model-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"hoge\": \"fuga\"}' ) . with_reset_type ( 'daily' ) . with_reset_day_of_month ( 1 ) . with_reset_day_of_week ( 'monday' ) . with_reset_hour ( 18 ) . with_anchor_timestamp ( 2000 ) . with_days ( 5 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.update_limit_model_master ({ namespaceName = \"namespace-0001\" , limitName = \"limit-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , resetType = \"daily\" , resetDayOfMonth = 1 , resetDayOfWeek = \"monday\" , resetHour = 18 , anchorTimestamp = 2000 , days = 5 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.update_limit_model_master_async ({ namespaceName = \"namespace-0001\" , limitName = \"limit-model-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , resetType = \"daily\" , resetDayOfMonth = 1 , resetDayOfWeek = \"monday\" , resetHour = 18 , anchorTimestamp = 2000 , days = 5 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteLimitModelMaster 횟수 제한 모델 마스터 삭제 지정된 횟수 제한 모델 마스터를 삭제합니다. 다음 마스터 데이터 갱신까지, 현재 활성화되어 있는 마스터 데이터에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 사용 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. Result 타입 설명 item LimitModelMaster 삭제한 횟수 제한 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/limit\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := limit . Gs2LimitRestClient { Session : \u0026 session , } result , err := client . DeleteLimitModelMaster ( \u0026 limit . DeleteLimitModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LimitName : pointy . String ( \"limit-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Limit\\Gs2LimitRestClient ; use Gs2\\Limit\\Request\\DeleteLimitModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LimitRestClient ( $session ); try { $result = $client -\u003e deleteLimitModelMaster ( ( new DeleteLimitModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLimitName ( \"limit-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.limit.rest.Gs2LimitRestClient ; import io.gs2.limit.request.DeleteLimitModelMasterRequest ; import io.gs2.limit.result.DeleteLimitModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LimitRestClient client = new Gs2LimitRestClient ( session ); try { DeleteLimitModelMasterResult result = client . deleteLimitModelMaster ( new DeleteLimitModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"limit-model-0001\" ) ); LimitModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LimitRestClient ( session ); AsyncResult Gs2 . Gs2Limit . Result . DeleteLimitModelMasterResult \u003e asyncResult = null ; yield return client . DeleteLimitModelMaster ( new Gs2 . Gs2Limit . Request . DeleteLimitModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLimitName ( \"limit-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Limit from '@/gs2/limit' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Limit . Gs2LimitRestClient ( session ); try { const result = await client . deleteLimitModelMaster ( new Gs2Limit . DeleteLimitModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLimitName ( \"limit-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import limit session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = limit . Gs2LimitRestClient ( session ) try : result = client . delete_limit_model_master ( limit . DeleteLimitModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_limit_name ( 'limit-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'limit' ) api_result = client.delete_limit_model_master ({ namespaceName = \"namespace-0001\" , limitName = \"limit-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'limit' ) api_result_handler = client.delete_limit_model_master_async ({ namespaceName = \"namespace-0001\" , limitName = \"limit-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Limit SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Limit SDK API 레퍼런스","url":"/ko/api_reference/limit/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Mutex 뮤텍스 GS2가 제공하는 뮤텍스는 재진입 가능한 락의 일종입니다. 잠금을 획득할 때 트랜잭션 ID를 지정하며, 동일한 트랜잭션 ID를 지정한 경우에만 다시 잠금을 획득할 수 있습니다. 참조 카운터를 가지므로, 해제할 때에는 동일한 횟수만큼 잠금 해제 처리가 필요합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 mutexId string ※ ~ 1024자 뮤텍스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. transactionId string  ~ 256자 트랜잭션 ID 잠금을 획득하는 트랜잭션의 식별자입니다. 이 ID는 재진입 가능한 잠금을 구현하는 데 사용됩니다. 잠금 요청이 현재 잠금을 보유한 것과 동일한 트랜잭션 ID를 지정한 경우, 잠금은 재획득에 성공하며 참조 카운터가 증가합니다. 다른 트랜잭션 ID로의 잠금 요청은 잠금이 유지되는 동안 거부됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 ttlAt long 현재 시각으로부터 1시간 후의 절대 시각 유효기간 일시 UNIX 시간·밀리초 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 lock . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.DescribeNamespacesRequest ; import io.gs2.lock.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Lock . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Lock . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . describe_namespaces ( lock . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'lock' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 lock . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , LogSetting : \u0026 lock . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withLogSetting (( new \\Gs2\\Lock\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.CreateNamespaceRequest ; import io.gs2.lock.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withLogSetting ( new io . gs2 . lock . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Lock . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithLogSetting ( new Gs2 . Gs2Lock . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Lock . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withLogSetting ( new Gs2Lock . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . create_namespace ( lock . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_log_setting ( lock . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 lock . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.GetNamespaceStatusRequest ; import io.gs2.lock.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Lock . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Lock . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . get_namespace_status ( lock . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'lock' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 lock . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.GetNamespaceRequest ; import io.gs2.lock.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Lock . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Lock . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . get_namespace ( lock . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 lock . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), LogSetting : \u0026 lock . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withLogSetting (( new \\Gs2\\Lock\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.UpdateNamespaceRequest ; import io.gs2.lock.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withLogSetting ( new io . gs2 . lock . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Lock . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithLogSetting ( new Gs2 . Gs2Lock . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Lock . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withLogSetting ( new Gs2Lock . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . update_namespace ( lock . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_log_setting ( lock . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 lock . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.DeleteNamespaceRequest ; import io.gs2.lock.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Lock . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Lock . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . delete_namespace ( lock . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 lock . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.GetServiceVersionRequest ; import io.gs2.lock.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Lock . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Lock . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . get_service_version ( lock . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; lock 뮤텍스 잠금 요청한 사용자의 지정된 프로퍼티에 대해 뮤텍스 잠금을 획득합니다. 잠금은 지정된 유효기간(TTL) 초 동안 유지됩니다. 동일한 transactionId로 다시 잠금을 획득하면 참조 카운트가 증가합니다(재진입 락). 다른 transactionId로 이미 잠긴 뮤텍스를 획득하려고 하면 작업은 실패합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. accessToken string  ~ 128자 액세스 토큰 transactionId string  ~ 256자 트랜잭션 ID 잠금을 획득하는 트랜잭션의 식별자입니다. 이 ID는 재진입 가능한 잠금을 구현하는 데 사용됩니다. 잠금 요청이 현재 잠금을 보유한 것과 동일한 트랜잭션 ID를 지정한 경우, 잠금은 재획득에 성공하며 참조 카운터가 증가합니다. 다른 트랜잭션 ID로의 잠금 요청은 잠금이 유지되는 동안 거부됩니다. ttl long  0 ~ 9223372036854775805 잠금 획득 기간(초) Result 타입 설명 item Mutex 뮤텍스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . Lock ( \u0026 lock . LockRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TransactionId : pointy . String ( \"transaction-0001\" ), Ttl : pointy . Int64 ( 100000 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\LockRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e lock ( ( new LockRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTransactionId ( \"transaction-0001\" ) -\u003e withTtl ( 100000 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.LockRequest ; import io.gs2.lock.result.LockResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { LockResult result = client . lock ( new LockRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyId ( \"property-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTransactionId ( \"transaction-0001\" ) . withTtl ( 100000L ) ); Mutex item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . LockResult \u003e asyncResult = null ; yield return client . Lock ( new Gs2 . Gs2Lock . Request . LockRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTransactionId ( \"transaction-0001\" ) . WithTtl ( 100000L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . lock ( new Gs2Lock . LockRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyId ( \"property-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTransactionId ( \"transaction-0001\" ) . withTtl ( 100000 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . lock ( lock . LockRequest () . with_namespace_name ( 'namespace-0001' ) . with_property_id ( 'property-0001' ) . with_access_token ( 'accessToken-0001' ) . with_transaction_id ( 'transaction-0001' ) . with_ttl ( 100000 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.lock ({ namespaceName = \"namespace-0001\" , propertyId = \"property-0001\" , accessToken = \"accessToken-0001\" , transactionId = \"transaction-0001\" , ttl = 100000 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.lock_async ({ namespaceName = \"namespace-0001\" , propertyId = \"property-0001\" , accessToken = \"accessToken-0001\" , transactionId = \"transaction-0001\" , ttl = 100000 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; lockByUserId 사용자 ID를 지정하여 뮤텍스 잠금 지정된 사용자의 지정된 프로퍼티에 대해 뮤텍스 잠금을 획득합니다. 잠금은 지정된 TTL 초 동안 유지됩니다. 동일한 transactionId로 다시 잠금을 획득하면 참조 카운트가 증가합니다(재진입 락). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. userId string  ~ 128자 사용자ID transactionId string  ~ 256자 트랜잭션 ID 잠금을 획득하는 트랜잭션의 식별자입니다. 이 ID는 재진입 가능한 잠금을 구현하는 데 사용됩니다. 잠금 요청이 현재 잠금을 보유한 것과 동일한 트랜잭션 ID를 지정한 경우, 잠금은 재획득에 성공하며 참조 카운터가 증가합니다. 다른 트랜잭션 ID로의 잠금 요청은 잠금이 유지되는 동안 거부됩니다. ttl long  0 ~ 9223372036854775805 잠금 획득 기간(초) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mutex 뮤텍스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . LockByUserId ( \u0026 lock . LockByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), UserId : pointy . String ( \"user-0001\" ), TransactionId : pointy . String ( \"transaction-0001\" ), Ttl : pointy . Int64 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\LockByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e lockByUserId ( ( new LockByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTransactionId ( \"transaction-0001\" ) -\u003e withTtl ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.LockByUserIdRequest ; import io.gs2.lock.result.LockByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { LockByUserIdResult result = client . lockByUserId ( new LockByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyId ( \"property-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"transaction-0001\" ) . withTtl ( 10L ) . withTimeOffsetToken ( null ) ); Mutex item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . LockByUserIdResult \u003e asyncResult = null ; yield return client . LockByUserId ( new Gs2 . Gs2Lock . Request . LockByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithUserId ( \"user-0001\" ) . WithTransactionId ( \"transaction-0001\" ) . WithTtl ( 10L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . lockByUserId ( new Gs2Lock . LockByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyId ( \"property-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"transaction-0001\" ) . withTtl ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . lock_by_user_id ( lock . LockByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_property_id ( 'property-0001' ) . with_user_id ( 'user-0001' ) . with_transaction_id ( 'transaction-0001' ) . with_ttl ( 10 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.lock_by_user_id ({ namespaceName = \"namespace-0001\" , propertyId = \"property-0001\" , userId = \"user-0001\" , transactionId = \"transaction-0001\" , ttl = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.lock_by_user_id_async ({ namespaceName = \"namespace-0001\" , propertyId = \"property-0001\" , userId = \"user-0001\" , transactionId = \"transaction-0001\" , ttl = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unlock 뮤텍스 해제 요청한 사용자의 지정된 프로퍼티에 대한 뮤텍스 잠금을 해제합니다. transactionId는 잠금을 획득할 때 사용한 값과 일치해야 합니다. 참조 카운트가 감소하며, 0이 되면 잠금이 완전히 해제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. accessToken string  ~ 128자 액세스 토큰 transactionId string  ~ 256자 트랜잭션 ID 잠금을 획득하는 트랜잭션의 식별자입니다. 이 ID는 재진입 가능한 잠금을 구현하는 데 사용됩니다. 잠금 요청이 현재 잠금을 보유한 것과 동일한 트랜잭션 ID를 지정한 경우, 잠금은 재획득에 성공하며 참조 카운터가 증가합니다. 다른 트랜잭션 ID로의 잠금 요청은 잠금이 유지되는 동안 거부됩니다. Result 타입 설명 item Mutex 뮤텍스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . Unlock ( \u0026 lock . UnlockRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TransactionId : pointy . String ( \"transaction-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\UnlockRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e unlock ( ( new UnlockRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTransactionId ( \"transaction-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.UnlockRequest ; import io.gs2.lock.result.UnlockResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { UnlockResult result = client . unlock ( new UnlockRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyId ( \"property-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTransactionId ( \"transaction-0001\" ) ); Mutex item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . UnlockResult \u003e asyncResult = null ; yield return client . Unlock ( new Gs2 . Gs2Lock . Request . UnlockRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTransactionId ( \"transaction-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . unlock ( new Gs2Lock . UnlockRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyId ( \"property-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTransactionId ( \"transaction-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . unlock ( lock . UnlockRequest () . with_namespace_name ( 'namespace-0001' ) . with_property_id ( 'property-0001' ) . with_access_token ( 'accessToken-0001' ) . with_transaction_id ( 'transaction-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.unlock ({ namespaceName = \"namespace-0001\" , propertyId = \"property-0001\" , accessToken = \"accessToken-0001\" , transactionId = \"transaction-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.unlock_async ({ namespaceName = \"namespace-0001\" , propertyId = \"property-0001\" , accessToken = \"accessToken-0001\" , transactionId = \"transaction-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unlockByUserId 사용자 ID를 지정하여 뮤텍스 해제 지정된 사용자의 지정된 프로퍼티에 대한 뮤텍스 잠금을 해제합니다. transactionId는 잠금을 획득할 때 사용한 값과 일치해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. userId string  ~ 128자 사용자ID transactionId string  ~ 256자 트랜잭션 ID 잠금을 획득하는 트랜잭션의 식별자입니다. 이 ID는 재진입 가능한 잠금을 구현하는 데 사용됩니다. 잠금 요청이 현재 잠금을 보유한 것과 동일한 트랜잭션 ID를 지정한 경우, 잠금은 재획득에 성공하며 참조 카운터가 증가합니다. 다른 트랜잭션 ID로의 잠금 요청은 잠금이 유지되는 동안 거부됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mutex 뮤텍스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . UnlockByUserId ( \u0026 lock . UnlockByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), UserId : pointy . String ( \"user-0001\" ), TransactionId : pointy . String ( \"transaction-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\UnlockByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e unlockByUserId ( ( new UnlockByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTransactionId ( \"transaction-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.UnlockByUserIdRequest ; import io.gs2.lock.result.UnlockByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { UnlockByUserIdResult result = client . unlockByUserId ( new UnlockByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyId ( \"property-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"transaction-0001\" ) . withTimeOffsetToken ( null ) ); Mutex item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . UnlockByUserIdResult \u003e asyncResult = null ; yield return client . UnlockByUserId ( new Gs2 . Gs2Lock . Request . UnlockByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithUserId ( \"user-0001\" ) . WithTransactionId ( \"transaction-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . unlockByUserId ( new Gs2Lock . UnlockByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withPropertyId ( \"property-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"transaction-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . unlock_by_user_id ( lock . UnlockByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_property_id ( 'property-0001' ) . with_user_id ( 'user-0001' ) . with_transaction_id ( 'transaction-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.unlock_by_user_id ({ namespaceName = \"namespace-0001\" , propertyId = \"property-0001\" , userId = \"user-0001\" , transactionId = \"transaction-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.unlock_by_user_id_async ({ namespaceName = \"namespace-0001\" , propertyId = \"property-0001\" , userId = \"user-0001\" , transactionId = \"transaction-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMutex 뮤텍스 상태 조회 요청한 사용자의 지정된 프로퍼티에 대한 현재 뮤텍스 상태를 조회합니다. 트랜잭션 ID, 유효기간(TTL)을 포함한 뮤텍스 정보를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. Result 타입 설명 item Mutex 뮤텍스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . GetMutex ( \u0026 lock . GetMutexRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\GetMutexRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e getMutex ( ( new GetMutexRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.GetMutexRequest ; import io.gs2.lock.result.GetMutexResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { GetMutexResult result = client . getMutex ( new GetMutexRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) ); Mutex item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . GetMutexResult \u003e asyncResult = null ; yield return client . GetMutex ( new Gs2 . Gs2Lock . Request . GetMutexRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . getMutex ( new Gs2Lock . GetMutexRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . get_mutex ( lock . GetMutexRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_id ( 'property-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.get_mutex ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.get_mutex_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMutexByUserId 사용자 ID를 지정하여 뮤텍스 상태 조회 지정된 사용자의 프로퍼티에 대한 현재 뮤텍스 상태를 조회합니다. 트랜잭션 ID, 유효기간(TTL)을 포함한 뮤텍스 정보를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mutex 뮤텍스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . GetMutexByUserId ( \u0026 lock . GetMutexByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\GetMutexByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e getMutexByUserId ( ( new GetMutexByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.GetMutexByUserIdRequest ; import io.gs2.lock.result.GetMutexByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { GetMutexByUserIdResult result = client . getMutexByUserId ( new GetMutexByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); Mutex item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . GetMutexByUserIdResult \u003e asyncResult = null ; yield return client . GetMutexByUserId ( new Gs2 . Gs2Lock . Request . GetMutexByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . getMutexByUserId ( new Gs2Lock . GetMutexByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . get_mutex_by_user_id ( lock . GetMutexByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.get_mutex_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.get_mutex_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMutexByUserId 뮤텍스 삭제 트랜잭션 ID나 참조 카운트에 관계없이, 지정된 프로퍼티의 뮤텍스를 강제로 삭제합니다. 이는 잠금을 즉시 해제하는 관리 작업입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 잠금 대상 리소스를 식별하기 위한 ID로, 어떤 리소스에 대한 잠금인지를 결정합니다. 여러 처리가 동일한 리소스에 대한 배타적 접근을 필요로 하는 경우, 동일한 프로퍼티 ID를 지정해야 합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Mutex 삭제된 뮤텍스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lock\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lock . Gs2LockRestClient { Session : \u0026 session , } result , err := client . DeleteMutexByUserId ( \u0026 lock . DeleteMutexByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lock\\Gs2LockRestClient ; use Gs2\\Lock\\Request\\DeleteMutexByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LockRestClient ( $session ); try { $result = $client -\u003e deleteMutexByUserId ( ( new DeleteMutexByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lock.rest.Gs2LockRestClient ; import io.gs2.lock.request.DeleteMutexByUserIdRequest ; import io.gs2.lock.result.DeleteMutexByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LockRestClient client = new Gs2LockRestClient ( session ); try { DeleteMutexByUserIdResult result = client . deleteMutexByUserId ( new DeleteMutexByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); Mutex item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LockRestClient ( session ); AsyncResult Gs2 . Gs2Lock . Result . DeleteMutexByUserIdResult \u003e asyncResult = null ; yield return client . DeleteMutexByUserId ( new Gs2 . Gs2Lock . Request . DeleteMutexByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lock from '@/gs2/lock' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lock . Gs2LockRestClient ( session ); try { const result = await client . deleteMutexByUserId ( new Gs2Lock . DeleteMutexByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lock session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lock . Gs2LockRestClient ( session ) try : result = client . delete_mutex_by_user_id ( lock . DeleteMutexByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lock' ) api_result = client.delete_mutex_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lock' ) api_result_handler = client.delete_mutex_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Lock SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Lock SDK API 레퍼런스","url":"/ko/api_reference/lock/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 type 문자열 열거형 enum {   “gs2”,   “bigquery”,   “firehose” } “gs2” 로그 출력 방법 로그 데이터의 내보내기 대상을 결정합니다. “gs2\"는 GS2의 매니지드 스토리지에 로그를 저장하며 내장된 검색·분석 기능을 이용할 수 있습니다. “bigquery\"는 Google BigQuery로 로그를 내보내 고급 분석을 수행할 수 있습니다. “firehose\"는 Amazon Kinesis Data Firehose로 로그를 스트리밍하여 S3, Redshift 등의 AWS 대상으로 전달합니다. 정의 설명 gs2 GS2에 의한 관리 bigquery BigQuery로 내보내기 firehose Kinesis Firehose로 내보내기 gcpCredentialJson string {type} == “bigquery” ※ ~ 5120자 GCP 자격 증명 BigQuery로 로그를 내보낼 때 인증에 사용하는 GCP 자격 증명 JSON입니다. 서비스 계정에는 대상 데이터셋에 대한 BigQuery Data Editor 권한이 필요합니다. ※ type이(가) “bigquery” 이면 필수 bigQueryDatasetName string {type} == “bigquery” ※ ~ 1024자 BigQuery 데이터셋 이름 로그 데이터를 내보낼 대상이 되는 BigQuery 데이터셋의 이름입니다. 데이터셋은 제공된 자격 증명에 연결된 GCP 프로젝트 내에 미리 존재해야 합니다. ※ type이(가) “bigquery” 이면 필수 logExpireDays int {type} in [“gs2”, “bigquery”] ※ 0 ~ 3650 로그 보존 기간(일) 로그 데이터를 보관하는 일수입니다. 이 기간을 초과한 로그는 자동으로 삭제됩니다. 내보내기 방법이 “gs2” 또는 “bigquery\"인 경우에 적용됩니다. 최대 3650일(약 10년)까지 설정할 수 있습니다. ※ type이(가) “gs2”,“bigquery\"이면 필수 awsRegion string {type} == “firehose” ※ ~ 256자 AWS 리전 Kinesis Data Firehose 전송 스트림이 존재하는 AWS 리전입니다(예: us-east-1, ap-northeast-1). ※ type이(가) “firehose” 이면 필수 awsAccessKeyId string {type} == “firehose” ※ ~ 256자 AWS 액세스 키 ID Kinesis Data Firehose 인증에 사용하는 AWS 액세스 키 ID입니다. IAM 사용자에게는 지정된 Firehose 전송 스트림으로 레코드를 전송할 수 있는 권한이 필요합니다. ※ type이(가) “firehose” 이면 필수 awsSecretAccessKey string {type} == “firehose” ※ ~ 256자 AWS 시크릿 액세스 키 Kinesis Data Firehose 인증을 위해 액세스 키 ID와 짝을 이루는 AWS 시크릿 액세스 키입니다. ※ type이(가) “firehose” 이면 필수 firehoseStreamName string {type} == “firehose” ※ ~ 256자 Kinesis Firehose 스트림 이름 로그 데이터의 전송 대상이 되는 Kinesis Data Firehose 전송 스트림의 이름입니다. ※ type이(가) “firehose” 이면 필수 firehoseCompressData 문자열 열거형 enum {   “none”,   “gzip” } {type} == “firehose” “none” Kinesis Firehose로 출력하는 데이터를 압축할지 여부 Kinesis Data Firehose로 전송하기 전에 로그 데이터를 압축할지를 설정합니다. Gzip 압축을 사용하면 데이터 전송량과 스토리지 비용을 절감할 수 있습니다. 정의 설명 none 압축하지 않음 gzip Gzip ※ type이(가) “firehose” 이면 활성화 status string “ACTIVE” ~ 128자 상태 이 네임스페이스의 현재 작동 상태입니다. 네임스페이스가 활성 상태이며 로그 데이터를 수신하고 있는지를 나타냅니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 AccessLog 액세스 로그 마이크로서비스에 대한 요청 및 그 응답 내용을 기록한 로그입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  일시 API 요청이 처리된 일시입니다. requestId string  ~ 1024자 요청 ID 각 API 요청에 할당되는 고유 식별자입니다. 특정 API 호출의 추적과 디버깅에 사용됩니다. service string  ~ 1024자 마이크로서비스 종류 요청을 처리한 GS2 마이크로서비스의 이름입니다(예: account, inventory, limit). method string  ~ 1024자 마이크로서비스 메서드 마이크로서비스에서 호출된 구체적인 API 메서드입니다(예: createNamespace, getItem). userId string ~ 128자 사용자ID request string  ~ 10485760자 요청 파라미터 API에 전송된 요청 파라미터의 전체 내용(JSON 형식)입니다. result string  ~ 10485760자 응답 내용 API에서 반환된 응답의 전체 내용(JSON 형식)으로, 정상적인 결과와 에러 상세 정보를 모두 포함합니다. AccessLogCount 액세스 로그 집계 마이크로서비스 종류, 메서드, 사용자별로 그룹화된 액세스 로그 엔트리의 집계 건수입니다. API 사용 패턴 분석과 자주 호출되는 엔드포인트 파악에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 service string ~ 1024자 마이크로서비스 종류 GS2 마이크로서비스의 이름입니다. 집계의 그룹화 키로 사용됩니다. method string ~ 1024자 마이크로서비스 메서드 구체적인 API 메서드입니다. 집계의 그룹화 키로 사용됩니다. userId string ~ 128자 사용자ID count long  0 ~ 9223372036854775805 횟수 그룹화 조건에 일치하는 액세스 로그 엔트리의 총 수입니다. IssueStampSheetLog 트랜잭션 발행 로그 분산 트랜잭션의 발행을 기록합니다. 각 엔트리는 발행 시점에 하나의 트랜잭션으로 묶인 입수 액션과 관련된 소비 액션(태스크)을 캡처합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  일시 트랜잭션이 발행된 일시입니다. transactionId string  ~ 1024자 트랜잭션 ID 발행된 분산 트랜잭션의 고유 식별자입니다. service string  ~ 1024자 마이크로서비스 종류 트랜잭션을 발행한 GS2 마이크로서비스의 이름입니다. method string  ~ 1024자 마이크로서비스 메서드 트랜잭션 발행을 트리거한 구체적인 API 메서드입니다. userId string  ~ 128자 사용자ID action string  ~ 1024자 입수 액션 트랜잭션에 포함된 입수 액션으로, 실행 시 사용자가 받게 되는 내용을 지정합니다. args string  ~ 5242880자 인수 입수 액션의 파라미터(JSON 형식)입니다. tasks List 0 ~ 10 items 소비 액션 목록 이 트랜잭션에 번들된 소비 액션 목록입니다. 입수 액션 이전에 실행되어 전제 조건으로 리소스를 소비합니다. IssueStampSheetLogCount 트랜잭션 발행 로그 집계 마이크로서비스 종류, 메서드, 사용자, 액션별로 그룹화된 트랜잭션 발행 로그 엔트리의 집계 건수입니다. 각 서비스에서 발행된 분산 트랜잭션의 볼륨과 분포 분석에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 service string ~ 1024자 마이크로서비스 종류 트랜잭션을 발행한 GS2 마이크로서비스의 이름입니다. method string ~ 1024자 마이크로서비스 메서드 트랜잭션 발행을 트리거한 API 메서드입니다. userId string ~ 128자 사용자ID action string ~ 1024자 입수 액션 발행된 트랜잭션에 포함된 입수 액션의 종류입니다. count long  0 ~ 9223372036854775805 횟수 그룹화 조건에 일치하는 트랜잭션 발행 로그 엔트리의 총 수입니다. ExecuteStampSheetLog 입수 액션 실행 로그 마이크로서비스별 트랜잭션 실행 내용 로그입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  일시 입수 액션이 실행된 일시입니다. transactionId string  ~ 1024자 트랜잭션 ID 이 입수 액션이 속한 분산 트랜잭션의 고유 식별자입니다. service string  ~ 1024자 마이크로서비스 종류 입수 액션을 실행한 GS2 마이크로서비스의 이름입니다(예: inventory, experience). method string  ~ 1024자 마이크로서비스 메서드 입수 액션 실행을 위해 마이크로서비스에서 호출된 구체적인 메서드입니다. userId string  ~ 128자 사용자ID action string  ~ 1024자 입수 액션 실행된 입수 액션의 종류입니다(예: Gs2Inventory:AcquireItemSetByUserId, Gs2Experience:AddExperienceByUserId). args string  ~ 5242880자 인수 입수 액션에 전달된 파라미터(JSON 형식)입니다. ExecuteStampSheetLogCount 입수 액션 실행 로그 집계 마이크로서비스 종류, 메서드, 사용자, 액션별로 그룹화된 입수 액션 실행 로그 엔트리의 집계 건수입니다. 각종 입수 액션의 실행 빈도 분석에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 service string ~ 1024자 마이크로서비스 종류 입수 액션을 실행한 GS2 마이크로서비스의 이름입니다. method string ~ 1024자 마이크로서비스 메서드 입수 액션 실행을 위해 호출된 구체적인 메서드입니다. userId string ~ 128자 사용자ID action string ~ 1024자 입수 액션 실행된 입수 액션의 종류입니다. count long  0 ~ 9223372036854775805 횟수 그룹화 조건에 일치하는 입수 액션 실행 로그 엔트리의 총 수입니다. ExecuteStampTaskLog 소비 액션 실행 로그 마이크로서비스별 소비 액션의 실행 내용을 기록한 로그입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  일시 소비 액션이 실행된 일시입니다. taskId string  ~ 1024자 태스크 ID 실행된 소비 액션의 고유 식별자입니다. service string  ~ 1024자 마이크로서비스 종류 소비 액션을 실행한 GS2 마이크로서비스의 이름입니다(예: inventory, money). method string  ~ 1024자 마이크로서비스의 메서드 소비 액션을 실행하기 위해 마이크로서비스에서 호출된 구체적인 메서드입니다. userId string  ~ 128자 사용자ID action string  ~ 1024자 소비 액션 실행된 소비 액션의 종류입니다(예: Gs2Inventory:ConsumeItemSetByUserId, Gs2Money:WithdrawByUserId). args string  ~ 5242880자 인수 소비 액션에 전달된 파라미터(JSON 형식)입니다. ExecuteStampTaskLogCount 소비 액션 실행 로그 집계 마이크로서비스 종류, 메서드, 사용자, 액션별로 그룹화된 소비 액션 실행 로그 항목의 집계 건수입니다. 각종 소비 액션의 실행 빈도 분석에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 service string ~ 1024자 마이크로서비스 종류 소비 액션을 실행한 GS2 마이크로서비스의 이름입니다. method string ~ 1024자 마이크로서비스의 메서드 소비 액션을 실행하기 위해 호출된 구체적인 메서드입니다. userId string ~ 128자 사용자ID action string ~ 1024자 소비 액션 실행된 소비 액션의 종류입니다. count long  0 ~ 9223372036854775805 횟수 그룹화 조건에 일치하는 소비 액션 실행 로그 항목의 총 수입니다. InGameLog 인게임 로그 게임 클라이언트 또는 서버 사이드 스크립트에서 전송되는 커스텀 로그 엔트리입니다. GS2 API 호출로 자동 생성되는 액세스 로그와 달리, 인게임 로그는 게임 개발자가 플레이어의 행동, 게임 상태 변화, 비즈니스 메트릭 등 게임 고유의 이벤트를 기록하기 위해 명시적으로 전송합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  일시 인게임 로그가 전송된 일시입니다. requestId string  ~ 1024자 요청 ID 중복 제거와 추적을 위해 이 로그 엔트리에 할당된 고유 식별자입니다. userId string ~ 128자 사용자ID tags List [] 0 ~ 20 items 태그 필터링과 분류를 위해 로그 엔트리에 부여된 키-값 쌍입니다. 태그를 통해 인게임 로그의 효율적인 검색과 집계가 가능합니다(예: 이벤트 타입, 스테이지 ID, 아이템 카테고리). payload string  ~ 10485760자 페이로드 JSON 형식의 커스텀 로그 데이터입니다. 플레이어의 행동, 게임 상태, 비즈니스 메트릭 등 게임 고유의 임의의 정보를 포함할 수 있습니다. 최대 10MB까지 가능합니다. AccessLogWithTelemetry 텔레메트리 정보가 포함된 액세스 로그 마이크로서비스에 대한 요청 및 응답 내용을 기록한 로그에 응답 시간과 호출자의 컨텍스트 정보를 추가한 로그입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  일시 API 요청이 처리된 일시입니다. sourceRequestId string  ~ 1024자 호출자 요청 ID 이 요청을 발생시킨 최초 호출자의 요청 ID입니다. 관련된 API 호출을 원래 요청까지 거슬러 추적하는 데 사용됩니다. requestId string  ~ 1024자 요청 ID 이 특정 API 요청에 할당된 고유 식별자입니다. duration long  0 ~ 9223372036854775805 실행 시간 (ms) 이 API 요청을 수신하고 나서 응답까지 처리하는 데 걸린 시간(밀리초)입니다. service string  ~ 1024자 마이크로서비스 종류 요청을 처리한 GS2 마이크로서비스의 이름입니다(예: account, inventory, limit). method string  ~ 1024자 마이크로서비스 메서드 마이크로서비스에서 호출된 구체적인 API 메서드입니다(예: createNamespace, getItem). userId string ~ 128자 사용자ID request string  ~ 10485760자 요청 파라미터 API에 전송된 요청 파라미터의 전체 내용(JSON 형식)입니다. result string  ~ 10485760자 응답 내용 API에서 반환된 응답의 전체 내용(JSON 형식)입니다. status 문자열 열거형 enum {   “ok”,   “error” }  상태 API 요청의 결과 상태입니다. “ok\"는 정상 처리를 나타내고, “error\"는 오류가 발생했음을 나타냅니다. 정의 설명 ok 정상 error 이상 Insight GS2-Insight는 GS2-Log에 축적된 액세스 로그를 시각화·분석하는 도구입니다. GS2-Insight 자체는 오픈소스로 github에 공개되어 있습니다. https://github.com/gs2io/gs2-insight 여기서는 공개된 오픈소스 코드를 직접 호스팅하지 않고도 온디맨드로 실행하여 이용하실 수 있습니다. 온디맨드로 실행된 GS2-Insight는 최대 2시간 이용할 수 있습니다. 2시간을 초과하여 이용하고 싶은 경우, 직접 호스팅하여 이용해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 insightId string ※ ~ 1024자 GS2-Insight GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 이름 taskId string ~ 128자 태스크 ID host string ~ 256자 호스트 이름 password string  ~ 32자 비밀번호 status 문자열 열거형 enum {   “ALLOCATING”,   “LAUNCHING”,   “ACTIVE”,   “DELETED” } “ALLOCATING” 상태 정의 설명 ALLOCATING 서버 할당 중 LAUNCHING 시작 처리 중 ACTIVE 유효 DELETED 삭제됨 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Dashboard 대시보드 로그 데이터와 메트릭을 시각화하기 위한 커스터마이즈 가능한 대시보드입니다. 각 대시보드는 레이아웃과 위젯 설정을 JSON 페이로드로 저장하여, 로그 분석의 맞춤형 뷰를 만들 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 dashboardId string ※ ~ 1024자 Dashboard GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 대시보드 이름 displayName string  ~ 256자 표시용 이름 이 대시보드의 사람이 읽기 쉬운 이름으로, 대시보드 목록과 헤더에 표시됩니다. description string ~ 1024자 설명문 payload string  ~ 1048576자 페이로드 위젯 정의, 레이아웃 정보, 쿼리 설정, 시각화 옵션을 포함하는 JSON 형식의 대시보드 설정입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 FacetModel 패싯 모델 로그 데이터의 필터링과 집계에 사용할 수 있는 패싯 필드를 정의합니다. 패싯을 통해 서비스 이름, 메서드, 상태, 커스텀 필드 등 특정 차원으로 로그 검색 결과를 좁힐 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 facetModelId string ※ ~ 1024자 Facet Model GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 field string  ~ 128자 패싯 필드 이름 이 패싯이 대상으로 하는 로그 필드의 이름입니다(예: “service”, “method”, “status”). type 문자열 열거형 enum {   “string”,   “double”,   “measure” }  패싯 데이터 타입 패싯 필드의 데이터 타입입니다. “string\"은 값 카운트가 있는 범주형 값에, “double\"은 범위 필터링이 있는 숫자 값에, “measure\"는 통계 분석이 있는 측정값에 사용됩니다. 정의 설명 string 문자열 double 숫자 measure 측정값 displayName string  ~ 128자 표시용 이름 이 패싯의 사람이 읽을 수 있는 이름으로, 로그 검색 UI에 표시됩니다. order int 0 0 ~ 100000 표시 순서 UI에서 이 패싯을 표시할 때의 정렬 순서입니다. 값이 작을수록 먼저 표시됩니다. MetricModel 메트릭 모델 모니터링 및 시각화할 수 있는 메트릭을 정의합니다. 사전 정의된 메트릭에는 각 GS2 마이크로서비스의 요청 수, 요청 시간, 에러율(4xx/5xx)이 포함됩니다. 각 메트릭에는 그룹화와 필터링을 위한 관련 라벨이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 메트릭 이름 이 메트릭의 고유 식별자입니다(예: “RequestCount”, “RequestDuration”, “Error4xxCount”, “Error5xxCount”). 서비스 고유 메트릭에는 서비스 이름이 접두사로 붙습니다. type 문자열 열거형 enum {   “string”,   “double”,   “measure” }  메트릭 데이터 타입 메트릭 값의 데이터 타입입니다. “double\"은 숫자 카운트에 사용되고, “measure\"는 시간/지연 시간 측정에 사용됩니다. 정의 설명 string 문자열 double 숫자 measure 측정값 labels List [] 0 ~ 10 items 라벨 이 메트릭에 연결된 라벨 이름으로, 메트릭 데이터의 그룹화와 필터링에 사용됩니다(예: “service”, “method”, “namespaceName”). 라벨은 메트릭을 분해할 수 있는 차원을 정의합니다. AggregationConfig 집계 설정 시계열 데이터를 조회할 때 로그 데이터 또는 메트릭의 집계 방법에 대한 설정입니다. 집계 함수(카운트, 평균, 백분위수 등)와 집계 대상 필드를 지정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 type 문자열 열거형 enum {   “count”,   “unique”,   “sum”,   “avg”,   “max”,   “min”,   “p90”,   “p95”,   “p99” } “count” 집계 타입: - unique : 고유 값의 수 - avg : 평균값 - max : 최댓값 - min : 최솟값 - p90 : 90 백분위수 - p99 : 99 백분위수 정의 설명 count 레코드 수 unique 고유 값의 수 sum 합계값 avg 평균값 max 최댓값 min 최솟값 p90 90 백분위수 p95 95 백분위수 p99 99 백분위수 field string ~ 128자 집계 대상 필드(count 이외의 경우 필수) Facet 패싯 로그 데이터에 대한 패싯 쿼리의 결과로, 특정 필드 값의 분포를 포함합니다. 문자열 필드의 경우 값의 카운트를, 숫자 필드의 경우 현재 필터 조건에서의 값 범위와 UI 슬라이더 표시용 전역 범위를 제공합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 field string  ~ 128자 패싯 필드 이름 values List [] 0 ~ 100 items 문자열 패싯의 값과 카운트 배열 range NumericRange 현재 필터 조건에서의 숫자 범위 globalRange NumericRange 필터 적용 전 전체 데이터 범위(UI 슬라이더 범위에 사용) FacetValueCount 패싯 값 카운트 문자열 패싯 결과 내의 단일 값과 그 출현 횟수입니다. 특정 패싯 필드에 대해 몇 개의 로그 항목이 해당 값을 가지고 있는지를 나타냅니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 value string  ~ 256자 패싯 값 count long  0 ~ 9223372036854775805 이 값을 가진 로그의 건수 Label 라벨 분류, 필터링, 그룹화를 위해 로그 항목이나 메트릭에 부여되는 키-값 쌍입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 128자 라벨의 키 이 라벨의 키 이름입니다(예: “service”, “method”, “namespaceName”). value string  ~ 256자 라벨의 값 키에 대응하는 이 라벨의 값입니다. LogEntry 로그 엔트리 트레이스 내의 단일 로그 레코드로, 하나의 처리 단계 또는 API 호출을 나타냅니다. 원본 로그 데이터, 처리 시간, 중요도 상태, 분류를 위한 관련 라벨을 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  타임스탬프 이 로그 엔트리가 기록된 일시입니다. status 문자열 열거형 enum {   “ok”,   “info”,   “notice”,   “error”,   “warn”,   “emag” }  상태 이 로그 엔트리의 중요도 수준으로, 정보 수준부터 긴급 수준까지 있습니다. 정의 설명 ok 정상 info 정보 notice 통지 error 에러 warn 경고 emag 긴급 duration long 0 0 ~ 9223372036854775805 처리 시간(나노초) 이 로그 엔트리의 처리에 소요된 시간(나노초)입니다. line string  ~ 10485760자 로그 행 원본 데이터 JSON 형식의 원본 로그 데이터로, 요청/응답 정보를 포함한 처리 단계의 상세 내용 전체가 포함됩니다. labels List [] 0 ~ 128 items 라벨 분류와 필터링을 위해 이 로그 엔트리에 부여된 키-값 쌍입니다(예: 서비스 이름, 메서드, 요청 ID). NumericRange 숫자 범위. range : 현재 필터 조건에서의 범위(다른 필터는 적용, 자기 자신은 제외) globalRange : 필터 적용 전 전체 데이터 범위(UI 슬라이더 범위에 사용) 상세 타입 활성화 조건 필수 기본값 값 제한 설명 min double  0 ~ 281474976710654 최솟값 max double  0 ~ 281474976710654 최댓값 TimeseriesMetadata 시계열 데이터 메타데이터 시계열 쿼리 결과에 관한 메타데이터로, 데이터에 포함된 시리즈 키와 그룹화에 사용된 필드를 나타냅니다. 클라이언트가 시계열 데이터를 올바르게 해석하고 표시하기 위해 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 keys List [] 0 ~ 10 items 데이터에 포함된 시리즈 키 목록 groupBy List [] 0 ~ 10 items 그룹화에 사용된 필드 TimeseriesPoint 타임시리즈 포인트 타임시리즈에서 특정 타임스탬프의 집계값을 나타내는 단일 데이터 포인트입니다. 그룹화가 적용된 경우, 각각 서로 다른 그룹에 대응하는 하나 이상의 값을 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 timestamp long  타임스탬프 values List [] 0 ~ 10000 items 이 타임스탬프에서의 각 그룹의 값 TimeseriesValue 시계열 데이터 값 시계열 데이터 포인트 내 단일 집계 값으로, 그룹별로 키가 지정됩니다. 데이터가 그룹화된 경우(예: 서비스나 메서드별) 각 그룹은 고유한 값을 가지며, 그룹화되지 않은 경우 키는 “count\"입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 256자 그룹 키(그룹화하지 않은 경우 \"count\") value double  0 ~ 281474976710654 집계 값 Trace 트레이스 마이크로서비스 호출에 걸친 관련 로그 엔트리(스팬)를 하나의 요청 흐름으로 그룹화하는 분산 트레이스입니다. 사용자의 API 요청이 여러 GS2 마이크로서비스를 통해 어떻게 전파되는지를 엔드투엔드로 시각화할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 traceId string  UUID ~ 36자 트레이스 ID 이 트레이스의 고유 식별자로, 요청 흐름 내의 모든 관련 로그 엔트리(스팬)에서 공유됩니다. spans List [] 0 ~ 100 items 스팬 이 트레이스를 구성하는 로그 엔트리(스팬) 목록으로, 마이크로서비스 간 요청 흐름에서의 각 처리 단계를 나타냅니다. truncated bool false 잘림 스팬 목록이 엔트리의 최대 개수를 초과하여 잘렸는지 여부를 나타냅니다. true인 경우, 트레이스 내 일부 스팬이 응답에 포함되지 않습니다. InGameLogTag 게임 내 로그의 태그 인게임 로그 항목의 필터링과 분류에 사용되는 키-값 쌍입니다. 각 태그 키는 하나의 로그 항목 내에서 고유해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 태그 이름 이 태그의 키 이름입니다. 인게임 로그를 검색할 때 필터 조건으로 사용됩니다. value string  ~ 128자 태그 값 이 태그의 값입니다. 키와 조합하여 특정 조건으로 로그를 필터링할 수 있습니다(예: key=“stageId”, value=“stage-001”). 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 log . DescribeNamespacesRequest { PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DescribeNamespacesRequest ; import io.gs2.log.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Log . Request . DescribeNamespacesRequest () . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Log . DescribeNamespacesRequest () . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . describe_namespaces ( log . DescribeNamespacesRequest () . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.describe_namespaces ({ pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'log' ) api_result_handler = client.describe_namespaces_async ({ pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 type 문자열 열거형 enum {   “gs2”,   “bigquery”,   “firehose” } “gs2” 로그 출력 방법 로그 데이터의 내보내기 대상을 결정합니다. “gs2\"는 GS2의 매니지드 스토리지에 로그를 저장하며 내장된 검색·분석 기능을 이용할 수 있습니다. “bigquery\"는 Google BigQuery로 로그를 내보내 고급 분석을 수행할 수 있습니다. “firehose\"는 Amazon Kinesis Data Firehose로 로그를 스트리밍하여 S3, Redshift 등의 AWS 대상으로 전달합니다. 정의 설명 gs2 GS2에 의한 관리 bigquery BigQuery로 내보내기 firehose Kinesis Firehose로 내보내기 gcpCredentialJson string {type} == “bigquery” ※ ~ 5120자 GCP 자격 증명 BigQuery로 로그를 내보낼 때 인증에 사용하는 GCP 자격 증명 JSON입니다. 서비스 계정에는 대상 데이터셋에 대한 BigQuery Data Editor 권한이 필요합니다. ※ type이(가) “bigquery” 이면 필수 bigQueryDatasetName string {type} == “bigquery” ※ ~ 1024자 BigQuery 데이터셋 이름 로그 데이터를 내보낼 대상이 되는 BigQuery 데이터셋의 이름입니다. 데이터셋은 제공된 자격 증명에 연결된 GCP 프로젝트 내에 미리 존재해야 합니다. ※ type이(가) “bigquery” 이면 필수 logExpireDays int {type} in [“gs2”, “bigquery”] ※ 0 ~ 3650 로그 보존 기간(일) 로그 데이터를 보관하는 일수입니다. 이 기간을 초과한 로그는 자동으로 삭제됩니다. 내보내기 방법이 “gs2” 또는 “bigquery\"인 경우에 적용됩니다. 최대 3650일(약 10년)까지 설정할 수 있습니다. ※ type이(가) “gs2”,“bigquery\"이면 필수 awsRegion string {type} == “firehose” ※ ~ 256자 AWS 리전 Kinesis Data Firehose 전송 스트림이 존재하는 AWS 리전입니다(예: us-east-1, ap-northeast-1). ※ type이(가) “firehose” 이면 필수 awsAccessKeyId string {type} == “firehose” ※ ~ 256자 AWS 액세스 키 ID Kinesis Data Firehose 인증에 사용하는 AWS 액세스 키 ID입니다. IAM 사용자에게는 지정된 Firehose 전송 스트림으로 레코드를 전송할 수 있는 권한이 필요합니다. ※ type이(가) “firehose” 이면 필수 awsSecretAccessKey string {type} == “firehose” ※ ~ 256자 AWS 시크릿 액세스 키 Kinesis Data Firehose 인증을 위해 액세스 키 ID와 짝을 이루는 AWS 시크릿 액세스 키입니다. ※ type이(가) “firehose” 이면 필수 firehoseStreamName string {type} == “firehose” ※ ~ 256자 Kinesis Firehose 스트림 이름 로그 데이터의 전송 대상이 되는 Kinesis Data Firehose 전송 스트림의 이름입니다. ※ type이(가) “firehose” 이면 필수 firehoseCompressData 문자열 열거형 enum {   “none”,   “gzip” } {type} == “firehose” “none” Kinesis Firehose로 출력하는 데이터를 압축할지 여부 Kinesis Data Firehose로 전송하기 전에 로그 데이터를 압축할지를 설정합니다. Gzip 압축을 사용하면 데이터 전송량과 스토리지 비용을 절감할 수 있습니다. 정의 설명 none 압축하지 않음 gzip Gzip ※ type이(가) “firehose” 이면 필수 Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 log . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , Type : pointy . String ( \"gs2\" ), GcpCredentialJson : pointy . String ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ), BigQueryDatasetName : pointy . String ( \"dataset_0001\" ), LogExpireDays : pointy . Int32 ( 3 ), AwsRegion : pointy . String ( \"awsRegion\" ), AwsAccessKeyId : pointy . String ( \"awsAccessKeyId\" ), AwsSecretAccessKey : pointy . String ( \"awsSecretAccessKey\" ), FirehoseStreamName : pointy . String ( \"firehoseStreamName\" ), FirehoseCompressData : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withType ( \"gs2\" ) -\u003e withGcpCredentialJson ( \"{ \\\" project_id \\\" : \\\" gs2-dev \\\" }\" ) -\u003e withBigQueryDatasetName ( \"dataset_0001\" ) -\u003e withLogExpireDays ( 3 ) -\u003e withAwsRegion ( \"awsRegion\" ) -\u003e withAwsAccessKeyId ( \"awsAccessKeyId\" ) -\u003e withAwsSecretAccessKey ( \"awsSecretAccessKey\" ) -\u003e withFirehoseStreamName ( \"firehoseStreamName\" ) -\u003e withFirehoseCompressData ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.CreateNamespaceRequest ; import io.gs2.log.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withType ( \"gs2\" ) . withGcpCredentialJson ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ) . withBigQueryDatasetName ( \"dataset_0001\" ) . withLogExpireDays ( 3 ) . withAwsRegion ( \"awsRegion\" ) . withAwsAccessKeyId ( \"awsAccessKeyId\" ) . withAwsSecretAccessKey ( \"awsSecretAccessKey\" ) . withFirehoseStreamName ( \"firehoseStreamName\" ) . withFirehoseCompressData ( null ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Log . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithType ( \"gs2\" ) . WithGcpCredentialJson ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ) . WithBigQueryDatasetName ( \"dataset_0001\" ) . WithLogExpireDays ( 3 ) . WithAwsRegion ( \"awsRegion\" ) . WithAwsAccessKeyId ( \"awsAccessKeyId\" ) . WithAwsSecretAccessKey ( \"awsSecretAccessKey\" ) . WithFirehoseStreamName ( \"firehoseStreamName\" ) . WithFirehoseCompressData ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Log . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withType ( \"gs2\" ) . withGcpCredentialJson ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ) . withBigQueryDatasetName ( \"dataset_0001\" ) . withLogExpireDays ( 3 ) . withAwsRegion ( \"awsRegion\" ) . withAwsAccessKeyId ( \"awsAccessKeyId\" ) . withAwsSecretAccessKey ( \"awsSecretAccessKey\" ) . withFirehoseStreamName ( \"firehoseStreamName\" ) . withFirehoseCompressData ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . create_namespace ( log . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_type ( 'gs2' ) . with_gcp_credential_json ( '{\"project_id\": \"gs2-dev\"}' ) . with_big_query_dataset_name ( 'dataset_0001' ) . with_log_expire_days ( 3 ) . with_aws_region ( 'awsRegion' ) . with_aws_access_key_id ( 'awsAccessKeyId' ) . with_aws_secret_access_key ( 'awsSecretAccessKey' ) . with_firehose_stream_name ( 'firehoseStreamName' ) . with_firehose_compress_data ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , type = \"gs2\" , gcpCredentialJson = \"{ \\\" project_id \\\" : \\\" gs2-dev \\\" }\" , bigQueryDatasetName = \"dataset_0001\" , logExpireDays = 3 , awsRegion = \"awsRegion\" , awsAccessKeyId = \"awsAccessKeyId\" , awsSecretAccessKey = \"awsSecretAccessKey\" , firehoseStreamName = \"firehoseStreamName\" , firehoseCompressData = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , type = \"gs2\" , gcpCredentialJson = \"{ \\\" project_id \\\" : \\\" gs2-dev \\\" }\" , bigQueryDatasetName = \"dataset_0001\" , logExpireDays = 3 , awsRegion = \"awsRegion\" , awsAccessKeyId = \"awsAccessKeyId\" , awsSecretAccessKey = \"awsSecretAccessKey\" , firehoseStreamName = \"firehoseStreamName\" , firehoseCompressData = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 log . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.GetNamespaceStatusRequest ; import io.gs2.log.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Log . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Log . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . get_namespace_status ( log . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'log' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 log . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.GetNamespaceRequest ; import io.gs2.log.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Log . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Log . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . get_namespace ( log . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 type 문자열 열거형 enum {   “gs2”,   “bigquery”,   “firehose” } “gs2” 로그 출력 방법 로그 데이터의 내보내기 대상을 결정합니다. “gs2\"는 GS2의 매니지드 스토리지에 로그를 저장하며 내장된 검색·분석 기능을 이용할 수 있습니다. “bigquery\"는 Google BigQuery로 로그를 내보내 고급 분석을 수행할 수 있습니다. “firehose\"는 Amazon Kinesis Data Firehose로 로그를 스트리밍하여 S3, Redshift 등의 AWS 대상으로 전달합니다. 정의 설명 gs2 GS2에 의한 관리 bigquery BigQuery로 내보내기 firehose Kinesis Firehose로 내보내기 gcpCredentialJson string {type} == “bigquery” ※ ~ 5120자 GCP 자격 증명 BigQuery로 로그를 내보낼 때 인증에 사용하는 GCP 자격 증명 JSON입니다. 서비스 계정에는 대상 데이터셋에 대한 BigQuery Data Editor 권한이 필요합니다. ※ type이(가) “bigquery” 이면 필수 bigQueryDatasetName string {type} == “bigquery” ※ ~ 1024자 BigQuery 데이터셋 이름 로그 데이터를 내보낼 대상이 되는 BigQuery 데이터셋의 이름입니다. 데이터셋은 제공된 자격 증명에 연결된 GCP 프로젝트 내에 미리 존재해야 합니다. ※ type이(가) “bigquery” 이면 필수 logExpireDays int {type} in [“gs2”, “bigquery”] ※ 0 ~ 3650 로그 보존 기간(일) 로그 데이터를 보관하는 일수입니다. 이 기간을 초과한 로그는 자동으로 삭제됩니다. 내보내기 방법이 “gs2” 또는 “bigquery\"인 경우에 적용됩니다. 최대 3650일(약 10년)까지 설정할 수 있습니다. ※ type이(가) “gs2”,“bigquery\"이면 필수 awsRegion string {type} == “firehose” ※ ~ 256자 AWS 리전 Kinesis Data Firehose 전송 스트림이 존재하는 AWS 리전입니다(예: us-east-1, ap-northeast-1). ※ type이(가) “firehose” 이면 필수 awsAccessKeyId string {type} == “firehose” ※ ~ 256자 AWS 액세스 키 ID Kinesis Data Firehose 인증에 사용하는 AWS 액세스 키 ID입니다. IAM 사용자에게는 지정된 Firehose 전송 스트림으로 레코드를 전송할 수 있는 권한이 필요합니다. ※ type이(가) “firehose” 이면 필수 awsSecretAccessKey string {type} == “firehose” ※ ~ 256자 AWS 시크릿 액세스 키 Kinesis Data Firehose 인증을 위해 액세스 키 ID와 짝을 이루는 AWS 시크릿 액세스 키입니다. ※ type이(가) “firehose” 이면 필수 firehoseStreamName string {type} == “firehose” ※ ~ 256자 Kinesis Firehose 스트림 이름 로그 데이터의 전송 대상이 되는 Kinesis Data Firehose 전송 스트림의 이름입니다. ※ type이(가) “firehose” 이면 필수 firehoseCompressData 문자열 열거형 enum {   “none”,   “gzip” } {type} == “firehose” “none” Kinesis Firehose로 출력하는 데이터를 압축할지 여부 Kinesis Data Firehose로 전송하기 전에 로그 데이터를 압축할지를 설정합니다. Gzip 압축을 사용하면 데이터 전송량과 스토리지 비용을 절감할 수 있습니다. 정의 설명 none 압축하지 않음 gzip Gzip ※ type이(가) “firehose” 이면 필수 Result 타입 설명 item Namespace 업데이트한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 log . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), Type : pointy . String ( \"firehose\" ), GcpCredentialJson : pointy . String ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ), BigQueryDatasetName : pointy . String ( \"dataset_0001\" ), LogExpireDays : pointy . Int32 ( 3 ), AwsRegion : pointy . String ( \"awsRegion\" ), AwsAccessKeyId : pointy . String ( \"awsAccessKeyId\" ), AwsSecretAccessKey : pointy . String ( \"awsSecretAccessKey\" ), FirehoseStreamName : pointy . String ( \"firehoseStreamName\" ), FirehoseCompressData : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withType ( \"firehose\" ) -\u003e withGcpCredentialJson ( \"{ \\\" project_id \\\" : \\\" gs2-dev \\\" }\" ) -\u003e withBigQueryDatasetName ( \"dataset_0001\" ) -\u003e withLogExpireDays ( 3 ) -\u003e withAwsRegion ( \"awsRegion\" ) -\u003e withAwsAccessKeyId ( \"awsAccessKeyId\" ) -\u003e withAwsSecretAccessKey ( \"awsSecretAccessKey\" ) -\u003e withFirehoseStreamName ( \"firehoseStreamName\" ) -\u003e withFirehoseCompressData ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.UpdateNamespaceRequest ; import io.gs2.log.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withType ( \"firehose\" ) . withGcpCredentialJson ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ) . withBigQueryDatasetName ( \"dataset_0001\" ) . withLogExpireDays ( 3 ) . withAwsRegion ( \"awsRegion\" ) . withAwsAccessKeyId ( \"awsAccessKeyId\" ) . withAwsSecretAccessKey ( \"awsSecretAccessKey\" ) . withFirehoseStreamName ( \"firehoseStreamName\" ) . withFirehoseCompressData ( null ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Log . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithType ( \"firehose\" ) . WithGcpCredentialJson ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ) . WithBigQueryDatasetName ( \"dataset_0001\" ) . WithLogExpireDays ( 3 ) . WithAwsRegion ( \"awsRegion\" ) . WithAwsAccessKeyId ( \"awsAccessKeyId\" ) . WithAwsSecretAccessKey ( \"awsSecretAccessKey\" ) . WithFirehoseStreamName ( \"firehoseStreamName\" ) . WithFirehoseCompressData ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Log . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withType ( \"firehose\" ) . withGcpCredentialJson ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ) . withBigQueryDatasetName ( \"dataset_0001\" ) . withLogExpireDays ( 3 ) . withAwsRegion ( \"awsRegion\" ) . withAwsAccessKeyId ( \"awsAccessKeyId\" ) . withAwsSecretAccessKey ( \"awsSecretAccessKey\" ) . withFirehoseStreamName ( \"firehoseStreamName\" ) . withFirehoseCompressData ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . update_namespace ( log . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_type ( 'firehose' ) . with_gcp_credential_json ( '{\"project_id\": \"gs2-dev\"}' ) . with_big_query_dataset_name ( 'dataset_0001' ) . with_log_expire_days ( 3 ) . with_aws_region ( 'awsRegion' ) . with_aws_access_key_id ( 'awsAccessKeyId' ) . with_aws_secret_access_key ( 'awsSecretAccessKey' ) . with_firehose_stream_name ( 'firehoseStreamName' ) . with_firehose_compress_data ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , type = \"firehose\" , gcpCredentialJson = \"{ \\\" project_id \\\" : \\\" gs2-dev \\\" }\" , bigQueryDatasetName = \"dataset_0001\" , logExpireDays = 3 , awsRegion = \"awsRegion\" , awsAccessKeyId = \"awsAccessKeyId\" , awsSecretAccessKey = \"awsSecretAccessKey\" , firehoseStreamName = \"firehoseStreamName\" , firehoseCompressData = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , type = \"firehose\" , gcpCredentialJson = \"{ \\\" project_id \\\" : \\\" gs2-dev \\\" }\" , bigQueryDatasetName = \"dataset_0001\" , logExpireDays = 3 , awsRegion = \"awsRegion\" , awsAccessKeyId = \"awsAccessKeyId\" , awsSecretAccessKey = \"awsSecretAccessKey\" , firehoseStreamName = \"firehoseStreamName\" , firehoseCompressData = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 log . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DeleteNamespaceRequest ; import io.gs2.log.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Log . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Log . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . delete_namespace ( log . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 log . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.GetServiceVersionRequest ; import io.gs2.log.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Log . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Log . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . get_service_version ( log . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; queryAccessLog 액세스 로그 목록 조회 지정된 시간 범위 내의 액세스 로그를 쿼리합니다. 서비스, 메서드, 사용자 ID로 필터링할 수 있습니다. 결과에는 총 건수와 스캔 크기(바이트)가 포함됩니다. 7일을 초과하는 기간을 검색하는 경우 longTerm 플래그를 활성화해야 하며, 스캔 용량 증가로 인해 API 실행 요금이 증가할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. service string ~ 1024자 마이크로서비스 종류 요청을 처리한 GS2 마이크로서비스의 이름입니다(예: account, inventory, limit). method string ~ 1024자 마이크로서비스 메서드 마이크로서비스에서 호출된 구체적인 API 메서드입니다(예: createNamespace, getItem). userId string ~ 128자 사용자ID begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 100 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 액세스 로그 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryAccessLog ( \u0026 log . QueryAccessLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Service : pointy . String ( \"account\" ), Method : pointy . String ( \"createAccount\" ), UserId : pointy . String ( \"user-0001\" ), Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryAccessLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryAccessLog ( ( new QueryAccessLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withService ( \"account\" ) -\u003e withMethod ( \"createAccount\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryAccessLogRequest ; import io.gs2.log.result.QueryAccessLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryAccessLogResult result = client . queryAccessLog ( new QueryAccessLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"account\" ) . withMethod ( \"createAccount\" ) . withUserId ( \"user-0001\" ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List AccessLog \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryAccessLogResult \u003e asyncResult = null ; yield return client . QueryAccessLog ( new Gs2 . Gs2Log . Request . QueryAccessLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithService ( \"account\" ) . WithMethod ( \"createAccount\" ) . WithUserId ( \"user-0001\" ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryAccessLog ( new Gs2Log . QueryAccessLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"account\" ) . withMethod ( \"createAccount\" ) . withUserId ( \"user-0001\" ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_access_log ( log . QueryAccessLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_service ( 'account' ) . with_method ( 'createAccount' ) . with_user_id ( 'user-0001' ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_access_log ({ namespaceName = \"namespace-0001\" , service = \"account\" , method = \"createAccount\" , userId = \"user-0001\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.query_access_log_async ({ namespaceName = \"namespace-0001\" , service = \"account\" , method = \"createAccount\" , userId = \"user-0001\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; countAccessLog 액세스 로그의 집계 결과 조회 지정된 시간 범위 내의 액세스 로그 건수를 집계합니다. 서비스, 메서드, 사용자 ID로 분류할 수 있습니다. 각 분류 플래그에 따라 해당 차원으로 그룹화할지 여부가 제어됩니다. longTerm 플래그를 활성화하면 7일을 초과하는 기간도 검색할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. service bool false 마이크로서비스 종류로 분류할지 여부 method bool false 마이크로서비스 메서드로 분류할지 여부 userId bool false 사용자 ID로 분류할지 여부 begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 액세스 로그 집계 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . CountAccessLog ( \u0026 log . CountAccessLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Service : pointy . String ( \"account\" ), Method : pointy . String ( \"createAccount\" ), UserId : pointy . String ( \"user-0001\" ), Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\CountAccessLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e countAccessLog ( ( new CountAccessLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withService ( \"account\" ) -\u003e withMethod ( \"createAccount\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.CountAccessLogRequest ; import io.gs2.log.result.CountAccessLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { CountAccessLogResult result = client . countAccessLog ( new CountAccessLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"account\" ) . withMethod ( \"createAccount\" ) . withUserId ( \"user-0001\" ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List AccessLogCount \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . CountAccessLogResult \u003e asyncResult = null ; yield return client . CountAccessLog ( new Gs2 . Gs2Log . Request . CountAccessLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithService ( \"account\" ) . WithMethod ( \"createAccount\" ) . WithUserId ( \"user-0001\" ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . countAccessLog ( new Gs2Log . CountAccessLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"account\" ) . withMethod ( \"createAccount\" ) . withUserId ( \"user-0001\" ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . count_access_log ( log . CountAccessLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_service ( 'account' ) . with_method ( 'createAccount' ) . with_user_id ( 'user-0001' ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.count_access_log ({ namespaceName = \"namespace-0001\" , service = \"account\" , method = \"createAccount\" , userId = \"user-0001\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.count_access_log_async ({ namespaceName = \"namespace-0001\" , service = \"account\" , method = \"createAccount\" , userId = \"user-0001\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; queryIssueStampSheetLog 트랜잭션 발행 로그 목록 조회 지정된 시간 범위 내의 트랜잭션 발행 로그를 쿼리합니다. 서비스, 메서드, 사용자 ID, 액션 타입으로 필터링할 수 있습니다. 응답에는 총 건수와 스캔 크기가 포함됩니다. 7일을 초과하는 검색에는 longTerm 플래그를 활성화해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. service string ~ 1024자 마이크로서비스 종류 트랜잭션을 발행한 GS2 마이크로서비스의 이름입니다. method string ~ 1024자 마이크로서비스 메서드 트랜잭션 발행을 트리거한 구체적인 API 메서드입니다. userId string ~ 128자 사용자ID action string ~ 1024자 입수 액션 트랜잭션에 포함된 입수 액션으로, 실행 시 사용자가 받게 되는 내용을 지정합니다. begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 100 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 트랜잭션 발행 로그 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryIssueStampSheetLog ( \u0026 log . QueryIssueStampSheetLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Service : pointy . String ( \"showcase\" ), Method : pointy . String ( \"buy\" ), UserId : pointy . String ( \"user-0001\" ), Action : pointy . String ( \"Gs2Showcase:Buy\" ), Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryIssueStampSheetLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryIssueStampSheetLog ( ( new QueryIssueStampSheetLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withService ( \"showcase\" ) -\u003e withMethod ( \"buy\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAction ( \"Gs2Showcase:Buy\" ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryIssueStampSheetLogRequest ; import io.gs2.log.result.QueryIssueStampSheetLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryIssueStampSheetLogResult result = client . queryIssueStampSheetLog ( new QueryIssueStampSheetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"showcase\" ) . withMethod ( \"buy\" ) . withUserId ( \"user-0001\" ) . withAction ( \"Gs2Showcase:Buy\" ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List IssueStampSheetLog \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryIssueStampSheetLogResult \u003e asyncResult = null ; yield return client . QueryIssueStampSheetLog ( new Gs2 . Gs2Log . Request . QueryIssueStampSheetLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithService ( \"showcase\" ) . WithMethod ( \"buy\" ) . WithUserId ( \"user-0001\" ) . WithAction ( \"Gs2Showcase:Buy\" ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryIssueStampSheetLog ( new Gs2Log . QueryIssueStampSheetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"showcase\" ) . withMethod ( \"buy\" ) . withUserId ( \"user-0001\" ) . withAction ( \"Gs2Showcase:Buy\" ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_issue_stamp_sheet_log ( log . QueryIssueStampSheetLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_service ( 'showcase' ) . with_method ( 'buy' ) . with_user_id ( 'user-0001' ) . with_action ( 'Gs2Showcase:Buy' ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_issue_stamp_sheet_log ({ namespaceName = \"namespace-0001\" , service = \"showcase\" , method = \"buy\" , userId = \"user-0001\" , action = \"Gs2Showcase:Buy\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.query_issue_stamp_sheet_log_async ({ namespaceName = \"namespace-0001\" , service = \"showcase\" , method = \"buy\" , userId = \"user-0001\" , action = \"Gs2Showcase:Buy\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; countIssueStampSheetLog 트랜잭션 발행 로그의 집계 결과 조회 지정된 시간 범위 내의 트랜잭션 발행 로그 건수를 집계합니다. 서비스, 메서드, 사용자 ID, 액션 타입으로 분류할 수 있습니다. 각 분류 플래그에 따라 해당 차원으로 그룹화할지 여부가 제어됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. service bool false 마이크로서비스 종류로 분류할지 여부 method bool false 마이크로서비스 메서드로 분류할지 여부 userId bool false 사용자 ID로 분류할지 여부 action bool false 획득 액션으로 분류할지 여부 begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 트랜잭션 발행 로그 집계 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . CountIssueStampSheetLog ( \u0026 log . CountIssueStampSheetLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Service : pointy . String ( \"showcase\" ), Method : pointy . String ( \"buy\" ), UserId : pointy . String ( \"user-0001\" ), Action : pointy . String ( \"Gs2Showcase:Buy\" ), Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\CountIssueStampSheetLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e countIssueStampSheetLog ( ( new CountIssueStampSheetLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withService ( \"showcase\" ) -\u003e withMethod ( \"buy\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAction ( \"Gs2Showcase:Buy\" ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.CountIssueStampSheetLogRequest ; import io.gs2.log.result.CountIssueStampSheetLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { CountIssueStampSheetLogResult result = client . countIssueStampSheetLog ( new CountIssueStampSheetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"showcase\" ) . withMethod ( \"buy\" ) . withUserId ( \"user-0001\" ) . withAction ( \"Gs2Showcase:Buy\" ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List IssueStampSheetLogCount \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . CountIssueStampSheetLogResult \u003e asyncResult = null ; yield return client . CountIssueStampSheetLog ( new Gs2 . Gs2Log . Request . CountIssueStampSheetLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithService ( \"showcase\" ) . WithMethod ( \"buy\" ) . WithUserId ( \"user-0001\" ) . WithAction ( \"Gs2Showcase:Buy\" ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . countIssueStampSheetLog ( new Gs2Log . CountIssueStampSheetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"showcase\" ) . withMethod ( \"buy\" ) . withUserId ( \"user-0001\" ) . withAction ( \"Gs2Showcase:Buy\" ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . count_issue_stamp_sheet_log ( log . CountIssueStampSheetLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_service ( 'showcase' ) . with_method ( 'buy' ) . with_user_id ( 'user-0001' ) . with_action ( 'Gs2Showcase:Buy' ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.count_issue_stamp_sheet_log ({ namespaceName = \"namespace-0001\" , service = \"showcase\" , method = \"buy\" , userId = \"user-0001\" , action = \"Gs2Showcase:Buy\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.count_issue_stamp_sheet_log_async ({ namespaceName = \"namespace-0001\" , service = \"showcase\" , method = \"buy\" , userId = \"user-0001\" , action = \"Gs2Showcase:Buy\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; queryExecuteStampSheetLog 획득 액션 실행 로그 목록 조회 지정된 시간 범위 내의 획득 액션 실행 로그를 조회합니다. 서비스, 메서드, 사용자 ID, 액션 타입으로 필터링할 수 있습니다. 응답에는 총 건수와 스캔 크기가 포함됩니다. 7일을 초과하는 검색에는 longTerm 플래그를 활성화하세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. service string ~ 1024자 마이크로서비스 종류 입수 액션을 실행한 GS2 마이크로서비스의 이름입니다(예: inventory, experience). method string ~ 1024자 마이크로서비스 메서드 입수 액션 실행을 위해 마이크로서비스에서 호출된 구체적인 메서드입니다. userId string ~ 128자 사용자ID action string ~ 1024자 입수 액션 실행된 입수 액션의 종류입니다(예: Gs2Inventory:AcquireItemSetByUserId, Gs2Experience:AddExperienceByUserId). begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 100 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 획득 액션 실행 로그 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryExecuteStampSheetLog ( \u0026 log . QueryExecuteStampSheetLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Service : pointy . String ( \"inventory\" ), Method : pointy . String ( \"acquireItemSetByUserId\" ), UserId : pointy . String ( \"user-0001\" ), Action : nil , Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryExecuteStampSheetLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryExecuteStampSheetLog ( ( new QueryExecuteStampSheetLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withService ( \"inventory\" ) -\u003e withMethod ( \"acquireItemSetByUserId\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAction ( null ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryExecuteStampSheetLogRequest ; import io.gs2.log.result.QueryExecuteStampSheetLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryExecuteStampSheetLogResult result = client . queryExecuteStampSheetLog ( new QueryExecuteStampSheetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"inventory\" ) . withMethod ( \"acquireItemSetByUserId\" ) . withUserId ( \"user-0001\" ) . withAction ( null ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ExecuteStampSheetLog \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryExecuteStampSheetLogResult \u003e asyncResult = null ; yield return client . QueryExecuteStampSheetLog ( new Gs2 . Gs2Log . Request . QueryExecuteStampSheetLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithService ( \"inventory\" ) . WithMethod ( \"acquireItemSetByUserId\" ) . WithUserId ( \"user-0001\" ) . WithAction ( null ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryExecuteStampSheetLog ( new Gs2Log . QueryExecuteStampSheetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"inventory\" ) . withMethod ( \"acquireItemSetByUserId\" ) . withUserId ( \"user-0001\" ) . withAction ( null ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_execute_stamp_sheet_log ( log . QueryExecuteStampSheetLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_service ( 'inventory' ) . with_method ( 'acquireItemSetByUserId' ) . with_user_id ( 'user-0001' ) . with_action ( None ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_execute_stamp_sheet_log ({ namespaceName = \"namespace-0001\" , service = \"inventory\" , method = \"acquireItemSetByUserId\" , userId = \"user-0001\" , action = nil , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.query_execute_stamp_sheet_log_async ({ namespaceName = \"namespace-0001\" , service = \"inventory\" , method = \"acquireItemSetByUserId\" , userId = \"user-0001\" , action = nil , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; countExecuteStampSheetLog 획득 액션 실행 로그의 집계 결과를 조회 지정된 시간 범위 내의 획득 액션 실행 로그 건수를 집계합니다. 서비스, 메서드, 사용자 ID, 액션 타입으로 분류할 수 있습니다. 각 분류 플래그에 따라 해당 차원으로 그룹화할지가 제어됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. service bool false 마이크로서비스 종류로 분류할지 여부 method bool false 마이크로서비스 메서드로 분류할지 여부 userId bool false 사용자 ID로 분류할지 여부 action bool false 획득 액션으로 분류할지 여부 begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 획득 액션 실행 로그 집계 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . CountExecuteStampSheetLog ( \u0026 log . CountExecuteStampSheetLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Service : pointy . String ( \"inventory\" ), Method : pointy . String ( \"acquireItemSetByUserId\" ), UserId : pointy . String ( \"user-0001\" ), Action : nil , Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\CountExecuteStampSheetLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e countExecuteStampSheetLog ( ( new CountExecuteStampSheetLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withService ( \"inventory\" ) -\u003e withMethod ( \"acquireItemSetByUserId\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAction ( null ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.CountExecuteStampSheetLogRequest ; import io.gs2.log.result.CountExecuteStampSheetLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { CountExecuteStampSheetLogResult result = client . countExecuteStampSheetLog ( new CountExecuteStampSheetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"inventory\" ) . withMethod ( \"acquireItemSetByUserId\" ) . withUserId ( \"user-0001\" ) . withAction ( null ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ExecuteStampSheetLogCount \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . CountExecuteStampSheetLogResult \u003e asyncResult = null ; yield return client . CountExecuteStampSheetLog ( new Gs2 . Gs2Log . Request . CountExecuteStampSheetLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithService ( \"inventory\" ) . WithMethod ( \"acquireItemSetByUserId\" ) . WithUserId ( \"user-0001\" ) . WithAction ( null ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . countExecuteStampSheetLog ( new Gs2Log . CountExecuteStampSheetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"inventory\" ) . withMethod ( \"acquireItemSetByUserId\" ) . withUserId ( \"user-0001\" ) . withAction ( null ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . count_execute_stamp_sheet_log ( log . CountExecuteStampSheetLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_service ( 'inventory' ) . with_method ( 'acquireItemSetByUserId' ) . with_user_id ( 'user-0001' ) . with_action ( None ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.count_execute_stamp_sheet_log ({ namespaceName = \"namespace-0001\" , service = \"inventory\" , method = \"acquireItemSetByUserId\" , userId = \"user-0001\" , action = nil , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.count_execute_stamp_sheet_log_async ({ namespaceName = \"namespace-0001\" , service = \"inventory\" , method = \"acquireItemSetByUserId\" , userId = \"user-0001\" , action = nil , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; queryExecuteStampTaskLog 소비 액션 실행 로그 목록 조회 지정된 시간 범위 내의 소비 액션 실행 로그를 쿼리합니다. 서비스, 메서드, 사용자 ID, 액션 타입으로 필터링할 수 있습니다. 응답에는 총 건수와 스캔 크기가 포함됩니다. 7일을 초과하는 검색에는 longTerm 플래그를 활성화해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. service string ~ 1024자 마이크로서비스 종류 소비 액션을 실행한 GS2 마이크로서비스의 이름입니다(예: inventory, money). method string ~ 1024자 마이크로서비스의 메서드 소비 액션을 실행하기 위해 마이크로서비스에서 호출된 구체적인 메서드입니다. userId string ~ 128자 사용자ID action string ~ 1024자 소비 액션 실행된 소비 액션의 종류입니다(예: Gs2Inventory:ConsumeItemSetByUserId, Gs2Money:WithdrawByUserId). begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 100 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 소비 액션 실행 로그 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryExecuteStampTaskLog ( \u0026 log . QueryExecuteStampTaskLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Service : pointy . String ( \"inventory\" ), Method : pointy . String ( \"consumeItemSetByUserId\" ), UserId : pointy . String ( \"user-0001\" ), Action : nil , Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryExecuteStampTaskLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryExecuteStampTaskLog ( ( new QueryExecuteStampTaskLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withService ( \"inventory\" ) -\u003e withMethod ( \"consumeItemSetByUserId\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAction ( null ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryExecuteStampTaskLogRequest ; import io.gs2.log.result.QueryExecuteStampTaskLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryExecuteStampTaskLogResult result = client . queryExecuteStampTaskLog ( new QueryExecuteStampTaskLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"inventory\" ) . withMethod ( \"consumeItemSetByUserId\" ) . withUserId ( \"user-0001\" ) . withAction ( null ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ExecuteStampTaskLog \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryExecuteStampTaskLogResult \u003e asyncResult = null ; yield return client . QueryExecuteStampTaskLog ( new Gs2 . Gs2Log . Request . QueryExecuteStampTaskLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithService ( \"inventory\" ) . WithMethod ( \"consumeItemSetByUserId\" ) . WithUserId ( \"user-0001\" ) . WithAction ( null ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryExecuteStampTaskLog ( new Gs2Log . QueryExecuteStampTaskLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"inventory\" ) . withMethod ( \"consumeItemSetByUserId\" ) . withUserId ( \"user-0001\" ) . withAction ( null ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_execute_stamp_task_log ( log . QueryExecuteStampTaskLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_service ( 'inventory' ) . with_method ( 'consumeItemSetByUserId' ) . with_user_id ( 'user-0001' ) . with_action ( None ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_execute_stamp_task_log ({ namespaceName = \"namespace-0001\" , service = \"inventory\" , method = \"consumeItemSetByUserId\" , userId = \"user-0001\" , action = nil , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.query_execute_stamp_task_log_async ({ namespaceName = \"namespace-0001\" , service = \"inventory\" , method = \"consumeItemSetByUserId\" , userId = \"user-0001\" , action = nil , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; countExecuteStampTaskLog 소비 액션 실행 로그의 집계 결과 조회 지정된 시간 범위 내의 소비 액션 실행 로그 건수를 집계합니다. 서비스, 메서드, 사용자 ID, 액션 타입으로 분류할 수 있습니다. 각 분류 플래그에 따라 해당 차원으로 그룹화할지 여부가 제어됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. service bool false 마이크로서비스 종류로 분류할지 여부 method bool false 마이크로서비스 메서드로 분류할지 여부 userId bool false 사용자 ID로 분류할지 여부 action bool false 획득 액션으로 분류할지 여부 begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 소비 액션 실행 로그 집계 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . CountExecuteStampTaskLog ( \u0026 log . CountExecuteStampTaskLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Service : pointy . String ( \"inventory\" ), Method : pointy . String ( \"consumeItemSetByUserId\" ), UserId : pointy . String ( \"user-0001\" ), Action : nil , Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\CountExecuteStampTaskLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e countExecuteStampTaskLog ( ( new CountExecuteStampTaskLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withService ( \"inventory\" ) -\u003e withMethod ( \"consumeItemSetByUserId\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAction ( null ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.CountExecuteStampTaskLogRequest ; import io.gs2.log.result.CountExecuteStampTaskLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { CountExecuteStampTaskLogResult result = client . countExecuteStampTaskLog ( new CountExecuteStampTaskLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"inventory\" ) . withMethod ( \"consumeItemSetByUserId\" ) . withUserId ( \"user-0001\" ) . withAction ( null ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ExecuteStampTaskLogCount \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . CountExecuteStampTaskLogResult \u003e asyncResult = null ; yield return client . CountExecuteStampTaskLog ( new Gs2 . Gs2Log . Request . CountExecuteStampTaskLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithService ( \"inventory\" ) . WithMethod ( \"consumeItemSetByUserId\" ) . WithUserId ( \"user-0001\" ) . WithAction ( null ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . countExecuteStampTaskLog ( new Gs2Log . CountExecuteStampTaskLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withService ( \"inventory\" ) . withMethod ( \"consumeItemSetByUserId\" ) . withUserId ( \"user-0001\" ) . withAction ( null ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . count_execute_stamp_task_log ( log . CountExecuteStampTaskLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_service ( 'inventory' ) . with_method ( 'consumeItemSetByUserId' ) . with_user_id ( 'user-0001' ) . with_action ( None ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.count_execute_stamp_task_log ({ namespaceName = \"namespace-0001\" , service = \"inventory\" , method = \"consumeItemSetByUserId\" , userId = \"user-0001\" , action = nil , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.count_execute_stamp_task_log_async ({ namespaceName = \"namespace-0001\" , service = \"inventory\" , method = \"consumeItemSetByUserId\" , userId = \"user-0001\" , action = nil , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; queryInGameLog 게임 내 로그 목록 조회 지정된 시간 범위 내의 커스텀 게임 내 로그를 쿼리합니다. 사용자 ID와 태그로 필터링할 수 있습니다. 게임 내 로그는 개발자가 정의한 로그 엔트리로, 임의의 페이로드 데이터와 분류용 태그를 포함할 수 있습니다. 7일을 초과하는 검색에는 longTerm 플래그를 활성화해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID tags List [] 0 ~ 20 items 태그 필터링과 분류를 위해 로그 엔트리에 부여된 키-값 쌍입니다. 태그를 통해 인게임 로그의 효율적인 검색과 집계가 가능합니다(예: 이벤트 타입, 스테이지 ID, 아이템 카테고리). begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각으로부터 1시간 후의 절대 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 100 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 게임 내 로그 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryInGameLog ( \u0026 log . QueryInGameLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Tags : [] log . InGameLogTag { log . InGameLogTag { Key : pointy . String ( \"tag1\" ), Value : pointy . String ( \"value1\" ), }, log . InGameLogTag { Key : pointy . String ( \"tag2\" ), Value : pointy . String ( \"value2\" ), }, }, Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryInGameLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryInGameLog ( ( new QueryInGameLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTags ([ ( new InGameLogTag ()) -\u003e withKey ( \"tag1\" ) -\u003e withValue ( \"value1\" ), ( new InGameLogTag ()) -\u003e withKey ( \"tag2\" ) -\u003e withValue ( \"value2\" ), ]) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryInGameLogRequest ; import io.gs2.log.result.QueryInGameLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryInGameLogResult result = client . queryInGameLog ( new QueryInGameLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTags ( Arrays . asList ( new InGameLogTag () . withKey ( \"tag1\" ) . withValue ( \"value1\" ), new InGameLogTag () . withKey ( \"tag2\" ) . withValue ( \"value2\" ) )) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List InGameLog \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryInGameLogResult \u003e asyncResult = null ; yield return client . QueryInGameLog ( new Gs2 . Gs2Log . Request . QueryInGameLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTags ( new Gs2 . Gs2Log . Model . InGameLogTag [] { new Gs2 . Gs2Log . Model . InGameLogTag () . WithKey ( \"tag1\" ) . WithValue ( \"value1\" ), new Gs2 . Gs2Log . Model . InGameLogTag () . WithKey ( \"tag2\" ) . WithValue ( \"value2\" ), }) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryInGameLog ( new Gs2Log . QueryInGameLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTags ([ new Gs2Log . model . InGameLogTag () . withKey ( \"tag1\" ) . withValue ( \"value1\" ), new Gs2Log . model . InGameLogTag () . withKey ( \"tag2\" ) . withValue ( \"value2\" ), ]) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_in_game_log ( log . QueryInGameLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_tags ([ log . InGameLogTag () . with_key ( 'tag1' ) . with_value ( 'value1' ), log . InGameLogTag () . with_key ( 'tag2' ) . with_value ( 'value2' ), ]) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_in_game_log ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , tags = { { key = \"tag1\" , value = \"value1\" , }, { key = \"tag2\" , value = \"value2\" , } }, begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.query_in_game_log_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , tags = { { key = \"tag1\" , value = \"value1\" , }, { key = \"tag2\" , value = \"value2\" , } }, begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; sendInGameLog 게임 내 로그 전송 지정된 태그와 페이로드를 포함한 커스텀 게임 내 로그 엔트리를 요청한 사용자로서 전송합니다. 태그는 로그 쿼리 시 분류와 필터링에 사용됩니다. 페이로드에는 개발자가 정의한 임의의 데이터를 포함할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string ~ 128자 액세스 토큰 tags List [] 0 ~ 20 items 태그 필터링과 분류를 위해 로그 엔트리에 부여된 키-값 쌍입니다. 태그를 통해 인게임 로그의 효율적인 검색과 집계가 가능합니다(예: 이벤트 타입, 스테이지 ID, 아이템 카테고리). payload string  ~ 10485760자 페이로드 JSON 형식의 커스텀 로그 데이터입니다. 플레이어의 행동, 게임 상태, 비즈니스 메트릭 등 게임 고유의 임의의 정보를 포함할 수 있습니다. 최대 10MB까지 가능합니다. Result 타입 설명 item InGameLog 게임 내 로그 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . SendInGameLog ( \u0026 log . SendInGameLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Tags : [] log . InGameLogTag { log . InGameLogTag { Key : pointy . String ( \"tag1\" ), Value : pointy . String ( \"value1\" ), }, log . InGameLogTag { Key : pointy . String ( \"tag2\" ), Value : pointy . String ( \"value2\" ), }, }, Payload : pointy . String ( \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\SendInGameLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e sendInGameLog ( ( new SendInGameLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTags ([ ( new InGameLogTag ()) -\u003e withKey ( \"tag1\" ) -\u003e withValue ( \"value1\" ), ( new InGameLogTag ()) -\u003e withKey ( \"tag2\" ) -\u003e withValue ( \"value2\" ), ]) -\u003e withPayload ( \"{ \\\" category \\\" : \\\" use-item \\\" , \\\" count \\\" : 1, \\\" itemId \\\" : \\\" item-0001 \\\" }\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.SendInGameLogRequest ; import io.gs2.log.result.SendInGameLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { SendInGameLogResult result = client . sendInGameLog ( new SendInGameLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTags ( Arrays . asList ( new InGameLogTag () . withKey ( \"tag1\" ) . withValue ( \"value1\" ), new InGameLogTag () . withKey ( \"tag2\" ) . withValue ( \"value2\" ) )) . withPayload ( \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" ) ); InGameLog item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . SendInGameLogResult \u003e asyncResult = null ; yield return client . SendInGameLog ( new Gs2 . Gs2Log . Request . SendInGameLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTags ( new Gs2 . Gs2Log . Model . InGameLogTag [] { new Gs2 . Gs2Log . Model . InGameLogTag () . WithKey ( \"tag1\" ) . WithValue ( \"value1\" ), new Gs2 . Gs2Log . Model . InGameLogTag () . WithKey ( \"tag2\" ) . WithValue ( \"value2\" ), }) . WithPayload ( \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . sendInGameLog ( new Gs2Log . SendInGameLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTags ([ new Gs2Log . model . InGameLogTag () . withKey ( \"tag1\" ) . withValue ( \"value1\" ), new Gs2Log . model . InGameLogTag () . withKey ( \"tag2\" ) . withValue ( \"value2\" ), ]) . withPayload ( \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . send_in_game_log ( log . SendInGameLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_tags ([ log . InGameLogTag () . with_key ( 'tag1' ) . with_value ( 'value1' ), log . InGameLogTag () . with_key ( 'tag2' ) . with_value ( 'value2' ), ]) . with_payload ( '{\"category\": \"use-item\", \"count\": 1, \"itemId\": \"item-0001\"}' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.send_in_game_log ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , tags = { { key = \"tag1\" , value = \"value1\" , }, { key = \"tag2\" , value = \"value2\" , } }, payload = \"{ \\\" category \\\" : \\\" use-item \\\" , \\\" count \\\" : 1, \\\" itemId \\\" : \\\" item-0001 \\\" }\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.send_in_game_log_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , tags = { { key = \"tag1\" , value = \"value1\" , }, { key = \"tag2\" , value = \"value2\" , } }, payload = \"{ \\\" category \\\" : \\\" use-item \\\" , \\\" count \\\" : 1, \\\" itemId \\\" : \\\" item-0001 \\\" }\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; sendInGameLogByUserId 사용자 ID를 지정하여 게임 내 로그 전송 지정된 사용자의 커스텀 게임 내 로그 엔트리를 지정된 태그와 페이로드로 전송합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID tags List [] 0 ~ 20 items 태그 필터링과 분류를 위해 로그 엔트리에 부여된 키-값 쌍입니다. 태그를 통해 인게임 로그의 효율적인 검색과 집계가 가능합니다(예: 이벤트 타입, 스테이지 ID, 아이템 카테고리). payload string  ~ 10485760자 페이로드 JSON 형식의 커스텀 로그 데이터입니다. 플레이어의 행동, 게임 상태, 비즈니스 메트릭 등 게임 고유의 임의의 정보를 포함할 수 있습니다. 최대 10MB까지 가능합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item InGameLog 게임 내 로그 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . SendInGameLogByUserId ( \u0026 log . SendInGameLogByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Tags : [] log . InGameLogTag { log . InGameLogTag { Key : pointy . String ( \"tag1\" ), Value : pointy . String ( \"value1\" ), }, log . InGameLogTag { Key : pointy . String ( \"tag2\" ), Value : pointy . String ( \"value2\" ), }, }, Payload : pointy . String ( \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\SendInGameLogByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e sendInGameLogByUserId ( ( new SendInGameLogByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTags ([ ( new InGameLogTag ()) -\u003e withKey ( \"tag1\" ) -\u003e withValue ( \"value1\" ), ( new InGameLogTag ()) -\u003e withKey ( \"tag2\" ) -\u003e withValue ( \"value2\" ), ]) -\u003e withPayload ( \"{ \\\" category \\\" : \\\" use-item \\\" , \\\" count \\\" : 1, \\\" itemId \\\" : \\\" item-0001 \\\" }\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.SendInGameLogByUserIdRequest ; import io.gs2.log.result.SendInGameLogByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { SendInGameLogByUserIdResult result = client . sendInGameLogByUserId ( new SendInGameLogByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTags ( Arrays . asList ( new InGameLogTag () . withKey ( \"tag1\" ) . withValue ( \"value1\" ), new InGameLogTag () . withKey ( \"tag2\" ) . withValue ( \"value2\" ) )) . withPayload ( \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" ) . withTimeOffsetToken ( null ) ); InGameLog item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . SendInGameLogByUserIdResult \u003e asyncResult = null ; yield return client . SendInGameLogByUserId ( new Gs2 . Gs2Log . Request . SendInGameLogByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTags ( new Gs2 . Gs2Log . Model . InGameLogTag [] { new Gs2 . Gs2Log . Model . InGameLogTag () . WithKey ( \"tag1\" ) . WithValue ( \"value1\" ), new Gs2 . Gs2Log . Model . InGameLogTag () . WithKey ( \"tag2\" ) . WithValue ( \"value2\" ), }) . WithPayload ( \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . sendInGameLogByUserId ( new Gs2Log . SendInGameLogByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTags ([ new Gs2Log . model . InGameLogTag () . withKey ( \"tag1\" ) . withValue ( \"value1\" ), new Gs2Log . model . InGameLogTag () . withKey ( \"tag2\" ) . withValue ( \"value2\" ), ]) . withPayload ( \"{\\\"category\\\": \\\"use-item\\\", \\\"count\\\": 1, \\\"itemId\\\": \\\"item-0001\\\"}\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . send_in_game_log_by_user_id ( log . SendInGameLogByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_tags ([ log . InGameLogTag () . with_key ( 'tag1' ) . with_value ( 'value1' ), log . InGameLogTag () . with_key ( 'tag2' ) . with_value ( 'value2' ), ]) . with_payload ( '{\"category\": \"use-item\", \"count\": 1, \"itemId\": \"item-0001\"}' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.send_in_game_log_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , tags = { { key = \"tag1\" , value = \"value1\" , }, { key = \"tag2\" , value = \"value2\" , } }, payload = \"{ \\\" category \\\" : \\\" use-item \\\" , \\\" count \\\" : 1, \\\" itemId \\\" : \\\" item-0001 \\\" }\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.send_in_game_log_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , tags = { { key = \"tag1\" , value = \"value1\" , }, { key = \"tag2\" , value = \"value2\" , } }, payload = \"{ \\\" category \\\" : \\\" use-item \\\" , \\\" count \\\" : 1, \\\" itemId \\\" : \\\" item-0001 \\\" }\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; queryAccessLogWithTelemetry 텔레메트리가 포함된 액세스 로그 목록 조회 지정된 시간 범위 내의 텔레메트리 데이터를 포함한 액세스 로그를 쿼리합니다. 사용자 ID로 필터링할 수 있습니다. 텔레메트리 데이터는 각 API 호출에 대한 추가적인 성능 및 진단 정보를 제공합니다. 7일을 초과하는 기간을 검색하는 경우 longTerm 플래그를 활성화해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 longTerm bool false 7일보다 긴 기간의 로그를 검색 대상으로 할지 여부 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 액세스 로그 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 totalCount long 쿼리 결과의 총 건수 scanSize long 검색 시 스캔한 총 용량(bytes) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryAccessLogWithTelemetry ( \u0026 log . QueryAccessLogWithTelemetryRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Begin : pointy . Int64 ( 1473174000000 ), End : pointy . Int64 ( 1473177600000 ), LongTerm : pointy . Bool ( false ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken totalCount := result . TotalCount scanSize := result . ScanSize use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryAccessLogWithTelemetryRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryAccessLogWithTelemetry ( ( new QueryAccessLogWithTelemetryRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withBegin ( 1473174000000 ) -\u003e withEnd ( 1473177600000 ) -\u003e withLongTerm ( false ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); $totalCount = $result -\u003e getTotalCount (); $scanSize = $result -\u003e getScanSize (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryAccessLogWithTelemetryRequest ; import io.gs2.log.result.QueryAccessLogWithTelemetryResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryAccessLogWithTelemetryResult result = client . queryAccessLogWithTelemetry ( new QueryAccessLogWithTelemetryRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withBegin ( 1473174000000L ) . withEnd ( 1473177600000L ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List AccessLogWithTelemetry \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); long totalCount = result . getTotalCount (); long scanSize = result . getScanSize (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryAccessLogWithTelemetryResult \u003e asyncResult = null ; yield return client . QueryAccessLogWithTelemetry ( new Gs2 . Gs2Log . Request . QueryAccessLogWithTelemetryRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithBegin ( 1473174000000L ) . WithEnd ( 1473177600000L ) . WithLongTerm ( false ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; var totalCount = result . TotalCount ; var scanSize = result . ScanSize ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryAccessLogWithTelemetry ( new Gs2Log . QueryAccessLogWithTelemetryRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withBegin ( 1473174000000 ) . withEnd ( 1473177600000 ) . withLongTerm ( false ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); const totalCount = result . getTotalCount (); const scanSize = result . getScanSize (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_access_log_with_telemetry ( log . QueryAccessLogWithTelemetryRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_begin ( 1473174000000 ) . with_end ( 1473177600000 ) . with_long_term ( False ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token total_count = result . total_count scan_size = result . scan_size except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_access_log_with_telemetry ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; client = gs2 ( 'log' ) api_result_handler = client.query_access_log_with_telemetry_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , begin = 1473174000000 , end = 1473177600000 , longTerm = false , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; totalCount = result.totalCount ; scanSize = result.scanSize ; describeInsights GS2-Insight 인스턴스 목록 조회 지정된 네임스페이스의 GS2-Insight 인스턴스 페이지네이션 목록을 가져옵니다. 각 Insight는 로그 분석 환경을 나타내며, 시작 후 2시간이 지나면 자동으로 종료됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List GS2-Insight 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DescribeInsights ( \u0026 log . DescribeInsightsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DescribeInsightsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e describeInsights ( ( new DescribeInsightsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DescribeInsightsRequest ; import io.gs2.log.result.DescribeInsightsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DescribeInsightsResult result = client . describeInsights ( new DescribeInsightsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Insight \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DescribeInsightsResult \u003e asyncResult = null ; yield return client . DescribeInsights ( new Gs2 . Gs2Log . Request . DescribeInsightsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . describeInsights ( new Gs2Log . DescribeInsightsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . describe_insights ( log . DescribeInsightsRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.describe_insights ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'log' ) api_result_handler = client.describe_insights_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createInsight GS2-Insight 시작 지정된 네임스페이스에 새로운 GS2-Insight 로그 분석 환경을 시작합니다. Insight 인스턴스는 시작 후 2시간이 지나면 자동으로 종료됩니다. 네임스페이스당 동시에 활성화할 수 있는 인스턴스는 1개뿐입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Insight GS2-Insight 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . CreateInsight ( \u0026 log . CreateInsightRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\CreateInsightRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e createInsight ( ( new CreateInsightRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.CreateInsightRequest ; import io.gs2.log.result.CreateInsightResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { CreateInsightResult result = client . createInsight ( new CreateInsightRequest () . withNamespaceName ( \"namespace-0001\" ) ); Insight item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . CreateInsightResult \u003e asyncResult = null ; yield return client . CreateInsight ( new Gs2 . Gs2Log . Request . CreateInsightRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . createInsight ( new Gs2Log . CreateInsightRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . create_insight ( log . CreateInsightRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.create_insight ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.create_insight_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getInsight GS2-Insight 조회 지정된 GS2-Insight 인스턴스의 현재 상태와 시작 시각을 포함한 정보를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. insightName string  UUID ~ 36자 이름 Result 타입 설명 item Insight GS2-Insight 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . GetInsight ( \u0026 log . GetInsightRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InsightName : pointy . String ( \"insight1-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\GetInsightRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e getInsight ( ( new GetInsightRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInsightName ( \"insight1-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.GetInsightRequest ; import io.gs2.log.result.GetInsightResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { GetInsightResult result = client . getInsight ( new GetInsightRequest () . withNamespaceName ( \"namespace-0001\" ) . withInsightName ( \"insight1-0001\" ) ); Insight item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . GetInsightResult \u003e asyncResult = null ; yield return client . GetInsight ( new Gs2 . Gs2Log . Request . GetInsightRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInsightName ( \"insight1-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . getInsight ( new Gs2Log . GetInsightRequest () . withNamespaceName ( \"namespace-0001\" ) . withInsightName ( \"insight1-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . get_insight ( log . GetInsightRequest () . with_namespace_name ( 'namespace-0001' ) . with_insight_name ( 'insight1-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.get_insight ({ namespaceName = \"namespace-0001\" , insightName = \"insight1-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.get_insight_async ({ namespaceName = \"namespace-0001\" , insightName = \"insight1-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteInsight GS2-Insight 삭제 지정된 GS2-Insight 인스턴스를 삭제하고 로그 분석 환경을 즉시 종료합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. insightName string  UUID ~ 36자 이름 Result 타입 설명 item Insight GS2-Insight 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DeleteInsight ( \u0026 log . DeleteInsightRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), InsightName : pointy . String ( \"insight1-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DeleteInsightRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e deleteInsight ( ( new DeleteInsightRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withInsightName ( \"insight1-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DeleteInsightRequest ; import io.gs2.log.result.DeleteInsightResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DeleteInsightResult result = client . deleteInsight ( new DeleteInsightRequest () . withNamespaceName ( \"namespace-0001\" ) . withInsightName ( \"insight1-0001\" ) ); Insight item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DeleteInsightResult \u003e asyncResult = null ; yield return client . DeleteInsight ( new Gs2 . Gs2Log . Request . DeleteInsightRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithInsightName ( \"insight1-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . deleteInsight ( new Gs2Log . DeleteInsightRequest () . withNamespaceName ( \"namespace-0001\" ) . withInsightName ( \"insight1-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . delete_insight ( log . DeleteInsightRequest () . with_namespace_name ( 'namespace-0001' ) . with_insight_name ( 'insight1-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.delete_insight ({ namespaceName = \"namespace-0001\" , insightName = \"insight1-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.delete_insight_async ({ namespaceName = \"namespace-0001\" , insightName = \"insight1-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeDashboards 대시보드 목록 조회 지정된 네임스페이스의 대시보드 페이지네이션 목록을 가져옵니다. 대시보드는 로그 데이터와 메트릭을 시각화하는 커스터마이즈 가능한 뷰를 제공합니다. 이름 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 대시보드 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 대시보드 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DescribeDashboards ( \u0026 log . DescribeDashboardsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DescribeDashboardsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e describeDashboards ( ( new DescribeDashboardsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DescribeDashboardsRequest ; import io.gs2.log.result.DescribeDashboardsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DescribeDashboardsResult result = client . describeDashboards ( new DescribeDashboardsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Dashboard \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DescribeDashboardsResult \u003e asyncResult = null ; yield return client . DescribeDashboards ( new Gs2 . Gs2Log . Request . DescribeDashboardsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . describeDashboards ( new Gs2Log . DescribeDashboardsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . describe_dashboards ( log . DescribeDashboardsRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.describe_dashboards ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'log' ) api_result_handler = client.describe_dashboards_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createDashboard 대시보드 신규 생성 지정된 표시 이름과 설명으로 새 대시보드를 생성합니다. 대시보드의 페이로드(레이아웃 및 위젯 설정)는 이후 업데이트를 통해 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayName string  ~ 256자 표시용 이름 이 대시보드의 사람이 읽기 쉬운 이름으로, 대시보드 목록과 헤더에 표시됩니다. description string ~ 1024자 설명문 Result 타입 설명 item Dashboard 생성한 대시보드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . CreateDashboard ( \u0026 log . CreateDashboardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DisplayName : pointy . String ( \"Sample Dashboard 0001\" ), Description : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\CreateDashboardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e createDashboard ( ( new CreateDashboardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDisplayName ( \"Sample Dashboard 0001\" ) -\u003e withDescription ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.CreateDashboardRequest ; import io.gs2.log.result.CreateDashboardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { CreateDashboardResult result = client . createDashboard ( new CreateDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDisplayName ( \"Sample Dashboard 0001\" ) . withDescription ( null ) ); Dashboard item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . CreateDashboardResult \u003e asyncResult = null ; yield return client . CreateDashboard ( new Gs2 . Gs2Log . Request . CreateDashboardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDisplayName ( \"Sample Dashboard 0001\" ) . WithDescription ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . createDashboard ( new Gs2Log . CreateDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDisplayName ( \"Sample Dashboard 0001\" ) . withDescription ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . create_dashboard ( log . CreateDashboardRequest () . with_namespace_name ( 'namespace-0001' ) . with_display_name ( 'Sample Dashboard 0001' ) . with_description ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.create_dashboard ({ namespaceName = \"namespace-0001\" , displayName = \"Sample Dashboard 0001\" , description = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.create_dashboard_async ({ namespaceName = \"namespace-0001\" , displayName = \"Sample Dashboard 0001\" , description = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getDashboard 대시보드 조회 지정된 대시보드의 표시 이름, 설명, 페이로드 설정을 포함한 정보를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dashboardName string  UUID ~ 36자 대시보드 이름 Result 타입 설명 item Dashboard 대시보드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . GetDashboard ( \u0026 log . GetDashboardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DashboardName : pointy . String ( \"dashboard-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\GetDashboardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e getDashboard ( ( new GetDashboardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDashboardName ( \"dashboard-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.GetDashboardRequest ; import io.gs2.log.result.GetDashboardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { GetDashboardResult result = client . getDashboard ( new GetDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDashboardName ( \"dashboard-0001\" ) ); Dashboard item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . GetDashboardResult \u003e asyncResult = null ; yield return client . GetDashboard ( new Gs2 . Gs2Log . Request . GetDashboardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDashboardName ( \"dashboard-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . getDashboard ( new Gs2Log . GetDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDashboardName ( \"dashboard-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . get_dashboard ( log . GetDashboardRequest () . with_namespace_name ( 'namespace-0001' ) . with_dashboard_name ( 'dashboard-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.get_dashboard ({ namespaceName = \"namespace-0001\" , dashboardName = \"dashboard-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.get_dashboard_async ({ namespaceName = \"namespace-0001\" , dashboardName = \"dashboard-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateDashboard 대시보드 업데이트 지정된 대시보드의 표시 이름, 설명, 페이로드 설정을 업데이트합니다. 페이로드에는 대시보드의 레이아웃과 위젯 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dashboardName string  UUID ~ 36자 대시보드 이름 displayName string  ~ 256자 표시용 이름 이 대시보드의 사람이 읽기 쉬운 이름으로, 대시보드 목록과 헤더에 표시됩니다. description string ~ 1024자 설명문 payload string  ~ 1048576자 페이로드 위젯 정의, 레이아웃 정보, 쿼리 설정, 시각화 옵션을 포함하는 JSON 형식의 대시보드 설정입니다. Result 타입 설명 item Dashboard 업데이트한 대시보드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . UpdateDashboard ( \u0026 log . UpdateDashboardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DashboardName : pointy . String ( \"dashboard-0001\" ), DisplayName : pointy . String ( \"Sample Dashboard 0001\" ), Description : nil , Payload : pointy . String ( \"{\\\"widgets\\\": []}\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\UpdateDashboardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e updateDashboard ( ( new UpdateDashboardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDashboardName ( \"dashboard-0001\" ) -\u003e withDisplayName ( \"Sample Dashboard 0001\" ) -\u003e withDescription ( null ) -\u003e withPayload ( \"{ \\\" widgets \\\" : []}\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.UpdateDashboardRequest ; import io.gs2.log.result.UpdateDashboardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { UpdateDashboardResult result = client . updateDashboard ( new UpdateDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDashboardName ( \"dashboard-0001\" ) . withDisplayName ( \"Sample Dashboard 0001\" ) . withDescription ( null ) . withPayload ( \"{\\\"widgets\\\": []}\" ) ); Dashboard item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . UpdateDashboardResult \u003e asyncResult = null ; yield return client . UpdateDashboard ( new Gs2 . Gs2Log . Request . UpdateDashboardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDashboardName ( \"dashboard-0001\" ) . WithDisplayName ( \"Sample Dashboard 0001\" ) . WithDescription ( null ) . WithPayload ( \"{\\\"widgets\\\": []}\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . updateDashboard ( new Gs2Log . UpdateDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDashboardName ( \"dashboard-0001\" ) . withDisplayName ( \"Sample Dashboard 0001\" ) . withDescription ( null ) . withPayload ( \"{\\\"widgets\\\": []}\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . update_dashboard ( log . UpdateDashboardRequest () . with_namespace_name ( 'namespace-0001' ) . with_dashboard_name ( 'dashboard-0001' ) . with_display_name ( 'Sample Dashboard 0001' ) . with_description ( None ) . with_payload ( '{\"widgets\": []}' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.update_dashboard ({ namespaceName = \"namespace-0001\" , dashboardName = \"dashboard-0001\" , displayName = \"Sample Dashboard 0001\" , description = nil , payload = \"{ \\\" widgets \\\" : []}\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.update_dashboard_async ({ namespaceName = \"namespace-0001\" , dashboardName = \"dashboard-0001\" , displayName = \"Sample Dashboard 0001\" , description = nil , payload = \"{ \\\" widgets \\\" : []}\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; duplicateDashboard 대시보드 복제 지정된 대시보드의 페이로드(레이아웃과 위젯 정의)를 포함한 전체 설정의 사본을 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dashboardName string  UUID ~ 36자 대시보드 이름 Result 타입 설명 item Dashboard 생성한 대시보드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DuplicateDashboard ( \u0026 log . DuplicateDashboardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DashboardName : pointy . String ( \"dashboard-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DuplicateDashboardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e duplicateDashboard ( ( new DuplicateDashboardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDashboardName ( \"dashboard-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DuplicateDashboardRequest ; import io.gs2.log.result.DuplicateDashboardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DuplicateDashboardResult result = client . duplicateDashboard ( new DuplicateDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDashboardName ( \"dashboard-0001\" ) ); Dashboard item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DuplicateDashboardResult \u003e asyncResult = null ; yield return client . DuplicateDashboard ( new Gs2 . Gs2Log . Request . DuplicateDashboardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDashboardName ( \"dashboard-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . duplicateDashboard ( new Gs2Log . DuplicateDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDashboardName ( \"dashboard-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . duplicate_dashboard ( log . DuplicateDashboardRequest () . with_namespace_name ( 'namespace-0001' ) . with_dashboard_name ( 'dashboard-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.duplicate_dashboard ({ namespaceName = \"namespace-0001\" , dashboardName = \"dashboard-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.duplicate_dashboard_async ({ namespaceName = \"namespace-0001\" , dashboardName = \"dashboard-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteDashboard 대시보드 삭제 지정된 대시보드와 그 전체 설정을 완전히 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. dashboardName string  UUID ~ 36자 대시보드 이름 Result 타입 설명 item Dashboard 삭제한 대시보드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DeleteDashboard ( \u0026 log . DeleteDashboardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), DashboardName : pointy . String ( \"dashboard-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DeleteDashboardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e deleteDashboard ( ( new DeleteDashboardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDashboardName ( \"dashboard-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DeleteDashboardRequest ; import io.gs2.log.result.DeleteDashboardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DeleteDashboardResult result = client . deleteDashboard ( new DeleteDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDashboardName ( \"dashboard-0001\" ) ); Dashboard item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DeleteDashboardResult \u003e asyncResult = null ; yield return client . DeleteDashboard ( new Gs2 . Gs2Log . Request . DeleteDashboardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDashboardName ( \"dashboard-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . deleteDashboard ( new Gs2Log . DeleteDashboardRequest () . withNamespaceName ( \"namespace-0001\" ) . withDashboardName ( \"dashboard-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . delete_dashboard ( log . DeleteDashboardRequest () . with_namespace_name ( 'namespace-0001' ) . with_dashboard_name ( 'dashboard-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.delete_dashboard ({ namespaceName = \"namespace-0001\" , dashboardName = \"dashboard-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.delete_dashboard_async ({ namespaceName = \"namespace-0001\" , dashboardName = \"dashboard-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeFacetModels 패싯 모델 목록을 조회 지정된 네임스페이스의 패싯 모델을 페이지네이션 방식으로 조회합니다. 패싯 모델은 로그 쿼리용 커스텀 분류 필드를 정의하며, 필드 이름, 타입(string 또는 measure), 표시 이름, 정렬 순서를 지정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 패싯 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 패싯 모델 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DescribeFacetModels ( \u0026 log . DescribeFacetModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DescribeFacetModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e describeFacetModels ( ( new DescribeFacetModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DescribeFacetModelsRequest ; import io.gs2.log.result.DescribeFacetModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DescribeFacetModelsResult result = client . describeFacetModels ( new DescribeFacetModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List FacetModel \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DescribeFacetModelsResult \u003e asyncResult = null ; yield return client . DescribeFacetModels ( new Gs2 . Gs2Log . Request . DescribeFacetModelsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . describeFacetModels ( new Gs2Log . DescribeFacetModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . describe_facet_models ( log . DescribeFacetModelsRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.describe_facet_models ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'log' ) api_result_handler = client.describe_facet_models_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createFacetModel 패싯 모델을 신규 작성 지정된 필드 이름, 타입, 표시 이름, 정렬 순서로 새로운 패싯 모델을 작성합니다. 필드 타입은 카테고리 분류용 ‘string’ 또는 로그 쿼리에서의 수치 집계용 ‘measure’를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. field string  ~ 128자 패싯 필드 이름 이 패싯이 대상으로 하는 로그 필드의 이름입니다(예: “service”, “method”, “status”). type 문자열 열거형 enum {   “string”,   “double”,   “measure” }  패싯 데이터 타입 패싯 필드의 데이터 타입입니다. “string\"은 값 카운트가 있는 범주형 값에, “double\"은 범위 필터링이 있는 숫자 값에, “measure\"는 통계 분석이 있는 측정값에 사용됩니다. 정의 설명 string 문자열 double 숫자 measure 측정값 displayName string  ~ 128자 표시용 이름 이 패싯의 사람이 읽을 수 있는 이름으로, 로그 검색 UI에 표시됩니다. order int 0 0 ~ 100000 표시 순서 UI에서 이 패싯을 표시할 때의 정렬 순서입니다. 값이 작을수록 먼저 표시됩니다. Result 타입 설명 item FacetModel 생성한 패싯 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . CreateFacetModel ( \u0026 log . CreateFacetModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Field : pointy . String ( \"facet-model-0001\" ), Type : pointy . String ( \"string\" ), DisplayName : pointy . String ( \"Sample Facet Model 0001\" ), Order : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\CreateFacetModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e createFacetModel ( ( new CreateFacetModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withField ( \"facet-model-0001\" ) -\u003e withType ( \"string\" ) -\u003e withDisplayName ( \"Sample Facet Model 0001\" ) -\u003e withOrder ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.CreateFacetModelRequest ; import io.gs2.log.result.CreateFacetModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { CreateFacetModelResult result = client . createFacetModel ( new CreateFacetModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withField ( \"facet-model-0001\" ) . withType ( \"string\" ) . withDisplayName ( \"Sample Facet Model 0001\" ) . withOrder ( null ) ); FacetModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . CreateFacetModelResult \u003e asyncResult = null ; yield return client . CreateFacetModel ( new Gs2 . Gs2Log . Request . CreateFacetModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithField ( \"facet-model-0001\" ) . WithType ( \"string\" ) . WithDisplayName ( \"Sample Facet Model 0001\" ) . WithOrder ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . createFacetModel ( new Gs2Log . CreateFacetModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withField ( \"facet-model-0001\" ) . withType ( \"string\" ) . withDisplayName ( \"Sample Facet Model 0001\" ) . withOrder ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . create_facet_model ( log . CreateFacetModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_field ( 'facet-model-0001' ) . with_type ( 'string' ) . with_display_name ( 'Sample Facet Model 0001' ) . with_order ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.create_facet_model ({ namespaceName = \"namespace-0001\" , field = \"facet-model-0001\" , type = \"string\" , displayName = \"Sample Facet Model 0001\" , order = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.create_facet_model_async ({ namespaceName = \"namespace-0001\" , field = \"facet-model-0001\" , type = \"string\" , displayName = \"Sample Facet Model 0001\" , order = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getFacetModel 패싯 모델을 조회 지정된 패싯 모델의 필드 이름, 타입, 표시 이름, 정렬 순서를 포함한 정보를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. field string  ~ 128자 패싯 필드 이름 이 패싯이 대상으로 하는 로그 필드의 이름입니다(예: “service”, “method”, “status”). Result 타입 설명 item FacetModel 패싯 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . GetFacetModel ( \u0026 log . GetFacetModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Field : pointy . String ( \"facet-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\GetFacetModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e getFacetModel ( ( new GetFacetModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withField ( \"facet-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.GetFacetModelRequest ; import io.gs2.log.result.GetFacetModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { GetFacetModelResult result = client . getFacetModel ( new GetFacetModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withField ( \"facet-model-0001\" ) ); FacetModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . GetFacetModelResult \u003e asyncResult = null ; yield return client . GetFacetModel ( new Gs2 . Gs2Log . Request . GetFacetModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithField ( \"facet-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . getFacetModel ( new Gs2Log . GetFacetModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withField ( \"facet-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . get_facet_model ( log . GetFacetModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_field ( 'facet-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.get_facet_model ({ namespaceName = \"namespace-0001\" , field = \"facet-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.get_facet_model_async ({ namespaceName = \"namespace-0001\" , field = \"facet-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateFacetModel 패싯 모델 업데이트 지정된 패싯 모델의 타입, 표시 이름, 정렬 순서를 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. field string  ~ 128자 패싯 필드 이름 이 패싯이 대상으로 하는 로그 필드의 이름입니다(예: “service”, “method”, “status”). type 문자열 열거형 enum {   “string”,   “double”,   “measure” }  패싯 데이터 타입 패싯 필드의 데이터 타입입니다. “string\"은 값 카운트가 있는 범주형 값에, “double\"은 범위 필터링이 있는 숫자 값에, “measure\"는 통계 분석이 있는 측정값에 사용됩니다. 정의 설명 string 문자열 double 숫자 measure 측정값 displayName string  ~ 128자 표시용 이름 이 패싯의 사람이 읽을 수 있는 이름으로, 로그 검색 UI에 표시됩니다. order int 0 0 ~ 100000 표시 순서 UI에서 이 패싯을 표시할 때의 정렬 순서입니다. 값이 작을수록 먼저 표시됩니다. Result 타입 설명 item FacetModel 업데이트한 패싯 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . UpdateFacetModel ( \u0026 log . UpdateFacetModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Field : pointy . String ( \"facet-model-0001\" ), Type : pointy . String ( \"gs2\" ), DisplayName : pointy . String ( \"Sample Facet Model 0001\" ), Order : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\UpdateFacetModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e updateFacetModel ( ( new UpdateFacetModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withField ( \"facet-model-0001\" ) -\u003e withType ( \"gs2\" ) -\u003e withDisplayName ( \"Sample Facet Model 0001\" ) -\u003e withOrder ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.UpdateFacetModelRequest ; import io.gs2.log.result.UpdateFacetModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { UpdateFacetModelResult result = client . updateFacetModel ( new UpdateFacetModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withField ( \"facet-model-0001\" ) . withType ( \"gs2\" ) . withDisplayName ( \"Sample Facet Model 0001\" ) . withOrder ( null ) ); FacetModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . UpdateFacetModelResult \u003e asyncResult = null ; yield return client . UpdateFacetModel ( new Gs2 . Gs2Log . Request . UpdateFacetModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithField ( \"facet-model-0001\" ) . WithType ( \"gs2\" ) . WithDisplayName ( \"Sample Facet Model 0001\" ) . WithOrder ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . updateFacetModel ( new Gs2Log . UpdateFacetModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withField ( \"facet-model-0001\" ) . withType ( \"gs2\" ) . withDisplayName ( \"Sample Facet Model 0001\" ) . withOrder ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . update_facet_model ( log . UpdateFacetModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_field ( 'facet-model-0001' ) . with_type ( 'gs2' ) . with_display_name ( 'Sample Facet Model 0001' ) . with_order ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.update_facet_model ({ namespaceName = \"namespace-0001\" , field = \"facet-model-0001\" , type = \"gs2\" , displayName = \"Sample Facet Model 0001\" , order = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.update_facet_model_async ({ namespaceName = \"namespace-0001\" , field = \"facet-model-0001\" , type = \"gs2\" , displayName = \"Sample Facet Model 0001\" , order = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteFacetModel 패싯 모델 삭제 지정된 패싯 모델을 삭제합니다. 삭제된 패싯 모델은 로그 쿼리에서의 분류에 사용할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. field string  ~ 128자 패싯 필드 이름 이 패싯이 대상으로 하는 로그 필드의 이름입니다(예: “service”, “method”, “status”). Result 타입 설명 item FacetModel 삭제한 패싯 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DeleteFacetModel ( \u0026 log . DeleteFacetModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Field : pointy . String ( \"facet-model-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DeleteFacetModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e deleteFacetModel ( ( new DeleteFacetModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withField ( \"facet-model-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DeleteFacetModelRequest ; import io.gs2.log.result.DeleteFacetModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DeleteFacetModelResult result = client . deleteFacetModel ( new DeleteFacetModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withField ( \"facet-model-0001\" ) ); FacetModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DeleteFacetModelResult \u003e asyncResult = null ; yield return client . DeleteFacetModel ( new Gs2 . Gs2Log . Request . DeleteFacetModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithField ( \"facet-model-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . deleteFacetModel ( new Gs2Log . DeleteFacetModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withField ( \"facet-model-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . delete_facet_model ( log . DeleteFacetModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_field ( 'facet-model-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.delete_facet_model ({ namespaceName = \"namespace-0001\" , field = \"facet-model-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.delete_facet_model_async ({ namespaceName = \"namespace-0001\" , field = \"facet-model-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; queryMetricsTimeseries 타임시리즈 쿼리(Metrics) 설정 가능한 집계, 그룹화, 간격으로 메트릭에서 타임시리즈 데이터를 쿼리합니다. 여러 집계 설정, 다차원 분석을 위한 groupBy 레이블, 값 또는 이름에 의한 오름차순/내림차순 정렬을 지원합니다. 데이터 포인트의 최대 개수는 1500개이며, 이 제한을 초과하는 요청은 거부됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 query string ~ 10240자 검색 쿼리 문자열 groupBy List [] 0 ~ 10 items 그룹화할 필드 aggregations List [] 0 ~ 10 items 집계 설정 목록 interval int 60000 1000 ~ 86400000 집계 간격(밀리초) seriesLimit int 10 1 ~ 1000 가져올 시리즈 수 orderKey 문자열 열거형 enum {   “value”,   “name” } “value” 정렬 키 정의 설명 value 값 name 이름 orderBy 문자열 열거형 enum {   “asc”,   “desc” } “desc” 정렬 순서 정의 설명 asc 오름차순 desc 내림차순 Result 타입 설명 items List 타임시리즈 값 목록 timeseriesMetadata TimeseriesMetadata 타임시리즈의 메타데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryMetricsTimeseries ( \u0026 log . QueryMetricsTimeseriesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Begin : nil , End : nil , Query : nil , GroupBy : nil , Aggregations : nil , Interval : nil , SeriesLimit : nil , OrderKey : nil , OrderBy : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items timeseriesMetadata := result . TimeseriesMetadata use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryMetricsTimeseriesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryMetricsTimeseries ( ( new QueryMetricsTimeseriesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBegin ( null ) -\u003e withEnd ( null ) -\u003e withQuery ( null ) -\u003e withGroupBy ( null ) -\u003e withAggregations ( null ) -\u003e withInterval ( null ) -\u003e withSeriesLimit ( null ) -\u003e withOrderKey ( null ) -\u003e withOrderBy ( null ) ); $items = $result -\u003e getItems (); $timeseriesMetadata = $result -\u003e getTimeseriesMetadata (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryMetricsTimeseriesRequest ; import io.gs2.log.result.QueryMetricsTimeseriesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryMetricsTimeseriesResult result = client . queryMetricsTimeseries ( new QueryMetricsTimeseriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withBegin ( null ) . withEnd ( null ) . withQuery ( null ) . withGroupBy ( null ) . withAggregations ( null ) . withInterval ( null ) . withSeriesLimit ( null ) . withOrderKey ( null ) . withOrderBy ( null ) ); List TimeseriesPoint \u003e items = result . getItems (); TimeseriesMetadata timeseriesMetadata = result . getTimeseriesMetadata (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryMetricsTimeseriesResult \u003e asyncResult = null ; yield return client . QueryMetricsTimeseries ( new Gs2 . Gs2Log . Request . QueryMetricsTimeseriesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBegin ( null ) . WithEnd ( null ) . WithQuery ( null ) . WithGroupBy ( null ) . WithAggregations ( null ) . WithInterval ( null ) . WithSeriesLimit ( null ) . WithOrderKey ( null ) . WithOrderBy ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var timeseriesMetadata = result . TimeseriesMetadata ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryMetricsTimeseries ( new Gs2Log . QueryMetricsTimeseriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withBegin ( null ) . withEnd ( null ) . withQuery ( null ) . withGroupBy ( null ) . withAggregations ( null ) . withInterval ( null ) . withSeriesLimit ( null ) . withOrderKey ( null ) . withOrderBy ( null ) ); const items = result . getItems (); const timeseriesMetadata = result . getTimeseriesMetadata (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_metrics_timeseries ( log . QueryMetricsTimeseriesRequest () . with_namespace_name ( 'namespace-0001' ) . with_begin ( None ) . with_end ( None ) . with_query ( None ) . with_group_by ( None ) . with_aggregations ( None ) . with_interval ( None ) . with_series_limit ( None ) . with_order_key ( None ) . with_order_by ( None ) ) items = result . items timeseries_metadata = result . timeseries_metadata except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_metrics_timeseries ({ namespaceName = \"namespace-0001\" , begin = nil , end = nil , query = nil , groupBy = nil , aggregations = nil , interval = nil , seriesLimit = nil , orderKey = nil , orderBy = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; timeseriesMetadata = result.timeseriesMetadata ; client = gs2 ( 'log' ) api_result_handler = client.query_metrics_timeseries_async ({ namespaceName = \"namespace-0001\" , begin = nil , end = nil , query = nil , groupBy = nil , aggregations = nil , interval = nil , seriesLimit = nil , orderKey = nil , orderBy = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; timeseriesMetadata = result.timeseriesMetadata ; describeMetrics 메트릭 모델 목록 조회 지정된 네임스페이스에서 사용 가능한 메트릭 모델의 페이지네이션 목록을 가져옵니다. 메트릭 모델은 타임시리즈 API로 쿼리할 수 있는 내장 메트릭을 정의합니다. 이름 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 메트릭 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 메트릭 모델 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DescribeMetrics ( \u0026 log . DescribeMetricsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DescribeMetricsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e describeMetrics ( ( new DescribeMetricsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DescribeMetricsRequest ; import io.gs2.log.result.DescribeMetricsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DescribeMetricsResult result = client . describeMetrics ( new DescribeMetricsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List MetricModel \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DescribeMetricsResult \u003e asyncResult = null ; yield return client . DescribeMetrics ( new Gs2 . Gs2Log . Request . DescribeMetricsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . describeMetrics ( new Gs2Log . DescribeMetricsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . describe_metrics ( log . DescribeMetricsRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.describe_metrics ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'log' ) api_result_handler = client.describe_metrics_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeLabelValues 특정 메트릭의 레이블 값 목록 조회 특정 메트릭에서 사용 가능한 레이블 값을 가져옵니다. 레이블 값은 타임시리즈 쿼리의 groupBy 필드나 필터로 사용할 수 있습니다. 레이블 이름 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metricName string  ~ 128자 필터링 대상 메트릭 이름 labelNamePrefix string ~ 64자 레이블 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 레이블 값 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . DescribeLabelValues ( \u0026 log . DescribeLabelValuesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MetricName : pointy . String ( \"metric\" ), LabelNamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\DescribeLabelValuesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e describeLabelValues ( ( new DescribeLabelValuesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMetricName ( \"metric\" ) -\u003e withLabelNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.DescribeLabelValuesRequest ; import io.gs2.log.result.DescribeLabelValuesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { DescribeLabelValuesResult result = client . describeLabelValues ( new DescribeLabelValuesRequest () . withNamespaceName ( \"namespace-0001\" ) . withMetricName ( \"metric\" ) . withLabelNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Label \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . DescribeLabelValuesResult \u003e asyncResult = null ; yield return client . DescribeLabelValues ( new Gs2 . Gs2Log . Request . DescribeLabelValuesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMetricName ( \"metric\" ) . WithLabelNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . describeLabelValues ( new Gs2Log . DescribeLabelValuesRequest () . withNamespaceName ( \"namespace-0001\" ) . withMetricName ( \"metric\" ) . withLabelNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . describe_label_values ( log . DescribeLabelValuesRequest () . with_namespace_name ( 'namespace-0001' ) . with_metric_name ( 'metric' ) . with_label_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.describe_label_values ({ namespaceName = \"namespace-0001\" , metricName = \"metric\" , labelNamePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'log' ) api_result_handler = client.describe_label_values_async ({ namespaceName = \"namespace-0001\" , metricName = \"metric\" , labelNamePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; queryLog 로그 엔트리 쿼리(v2) v2 로그 쿼리 API를 사용하여 로그 엔트리를 쿼리합니다. 전문 검색을 통한 필터링이 가능합니다. 쿼리 문자열에 의한 필터링을 지원하며, 총 엔트리 수를 반환합니다(10000건을 초과하는 경우 10001이 반환됩니다). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 query string ~ 10240자 검색 쿼리 문자열 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 액세스 로그 목록 totalEntryCount int 쿼리 결과의 총 건수(10000건을 초과하는 경우 10001이 반환됩니다) nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryLog ( \u0026 log . QueryLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Begin : nil , End : nil , Query : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items totalEntryCount := result . TotalEntryCount nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryLog ( ( new QueryLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBegin ( null ) -\u003e withEnd ( null ) -\u003e withQuery ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $totalEntryCount = $result -\u003e getTotalEntryCount (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryLogRequest ; import io.gs2.log.result.QueryLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryLogResult result = client . queryLog ( new QueryLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withBegin ( null ) . withEnd ( null ) . withQuery ( null ) . withPageToken ( null ) . withLimit ( null ) ); List LogEntry \u003e items = result . getItems (); int totalEntryCount = result . getTotalEntryCount (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryLogResult \u003e asyncResult = null ; yield return client . QueryLog ( new Gs2 . Gs2Log . Request . QueryLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBegin ( null ) . WithEnd ( null ) . WithQuery ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var totalEntryCount = result . TotalEntryCount ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryLog ( new Gs2Log . QueryLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withBegin ( null ) . withEnd ( null ) . withQuery ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const totalEntryCount = result . getTotalEntryCount (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_log ( log . QueryLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_begin ( None ) . with_end ( None ) . with_query ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items total_entry_count = result . total_entry_count next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_log ({ namespaceName = \"namespace-0001\" , begin = nil , end = nil , query = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; totalEntryCount = result.totalEntryCount ; nextPageToken = result.nextPageToken ; client = gs2 ( 'log' ) api_result_handler = client.query_log_async ({ namespaceName = \"namespace-0001\" , begin = nil , end = nil , query = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; totalEntryCount = result.totalEntryCount ; nextPageToken = result.nextPageToken ; getLog 요청 ID를 지정하여 로그 엔트리 조회 지정된 시간 범위 내의 특정 로그 엔트리를 요청 ID로 조회합니다. 요청 ID는 단일 API 호출 로그 엔트리를 고유하게 식별합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. logRequestId string  ~ 128자 요청 ID begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 Result 타입 설명 item LogEntry 액세스 로그 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . GetLog ( \u0026 log . GetLogRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LogRequestId : pointy . String ( \"requestId-0001\" ), Begin : nil , End : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\GetLogRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e getLog ( ( new GetLogRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLogRequestId ( \"requestId-0001\" ) -\u003e withBegin ( null ) -\u003e withEnd ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.GetLogRequest ; import io.gs2.log.result.GetLogResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { GetLogResult result = client . getLog ( new GetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withLogRequestId ( \"requestId-0001\" ) . withBegin ( null ) . withEnd ( null ) ); LogEntry item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . GetLogResult \u003e asyncResult = null ; yield return client . GetLog ( new Gs2 . Gs2Log . Request . GetLogRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLogRequestId ( \"requestId-0001\" ) . WithBegin ( null ) . WithEnd ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . getLog ( new Gs2Log . GetLogRequest () . withNamespaceName ( \"namespace-0001\" ) . withLogRequestId ( \"requestId-0001\" ) . withBegin ( null ) . withEnd ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . get_log ( log . GetLogRequest () . with_namespace_name ( 'namespace-0001' ) . with_log_request_id ( 'requestId-0001' ) . with_begin ( None ) . with_end ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.get_log ({ namespaceName = \"namespace-0001\" , logRequestId = \"requestId-0001\" , begin = nil , end = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'log' ) api_result_handler = client.get_log_async ({ namespaceName = \"namespace-0001\" , logRequestId = \"requestId-0001\" , begin = nil , end = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; queryFacets 패싯 쿼리 지정된 시간 범위 내의 로그 엔트리에 대한 패싯(분류) 데이터를 가져옵니다. 내장 패싯(service, function, status, duration)과 네임스페이스에 정의된 커스텀 패싯 모델을 모두 반환합니다. 쿼리 문자열에 의한 필터링으로 패싯 범위를 좁힐 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 query string ~ 10240자 검색 쿼리 문자열 Result 타입 설명 items List 패싯 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryFacets ( \u0026 log . QueryFacetsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Begin : nil , End : nil , Query : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryFacetsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryFacets ( ( new QueryFacetsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBegin ( null ) -\u003e withEnd ( null ) -\u003e withQuery ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryFacetsRequest ; import io.gs2.log.result.QueryFacetsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryFacetsResult result = client . queryFacets ( new QueryFacetsRequest () . withNamespaceName ( \"namespace-0001\" ) . withBegin ( null ) . withEnd ( null ) . withQuery ( null ) ); List Facet \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryFacetsResult \u003e asyncResult = null ; yield return client . QueryFacets ( new Gs2 . Gs2Log . Request . QueryFacetsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBegin ( null ) . WithEnd ( null ) . WithQuery ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryFacets ( new Gs2Log . QueryFacetsRequest () . withNamespaceName ( \"namespace-0001\" ) . withBegin ( null ) . withEnd ( null ) . withQuery ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_facets ( log . QueryFacetsRequest () . with_namespace_name ( 'namespace-0001' ) . with_begin ( None ) . with_end ( None ) . with_query ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_facets ({ namespaceName = \"namespace-0001\" , begin = nil , end = nil , query = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'log' ) api_result_handler = client.query_facets_async ({ namespaceName = \"namespace-0001\" , begin = nil , end = nil , query = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; queryTimeseries 타임시리즈 쿼리(Log) 설정 가능한 집계, 그룹화, 간격으로 로그 엔트리에서 타임시리즈 데이터를 쿼리합니다. 다차원 분석을 위한 groupBy 필드와 단일 집계 설정을 지원합니다. 데이터 포인트의 최대 개수는 1500개이며, 이 제한을 초과하는 요청은 거부됩니다. 결과는 페이지네이션이 가능하며 시리즈 수를 제한할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 query string ~ 10240자 검색 쿼리 문자열 groupBy List [] 0 ~ 10 items 그룹화할 필드 aggregation AggregationConfig  집계 설정 interval int 60000 1000 ~ 86400000 집계 간격(밀리초) seriesLimit int 10 1 ~ 1000 가져올 시리즈 수 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 타임시리즈 값 목록 timeseriesMetadata TimeseriesMetadata 타임시리즈의 메타데이터 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . QueryTimeseries ( \u0026 log . QueryTimeseriesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Begin : nil , End : nil , Query : nil , GroupBy : nil , Aggregation : nil , Interval : nil , SeriesLimit : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items timeseriesMetadata := result . TimeseriesMetadata nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\QueryTimeseriesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e queryTimeseries ( ( new QueryTimeseriesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBegin ( null ) -\u003e withEnd ( null ) -\u003e withQuery ( null ) -\u003e withGroupBy ( null ) -\u003e withAggregation ( null ) -\u003e withInterval ( null ) -\u003e withSeriesLimit ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $timeseriesMetadata = $result -\u003e getTimeseriesMetadata (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.QueryTimeseriesRequest ; import io.gs2.log.result.QueryTimeseriesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { QueryTimeseriesResult result = client . queryTimeseries ( new QueryTimeseriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withBegin ( null ) . withEnd ( null ) . withQuery ( null ) . withGroupBy ( null ) . withAggregation ( null ) . withInterval ( null ) . withSeriesLimit ( null ) . withPageToken ( null ) . withLimit ( null ) ); List TimeseriesPoint \u003e items = result . getItems (); TimeseriesMetadata timeseriesMetadata = result . getTimeseriesMetadata (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . QueryTimeseriesResult \u003e asyncResult = null ; yield return client . QueryTimeseries ( new Gs2 . Gs2Log . Request . QueryTimeseriesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBegin ( null ) . WithEnd ( null ) . WithQuery ( null ) . WithGroupBy ( null ) . WithAggregation ( null ) . WithInterval ( null ) . WithSeriesLimit ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var timeseriesMetadata = result . TimeseriesMetadata ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . queryTimeseries ( new Gs2Log . QueryTimeseriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withBegin ( null ) . withEnd ( null ) . withQuery ( null ) . withGroupBy ( null ) . withAggregation ( null ) . withInterval ( null ) . withSeriesLimit ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const timeseriesMetadata = result . getTimeseriesMetadata (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . query_timeseries ( log . QueryTimeseriesRequest () . with_namespace_name ( 'namespace-0001' ) . with_begin ( None ) . with_end ( None ) . with_query ( None ) . with_group_by ( None ) . with_aggregation ( None ) . with_interval ( None ) . with_series_limit ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items timeseries_metadata = result . timeseries_metadata next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.query_timeseries ({ namespaceName = \"namespace-0001\" , begin = nil , end = nil , query = nil , groupBy = nil , aggregation = nil , interval = nil , seriesLimit = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; timeseriesMetadata = result.timeseriesMetadata ; nextPageToken = result.nextPageToken ; client = gs2 ( 'log' ) api_result_handler = client.query_timeseries_async ({ namespaceName = \"namespace-0001\" , begin = nil , end = nil , query = nil , groupBy = nil , aggregation = nil , interval = nil , seriesLimit = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; timeseriesMetadata = result.timeseriesMetadata ; nextPageToken = result.nextPageToken ; getTrace 트레이스 ID를 지정하여 트레이스 조회 지정된 시간 범위 내의 트레이스와 그에 관련된 로그 엔트리를 트레이스 ID로 조회합니다. 메인 트레이스와 병렬로 실행된 트레이스를 반환하며, 병렬 리스트가 잘렸는지 여부를 나타내는 플래그가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. traceId string  UUID ~ 36자 트레이스 ID 이 트레이스의 고유 식별자로, 요청 흐름 내의 모든 관련 로그 엔트리(스팬)에서 공유됩니다. begin long 현재 시각으로부터 1시간 전의 절대 시각 검색 범위 시작 일시 end long 현재 시각 검색 범위 종료 일시 Result 타입 설명 trace Trace 트레이스 parallels List 병렬로 실행된 트레이스 목록 parallelTruncated bool 병렬 리스트가 잘렸는지 여부를 나타냅니다 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/log\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := log . Gs2LogRestClient { Session : \u0026 session , } result , err := client . GetTrace ( \u0026 log . GetTraceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), TraceId : pointy . String ( \"traceId-0001\" ), Begin : nil , End : nil , } ) if err != nil { panic ( \"error occurred\" ) } trace := result . Trace parallels := result . Parallels parallelTruncated := result . ParallelTruncated use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Log\\Gs2LogRestClient ; use Gs2\\Log\\Request\\GetTraceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LogRestClient ( $session ); try { $result = $client -\u003e getTrace ( ( new GetTraceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withTraceId ( \"traceId-0001\" ) -\u003e withBegin ( null ) -\u003e withEnd ( null ) ); $trace = $result -\u003e getTrace (); $parallels = $result -\u003e getParallels (); $parallelTruncated = $result -\u003e getParallelTruncated (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.log.rest.Gs2LogRestClient ; import io.gs2.log.request.GetTraceRequest ; import io.gs2.log.result.GetTraceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LogRestClient client = new Gs2LogRestClient ( session ); try { GetTraceResult result = client . getTrace ( new GetTraceRequest () . withNamespaceName ( \"namespace-0001\" ) . withTraceId ( \"traceId-0001\" ) . withBegin ( null ) . withEnd ( null ) ); Trace trace = result . getTrace (); List Trace \u003e parallels = result . getParallels (); boolean parallelTruncated = result . getParallelTruncated (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LogRestClient ( session ); AsyncResult Gs2 . Gs2Log . Result . GetTraceResult \u003e asyncResult = null ; yield return client . GetTrace ( new Gs2 . Gs2Log . Request . GetTraceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithTraceId ( \"traceId-0001\" ) . WithBegin ( null ) . WithEnd ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var trace = result . Trace ; var parallels = result . Parallels ; var parallelTruncated = result . ParallelTruncated ; import Gs2Core from '@/gs2/core' ; import * as Gs2Log from '@/gs2/log' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Log . Gs2LogRestClient ( session ); try { const result = await client . getTrace ( new Gs2Log . GetTraceRequest () . withNamespaceName ( \"namespace-0001\" ) . withTraceId ( \"traceId-0001\" ) . withBegin ( null ) . withEnd ( null ) ); const trace = result . getTrace (); const parallels = result . getParallels (); const parallelTruncated = result . getParallelTruncated (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import log session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = log . Gs2LogRestClient ( session ) try : result = client . get_trace ( log . GetTraceRequest () . with_namespace_name ( 'namespace-0001' ) . with_trace_id ( 'traceId-0001' ) . with_begin ( None ) . with_end ( None ) ) trace = result . trace parallels = result . parallels parallel_truncated = result . parallel_truncated except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'log' ) api_result = client.get_trace ({ namespaceName = \"namespace-0001\" , traceId = \"traceId-0001\" , begin = nil , end = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result trace = result.trace ; parallels = result.parallels ; parallelTruncated = result.parallelTruncated ; client = gs2 ( 'log' ) api_result_handler = client.get_trace_async ({ namespaceName = \"namespace-0001\" , traceId = \"traceId-0001\" , begin = nil , end = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result trace = result.trace ; parallels = result.parallels ; parallelTruncated = result.parallelTruncated ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Log SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Log SDK API 레퍼런스","url":"/ko/api_reference/log/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 이 네임스페이스 내에서 보상 트랜잭션이 어떻게 실행되는지에 대한 설정. receiveScript ScriptSetting 보상을 수신할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receive logSetting LogSetting 로그 출력 설정 API 요청·응답 로그를 GS2-Log에 출력하기 위한 설정. 설정하면 로그인 보너스 조작(수신, 놓친 보너스 구제 등)이 모니터링 및 분석을 위해 로그로 출력됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub 체크아웃 설정 GitHub 리포지토리에서 마스터 데이터를 직접 가져오기 위한 설정입니다. 리포지토리, 파일 경로, 소스 참조(커밋 해시, 브랜치 또는 태그)를 지정하여 마스터 데이터의 JSON 파일을 자동으로 가져와 적용할 수 있습니다. GitHub API와의 인증에는 GS2-Key의 GitHub API 키가 필요합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 ReceiveStatus 수신 상태 사용자별·보너스 모델별 로그인 보너스의 수신 상태를 추적합니다. 각 항목이 해당 날짜의 보상을 수신했는지 여부를 나타내는 불리언 배열(receivedSteps)을 보유합니다. 또한 일별 수신 자격을 판정하기 위해 마지막으로 보너스를 수신한 시각(lastReceivedAt)을 기록합니다. receivedSteps는 보너스 사이클이 재시작될 때(반복이 활성화된 스트리밍 모드 등) 초기화될 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 receiveStatusId string ※ ~ 1024자 로그인 보너스 수령 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID receivedSteps List [] 0 ~ 100 items 수신 스텝 보상 목록의 각 날짜에 대응하는 순서가 있는 불리언 배열. true는 사용자가 해당 날짜의 보상을 수신했음을 나타내고, false는 놓쳤거나 아직 수신하지 않았음을 나타냅니다. 배열의 인덱스는 관련된 BonusModel의 rewards 배열과 대응합니다. 스트리밍 모드에서 반복이 활성화된 경우, 사이클이 재시작될 때 이 배열은 초기화됩니다. lastReceivedAt long 마지막 수신 시각 사용자가 마지막으로 로그인 보너스를 수신한 시각의 타임스탬프. 보너스 모델에 정의된 리셋 시각을 기준으로, 사용자가 오늘의 보너스를 이미 수신했는지 여부를 판정하는 데 사용됩니다. 수신 상태가 초기화될 때(반복 모드에서의 사이클 재시작 시 등) 0으로 재설정됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 BonusModel 로그인 보너스 모델 로그인 보너스 모델에는 로그인 보너스의 배포 스케줄을 설정합니다. 배포 스케줄에는 《스케줄 모드》와 《스트리밍 모드》가 있습니다. 스케줄 모드에서는 GS2-Schedule의 이벤트 지정이 필수이며, 해당 이벤트의 시작일로부터 경과한 일수에 따라 보너스를 배포합니다. 도중에 놓친 날짜가 발생한 경우, 그 날의 보너스는 배포되지 않습니다. 스트리밍 모드에서는 매일 보너스에 설정된 보상을 처음부터 순서대로 배포합니다. 스트리밍 모드에서는 반복 설정이 가능합니다. 이 경우 스트림의 끝에 도달하면 다시 처음부터 배포를 시작합니다. 스케줄 모드·스트리밍 모드 모두 미수령 구제 기능이 있습니다. 일정한 비용을 지불함으로써 놓친 보너스를 수령할 수 있습니다. 단, GS2-Schedule의 이벤트가 연결되어 있는 경우, 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없습니다. 미수령 구제 기능은 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 스케줄 모드·스트리밍 모드 모두, 설정 가능한 보너스의 최대 일수는 100일입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 bonusModelId string ※ ~ 1024자 로그인 보너스 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “schedule”,   “streaming” }  모드 로그인 보너스의 배포 스케줄 종류를 지정합니다. “schedule” 모드에서는 GS2-Schedule의 이벤트 시작일로부터 경과한 일수를 기준으로 보상이 배포됩니다. “streaming” 모드에서는 달력 날짜와 관계없이 매일 처음부터 순서대로 보상이 배포됩니다. 정의 설명 schedule 스케줄 모드 streaming 스트리밍 모드 periodEventId string ~ 1024자 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 로그인 보너스를 활성화할 기간을 나타내는 GS2-Schedule의 이벤트 GRN입니다. 스케줄 모드에서는 필수이며, 보상 배포의 경과 일수를 계산하는 기준이 되는 시작일을 결정합니다. 스트리밍 모드에서는 생략 가능하지만, 지정한 경우 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없게 됩니다. resetHour int {periodEventId} == \"” ※ 0 ~ 23 리셋 시간(UTC) 수령 플래그가 리셋되는 시각(0~23, UTC)입니다. 로그인 보너스에서 날짜가 바뀌는 시점을 결정합니다. periodEventId가 지정되지 않은 경우에만 필요합니다. 이벤트가 설정되어 있는 경우, 리셋 시점은 이벤트의 스케줄을 따릅니다. ※ periodEventId이(가) \"” 이면 필수 repeat 문자열 열거형 enum {   “enabled”,   “disabled” } {mode} == “streaming” ※ 반복 모든 보상을 배포한 후, 처음부터 다시 배포할지 여부입니다. 스트리밍 모드에서만 유효합니다. 활성화하면 마지막 보상을 배포한 후 첫 번째 보상으로 돌아가 반복됩니다. 주의: 반복이 활성화된 경우, 미수령 구제 기능은 사용할 수 없습니다. 정의 설명 enabled 활성화 disabled 비활성화 ※ mode이(가) “streaming” 이면 필수 rewards List 0 ~ 100 items 보상 목록 날짜별 보상의 순서가 지정된 목록입니다. 각 항목은 하루치 로그인 보너스에 대응하며, 인덱스 0부터 순서대로 배포됩니다. 스케줄 모드에서는 인덱스가 이벤트 시작일로부터 경과한 일수에 대응합니다. 스트리밍 모드에서는 인덱스가 로그인 일수에 대응합니다. 최대 100개 항목까지 설정할 수 있습니다. missedReceiveRelief 문자열 열거형 enum {   “enabled”,   “disabled” } “disabled” 미수령 구제 기능 놓친 보너스의 구제 기능을 활성화할지 여부입니다. 활성화하면 사용자는 지정된 비용(소비 액션)을 지불함으로써 받지 못한 보너스를 소급하여 수령할 수 있습니다. 필요에 따라 구제를 허용하기 전에 조건을 확인하는 검증 액션도 설정할 수 있습니다. 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 기본값은 “disabled\"입니다. 정의 설명 enabled 활성화 disabled 비활성화 missedReceiveReliefVerifyActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 검증 액션 목록 미수령 구제를 허용하기 전에 실행되는 검증 액션의 목록입니다. 구제 처리 전에 사용자의 자격 등 전제 조건을 확인합니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 missedReceiveReliefConsumeActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 소비 액션 목록 놓친 보너스를 구제하기 위해 사용자가 지불해야 하는 비용을 정의하는 소비 액션의 목록입니다. 예를 들어 게임 내 화폐나 아이템을 구제 비용으로 소비하도록 설정할 수 있습니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 Reward 보상 로그인 보너스의 하루치 보상 설정을 나타냅니다. 각 Reward에는 사용자가 수신할 항목(아이템, 화폐, 경험치 등)을 정의하는 입수 액션 목록이 포함됩니다. BonusModel의 rewards 배열은 하루당 하나의 Reward를 보유하며, 순서대로 배포됩니다. 보상 값은 버프 시스템(BonusModelBuff)을 통해 실행 시점에 변경할 수 있으며, 입수 액션에 배율을 적용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List  1 ~ 10 items 입수 액션 목록 이 날짜의 보상으로 사용자에게 부여되는 리소스를 정의하는 입수 액션 목록. 각 액션은 입수 액션(아이템 추가, 화폐 부여 등)과 그 요청 파라미터를 지정합니다. 보상당 최소 1개, 최대 10개의 액션을 설정할 수 있습니다. ConsumeAction 소비 액션 소비 액션의 구조를 통해 사용자로부터 리소스를 소비하는 액션을 정의합니다. 미수령 보너스 구제에서 사용자가 지불해야 하는 비용(화폐 차감, 아이템 소비 등)을 지정하는 데 사용됩니다. action 필드는 소비 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 획득 액션 획득 액션의 구조를 통해 사용자에게 리소스를 부여하는 액션을 정의합니다. 보상 내에서 사용되며, 사용자가 받는 것(인벤토리에 아이템 추가, 화폐 부여, 경험치 부여 등)을 지정합니다. action 필드는 획득 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 작업을 실행하기 전에 조건을 검증하는 액션을 정의합니다. 미수령 보너스 구제에서 구제를 허용하기 전에 전제 조건(사용자 자격, 리소스 이용 가능 여부 등)을 확인하는 데 사용됩니다. action 필드는 검증 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config Config 설정 트랜잭션 변수에 적용할 설정값의 키-값 쌍입니다. Config 엔트리를 통해 실행 시점에 획득 액션의 동적인 매개변수화가 가능합니다. 예를 들어 슬롯 이름이나 그 밖의 문맥에 따라 달라지는 값을 Config 설정을 통해 트랜잭션 요청에 주입할 수 있어, 마스터 데이터를 변경하지 않고도 유연한 보상 설정을 구현할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 키 트랜잭션 매개변수 내에서 치환되는 변수명입니다. 최대 64자. value string ~ 51200자 값 트랜잭션 매개변수 내에서 대응하는 키에 대입되는 값입니다. 최대 51,200자. VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentBonusMaster 현재 활성화된 로그인 보너스 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 로그인 보너스 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여, 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-LoginReward 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 BonusModelMaster 로그인 보너스 모델 마스터 로그인 보너스 모델 마스터는 게임 내에서 사용되는 로그인 보너스 모델을 편집·관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 로그인 보너스 모델로 반영됩니다. 로그인 보너스 모델에는 로그인 보너스의 배포 스케줄을 설정합니다. 배포 스케줄에는 《스케줄 모드》와 《스트리밍 모드》가 있습니다. 스케줄 모드에서는 GS2-Schedule의 이벤트 지정이 필수이며, 해당 이벤트의 시작일로부터 경과한 일수에 따라 보너스를 배포합니다. 도중에 놓친 경우, 해당 날짜의 보너스는 배포되지 않습니다. 스트리밍 모드에서는 매일 보너스에 설정된 보상을 처음부터 순서대로 배포합니다. 스트리밍 모드에서는 반복 설정이 가능합니다. 이 경우 스트림의 끝에 도달하면 처음부터 다시 배포합니다. 스케줄 모드·스트리밍 모드 모두, 놓친 보너스에 대한 구제 기능이 있습니다. 일정 비용을 지불하면 놓친 보너스를 수신할 수 있습니다. 단, GS2-Schedule 이벤트가 연결되어 있는 경우, 이벤트 시작일로부터 경과한 일수보다 이후의 보너스는 수신할 수 없습니다. 또한 놓친 보너스 구제 기능은 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 스케줄 모드·스트리밍 모드 모두, 설정 가능한 보너스의 최대 일수는 100일입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 bonusModelId string ※ ~ 1024자 로그인 보너스 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 로그인 보너스 모델 이름 로그인 보너스 모델 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “schedule”,   “streaming” }  모드 로그인 보너스의 배포 스케줄 종류를 지정합니다. “schedule” 모드에서는 GS2-Schedule의 이벤트 시작일로부터 경과한 일수를 기준으로 보상이 배포됩니다. “streaming” 모드에서는 달력 날짜와 관계없이 매일 처음부터 순서대로 보상이 배포됩니다. 정의 설명 schedule 스케줄 모드 streaming 스트리밍 모드 periodEventId string ~ 1024자 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 로그인 보너스를 활성화할 기간을 나타내는 GS2-Schedule의 이벤트 GRN입니다. 스케줄 모드에서는 필수이며, 보상 배포의 경과 일수를 계산하는 기준이 되는 시작일을 결정합니다. 스트리밍 모드에서는 생략 가능하지만, 지정한 경우 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없게 됩니다. resetHour int {periodEventId} == \"” ※ 0 ~ 23 리셋 시간(UTC) 수령 플래그가 리셋되는 시각(0~23, UTC)입니다. 로그인 보너스에서 날짜가 바뀌는 시점을 결정합니다. periodEventId가 지정되지 않은 경우에만 필요합니다. 이벤트가 설정되어 있는 경우, 리셋 시점은 이벤트의 스케줄을 따릅니다. ※ periodEventId이(가) \"” 이면 필수 repeat 문자열 열거형 enum {   “enabled”,   “disabled” } {mode} == “streaming” ※ 반복 모든 보상을 배포한 후, 처음부터 다시 배포할지 여부입니다. 스트리밍 모드에서만 유효합니다. 활성화하면 마지막 보상을 배포한 후 첫 번째 보상으로 돌아가 반복됩니다. 주의: 반복이 활성화된 경우, 미수령 구제 기능은 사용할 수 없습니다. 정의 설명 enabled 활성화 disabled 비활성화 ※ mode이(가) “streaming” 이면 필수 rewards List 0 ~ 100 items 보상 목록 날짜별 보상의 순서가 지정된 목록입니다. 각 항목은 하루치 로그인 보너스에 대응하며, 인덱스 0부터 순서대로 배포됩니다. 스케줄 모드에서는 인덱스가 이벤트 시작일로부터 경과한 일수에 대응합니다. 스트리밍 모드에서는 인덱스가 로그인 일수에 대응합니다. 최대 100개 항목까지 설정할 수 있습니다. missedReceiveRelief 문자열 열거형 enum {   “enabled”,   “disabled” } “disabled” 미수령 구제 기능 놓친 보너스의 구제 기능을 활성화할지 여부입니다. 활성화하면 사용자는 지정된 비용(소비 액션)을 지불함으로써 받지 못한 보너스를 소급하여 수령할 수 있습니다. 필요에 따라 구제를 허용하기 전에 조건을 확인하는 검증 액션도 설정할 수 있습니다. 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 기본값은 “disabled\"입니다. 정의 설명 enabled 활성화 disabled 비활성화 missedReceiveReliefVerifyActions List {missedReceiveRelief} == “enabled” 0 ~ 10 items 미수령 구제 검증 액션 목록 미수령 구제를 허용하기 전에 실행되는 검증 액션의 목록입니다. 구제 처리 전에 사용자의 자격 등 전제 조건을 확인합니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 missedReceiveReliefConsumeActions List {missedReceiveRelief} == “enabled” 0 ~ 10 items 미수령 구제 소비 액션 목록 놓친 보너스를 구제하기 위해 사용자가 지불해야 하는 비용을 정의하는 소비 액션의 목록입니다. 예를 들어 게임 내 화폐나 아이템을 구제 비용으로 소비하도록 설정할 수 있습니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 login_reward . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DescribeNamespacesRequest ; import io.gs2.loginReward.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2LoginReward . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2LoginReward . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . describe_namespaces ( login_reward . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'login_reward' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 이 네임스페이스 내에서 보상 트랜잭션이 어떻게 실행되는지에 대한 설정. receiveScript ScriptSetting 보상을 수신할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receive logSetting LogSetting 로그 출력 설정 API 요청·응답 로그를 GS2-Log에 출력하기 위한 설정. 설정하면 로그인 보너스 조작(수신, 놓친 보너스 구제 등)이 모니터링 및 분석을 위해 로그로 출력됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 login_reward . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 loginReward . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ReceiveScript : nil , LogSetting : \u0026 loginReward . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\LoginReward\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withReceiveScript ( null ) -\u003e withLogSetting (( new \\Gs2\\LoginReward\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.CreateNamespaceRequest ; import io.gs2.loginReward.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . loginReward . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReceiveScript ( null ) . withLogSetting ( new io . gs2 . loginReward . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2LoginReward . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2LoginReward . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithReceiveScript ( null ) . WithLogSetting ( new Gs2 . Gs2LoginReward . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . createNamespace ( new Gs2LoginReward . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2LoginReward . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReceiveScript ( null ) . withLogSetting ( new Gs2LoginReward . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . create_namespace ( login_reward . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( login_reward . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_receive_script ( None ) . with_log_setting ( login_reward . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, receiveScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, receiveScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 login_reward . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.GetNamespaceStatusRequest ; import io.gs2.loginReward.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2LoginReward . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2LoginReward . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . get_namespace_status ( login_reward . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'login_reward' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 login_reward . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.GetNamespaceRequest ; import io.gs2.loginReward.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2LoginReward . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . getNamespace ( new Gs2LoginReward . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . get_namespace ( login_reward . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 이 네임스페이스 내에서 보상 트랜잭션이 어떻게 실행되는지에 대한 설정. receiveScript ScriptSetting 보상을 수신할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receive logSetting LogSetting 로그 출력 설정 API 요청·응답 로그를 GS2-Log에 출력하기 위한 설정. 설정하면 로그인 보너스 조작(수신, 놓친 보너스 구제 등)이 모니터링 및 분석을 위해 로그로 출력됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 login_reward . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 loginReward . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, ReceiveScript : nil , LogSetting : \u0026 loginReward . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\LoginReward\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withReceiveScript ( null ) -\u003e withLogSetting (( new \\Gs2\\LoginReward\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.UpdateNamespaceRequest ; import io.gs2.loginReward.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . loginReward . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withReceiveScript ( null ) . withLogSetting ( new io . gs2 . loginReward . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2LoginReward . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2LoginReward . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithReceiveScript ( null ) . WithLogSetting ( new Gs2 . Gs2LoginReward . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2LoginReward . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2LoginReward . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withReceiveScript ( null ) . withLogSetting ( new Gs2LoginReward . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . update_namespace ( login_reward . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( login_reward . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_receive_script ( None ) . with_log_setting ( login_reward . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, receiveScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, receiveScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 login_reward . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DeleteNamespaceRequest ; import io.gs2.loginReward.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2LoginReward . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2LoginReward . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . delete_namespace ( login_reward . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 login_reward . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.GetServiceVersionRequest ; import io.gs2.loginReward.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2LoginReward . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2LoginReward . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . get_service_version ( login_reward . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 login_reward . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DumpUserDataByUserIdRequest ; import io.gs2.loginReward.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2LoginReward . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2LoginReward . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . dump_user_data_by_user_id ( login_reward . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'login_reward' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 login_reward . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.loginReward.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2LoginReward . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2LoginReward . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( login_reward . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'login_reward' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 login_reward . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.CleanUserDataByUserIdRequest ; import io.gs2.loginReward.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2LoginReward . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2LoginReward . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . clean_user_data_by_user_id ( login_reward . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'login_reward' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 login_reward . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.loginReward.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2LoginReward . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2LoginReward . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( login_reward . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'login_reward' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 login_reward . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.loginReward.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2LoginReward . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2LoginReward . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( login_reward . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'login_reward' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 login_reward . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.ImportUserDataByUserIdRequest ; import io.gs2.loginReward.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2LoginReward . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2LoginReward . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . import_user_data_by_user_id ( login_reward . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'login_reward' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 login_reward . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.CheckImportUserDataByUserIdRequest ; import io.gs2.loginReward.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2LoginReward . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2LoginReward . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( login_reward . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'login_reward' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; receive 로그인 보너스 수령 지정된 보너스 모델에 기반하여 요청한 사용자의 로그인 보너스를 수령합니다. 보너스는 스텝을 통해 진행되며, 현재 스텝의 보상이 트랜잭션으로 발행됩니다. 보상 사이클이 완료되고 반복이 활성화된 경우, 사이클은 자동으로 리셋됩니다. 현재 기간의 보너스를 이미 수령한 경우, AlreadyReceived 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 로그인 보너스 수령 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . Receive ( \u0026 login_reward . ReceiveRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\ReceiveRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e receive ( ( new ReceiveRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.ReceiveRequest ; import io.gs2.loginReward.result.ReceiveResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { ReceiveResult result = client . receive ( new ReceiveRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConfig ( null ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . ReceiveResult \u003e asyncResult = null ; yield return client . Receive ( new Gs2 . Gs2LoginReward . Request . ReceiveRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . receive ( new Gs2LoginReward . ReceiveRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConfig ( null ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . receive ( login_reward . ReceiveRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_access_token ( 'accessToken-0001' ) . with_config ( None ) ) item = result . item bonus_model = result . bonus_model transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.receive ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , accessToken = \"accessToken-0001\" , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'login_reward' ) api_result_handler = client.receive_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , accessToken = \"accessToken-0001\" , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; receiveByUserId 사용자 ID를 지정하여 로그인 보너스 수령 지정된 사용자의 로그인 보너스를 보너스 모델에 기반하여 수령합니다. 보너스는 스텝을 통해 진행되며, 현재 스텝의 보상이 트랜잭션으로 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 로그인 보너스 수령 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . ReceiveByUserId ( \u0026 login_reward . ReceiveByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), UserId : pointy . String ( \"user-0001\" ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\ReceiveByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e receiveByUserId ( ( new ReceiveByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.ReceiveByUserIdRequest ; import io.gs2.loginReward.result.ReceiveByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { ReceiveByUserIdResult result = client . receiveByUserId ( new ReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . ReceiveByUserIdResult \u003e asyncResult = null ; yield return client . ReceiveByUserId ( new Gs2 . Gs2LoginReward . Request . ReceiveByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithUserId ( \"user-0001\" ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . receiveByUserId ( new Gs2LoginReward . ReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . receive_by_user_id ( login_reward . ReceiveByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_user_id ( 'user-0001' ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item bonus_model = result . bonus_model transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.receive_by_user_id ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'login_reward' ) api_result_handler = client.receive_by_user_id_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; missedReceive 놓친 로그인 보너스 수령 요청한 사용자가 놓친 로그인 보너스를 수령합니다. 보너스 모델에서 수령 놓침 구제 기능이 활성화되어 있어야 합니다. 스트리밍 모드에서는 스텝 번호를 자동으로 계산할 수 있지만, 스케줄 모드에서는 스텝 번호를 지정해야 합니다. 놓친 보상은 트랜잭션으로 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 stepNumber int 0 ~ 100 수령할 스텝 번호. 스트리밍 모드에서는 생략할 수 있습니다 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 로그인 보너스 수령 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . MissedReceive ( \u0026 login_reward . MissedReceiveRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StepNumber : pointy . Int32 ( 1 ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\MissedReceiveRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e missedReceive ( ( new MissedReceiveRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStepNumber ( 1 ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.MissedReceiveRequest ; import io.gs2.loginReward.result.MissedReceiveResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { MissedReceiveResult result = client . missedReceive ( new MissedReceiveRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStepNumber ( 1 ) . withConfig ( null ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . MissedReceiveResult \u003e asyncResult = null ; yield return client . MissedReceive ( new Gs2 . Gs2LoginReward . Request . MissedReceiveRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStepNumber ( 1 ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . missedReceive ( new Gs2LoginReward . MissedReceiveRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStepNumber ( 1 ) . withConfig ( null ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . missed_receive ( login_reward . MissedReceiveRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_access_token ( 'accessToken-0001' ) . with_step_number ( 1 ) . with_config ( None ) ) item = result . item bonus_model = result . bonus_model transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.missed_receive ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , accessToken = \"accessToken-0001\" , stepNumber = 1 , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'login_reward' ) api_result_handler = client.missed_receive_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , accessToken = \"accessToken-0001\" , stepNumber = 1 , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; missedReceiveByUserId 사용자 ID를 지정하여 놓친 로그인 보너스 수령 지정된 사용자가 놓친 로그인 보너스를 수령합니다. 보너스 모델에서 수령 놓침 구제 기능이 활성화되어 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID stepNumber int 0 ~ 100 수령할 스텝 번호. 스트리밍 모드에서는 생략할 수 있습니다 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 transactionId string 발행된 트랜잭션 ID stampSheet string 로그인 보너스 수령 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . MissedReceiveByUserId ( \u0026 login_reward . MissedReceiveByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), UserId : pointy . String ( \"user-0001\" ), StepNumber : pointy . Int32 ( 1 ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\MissedReceiveByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e missedReceiveByUserId ( ( new MissedReceiveByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStepNumber ( 1 ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.MissedReceiveByUserIdRequest ; import io.gs2.loginReward.result.MissedReceiveByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { MissedReceiveByUserIdResult result = client . missedReceiveByUserId ( new MissedReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withStepNumber ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . MissedReceiveByUserIdResult \u003e asyncResult = null ; yield return client . MissedReceiveByUserId ( new Gs2 . Gs2LoginReward . Request . MissedReceiveByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithUserId ( \"user-0001\" ) . WithStepNumber ( 1 ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . missedReceiveByUserId ( new Gs2LoginReward . MissedReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withStepNumber ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . missed_receive_by_user_id ( login_reward . MissedReceiveByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_user_id ( 'user-0001' ) . with_step_number ( 1 ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item bonus_model = result . bonus_model transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.missed_receive_by_user_id ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , stepNumber = 1 , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'login_reward' ) api_result_handler = client.missed_receive_by_user_id_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , stepNumber = 1 , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; describeReceiveStatuses 수령 상태 목록 취득 요청한 사용자의 로그인 보너스 수령 상태의 페이지네이션 목록을 취득합니다. 각 상태는 특정 보너스 모델에 대해 어떤 스텝이 수령 완료되었는지와 현재 진행 상황을 추적합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 수령 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DescribeReceiveStatuses ( \u0026 login_reward . DescribeReceiveStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DescribeReceiveStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e describeReceiveStatuses ( ( new DescribeReceiveStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DescribeReceiveStatusesRequest ; import io.gs2.loginReward.result.DescribeReceiveStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DescribeReceiveStatusesResult result = client . describeReceiveStatuses ( new DescribeReceiveStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List ReceiveStatus \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DescribeReceiveStatusesResult \u003e asyncResult = null ; yield return client . DescribeReceiveStatuses ( new Gs2 . Gs2LoginReward . Request . DescribeReceiveStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . describeReceiveStatuses ( new Gs2LoginReward . DescribeReceiveStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . describe_receive_statuses ( login_reward . DescribeReceiveStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.describe_receive_statuses ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'login_reward' ) api_result_handler = client.describe_receive_statuses_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeReceiveStatusesByUserId 사용자 ID를 지정하여 수령 상태 목록 취득 지정된 사용자의 로그인 보너스 수령 상태의 페이지네이션 목록을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 수령 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DescribeReceiveStatusesByUserId ( \u0026 login_reward . DescribeReceiveStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DescribeReceiveStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e describeReceiveStatusesByUserId ( ( new DescribeReceiveStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DescribeReceiveStatusesByUserIdRequest ; import io.gs2.loginReward.result.DescribeReceiveStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DescribeReceiveStatusesByUserIdResult result = client . describeReceiveStatusesByUserId ( new DescribeReceiveStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ReceiveStatus \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DescribeReceiveStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeReceiveStatusesByUserId ( new Gs2 . Gs2LoginReward . Request . DescribeReceiveStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . describeReceiveStatusesByUserId ( new Gs2LoginReward . DescribeReceiveStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . describe_receive_statuses_by_user_id ( login_reward . DescribeReceiveStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.describe_receive_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'login_reward' ) api_result_handler = client.describe_receive_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getReceiveStatus 수령 상태 취득 요청한 사용자의 지정된 보너스 모델의 수령 상태를 취득합니다. 현재 스텝 진행 상황, 수령 완료된 스텝, 그리고 관련된 보너스 모델의 상세 정보를 반환합니다. 보상 사이클이 완료되고 반복이 활성화된 경우, 상태는 자동으로 리셋됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . GetReceiveStatus ( \u0026 login_reward . GetReceiveStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\GetReceiveStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e getReceiveStatus ( ( new GetReceiveStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.GetReceiveStatusRequest ; import io.gs2.loginReward.result.GetReceiveStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { GetReceiveStatusResult result = client . getReceiveStatus ( new GetReceiveStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . GetReceiveStatusResult \u003e asyncResult = null ; yield return client . GetReceiveStatus ( new Gs2 . Gs2LoginReward . Request . GetReceiveStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . getReceiveStatus ( new Gs2LoginReward . GetReceiveStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . get_receive_status ( login_reward . GetReceiveStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item bonus_model = result . bonus_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.get_receive_status ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; client = gs2 ( 'login_reward' ) api_result_handler = client.get_receive_status_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; getReceiveStatusByUserId 사용자 ID를 지정하여 수령 상태 취득 지정된 사용자의 보너스 모델의 수령 상태를 취득합니다. 스텝 진행 상황과 수령 완료된 스텝을 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . GetReceiveStatusByUserId ( \u0026 login_reward . GetReceiveStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\GetReceiveStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e getReceiveStatusByUserId ( ( new GetReceiveStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.GetReceiveStatusByUserIdRequest ; import io.gs2.loginReward.result.GetReceiveStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { GetReceiveStatusByUserIdResult result = client . getReceiveStatusByUserId ( new GetReceiveStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . GetReceiveStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetReceiveStatusByUserId ( new Gs2 . Gs2LoginReward . Request . GetReceiveStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . getReceiveStatusByUserId ( new Gs2LoginReward . GetReceiveStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . get_receive_status_by_user_id ( login_reward . GetReceiveStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item bonus_model = result . bonus_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.get_receive_status_by_user_id ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; client = gs2 ( 'login_reward' ) api_result_handler = client.get_receive_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; deleteReceiveStatusByUserId 사용자 ID를 지정하여 수령 상태 리셋 지정된 사용자의 보너스 모델의 수령 상태 데이터를 모두 삭제하여 보너스 진행 상황을 완전히 리셋합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DeleteReceiveStatusByUserId ( \u0026 login_reward . DeleteReceiveStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DeleteReceiveStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e deleteReceiveStatusByUserId ( ( new DeleteReceiveStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DeleteReceiveStatusByUserIdRequest ; import io.gs2.loginReward.result.DeleteReceiveStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DeleteReceiveStatusByUserIdResult result = client . deleteReceiveStatusByUserId ( new DeleteReceiveStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DeleteReceiveStatusByUserIdResult \u003e asyncResult = null ; yield return client . DeleteReceiveStatusByUserId ( new Gs2 . Gs2LoginReward . Request . DeleteReceiveStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . deleteReceiveStatusByUserId ( new Gs2LoginReward . DeleteReceiveStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . delete_receive_status_by_user_id ( login_reward . DeleteReceiveStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item bonus_model = result . bonus_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.delete_receive_status_by_user_id ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; client = gs2 ( 'login_reward' ) api_result_handler = client.delete_receive_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; markReceived 수령 완료 처리 요청한 사용자의 보너스 모델에서 특정 스텝을 수동으로 수령 완료로 표시합니다. 수령 완료된 스텝의 비트 배열을 갱신합니다. 지정된 스텝이 이미 수령 완료된 경우, 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. accessToken string  ~ 128자 액세스 토큰 stepNumber int  0 ~ 100 스텝 번호 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . MarkReceived ( \u0026 login_reward . MarkReceivedRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StepNumber : pointy . Int32 ( 1 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\MarkReceivedRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e markReceived ( ( new MarkReceivedRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStepNumber ( 1 ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.MarkReceivedRequest ; import io.gs2.loginReward.result.MarkReceivedResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { MarkReceivedResult result = client . markReceived ( new MarkReceivedRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStepNumber ( 1 ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . MarkReceivedResult \u003e asyncResult = null ; yield return client . MarkReceived ( new Gs2 . Gs2LoginReward . Request . MarkReceivedRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStepNumber ( 1 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . markReceived ( new Gs2LoginReward . MarkReceivedRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStepNumber ( 1 ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . mark_received ( login_reward . MarkReceivedRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_access_token ( 'accessToken-0001' ) . with_step_number ( 1 ) ) item = result . item bonus_model = result . bonus_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.mark_received ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , accessToken = \"accessToken-0001\" , stepNumber = 1 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; client = gs2 ( 'login_reward' ) api_result_handler = client.mark_received_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , accessToken = \"accessToken-0001\" , stepNumber = 1 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; markReceivedByUserId 사용자 ID를 지정하여 수령 완료 처리 지정된 사용자의 보너스 모델에서 특정 스텝을 수동으로 수령 완료로 표시합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID stepNumber int  0 ~ 100 스텝 번호 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . MarkReceivedByUserId ( \u0026 login_reward . MarkReceivedByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), UserId : pointy . String ( \"user-0001\" ), StepNumber : pointy . Int32 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\MarkReceivedByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e markReceivedByUserId ( ( new MarkReceivedByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStepNumber ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.MarkReceivedByUserIdRequest ; import io.gs2.loginReward.result.MarkReceivedByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { MarkReceivedByUserIdResult result = client . markReceivedByUserId ( new MarkReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withStepNumber ( 1 ) . withTimeOffsetToken ( null ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . MarkReceivedByUserIdResult \u003e asyncResult = null ; yield return client . MarkReceivedByUserId ( new Gs2 . Gs2LoginReward . Request . MarkReceivedByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithUserId ( \"user-0001\" ) . WithStepNumber ( 1 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . markReceivedByUserId ( new Gs2LoginReward . MarkReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withStepNumber ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . mark_received_by_user_id ( login_reward . MarkReceivedByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_user_id ( 'user-0001' ) . with_step_number ( 1 ) . with_time_offset_token ( None ) ) item = result . item bonus_model = result . bonus_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.mark_received_by_user_id ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , stepNumber = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; client = gs2 ( 'login_reward' ) api_result_handler = client.mark_received_by_user_id_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , stepNumber = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; unmarkReceivedByUserId 사용자 ID를 지정하여 미수령 처리 지정된 사용자의 보너스 모델에서 수령 완료로 표시된 스텝을 미수령 상태로 되돌립니다. 지정된 스텝이 수령 완료 상태가 아닌 경우, 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID stepNumber int  0 ~ 100 스텝 번호 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ReceiveStatus 수령 상태 bonusModel BonusModel 로그인 보너스 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . UnmarkReceivedByUserId ( \u0026 login_reward . UnmarkReceivedByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), UserId : pointy . String ( \"user-0001\" ), StepNumber : pointy . Int32 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item bonusModel := result . BonusModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\UnmarkReceivedByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e unmarkReceivedByUserId ( ( new UnmarkReceivedByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStepNumber ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $bonusModel = $result -\u003e getBonusModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.UnmarkReceivedByUserIdRequest ; import io.gs2.loginReward.result.UnmarkReceivedByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { UnmarkReceivedByUserIdResult result = client . unmarkReceivedByUserId ( new UnmarkReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withStepNumber ( 1 ) . withTimeOffsetToken ( null ) ); ReceiveStatus item = result . getItem (); BonusModel bonusModel = result . getBonusModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . UnmarkReceivedByUserIdResult \u003e asyncResult = null ; yield return client . UnmarkReceivedByUserId ( new Gs2 . Gs2LoginReward . Request . UnmarkReceivedByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ) . WithUserId ( \"user-0001\" ) . WithStepNumber ( 1 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var bonusModel = result . BonusModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . unmarkReceivedByUserId ( new Gs2LoginReward . UnmarkReceivedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) . withUserId ( \"user-0001\" ) . withStepNumber ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const bonusModel = result . getBonusModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . unmark_received_by_user_id ( login_reward . UnmarkReceivedByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) . with_user_id ( 'user-0001' ) . with_step_number ( 1 ) . with_time_offset_token ( None ) ) item = result . item bonus_model = result . bonus_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.unmark_received_by_user_id ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , stepNumber = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; client = gs2 ( 'login_reward' ) api_result_handler = client.unmark_received_by_user_id_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , userId = \"user-0001\" , stepNumber = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; bonusModel = result.bonusModel ; describeBonusModels 로그인 보너스 모델 목록 취득 지정된 네임스페이스의 현재 활성화된 로그인 보너스 모델 목록을 취득합니다. 모델은 보너스 모드(CUMULATIVE 또는 SCHEDULE), 리셋 타이밍, 반복 설정, 보상 시퀀스를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 로그인 보너스 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DescribeBonusModels ( \u0026 login_reward . DescribeBonusModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DescribeBonusModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e describeBonusModels ( ( new DescribeBonusModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DescribeBonusModelsRequest ; import io.gs2.loginReward.result.DescribeBonusModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DescribeBonusModelsResult result = client . describeBonusModels ( new DescribeBonusModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List BonusModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DescribeBonusModelsResult \u003e asyncResult = null ; yield return client . DescribeBonusModels ( new Gs2 . Gs2LoginReward . Request . DescribeBonusModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . describeBonusModels ( new Gs2LoginReward . DescribeBonusModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . describe_bonus_models ( login_reward . DescribeBonusModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.describe_bonus_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'login_reward' ) api_result_handler = client.describe_bonus_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getBonusModel 로그인 보너스 모델 취득 지정된 로그인 보너스 모델의 모드, 리셋 타이밍, 반복 설정, 보상 목록, 수령 놓침 구제 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item BonusModel 로그인 보너스 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . GetBonusModel ( \u0026 login_reward . GetBonusModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonus-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\GetBonusModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e getBonusModel ( ( new GetBonusModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonus-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.GetBonusModelRequest ; import io.gs2.loginReward.result.GetBonusModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { GetBonusModelResult result = client . getBonusModel ( new GetBonusModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) ); BonusModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . GetBonusModelResult \u003e asyncResult = null ; yield return client . GetBonusModel ( new Gs2 . Gs2LoginReward . Request . GetBonusModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonus-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . getBonusModel ( new Gs2LoginReward . GetBonusModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonus-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . get_bonus_model ( login_reward . GetBonusModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonus-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.get_bonus_model ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.get_bonus_model_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonus-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 로그인 보너스 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 활성화된 로그인 보너스 모델 마스터를 활성화 가능한 형식으로 내보냅니다. 내보낸 데이터는 다른 네임스페이스의 마스터 데이터 갱신이나 백업으로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentBonusMaster 활성화 가능한 로그인 보너스 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 login_reward . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.ExportMasterRequest ; import io.gs2.loginReward.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentBonusMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2LoginReward . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . exportMaster ( new Gs2LoginReward . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . export_master ( login_reward . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentBonusMaster 현재 활성화된 로그인 보너스 모델의 마스터 데이터 취득 지정된 네임스페이스의 현재 활성화된 로그인 보너스 모델의 마스터 데이터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentBonusMaster 현재 활성화된 로그인 보너스 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . GetCurrentBonusMaster ( \u0026 login_reward . GetCurrentBonusMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\GetCurrentBonusMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e getCurrentBonusMaster ( ( new GetCurrentBonusMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.GetCurrentBonusMasterRequest ; import io.gs2.loginReward.result.GetCurrentBonusMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { GetCurrentBonusMasterResult result = client . getCurrentBonusMaster ( new GetCurrentBonusMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentBonusMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . GetCurrentBonusMasterResult \u003e asyncResult = null ; yield return client . GetCurrentBonusMaster ( new Gs2 . Gs2LoginReward . Request . GetCurrentBonusMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . getCurrentBonusMaster ( new Gs2LoginReward . GetCurrentBonusMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . get_current_bonus_master ( login_reward . GetCurrentBonusMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.get_current_bonus_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.get_current_bonus_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentBonusMaster 현재 활성화된 로그인 보너스 모델의 마스터 데이터를 갱신（3단계 버전） 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 진행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentBonusMaster 에 업로드로 취득한 토큰을 전달하여 실행함으로써 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentBonusMaster ( \u0026 login_reward . PreUpdateCurrentBonusMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\PreUpdateCurrentBonusMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentBonusMaster ( ( new PreUpdateCurrentBonusMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.PreUpdateCurrentBonusMasterRequest ; import io.gs2.loginReward.result.PreUpdateCurrentBonusMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { PreUpdateCurrentBonusMasterResult result = client . preUpdateCurrentBonusMaster ( new PreUpdateCurrentBonusMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . PreUpdateCurrentBonusMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentBonusMaster ( new Gs2 . Gs2LoginReward . Request . PreUpdateCurrentBonusMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . preUpdateCurrentBonusMaster ( new Gs2LoginReward . PreUpdateCurrentBonusMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . pre_update_current_bonus_master ( login_reward . PreUpdateCurrentBonusMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.pre_update_current_bonus_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'login_reward' ) api_result_handler = client.pre_update_current_bonus_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentBonusMaster 현재 활성화된 로그인 보너스 모델의 마스터 데이터 갱신 현재 활성화된 로그인 보너스 모델의 마스터 데이터를 갱신합니다. 2가지 모드를 지원합니다：인라인 설정용 ‘direct’ 모드와, 3단계 갱신 프로세스로 사전에 업로드한 설정을 적용하는 ‘preUpload’ 모드입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentBonusMaster 갱신된 현재 활성화된 로그인 보너스 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentBonusMaster ( \u0026 login_reward . UpdateCurrentBonusMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2023-07-11\\\", \\\"bonusModels\\\": [{\\\"name\\\": \\\"schedule\\\", \\\"mode\\\": \\\"schedule\\\", \\\"periodEventId\\\": \\\"grn:gs2:schedule:grn-0001\\\", \\\"rewards\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}], \\\"missedReceiveRelief\\\": \\\"disabled\\\"}, {\\\"name\\\": \\\"streaming\\\", \\\"mode\\\": \\\"streaming\\\", \\\"resetHour\\\": 15, \\\"repeat\\\": \\\"enabled\\\", \\\"rewards\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}], \\\"missedReceiveRelief\\\": \\\"enabled\\\", \\\"missedReceiveReliefConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}}]}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\UpdateCurrentBonusMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e updateCurrentBonusMaster ( ( new UpdateCurrentBonusMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2023-07-11 \\\" , \\\" bonusModels \\\" : [{ \\\" name \\\" : \\\" schedule \\\" , \\\" mode \\\" : \\\" schedule \\\" , \\\" periodEventId \\\" : \\\" grn:gs2:schedule:grn-0001 \\\" , \\\" rewards \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}], \\\" missedReceiveRelief \\\" : \\\" disabled \\\" }, { \\\" name \\\" : \\\" streaming \\\" , \\\" mode \\\" : \\\" streaming \\\" , \\\" resetHour \\\" : 15, \\\" repeat \\\" : \\\" enabled \\\" , \\\" rewards \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}], \\\" missedReceiveRelief \\\" : \\\" enabled \\\" , \\\" missedReceiveReliefConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}}]}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.UpdateCurrentBonusMasterRequest ; import io.gs2.loginReward.result.UpdateCurrentBonusMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { UpdateCurrentBonusMasterResult result = client . updateCurrentBonusMaster ( new UpdateCurrentBonusMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-07-11\\\", \\\"bonusModels\\\": [{\\\"name\\\": \\\"schedule\\\", \\\"mode\\\": \\\"schedule\\\", \\\"periodEventId\\\": \\\"grn:gs2:schedule:grn-0001\\\", \\\"rewards\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}], \\\"missedReceiveRelief\\\": \\\"disabled\\\"}, {\\\"name\\\": \\\"streaming\\\", \\\"mode\\\": \\\"streaming\\\", \\\"resetHour\\\": 15, \\\"repeat\\\": \\\"enabled\\\", \\\"rewards\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}], \\\"missedReceiveRelief\\\": \\\"enabled\\\", \\\"missedReceiveReliefConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}}]}]}\" ) . withUploadToken ( null ) ); CurrentBonusMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . UpdateCurrentBonusMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentBonusMaster ( new Gs2 . Gs2LoginReward . Request . UpdateCurrentBonusMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2023-07-11\\\", \\\"bonusModels\\\": [{\\\"name\\\": \\\"schedule\\\", \\\"mode\\\": \\\"schedule\\\", \\\"periodEventId\\\": \\\"grn:gs2:schedule:grn-0001\\\", \\\"rewards\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}], \\\"missedReceiveRelief\\\": \\\"disabled\\\"}, {\\\"name\\\": \\\"streaming\\\", \\\"mode\\\": \\\"streaming\\\", \\\"resetHour\\\": 15, \\\"repeat\\\": \\\"enabled\\\", \\\"rewards\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}], \\\"missedReceiveRelief\\\": \\\"enabled\\\", \\\"missedReceiveReliefConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}}]}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . updateCurrentBonusMaster ( new Gs2LoginReward . UpdateCurrentBonusMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-07-11\\\", \\\"bonusModels\\\": [{\\\"name\\\": \\\"schedule\\\", \\\"mode\\\": \\\"schedule\\\", \\\"periodEventId\\\": \\\"grn:gs2:schedule:grn-0001\\\", \\\"rewards\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}], \\\"missedReceiveRelief\\\": \\\"disabled\\\"}, {\\\"name\\\": \\\"streaming\\\", \\\"mode\\\": \\\"streaming\\\", \\\"resetHour\\\": 15, \\\"repeat\\\": \\\"enabled\\\", \\\"rewards\\\": [{\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}, {\\\"acquireActions\\\": [{\\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"staminaName\\\": \\\"quest\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"recoverValue\\\": 100}}]}], \\\"missedReceiveRelief\\\": \\\"enabled\\\", \\\"missedReceiveReliefConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\", \\\"request\\\": {\\\"namespaceName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}}]}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . update_current_bonus_master ( login_reward . UpdateCurrentBonusMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2023-07-11\", \"bonusModels\": [{\"name\": \"schedule\", \"mode\": \"schedule\", \"periodEventId\": \"grn:gs2:schedule:grn-0001\", \"rewards\": [{\"acquireActions\": [{\"action\": \"Gs2Stamina:RecoverStaminaByUserId\", \"request\": {\"namespaceName\": \"stamina-0001\", \"staminaName\": \"quest\", \"userId\": \"# {userId} \", \"recoverValue\": 100}}]}, {\"acquireActions\": [{\"action\": \"Gs2Stamina:RecoverStaminaByUserId\", \"request\": {\"namespaceName\": \"stamina-0001\", \"staminaName\": \"quest\", \"userId\": \"# {userId} \", \"recoverValue\": 100}}]}, {\"acquireActions\": [{\"action\": \"Gs2Stamina:RecoverStaminaByUserId\", \"request\": {\"namespaceName\": \"stamina-0001\", \"staminaName\": \"quest\", \"userId\": \"# {userId} \", \"recoverValue\": 100}}]}], \"missedReceiveRelief\": \"disabled\"}, {\"name\": \"streaming\", \"mode\": \"streaming\", \"resetHour\": 15, \"repeat\": \"enabled\", \"rewards\": [{\"acquireActions\": [{\"action\": \"Gs2Stamina:RecoverStaminaByUserId\", \"request\": {\"namespaceName\": \"stamina-0001\", \"staminaName\": \"quest\", \"userId\": \"# {userId} \", \"recoverValue\": 100}}]}, {\"acquireActions\": [{\"action\": \"Gs2Stamina:RecoverStaminaByUserId\", \"request\": {\"namespaceName\": \"stamina-0001\", \"staminaName\": \"quest\", \"userId\": \"# {userId} \", \"recoverValue\": 100}}]}, {\"acquireActions\": [{\"action\": \"Gs2Stamina:RecoverStaminaByUserId\", \"request\": {\"namespaceName\": \"stamina-0001\", \"staminaName\": \"quest\", \"userId\": \"# {userId} \", \"recoverValue\": 100}}]}], \"missedReceiveRelief\": \"enabled\", \"missedReceiveReliefConsumeActions\": [{\"action\": \"Gs2Money:WithdrawByUserId\", \"request\": {\"namespaceName\": \"money-0001\", \"userId\": \"# {userId} \", \"slot\": 0, \"count\": 200, \"paidOnly\": false}}]}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.update_current_bonus_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-07-11 \\\" , \\\" bonusModels \\\" : [{ \\\" name \\\" : \\\" schedule \\\" , \\\" mode \\\" : \\\" schedule \\\" , \\\" periodEventId \\\" : \\\" grn:gs2:schedule:grn-0001 \\\" , \\\" rewards \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}], \\\" missedReceiveRelief \\\" : \\\" disabled \\\" }, { \\\" name \\\" : \\\" streaming \\\" , \\\" mode \\\" : \\\" streaming \\\" , \\\" resetHour \\\" : 15, \\\" repeat \\\" : \\\" enabled \\\" , \\\" rewards \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}], \\\" missedReceiveRelief \\\" : \\\" enabled \\\" , \\\" missedReceiveReliefConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}}]}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.update_current_bonus_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-07-11 \\\" , \\\" bonusModels \\\" : [{ \\\" name \\\" : \\\" schedule \\\" , \\\" mode \\\" : \\\" schedule \\\" , \\\" periodEventId \\\" : \\\" grn:gs2:schedule:grn-0001 \\\" , \\\" rewards \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}], \\\" missedReceiveRelief \\\" : \\\" disabled \\\" }, { \\\" name \\\" : \\\" streaming \\\" , \\\" mode \\\" : \\\" streaming \\\" , \\\" resetHour \\\" : 15, \\\" repeat \\\" : \\\" enabled \\\" , \\\" rewards \\\" : [{ \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}, { \\\" acquireActions \\\" : [{ \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" staminaName \\\" : \\\" quest \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" recoverValue \\\" : 100}}]}], \\\" missedReceiveRelief \\\" : \\\" enabled \\\" , \\\" missedReceiveReliefConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\\" request \\\" : { \\\" namespaceName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}}]}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentBonusMasterFromGitHub 현재 활성화된 로그인 보너스 모델의 마스터 데이터를 GitHub에서 갱신 지정된 GitHub 리포지토리에서 마스터 데이터를 취득하여, 현재 활성화된 로그인 보너스 모델의 마스터 데이터를 갱신합니다. GS2-Key 에 저장된 API 키가 인증에 사용되며, 체크아웃할 브랜치, 태그, 또는 커밋 해시를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentBonusMaster 갱신된 현재 활성화된 로그인 보너스 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentBonusMasterFromGitHub ( \u0026 login_reward . UpdateCurrentBonusMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 loginReward . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\UpdateCurrentBonusMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e updateCurrentBonusMasterFromGitHub ( ( new UpdateCurrentBonusMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.UpdateCurrentBonusMasterFromGitHubRequest ; import io.gs2.loginReward.result.UpdateCurrentBonusMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { UpdateCurrentBonusMasterFromGitHubResult result = client . updateCurrentBonusMasterFromGitHub ( new UpdateCurrentBonusMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentBonusMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . UpdateCurrentBonusMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentBonusMasterFromGitHub ( new Gs2 . Gs2LoginReward . Request . UpdateCurrentBonusMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2LoginReward . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . updateCurrentBonusMasterFromGitHub ( new Gs2LoginReward . UpdateCurrentBonusMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2LoginReward . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . update_current_bonus_master_from_git_hub ( login_reward . UpdateCurrentBonusMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( login_reward . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.update_current_bonus_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.update_current_bonus_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeBonusModelMasters 로그인 보너스 모델 마스터 목록 취득 지정된 네임스페이스의 로그인 보너스 모델 마스터의 페이지네이션 목록을 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 로그인 보너스 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 로그인 보너스 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DescribeBonusModelMasters ( \u0026 login_reward . DescribeBonusModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DescribeBonusModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e describeBonusModelMasters ( ( new DescribeBonusModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DescribeBonusModelMastersRequest ; import io.gs2.loginReward.result.DescribeBonusModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DescribeBonusModelMastersResult result = client . describeBonusModelMasters ( new DescribeBonusModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List BonusModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DescribeBonusModelMastersResult \u003e asyncResult = null ; yield return client . DescribeBonusModelMasters ( new Gs2 . Gs2LoginReward . Request . DescribeBonusModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . describeBonusModelMasters ( new Gs2LoginReward . DescribeBonusModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . describe_bonus_model_masters ( login_reward . DescribeBonusModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.describe_bonus_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'login_reward' ) api_result_handler = client.describe_bonus_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createBonusModelMaster 로그인 보너스 모델 마스터 신규 생성 지정된 설정으로 새로운 로그인 보너스 모델 마스터를 생성합니다. 모드는 CUMULATIVE(연속 일일 보너스) 또는 SCHEDULE(이벤트 기간 기반 보너스)을 지정할 수 있습니다. 리셋 시간, 반복 동작, 보상 시퀀스, 그리고 검증/소비 액션이 포함된 수령 놓침 구제를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 로그인 보너스 모델 이름 로그인 보너스 모델 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “schedule”,   “streaming” }  모드 로그인 보너스의 배포 스케줄 종류를 지정합니다. “schedule” 모드에서는 GS2-Schedule의 이벤트 시작일로부터 경과한 일수를 기준으로 보상이 배포됩니다. “streaming” 모드에서는 달력 날짜와 관계없이 매일 처음부터 순서대로 보상이 배포됩니다. 정의 설명 schedule 스케줄 모드 streaming 스트리밍 모드 periodEventId string ~ 1024자 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 로그인 보너스를 활성화할 기간을 나타내는 GS2-Schedule의 이벤트 GRN입니다. 스케줄 모드에서는 필수이며, 보상 배포의 경과 일수를 계산하는 기준이 되는 시작일을 결정합니다. 스트리밍 모드에서는 생략 가능하지만, 지정한 경우 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없게 됩니다. resetHour int {periodEventId} == \"” ※ 0 ~ 23 리셋 시간(UTC) 수령 플래그가 리셋되는 시각(0~23, UTC)입니다. 로그인 보너스에서 날짜가 바뀌는 시점을 결정합니다. periodEventId가 지정되지 않은 경우에만 필요합니다. 이벤트가 설정되어 있는 경우, 리셋 시점은 이벤트의 스케줄을 따릅니다. ※ periodEventId이(가) \"” 이면 필수 repeat 문자열 열거형 enum {   “enabled”,   “disabled” } {mode} == “streaming” ※ 반복 모든 보상을 배포한 후, 처음부터 다시 배포할지 여부입니다. 스트리밍 모드에서만 유효합니다. 활성화하면 마지막 보상을 배포한 후 첫 번째 보상으로 돌아가 반복됩니다. 주의: 반복이 활성화된 경우, 미수령 구제 기능은 사용할 수 없습니다. 정의 설명 enabled 활성화 disabled 비활성화 ※ mode이(가) “streaming” 이면 필수 rewards List 0 ~ 100 items 보상 목록 날짜별 보상의 순서가 지정된 목록입니다. 각 항목은 하루치 로그인 보너스에 대응하며, 인덱스 0부터 순서대로 배포됩니다. 스케줄 모드에서는 인덱스가 이벤트 시작일로부터 경과한 일수에 대응합니다. 스트리밍 모드에서는 인덱스가 로그인 일수에 대응합니다. 최대 100개 항목까지 설정할 수 있습니다. missedReceiveRelief 문자열 열거형 enum {   “enabled”,   “disabled” } “disabled” 미수령 구제 기능 놓친 보너스의 구제 기능을 활성화할지 여부입니다. 활성화하면 사용자는 지정된 비용(소비 액션)을 지불함으로써 받지 못한 보너스를 소급하여 수령할 수 있습니다. 필요에 따라 구제를 허용하기 전에 조건을 확인하는 검증 액션도 설정할 수 있습니다. 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 기본값은 “disabled\"입니다. 정의 설명 enabled 활성화 disabled 비활성화 missedReceiveReliefVerifyActions List {missedReceiveRelief} == “enabled” 0 ~ 10 items 미수령 구제 검증 액션 목록 미수령 구제를 허용하기 전에 실행되는 검증 액션의 목록입니다. 구제 처리 전에 사용자의 자격 등 전제 조건을 확인합니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 missedReceiveReliefConsumeActions List {missedReceiveRelief} == “enabled” 0 ~ 10 items 미수령 구제 소비 액션 목록 놓친 보너스를 구제하기 위해 사용자가 지불해야 하는 비용을 정의하는 소비 액션의 목록입니다. 예를 들어 게임 내 화폐나 아이템을 구제 비용으로 소비하도록 설정할 수 있습니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 Result 타입 설명 item BonusModelMaster 생성한 로그인 보너스 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . CreateBonusModelMaster ( \u0026 login_reward . CreateBonusModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"bonusModel-0001\" ), Description : nil , Metadata : nil , Mode : pointy . String ( \"schedule\" ), PeriodEventId : pointy . String ( \"grn:gs2:schedule:grn-0001\" ), ResetHour : nil , Repeat : nil , Rewards : [] loginReward . Reward { loginReward . Reward { AcquireActions : [] loginReward . AcquireAction { loginReward . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }, }, }, loginReward . Reward { AcquireActions : [] loginReward . AcquireAction { loginReward . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }, }, }, loginReward . Reward { AcquireActions : [] loginReward . AcquireAction { loginReward . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }, }, }, }, MissedReceiveRelief : pointy . String ( \"disabled\" ), MissedReceiveReliefVerifyActions : nil , MissedReceiveReliefConsumeActions : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\CreateBonusModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e createBonusModelMaster ( ( new CreateBonusModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"bonusModel-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withMode ( \"schedule\" ) -\u003e withPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) -\u003e withResetHour ( null ) -\u003e withRepeat ( null ) -\u003e withRewards ([ ( new \\Gs2\\LoginReward\\Model\\Reward ()) -\u003e withAcquireActions ([ ( new \\Gs2\\LoginReward\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" ), ]), ( new \\Gs2\\LoginReward\\Model\\Reward ()) -\u003e withAcquireActions ([ ( new \\Gs2\\LoginReward\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" ), ]), ( new \\Gs2\\LoginReward\\Model\\Reward ()) -\u003e withAcquireActions ([ ( new \\Gs2\\LoginReward\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" ), ]), ]) -\u003e withMissedReceiveRelief ( \"disabled\" ) -\u003e withMissedReceiveReliefVerifyActions ( null ) -\u003e withMissedReceiveReliefConsumeActions ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.CreateBonusModelMasterRequest ; import io.gs2.loginReward.result.CreateBonusModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { CreateBonusModelMasterResult result = client . createBonusModelMaster ( new CreateBonusModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"bonusModel-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMode ( \"schedule\" ) . withPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) . withResetHour ( null ) . withRepeat ( null ) . withRewards ( Arrays . asList ( new io . gs2 . loginReward . model . Reward () . withAcquireActions ( Arrays . asList ( new io . gs2 . loginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ) )), new io . gs2 . loginReward . model . Reward () . withAcquireActions ( Arrays . asList ( new io . gs2 . loginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ) )), new io . gs2 . loginReward . model . Reward () . withAcquireActions ( Arrays . asList ( new io . gs2 . loginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ) )) )) . withMissedReceiveRelief ( \"disabled\" ) . withMissedReceiveReliefVerifyActions ( null ) . withMissedReceiveReliefConsumeActions ( null ) ); BonusModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . CreateBonusModelMasterResult \u003e asyncResult = null ; yield return client . CreateBonusModelMaster ( new Gs2 . Gs2LoginReward . Request . CreateBonusModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"bonusModel-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithMode ( \"schedule\" ) . WithPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) . WithResetHour ( null ) . WithRepeat ( null ) . WithRewards ( new Gs2 . Gs2LoginReward . Model . Reward [] { new Gs2 . Gs2LoginReward . Model . Reward () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }), new Gs2 . Gs2LoginReward . Model . Reward () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }), new Gs2 . Gs2LoginReward . Model . Reward () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }), }) . WithMissedReceiveRelief ( \"disabled\" ) . WithMissedReceiveReliefVerifyActions ( null ) . WithMissedReceiveReliefConsumeActions ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . createBonusModelMaster ( new Gs2LoginReward . CreateBonusModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"bonusModel-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMode ( \"schedule\" ) . withPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) . withResetHour ( null ) . withRepeat ( null ) . withRewards ([ new Gs2LoginReward . model . Reward () . withAcquireActions ([ new Gs2LoginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), ]), new Gs2LoginReward . model . Reward () . withAcquireActions ([ new Gs2LoginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), ]), new Gs2LoginReward . model . Reward () . withAcquireActions ([ new Gs2LoginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), ]), ]) . withMissedReceiveRelief ( \"disabled\" ) . withMissedReceiveReliefVerifyActions ( null ) . withMissedReceiveReliefConsumeActions ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . create_bonus_model_master ( login_reward . CreateBonusModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'bonusModel-0001' ) . with_description ( None ) . with_metadata ( None ) . with_mode ( 'schedule' ) . with_period_event_id ( 'grn:gs2:schedule:grn-0001' ) . with_reset_hour ( None ) . with_repeat ( None ) . with_rewards ([ login_reward . Reward () . with_acquire_actions ([ login_reward . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"namespaceName\": \"stamina-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 100, \"paidOnly\": false}' ), ]), login_reward . Reward () . with_acquire_actions ([ login_reward . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"namespaceName\": \"stamina-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 100, \"paidOnly\": false}' ), ]), login_reward . Reward () . with_acquire_actions ([ login_reward . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"namespaceName\": \"stamina-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 100, \"paidOnly\": false}' ), ]), ]) . with_missed_receive_relief ( 'disabled' ) . with_missed_receive_relief_verify_actions ( None ) . with_missed_receive_relief_consume_actions ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.create_bonus_model_master ({ namespaceName = \"namespace-0001\" , name = \"bonusModel-0001\" , description = nil , metadata = nil , mode = \"schedule\" , periodEventId = \"grn:gs2:schedule:grn-0001\" , resetHour = nil , repeat = nil , rewards = { { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }, { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }, { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, } }, missedReceiveRelief = \"disabled\" , missedReceiveReliefVerifyActions = nil , missedReceiveReliefConsumeActions = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.create_bonus_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"bonusModel-0001\" , description = nil , metadata = nil , mode = \"schedule\" , periodEventId = \"grn:gs2:schedule:grn-0001\" , resetHour = nil , repeat = nil , rewards = { { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }, { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }, { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, } }, missedReceiveRelief = \"disabled\" , missedReceiveReliefVerifyActions = nil , missedReceiveReliefConsumeActions = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBonusModelMaster 로그인 보너스 모델 마스터 취득 지정된 로그인 보너스 모델 마스터의 모드, 리셋 타이밍, 반복 설정, 보상 목록, 수령 놓침 구제 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델 이름 로그인 보너스 모델 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item BonusModelMaster 로그인 보너스 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . GetBonusModelMaster ( \u0026 login_reward . GetBonusModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonusModel-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\GetBonusModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e getBonusModelMaster ( ( new GetBonusModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonusModel-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.GetBonusModelMasterRequest ; import io.gs2.loginReward.result.GetBonusModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { GetBonusModelMasterResult result = client . getBonusModelMaster ( new GetBonusModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonusModel-0001\" ) ); BonusModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . GetBonusModelMasterResult \u003e asyncResult = null ; yield return client . GetBonusModelMaster ( new Gs2 . Gs2LoginReward . Request . GetBonusModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonusModel-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . getBonusModelMaster ( new Gs2LoginReward . GetBonusModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonusModel-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . get_bonus_model_master ( login_reward . GetBonusModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonusModel-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.get_bonus_model_master ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonusModel-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.get_bonus_model_master_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonusModel-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateBonusModelMaster 로그인 보너스 모델 마스터 갱신 지정된 로그인 보너스 모델 마스터를 갱신합니다. 설명, 메타데이터, 모드, 리셋 타이밍, 반복 설정, 보상 시퀀스, 수령 놓침 구제 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델 이름 로그인 보너스 모델 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “schedule”,   “streaming” }  모드 로그인 보너스의 배포 스케줄 종류를 지정합니다. “schedule” 모드에서는 GS2-Schedule의 이벤트 시작일로부터 경과한 일수를 기준으로 보상이 배포됩니다. “streaming” 모드에서는 달력 날짜와 관계없이 매일 처음부터 순서대로 보상이 배포됩니다. 정의 설명 schedule 스케줄 모드 streaming 스트리밍 모드 periodEventId string ~ 1024자 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 로그인 보너스를 활성화할 기간을 나타내는 GS2-Schedule의 이벤트 GRN입니다. 스케줄 모드에서는 필수이며, 보상 배포의 경과 일수를 계산하는 기준이 되는 시작일을 결정합니다. 스트리밍 모드에서는 생략 가능하지만, 지정한 경우 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없게 됩니다. resetHour int {periodEventId} == \"” ※ 0 ~ 23 리셋 시간(UTC) 수령 플래그가 리셋되는 시각(0~23, UTC)입니다. 로그인 보너스에서 날짜가 바뀌는 시점을 결정합니다. periodEventId가 지정되지 않은 경우에만 필요합니다. 이벤트가 설정되어 있는 경우, 리셋 시점은 이벤트의 스케줄을 따릅니다. ※ periodEventId이(가) \"” 이면 필수 repeat 문자열 열거형 enum {   “enabled”,   “disabled” } {mode} == “streaming” ※ 반복 모든 보상을 배포한 후, 처음부터 다시 배포할지 여부입니다. 스트리밍 모드에서만 유효합니다. 활성화하면 마지막 보상을 배포한 후 첫 번째 보상으로 돌아가 반복됩니다. 주의: 반복이 활성화된 경우, 미수령 구제 기능은 사용할 수 없습니다. 정의 설명 enabled 활성화 disabled 비활성화 ※ mode이(가) “streaming” 이면 필수 rewards List 0 ~ 100 items 보상 목록 날짜별 보상의 순서가 지정된 목록입니다. 각 항목은 하루치 로그인 보너스에 대응하며, 인덱스 0부터 순서대로 배포됩니다. 스케줄 모드에서는 인덱스가 이벤트 시작일로부터 경과한 일수에 대응합니다. 스트리밍 모드에서는 인덱스가 로그인 일수에 대응합니다. 최대 100개 항목까지 설정할 수 있습니다. missedReceiveRelief 문자열 열거형 enum {   “enabled”,   “disabled” } “disabled” 미수령 구제 기능 놓친 보너스의 구제 기능을 활성화할지 여부입니다. 활성화하면 사용자는 지정된 비용(소비 액션)을 지불함으로써 받지 못한 보너스를 소급하여 수령할 수 있습니다. 필요에 따라 구제를 허용하기 전에 조건을 확인하는 검증 액션도 설정할 수 있습니다. 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 기본값은 “disabled\"입니다. 정의 설명 enabled 활성화 disabled 비활성화 missedReceiveReliefVerifyActions List {missedReceiveRelief} == “enabled” 0 ~ 10 items 미수령 구제 검증 액션 목록 미수령 구제를 허용하기 전에 실행되는 검증 액션의 목록입니다. 구제 처리 전에 사용자의 자격 등 전제 조건을 확인합니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 missedReceiveReliefConsumeActions List {missedReceiveRelief} == “enabled” 0 ~ 10 items 미수령 구제 소비 액션 목록 놓친 보너스를 구제하기 위해 사용자가 지불해야 하는 비용을 정의하는 소비 액션의 목록입니다. 예를 들어 게임 내 화폐나 아이템을 구제 비용으로 소비하도록 설정할 수 있습니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 Result 타입 설명 item BonusModelMaster 갱신한 로그인 보너스 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . UpdateBonusModelMaster ( \u0026 login_reward . UpdateBonusModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonusModel-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , Mode : pointy . String ( \"streaming\" ), PeriodEventId : pointy . String ( \"grn:gs2:schedule:grn-0001\" ), ResetHour : nil , Repeat : pointy . String ( \"disabled\" ), Rewards : [] loginReward . Reward { loginReward . Reward { AcquireActions : [] loginReward . AcquireAction { loginReward . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }, }, }, loginReward . Reward { AcquireActions : [] loginReward . AcquireAction { loginReward . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }, }, }, loginReward . Reward { AcquireActions : [] loginReward . AcquireAction { loginReward . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }, }, }, }, MissedReceiveRelief : pointy . String ( \"enabled\" ), MissedReceiveReliefVerifyActions : nil , MissedReceiveReliefConsumeActions : [] loginReward . ConsumeAction { loginReward . ConsumeAction { Action : pointy . String ( \"Gs2Money:WithdrawByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\UpdateBonusModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e updateBonusModelMaster ( ( new UpdateBonusModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonusModel-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withMode ( \"streaming\" ) -\u003e withPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) -\u003e withResetHour ( null ) -\u003e withRepeat ( \"disabled\" ) -\u003e withRewards ([ ( new \\Gs2\\LoginReward\\Model\\Reward ()) -\u003e withAcquireActions ([ ( new \\Gs2\\LoginReward\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" ), ]), ( new \\Gs2\\LoginReward\\Model\\Reward ()) -\u003e withAcquireActions ([ ( new \\Gs2\\LoginReward\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" ), ]), ( new \\Gs2\\LoginReward\\Model\\Reward ()) -\u003e withAcquireActions ([ ( new \\Gs2\\LoginReward\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" ), ]), ]) -\u003e withMissedReceiveRelief ( \"enabled\" ) -\u003e withMissedReceiveReliefVerifyActions ( null ) -\u003e withMissedReceiveReliefConsumeActions ([ ( new \\Gs2\\LoginReward\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Money:WithdrawByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.UpdateBonusModelMasterRequest ; import io.gs2.loginReward.result.UpdateBonusModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { UpdateBonusModelMasterResult result = client . updateBonusModelMaster ( new UpdateBonusModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonusModel-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withMode ( \"streaming\" ) . withPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) . withResetHour ( null ) . withRepeat ( \"disabled\" ) . withRewards ( Arrays . asList ( new io . gs2 . loginReward . model . Reward () . withAcquireActions ( Arrays . asList ( new io . gs2 . loginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ) )), new io . gs2 . loginReward . model . Reward () . withAcquireActions ( Arrays . asList ( new io . gs2 . loginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ) )), new io . gs2 . loginReward . model . Reward () . withAcquireActions ( Arrays . asList ( new io . gs2 . loginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ) )) )) . withMissedReceiveRelief ( \"enabled\" ) . withMissedReceiveReliefVerifyActions ( null ) . withMissedReceiveReliefConsumeActions ( Arrays . asList ( new io . gs2 . loginReward . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ) )) ); BonusModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . UpdateBonusModelMasterResult \u003e asyncResult = null ; yield return client . UpdateBonusModelMaster ( new Gs2 . Gs2LoginReward . Request . UpdateBonusModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonusModel-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithMode ( \"streaming\" ) . WithPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) . WithResetHour ( null ) . WithRepeat ( \"disabled\" ) . WithRewards ( new Gs2 . Gs2LoginReward . Model . Reward [] { new Gs2 . Gs2LoginReward . Model . Reward () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }), new Gs2 . Gs2LoginReward . Model . Reward () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }), new Gs2 . Gs2LoginReward . Model . Reward () . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }), }) . WithMissedReceiveRelief ( \"enabled\" ) . WithMissedReceiveReliefVerifyActions ( null ) . WithMissedReceiveReliefConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Money:WithdrawByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . updateBonusModelMaster ( new Gs2LoginReward . UpdateBonusModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonusModel-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withMode ( \"streaming\" ) . withPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) . withResetHour ( null ) . withRepeat ( \"disabled\" ) . withRewards ([ new Gs2LoginReward . model . Reward () . withAcquireActions ([ new Gs2LoginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), ]), new Gs2LoginReward . model . Reward () . withAcquireActions ([ new Gs2LoginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), ]), new Gs2LoginReward . model . Reward () . withAcquireActions ([ new Gs2LoginReward . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), ]), ]) . withMissedReceiveRelief ( \"enabled\" ) . withMissedReceiveReliefVerifyActions ( null ) . withMissedReceiveReliefConsumeActions ([ new Gs2LoginReward . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"stamina-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . update_bonus_model_master ( login_reward . UpdateBonusModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonusModel-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_mode ( 'streaming' ) . with_period_event_id ( 'grn:gs2:schedule:grn-0001' ) . with_reset_hour ( None ) . with_repeat ( 'disabled' ) . with_rewards ([ login_reward . Reward () . with_acquire_actions ([ login_reward . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"namespaceName\": \"stamina-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 100, \"paidOnly\": false}' ), ]), login_reward . Reward () . with_acquire_actions ([ login_reward . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"namespaceName\": \"stamina-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 100, \"paidOnly\": false}' ), ]), login_reward . Reward () . with_acquire_actions ([ login_reward . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"namespaceName\": \"stamina-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 100, \"paidOnly\": false}' ), ]), ]) . with_missed_receive_relief ( 'enabled' ) . with_missed_receive_relief_verify_actions ( None ) . with_missed_receive_relief_consume_actions ([ login_reward . ConsumeAction () . with_action ( 'Gs2Money:WithdrawByUserId' ) . with_request ( '{\"namespaceName\": \"stamina-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 200, \"paidOnly\": false}' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.update_bonus_model_master ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonusModel-0001\" , description = \"description1\" , metadata = nil , mode = \"streaming\" , periodEventId = \"grn:gs2:schedule:grn-0001\" , resetHour = nil , repeat = \"disabled\" , rewards = { { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }, { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }, { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, } }, missedReceiveRelief = \"enabled\" , missedReceiveReliefVerifyActions = nil , missedReceiveReliefConsumeActions = { { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.update_bonus_model_master_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonusModel-0001\" , description = \"description1\" , metadata = nil , mode = \"streaming\" , periodEventId = \"grn:gs2:schedule:grn-0001\" , resetHour = nil , repeat = \"disabled\" , rewards = { { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }, { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }, { acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, } }, missedReceiveRelief = \"enabled\" , missedReceiveReliefVerifyActions = nil , missedReceiveReliefConsumeActions = { { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" stamina-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteBonusModelMaster 로그인 보너스 모델 마스터 삭제 지정된 로그인 보너스 모델 마스터를 삭제합니다. 다음 마스터 데이터 갱신까지 현재 활성화된 마스터 데이터에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 로그인 보너스 모델 이름 로그인 보너스 모델 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item BonusModelMaster 삭제한 로그인 보너스 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/loginReward\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := login_reward . Gs2LoginRewardRestClient { Session : \u0026 session , } result , err := client . DeleteBonusModelMaster ( \u0026 login_reward . DeleteBonusModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BonusModelName : pointy . String ( \"bonusModel-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\LoginReward\\Gs2LoginRewardRestClient ; use Gs2\\LoginReward\\Request\\DeleteBonusModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LoginRewardRestClient ( $session ); try { $result = $client -\u003e deleteBonusModelMaster ( ( new DeleteBonusModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBonusModelName ( \"bonusModel-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.loginReward.rest.Gs2LoginRewardRestClient ; import io.gs2.loginReward.request.DeleteBonusModelMasterRequest ; import io.gs2.loginReward.result.DeleteBonusModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LoginRewardRestClient client = new Gs2LoginRewardRestClient ( session ); try { DeleteBonusModelMasterResult result = client . deleteBonusModelMaster ( new DeleteBonusModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonusModel-0001\" ) ); BonusModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LoginRewardRestClient ( session ); AsyncResult Gs2 . Gs2LoginReward . Result . DeleteBonusModelMasterResult \u003e asyncResult = null ; yield return client . DeleteBonusModelMaster ( new Gs2 . Gs2LoginReward . Request . DeleteBonusModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBonusModelName ( \"bonusModel-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2LoginReward from '@/gs2/loginReward' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2LoginReward . Gs2LoginRewardRestClient ( session ); try { const result = await client . deleteBonusModelMaster ( new Gs2LoginReward . DeleteBonusModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withBonusModelName ( \"bonusModel-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import login_reward session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = login_reward . Gs2LoginRewardRestClient ( session ) try : result = client . delete_bonus_model_master ( login_reward . DeleteBonusModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_bonus_model_name ( 'bonusModel-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'login_reward' ) api_result = client.delete_bonus_model_master ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonusModel-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'login_reward' ) api_result_handler = client.delete_bonus_model_master_async ({ namespaceName = \"namespace-0001\" , bonusModelName = \"bonusModel-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-LoginReward SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-LoginReward SDK API 레퍼런스","url":"/ko/api_reference/login_reward/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 추첨 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. 추첨에서는 입수 액션을 통해 사용자에게 경품을 지급하는 트랜잭션이 발행됩니다. lotteryTriggerScriptId string ~ 1024자 추첨을 실행했을 때 호출되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - lottery logSetting LogSetting 로그 출력 설정 추첨 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그 및 분석을 위해 추첨 결과, 경품 배포, 박스 가챠 상태 추적에 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 PrizeTable 배출 확률 테이블 경품에는 입수 액션을 직접 지정하거나, 다른 배출 확률 테이블을 참조하도록 설정할 수도 있습니다. 배출 확률 테이블을 중첩시키면, 예를 들어 1단계에서 SSR / SR / R 등의 레어도를 추첨하고, 2단계에서 해당 레어도에 대응하는 구체적인 콘텐츠를 추첨하는 등의 설정이 가능합니다. 이 구조를 통해 게임 전체의 레어도별 배출 확률을 관리하고 조정하기가 더 쉬워집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 prizeTableId string ※ ~ 1024자 배출 확률 테이블 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. prizes List  1 ~ 100 items 경품 리스트 이 배출 확률 테이블 내의 경품 리스트입니다. 각 경품은 배출 가중치(확률), 배출 시 실행할 액션, 그리고 선택적으로 배출 횟수 제한을 정의합니다. 각 경품의 실제 배출 확률은 해당 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다. Probability 배출 확률 특정 경품의 산출된 배출 확률을 나타냅니다. 확률은 배출 확률 테이블 내 전체 경품 가중치의 합에 대한 이 경품의 가중치로 계산됩니다. 박스 가챠의 경우, 경품이 박스에서 배출됨에 따라 확률이 동적으로 변화합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 prize DrawnPrize  경품 이 확률이 대응하는 경품으로, ID와 입수 액션을 포함합니다. rate float  0 ~ 1.0 배출 확률 (0.0~1.0) 이 경품이 배출될 확률로, 0.0에서 1.0 사이의 값으로 표현됩니다. 이 경품의 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다. PrizeLimit 배출 횟수 제한 특정 경품이 전체 사용자를 통틀어 배출된 횟수를 추적합니다. 배출 횟수가 Prize의 drawnLimit에 정의된 최댓값에 도달하면, 대신 페일오버 경품이 배출됩니다. 희귀한 잭팟 아이템 등 수량 한정 경품을 구현하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 prizeLimitId string ※ ~ 1024자 배출 횟수 제한 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 prizeId string  ~ 36자 경품 ID 배출 횟수가 추적되고 있는 경품의 ID입니다. drawnCount int  0 ~ 2147483646 배출 횟수 이 경품이 전체 사용자를 통틀어 배출된 현재 횟수입니다. 페일오버 경품을 사용해야 하는지를 판단하기 위해 Prize의 drawnLimit과 비교됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 DrawnPrize 배출된 경품 추첨으로 배출된 경품을 나타냅니다. 경품 ID와 사용자에게 경품을 지급하기 위해 실행된 입수 액션을 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 prizeId string  ~ 36자 경품 ID 배출된 경품의 ID로, 배출 확률 테이블 내 경품 항목에 대응합니다. acquireActions List 0 ~ 100 items 입수 액션 리스트 이 경품을 사용자에게 지급하기 위해 실행된 입수 액션의 리스트입니다. BoxItems 박스 아이템 리스트 특정 사용자와 배출 확률 테이블에 대한 박스 가챠의 상태를 기록합니다. 박스 내 모든 경품과 그 잔여 수량·초기 수량의 리스트를 포함하여, 어떤 경품이 배출되었고 어떤 경품이 남아있는지 사용자가 확인할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 boxId string ※ ~ 1024자 박스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 prizeTableName string  ~ 128자 배출 확률 테이블 이름 이 박스와 연결된 배출 확률 테이블의 이름입니다. 이 레코드가 어느 박스 가챠에 속하는지를 식별합니다. userId string  ~ 128자 사용자ID items List [] 0 ~ 1000 items 아이템 리스트 박스 내 모든 경품과 그 잔여 수량·초기 수량의 리스트입니다. 각 아이템은 해당 경품이 처음 박스에 몇 개 있었는지, 몇 개 남아있는지를 나타내며, 박스 가챠의 추첨 진행 상황을 추적할 수 있게 합니다. LotteryModel 추첨 모델 추첨 모델은 배출 방식과 배출 테이블의 참조 방법을 정의하는 엔티티입니다. 배출 방식은 2종류가 마련되어 있으며, 일반 추첨은 매번 일정한 확률로 추첨하는 방식이고, 박스 추첨은 상자 안에 미리 정해진 수량의 경품이 들어 있어 추첨할 때마다 상자에서 경품을 꺼내는 추첨 방식입니다. 추첨 처리를 수행할 때 배출 확률 테이블을 사용하는데, GS2-Script를 사용하면 여러 번 추첨을 실행할 때 배출 확률 테이블 일부만 다른 테이블로 교체할 수 있습니다. 이 구조를 이용하면 10연 가챠에서 1회만 다른 추첨 확률 테이블을 적용하는 것이 가능해집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 lotteryModelId string ※ ~ 1024자 추첨 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “normal”,   “box” }  추첨 모드 경품의 추첨 방식을 선택합니다. “normal\"은 매번 일정한 확률로 추첨을 진행합니다(경품은 반복해서 배출됩니다). “box\"는 가상의 상자에 미리 정해진 수량의 경품을 넣어두고, 추첨할 때마다 상자에서 경품을 꺼냅니다(모든 경품이 최종적으로 배출되는 것이 보장됩니다). 정의 설명 normal 일반 추첨 box 박스 추첨 method 문자열 열거형 enum {   “prize_table”,   “script” }  추첨 방법 배출 확률 테이블의 참조 방법을 결정합니다. “prize_table\"은 정적으로 지정된 배출 확률 테이블을 사용합니다. “script\"는 GS2-Script를 사용하여 추첨 시점에 배출 확률 테이블을 동적으로 선택하며, 10연 가챠에서 1회만 다른 배출 확률 테이블을 적용하는 등의 시나리오를 실현할 수 있습니다. 정의 설명 prize_table 정적 배출 확률 테이블 script GS2-Script를 사용한 동적 배출 확률 테이블 prizeTableName string {method} == “prize_table” ※ ~ 128자 배출 확률 테이블 이름 이 추첨 모델에서 사용할 배출 확률 테이블의 이름입니다. 추첨 방법이 “prize_table\"인 경우 필수입니다. ※ method이(가) “prize_table” 이면 필수 choicePrizeTableScriptId string {method} == “script” ※ ~ 1024자 배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - choicePrizeTable ※ method이(가) “script” 이면 필수 Prize 경품 배출 확률 테이블 내 단일 경품 엔트리입니다. 경품은 입수 액션(아이템이나 통화의 부여 등)을 직접 지정하거나, 다른 배출 확률 테이블을 참조하여 중첩된 추첨을 수행할 수 있습니다. 각 경품에는 배출 가중치가 있으며, 배출되는 상대적 확률을 결정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 prizeId string  UUID ~ 36자 경품 ID 배출 확률 테이블 내에서 이 경품을 고유하게 식별하는 ID입니다. 배출 횟수 제한 추적 및 페일오버 경품 지정 시 참조에 사용됩니다. type 문자열 열거형 enum {   “action”,   “prize_table” }  경품 종류 이 경품이 직접 보상을 부여하는지, 다른 배출 확률 테이블에 위임하는지를 결정합니다. “action\"은 배출 시 실행할 입수 액션을 지정합니다. “prize_table\"은 다른 배출 확률 테이블을 참조하여 중첩된 추첨을 수행합니다(예: 1단계에서 희귀도를 결정하고, 2단계에서 구체적인 아이템을 결정). 정의 설명 action 경품의 입수 액션 prize_table 더욱 배출 확률 테이블을 지정하여 재추첨 acquireActions List {type} == “action” [] 1 ~ 100 items 입수 액션 리스트 이 경품이 배출될 때 실행할 입수 액션의 리스트입니다. 여러 액션을 지정하여 한 번에 여러 보상을 부여할 수 있습니다(예: 아이템과 통화를 동시에 부여). ※ type이(가) “action” 이면 활성화 drawnLimit int {type} == “action” 1 ~ 1000000 최대 배출 수 이 경품이 전체 사용자를 통틀어 배출될 수 있는 최대 횟수입니다. 제한에 도달하면 대신 페일오버 경품(limitFailOverPrizeId)이 배출됩니다. 잭팟 아이템 등 수량 한정 경품 구현에 사용됩니다. ※ type이(가) “action” 이면 활성화 limitFailOverPrizeId string {type} == “action” and {drawnLimit} \u003e 0 ※ ~ 32자 제한 시 페일오버 경품 ID 이 경품의 배출 횟수 제한(drawnLimit)에 도달했을 때 대신 배출할 경품의 ID입니다. 동일한 배출 확률 테이블 내의 다른 경품을 참조해야 합니다. ※ type이(가) “action\"이고 drawnLimit이(가) 0 보다 크면 필수 prizeTableName string {type} == “prize_table” ※ ~ 128자 배출 확률 테이블의 이름 추첨을 위임할 배출 확률 테이블의 이름입니다. 경품 타입이 “prize_table\"인 경우 중첩된 추첨에 사용됩니다. ※ type이(가) “prize_table” 이면 필수 weight int  1 ~ 2147483646 배출 가중치 배출 확률 테이블 내에서 이 경품의 상대적 가중치입니다. 실제 배출 확률은 이 경품의 가중치를 테이블 내 모든 경품의 가중치 합계로 나누어 산출됩니다. 예를 들어 3개의 경품의 가중치가 각각 70, 20, 10이라면 각각의 배출 확률은 70%, 20%, 10%가 됩니다. BoxItem 박스 아이템 박스 가챠 내 단일 경품 유형을 나타내며, 박스 내 초기 수량, 잔여 수량, 그리고 배출 시 실행되는 입수 액션을 나타냅니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 prizeId string  ~ 128자 경품 ID 이 박스 아이템이 대응하는 배출 확률 테이블 내 경품 ID입니다. acquireActions List [] 0 ~ 100 items 입수 액션 리스트 이 경품이 박스에서 배출되었을 때 실행할 입수 액션의 리스트입니다. remaining int  0 ~ 2147483646 잔여 수량 박스 내에 남아있는 이 경품의 수입니다. 이 경품이 배출될 때마다 1개씩 감소합니다. initial int  0 ~ 2147483646 초기 수량 처음 박스에 담긴 이 경품의 수입니다. 잔여 수량과 함께 얼마나 배출되었는지를 계산하는 데 사용됩니다. AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentLotteryMaster 현재 활성화된 추첨 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 추첨 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Lottery 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 LotteryModelMaster 추첨 모델 마스터 추첨 모델 마스터는 게임 내에서 사용되는 추첨 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 임시로 저장됩니다. 임포트·갱신 처리를 수행함으로써 실제로 게임에서 참조되는 추첨 모델로 반영됩니다. 추첨 모델은 배출 방식과 배출 테이블 참조 방법을 정의하는 엔티티입니다. 배출 방식은 2종류가 준비되어 있으며, 일반 추첨은 매번 일정한 확률로 추첨하는 방식이고, Box 추첨은 상자 안에 미리 정의된 수량의 경품이 들어 있어 추첨할 때마다 상자에서 경품을 꺼내는 추첨 방식입니다. 추첨 처리를 수행할 때 배출 확률 테이블을 이용하는데, GS2-Script를 사용하면 여러 번 추첨을 실행할 때 배출 확률 테이블을 일부만 다른 테이블로 교체할 수 있습니다. 이 구조를 이용하면 10연 가챠에서 1회만 다른 추첨 확률 테이블을 적용하는 것이 가능해집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 lotteryModelId string ※ ~ 1024자 추첨 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 추첨 모델 이름 추첨 모델 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 mode 문자열 열거형 enum {   “normal”,   “box” }  추첨 모드 경품의 추첨 방식을 선택합니다. “normal\"은 매번 일정한 확률로 추첨을 진행합니다(경품은 반복해서 배출됩니다). “box\"는 가상의 상자에 미리 정해진 수량의 경품을 넣어두고, 추첨할 때마다 상자에서 경품을 꺼냅니다(모든 경품이 최종적으로 배출되는 것이 보장됩니다). 정의 설명 normal 일반 추첨 box 박스 추첨 method 문자열 열거형 enum {   “prize_table”,   “script” }  추첨 방법 배출 확률 테이블의 참조 방법을 결정합니다. “prize_table\"은 정적으로 지정된 배출 확률 테이블을 사용합니다. “script\"는 GS2-Script를 사용하여 추첨 시점에 배출 확률 테이블을 동적으로 선택하며, 10연 가챠에서 1회만 다른 배출 확률 테이블을 적용하는 등의 시나리오를 구현할 수 있습니다. 정의 설명 prize_table 정적 배출 확률 테이블 script GS2-Script를 사용한 동적 배출 확률 테이블 prizeTableName string {method} == “prize_table” ※ ~ 128자 배출 확률 테이블 이름 이 추첨 모델에서 사용할 배출 확률 테이블의 이름입니다. 추첨 방법이 “prize_table\"인 경우 필수입니다. ※ method이(가) “prize_table” 이면 필수 choicePrizeTableScriptId string {method} == “script” ※ ~ 1024자 배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - choicePrizeTable ※ method이(가) “script” 이면 필수 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 PrizeTableMaster 배출 확률 테이블 마스터 배출 확률 테이블 마스터는 게임 내에서 사용되는 배출 확률 테이블의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행하면 실제로 게임에서 참조하는 배출 확률 테이블로 반영됩니다. 경품에는 입수 액션을 직접 지정하거나, 다른 배출 확률 테이블을 참조하도록 설정할 수도 있습니다. 배출 확률 테이블을 중첩시키면, 예를 들어 1단계에서 SSR / SR / R 등의 레어도를 추첨하고, 2단계에서 해당 레어도에 대응하는 구체적인 콘텐츠를 추첨하는 등의 설정이 가능합니다. 이 구조를 통해 게임 전체의 레어도별 배출 확률을 관리하고 조정하기가 더 쉬워집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 prizeTableId string ※ ~ 1024자 배출 확률 테이블 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 prizes List  1 ~ 100 items 경품 리스트 이 배출 확률 테이블 내의 경품 리스트입니다. 각 경품은 배출 가중치(확률), 배출 시 실행할 액션, 그리고 선택적으로 배출 횟수 제한을 정의합니다. 각 경품의 실제 배출 확률은 해당 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 lottery . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribeNamespacesRequest ; import io.gs2.lottery.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Lottery . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Lottery . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_namespaces ( lottery . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 추첨 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. 추첨에서는 입수 액션을 통해 사용자에게 경품을 지급하는 트랜잭션이 발행됩니다. lotteryTriggerScriptId string ~ 1024자 추첨을 실행했을 때 호출되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - lottery logSetting LogSetting 로그 출력 설정 추첨 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그 및 분석을 위해 추첨 결과, 경품 배포, 박스 가챠 상태 추적에 유용합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 lottery . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 lottery . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, LotteryTriggerScriptId : nil , LogSetting : \u0026 lottery . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Lottery\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withLotteryTriggerScriptId ( null ) -\u003e withLogSetting (( new \\Gs2\\Lottery\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.CreateNamespaceRequest ; import io.gs2.lottery.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . lottery . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withLotteryTriggerScriptId ( null ) . withLogSetting ( new io . gs2 . lottery . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Lottery . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Lottery . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithLotteryTriggerScriptId ( null ) . WithLogSetting ( new Gs2 . Gs2Lottery . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Lottery . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Lottery . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withLotteryTriggerScriptId ( null ) . withLogSetting ( new Gs2Lottery . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . create_namespace ( lottery . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( lottery . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_lottery_trigger_script_id ( None ) . with_log_setting ( lottery . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, lotteryTriggerScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, lotteryTriggerScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 lottery . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetNamespaceStatusRequest ; import io.gs2.lottery.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Lottery . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Lottery . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_namespace_status ( lottery . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'lottery' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 lottery . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetNamespaceRequest ; import io.gs2.lottery.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Lottery . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Lottery . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_namespace ( lottery . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 추첨 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. 추첨에서는 입수 액션을 통해 사용자에게 경품을 지급하는 트랜잭션이 발행됩니다. lotteryTriggerScriptId string ~ 1024자 추첨을 실행했을 때 호출되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - lottery logSetting LogSetting 로그 출력 설정 추첨 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그 및 분석을 위해 추첨 결과, 경품 배포, 박스 가챠 상태 추적에 유용합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 lottery . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 lottery . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, LotteryTriggerScriptId : nil , LogSetting : \u0026 lottery . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Lottery\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withLotteryTriggerScriptId ( null ) -\u003e withLogSetting (( new \\Gs2\\Lottery\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.UpdateNamespaceRequest ; import io.gs2.lottery.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . lottery . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withLotteryTriggerScriptId ( null ) . withLogSetting ( new io . gs2 . lottery . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Lottery . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Lottery . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithLotteryTriggerScriptId ( null ) . WithLogSetting ( new Gs2 . Gs2Lottery . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Lottery . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Lottery . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withLotteryTriggerScriptId ( null ) . withLogSetting ( new Gs2Lottery . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . update_namespace ( lottery . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( lottery . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_lottery_trigger_script_id ( None ) . with_log_setting ( lottery . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, lotteryTriggerScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, lotteryTriggerScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 lottery . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DeleteNamespaceRequest ; import io.gs2.lottery.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Lottery . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Lottery . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . delete_namespace ( lottery . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 lottery . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetServiceVersionRequest ; import io.gs2.lottery.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Lottery . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Lottery . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_service_version ( lottery . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 lottery . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DumpUserDataByUserIdRequest ; import io.gs2.lottery.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Lottery . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Lottery . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . dump_user_data_by_user_id ( lottery . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'lottery' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 lottery . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.lottery.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Lottery . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Lottery . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( lottery . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'lottery' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 lottery . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.CleanUserDataByUserIdRequest ; import io.gs2.lottery.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Lottery . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Lottery . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . clean_user_data_by_user_id ( lottery . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'lottery' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 lottery . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.lottery.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Lottery . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Lottery . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( lottery . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'lottery' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 lottery . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.lottery.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Lottery . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Lottery . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( lottery . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'lottery' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 lottery . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.ImportUserDataByUserIdRequest ; import io.gs2.lottery.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Lottery . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Lottery . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . import_user_data_by_user_id ( lottery . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'lottery' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 lottery . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.CheckImportUserDataByUserIdRequest ; import io.gs2.lottery.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Lottery . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Lottery . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( lottery . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'lottery' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describePrizeTables 배출 확률 테이블 목록을 취득 지정한 네임스페이스의 현재 활성화된 배출 확률 테이블 목록을 취득합니다. 배출 확률 테이블은 추첨 모델이 사용하는 경품과 그 배출 확률 또는 가중치를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 배출 확률 테이블 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribePrizeTables ( \u0026 lottery . DescribePrizeTablesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribePrizeTablesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describePrizeTables ( ( new DescribePrizeTablesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribePrizeTablesRequest ; import io.gs2.lottery.result.DescribePrizeTablesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribePrizeTablesResult result = client . describePrizeTables ( new DescribePrizeTablesRequest () . withNamespaceName ( \"namespace-0001\" ) ); List PrizeTable \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribePrizeTablesResult \u003e asyncResult = null ; yield return client . DescribePrizeTables ( new Gs2 . Gs2Lottery . Request . DescribePrizeTablesRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describePrizeTables ( new Gs2Lottery . DescribePrizeTablesRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_prize_tables ( lottery . DescribePrizeTablesRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_prize_tables ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_prize_tables_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getPrizeTable 배출 확률 테이블을 취득 지정한 배출 확률 테이블의 경품 리스트, 배출 확률, 가중치, 수량 제한을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item PrizeTable 배출 확률 테이블 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetPrizeTable ( \u0026 lottery . GetPrizeTableRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetPrizeTableRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getPrizeTable ( ( new GetPrizeTableRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetPrizeTableRequest ; import io.gs2.lottery.result.GetPrizeTableResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetPrizeTableResult result = client . getPrizeTable ( new GetPrizeTableRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) ); PrizeTable item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetPrizeTableResult \u003e asyncResult = null ; yield return client . GetPrizeTable ( new Gs2 . Gs2Lottery . Request . GetPrizeTableRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getPrizeTable ( new Gs2Lottery . GetPrizeTableRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_prize_table ( lottery . GetPrizeTableRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_prize_table ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_prize_table_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; drawByUserId 사용자 ID를 지정하여 추첨을 실행 추첨 모델의 설정에 따라 지정한 사용자의 추첨을 실행합니다. 추첨은 두 가지 방식을 지원합니다: 배출 확률 테이블 모드(사전에 정의된 확률 테이블 사용)와 스크립트 모드(GS2-Script로 경품을 결정). 박스 추첨 모드에서는 배출된 경품이 박스에서 삭제되어 다시 배출되지 않습니다. 박스가 비어 있는 경우 Empty 오류가 반환됩니다. 배출된 경품은 트랜잭션으로 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID count int  1 ~ 1000 추첨 횟수 config List [] 0 ~ 1000 items 트랜잭션의 플레이스홀더에 적용하는 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 추첨 결과 경품 리스트 boxItems BoxItems 박스에서 꺼낸 아이템 리스트 transactionId string 발행된 트랜잭션 ID stampSheet string 배출된 경품을 획득하기 위한 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DrawByUserId ( \u0026 lottery . DrawByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lottery-0001\" ), UserId : pointy . String ( \"user-0001\" ), Count : pointy . Int32 ( 1 ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items boxItems := result . BoxItems transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DrawByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e drawByUserId ( ( new DrawByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lottery-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCount ( 1 ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $boxItems = $result -\u003e getBoxItems (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DrawByUserIdRequest ; import io.gs2.lottery.result.DrawByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DrawByUserIdResult result = client . drawByUserId ( new DrawByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); List DrawnPrize \u003e items = result . getItems (); BoxItems boxItems = result . getBoxItems (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DrawByUserIdResult \u003e asyncResult = null ; yield return client . DrawByUserId ( new Gs2 . Gs2Lottery . Request . DrawByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lottery-0001\" ) . WithUserId ( \"user-0001\" ) . WithCount ( 1 ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var boxItems = result . BoxItems ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . drawByUserId ( new Gs2Lottery . DrawByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const boxItems = result . getBoxItems (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . draw_by_user_id ( lottery . DrawByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lottery-0001' ) . with_user_id ( 'user-0001' ) . with_count ( 1 ) . with_config ( None ) . with_time_offset_token ( None ) ) items = result . items box_items = result . box_items transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.draw_by_user_id ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , userId = \"user-0001\" , count = 1 , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; boxItems = result.boxItems ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'lottery' ) api_result_handler = client.draw_by_user_id_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , userId = \"user-0001\" , count = 1 , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; boxItems = result.boxItems ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; prediction 추첨 결과의 예측 결과를 취득 실제로 경품을 지급하거나 트랜잭션을 생성하지 않고 추첨 결과를 예측합니다. 난수 시드를 사용하여 결정론적 결과를 반환하므로, 동일한 시드로 동일한 예측 결과를 재현할 수 있습니다. 추첨을 실행하기 전에 플레이어에게 받을 경품을 표시할 때 유용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 lotteryName string  ~ 128자 추첨 모델 이름 accessToken string  ~ 128자 액세스 토큰 randomSeed long  0 ~ 9223372036854775805 난수 시드 count int  1 ~ 1000 추첨 횟수 Result 타입 설명 items List 추첨 결과 경품 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . Prediction ( \u0026 lottery . PredictionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lottery-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RandomSeed : pointy . Int64 ( 1 ), Count : pointy . Int32 ( 1 ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\PredictionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e prediction ( ( new PredictionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lottery-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRandomSeed ( 1 ) -\u003e withCount ( 1 ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.PredictionRequest ; import io.gs2.lottery.result.PredictionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { PredictionResult result = client . prediction ( new PredictionRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRandomSeed ( 1L ) . withCount ( 1 ) ); List DrawnPrize \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . PredictionResult \u003e asyncResult = null ; yield return client . Prediction ( new Gs2 . Gs2Lottery . Request . PredictionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lottery-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRandomSeed ( 1L ) . WithCount ( 1 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . prediction ( new Gs2Lottery . PredictionRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRandomSeed ( 1 ) . withCount ( 1 ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . prediction ( lottery . PredictionRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lottery-0001' ) . with_access_token ( 'accessToken-0001' ) . with_random_seed ( 1 ) . with_count ( 1 ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.prediction ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , accessToken = \"accessToken-0001\" , randomSeed = 1 , count = 1 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'lottery' ) api_result_handler = client.prediction_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , accessToken = \"accessToken-0001\" , randomSeed = 1 , count = 1 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; predictionByUserId 사용자 ID를 지정하여 추첨 결과의 예측 결과를 취득 지정한 사용자의 추첨 결과를, 경품 지급이나 트랜잭션 생성 없이 예측합니다. 난수 시드를 사용하여 결정론적 결과를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 lotteryName string  ~ 128자 추첨 모델 이름 userId string  ~ 128자 사용자ID randomSeed long  0 ~ 9223372036854775805 난수 시드 count int  1 ~ 1000 추첨 횟수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 추첨 결과 경품 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . PredictionByUserId ( \u0026 lottery . PredictionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lottery-0001\" ), UserId : pointy . String ( \"user-0001\" ), RandomSeed : pointy . Int64 ( 1 ), Count : pointy . Int32 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\PredictionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e predictionByUserId ( ( new PredictionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lottery-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRandomSeed ( 1 ) -\u003e withCount ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.PredictionByUserIdRequest ; import io.gs2.lottery.result.PredictionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { PredictionByUserIdResult result = client . predictionByUserId ( new PredictionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withUserId ( \"user-0001\" ) . withRandomSeed ( 1L ) . withCount ( 1 ) . withTimeOffsetToken ( null ) ); List DrawnPrize \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . PredictionByUserIdResult \u003e asyncResult = null ; yield return client . PredictionByUserId ( new Gs2 . Gs2Lottery . Request . PredictionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lottery-0001\" ) . WithUserId ( \"user-0001\" ) . WithRandomSeed ( 1L ) . WithCount ( 1 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . predictionByUserId ( new Gs2Lottery . PredictionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withUserId ( \"user-0001\" ) . withRandomSeed ( 1 ) . withCount ( 1 ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . prediction_by_user_id ( lottery . PredictionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lottery-0001' ) . with_user_id ( 'user-0001' ) . with_random_seed ( 1 ) . with_count ( 1 ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.prediction_by_user_id ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , userId = \"user-0001\" , randomSeed = 1 , count = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'lottery' ) api_result_handler = client.prediction_by_user_id_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , userId = \"user-0001\" , randomSeed = 1 , count = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; drawWithRandomSeedByUserId 사용자 ID를 지정하여 난수 시드를 사용한 추첨을 실행 지정한 난수 시드를 사용하여 결정론적 추첨을 실행합니다. 난수 시드는 각 추첨의 반복 횟수만큼 오프셋되어, 고유하면서도 재현 가능한 결과를 보장합니다. 이 방식은 박스 추첨 모드와 호환되지 않습니다. 배출된 경품은 트랜잭션으로 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 lotteryName string  ~ 128자 추첨 모델 이름 userId string  ~ 128자 사용자ID randomSeed long  0 ~ 9223372036854775805 난수 시드 count int  1 ~ 1000 추첨 횟수 config List [] 0 ~ 1000 items 트랜잭션의 플레이스홀더에 적용하는 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 추첨 결과 경품 리스트 transactionId string 발행된 트랜잭션 ID stampSheet string 배출된 경품을 획득하기 위한 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DrawWithRandomSeedByUserId ( \u0026 lottery . DrawWithRandomSeedByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lottery-0001\" ), UserId : pointy . String ( \"user-0001\" ), RandomSeed : pointy . Int64 ( 1 ), Count : pointy . Int32 ( 1 ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DrawWithRandomSeedByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e drawWithRandomSeedByUserId ( ( new DrawWithRandomSeedByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lottery-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRandomSeed ( 1 ) -\u003e withCount ( 1 ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DrawWithRandomSeedByUserIdRequest ; import io.gs2.lottery.result.DrawWithRandomSeedByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DrawWithRandomSeedByUserIdResult result = client . drawWithRandomSeedByUserId ( new DrawWithRandomSeedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withUserId ( \"user-0001\" ) . withRandomSeed ( 1L ) . withCount ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); List DrawnPrize \u003e items = result . getItems (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DrawWithRandomSeedByUserIdResult \u003e asyncResult = null ; yield return client . DrawWithRandomSeedByUserId ( new Gs2 . Gs2Lottery . Request . DrawWithRandomSeedByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lottery-0001\" ) . WithUserId ( \"user-0001\" ) . WithRandomSeed ( 1L ) . WithCount ( 1 ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . drawWithRandomSeedByUserId ( new Gs2Lottery . DrawWithRandomSeedByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withUserId ( \"user-0001\" ) . withRandomSeed ( 1 ) . withCount ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . draw_with_random_seed_by_user_id ( lottery . DrawWithRandomSeedByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lottery-0001' ) . with_user_id ( 'user-0001' ) . with_random_seed ( 1 ) . with_count ( 1 ) . with_config ( None ) . with_time_offset_token ( None ) ) items = result . items transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.draw_with_random_seed_by_user_id ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , userId = \"user-0001\" , randomSeed = 1 , count = 1 , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'lottery' ) api_result_handler = client.draw_with_random_seed_by_user_id_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , userId = \"user-0001\" , randomSeed = 1 , count = 1 , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; describeProbabilities 배출 확률 목록 취득 일반 추첨에서는 모든 게임 플레이어에게 동일한 확률로 응답합니다. 박스 추첨에서는 박스 내용물의 잔여 상태를 고려하여 게임 플레이어마다 다른 확률로 응답합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 items List 배출 확률 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribeProbabilities ( \u0026 lottery . DescribeProbabilitiesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lottery-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribeProbabilitiesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describeProbabilities ( ( new DescribeProbabilitiesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lottery-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribeProbabilitiesRequest ; import io.gs2.lottery.result.DescribeProbabilitiesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribeProbabilitiesResult result = client . describeProbabilities ( new DescribeProbabilitiesRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List Probability \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribeProbabilitiesResult \u003e asyncResult = null ; yield return client . DescribeProbabilities ( new Gs2 . Gs2Lottery . Request . DescribeProbabilitiesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lottery-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describeProbabilities ( new Gs2Lottery . DescribeProbabilitiesRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_probabilities ( lottery . DescribeProbabilitiesRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lottery-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_probabilities ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_probabilities_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeProbabilitiesByUserId 사용자 ID를 지정하여 배출 확률 목록 취득 일반 추첨에서는 모든 게임 플레이어에게 동일한 확률로 응답합니다. 박스 추첨에서는 박스 내용물의 잔여 상태를 고려하여 게임 플레이어마다 다른 확률로 응답합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 배출 확률 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribeProbabilitiesByUserId ( \u0026 lottery . DescribeProbabilitiesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lottery-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribeProbabilitiesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describeProbabilitiesByUserId ( ( new DescribeProbabilitiesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lottery-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribeProbabilitiesByUserIdRequest ; import io.gs2.lottery.result.DescribeProbabilitiesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribeProbabilitiesByUserIdResult result = client . describeProbabilitiesByUserId ( new DescribeProbabilitiesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List Probability \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribeProbabilitiesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeProbabilitiesByUserId ( new Gs2 . Gs2Lottery . Request . DescribeProbabilitiesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lottery-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describeProbabilitiesByUserId ( new Gs2Lottery . DescribeProbabilitiesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lottery-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_probabilities_by_user_id ( lottery . DescribeProbabilitiesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lottery-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_probabilities_by_user_id ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_probabilities_by_user_id_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lottery-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describePrizeLimits 배출 횟수 제한 목록 취득 지정된 배출 확률 테이블의 경품 배출 횟수 제한에 대한 페이지네이션 목록을 취득합니다. 배출 횟수 제한은 각 경품의 배출 횟수를 추적하여, 수량 한정 경품 설정을 가능하게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 배출 횟수 제한 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribePrizeLimits ( \u0026 lottery . DescribePrizeLimitsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribePrizeLimitsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describePrizeLimits ( ( new DescribePrizeLimitsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribePrizeLimitsRequest ; import io.gs2.lottery.result.DescribePrizeLimitsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribePrizeLimitsResult result = client . describePrizeLimits ( new DescribePrizeLimitsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List PrizeLimit \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribePrizeLimitsResult \u003e asyncResult = null ; yield return client . DescribePrizeLimits ( new Gs2 . Gs2Lottery . Request . DescribePrizeLimitsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describePrizeLimits ( new Gs2Lottery . DescribePrizeLimitsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_prize_limits ( lottery . DescribePrizeLimitsRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_prize_limits ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_prize_limits_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getPrizeLimit 배출 횟수 제한 취득 배출 확률 테이블 내 특정 경품의 현재 배출 횟수 제한을 취득합니다. 설정된 제한에 대해 경품이 몇 번 배출되었는지 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. prizeId string  UUID ~ 36자 경품 ID 배출 확률 테이블 내에서 이 경품을 고유하게 식별하는 ID입니다. 배출 횟수 제한 추적 및 페일오버 경품 지정 시 참조에 사용됩니다. Result 타입 설명 item PrizeLimit 배출 횟수 제한 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetPrizeLimit ( \u0026 lottery . GetPrizeLimitRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), PrizeId : pointy . String ( \"prize-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetPrizeLimitRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getPrizeLimit ( ( new GetPrizeLimitRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withPrizeId ( \"prize-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetPrizeLimitRequest ; import io.gs2.lottery.result.GetPrizeLimitResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetPrizeLimitResult result = client . getPrizeLimit ( new GetPrizeLimitRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withPrizeId ( \"prize-0001\" ) ); PrizeLimit item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetPrizeLimitResult \u003e asyncResult = null ; yield return client . GetPrizeLimit ( new Gs2 . Gs2Lottery . Request . GetPrizeLimitRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithPrizeId ( \"prize-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getPrizeLimit ( new Gs2Lottery . GetPrizeLimitRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withPrizeId ( \"prize-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_prize_limit ( lottery . GetPrizeLimitRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_prize_id ( 'prize-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_prize_limit ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , prizeId = \"prize-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_prize_limit_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , prizeId = \"prize-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; resetPrizeLimit 배출 횟수 리셋 배출 횟수 레코드를 삭제하여 특정 경품의 배출 횟수를 리셋합니다. 리셋 후 경품은 설정된 제한까지 다시 배출 가능해집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. prizeId string  UUID ~ 36자 경품 ID 배출 확률 테이블 내에서 이 경품을 고유하게 식별하는 ID입니다. 배출 횟수 제한 추적 및 페일오버 경품 지정 시 참조에 사용됩니다. Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . ResetPrizeLimit ( \u0026 lottery . ResetPrizeLimitRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), PrizeId : pointy . String ( \"prize-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\ResetPrizeLimitRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e resetPrizeLimit ( ( new ResetPrizeLimitRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withPrizeId ( \"prize-0001\" ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.ResetPrizeLimitRequest ; import io.gs2.lottery.result.ResetPrizeLimitResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { ResetPrizeLimitResult result = client . resetPrizeLimit ( new ResetPrizeLimitRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withPrizeId ( \"prize-0001\" ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . ResetPrizeLimitResult \u003e asyncResult = null ; yield return client . ResetPrizeLimit ( new Gs2 . Gs2Lottery . Request . ResetPrizeLimitRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithPrizeId ( \"prize-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . resetPrizeLimit ( new Gs2Lottery . ResetPrizeLimitRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withPrizeId ( \"prize-0001\" ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . reset_prize_limit ( lottery . ResetPrizeLimitRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_prize_id ( 'prize-0001' ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.reset_prize_limit ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , prizeId = \"prize-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'lottery' ) api_result_handler = client.reset_prize_limit_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , prizeId = \"prize-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result describeBoxes 박스에서 꺼낸 아이템 리스트의 목록을 취득 네임스페이스 내 모든 박스 모드 추첨 모델의 박스 상태를 페이지네이션으로 취득합니다. 각 항목은 박스에서 어떤 경품이 배출되었는지와 남은 수량을 나타냅니다. 아직 추첨이 이루어지지 않은 박스의 경우, 빈 박스 상태가 생성되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 박스 상태 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribeBoxes ( \u0026 lottery . DescribeBoxesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribeBoxesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describeBoxes ( ( new DescribeBoxesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribeBoxesRequest ; import io.gs2.lottery.result.DescribeBoxesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribeBoxesResult result = client . describeBoxes ( new DescribeBoxesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List BoxItems \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribeBoxesResult \u003e asyncResult = null ; yield return client . DescribeBoxes ( new Gs2 . Gs2Lottery . Request . DescribeBoxesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describeBoxes ( new Gs2Lottery . DescribeBoxesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_boxes ( lottery . DescribeBoxesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_boxes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_boxes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeBoxesByUserId 사용자 ID를 지정하여 박스 목록을 취득 지정한 사용자의 모든 박스 모드 추첨 모델의 박스 상태를 페이지네이션으로 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 박스 상태 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribeBoxesByUserId ( \u0026 lottery . DescribeBoxesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribeBoxesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describeBoxesByUserId ( ( new DescribeBoxesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribeBoxesByUserIdRequest ; import io.gs2.lottery.result.DescribeBoxesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribeBoxesByUserIdResult result = client . describeBoxesByUserId ( new DescribeBoxesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List BoxItems \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribeBoxesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeBoxesByUserId ( new Gs2 . Gs2Lottery . Request . DescribeBoxesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describeBoxesByUserId ( new Gs2Lottery . DescribeBoxesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_boxes_by_user_id ( lottery . DescribeBoxesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_boxes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_boxes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getBox 박스 상태를 취득 특정 배출 확률 테이블의 박스 상태를 취득하여 어떤 경품이 배출되었는지와 남은 수량을 표시합니다. 박스가 아직 존재하지 않는 경우, 빈 박스 상태가 생성되어 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item BoxItems 박스 내 경품과 잔여 수량 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetBox ( \u0026 lottery . GetBoxRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetBoxRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getBox ( ( new GetBoxRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetBoxRequest ; import io.gs2.lottery.result.GetBoxResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetBoxResult result = client . getBox ( new GetBoxRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); BoxItems item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetBoxResult \u003e asyncResult = null ; yield return client . GetBox ( new Gs2 . Gs2Lottery . Request . GetBoxRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getBox ( new Gs2Lottery . GetBoxRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_box ( lottery . GetBoxRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_box ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_box_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBoxByUserId 사용자 ID를 지정하여 박스 상태를 취득 지정한 사용자의 특정 배출 확률 테이블의 박스 상태를 취득하여 배출된 경품과 남은 수량을 표시합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BoxItems 박스 내 경품과 잔여 수량 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetBoxByUserId ( \u0026 lottery . GetBoxByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetBoxByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getBoxByUserId ( ( new GetBoxByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetBoxByUserIdRequest ; import io.gs2.lottery.result.GetBoxByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetBoxByUserIdResult result = client . getBoxByUserId ( new GetBoxByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); BoxItems item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetBoxByUserIdResult \u003e asyncResult = null ; yield return client . GetBoxByUserId ( new Gs2 . Gs2Lottery . Request . GetBoxByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getBoxByUserId ( new Gs2Lottery . GetBoxByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_box_by_user_id ( lottery . GetBoxByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_box_by_user_id ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_box_by_user_id_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; resetBox 박스를 리셋 박스를 초기 상태로 리셋하고, 배출된 모든 경품을 박스로 되돌립니다. 리셋 후에는 모든 경품을 다시 배출받을 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item BoxItems 박스 내 경품과 초기 수량 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . ResetBox ( \u0026 lottery . ResetBoxRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\ResetBoxRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e resetBox ( ( new ResetBoxRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.ResetBoxRequest ; import io.gs2.lottery.result.ResetBoxResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { ResetBoxResult result = client . resetBox ( new ResetBoxRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); BoxItems item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . ResetBoxResult \u003e asyncResult = null ; yield return client . ResetBox ( new Gs2 . Gs2Lottery . Request . ResetBoxRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . resetBox ( new Gs2Lottery . ResetBoxRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . reset_box ( lottery . ResetBoxRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.reset_box ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.reset_box_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; resetBoxByUserId 사용자 ID를 지정하여 박스를 리셋 지정한 사용자의 박스를 초기 상태로 리셋하고, 배출된 모든 경품을 박스로 되돌립니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item BoxItems 박스 내 경품과 초기 수량 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . ResetBoxByUserId ( \u0026 lottery . ResetBoxByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\ResetBoxByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e resetBoxByUserId ( ( new ResetBoxByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.ResetBoxByUserIdRequest ; import io.gs2.lottery.result.ResetBoxByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { ResetBoxByUserIdResult result = client . resetBoxByUserId ( new ResetBoxByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); BoxItems item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . ResetBoxByUserIdResult \u003e asyncResult = null ; yield return client . ResetBoxByUserId ( new Gs2 . Gs2Lottery . Request . ResetBoxByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . resetBoxByUserId ( new Gs2Lottery . ResetBoxByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . reset_box_by_user_id ( lottery . ResetBoxByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.reset_box_by_user_id ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.reset_box_by_user_id_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeLotteryModels 추첨 모델 목록 취득 지정된 네임스페이스의 현재 활성화된 추첨 모델 목록을 취득합니다. 모델은 추첨 모드(일반 또는 박스), 추첨 방식(배출 확률 테이블 또는 스크립트), 관련된 배출 확률 테이블의 설정을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 추첨 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribeLotteryModels ( \u0026 lottery . DescribeLotteryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribeLotteryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describeLotteryModels ( ( new DescribeLotteryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribeLotteryModelsRequest ; import io.gs2.lottery.result.DescribeLotteryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribeLotteryModelsResult result = client . describeLotteryModels ( new DescribeLotteryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List LotteryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribeLotteryModelsResult \u003e asyncResult = null ; yield return client . DescribeLotteryModels ( new Gs2 . Gs2Lottery . Request . DescribeLotteryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describeLotteryModels ( new Gs2Lottery . DescribeLotteryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_lottery_models ( lottery . DescribeLotteryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_lottery_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_lottery_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getLotteryModel 추첨 모델 취득 지정된 추첨 모델의 모드(일반/박스), 추첨 방식(배출 확률 테이블/스크립트), 배출 확률 테이블 이름을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item LotteryModel 추첨 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetLotteryModel ( \u0026 lottery . GetLotteryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lotteryModel-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetLotteryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getLotteryModel ( ( new GetLotteryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lotteryModel-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetLotteryModelRequest ; import io.gs2.lottery.result.GetLotteryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetLotteryModelResult result = client . getLotteryModel ( new GetLotteryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lotteryModel-0001\" ) ); LotteryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetLotteryModelResult \u003e asyncResult = null ; yield return client . GetLotteryModel ( new Gs2 . Gs2Lottery . Request . GetLotteryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lotteryModel-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getLotteryModel ( new Gs2Lottery . GetLotteryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lotteryModel-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_lottery_model ( lottery . GetLotteryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lotteryModel-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_lottery_model ({ namespaceName = \"namespace-0001\" , lotteryName = \"lotteryModel-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_lottery_model_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lotteryModel-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 추첨 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 활성화된 추첨 모델 마스터를 활성화 가능한 형식으로 내보냅니다. 내보낸 데이터는 다른 네임스페이스의 마스터 데이터 업데이트나 백업으로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentLotteryMaster 활성화 가능한 추첨 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 lottery . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.ExportMasterRequest ; import io.gs2.lottery.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentLotteryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Lottery . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Lottery . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . export_master ( lottery . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentLotteryMaster 현재 활성화된 추첨 모델의 마스터 데이터를 취득 지정한 네임스페이스의 현재 활성화된 추첨 모델의 마스터 데이터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentLotteryMaster 현재 활성화된 추첨 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetCurrentLotteryMaster ( \u0026 lottery . GetCurrentLotteryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetCurrentLotteryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getCurrentLotteryMaster ( ( new GetCurrentLotteryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetCurrentLotteryMasterRequest ; import io.gs2.lottery.result.GetCurrentLotteryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetCurrentLotteryMasterResult result = client . getCurrentLotteryMaster ( new GetCurrentLotteryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentLotteryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetCurrentLotteryMasterResult \u003e asyncResult = null ; yield return client . GetCurrentLotteryMaster ( new Gs2 . Gs2Lottery . Request . GetCurrentLotteryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getCurrentLotteryMaster ( new Gs2Lottery . GetCurrentLotteryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_current_lottery_master ( lottery . GetCurrentLotteryMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_current_lottery_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_current_lottery_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentLotteryMaster 현재 활성화된 추첨 모델 마스터 데이터를 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 업데이트를 진행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentLotteryMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentLotteryMaster ( \u0026 lottery . PreUpdateCurrentLotteryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\PreUpdateCurrentLotteryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentLotteryMaster ( ( new PreUpdateCurrentLotteryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.PreUpdateCurrentLotteryMasterRequest ; import io.gs2.lottery.result.PreUpdateCurrentLotteryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { PreUpdateCurrentLotteryMasterResult result = client . preUpdateCurrentLotteryMaster ( new PreUpdateCurrentLotteryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . PreUpdateCurrentLotteryMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentLotteryMaster ( new Gs2 . Gs2Lottery . Request . PreUpdateCurrentLotteryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . preUpdateCurrentLotteryMaster ( new Gs2Lottery . PreUpdateCurrentLotteryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . pre_update_current_lottery_master ( lottery . PreUpdateCurrentLotteryMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.pre_update_current_lottery_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'lottery' ) api_result_handler = client.pre_update_current_lottery_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentLotteryMaster 현재 활성화된 추첨 모델 마스터 데이터를 업데이트 현재 활성화된 추첨 모델의 마스터 데이터를 업데이트합니다. 두 가지 모드를 지원합니다: 인라인 설정용 ‘direct’ 모드와, 3단계 업데이트 과정에서 사전에 업로드한 설정을 적용하는 ‘preUpload’ 모드입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentLotteryMaster 업데이트된 현재 활성화된 추첨 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentLotteryMaster ( \u0026 lottery . UpdateCurrentLotteryMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-02-21\\\",\\n \\\"lotteryModels\\\": [\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_ssr\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-ssr\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_sr\\\",\\n \\\"metadata\\\": \\\"SR\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-sr\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_r\\\",\\n \\\"metadata\\\": \\\"R\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-r\\\"\\n },\\n {\\n \\\"name\\\": \\\"box\\\",\\n \\\"metadata\\\": \\\"BOX\\\",\\n \\\"mode\\\": \\\"box\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"box\\\"\\n }\\n ],\\n \\\"prizeTables\\\": [\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-1\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-ssr\\\",\\n \\\"weight\\\": 5\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-2\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-sr\\\",\\n \\\"weight\\\": 15\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-3\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-r\\\",\\n \\\"weight\\\": 80\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-ssr\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-4\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-5\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 2\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-6\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 3\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-sr\\\",\\n \\\"metadata\\\": \\\"SR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-7\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 10\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-8\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 20\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-9\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 30\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-r\\\",\\n \\\"metadata\\\": \\\"R\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-10\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 100\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-11\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 200\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-12\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 300\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"box\\\",\\n \\\"metadata\\\": \\\"BOX\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-13\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 30\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-14\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 20\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-15\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 10\\n }\\n ]\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\UpdateCurrentLotteryMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e updateCurrentLotteryMaster ( ( new UpdateCurrentLotteryMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-02-21 \\\" , \\n \\\" lotteryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_ssr \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-ssr \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_sr \\\" , \\n \\\" metadata \\\" : \\\" SR \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-sr \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_r \\\" , \\n \\\" metadata \\\" : \\\" R \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-r \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" box \\\" , \\n \\\" metadata \\\" : \\\" BOX \\\" , \\n \\\" mode \\\" : \\\" box \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" box \\\"\\n } \\n ], \\n \\\" prizeTables \\\" : [ \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-1 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-ssr \\\" , \\n \\\" weight \\\" : 5 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-2 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-sr \\\" , \\n \\\" weight \\\" : 15 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-3 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-r \\\" , \\n \\\" weight \\\" : 80 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-ssr \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-4 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-5 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 2 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-6 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 3 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-sr \\\" , \\n \\\" metadata \\\" : \\\" SR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-7 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 10 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-8 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 20 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-9 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 30 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-r \\\" , \\n \\\" metadata \\\" : \\\" R \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-10 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 100 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-11 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 200 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-12 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 300 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" box \\\" , \\n \\\" metadata \\\" : \\\" BOX \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-13 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 30 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-14 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 20 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-15 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 10 \\n } \\n ] \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.UpdateCurrentLotteryMasterRequest ; import io.gs2.lottery.result.UpdateCurrentLotteryMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { UpdateCurrentLotteryMasterResult result = client . updateCurrentLotteryMaster ( new UpdateCurrentLotteryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-02-21\\\",\\n \\\"lotteryModels\\\": [\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_ssr\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-ssr\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_sr\\\",\\n \\\"metadata\\\": \\\"SR\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-sr\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_r\\\",\\n \\\"metadata\\\": \\\"R\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-r\\\"\\n },\\n {\\n \\\"name\\\": \\\"box\\\",\\n \\\"metadata\\\": \\\"BOX\\\",\\n \\\"mode\\\": \\\"box\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"box\\\"\\n }\\n ],\\n \\\"prizeTables\\\": [\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-1\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-ssr\\\",\\n \\\"weight\\\": 5\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-2\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-sr\\\",\\n \\\"weight\\\": 15\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-3\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-r\\\",\\n \\\"weight\\\": 80\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-ssr\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-4\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-5\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 2\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-6\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 3\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-sr\\\",\\n \\\"metadata\\\": \\\"SR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-7\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 10\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-8\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 20\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-9\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 30\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-r\\\",\\n \\\"metadata\\\": \\\"R\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-10\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 100\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-11\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 200\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-12\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 300\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"box\\\",\\n \\\"metadata\\\": \\\"BOX\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-13\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 30\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-14\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 20\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-15\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 10\\n }\\n ]\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentLotteryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . UpdateCurrentLotteryMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentLotteryMaster ( new Gs2 . Gs2Lottery . Request . UpdateCurrentLotteryMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-02-21\\\",\\n \\\"lotteryModels\\\": [\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_ssr\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-ssr\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_sr\\\",\\n \\\"metadata\\\": \\\"SR\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-sr\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_r\\\",\\n \\\"metadata\\\": \\\"R\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-r\\\"\\n },\\n {\\n \\\"name\\\": \\\"box\\\",\\n \\\"metadata\\\": \\\"BOX\\\",\\n \\\"mode\\\": \\\"box\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"box\\\"\\n }\\n ],\\n \\\"prizeTables\\\": [\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-1\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-ssr\\\",\\n \\\"weight\\\": 5\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-2\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-sr\\\",\\n \\\"weight\\\": 15\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-3\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-r\\\",\\n \\\"weight\\\": 80\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-ssr\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-4\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-5\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 2\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-6\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 3\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-sr\\\",\\n \\\"metadata\\\": \\\"SR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-7\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 10\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-8\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 20\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-9\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 30\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-r\\\",\\n \\\"metadata\\\": \\\"R\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-10\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 100\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-11\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 200\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-12\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 300\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"box\\\",\\n \\\"metadata\\\": \\\"BOX\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-13\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 30\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-14\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 20\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-15\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 10\\n }\\n ]\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . updateCurrentLotteryMaster ( new Gs2Lottery . UpdateCurrentLotteryMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-02-21\\\",\\n \\\"lotteryModels\\\": [\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_ssr\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-ssr\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_sr\\\",\\n \\\"metadata\\\": \\\"SR\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-sr\\\"\\n },\\n {\\n \\\"name\\\": \\\"gacha_r\\\",\\n \\\"metadata\\\": \\\"R\\\",\\n \\\"mode\\\": \\\"normal\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-r\\\"\\n },\\n {\\n \\\"name\\\": \\\"box\\\",\\n \\\"metadata\\\": \\\"BOX\\\",\\n \\\"mode\\\": \\\"box\\\",\\n \\\"method\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"box\\\"\\n }\\n ],\\n \\\"prizeTables\\\": [\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-1\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-ssr\\\",\\n \\\"weight\\\": 5\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-2\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-sr\\\",\\n \\\"weight\\\": 15\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-3\\\",\\n \\\"type\\\": \\\"prize_table\\\",\\n \\\"prizeTableName\\\": \\\"gacha-r\\\",\\n \\\"weight\\\": 80\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-ssr\\\",\\n \\\"metadata\\\": \\\"SSR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-4\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-5\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 2\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-6\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 3\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-sr\\\",\\n \\\"metadata\\\": \\\"SR\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-7\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 10\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-8\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 20\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-9\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 30\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha-r\\\",\\n \\\"metadata\\\": \\\"R\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-10\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 100\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-11\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 200\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-12\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 300\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"box\\\",\\n \\\"metadata\\\": \\\"BOX\\\",\\n \\\"prizes\\\": [\\n {\\n \\\"prizeId\\\": \\\"prize-13\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 30\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-14\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 20\\n },\\n {\\n \\\"prizeId\\\": \\\"prize-15\\\",\\n \\\"type\\\": \\\"action\\\",\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"count\\\\\\\": 1}\\\"\\n }\\n ],\\n \\\"weight\\\": 10\\n }\\n ]\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . update_current_lottery_master ( lottery . UpdateCurrentLotteryMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-02-21\", \\n \"lotteryModels\": [ \\n { \\n \"name\": \"gacha\", \\n \"metadata\": \"GACHA\", \\n \"mode\": \"normal\", \\n \"method\": \"prize_table\", \\n \"prizeTableName\": \"gacha\" \\n }, \\n { \\n \"name\": \"gacha_ssr\", \\n \"metadata\": \"SSR\", \\n \"mode\": \"normal\", \\n \"method\": \"prize_table\", \\n \"prizeTableName\": \"gacha-ssr\" \\n }, \\n { \\n \"name\": \"gacha_sr\", \\n \"metadata\": \"SR\", \\n \"mode\": \"normal\", \\n \"method\": \"prize_table\", \\n \"prizeTableName\": \"gacha-sr\" \\n }, \\n { \\n \"name\": \"gacha_r\", \\n \"metadata\": \"R\", \\n \"mode\": \"normal\", \\n \"method\": \"prize_table\", \\n \"prizeTableName\": \"gacha-r\" \\n }, \\n { \\n \"name\": \"box\", \\n \"metadata\": \"BOX\", \\n \"mode\": \"box\", \\n \"method\": \"prize_table\", \\n \"prizeTableName\": \"box\" \\n } \\n ], \\n \"prizeTables\": [ \\n { \\n \"name\": \"gacha\", \\n \"metadata\": \"SSR\", \\n \"prizes\": [ \\n { \\n \"prizeId\": \"prize-1\", \\n \"type\": \"prize_table\", \\n \"prizeTableName\": \"gacha-ssr\", \\n \"weight\": 5 \\n }, \\n { \\n \"prizeId\": \"prize-2\", \\n \"type\": \"prize_table\", \\n \"prizeTableName\": \"gacha-sr\", \\n \"weight\": 15 \\n }, \\n { \\n \"prizeId\": \"prize-3\", \\n \"type\": \"prize_table\", \\n \"prizeTableName\": \"gacha-r\", \\n \"weight\": 80 \\n } \\n ] \\n }, \\n { \\n \"name\": \"gacha-ssr\", \\n \"metadata\": \"SSR\", \\n \"prizes\": [ \\n { \\n \"prizeId\": \"prize-4\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 1 \\n }, \\n { \\n \"prizeId\": \"prize-5\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 2 \\n }, \\n { \\n \"prizeId\": \"prize-6\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 3 \\n } \\n ] \\n }, \\n { \\n \"name\": \"gacha-sr\", \\n \"metadata\": \"SR\", \\n \"prizes\": [ \\n { \\n \"prizeId\": \"prize-7\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 10 \\n }, \\n { \\n \"prizeId\": \"prize-8\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 20 \\n }, \\n { \\n \"prizeId\": \"prize-9\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 30 \\n } \\n ] \\n }, \\n { \\n \"name\": \"gacha-r\", \\n \"metadata\": \"R\", \\n \"prizes\": [ \\n { \\n \"prizeId\": \"prize-10\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 100 \\n }, \\n { \\n \"prizeId\": \"prize-11\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 200 \\n }, \\n { \\n \"prizeId\": \"prize-12\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 300 \\n } \\n ] \\n }, \\n { \\n \"name\": \"box\", \\n \"metadata\": \"BOX\", \\n \"prizes\": [ \\n { \\n \"prizeId\": \"prize-13\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 30 \\n }, \\n { \\n \"prizeId\": \"prize-14\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 20 \\n }, \\n { \\n \"prizeId\": \"prize-15\", \\n \"type\": \"action\", \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"{ \\\\ \"count \\\\ \": 1}\" \\n } \\n ], \\n \"weight\": 10 \\n } \\n ] \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.update_current_lottery_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-02-21 \\\" , \\n \\\" lotteryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_ssr \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-ssr \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_sr \\\" , \\n \\\" metadata \\\" : \\\" SR \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-sr \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_r \\\" , \\n \\\" metadata \\\" : \\\" R \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-r \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" box \\\" , \\n \\\" metadata \\\" : \\\" BOX \\\" , \\n \\\" mode \\\" : \\\" box \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" box \\\"\\n } \\n ], \\n \\\" prizeTables \\\" : [ \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-1 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-ssr \\\" , \\n \\\" weight \\\" : 5 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-2 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-sr \\\" , \\n \\\" weight \\\" : 15 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-3 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-r \\\" , \\n \\\" weight \\\" : 80 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-ssr \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-4 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-5 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 2 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-6 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 3 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-sr \\\" , \\n \\\" metadata \\\" : \\\" SR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-7 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 10 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-8 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 20 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-9 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 30 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-r \\\" , \\n \\\" metadata \\\" : \\\" R \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-10 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 100 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-11 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 200 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-12 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 300 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" box \\\" , \\n \\\" metadata \\\" : \\\" BOX \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-13 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 30 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-14 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 20 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-15 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 10 \\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.update_current_lottery_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-02-21 \\\" , \\n \\\" lotteryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_ssr \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-ssr \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_sr \\\" , \\n \\\" metadata \\\" : \\\" SR \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-sr \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" gacha_r \\\" , \\n \\\" metadata \\\" : \\\" R \\\" , \\n \\\" mode \\\" : \\\" normal \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-r \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" box \\\" , \\n \\\" metadata \\\" : \\\" BOX \\\" , \\n \\\" mode \\\" : \\\" box \\\" , \\n \\\" method \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" box \\\"\\n } \\n ], \\n \\\" prizeTables \\\" : [ \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-1 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-ssr \\\" , \\n \\\" weight \\\" : 5 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-2 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-sr \\\" , \\n \\\" weight \\\" : 15 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-3 \\\" , \\n \\\" type \\\" : \\\" prize_table \\\" , \\n \\\" prizeTableName \\\" : \\\" gacha-r \\\" , \\n \\\" weight \\\" : 80 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-ssr \\\" , \\n \\\" metadata \\\" : \\\" SSR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-4 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-5 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 2 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-6 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 3 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-sr \\\" , \\n \\\" metadata \\\" : \\\" SR \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-7 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 10 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-8 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 20 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-9 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 30 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha-r \\\" , \\n \\\" metadata \\\" : \\\" R \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-10 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 100 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-11 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 200 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-12 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 300 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" box \\\" , \\n \\\" metadata \\\" : \\\" BOX \\\" , \\n \\\" prizes \\\" : [ \\n { \\n \\\" prizeId \\\" : \\\" prize-13 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 30 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-14 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 20 \\n }, \\n { \\n \\\" prizeId \\\" : \\\" prize-15 \\\" , \\n \\\" type \\\" : \\\" action \\\" , \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" count \\\\\\\" : 1} \\\"\\n } \\n ], \\n \\\" weight \\\" : 10 \\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentLotteryMasterFromGitHub 현재 활성화된 추첨 모델 마스터 데이터를 GitHub에서 업데이트 지정한 GitHub 리포지토리에서 마스터 데이터를 가져와 현재 활성화된 추첨 모델의 마스터 데이터를 업데이트합니다. GS2-Key에 저장된 API 키가 인증에 사용되며, 체크아웃할 브랜치, 태그, 또는 커밋 해시를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentLotteryMaster 업데이트된 현재 활성화된 추첨 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentLotteryMasterFromGitHub ( \u0026 lottery . UpdateCurrentLotteryMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 lottery . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\UpdateCurrentLotteryMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e updateCurrentLotteryMasterFromGitHub ( ( new UpdateCurrentLotteryMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.UpdateCurrentLotteryMasterFromGitHubRequest ; import io.gs2.lottery.result.UpdateCurrentLotteryMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { UpdateCurrentLotteryMasterFromGitHubResult result = client . updateCurrentLotteryMasterFromGitHub ( new UpdateCurrentLotteryMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentLotteryMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . UpdateCurrentLotteryMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentLotteryMasterFromGitHub ( new Gs2 . Gs2Lottery . Request . UpdateCurrentLotteryMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Lottery . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . updateCurrentLotteryMasterFromGitHub ( new Gs2Lottery . UpdateCurrentLotteryMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Lottery . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . update_current_lottery_master_from_git_hub ( lottery . UpdateCurrentLotteryMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( lottery . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.update_current_lottery_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.update_current_lottery_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeLotteryModelMasters 추첨 모델 마스터 목록 취득 지정된 네임스페이스의 추첨 모델 마스터에 대한 페이지네이션 목록을 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 추첨 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 추첨 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribeLotteryModelMasters ( \u0026 lottery . DescribeLotteryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribeLotteryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describeLotteryModelMasters ( ( new DescribeLotteryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribeLotteryModelMastersRequest ; import io.gs2.lottery.result.DescribeLotteryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribeLotteryModelMastersResult result = client . describeLotteryModelMasters ( new DescribeLotteryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List LotteryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribeLotteryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeLotteryModelMasters ( new Gs2 . Gs2Lottery . Request . DescribeLotteryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describeLotteryModelMasters ( new Gs2Lottery . DescribeLotteryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_lottery_model_masters ( lottery . DescribeLotteryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_lottery_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_lottery_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createLotteryModelMaster 추첨 모델 마스터 신규 작성 지정된 설정으로 새로운 추첨 모델 마스터를 작성합니다. 모드는 ’normal’(복원 추첨: 배출된 경품도 다시 배출됨) 또는 ‘box’(비복원 추첨: 배출된 경품은 풀에서 제외됨)를 지정할 수 있습니다. 방식은 ‘prizeTable’(사전 정의된 배출 확률 테이블 사용) 또는 ‘script’(GS2-Script로 동적으로 경품을 결정)를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 추첨 모델 이름 추첨 모델 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “normal”,   “box” }  추첨 모드 경품의 추첨 방식을 선택합니다. “normal\"은 매번 일정한 확률로 추첨을 진행합니다(경품은 반복해서 배출됩니다). “box\"는 가상의 상자에 미리 정해진 수량의 경품을 넣어두고, 추첨할 때마다 상자에서 경품을 꺼냅니다(모든 경품이 최종적으로 배출되는 것이 보장됩니다). 정의 설명 normal 일반 추첨 box 박스 추첨 method 문자열 열거형 enum {   “prize_table”,   “script” }  추첨 방법 배출 확률 테이블의 참조 방법을 결정합니다. “prize_table\"은 정적으로 지정된 배출 확률 테이블을 사용합니다. “script\"는 GS2-Script를 사용하여 추첨 시점에 배출 확률 테이블을 동적으로 선택하며, 10연 가챠에서 1회만 다른 배출 확률 테이블을 적용하는 등의 시나리오를 구현할 수 있습니다. 정의 설명 prize_table 정적 배출 확률 테이블 script GS2-Script를 사용한 동적 배출 확률 테이블 prizeTableName string {method} == “prize_table” ※ ~ 128자 배출 확률 테이블 이름 이 추첨 모델에서 사용할 배출 확률 테이블의 이름입니다. 추첨 방법이 “prize_table\"인 경우 필수입니다. ※ method이(가) “prize_table” 이면 필수 choicePrizeTableScriptId string {method} == “script” ※ ~ 1024자 배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - choicePrizeTable ※ method이(가) “script” 이면 필수 Result 타입 설명 item LotteryModelMaster 작성한 추첨 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . CreateLotteryModelMaster ( \u0026 lottery . CreateLotteryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"lotteryModel-0001\" ), Description : nil , Metadata : nil , Mode : pointy . String ( \"normal\" ), Method : pointy . String ( \"prize_table\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), ChoicePrizeTableScriptId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\CreateLotteryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e createLotteryModelMaster ( ( new CreateLotteryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"lotteryModel-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withMode ( \"normal\" ) -\u003e withMethod ( \"prize_table\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withChoicePrizeTableScriptId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.CreateLotteryModelMasterRequest ; import io.gs2.lottery.result.CreateLotteryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { CreateLotteryModelMasterResult result = client . createLotteryModelMaster ( new CreateLotteryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"lotteryModel-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMode ( \"normal\" ) . withMethod ( \"prize_table\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withChoicePrizeTableScriptId ( null ) ); LotteryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . CreateLotteryModelMasterResult \u003e asyncResult = null ; yield return client . CreateLotteryModelMaster ( new Gs2 . Gs2Lottery . Request . CreateLotteryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"lotteryModel-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithMode ( \"normal\" ) . WithMethod ( \"prize_table\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithChoicePrizeTableScriptId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . createLotteryModelMaster ( new Gs2Lottery . CreateLotteryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"lotteryModel-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMode ( \"normal\" ) . withMethod ( \"prize_table\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withChoicePrizeTableScriptId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . create_lottery_model_master ( lottery . CreateLotteryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'lotteryModel-0001' ) . with_description ( None ) . with_metadata ( None ) . with_mode ( 'normal' ) . with_method ( 'prize_table' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_choice_prize_table_script_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.create_lottery_model_master ({ namespaceName = \"namespace-0001\" , name = \"lotteryModel-0001\" , description = nil , metadata = nil , mode = \"normal\" , method = \"prize_table\" , prizeTableName = \"prizeTable-0001\" , choicePrizeTableScriptId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.create_lottery_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"lotteryModel-0001\" , description = nil , metadata = nil , mode = \"normal\" , method = \"prize_table\" , prizeTableName = \"prizeTable-0001\" , choicePrizeTableScriptId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getLotteryModelMaster 추첨 모델 마스터 취득 지정된 추첨 모델 마스터의 모드(normal/box), 추첨 방식(prizeTable/script), 관련된 배출 확률 테이블 또는 스크립트 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item LotteryModelMaster 추첨 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetLotteryModelMaster ( \u0026 lottery . GetLotteryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lotteryModel-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetLotteryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getLotteryModelMaster ( ( new GetLotteryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lotteryModel-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetLotteryModelMasterRequest ; import io.gs2.lottery.result.GetLotteryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetLotteryModelMasterResult result = client . getLotteryModelMaster ( new GetLotteryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lotteryModel-0001\" ) ); LotteryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetLotteryModelMasterResult \u003e asyncResult = null ; yield return client . GetLotteryModelMaster ( new Gs2 . Gs2Lottery . Request . GetLotteryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lotteryModel-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getLotteryModelMaster ( new Gs2Lottery . GetLotteryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lotteryModel-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_lottery_model_master ( lottery . GetLotteryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lotteryModel-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_lottery_model_master ({ namespaceName = \"namespace-0001\" , lotteryName = \"lotteryModel-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_lottery_model_master_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lotteryModel-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateLotteryModelMaster 추첨 모델 마스터 갱신 지정된 추첨 모델 마스터를 갱신합니다. 설명, 메타데이터, 모드(normal/box), 추첨 방식(prizeTable/script), 배출 확률 테이블 이름, 스크립트 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “normal”,   “box” }  추첨 모드 경품의 추첨 방식을 선택합니다. “normal\"은 매번 일정한 확률로 추첨을 진행합니다(경품은 반복해서 배출됩니다). “box\"는 가상의 상자에 미리 정해진 수량의 경품을 넣어두고, 추첨할 때마다 상자에서 경품을 꺼냅니다(모든 경품이 최종적으로 배출되는 것이 보장됩니다). 정의 설명 normal 일반 추첨 box 박스 추첨 method 문자열 열거형 enum {   “prize_table”,   “script” }  추첨 방법 배출 확률 테이블의 참조 방법을 결정합니다. “prize_table\"은 정적으로 지정된 배출 확률 테이블을 사용합니다. “script\"는 GS2-Script를 사용하여 추첨 시점에 배출 확률 테이블을 동적으로 선택하며, 10연 가챠에서 1회만 다른 배출 확률 테이블을 적용하는 등의 시나리오를 구현할 수 있습니다. 정의 설명 prize_table 정적 배출 확률 테이블 script GS2-Script를 사용한 동적 배출 확률 테이블 prizeTableName string {method} == “prize_table” ※ ~ 128자 배출 확률 테이블 이름 이 추첨 모델에서 사용할 배출 확률 테이블의 이름입니다. 추첨 방법이 “prize_table\"인 경우 필수입니다. ※ method이(가) “prize_table” 이면 필수 choicePrizeTableScriptId string {method} == “script” ※ ~ 1024자 배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - choicePrizeTable ※ method이(가) “script” 이면 필수 Result 타입 설명 item LotteryModelMaster 갱신한 추첨 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . UpdateLotteryModelMaster ( \u0026 lottery . UpdateLotteryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lotteryModel-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"METADATA1\" ), Mode : pointy . String ( \"box\" ), Method : pointy . String ( \"prize_table\" ), PrizeTableName : pointy . String ( \"prizeTable-0002\" ), ChoicePrizeTableScriptId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\UpdateLotteryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e updateLotteryModelMaster ( ( new UpdateLotteryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lotteryModel-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"METADATA1\" ) -\u003e withMode ( \"box\" ) -\u003e withMethod ( \"prize_table\" ) -\u003e withPrizeTableName ( \"prizeTable-0002\" ) -\u003e withChoicePrizeTableScriptId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.UpdateLotteryModelMasterRequest ; import io.gs2.lottery.result.UpdateLotteryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { UpdateLotteryModelMasterResult result = client . updateLotteryModelMaster ( new UpdateLotteryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lotteryModel-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"METADATA1\" ) . withMode ( \"box\" ) . withMethod ( \"prize_table\" ) . withPrizeTableName ( \"prizeTable-0002\" ) . withChoicePrizeTableScriptId ( null ) ); LotteryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . UpdateLotteryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateLotteryModelMaster ( new Gs2 . Gs2Lottery . Request . UpdateLotteryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lotteryModel-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"METADATA1\" ) . WithMode ( \"box\" ) . WithMethod ( \"prize_table\" ) . WithPrizeTableName ( \"prizeTable-0002\" ) . WithChoicePrizeTableScriptId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . updateLotteryModelMaster ( new Gs2Lottery . UpdateLotteryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lotteryModel-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"METADATA1\" ) . withMode ( \"box\" ) . withMethod ( \"prize_table\" ) . withPrizeTableName ( \"prizeTable-0002\" ) . withChoicePrizeTableScriptId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . update_lottery_model_master ( lottery . UpdateLotteryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lotteryModel-0001' ) . with_description ( 'description1' ) . with_metadata ( 'METADATA1' ) . with_mode ( 'box' ) . with_method ( 'prize_table' ) . with_prize_table_name ( 'prizeTable-0002' ) . with_choice_prize_table_script_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.update_lottery_model_master ({ namespaceName = \"namespace-0001\" , lotteryName = \"lotteryModel-0001\" , description = \"description1\" , metadata = \"METADATA1\" , mode = \"box\" , method = \"prize_table\" , prizeTableName = \"prizeTable-0002\" , choicePrizeTableScriptId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.update_lottery_model_master_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lotteryModel-0001\" , description = \"description1\" , metadata = \"METADATA1\" , mode = \"box\" , method = \"prize_table\" , prizeTableName = \"prizeTable-0002\" , choicePrizeTableScriptId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteLotteryModelMaster 추첨 모델 마스터 삭제 지정된 추첨 모델 마스터를 삭제합니다. 다음 마스터 데이터 갱신까지 현재 활성화된 마스터 데이터에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item LotteryModelMaster 삭제한 추첨 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DeleteLotteryModelMaster ( \u0026 lottery . DeleteLotteryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), LotteryName : pointy . String ( \"lotteryModel-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DeleteLotteryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e deleteLotteryModelMaster ( ( new DeleteLotteryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withLotteryName ( \"lotteryModel-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DeleteLotteryModelMasterRequest ; import io.gs2.lottery.result.DeleteLotteryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DeleteLotteryModelMasterResult result = client . deleteLotteryModelMaster ( new DeleteLotteryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lotteryModel-0001\" ) ); LotteryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DeleteLotteryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteLotteryModelMaster ( new Gs2 . Gs2Lottery . Request . DeleteLotteryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithLotteryName ( \"lotteryModel-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . deleteLotteryModelMaster ( new Gs2Lottery . DeleteLotteryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withLotteryName ( \"lotteryModel-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . delete_lottery_model_master ( lottery . DeleteLotteryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_lottery_name ( 'lotteryModel-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.delete_lottery_model_master ({ namespaceName = \"namespace-0001\" , lotteryName = \"lotteryModel-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.delete_lottery_model_master_async ({ namespaceName = \"namespace-0001\" , lotteryName = \"lotteryModel-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describePrizeTableMasters 배출 확률 테이블 마스터 목록을 취득 지정한 네임스페이스의 배출 확률 테이블 마스터를 페이지네이션으로 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 배출 확률 테이블 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 배출 확률 테이블 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DescribePrizeTableMasters ( \u0026 lottery . DescribePrizeTableMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DescribePrizeTableMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e describePrizeTableMasters ( ( new DescribePrizeTableMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DescribePrizeTableMastersRequest ; import io.gs2.lottery.result.DescribePrizeTableMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DescribePrizeTableMastersResult result = client . describePrizeTableMasters ( new DescribePrizeTableMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List PrizeTableMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DescribePrizeTableMastersResult \u003e asyncResult = null ; yield return client . DescribePrizeTableMasters ( new Gs2 . Gs2Lottery . Request . DescribePrizeTableMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . describePrizeTableMasters ( new Gs2Lottery . DescribePrizeTableMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . describe_prize_table_masters ( lottery . DescribePrizeTableMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.describe_prize_table_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'lottery' ) api_result_handler = client.describe_prize_table_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createPrizeTableMaster 배출 확률 테이블 마스터를 신규 생성 지정한 경품 설정으로 새로운 배출 확률 테이블 마스터를 생성합니다. 각 경품 항목은 경품 ID, 타입, 획득 액션, 배출 가중치, 그리고 선택적인 수량 제한을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. prizes List  1 ~ 100 items 경품 리스트 이 배출 확률 테이블 내의 경품 리스트입니다. 각 경품은 배출 가중치(확률), 배출 시 실행할 액션, 그리고 선택적으로 배출 횟수 제한을 정의합니다. 각 경품의 실제 배출 확률은 해당 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다. Result 타입 설명 item PrizeTableMaster 생성한 배출 확률 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . CreatePrizeTableMaster ( \u0026 lottery . CreatePrizeTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"prizeTable-0001\" ), Description : nil , Metadata : nil , Prizes : [] lottery . Prize { lottery . Prize { PrizeId : pointy . String ( \"1\" ), Type : pointy . String ( \"action\" ), AcquireActions : [] lottery . AcquireAction { lottery . AcquireAction { Action : pointy . String ( \"Gs2Money:DepositByUserId\" ), Request : pointy . String ( \"Gs2Money:DepositByUserId:request:ssr-0001\" ), }, }, Weight : pointy . Int32 ( 1 ), }, lottery . Prize { PrizeId : pointy . String ( \"2\" ), Type : pointy . String ( \"action\" ), AcquireActions : [] lottery . AcquireAction { lottery . AcquireAction { Action : pointy . String ( \"Gs2Money:DepositByUserId\" ), Request : pointy . String ( \"Gs2Money:DepositByUserId:request:ssr-0002\" ), }, }, Weight : pointy . Int32 ( 2 ), }, lottery . Prize { PrizeId : pointy . String ( \"3\" ), Type : pointy . String ( \"action\" ), AcquireActions : [] lottery . AcquireAction { lottery . AcquireAction { Action : pointy . String ( \"Gs2Money:DepositByUserId\" ), Request : pointy . String ( \"Gs2Money:DepositByUserId:request:ssr-0003\" ), }, }, Weight : pointy . Int32 ( 3 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\CreatePrizeTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e createPrizeTableMaster ( ( new CreatePrizeTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"prizeTable-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withPrizes ([ ( new \\Gs2\\Lottery\\Model\\Prize ()) -\u003e withPrizeId ( \"1\" ) -\u003e withType ( \"action\" ) -\u003e withAcquireActions ([ ( new \\Gs2\\Lottery\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Money:DepositByUserId\" ) -\u003e withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0001\" ), ]) -\u003e withWeight ( 1 ), ( new \\Gs2\\Lottery\\Model\\Prize ()) -\u003e withPrizeId ( \"2\" ) -\u003e withType ( \"action\" ) -\u003e withAcquireActions ([ ( new \\Gs2\\Lottery\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Money:DepositByUserId\" ) -\u003e withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0002\" ), ]) -\u003e withWeight ( 2 ), ( new \\Gs2\\Lottery\\Model\\Prize ()) -\u003e withPrizeId ( \"3\" ) -\u003e withType ( \"action\" ) -\u003e withAcquireActions ([ ( new \\Gs2\\Lottery\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Money:DepositByUserId\" ) -\u003e withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0003\" ), ]) -\u003e withWeight ( 3 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.CreatePrizeTableMasterRequest ; import io.gs2.lottery.result.CreatePrizeTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { CreatePrizeTableMasterResult result = client . createPrizeTableMaster ( new CreatePrizeTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"prizeTable-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withPrizes ( Arrays . asList ( new io . gs2 . lottery . model . Prize () . withPrizeId ( \"1\" ) . withType ( \"action\" ) . withAcquireActions ( Arrays . asList ( new io . gs2 . lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0001\" ) )) . withWeight ( 1 ), new io . gs2 . lottery . model . Prize () . withPrizeId ( \"2\" ) . withType ( \"action\" ) . withAcquireActions ( Arrays . asList ( new io . gs2 . lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0002\" ) )) . withWeight ( 2 ), new io . gs2 . lottery . model . Prize () . withPrizeId ( \"3\" ) . withType ( \"action\" ) . withAcquireActions ( Arrays . asList ( new io . gs2 . lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0003\" ) )) . withWeight ( 3 ) )) ); PrizeTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . CreatePrizeTableMasterResult \u003e asyncResult = null ; yield return client . CreatePrizeTableMaster ( new Gs2 . Gs2Lottery . Request . CreatePrizeTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"prizeTable-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithPrizes ( new Gs2 . Gs2Lottery . Model . Prize [] { new Gs2 . Gs2Lottery . Model . Prize () . WithPrizeId ( \"1\" ) . WithType ( \"action\" ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Money:DepositByUserId\" ) . WithRequest ( \"Gs2Money:DepositByUserId:request:ssr-0001\" ), }) . WithWeight ( 1 ), new Gs2 . Gs2Lottery . Model . Prize () . WithPrizeId ( \"2\" ) . WithType ( \"action\" ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Money:DepositByUserId\" ) . WithRequest ( \"Gs2Money:DepositByUserId:request:ssr-0002\" ), }) . WithWeight ( 2 ), new Gs2 . Gs2Lottery . Model . Prize () . WithPrizeId ( \"3\" ) . WithType ( \"action\" ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Money:DepositByUserId\" ) . WithRequest ( \"Gs2Money:DepositByUserId:request:ssr-0003\" ), }) . WithWeight ( 3 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . createPrizeTableMaster ( new Gs2Lottery . CreatePrizeTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"prizeTable-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withPrizes ([ new Gs2Lottery . model . Prize () . withPrizeId ( \"1\" ) . withType ( \"action\" ) . withAcquireActions ([ new Gs2Lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0001\" ), ]) . withWeight ( 1 ), new Gs2Lottery . model . Prize () . withPrizeId ( \"2\" ) . withType ( \"action\" ) . withAcquireActions ([ new Gs2Lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0002\" ), ]) . withWeight ( 2 ), new Gs2Lottery . model . Prize () . withPrizeId ( \"3\" ) . withType ( \"action\" ) . withAcquireActions ([ new Gs2Lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-0003\" ), ]) . withWeight ( 3 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . create_prize_table_master ( lottery . CreatePrizeTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'prizeTable-0001' ) . with_description ( None ) . with_metadata ( None ) . with_prizes ([ lottery . Prize () . with_prize_id ( '1' ) . with_type ( 'action' ) . with_acquire_actions ([ lottery . AcquireAction () . with_action ( 'Gs2Money:DepositByUserId' ) . with_request ( 'Gs2Money:DepositByUserId:request:ssr-0001' ), ]) . with_weight ( 1 ), lottery . Prize () . with_prize_id ( '2' ) . with_type ( 'action' ) . with_acquire_actions ([ lottery . AcquireAction () . with_action ( 'Gs2Money:DepositByUserId' ) . with_request ( 'Gs2Money:DepositByUserId:request:ssr-0002' ), ]) . with_weight ( 2 ), lottery . Prize () . with_prize_id ( '3' ) . with_type ( 'action' ) . with_acquire_actions ([ lottery . AcquireAction () . with_action ( 'Gs2Money:DepositByUserId' ) . with_request ( 'Gs2Money:DepositByUserId:request:ssr-0003' ), ]) . with_weight ( 3 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.create_prize_table_master ({ namespaceName = \"namespace-0001\" , name = \"prizeTable-0001\" , description = nil , metadata = nil , prizes = { { prizeId = \"1\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-0001\" , } }, weight = 1 , }, { prizeId = \"2\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-0002\" , } }, weight = 2 , }, { prizeId = \"3\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-0003\" , } }, weight = 3 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.create_prize_table_master_async ({ namespaceName = \"namespace-0001\" , name = \"prizeTable-0001\" , description = nil , metadata = nil , prizes = { { prizeId = \"1\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-0001\" , } }, weight = 1 , }, { prizeId = \"2\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-0002\" , } }, weight = 2 , }, { prizeId = \"3\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-0003\" , } }, weight = 3 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getPrizeTableMaster 배출 확률 테이블 마스터를 취득 지정한 배출 확률 테이블 마스터의 경품 리스트, 배출 가중치, 타입, 수량 제한을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item PrizeTableMaster 배출 확률 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . GetPrizeTableMaster ( \u0026 lottery . GetPrizeTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\GetPrizeTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e getPrizeTableMaster ( ( new GetPrizeTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.GetPrizeTableMasterRequest ; import io.gs2.lottery.result.GetPrizeTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { GetPrizeTableMasterResult result = client . getPrizeTableMaster ( new GetPrizeTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) ); PrizeTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . GetPrizeTableMasterResult \u003e asyncResult = null ; yield return client . GetPrizeTableMaster ( new Gs2 . Gs2Lottery . Request . GetPrizeTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . getPrizeTableMaster ( new Gs2Lottery . GetPrizeTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . get_prize_table_master ( lottery . GetPrizeTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.get_prize_table_master ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.get_prize_table_master_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updatePrizeTableMaster 배출 확률 테이블 마스터를 업데이트 지정한 배출 확률 테이블 마스터를 업데이트합니다. 설명, 메타데이터, 그리고 경품 리스트의 배출 가중치와 수량 제한을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. prizes List  1 ~ 100 items 경품 리스트 이 배출 확률 테이블 내의 경품 리스트입니다. 각 경품은 배출 가중치(확률), 배출 시 실행할 액션, 그리고 선택적으로 배출 횟수 제한을 정의합니다. 각 경품의 실제 배출 확률은 해당 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다. Result 타입 설명 item PrizeTableMaster 업데이트한 배출 확률 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . UpdatePrizeTableMaster ( \u0026 lottery . UpdatePrizeTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"METADATA1\" ), Prizes : [] lottery . Prize { lottery . Prize { PrizeId : pointy . String ( \"4\" ), Type : pointy . String ( \"action\" ), AcquireActions : [] lottery . AcquireAction { lottery . AcquireAction { Action : pointy . String ( \"Gs2Money:DepositByUserId\" ), Request : pointy . String ( \"Gs2Money:DepositByUserId:request:ssr-1001\" ), }, }, Weight : pointy . Int32 ( 2 ), }, lottery . Prize { PrizeId : pointy . String ( \"5\" ), Type : pointy . String ( \"action\" ), AcquireActions : [] lottery . AcquireAction { lottery . AcquireAction { Action : pointy . String ( \"Gs2Money:DepositByUserId\" ), Request : pointy . String ( \"Gs2Money:DepositByUserId:request:ssr-1002\" ), }, }, Weight : pointy . Int32 ( 3 ), }, lottery . Prize { PrizeId : pointy . String ( \"6\" ), Type : pointy . String ( \"action\" ), AcquireActions : [] lottery . AcquireAction { lottery . AcquireAction { Action : pointy . String ( \"Gs2Money:DepositByUserId\" ), Request : pointy . String ( \"Gs2Money:DepositByUserId:request:ssr-1003\" ), }, }, Weight : pointy . Int32 ( 4 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\UpdatePrizeTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e updatePrizeTableMaster ( ( new UpdatePrizeTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"METADATA1\" ) -\u003e withPrizes ([ ( new \\Gs2\\Lottery\\Model\\Prize ()) -\u003e withPrizeId ( \"4\" ) -\u003e withType ( \"action\" ) -\u003e withAcquireActions ([ ( new \\Gs2\\Lottery\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Money:DepositByUserId\" ) -\u003e withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1001\" ), ]) -\u003e withWeight ( 2 ), ( new \\Gs2\\Lottery\\Model\\Prize ()) -\u003e withPrizeId ( \"5\" ) -\u003e withType ( \"action\" ) -\u003e withAcquireActions ([ ( new \\Gs2\\Lottery\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Money:DepositByUserId\" ) -\u003e withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1002\" ), ]) -\u003e withWeight ( 3 ), ( new \\Gs2\\Lottery\\Model\\Prize ()) -\u003e withPrizeId ( \"6\" ) -\u003e withType ( \"action\" ) -\u003e withAcquireActions ([ ( new \\Gs2\\Lottery\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Money:DepositByUserId\" ) -\u003e withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1003\" ), ]) -\u003e withWeight ( 4 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.UpdatePrizeTableMasterRequest ; import io.gs2.lottery.result.UpdatePrizeTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { UpdatePrizeTableMasterResult result = client . updatePrizeTableMaster ( new UpdatePrizeTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"METADATA1\" ) . withPrizes ( Arrays . asList ( new io . gs2 . lottery . model . Prize () . withPrizeId ( \"4\" ) . withType ( \"action\" ) . withAcquireActions ( Arrays . asList ( new io . gs2 . lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1001\" ) )) . withWeight ( 2 ), new io . gs2 . lottery . model . Prize () . withPrizeId ( \"5\" ) . withType ( \"action\" ) . withAcquireActions ( Arrays . asList ( new io . gs2 . lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1002\" ) )) . withWeight ( 3 ), new io . gs2 . lottery . model . Prize () . withPrizeId ( \"6\" ) . withType ( \"action\" ) . withAcquireActions ( Arrays . asList ( new io . gs2 . lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1003\" ) )) . withWeight ( 4 ) )) ); PrizeTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . UpdatePrizeTableMasterResult \u003e asyncResult = null ; yield return client . UpdatePrizeTableMaster ( new Gs2 . Gs2Lottery . Request . UpdatePrizeTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"METADATA1\" ) . WithPrizes ( new Gs2 . Gs2Lottery . Model . Prize [] { new Gs2 . Gs2Lottery . Model . Prize () . WithPrizeId ( \"4\" ) . WithType ( \"action\" ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Money:DepositByUserId\" ) . WithRequest ( \"Gs2Money:DepositByUserId:request:ssr-1001\" ), }) . WithWeight ( 2 ), new Gs2 . Gs2Lottery . Model . Prize () . WithPrizeId ( \"5\" ) . WithType ( \"action\" ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Money:DepositByUserId\" ) . WithRequest ( \"Gs2Money:DepositByUserId:request:ssr-1002\" ), }) . WithWeight ( 3 ), new Gs2 . Gs2Lottery . Model . Prize () . WithPrizeId ( \"6\" ) . WithType ( \"action\" ) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Money:DepositByUserId\" ) . WithRequest ( \"Gs2Money:DepositByUserId:request:ssr-1003\" ), }) . WithWeight ( 4 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . updatePrizeTableMaster ( new Gs2Lottery . UpdatePrizeTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"METADATA1\" ) . withPrizes ([ new Gs2Lottery . model . Prize () . withPrizeId ( \"4\" ) . withType ( \"action\" ) . withAcquireActions ([ new Gs2Lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1001\" ), ]) . withWeight ( 2 ), new Gs2Lottery . model . Prize () . withPrizeId ( \"5\" ) . withType ( \"action\" ) . withAcquireActions ([ new Gs2Lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1002\" ), ]) . withWeight ( 3 ), new Gs2Lottery . model . Prize () . withPrizeId ( \"6\" ) . withType ( \"action\" ) . withAcquireActions ([ new Gs2Lottery . model . AcquireAction () . withAction ( \"Gs2Money:DepositByUserId\" ) . withRequest ( \"Gs2Money:DepositByUserId:request:ssr-1003\" ), ]) . withWeight ( 4 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . update_prize_table_master ( lottery . UpdatePrizeTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) . with_description ( 'description1' ) . with_metadata ( 'METADATA1' ) . with_prizes ([ lottery . Prize () . with_prize_id ( '4' ) . with_type ( 'action' ) . with_acquire_actions ([ lottery . AcquireAction () . with_action ( 'Gs2Money:DepositByUserId' ) . with_request ( 'Gs2Money:DepositByUserId:request:ssr-1001' ), ]) . with_weight ( 2 ), lottery . Prize () . with_prize_id ( '5' ) . with_type ( 'action' ) . with_acquire_actions ([ lottery . AcquireAction () . with_action ( 'Gs2Money:DepositByUserId' ) . with_request ( 'Gs2Money:DepositByUserId:request:ssr-1002' ), ]) . with_weight ( 3 ), lottery . Prize () . with_prize_id ( '6' ) . with_type ( 'action' ) . with_acquire_actions ([ lottery . AcquireAction () . with_action ( 'Gs2Money:DepositByUserId' ) . with_request ( 'Gs2Money:DepositByUserId:request:ssr-1003' ), ]) . with_weight ( 4 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.update_prize_table_master ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , description = \"description1\" , metadata = \"METADATA1\" , prizes = { { prizeId = \"4\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-1001\" , } }, weight = 2 , }, { prizeId = \"5\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-1002\" , } }, weight = 3 , }, { prizeId = \"6\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-1003\" , } }, weight = 4 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.update_prize_table_master_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , description = \"description1\" , metadata = \"METADATA1\" , prizes = { { prizeId = \"4\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-1001\" , } }, weight = 2 , }, { prizeId = \"5\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-1002\" , } }, weight = 3 , }, { prizeId = \"6\" , type = \"action\" , acquireActions = { { action = \"Gs2Money:DepositByUserId\" , request = \"Gs2Money:DepositByUserId:request:ssr-1003\" , } }, weight = 4 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deletePrizeTableMaster 배출 확률 테이블 마스터를 삭제 지정한 배출 확률 테이블 마스터를 삭제합니다. 다음 마스터 데이터 업데이트까지는 현재 활성화된 마스터 데이터에 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item PrizeTableMaster 삭제한 배출 확률 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/lottery\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := lottery . Gs2LotteryRestClient { Session : \u0026 session , } result , err := client . DeletePrizeTableMaster ( \u0026 lottery . DeletePrizeTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PrizeTableName : pointy . String ( \"prizeTable-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Lottery\\Gs2LotteryRestClient ; use Gs2\\Lottery\\Request\\DeletePrizeTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2LotteryRestClient ( $session ); try { $result = $client -\u003e deletePrizeTableMaster ( ( new DeletePrizeTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPrizeTableName ( \"prizeTable-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.lottery.rest.Gs2LotteryRestClient ; import io.gs2.lottery.request.DeletePrizeTableMasterRequest ; import io.gs2.lottery.result.DeletePrizeTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2LotteryRestClient client = new Gs2LotteryRestClient ( session ); try { DeletePrizeTableMasterResult result = client . deletePrizeTableMaster ( new DeletePrizeTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) ); PrizeTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2LotteryRestClient ( session ); AsyncResult Gs2 . Gs2Lottery . Result . DeletePrizeTableMasterResult \u003e asyncResult = null ; yield return client . DeletePrizeTableMaster ( new Gs2 . Gs2Lottery . Request . DeletePrizeTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPrizeTableName ( \"prizeTable-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Lottery from '@/gs2/lottery' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Lottery . Gs2LotteryRestClient ( session ); try { const result = await client . deletePrizeTableMaster ( new Gs2Lottery . DeletePrizeTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withPrizeTableName ( \"prizeTable-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import lottery session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = lottery . Gs2LotteryRestClient ( session ) try : result = client . delete_prize_table_master ( lottery . DeletePrizeTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_prize_table_name ( 'prizeTable-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'lottery' ) api_result = client.delete_prize_table_master ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'lottery' ) api_result_handler = client.delete_prize_table_master_async ({ namespaceName = \"namespace-0001\" , prizeTableName = \"prizeTable-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Lottery SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Lottery SDK API 레퍼런스","url":"/ko/api_reference/lottery/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 매치메이킹 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. enableRating bool false 레이팅 계산 기능 활성화 Glicko-2 기반의 레이팅 계산 기능을 활성화할지 여부입니다. 활성화하면, 플레이어는 Vote 시스템을 통해 대전 결과를 제출하고 레이팅이 자동으로 갱신됩니다. RatingModel 마스터 데이터의 설정이 필요합니다. 기본값은 false입니다. enableDisconnectDetection 문자열 열거형 enum {   “disable”,   “enable” } “disable” 연결 끊김 감지 매치메이킹 중인 플레이어가 대기 중임을 정기적으로 보고해야 하는지 여부를 제어합니다. 활성화하면, 플레이어가 설정된 타임아웃 시간 내에 킵얼라이브를 전송하지 않을 경우 자동으로 개더링에서 퇴장 처리됩니다. 이를 통해 “고스트” 플레이어가 매치메이킹 완료를 방해하는 것을 방지합니다. 기본값은 “disable” 입니다. 정의 설명 disable 비활성화 enable 활성화 disconnectDetectionTimeoutSeconds int {enableDisconnectDetection} == “enable” ※ 15 ~ 600 연결 끊김 감지 타임아웃(초) 킵얼라이브 보고 없이 플레이어를 연결 끊김으로 간주하여 개더링에서 퇴장시키기까지의 대기 시간(초). 연결 끊김 감지가 활성화된 경우에만 적용됩니다. 15에서 600초 범위로 지정합니다. ※ enableDisconnectDetection이(가) “enable” 이면 필수 createGatheringTriggerType 문자열 열거형 enum {   “none”,   “gs2_realtime”,   “gs2_script” } “none” 개더링 생성 시 트리거 타입 새로운 개더링이 생성되었을 때 실행할 액션의 종류. GS2-Realtime의 룸 생성을 트리거하여 실시간 통신을 시작하거나, GS2-Script를 실행하여 커스텀 로직을 실행할 수 있습니다. 기본값은 “none” 입니다. 정의 설명 none 없음 gs2_realtime GS2-Realtime의 룸 생성 gs2_script GS2-Script의 실행 createGatheringTriggerRealtimeNamespaceId string {createGatheringTriggerType} == “gs2_realtime” ※ ~ 1024자 개더링 생성 시 룸을 생성할 GS2-Realtime의 네임스페이스 ※ createGatheringTriggerType이(가) “gs2_realtime” 이면 필수 createGatheringTriggerScriptId string {createGatheringTriggerType} == “gs2_script” ※ ~ 1024자 개더링 생성 시 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - createGathering ※ createGatheringTriggerType이(가) “gs2_script” 이면 필수 completeMatchmakingTriggerType 문자열 열거형 enum {   “none”,   “gs2_realtime”,   “gs2_script” } “none” 매치메이킹 완료 시 트리거 타입 매치메이킹이 완료되었을 때(모든 역할 슬롯이 채워졌을 때) 실행할 액션의 종류. 매칭된 플레이어를 대상으로 GS2-Realtime의 룸 생성을 트리거하거나, GS2-Script를 실행하여 커스텀 사후 처리 로직을 실행할 수 있습니다. 기본값은 “none” 입니다. 정의 설명 none 없음 gs2_realtime GS2-Realtime의 룸 생성 gs2_script GS2-Script의 실행 completeMatchmakingTriggerRealtimeNamespaceId string {completeMatchmakingTriggerType} == “gs2_realtime” ※ ~ 1024자 매치메이킹 완료 시 룸을 생성할 GS2-Realtime의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ completeMatchmakingTriggerType이(가) “gs2_realtime” 이면 필수 completeMatchmakingTriggerScriptId string {completeMatchmakingTriggerType} == “gs2_script” ※ ~ 1024자 매치메이킹 완료 시 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - completeMatchmaking ※ completeMatchmakingTriggerType이(가) “gs2_script” 이면 필수 enableCollaborateSeasonRating 문자열 열거형 enum {   “enable”,   “disable” } “disable” 시즌 레이팅 연계 활성화 시즌 기반 레이팅 계산을 위해 GS2-SeasonRating과의 연계를 활성화할지 여부. 활성화하면, 매치메이킹 완료 시 지정한 GS2-SeasonRating의 네임스페이스에 레이팅 계산 세션이 자동으로 생성됩니다. 기본값은 “disable” 입니다. 정의 설명 enable 활성화 disable 비활성화 collaborateSeasonRatingNamespaceId string {enableCollaborateSeasonRating} == “enable” ※ ~ 1024자 시즌 레이팅 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 매치메이킹 완료 시 레이팅 계산 세션이 생성되는 GS2-SeasonRating의 네임스페이스 GRN. 시즌 레이팅 연계가 활성화된 경우에만 적용됩니다. ※ enableCollaborateSeasonRating이(가) “enable” 이면 필수 collaborateSeasonRatingTtl int {enableCollaborateSeasonRating} == “enable” 60 60 ~ 7200 시즌 레이팅 결과 TTL(초) 매치메이킹 완료 후, GS2-SeasonRating을 통한 대전 결과 전송을 받아들이는 최대 대기 시간(초). 이 기간 내에 결과가 전송되지 않으면, 레이팅 세션은 만료됩니다. 60에서 7200초 범위로 지정합니다. 기본값은 60입니다. ※ enableCollaborateSeasonRating이(가) “enable” 이면 활성화 changeRatingScript ScriptSetting 레이팅 값이 변경되었을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - changeRating joinNotification NotificationSetting 참가 알림 새로운 플레이어가 개더링에 참가했을 때의 푸시 알림 설정. 기존 참가자에게 새로운 플레이어가 참가했음을 알려, 게임 클라이언트가 매치메이킹 UI를 업데이트할 수 있도록 합니다. leaveNotification NotificationSetting 이탈 알림 플레이어가 개더링에서 이탈했을 때의 푸시 알림 설정. 남은 참가자에게 플레이어가 이탈했음을 알려, 게임 클라이언트가 변경 사항을 반영할 수 있도록 합니다. completeNotification NotificationSetting 완료 알림 매치메이킹이 완료되었을 때(모든 역할 슬롯이 채워졌을 때)의 푸시 알림 설정. 모든 참가자에게 개더링이 가득 차 대전을 시작할 수 있음을 알립니다. changeRatingNotification NotificationSetting 레이팅 변동 알림 투표 처리 후 플레이어의 레이팅 값이 변동되었을 때의 푸시 알림 설정. 영향을 받은 플레이어에게 새로운 레이팅을 알려, 게임 클라이언트가 업데이트된 값을 표시할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 API 요청/응답 로그를 GS2-Log에 출력하기 위한 설정. 설정하면, 매치메이킹 조작(개더링 생성·참가·이탈, 투표, 레이팅 변동 등)이 모니터링 및 분석을 위해 로그로 출력됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Gathering 개더링 매치메이킹에 의해 모인 게임 플레이어 그룹을 나타내는 엔티티입니다. 매치메이킹용 파라미터를 여러 개 가지고 있으며, 파라미터를 종합적으로 판단하여 플레이어를 그룹화합니다. 플레이어는 자신의 역할·속성값·거부 리스트(함께 플레이하고 싶지 않은 사용자)를 지정하여 개더링에 참가합니다. 참가 시에는 속성값 범위 조건, 역할의 정원, 화이트리스트 제한(allowUserIds)이 검증됩니다. 모든 역할 슬롯이 정원에 도달하면 개더링은 완성 상태가 되어 매치메이킹이 완료됩니다. 개더링 이름은 UUID 형식으로 자동 생성되며, 유효기간을 설정하여 자동 정리(클린업)하는 것도 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatheringId string ※ ~ 1024자 개더링 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. attributeRanges List [] 0 ~ 5 items 모집 조건 이 개더링에 참가하기 위해 플레이어가 충족해야 하는 속성 범위 조건의 목록입니다. 각 항목은 속성 이름과 허용되는 최소값·최대값 범위를 지정합니다. 플레이어 자신의 속성값이 이 범위 내에 있지 않으면 참가할 수 없습니다. 최대 5건. capacityOfRoles List [] 1 ~ 5 items 모집 슬롯 목록 이 개더링의 모집 슬롯을 정의합니다. 각 항목은 역할 이름, 그 별칭, 그리고 해당 역할에 참가 가능한 최대 인원수를 지정합니다. 모든 역할 슬롯이 정원에 도달하면 매치메이킹이 완료됩니다. 최소 1건, 최대 5건. allowUserIds List [] 0 ~ 100 items 참가 허용 사용자 ID 목록 이 게더링에 참가하는 것이 허용된 사용자 ID의 화이트리스트입니다. 지정한 경우, 목록에 포함된 사용자만 이 게더링의 매치메이킹에 참가할 수 있습니다. 친구 전용 매치메이킹이나 초대제 매치메이킹 시나리오에 유용합니다. 최대 100건. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. expiresAt long 게더링 유효 기간 이 게더링이 자동으로 만료되어 삭제되는 시각입니다. 이 시각까지 매치메이킹이 완료되지 않으면 게더링은 정리됩니다. 지정하지 않은 경우, 매치메이킹이 완료되거나 수동으로 삭제될 때까지 게더링이 유지됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SeasonGathering 시즌 게더링 시즌 기간 동안 플레이어를 모으는 영속적인 게더링입니다. 매치메이킹 완료 후 해산하는 일반 게더링과 달리, 시즌 게더링은 시즌 동안 계속 존속하며 참가자를 축적합니다. 플레이어는 티어(GS2-Experience의 랭크에 기반)와 시즌 번호로 그룹화되며, 각 시즌 게더링에는 SeasonModel에서 정의된 최대 참가 인원 제한이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 seasonGatheringId string ※ ~ 1024자 시즌 개더링 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. name string  UUID ~ 128자 시즌 게더링명 시즌 게더링 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. participants List [] 0 ~ 1000 items 참가자 사용자 ID 목록 이 시즌 게더링에 참가한 플레이어의 사용자 ID 목록입니다. 플레이어가 참가하면 이 목록에 추가되며, 최대 참가 인원에 도달할 때까지 시즌 동안 계속 증가합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 JoinedSeasonGathering 참가 중인 시즌 게더링 특정 시즌과 티어에서 플레이어가 어느 시즌 게더링에 참가하고 있는지를 추적하는 레코드입니다. 플레이어가 시즌 게더링에 참가할 때 자동으로 생성되며, 플레이어의 현재 게더링을 빠르게 조회하기 위한 인덱스 역할을 합니다. 각 플레이어는 시즌과 티어의 조합마다 최대 1개의 시즌 게더링에 소속될 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 joinedSeasonGatheringId string ※ ~ 1024자 참가 중인 시즌 개더링 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. seasonGatheringName string  ~ 128자 시즌 게더링명 이 플레이어가 참가하고 있는 시즌 게더링의 이름입니다. 동일 시즌·티어 내의 특정 시즌 게더링 엔티티를 참조하기 위해 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 Rating 레이팅 게임 플레이어별 현재 레이팅 값을 보유하는 엔티티입니다. 플레이어가 처음 레이팅이 적용된 매치메이킹에 참가했을 때 자동으로 생성됩니다. 레이팅은 Glicko-2 알고리즘을 사용하여 계산되며, 초기 레이트 값과 레이팅의 불확실성을 나타내는 Rating Deviation(rd)을 가집니다. 대전 횟수가 늘어남에 따라 레이트 값은 플레이어의 실제 실력에 수렴해 갑니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 ratingId string ※ ~ 1024자 레이팅 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이팅 이름 레이팅 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rateValue float 1500.0 0 ~ 65535.0 레이트 값 Glicko-2 알고리즘으로 계산된 플레이어의 현재 레이팅 점수입니다. RatingModel에서 정의된 초기값(일반적으로 1500.0)이 기본값입니다. 대전 결과와 상대의 상대적인 실력에 따라 값이 증감합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Ballot 투표용지 레이팅이 적용된 매치메이킹 게임 종료 후, 각 플레이어가 대전 결과를 보고하기 위해 발급되는 투표용지입니다. 레이팅 모델 이름, 개더링 이름, 참가 인원수 등 대전의 컨텍스트 정보를 포함합니다. 각 플레이어는 서버에서 서명된 투표용지를 받아 게임 결과를 기입하여 Vote API에 제출합니다. 투표 시스템은 레이팅 계산을 확정하기 위해 제출된 투표용지의 50%를 초과하는 합의를 필요로 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID ratingName string  ~ 128자 레이팅 이름 이 대전 후의 레이팅 계산에 사용할 RatingModel의 이름입니다. 이 대전의 결과 처리에 적용되는 레이팅 시스템의 파라미터(초기값, 변동성)를 지정합니다. gatheringName string  ~ 128자 개더링 이름 대전 결과 보고 대상이 되는 개더링의 이름입니다. 특정 매치메이킹 세션을 식별하고, 동일한 대전의 모든 참가자로부터의 투표를 연결하기 위해 사용됩니다. numberOfPlayer int  2 ~ 10 참가 인원수 이 대전에 참가한 플레이어의 총 인원수입니다. 예상되는 투표 수 결정 및 합의 검증(플레이어의 50%를 초과하는 인원이 일치하는 결과를 제출해야 함)에 사용됩니다. 2에서 10 사이의 범위로 지정합니다. Vote 투표 현황 레이팅 계산을 위한 최종 대전 결과를 결정하기 위해, 특정 대전의 투표용지를 집계하는 엔티티입니다. 각 Vote는 레이팅 모델명과 게더링명의 조합으로 식별됩니다. 대전 참가자로부터 투표용지가 수집되며, 일치하는 결과를 가진 투표가 충분히 제출되면(50% 초과 합의), 투표가 완료된 것으로 간주되어 참가자의 레이팅 값이 대전 결과에 따라 갱신됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 voteId string ※ ~ 1024자 투표 상황 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. writtenBallots List [] 0 ~ 10 items 기재 완료 투표용지 목록 대전 참가자로부터 제출된 투표용지 모음입니다. 각 기재 완료 투표용지는 서명이 첨부된 투표용지와, 해당 참가자가 보고한 게임 결과(플레이어 순위)를 포함합니다. 예상 투표 수의 50%를 초과하여 일치하는 결과가 포함된 경우, 투표가 확정되고 레이팅 계산이 실행됩니다. 최대 10건. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 RatingModel 레이팅 모델 GS2에서는 레이팅 알고리즘으로 Glicko-2를 채택하고 있습니다. Glicko-2에는 여러 파라미터가 있지만, GS2-Matchmaking에서는 이를 종합적으로 나타내는 변동성이라는 하나의 파라미터로 통합하고 있습니다. 변동성은 변화의 크기를 나타내는 파라미터로, 값이 클수록 레이팅 값의 변동 폭이 커집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 ratingModelId string ※ ~ 1024자 레이팅 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialValue int 1500 100 ~ 10000 레이트 값의 초기값 플레이어가 처음 레이팅이 적용된 매치메이킹에 참가할 때 부여되는 시작 레이트 값입니다. 기본값은 1500입니다. 모든 플레이어는 동일한 레이팅에서 시작하며, 대전 결과에 따라 조정됩니다. volatility int 100 1 ~ 20000 레이팅의 변동성 각 대전 후 레이트 값이 얼마나 변동하는지를 제어하는 Glicko-2의 파라미터입니다. 값이 클수록 레이팅의 변동 폭이 커져 더 빠르게 레이팅이 조정됩니다. 값이 작을수록 레이팅이 안정되어 완만하게 변화합니다. 기본값은 100입니다. SeasonModel 시즌 모델 시즌 매치메이킹에서, 일정 기간 동안 유효한 영속 개더링의 기간·최대 참가 인원수·티어 연동 설정을 정의하는 마스터 데이터입니다. GS2-Schedule을 통해 기간을 관리하며, 필요에 따라 GS2-Experience와 연동하여 동일한 티어 내에서 영속 개더링을 형성합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParticipants int  2 ~ 1000 최대 참가 인원수 하나의 시즌 개더링에 참가할 수 있는 플레이어의 최대 인원수입니다. 이 상한에 도달하면 시즌 개더링은 만원 상태가 되어 더 이상 플레이어가 참가할 수 없게 됩니다. 2에서 1000 사이의 범위로 지정합니다. experienceModelId string ~ 1024자 티어 관리용 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 플레이어의 티어를 결정하기 위해 사용하는 GS2-Experience 경험치 모델의 GRN입니다. 이 경험치 모델에서의 플레이어 랭크가 매치메이킹의 티어로 사용되어, 비슷한 레벨의 플레이어끼리 그룹화됩니다. 지정하지 않으면 티어에 의한 그룹화가 비활성화되어, 레벨에 관계없이 모든 플레이어가 매칭됩니다. challengePeriodEventId string  ~ 1024자 챌린지 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 시즌의 유효 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 이벤트가 활성화되어 있는 동안에만 시즌 개더링의 생성·참가가 가능합니다. 이벤트 기간이 종료되면 시즌이 종료되어 새로운 매치메이킹이 불가능해집니다. AttributeRange 모집 조건 게더링에 참가하기 위한 속성의 허용 범위를 정의하는 조건입니다. 플레이어가 참가를 시도할 때, 대응하는 이름의 속성값이 지정된 최소값·최대값 범위 내에 있어야 합니다. 스킬 기반 또는 레벨 기반의 매치메이킹 필터를 작성하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 속성명 이 범위 조건을 적용할 속성의 이름입니다. 조건이 평가되려면 플레이어의 속성 목록에 있는 속성명과 일치해야 합니다. min int 0 0 ~ 2147483646 속성값의 최소값 게더링에 참가하기 위해 필요한 속성값의 하한(해당 값 포함)입니다. 속성값이 이 임계값보다 낮은 플레이어는 참가할 수 없습니다. max int 0 0 ~ 2147483646 속성값의 최대값 게더링에 참가 가능한 속성값의 상한(해당 값 포함)입니다. 속성값이 이 임계값을 초과하는 플레이어는 참가할 수 없습니다. CapacityOfRole 모집 슬롯 개더링 내 특정 역할에 대한 모집 슬롯을 정의합니다. 각 역할은 이름, 선택적 별칭, 최대 정원, 현재 참가 중인 플레이어 목록을 가집니다. 역할 별칭을 사용하면 유연한 매칭이 가능합니다. 예를 들어 “탱크” 역할에 “팔라딘\"과 “나이트\"라는 별칭을 설정하면, 둘 중 어느 하위 역할을 지정한 플레이어도 탱크 슬롯을 채울 수 있습니다. 모든 역할의 참가자가 정원에 도달하면, 개더링의 매치메이킹이 완료됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 roleName string “default” ~ 128자 역할 이름 이 모집 슬롯의 역할 이름. 역할 구분이 없는 일반적인 매치메이킹의 경우, 기본값 “default\"를 사용합니다. 역할 기반 매치메이킹(예: “탱크”, “힐러”, “어태커”)의 경우, 여기에 역할 카테고리 이름을 지정합니다. roleAliases List [] 0 ~ 9 items 역할 이름 별칭 목록 이 모집 슬롯에서 허용되는 대체 역할 이름. 이러한 별칭 중 하나를 역할 이름으로 지정한 플레이어는 이 슬롯에 매칭됩니다. 하위 역할 매칭을 가능하게 합니다. 예: “탱크” 역할에 대한 “팔라딘\"과 “나이트” 별칭. 최대 9건. capacity int  1 ~ 256 모집 인원수 이 역할 슬롯을 채울 수 있는 플레이어의 최대 수. 참가자 수가 이 정원에 도달하면, 역할은 가득 차게 되어 더 이상 이 역할의 플레이어는 참가할 수 없습니다. 1에서 256 범위로 지정합니다. participants List [] 0 ~ 1000 items 참가자 플레이어 정보 목록 현재 이 역할 슬롯을 차지하고 있는 플레이어의 목록. 플레이어는 개더링에 참가하면 추가되고, 이탈하면 삭제됩니다. 각 플레이어 항목에는 사용자 ID, 속성, 역할 이름, 거부 목록이 포함됩니다. 사용자 ID를 기준으로 고유성이 보장됩니다. Attribute 속성값 매치메이킹을 위해 플레이어에게 연결된 이름이 지정된 수치 속성입니다. 어떤 플레이어가 참가할 수 있는지 필터링하기 위해 개더링의 AttributeRange 조건과 함께 사용됩니다. 예를 들어 값이 50인 “레벨” 속성을 가진 플레이어는 레벨 40~60을 요구하는 개더링에 매칭됩니다. 각 플레이어는 최대 5개의 속성을 가질 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 속성 이름 속성 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. value int 0 0 ~ 2147483646 속성값 이 플레이어의 속성 수치입니다. 매치메이킹 시 개더링의 AttributeRange 조건에서 지정된 최소값·최대값 범위와 대조됩니다. Player 참가자 플레이어 정보 매치메이킹에 참가하는 플레이어를 나타내며, ID, 속성, 역할, 거부 목록을 포함합니다. 게더링에 참가할 때, 플레이어의 속성값, 희망하는 역할, 함께 플레이하고 싶지 않은 사용자 목록을 가진 Player 오브젝트가 생성됩니다. 플레이어의 속성은 게더링의 속성 범위 조건과 대조되며, 거부 목록은 원치 않는 페어링을 방지하기 위해 크로스체크됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID attributes List [] 0 ~ 5 items 속성값 목록 매치메이킹 조건 평가에 사용되는 플레이어의 이름이 지정된 수치 속성입니다. 각 속성은 게더링의 AttributeRange 조건과 대조되어 참가 자격이 판정됩니다. 게더링 생성 시 범위 조건을 설정하는 경우, 플레이어 자신의 속성값도 그 범위 내에 있어야 합니다. 최대 5건. roleName string “default” ~ 128자 역할명 이 플레이어가 게더링에서 채우고자 하는 역할입니다. 역할 구분이 없는 일반적인 매치메이킹의 경우 기본값 “default\"를 사용합니다. 역할 기반 매치메이킹의 경우, 플레이어의 구체적인 역할(예: “팔라딘”, “나이트”)을 지정하며, 게더링의 정원 정의에 있는 역할명 및 별칭과 매칭됩니다. denyUserIds List [] 0 ~ 100 items 매칭 거부 사용자 ID 목록 이 플레이어가 매칭을 거부하는 사용자 ID의 블랙리스트입니다. 매치메이킹 시, 게더링에 이미 참가한 플레이어가 이 목록에 포함되어 있으면 해당 게더링에 참가할 수 없습니다. 반대로, 기존 참가자의 거부 목록에 이 플레이어가 포함되어 있는 경우에도 참가가 차단됩니다. 최대 100건. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 GameResult 대전 결과 Vote 시스템을 통한 레이팅 계산에 사용되는, 대전에서 한 플레이어의 결과를 나타냅니다. 각 GameResult 항목은 사용자 ID와 해당 대전에서의 순위(최종 순위)를 짝지어 나타냅니다. 순위 값이 작을수록 높은 성적을 나타냅니다(1위 = rank 1). 순위가 같은 플레이어는 무승부로 처리됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rank int  0 ~ 2147483646 순위 대전에서 플레이어의 최종 순위입니다. 1이 최상위(승자)입니다. Glicko-2 알고리즘에 의한 레이팅 변동 계산에 사용됩니다. 상위 플레이어는 레이팅이 상승하고, 하위 플레이어는 레이팅이 하락합니다. 순위가 같은 플레이어는 무승부로 처리됩니다. userId string  ~ 128자 사용자ID SignedBallot 서명된 투표용지 진위를 검증하기 위한 디지털 서명이 부여된 투표용지입니다. 매치메이킹 완료 후 서버가 플레이어에게 서명된 투표용지를 발급하여, 정당한 참가자만이 대전 결과를 제출할 수 있도록 보장합니다. 투표용지가 Vote API에 제출될 때 서명이 검증되어, 대전 컨텍스트(레이팅 이름, 개더링 이름, 참가 인원수)의 변조를 방지합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 body string  ~ 1024자 투표용지 본문 디지털 서명의 대상이 되는 직렬화된 투표용지 데이터입니다. 서명과 대조하여 검증 가능한 형식으로, 투표 컨텍스트(사용자 ID, 레이팅 이름, 개더링 이름, 참가 인원수)를 포함합니다. signature string  ~ 256자 서명 투표용지 본문의 진위성과 무결성을 검증하기 위한 디지털 서명입니다. GS2-Key의 암호화 키를 사용하여 서버에서 생성되며, 투표용지 제출 시 위조나 변조를 방지하기 위해 검증됩니다. WrittenBallot 기재 완료 투표용지 대전 결과를 기입한 투표용지를 나타내는 데이터 모델입니다. 사용자 ID와 순위를 포함한 투표 내용을 보유하며, 서명이 첨부된 상태로 Vote API에 전달됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 ballot Ballot  투표용지 gameResults List 0 ~ 10 items 대전 결과 목록 TimeSpan 시간 간격(기간) 일·시간·분으로 구성된 시간의 길이를 나타냅니다. 현재 시각으로부터의 게더링 유효 기간 등, 상대적인 시간 오프셋을 지정하는 데 사용됩니다. 전체 기간은 세 구성 요소를 합산하여 계산됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 days int 0 0 ~ 365 일수 기간에서의 일수입니다. 최대 365일. 기본값은 0입니다. hours int 0 0 ~ 24 시간 기간에서의 시간 수입니다. 최대 24시간. 기본값은 0입니다. minutes int 0 0 ~ 60 분 기간에서의 분 수입니다. 최대 60분. 기본값은 0입니다. CurrentModelMaster 현재 활성화된 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Matchmaking 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 RatingModelMaster 레이팅 모델 마스터 레이팅 모델 마스터는 게임 내에서 사용되는 레이팅 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행하면 실제로 게임에서 참조되는 레이팅 모델로 반영됩니다. GS2에서는 레이팅 알고리즘으로 Glicko-2를 채택하고 있습니다. Glicko-2에는 여러 파라미터가 있지만, GS2-Matchmaking에서는 이를 종합적으로 나타내는 변동성이라는 하나의 파라미터로 집약하고 있습니다. 변동성은 변화의 크기를 나타내는 파라미터로, 값이 클수록 레이팅 값의 변동량이 커집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 ratingModelId string ※ ~ 1024자 레이팅 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 initialValue int 1500 100 ~ 10000 레이트 값의 초기값 플레이어가 처음 레이팅이 적용된 매치메이킹에 참가할 때 부여되는 시작 레이트 값입니다. 기본값은 1500입니다. 모든 플레이어는 동일한 레이팅에서 시작하며, 대전 결과에 따라 조정됩니다. volatility int 100 1 ~ 20000 레이팅의 변동성 각 대전 후 레이트 값이 얼마나 변동하는지를 제어하는 Glicko-2의 파라미터입니다. 값이 클수록 레이팅의 변동 폭이 커져 더 빠르게 레이팅이 조정됩니다. 값이 작을수록 레이팅이 안정되어 완만하게 변화합니다. 기본값은 100입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SeasonModelMaster 시즌 모델 마스터 시즌 모델 마스터는 게임 내에서 사용되는 시즌 모델을 편집·관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써, 실제로 게임에서 참조되는 시즌 모델로 반영됩니다. 시즌 모델은 시즌 매치메이킹에서 일정 기간 동안 유효한 영속적 게더링의 기간·최대 참가 인원·티어 연동 설정을 정의하는 마스터 데이터입니다. 기간은 GS2-Schedule에 의해 관리되며, 필요에 따라 GS2-Experience와 연동하여 동일 티어 내에서 영속적 게더링을 형성합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델명 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 maximumParticipants int  2 ~ 1000 최대 참가 인원수 하나의 시즌 개더링에 참가할 수 있는 플레이어의 최대 인원수입니다. 이 상한에 도달하면 시즌 개더링은 만원 상태가 되어 더 이상 플레이어가 참가할 수 없게 됩니다. 2에서 1000 사이의 범위로 지정합니다. experienceModelId string ~ 1024자 티어 관리용 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 플레이어의 티어를 결정하기 위해 사용하는 GS2-Experience 경험치 모델의 GRN입니다. 이 경험치 모델에서의 플레이어 랭크가 매치메이킹의 티어로 사용되어, 비슷한 레벨의 플레이어끼리 그룹화됩니다. 지정하지 않으면 티어에 의한 그룹화가 비활성화되어, 레벨에 관계없이 모든 플레이어가 매칭됩니다. challengePeriodEventId string  ~ 1024자 챌린지 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 시즌의 유효 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 이벤트가 활성화되어 있는 동안에만 시즌 개더링의 생성·참가가 가능합니다. 이벤트 기간이 종료되면 시즌이 종료되어 새로운 매치메이킹이 불가능해집니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 matchmaking . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeNamespacesRequest ; import io.gs2.matchmaking.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Matchmaking . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Matchmaking . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_namespaces ( matchmaking . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 매치메이킹 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. enableRating bool false 레이팅 계산 기능 활성화 Glicko-2 기반의 레이팅 계산 기능을 활성화할지 여부입니다. 활성화하면, 플레이어는 Vote 시스템을 통해 대전 결과를 제출하고 레이팅이 자동으로 갱신됩니다. RatingModel 마스터 데이터의 설정이 필요합니다. 기본값은 false입니다. enableDisconnectDetection 문자열 열거형 enum {   “disable”,   “enable” } “disable” 연결 끊김 감지 매치메이킹 중인 플레이어가 대기 중임을 정기적으로 보고해야 하는지 여부를 제어합니다. 활성화하면, 플레이어가 설정된 타임아웃 시간 내에 킵얼라이브를 전송하지 않을 경우 자동으로 개더링에서 퇴장 처리됩니다. 이를 통해 “고스트” 플레이어가 매치메이킹 완료를 방해하는 것을 방지합니다. 기본값은 “disable” 입니다. 정의 설명 disable 비활성화 enable 활성화 disconnectDetectionTimeoutSeconds int {enableDisconnectDetection} == “enable” ※ 15 ~ 600 연결 끊김 감지 타임아웃(초) 킵얼라이브 보고 없이 플레이어를 연결 끊김으로 간주하여 개더링에서 퇴장시키기까지의 대기 시간(초). 연결 끊김 감지가 활성화된 경우에만 적용됩니다. 15에서 600초 범위로 지정합니다. ※ enableDisconnectDetection이(가) “enable” 이면 필수 createGatheringTriggerType 문자열 열거형 enum {   “none”,   “gs2_realtime”,   “gs2_script” } “none” 개더링 생성 시 트리거 타입 새로운 개더링이 생성되었을 때 실행할 액션의 종류. GS2-Realtime의 룸 생성을 트리거하여 실시간 통신을 시작하거나, GS2-Script를 실행하여 커스텀 로직을 실행할 수 있습니다. 기본값은 “none” 입니다. 정의 설명 none 없음 gs2_realtime GS2-Realtime의 룸 생성 gs2_script GS2-Script의 실행 createGatheringTriggerRealtimeNamespaceId string {createGatheringTriggerType} == “gs2_realtime” ※ ~ 1024자 개더링 생성 시 룸을 생성할 GS2-Realtime의 네임스페이스 ※ createGatheringTriggerType이(가) “gs2_realtime” 이면 필수 createGatheringTriggerScriptId string {createGatheringTriggerType} == “gs2_script” ※ ~ 1024자 개더링 생성 시 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - createGathering ※ createGatheringTriggerType이(가) “gs2_script” 이면 필수 completeMatchmakingTriggerType 문자열 열거형 enum {   “none”,   “gs2_realtime”,   “gs2_script” } “none” 매치메이킹 완료 시 트리거 타입 매치메이킹이 완료되었을 때(모든 역할 슬롯이 채워졌을 때) 실행할 액션의 종류. 매칭된 플레이어를 대상으로 GS2-Realtime의 룸 생성을 트리거하거나, GS2-Script를 실행하여 커스텀 사후 처리 로직을 실행할 수 있습니다. 기본값은 “none” 입니다. 정의 설명 none 없음 gs2_realtime GS2-Realtime의 룸 생성 gs2_script GS2-Script의 실행 completeMatchmakingTriggerRealtimeNamespaceId string {completeMatchmakingTriggerType} == “gs2_realtime” ※ ~ 1024자 매치메이킹 완료 시 룸을 생성할 GS2-Realtime의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ completeMatchmakingTriggerType이(가) “gs2_realtime” 이면 필수 completeMatchmakingTriggerScriptId string {completeMatchmakingTriggerType} == “gs2_script” ※ ~ 1024자 매치메이킹 완료 시 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - completeMatchmaking ※ completeMatchmakingTriggerType이(가) “gs2_script” 이면 필수 enableCollaborateSeasonRating 문자열 열거형 enum {   “enable”,   “disable” } “disable” 시즌 레이팅 연계 활성화 시즌 기반 레이팅 계산을 위해 GS2-SeasonRating과의 연계를 활성화할지 여부. 활성화하면, 매치메이킹 완료 시 지정한 GS2-SeasonRating의 네임스페이스에 레이팅 계산 세션이 자동으로 생성됩니다. 기본값은 “disable” 입니다. 정의 설명 enable 활성화 disable 비활성화 collaborateSeasonRatingNamespaceId string {enableCollaborateSeasonRating} == “enable” ※ ~ 1024자 시즌 레이팅 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 매치메이킹 완료 시 레이팅 계산 세션이 생성되는 GS2-SeasonRating의 네임스페이스 GRN. 시즌 레이팅 연계가 활성화된 경우에만 적용됩니다. ※ enableCollaborateSeasonRating이(가) “enable” 이면 필수 collaborateSeasonRatingTtl int {enableCollaborateSeasonRating} == “enable” 60 60 ~ 7200 시즌 레이팅 결과 TTL(초) 매치메이킹 완료 후, GS2-SeasonRating을 통한 대전 결과 전송을 받아들이는 최대 대기 시간(초). 이 기간 내에 결과가 전송되지 않으면, 레이팅 세션은 만료됩니다. 60에서 7200초 범위로 지정합니다. 기본값은 60입니다. ※ enableCollaborateSeasonRating이(가) “enable” 이면 필수 changeRatingScript ScriptSetting 레이팅 값이 변경되었을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - changeRating joinNotification NotificationSetting 참가 알림 새로운 플레이어가 개더링에 참가했을 때의 푸시 알림 설정. 기존 참가자에게 새로운 플레이어가 참가했음을 알려, 게임 클라이언트가 매치메이킹 UI를 업데이트할 수 있도록 합니다. leaveNotification NotificationSetting 이탈 알림 플레이어가 개더링에서 이탈했을 때의 푸시 알림 설정. 남은 참가자에게 플레이어가 이탈했음을 알려, 게임 클라이언트가 변경 사항을 반영할 수 있도록 합니다. completeNotification NotificationSetting 완료 알림 매치메이킹이 완료되었을 때(모든 역할 슬롯이 채워졌을 때)의 푸시 알림 설정. 모든 참가자에게 개더링이 가득 차 대전을 시작할 수 있음을 알립니다. changeRatingNotification NotificationSetting 레이팅 변동 알림 투표 처리 후 플레이어의 레이팅 값이 변동되었을 때의 푸시 알림 설정. 영향을 받은 플레이어에게 새로운 레이팅을 알려, 게임 클라이언트가 업데이트된 값을 표시할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 API 요청/응답 로그를 GS2-Log에 출력하기 위한 설정. 설정하면, 매치메이킹 조작(개더링 생성·참가·이탈, 투표, 레이팅 변동 등)이 모니터링 및 분석을 위해 로그로 출력됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 matchmaking . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , EnableRating : pointy . Bool ( true ), EnableDisconnectDetection : nil , DisconnectDetectionTimeoutSeconds : nil , CreateGatheringTriggerType : pointy . String ( \"none\" ), CreateGatheringTriggerRealtimeNamespaceId : nil , CreateGatheringTriggerScriptId : nil , CompleteMatchmakingTriggerType : pointy . String ( \"none\" ), CompleteMatchmakingTriggerRealtimeNamespaceId : nil , CompleteMatchmakingTriggerScriptId : nil , EnableCollaborateSeasonRating : pointy . String ( \"disable\" ), CollaborateSeasonRatingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ), CollaborateSeasonRatingTtl : pointy . Int32 ( 60 ), ChangeRatingScript : nil , JoinNotification : nil , LeaveNotification : nil , CompleteNotification : nil , ChangeRatingNotification : nil , LogSetting : \u0026 matchmaking . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withEnableRating ( true ) -\u003e withEnableDisconnectDetection ( null ) -\u003e withDisconnectDetectionTimeoutSeconds ( null ) -\u003e withCreateGatheringTriggerType ( \"none\" ) -\u003e withCreateGatheringTriggerRealtimeNamespaceId ( null ) -\u003e withCreateGatheringTriggerScriptId ( null ) -\u003e withCompleteMatchmakingTriggerType ( \"none\" ) -\u003e withCompleteMatchmakingTriggerRealtimeNamespaceId ( null ) -\u003e withCompleteMatchmakingTriggerScriptId ( null ) -\u003e withEnableCollaborateSeasonRating ( \"disable\" ) -\u003e withCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) -\u003e withCollaborateSeasonRatingTtl ( 60 ) -\u003e withChangeRatingScript ( null ) -\u003e withJoinNotification ( null ) -\u003e withLeaveNotification ( null ) -\u003e withCompleteNotification ( null ) -\u003e withChangeRatingNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Matchmaking\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CreateNamespaceRequest ; import io.gs2.matchmaking.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withEnableRating ( true ) . withEnableDisconnectDetection ( null ) . withDisconnectDetectionTimeoutSeconds ( null ) . withCreateGatheringTriggerType ( \"none\" ) . withCreateGatheringTriggerRealtimeNamespaceId ( null ) . withCreateGatheringTriggerScriptId ( null ) . withCompleteMatchmakingTriggerType ( \"none\" ) . withCompleteMatchmakingTriggerRealtimeNamespaceId ( null ) . withCompleteMatchmakingTriggerScriptId ( null ) . withEnableCollaborateSeasonRating ( \"disable\" ) . withCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) . withCollaborateSeasonRatingTtl ( 60 ) . withChangeRatingScript ( null ) . withJoinNotification ( null ) . withLeaveNotification ( null ) . withCompleteNotification ( null ) . withChangeRatingNotification ( null ) . withLogSetting ( new io . gs2 . matchmaking . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Matchmaking . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithEnableRating ( true ) . WithEnableDisconnectDetection ( null ) . WithDisconnectDetectionTimeoutSeconds ( null ) . WithCreateGatheringTriggerType ( \"none\" ) . WithCreateGatheringTriggerRealtimeNamespaceId ( null ) . WithCreateGatheringTriggerScriptId ( null ) . WithCompleteMatchmakingTriggerType ( \"none\" ) . WithCompleteMatchmakingTriggerRealtimeNamespaceId ( null ) . WithCompleteMatchmakingTriggerScriptId ( null ) . WithEnableCollaborateSeasonRating ( \"disable\" ) . WithCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) . WithCollaborateSeasonRatingTtl ( 60 ) . WithChangeRatingScript ( null ) . WithJoinNotification ( null ) . WithLeaveNotification ( null ) . WithCompleteNotification ( null ) . WithChangeRatingNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Matchmaking . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Matchmaking . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withEnableRating ( true ) . withEnableDisconnectDetection ( null ) . withDisconnectDetectionTimeoutSeconds ( null ) . withCreateGatheringTriggerType ( \"none\" ) . withCreateGatheringTriggerRealtimeNamespaceId ( null ) . withCreateGatheringTriggerScriptId ( null ) . withCompleteMatchmakingTriggerType ( \"none\" ) . withCompleteMatchmakingTriggerRealtimeNamespaceId ( null ) . withCompleteMatchmakingTriggerScriptId ( null ) . withEnableCollaborateSeasonRating ( \"disable\" ) . withCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) . withCollaborateSeasonRatingTtl ( 60 ) . withChangeRatingScript ( null ) . withJoinNotification ( null ) . withLeaveNotification ( null ) . withCompleteNotification ( null ) . withChangeRatingNotification ( null ) . withLogSetting ( new Gs2Matchmaking . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . create_namespace ( matchmaking . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_enable_rating ( True ) . with_enable_disconnect_detection ( None ) . with_disconnect_detection_timeout_seconds ( None ) . with_create_gathering_trigger_type ( 'none' ) . with_create_gathering_trigger_realtime_namespace_id ( None ) . with_create_gathering_trigger_script_id ( None ) . with_complete_matchmaking_trigger_type ( 'none' ) . with_complete_matchmaking_trigger_realtime_namespace_id ( None ) . with_complete_matchmaking_trigger_script_id ( None ) . with_enable_collaborate_season_rating ( 'disable' ) . with_collaborate_season_rating_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001' ) . with_collaborate_season_rating_ttl ( 60 ) . with_change_rating_script ( None ) . with_join_notification ( None ) . with_leave_notification ( None ) . with_complete_notification ( None ) . with_change_rating_notification ( None ) . with_log_setting ( matchmaking . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , enableRating = true , enableDisconnectDetection = nil , disconnectDetectionTimeoutSeconds = nil , createGatheringTriggerType = \"none\" , createGatheringTriggerRealtimeNamespaceId = nil , createGatheringTriggerScriptId = nil , completeMatchmakingTriggerType = \"none\" , completeMatchmakingTriggerRealtimeNamespaceId = nil , completeMatchmakingTriggerScriptId = nil , enableCollaborateSeasonRating = \"disable\" , collaborateSeasonRatingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" , collaborateSeasonRatingTtl = 60 , changeRatingScript = nil , joinNotification = nil , leaveNotification = nil , completeNotification = nil , changeRatingNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , enableRating = true , enableDisconnectDetection = nil , disconnectDetectionTimeoutSeconds = nil , createGatheringTriggerType = \"none\" , createGatheringTriggerRealtimeNamespaceId = nil , createGatheringTriggerScriptId = nil , completeMatchmakingTriggerType = \"none\" , completeMatchmakingTriggerRealtimeNamespaceId = nil , completeMatchmakingTriggerScriptId = nil , enableCollaborateSeasonRating = \"disable\" , collaborateSeasonRatingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" , collaborateSeasonRatingTtl = 60 , changeRatingScript = nil , joinNotification = nil , leaveNotification = nil , completeNotification = nil , changeRatingNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 matchmaking . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetNamespaceStatusRequest ; import io.gs2.matchmaking.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Matchmaking . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Matchmaking . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_namespace_status ( matchmaking . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 matchmaking . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetNamespaceRequest ; import io.gs2.matchmaking.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Matchmaking . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Matchmaking . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_namespace ( matchmaking . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 매치메이킹 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. enableRating bool false 레이팅 계산 기능 활성화 Glicko-2 기반의 레이팅 계산 기능을 활성화할지 여부입니다. 활성화하면, 플레이어는 Vote 시스템을 통해 대전 결과를 제출하고 레이팅이 자동으로 갱신됩니다. RatingModel 마스터 데이터의 설정이 필요합니다. 기본값은 false입니다. enableDisconnectDetection 문자열 열거형 enum {   “disable”,   “enable” } “disable” 연결 끊김 감지 매치메이킹 중인 플레이어가 대기 중임을 정기적으로 보고해야 하는지 여부를 제어합니다. 활성화하면, 플레이어가 설정된 타임아웃 시간 내에 킵얼라이브를 전송하지 않을 경우 자동으로 개더링에서 퇴장 처리됩니다. 이를 통해 “고스트” 플레이어가 매치메이킹 완료를 방해하는 것을 방지합니다. 기본값은 “disable” 입니다. 정의 설명 disable 비활성화 enable 활성화 disconnectDetectionTimeoutSeconds int {enableDisconnectDetection} == “enable” ※ 15 ~ 600 연결 끊김 감지 타임아웃(초) 킵얼라이브 보고 없이 플레이어를 연결 끊김으로 간주하여 개더링에서 퇴장시키기까지의 대기 시간(초). 연결 끊김 감지가 활성화된 경우에만 적용됩니다. 15에서 600초 범위로 지정합니다. ※ enableDisconnectDetection이(가) “enable” 이면 필수 createGatheringTriggerType 문자열 열거형 enum {   “none”,   “gs2_realtime”,   “gs2_script” } “none” 개더링 생성 시 트리거 타입 새로운 개더링이 생성되었을 때 실행할 액션의 종류. GS2-Realtime의 룸 생성을 트리거하여 실시간 통신을 시작하거나, GS2-Script를 실행하여 커스텀 로직을 실행할 수 있습니다. 기본값은 “none” 입니다. 정의 설명 none 없음 gs2_realtime GS2-Realtime의 룸 생성 gs2_script GS2-Script의 실행 createGatheringTriggerRealtimeNamespaceId string {createGatheringTriggerType} == “gs2_realtime” ※ ~ 1024자 개더링 생성 시 룸을 생성할 GS2-Realtime의 네임스페이스 ※ createGatheringTriggerType이(가) “gs2_realtime” 이면 필수 createGatheringTriggerScriptId string {createGatheringTriggerType} == “gs2_script” ※ ~ 1024자 개더링 생성 시 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - createGathering ※ createGatheringTriggerType이(가) “gs2_script” 이면 필수 completeMatchmakingTriggerType 문자열 열거형 enum {   “none”,   “gs2_realtime”,   “gs2_script” } “none” 매치메이킹 완료 시 트리거 타입 매치메이킹이 완료되었을 때(모든 역할 슬롯이 채워졌을 때) 실행할 액션의 종류. 매칭된 플레이어를 대상으로 GS2-Realtime의 룸 생성을 트리거하거나, GS2-Script를 실행하여 커스텀 사후 처리 로직을 실행할 수 있습니다. 기본값은 “none” 입니다. 정의 설명 none 없음 gs2_realtime GS2-Realtime의 룸 생성 gs2_script GS2-Script의 실행 completeMatchmakingTriggerRealtimeNamespaceId string {completeMatchmakingTriggerType} == “gs2_realtime” ※ ~ 1024자 매치메이킹 완료 시 룸을 생성할 GS2-Realtime의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ completeMatchmakingTriggerType이(가) “gs2_realtime” 이면 필수 completeMatchmakingTriggerScriptId string {completeMatchmakingTriggerType} == “gs2_script” ※ ~ 1024자 매치메이킹 완료 시 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - completeMatchmaking ※ completeMatchmakingTriggerType이(가) “gs2_script” 이면 필수 enableCollaborateSeasonRating 문자열 열거형 enum {   “enable”,   “disable” } “disable” 시즌 레이팅 연계 활성화 시즌 기반 레이팅 계산을 위해 GS2-SeasonRating과의 연계를 활성화할지 여부. 활성화하면, 매치메이킹 완료 시 지정한 GS2-SeasonRating의 네임스페이스에 레이팅 계산 세션이 자동으로 생성됩니다. 기본값은 “disable” 입니다. 정의 설명 enable 활성화 disable 비활성화 collaborateSeasonRatingNamespaceId string {enableCollaborateSeasonRating} == “enable” ※ ~ 1024자 시즌 레이팅 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 매치메이킹 완료 시 레이팅 계산 세션이 생성되는 GS2-SeasonRating의 네임스페이스 GRN. 시즌 레이팅 연계가 활성화된 경우에만 적용됩니다. ※ enableCollaborateSeasonRating이(가) “enable” 이면 필수 collaborateSeasonRatingTtl int {enableCollaborateSeasonRating} == “enable” 60 60 ~ 7200 시즌 레이팅 결과 TTL(초) 매치메이킹 완료 후, GS2-SeasonRating을 통한 대전 결과 전송을 받아들이는 최대 대기 시간(초). 이 기간 내에 결과가 전송되지 않으면, 레이팅 세션은 만료됩니다. 60에서 7200초 범위로 지정합니다. 기본값은 60입니다. ※ enableCollaborateSeasonRating이(가) “enable” 이면 필수 changeRatingScript ScriptSetting 레이팅 값이 변경되었을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - changeRating joinNotification NotificationSetting 참가 알림 새로운 플레이어가 개더링에 참가했을 때의 푸시 알림 설정. 기존 참가자에게 새로운 플레이어가 참가했음을 알려, 게임 클라이언트가 매치메이킹 UI를 업데이트할 수 있도록 합니다. leaveNotification NotificationSetting 이탈 알림 플레이어가 개더링에서 이탈했을 때의 푸시 알림 설정. 남은 참가자에게 플레이어가 이탈했음을 알려, 게임 클라이언트가 변경 사항을 반영할 수 있도록 합니다. completeNotification NotificationSetting 완료 알림 매치메이킹이 완료되었을 때(모든 역할 슬롯이 채워졌을 때)의 푸시 알림 설정. 모든 참가자에게 개더링이 가득 차 대전을 시작할 수 있음을 알립니다. changeRatingNotification NotificationSetting 레이팅 변동 알림 투표 처리 후 플레이어의 레이팅 값이 변동되었을 때의 푸시 알림 설정. 영향을 받은 플레이어에게 새로운 레이팅을 알려, 게임 클라이언트가 업데이트된 값을 표시할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 API 요청/응답 로그를 GS2-Log에 출력하기 위한 설정. 설정하면, 매치메이킹 조작(개더링 생성·참가·이탈, 투표, 레이팅 변동 등)이 모니터링 및 분석을 위해 로그로 출력됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 matchmaking . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , EnableRating : pointy . Bool ( true ), EnableDisconnectDetection : nil , DisconnectDetectionTimeoutSeconds : nil , CreateGatheringTriggerType : pointy . String ( \"none\" ), CreateGatheringTriggerRealtimeNamespaceId : nil , CreateGatheringTriggerScriptId : nil , CompleteMatchmakingTriggerType : pointy . String ( \"none\" ), CompleteMatchmakingTriggerRealtimeNamespaceId : nil , CompleteMatchmakingTriggerScriptId : nil , EnableCollaborateSeasonRating : pointy . String ( \"enable\" ), CollaborateSeasonRatingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ), CollaborateSeasonRatingTtl : pointy . Int32 ( 60 ), ChangeRatingScript : nil , JoinNotification : nil , LeaveNotification : nil , CompleteNotification : nil , ChangeRatingNotification : nil , LogSetting : \u0026 matchmaking . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withEnableRating ( true ) -\u003e withEnableDisconnectDetection ( null ) -\u003e withDisconnectDetectionTimeoutSeconds ( null ) -\u003e withCreateGatheringTriggerType ( \"none\" ) -\u003e withCreateGatheringTriggerRealtimeNamespaceId ( null ) -\u003e withCreateGatheringTriggerScriptId ( null ) -\u003e withCompleteMatchmakingTriggerType ( \"none\" ) -\u003e withCompleteMatchmakingTriggerRealtimeNamespaceId ( null ) -\u003e withCompleteMatchmakingTriggerScriptId ( null ) -\u003e withEnableCollaborateSeasonRating ( \"enable\" ) -\u003e withCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) -\u003e withCollaborateSeasonRatingTtl ( 60 ) -\u003e withChangeRatingScript ( null ) -\u003e withJoinNotification ( null ) -\u003e withLeaveNotification ( null ) -\u003e withCompleteNotification ( null ) -\u003e withChangeRatingNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Matchmaking\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.UpdateNamespaceRequest ; import io.gs2.matchmaking.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withEnableRating ( true ) . withEnableDisconnectDetection ( null ) . withDisconnectDetectionTimeoutSeconds ( null ) . withCreateGatheringTriggerType ( \"none\" ) . withCreateGatheringTriggerRealtimeNamespaceId ( null ) . withCreateGatheringTriggerScriptId ( null ) . withCompleteMatchmakingTriggerType ( \"none\" ) . withCompleteMatchmakingTriggerRealtimeNamespaceId ( null ) . withCompleteMatchmakingTriggerScriptId ( null ) . withEnableCollaborateSeasonRating ( \"enable\" ) . withCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) . withCollaborateSeasonRatingTtl ( 60 ) . withChangeRatingScript ( null ) . withJoinNotification ( null ) . withLeaveNotification ( null ) . withCompleteNotification ( null ) . withChangeRatingNotification ( null ) . withLogSetting ( new io . gs2 . matchmaking . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Matchmaking . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithEnableRating ( true ) . WithEnableDisconnectDetection ( null ) . WithDisconnectDetectionTimeoutSeconds ( null ) . WithCreateGatheringTriggerType ( \"none\" ) . WithCreateGatheringTriggerRealtimeNamespaceId ( null ) . WithCreateGatheringTriggerScriptId ( null ) . WithCompleteMatchmakingTriggerType ( \"none\" ) . WithCompleteMatchmakingTriggerRealtimeNamespaceId ( null ) . WithCompleteMatchmakingTriggerScriptId ( null ) . WithEnableCollaborateSeasonRating ( \"enable\" ) . WithCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) . WithCollaborateSeasonRatingTtl ( 60 ) . WithChangeRatingScript ( null ) . WithJoinNotification ( null ) . WithLeaveNotification ( null ) . WithCompleteNotification ( null ) . WithChangeRatingNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Matchmaking . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Matchmaking . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withEnableRating ( true ) . withEnableDisconnectDetection ( null ) . withDisconnectDetectionTimeoutSeconds ( null ) . withCreateGatheringTriggerType ( \"none\" ) . withCreateGatheringTriggerRealtimeNamespaceId ( null ) . withCreateGatheringTriggerScriptId ( null ) . withCompleteMatchmakingTriggerType ( \"none\" ) . withCompleteMatchmakingTriggerRealtimeNamespaceId ( null ) . withCompleteMatchmakingTriggerScriptId ( null ) . withEnableCollaborateSeasonRating ( \"enable\" ) . withCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) . withCollaborateSeasonRatingTtl ( 60 ) . withChangeRatingScript ( null ) . withJoinNotification ( null ) . withLeaveNotification ( null ) . withCompleteNotification ( null ) . withChangeRatingNotification ( null ) . withLogSetting ( new Gs2Matchmaking . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . update_namespace ( matchmaking . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_enable_rating ( True ) . with_enable_disconnect_detection ( None ) . with_disconnect_detection_timeout_seconds ( None ) . with_create_gathering_trigger_type ( 'none' ) . with_create_gathering_trigger_realtime_namespace_id ( None ) . with_create_gathering_trigger_script_id ( None ) . with_complete_matchmaking_trigger_type ( 'none' ) . with_complete_matchmaking_trigger_realtime_namespace_id ( None ) . with_complete_matchmaking_trigger_script_id ( None ) . with_enable_collaborate_season_rating ( 'enable' ) . with_collaborate_season_rating_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001' ) . with_collaborate_season_rating_ttl ( 60 ) . with_change_rating_script ( None ) . with_join_notification ( None ) . with_leave_notification ( None ) . with_complete_notification ( None ) . with_change_rating_notification ( None ) . with_log_setting ( matchmaking . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , enableRating = true , enableDisconnectDetection = nil , disconnectDetectionTimeoutSeconds = nil , createGatheringTriggerType = \"none\" , createGatheringTriggerRealtimeNamespaceId = nil , createGatheringTriggerScriptId = nil , completeMatchmakingTriggerType = \"none\" , completeMatchmakingTriggerRealtimeNamespaceId = nil , completeMatchmakingTriggerScriptId = nil , enableCollaborateSeasonRating = \"enable\" , collaborateSeasonRatingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" , collaborateSeasonRatingTtl = 60 , changeRatingScript = nil , joinNotification = nil , leaveNotification = nil , completeNotification = nil , changeRatingNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , enableRating = true , enableDisconnectDetection = nil , disconnectDetectionTimeoutSeconds = nil , createGatheringTriggerType = \"none\" , createGatheringTriggerRealtimeNamespaceId = nil , createGatheringTriggerScriptId = nil , completeMatchmakingTriggerType = \"none\" , completeMatchmakingTriggerRealtimeNamespaceId = nil , completeMatchmakingTriggerScriptId = nil , enableCollaborateSeasonRating = \"enable\" , collaborateSeasonRatingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" , collaborateSeasonRatingTtl = 60 , changeRatingScript = nil , joinNotification = nil , leaveNotification = nil , completeNotification = nil , changeRatingNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 matchmaking . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DeleteNamespaceRequest ; import io.gs2.matchmaking.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Matchmaking . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Matchmaking . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . delete_namespace ( matchmaking . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 matchmaking . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetServiceVersionRequest ; import io.gs2.matchmaking.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Matchmaking . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Matchmaking . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_service_version ( matchmaking . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 matchmaking . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DumpUserDataByUserIdRequest ; import io.gs2.matchmaking.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Matchmaking . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Matchmaking . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . dump_user_data_by_user_id ( matchmaking . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'matchmaking' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 matchmaking . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.matchmaking.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Matchmaking . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Matchmaking . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( matchmaking . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'matchmaking' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 matchmaking . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CleanUserDataByUserIdRequest ; import io.gs2.matchmaking.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Matchmaking . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Matchmaking . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . clean_user_data_by_user_id ( matchmaking . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'matchmaking' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 matchmaking . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.matchmaking.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Matchmaking . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Matchmaking . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( matchmaking . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'matchmaking' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고, importUserDataByUserId를 호출하면 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 matchmaking . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.matchmaking.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Matchmaking . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Matchmaking . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( matchmaking . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'matchmaking' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 matchmaking . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.ImportUserDataByUserIdRequest ; import io.gs2.matchmaking.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Matchmaking . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Matchmaking . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . import_user_data_by_user_id ( matchmaking . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'matchmaking' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 matchmaking . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CheckImportUserDataByUserIdRequest ; import io.gs2.matchmaking.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Matchmaking . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Matchmaking . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( matchmaking . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'matchmaking' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeGatherings 개더링 목록 취득 지정된 네임스페이스 내의 모든 개더링에 대한 페이지네이션 목록을 취득합니다. 현재 참가자를 모집 중인 개더링과 완료된 개더링이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 개더링 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeGatherings ( \u0026 matchmaking . DescribeGatheringsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeGatheringsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeGatherings ( ( new DescribeGatheringsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeGatheringsRequest ; import io.gs2.matchmaking.result.DescribeGatheringsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeGatheringsResult result = client . describeGatherings ( new DescribeGatheringsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Gathering \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeGatheringsResult \u003e asyncResult = null ; yield return client . DescribeGatherings ( new Gs2 . Gs2Matchmaking . Request . DescribeGatheringsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeGatherings ( new Gs2Matchmaking . DescribeGatheringsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_gatherings ( matchmaking . DescribeGatheringsRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_gatherings ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_gatherings_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createGathering 개더링을 작성하고 모집 시작 모집 조건 에는 작성한 개더링에 참가를 허용할 각 속성값의 범위를 지정합니다. 예를 들어 동일한 게임 모드를 희망하는 플레이어를 모집하고 싶은 경우, 게임 모드에 대응하는 속성값이 완전히 일치하는 참가 조건의 플레이어와 매치메이킹하도록 속성명: 게임 모드 속성 최소값: 게임 모드를 나타내는 숫자 속성 최대값: 게임 모드를 나타내는 숫자 로 설정하면, 동일한 게임 모드를 희망하는 플레이어끼리 매치메이킹할 수 있습니다. 그 밖에 레이팅을 기반으로 한 매치메이킹을 실시하고 싶은 경우에는, 방 작성자의 레이팅값을 중심으로 한 속성값의 범위를 지정함으로써 레이팅값이 가까운 플레이어끼리 매치메이킹할 수 있습니다. 이 모집 조건 은 나중에 갱신할 수 있으므로, 점차 조건을 완화해 나갈 수 있습니다. 역할은 방패 역할 1명, 회복 역할 1명, 공격 역할 2명 등 역할별로 모집 인원을 설정하고 싶은 경우에 사용합니다. 역할에는 별칭을 지정할 수 있습니다. 예를 들어 방패 역할은 팔라딘과 나이트라는 2종류의 직업 으로 더 세분화할 수 있다고 합시다. 이 경우, 역할명에 방패 역할 , 별칭에 팔라딘 나이트 로 모집을 내도록 게임을 구현합니다. 그리고 플레이어는 자기 자신의 직업 을 자신의 플레이어 정보의 역할로 지정합니다. 이렇게 함으로써, 모집 조건이 방패 역할 로 되어 있는 개더링에는 팔라딘 도 나이트 도 참가할 수 있습니다. 반면, 개더링을 작성할 때 팔라딘 만 모집하고 나이트 는 모집하고 싶지 않은 경우에는, 모집할 역할명에 팔라딘 을 직접 지정하거나, 별칭에 나이트 를 포함하지 않도록 함으로써 실현할 수 있습니다. 참가자 의 모집 인원수 는 모집할 플레이어 수를 지정합니다. 역할명을 지정함으로써 역할명별 모집 인원수를 설정할 수 있습니다. 참가자 의 참가자 플레이어 정보 리스트 는 사전에 플레이어 간에 파티가 구성되어 있는 경우나, 참가자가 이탈한 후 추가 모집 시에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 player Player  자신의 플레이어 정보 attributeRanges List [] 0 ~ 5 items 모집 조건 이 개더링에 참가하기 위해 플레이어가 충족해야 하는 속성 범위 조건의 목록입니다. 각 항목은 속성 이름과 허용되는 최소값·최대값 범위를 지정합니다. 플레이어 자신의 속성값이 이 범위 내에 있지 않으면 참가할 수 없습니다. 최대 5건. capacityOfRoles List [] 1 ~ 5 items 모집 슬롯 목록 이 개더링의 모집 슬롯을 정의합니다. 각 항목은 역할 이름, 그 별칭, 그리고 해당 역할에 참가 가능한 최대 인원수를 지정합니다. 모든 역할 슬롯이 정원에 도달하면 매치메이킹이 완료됩니다. 최소 1건, 최대 5건. allowUserIds List [] 0 ~ 100 items 참가 허용 사용자 ID 목록 이 게더링에 참가하는 것이 허용된 사용자 ID의 화이트리스트입니다. 지정한 경우, 목록에 포함된 사용자만 이 게더링의 매치메이킹에 참가할 수 있습니다. 친구 전용 매치메이킹이나 초대제 매치메이킹 시나리오에 유용합니다. 최대 100건. expiresAt long 게더링 유효 기간 이 게더링이 자동으로 만료되어 삭제되는 시각입니다. 이 시각까지 매치메이킹이 완료되지 않으면 게더링은 정리됩니다. 지정하지 않은 경우, 매치메이킹이 완료되거나 수동으로 삭제될 때까지 게더링이 유지됩니다. expiresAtTimeSpan TimeSpan 유효기간까지 남은 시간 Result 타입 설명 item Gathering 작성한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CreateGathering ( \u0026 matchmaking . CreateGatheringRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Player : \u0026 matchmaking . Player { Attributes : [] matchmaking . Attribute { matchmaking . Attribute { Name : pointy . String ( \"stage\" ), Value : pointy . Int32 ( 1 ), }, matchmaking . Attribute { Name : pointy . String ( \"level\" ), Value : pointy . Int32 ( 10 ), }, }, }, AttributeRanges : [] matchmaking . AttributeRange { matchmaking . AttributeRange { Name : pointy . String ( \"stage\" ), Min : pointy . Int32 ( 1 ), Max : pointy . Int32 ( 1 ), }, matchmaking . AttributeRange { Name : pointy . String ( \"level\" ), Min : pointy . Int32 ( 0 ), Max : pointy . Int32 ( 10 ), }, }, CapacityOfRoles : [] matchmaking . CapacityOfRole { matchmaking . CapacityOfRole { RoleName : pointy . String ( \"default\" ), Capacity : pointy . Int32 ( 4 ), }, }, AllowUserIds : nil , ExpiresAt : nil , ExpiresAtTimeSpan : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CreateGatheringRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e createGathering ( ( new CreateGatheringRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPlayer (( new \\Gs2\\Matchmaking\\Model\\Player ()) -\u003e withAttributes ([ ( new \\Gs2\\Matchmaking\\Model\\Attribute ()) -\u003e withName ( \"stage\" ) -\u003e withValue ( 1 ), ( new \\Gs2\\Matchmaking\\Model\\Attribute ()) -\u003e withName ( \"level\" ) -\u003e withValue ( 10 ), ])) -\u003e withAttributeRanges ([ ( new \\Gs2\\Matchmaking\\Model\\AttributeRange ()) -\u003e withName ( \"stage\" ) -\u003e withMin ( 1 ) -\u003e withMax ( 1 ), ( new \\Gs2\\Matchmaking\\Model\\AttributeRange ()) -\u003e withName ( \"level\" ) -\u003e withMin ( 0 ) -\u003e withMax ( 10 ), ]) -\u003e withCapacityOfRoles ([ ( new \\Gs2\\Matchmaking\\Model\\CapacityOfRole ()) -\u003e withRoleName ( \"default\" ) -\u003e withCapacity ( 4 ), ]) -\u003e withAllowUserIds ( null ) -\u003e withExpiresAt ( null ) -\u003e withExpiresAtTimeSpan ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CreateGatheringRequest ; import io.gs2.matchmaking.result.CreateGatheringResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CreateGatheringResult result = client . createGathering ( new CreateGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPlayer ( new io . gs2 . matchmaking . model . Player () . withAttributes ( Arrays . asList ( new io . gs2 . matchmaking . model . Attribute () . withName ( \"stage\" ) . withValue ( 1 ), new io . gs2 . matchmaking . model . Attribute () . withName ( \"level\" ) . withValue ( 10 ) ))) . withAttributeRanges ( Arrays . asList ( new io . gs2 . matchmaking . model . AttributeRange () . withName ( \"stage\" ) . withMin ( 1 ) . withMax ( 1 ), new io . gs2 . matchmaking . model . AttributeRange () . withName ( \"level\" ) . withMin ( 0 ) . withMax ( 10 ) )) . withCapacityOfRoles ( Arrays . asList ( new io . gs2 . matchmaking . model . CapacityOfRole () . withRoleName ( \"default\" ) . withCapacity ( 4 ) )) . withAllowUserIds ( null ) . withExpiresAt ( null ) . withExpiresAtTimeSpan ( null ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CreateGatheringResult \u003e asyncResult = null ; yield return client . CreateGathering ( new Gs2 . Gs2Matchmaking . Request . CreateGatheringRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPlayer ( new Gs2 . Gs2Matchmaking . Model . Player () . WithAttributes ( new Gs2 . Gs2Matchmaking . Model . Attribute_ [] { new Gs2 . Gs2Matchmaking . Model . Attribute_ () . WithName ( \"stage\" ) . WithValue ( 1 ), new Gs2 . Gs2Matchmaking . Model . Attribute_ () . WithName ( \"level\" ) . WithValue ( 10 ), })) . WithAttributeRanges ( new Gs2 . Gs2Matchmaking . Model . AttributeRange [] { new Gs2 . Gs2Matchmaking . Model . AttributeRange () . WithName ( \"stage\" ) . WithMin ( 1 ) . WithMax ( 1 ), new Gs2 . Gs2Matchmaking . Model . AttributeRange () . WithName ( \"level\" ) . WithMin ( 0 ) . WithMax ( 10 ), }) . WithCapacityOfRoles ( new Gs2 . Gs2Matchmaking . Model . CapacityOfRole [] { new Gs2 . Gs2Matchmaking . Model . CapacityOfRole () . WithRoleName ( \"default\" ) . WithCapacity ( 4 ), }) . WithAllowUserIds ( null ) . WithExpiresAt ( null ) . WithExpiresAtTimeSpan ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . createGathering ( new Gs2Matchmaking . CreateGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPlayer ( new Gs2Matchmaking . model . Player () . withAttributes ([ new Gs2Matchmaking . model . Attribute () . withName ( \"stage\" ) . withValue ( 1 ), new Gs2Matchmaking . model . Attribute () . withName ( \"level\" ) . withValue ( 10 ), ])) . withAttributeRanges ([ new Gs2Matchmaking . model . AttributeRange () . withName ( \"stage\" ) . withMin ( 1 ) . withMax ( 1 ), new Gs2Matchmaking . model . AttributeRange () . withName ( \"level\" ) . withMin ( 0 ) . withMax ( 10 ), ]) . withCapacityOfRoles ([ new Gs2Matchmaking . model . CapacityOfRole () . withRoleName ( \"default\" ) . withCapacity ( 4 ), ]) . withAllowUserIds ( null ) . withExpiresAt ( null ) . withExpiresAtTimeSpan ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . create_gathering ( matchmaking . CreateGatheringRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_player ( matchmaking . Player () . with_attributes ([ matchmaking . Attribute () . with_name ( 'stage' ) . with_value ( 1 ), matchmaking . Attribute () . with_name ( 'level' ) . with_value ( 10 ), ])) . with_attribute_ranges ([ matchmaking . AttributeRange () . with_name ( 'stage' ) . with_min ( 1 ) . with_max ( 1 ), matchmaking . AttributeRange () . with_name ( 'level' ) . with_min ( 0 ) . with_max ( 10 ), ]) . with_capacity_of_roles ([ matchmaking . CapacityOfRole () . with_role_name ( 'default' ) . with_capacity ( 4 ), ]) . with_allow_user_ids ( None ) . with_expires_at ( None ) . with_expires_at_time_span ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.create_gathering ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , player = { attributes = { { name = \"stage\" , value = 1 , }, { name = \"level\" , value = 10 , } }, }, attributeRanges = { { name = \"stage\" , min = 1 , max = 1 , }, { name = \"level\" , min = 0 , max = 10 , } }, capacityOfRoles = { { roleName = \"default\" , capacity = 4 , } }, allowUserIds = nil , expiresAt = nil , expiresAtTimeSpan = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.create_gathering_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , player = { attributes = { { name = \"stage\" , value = 1 , }, { name = \"level\" , value = 10 , } }, }, attributeRanges = { { name = \"stage\" , min = 1 , max = 1 , }, { name = \"level\" , min = 0 , max = 10 , } }, capacityOfRoles = { { roleName = \"default\" , capacity = 4 , } }, allowUserIds = nil , expiresAt = nil , expiresAtTimeSpan = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createGatheringByUserId 사용자 ID를 지정하여 개더링을 작성하고 모집 시작 모집 조건 에는 작성한 개더링에 참가를 허용할 각 속성값의 범위를 지정합니다. 예를 들어 동일한 게임 모드를 희망하는 플레이어를 모집하고 싶은 경우, 게임 모드에 대응하는 속성값이 완전히 일치하는 참가 조건의 플레이어와 매치메이킹하도록 속성명: 게임 모드 속성 최소값: 게임 모드를 나타내는 숫자 속성 최대값: 게임 모드를 나타내는 숫자 로 설정하면, 동일한 게임 모드를 희망하는 플레이어끼리 매치메이킹할 수 있습니다. 그 밖에 레이팅을 기반으로 한 매치메이킹을 실시하고 싶은 경우에는, 방 작성자의 레이팅값을 중심으로 한 속성값의 범위를 지정함으로써 레이팅값이 가까운 플레이어끼리 매치메이킹할 수 있습니다. 이 모집 조건 은 나중에 갱신할 수 있으므로, 점차 조건을 완화해 나갈 수 있습니다. 역할은 방패 역할 1명, 회복 역할 1명, 공격 역할 2명 등 역할별로 모집 인원을 설정하고 싶은 경우에 사용합니다. 역할에는 별칭을 지정할 수 있습니다. 예를 들어 방패 역할은 팔라딘과 나이트라는 2종류의 직업 으로 더 세분화할 수 있다고 합시다. 이 경우, 역할명에 방패 역할 , 별칭에 팔라딘 나이트 로 모집을 내도록 게임을 구현합니다. 그리고 플레이어는 자기 자신의 직업 을 자신의 플레이어 정보의 역할로 지정합니다. 이렇게 함으로써, 모집 조건이 방패 역할 로 되어 있는 개더링에는 팔라딘 도 나이트 도 참가할 수 있습니다. 반면, 개더링을 작성할 때 팔라딘 만 모집하고 나이트 는 모집하고 싶지 않은 경우에는, 모집할 역할명에 팔라딘 을 직접 지정하거나, 별칭에 나이트 를 포함하지 않도록 함으로써 실현할 수 있습니다. 참가자 의 모집 인원수 는 모집할 플레이어 수를 지정합니다. 역할명을 지정함으로써 역할명별 모집 인원수를 설정할 수 있습니다. 참가자 의 참가자 플레이어 정보 리스트 는 사전에 플레이어 간에 파티가 구성되어 있는 경우나, 참가자가 이탈한 후 추가 모집 시에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID player Player  자신의 플레이어 정보 attributeRanges List [] 0 ~ 5 items 모집 조건 이 개더링에 참가하기 위해 플레이어가 충족해야 하는 속성 범위 조건의 목록입니다. 각 항목은 속성 이름과 허용되는 최소값·최대값 범위를 지정합니다. 플레이어 자신의 속성값이 이 범위 내에 있지 않으면 참가할 수 없습니다. 최대 5건. capacityOfRoles List [] 1 ~ 5 items 모집 슬롯 목록 이 개더링의 모집 슬롯을 정의합니다. 각 항목은 역할 이름, 그 별칭, 그리고 해당 역할에 참가 가능한 최대 인원수를 지정합니다. 모든 역할 슬롯이 정원에 도달하면 매치메이킹이 완료됩니다. 최소 1건, 최대 5건. allowUserIds List [] 0 ~ 100 items 참가 허용 사용자 ID 목록 이 게더링에 참가하는 것이 허용된 사용자 ID의 화이트리스트입니다. 지정한 경우, 목록에 포함된 사용자만 이 게더링의 매치메이킹에 참가할 수 있습니다. 친구 전용 매치메이킹이나 초대제 매치메이킹 시나리오에 유용합니다. 최대 100건. expiresAt long 게더링 유효 기간 이 게더링이 자동으로 만료되어 삭제되는 시각입니다. 이 시각까지 매치메이킹이 완료되지 않으면 게더링은 정리됩니다. 지정하지 않은 경우, 매치메이킹이 완료되거나 수동으로 삭제될 때까지 게더링이 유지됩니다. expiresAtTimeSpan TimeSpan 유효기간까지 남은 시간 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Gathering 작성한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CreateGatheringByUserId ( \u0026 matchmaking . CreateGatheringByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Player : \u0026 matchmaking . Player { UserId : pointy . String ( \"user-0001\" ), Attributes : [] Matchmaking . Attribute { Matchmaking . Attribute { Name : pointy . String ( \"attr1\" ), Value : 1 , } Matchmaking . Attribute { Name : pointy . String ( \"attr2\" ), Value : 1 , } }, }, AttributeRanges : [] matchmaking . AttributeRange { matchmaking . AttributeRange { Name : pointy . String ( \"stage\" ), Min : pointy . Int32 ( 1 ), Max : pointy . Int32 ( 2 ), }, matchmaking . AttributeRange { Name : pointy . String ( \"level\" ), Min : pointy . Int32 ( 3 ), Max : pointy . Int32 ( 5 ), }, }, CapacityOfRoles : [] matchmaking . CapacityOfRole { matchmaking . CapacityOfRole { Capacity : pointy . Int32 ( 4 ), }, }, AllowUserIds : nil , ExpiresAt : nil , ExpiresAtTimeSpan : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CreateGatheringByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e createGatheringByUserId ( ( new CreateGatheringByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPlayer (( new Player ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withAttributes ([ ( new \\Gs2\\Matchmaking\\Model\\Attribute ()) -\u003e withName ( \"attr1\" ) -\u003e withValue ( 1 ) ( new \\Gs2\\Matchmaking\\Model\\Attribute ()) -\u003e withName ( \"attr2\" ) -\u003e withValue ( 1 ) ])) -\u003e withAttributeRanges ([ ( new AttributeRange ()) -\u003e withName ( \"stage\" ) -\u003e withMin ( 1 ) -\u003e withMax ( 2 ), ( new AttributeRange ()) -\u003e withName ( \"level\" ) -\u003e withMin ( 3 ) -\u003e withMax ( 5 ), ]) -\u003e withCapacityOfRoles ([ ( new CapacityOfRole ()) -\u003e withCapacity ( 4 ), ]) -\u003e withAllowUserIds ( null ) -\u003e withExpiresAt ( null ) -\u003e withExpiresAtTimeSpan ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CreateGatheringByUserIdRequest ; import io.gs2.matchmaking.result.CreateGatheringByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CreateGatheringByUserIdResult result = client . createGatheringByUserId ( new CreateGatheringByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPlayer ( new Player () . withUserId ( \"user-0001\" ) . withAttributes ( Arrays . asList ( new io . gs2 . matchmaking . model . Attribute () . withName ( \"attr1\" ) . withValue ( 1 ) new io . gs2 . matchmaking . model . Attribute () . withName ( \"attr2\" ) . withValue ( 1 ), )) . withAttributeRanges ( Arrays . asList ( new AttributeRange () . withName ( \"stage\" ) . withMin ( 1 ) . withMax ( 2 ), new AttributeRange () . withName ( \"level\" ) . withMin ( 3 ) . withMax ( 5 ) )) . withCapacityOfRoles ( Arrays . asList ( new CapacityOfRole () . withCapacity ( 4 ) )) . withAllowUserIds ( null ) . withExpiresAt ( null ) . withExpiresAtTimeSpan ( null ) . withTimeOffsetToken ( null ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CreateGatheringByUserIdResult \u003e asyncResult = null ; yield return client . CreateGatheringByUserId ( new Gs2 . Gs2Matchmaking . Request . CreateGatheringByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPlayer ( new Gs2 . Gs2Matchmaking . Model . Player () . WithUserId ( \"user-0001\" ) . WithAttributes ( new Gs2 . Gs2Matchmaking . Model . Attribute [] { . WithName ( \"attr1\" ) . WithValue ( 1 ) . WithName ( \"attr2\" ) . WithValue ( 1 ) })) . WithAttributeRanges ( new Gs2 . Gs2Matchmaking . Model . AttributeRange [] { new Gs2 . Gs2Matchmaking . Model . AttributeRange () . WithName ( \"stage\" ) . WithMin ( 1 ) . WithMax ( 2 ), new Gs2 . Gs2Matchmaking . Model . AttributeRange () . WithName ( \"level\" ) . WithMin ( 3 ) . WithMax ( 5 ), }) . WithCapacityOfRoles ( new Gs2 . Gs2Matchmaking . Model . CapacityOfRole [] { new Gs2 . Gs2Matchmaking . Model . CapacityOfRole () . WithCapacity ( 4 ), }) . WithAllowUserIds ( null ) . WithExpiresAt ( null ) . WithExpiresAtTimeSpan ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . createGatheringByUserId ( new Gs2Matchmaking . CreateGatheringByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPlayer ( new Gs2Matchmaking . model . Player () . withUserId ( \"user-0001\" ) . withAttributes ([ new Gs2Matchmaking . model . Attribute () . withName ( \"attr1\" ) . withValue ( 1 ) new Gs2Matchmaking . model . Attribute () . withName ( \"attr2\" ) . withValue ( 1 ) ])) . withAttributeRanges ([ new Gs2Matchmaking . model . AttributeRange () . withName ( \"stage\" ) . withMin ( 1 ) . withMax ( 2 ), new Gs2Matchmaking . model . AttributeRange () . withName ( \"level\" ) . withMin ( 3 ) . withMax ( 5 ), ]) . withCapacityOfRoles ([ new Gs2Matchmaking . model . CapacityOfRole () . withCapacity ( 4 ), ]) . withAllowUserIds ( null ) . withExpiresAt ( null ) . withExpiresAtTimeSpan ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . create_gathering_by_user_id ( matchmaking . CreateGatheringByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_player ( matchmaking . Player () . with_user_id ( 'user-0001' ) . with_attributes ([ matchmaking . attribute () . with_name ( 'attr1' ) . with_value ( 1 ), matchmaking . attribute () . with_name ( 'attr2' ) . with_value ( 1 ), ])) . with_attribute_ranges ([ matchmaking . AttributeRange () . with_name ( 'stage' ) . with_min ( 1 ) . with_max ( 2 ), matchmaking . AttributeRange () . with_name ( 'level' ) . with_min ( 3 ) . with_max ( 5 ), ]) . with_capacity_of_roles ([ matchmaking . CapacityOfRole () . with_capacity ( 4 ), ]) . with_allow_user_ids ( None ) . with_expires_at ( None ) . with_expires_at_time_span ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.create_gathering_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , player = { user_id = \"user-0001\" , attributes = { attribute = { name = \"attr1\" , value = 1 , } attribute = { name = \"attr2\" , value = 1 , } }, }, attributeRanges = { { name = \"stage\" , min = 1 , max = 2 , }, { name = \"level\" , min = 3 , max = 5 , } }, capacityOfRoles = { { capacity = 4 , } }, allowUserIds = nil , expiresAt = nil , expiresAtTimeSpan = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.create_gathering_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , player = { user_id = \"user-0001\" , attributes = { attribute = { name = \"attr1\" , value = 1 , } attribute = { name = \"attr2\" , value = 1 , } }, }, attributeRanges = { { name = \"stage\" , min = 1 , max = 2 , }, { name = \"level\" , min = 3 , max = 5 , } }, capacityOfRoles = { { capacity = 4 , } }, allowUserIds = nil , expiresAt = nil , expiresAtTimeSpan = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGathering 개더링 갱신 지정된 개더링의 모집 조건(속성값 범위)을 갱신합니다. 참가자를 기다리는 동안 매칭 조건을 점차 완화하거나 강화할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. accessToken string  ~ 128자 액세스 토큰 attributeRanges List [] 0 ~ 5 items 모집 조건 이 개더링에 참가하기 위해 플레이어가 충족해야 하는 속성 범위 조건의 목록입니다. 각 항목은 속성 이름과 허용되는 최소값·최대값 범위를 지정합니다. 플레이어 자신의 속성값이 이 범위 내에 있지 않으면 참가할 수 없습니다. 최대 5건. Result 타입 설명 item Gathering 갱신한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . UpdateGathering ( \u0026 matchmaking . UpdateGatheringRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AttributeRanges : [] matchmaking . AttributeRange { matchmaking . AttributeRange { Name : pointy . String ( \"stage\" ), Min : pointy . Int32 ( 1 ), Max : pointy . Int32 ( 1 ), }, matchmaking . AttributeRange { Name : pointy . String ( \"level\" ), Min : pointy . Int32 ( 0 ), Max : pointy . Int32 ( 50 ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\UpdateGatheringRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e updateGathering ( ( new UpdateGatheringRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAttributeRanges ([ ( new \\Gs2\\Matchmaking\\Model\\AttributeRange ()) -\u003e withName ( \"stage\" ) -\u003e withMin ( 1 ) -\u003e withMax ( 1 ), ( new \\Gs2\\Matchmaking\\Model\\AttributeRange ()) -\u003e withName ( \"level\" ) -\u003e withMin ( 0 ) -\u003e withMax ( 50 ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.UpdateGatheringRequest ; import io.gs2.matchmaking.result.UpdateGatheringResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { UpdateGatheringResult result = client . updateGathering ( new UpdateGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAttributeRanges ( Arrays . asList ( new io . gs2 . matchmaking . model . AttributeRange () . withName ( \"stage\" ) . withMin ( 1 ) . withMax ( 1 ), new io . gs2 . matchmaking . model . AttributeRange () . withName ( \"level\" ) . withMin ( 0 ) . withMax ( 50 ) )) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . UpdateGatheringResult \u003e asyncResult = null ; yield return client . UpdateGathering ( new Gs2 . Gs2Matchmaking . Request . UpdateGatheringRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAttributeRanges ( new Gs2 . Gs2Matchmaking . Model . AttributeRange [] { new Gs2 . Gs2Matchmaking . Model . AttributeRange () . WithName ( \"stage\" ) . WithMin ( 1 ) . WithMax ( 1 ), new Gs2 . Gs2Matchmaking . Model . AttributeRange () . WithName ( \"level\" ) . WithMin ( 0 ) . WithMax ( 50 ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . updateGathering ( new Gs2Matchmaking . UpdateGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAttributeRanges ([ new Gs2Matchmaking . model . AttributeRange () . withName ( \"stage\" ) . withMin ( 1 ) . withMax ( 1 ), new Gs2Matchmaking . model . AttributeRange () . withName ( \"level\" ) . withMin ( 0 ) . withMax ( 50 ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . update_gathering ( matchmaking . UpdateGatheringRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_access_token ( 'accessToken-0001' ) . with_attribute_ranges ([ matchmaking . AttributeRange () . with_name ( 'stage' ) . with_min ( 1 ) . with_max ( 1 ), matchmaking . AttributeRange () . with_name ( 'level' ) . with_min ( 0 ) . with_max ( 50 ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.update_gathering ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , attributeRanges = { { name = \"stage\" , min = 1 , max = 1 , }, { name = \"level\" , min = 0 , max = 50 , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.update_gathering_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , attributeRanges = { { name = \"stage\" , min = 1 , max = 1 , }, { name = \"level\" , min = 0 , max = 50 , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGatheringByUserId 사용자 ID를 지정하여 개더링 갱신 지정된 사용자의 개더링 모집 조건(속성값 범위)을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. userId string  ~ 128자 사용자ID attributeRanges List [] 0 ~ 5 items 모집 조건 이 개더링에 참가하기 위해 플레이어가 충족해야 하는 속성 범위 조건의 목록입니다. 각 항목은 속성 이름과 허용되는 최소값·최대값 범위를 지정합니다. 플레이어 자신의 속성값이 이 범위 내에 있지 않으면 참가할 수 없습니다. 최대 5건. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Gathering 갱신한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . UpdateGatheringByUserId ( \u0026 matchmaking . UpdateGatheringByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), UserId : pointy . String ( \"user-0001\" ), AttributeRanges : [] matchmaking . AttributeRange { matchmaking . AttributeRange { Name : pointy . String ( \"stage\" ), Min : pointy . Int32 ( 1 ), Max : pointy . Int32 ( 2 ), }, matchmaking . AttributeRange { Name : pointy . String ( \"level\" ), Min : pointy . Int32 ( 3 ), Max : pointy . Int32 ( 5 ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\UpdateGatheringByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e updateGatheringByUserId ( ( new UpdateGatheringByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAttributeRanges ([ ( new AttributeRange ()) -\u003e withName ( \"stage\" ) -\u003e withMin ( 1 ) -\u003e withMax ( 2 ), ( new AttributeRange ()) -\u003e withName ( \"level\" ) -\u003e withMin ( 3 ) -\u003e withMax ( 5 ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.UpdateGatheringByUserIdRequest ; import io.gs2.matchmaking.result.UpdateGatheringByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { UpdateGatheringByUserIdResult result = client . updateGatheringByUserId ( new UpdateGatheringByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withAttributeRanges ( Arrays . asList ( new AttributeRange () . withName ( \"stage\" ) . withMin ( 1 ) . withMax ( 2 ), new AttributeRange () . withName ( \"level\" ) . withMin ( 3 ) . withMax ( 5 ) )) . withTimeOffsetToken ( null ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . UpdateGatheringByUserIdResult \u003e asyncResult = null ; yield return client . UpdateGatheringByUserId ( new Gs2 . Gs2Matchmaking . Request . UpdateGatheringByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithUserId ( \"user-0001\" ) . WithAttributeRanges ( new Gs2 . Gs2Matchmaking . Model . AttributeRange [] { new Gs2 . Gs2Matchmaking . Model . AttributeRange () . WithName ( \"stage\" ) . WithMin ( 1 ) . WithMax ( 2 ), new Gs2 . Gs2Matchmaking . Model . AttributeRange () . WithName ( \"level\" ) . WithMin ( 3 ) . WithMax ( 5 ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . updateGatheringByUserId ( new Gs2Matchmaking . UpdateGatheringByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withAttributeRanges ([ new Gs2Matchmaking . model . AttributeRange () . withName ( \"stage\" ) . withMin ( 1 ) . withMax ( 2 ), new Gs2Matchmaking . model . AttributeRange () . withName ( \"level\" ) . withMin ( 3 ) . withMax ( 5 ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . update_gathering_by_user_id ( matchmaking . UpdateGatheringByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_user_id ( 'user-0001' ) . with_attribute_ranges ([ matchmaking . AttributeRange () . with_name ( 'stage' ) . with_min ( 1 ) . with_max ( 2 ), matchmaking . AttributeRange () . with_name ( 'level' ) . with_min ( 3 ) . with_max ( 5 ), ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.update_gathering_by_user_id ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , attributeRanges = { { name = \"stage\" , min = 1 , max = 2 , }, { name = \"level\" , min = 3 , max = 5 , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.update_gathering_by_user_id_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , attributeRanges = { { name = \"stage\" , min = 1 , max = 2 , }, { name = \"level\" , min = 3 , max = 5 , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; doMatchmakingByPlayer 플레이어가 참가할 수 있는 개더링을 찾아 참가 일정 시간 검색을 수행하며, 대상을 찾지 못한 경우 매치메이킹 상태를 유지하는 토큰 을 반환합니다. 다음 번에 매치메이킹 상태를 유지하는 토큰 을 붙여 다시 요청함으로써, 이전 검색 처리를 이어서 재개할 수 있습니다. 모든 개더링을 검색했지만 참가할 수 있는 개더링이 존재하지 않는 경우, 개더링과 토큰 모두 null이 응답됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. player Player  플레이어 정보 matchmakingContextToken string ~ 5120자 검색 재개에 사용하는 매치메이킹 상태를 보유하는 토큰 Result 타입 설명 item Gathering 참가한 개더링 matchmakingContextToken string 매치메이킹 상태를 보유하는 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DoMatchmakingByPlayer ( \u0026 matchmaking . DoMatchmakingByPlayerRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Player : \u0026 matchmaking . Player { UserId : pointy . String ( \"user-0001\" ), Attributes : [] Matchmaking . Attribute { Matchmaking . Attribute { Name : pointy . String ( \"attr1\" ), Value : 1 , } Matchmaking . Attribute { Name : pointy . String ( \"attr2\" ), Value : 1 , } }, }, MatchmakingContextToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item matchmakingContextToken := result . MatchmakingContextToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DoMatchmakingByPlayerRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e doMatchmakingByPlayer ( ( new DoMatchmakingByPlayerRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPlayer (( new Player ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withAttributes ([ ( new \\Gs2\\Matchmaking\\Model\\Attribute ()) -\u003e withName ( \"attr1\" ) -\u003e withValue ( 1 ) ( new \\Gs2\\Matchmaking\\Model\\Attribute ()) -\u003e withName ( \"attr2\" ) -\u003e withValue ( 1 ) ])) -\u003e withMatchmakingContextToken ( null ) ); $item = $result -\u003e getItem (); $matchmakingContextToken = $result -\u003e getMatchmakingContextToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DoMatchmakingByPlayerRequest ; import io.gs2.matchmaking.result.DoMatchmakingByPlayerResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DoMatchmakingByPlayerResult result = client . doMatchmakingByPlayer ( new DoMatchmakingByPlayerRequest () . withNamespaceName ( \"namespace-0001\" ) . withPlayer ( new Player () . withUserId ( \"user-0001\" ) . withAttributes ( Arrays . asList ( new io . gs2 . matchmaking . model . Attribute () . withName ( \"attr1\" ) . withValue ( 1 ) new io . gs2 . matchmaking . model . Attribute () . withName ( \"attr2\" ) . withValue ( 1 ), )) . withMatchmakingContextToken ( null ) ); Gathering item = result . getItem (); String matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DoMatchmakingByPlayerResult \u003e asyncResult = null ; yield return client . DoMatchmakingByPlayer ( new Gs2 . Gs2Matchmaking . Request . DoMatchmakingByPlayerRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPlayer ( new Gs2 . Gs2Matchmaking . Model . Player () . WithUserId ( \"user-0001\" ) . WithAttributes ( new Gs2 . Gs2Matchmaking . Model . Attribute [] { . WithName ( \"attr1\" ) . WithValue ( 1 ) . WithName ( \"attr2\" ) . WithValue ( 1 ) })) . WithMatchmakingContextToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var matchmakingContextToken = result . MatchmakingContextToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . doMatchmakingByPlayer ( new Gs2Matchmaking . DoMatchmakingByPlayerRequest () . withNamespaceName ( \"namespace-0001\" ) . withPlayer ( new Gs2Matchmaking . model . Player () . withUserId ( \"user-0001\" ) . withAttributes ([ new Gs2Matchmaking . model . Attribute () . withName ( \"attr1\" ) . withValue ( 1 ) new Gs2Matchmaking . model . Attribute () . withName ( \"attr2\" ) . withValue ( 1 ) ])) . withMatchmakingContextToken ( null ) ); const item = result . getItem (); const matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . do_matchmaking_by_player ( matchmaking . DoMatchmakingByPlayerRequest () . with_namespace_name ( 'namespace-0001' ) . with_player ( matchmaking . Player () . with_user_id ( 'user-0001' ) . with_attributes ([ matchmaking . attribute () . with_name ( 'attr1' ) . with_value ( 1 ), matchmaking . attribute () . with_name ( 'attr2' ) . with_value ( 1 ), ])) . with_matchmaking_context_token ( None ) ) item = result . item matchmaking_context_token = result . matchmaking_context_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.do_matchmaking_by_player ({ namespaceName = \"namespace-0001\" , player = { user_id = \"user-0001\" , attributes = { attribute = { name = \"attr1\" , value = 1 , } attribute = { name = \"attr2\" , value = 1 , } }, }, matchmakingContextToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.do_matchmaking_by_player_async ({ namespaceName = \"namespace-0001\" , player = { user_id = \"user-0001\" , attributes = { attribute = { name = \"attr1\" , value = 1 , } attribute = { name = \"attr2\" , value = 1 , } }, }, matchmakingContextToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; doMatchmaking 자신이 참가할 수 있는 개더링을 찾아 참가 일정 시간 검색을 수행하며, 대상을 찾지 못한 경우 매치메이킹 상태를 유지하는 토큰 을 반환합니다. 다음 번에 매치메이킹 상태를 유지하는 토큰 을 붙여 다시 요청함으로써, 이전 검색 처리를 이어서 재개할 수 있습니다. 모든 개더링을 검색했지만 참가할 수 있는 개더링이 존재하지 않는 경우, 개더링과 토큰 모두 null이 응답됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 player Player  자신의 플레이어 정보 matchmakingContextToken string ~ 5120자 검색 재개에 사용하는 매치메이킹 상태를 보유하는 토큰 Result 타입 설명 item Gathering 참가한 개더링 matchmakingContextToken string 매치메이킹 상태를 보유하는 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DoMatchmaking ( \u0026 matchmaking . DoMatchmakingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Player : \u0026 matchmaking . Player { UserId : pointy . String ( \"user-0001\" ), Attributes : [] Matchmaking . Attribute { Matchmaking . Attribute { Name : pointy . String ( \"attr1\" ), Value : 1 , } Matchmaking . Attribute { Name : pointy . String ( \"attr2\" ), Value : 1 , } }, }, MatchmakingContextToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item matchmakingContextToken := result . MatchmakingContextToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DoMatchmakingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e doMatchmaking ( ( new DoMatchmakingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPlayer (( new Player ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withAttributes ([ ( new \\Gs2\\Matchmaking\\Model\\Attribute ()) -\u003e withName ( \"attr1\" ) -\u003e withValue ( 1 ) ( new \\Gs2\\Matchmaking\\Model\\Attribute ()) -\u003e withName ( \"attr2\" ) -\u003e withValue ( 1 ) ])) -\u003e withMatchmakingContextToken ( null ) ); $item = $result -\u003e getItem (); $matchmakingContextToken = $result -\u003e getMatchmakingContextToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DoMatchmakingRequest ; import io.gs2.matchmaking.result.DoMatchmakingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DoMatchmakingResult result = client . doMatchmaking ( new DoMatchmakingRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPlayer ( new Player () . withUserId ( \"user-0001\" ) . withAttributes ( Arrays . asList ( new io . gs2 . matchmaking . model . Attribute () . withName ( \"attr1\" ) . withValue ( 1 ) new io . gs2 . matchmaking . model . Attribute () . withName ( \"attr2\" ) . withValue ( 1 ), )) . withMatchmakingContextToken ( null ) ); Gathering item = result . getItem (); String matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DoMatchmakingResult \u003e asyncResult = null ; yield return client . DoMatchmaking ( new Gs2 . Gs2Matchmaking . Request . DoMatchmakingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPlayer ( new Gs2 . Gs2Matchmaking . Model . Player () . WithUserId ( \"user-0001\" ) . WithAttributes ( new Gs2 . Gs2Matchmaking . Model . Attribute [] { . WithName ( \"attr1\" ) . WithValue ( 1 ) . WithName ( \"attr2\" ) . WithValue ( 1 ) })) . WithMatchmakingContextToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var matchmakingContextToken = result . MatchmakingContextToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . doMatchmaking ( new Gs2Matchmaking . DoMatchmakingRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPlayer ( new Gs2Matchmaking . model . Player () . withUserId ( \"user-0001\" ) . withAttributes ([ new Gs2Matchmaking . model . Attribute () . withName ( \"attr1\" ) . withValue ( 1 ) new Gs2Matchmaking . model . Attribute () . withName ( \"attr2\" ) . withValue ( 1 ) ])) . withMatchmakingContextToken ( null ) ); const item = result . getItem (); const matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . do_matchmaking ( matchmaking . DoMatchmakingRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_player ( matchmaking . Player () . with_user_id ( 'user-0001' ) . with_attributes ([ matchmaking . attribute () . with_name ( 'attr1' ) . with_value ( 1 ), matchmaking . attribute () . with_name ( 'attr2' ) . with_value ( 1 ), ])) . with_matchmaking_context_token ( None ) ) item = result . item matchmaking_context_token = result . matchmaking_context_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.do_matchmaking ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , player = { user_id = \"user-0001\" , attributes = { attribute = { name = \"attr1\" , value = 1 , } attribute = { name = \"attr2\" , value = 1 , } }, }, matchmakingContextToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.do_matchmaking_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , player = { user_id = \"user-0001\" , attributes = { attribute = { name = \"attr1\" , value = 1 , } attribute = { name = \"attr2\" , value = 1 , } }, }, matchmakingContextToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; doMatchmakingByUserId 자신이 참가할 수 있는 개더링을 찾아 참가 일정 시간 검색을 수행하며, 대상을 찾지 못한 경우 매치메이킹 상태를 유지하는 토큰 을 반환합니다. 다음 번에 매치메이킹 상태를 유지하는 토큰 을 붙여 다시 요청함으로써, 이전 검색 처리를 이어서 재개할 수 있습니다. 모든 개더링을 검색했지만 참가할 수 있는 개더링이 존재하지 않는 경우, 개더링과 토큰 모두 null이 응답됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID player Player  자신의 플레이어 정보 matchmakingContextToken string ~ 5120자 검색 재개에 사용하는 매치메이킹 상태를 보유하는 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Gathering 참가한 개더링 matchmakingContextToken string 매치메이킹 상태를 보유하는 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DoMatchmakingByUserId ( \u0026 matchmaking . DoMatchmakingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Player : nil , MatchmakingContextToken : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item matchmakingContextToken := result . MatchmakingContextToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DoMatchmakingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e doMatchmakingByUserId ( ( new DoMatchmakingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPlayer ( null ) -\u003e withMatchmakingContextToken ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $matchmakingContextToken = $result -\u003e getMatchmakingContextToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DoMatchmakingByUserIdRequest ; import io.gs2.matchmaking.result.DoMatchmakingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DoMatchmakingByUserIdResult result = client . doMatchmakingByUserId ( new DoMatchmakingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPlayer ( null ) . withMatchmakingContextToken ( null ) . withTimeOffsetToken ( null ) ); Gathering item = result . getItem (); String matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DoMatchmakingByUserIdResult \u003e asyncResult = null ; yield return client . DoMatchmakingByUserId ( new Gs2 . Gs2Matchmaking . Request . DoMatchmakingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPlayer ( null ) . WithMatchmakingContextToken ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var matchmakingContextToken = result . MatchmakingContextToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . doMatchmakingByUserId ( new Gs2Matchmaking . DoMatchmakingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPlayer ( null ) . withMatchmakingContextToken ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . do_matchmaking_by_user_id ( matchmaking . DoMatchmakingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_player ( None ) . with_matchmaking_context_token ( None ) . with_time_offset_token ( None ) ) item = result . item matchmaking_context_token = result . matchmaking_context_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.do_matchmaking_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , player = nil , matchmakingContextToken = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.do_matchmaking_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , player = nil , matchmakingContextToken = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; ping 매치메이킹 대기 중임을 통지 플레이어가 아직 개더링에서 대기 중임을 나타내는 킵얼라이브(keep-alive) ping을 전송합니다. 연결 해제 감지가 활성화된 경우, 설정된 타임아웃 기간 내에 ping을 전송하지 않은 플레이어는 개더링에서 자동으로 삭제됩니다. 타임아웃된 플레이어의 확인 및 삭제도 수행합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Gathering 갱신한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . Ping ( \u0026 matchmaking . PingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\PingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e ping ( ( new PingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.PingRequest ; import io.gs2.matchmaking.result.PingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { PingResult result = client . ping ( new PingRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . PingResult \u003e asyncResult = null ; yield return client . Ping ( new Gs2 . Gs2Matchmaking . Request . PingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . ping ( new Gs2Matchmaking . PingRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . ping ( matchmaking . PingRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.ping ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.ping_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; pingByUserId 사용자 ID를 지정하여 매치메이킹 대기 중임을 통지 지정된 사용자의 킵얼라이브(keep-alive) ping을 전송합니다. 타임아웃된 플레이어는 자동으로 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Gathering 갱신한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . PingByUserId ( \u0026 matchmaking . PingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\PingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e pingByUserId ( ( new PingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.PingByUserIdRequest ; import io.gs2.matchmaking.result.PingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { PingByUserIdResult result = client . pingByUserId ( new PingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . PingByUserIdResult \u003e asyncResult = null ; yield return client . PingByUserId ( new Gs2 . Gs2Matchmaking . Request . PingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . pingByUserId ( new Gs2Matchmaking . PingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . ping_by_user_id ( matchmaking . PingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.ping_by_user_id ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.ping_by_user_id_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGathering 개더링 취득 지정된 개더링의 현재 참가자, 속성값 범위, 역할 정원, 유효기간 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. Result 타입 설명 item Gathering 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetGathering ( \u0026 matchmaking . GetGatheringRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetGatheringRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getGathering ( ( new GetGatheringRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetGatheringRequest ; import io.gs2.matchmaking.result.GetGatheringResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetGatheringResult result = client . getGathering ( new GetGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetGatheringResult \u003e asyncResult = null ; yield return client . GetGathering ( new Gs2 . Gs2Matchmaking . Request . GetGatheringRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getGathering ( new Gs2Matchmaking . GetGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_gathering ( matchmaking . GetGatheringRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_gathering ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_gathering_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; cancelMatchmaking 매치메이킹 취소 개더링에서 이탈하기 전에 매치메이킹이 완료된 경우, NotFoundException(404 에러)이 발생하여 실패합니다 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Gathering 취소한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CancelMatchmaking ( \u0026 matchmaking . CancelMatchmakingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CancelMatchmakingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e cancelMatchmaking ( ( new CancelMatchmakingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CancelMatchmakingRequest ; import io.gs2.matchmaking.result.CancelMatchmakingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CancelMatchmakingResult result = client . cancelMatchmaking ( new CancelMatchmakingRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CancelMatchmakingResult \u003e asyncResult = null ; yield return client . CancelMatchmaking ( new Gs2 . Gs2Matchmaking . Request . CancelMatchmakingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . cancelMatchmaking ( new Gs2Matchmaking . CancelMatchmakingRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . cancel_matchmaking ( matchmaking . CancelMatchmakingRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.cancel_matchmaking ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.cancel_matchmaking_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; cancelMatchmakingByUserId 사용자 ID를 지정하여 매치메이킹 취소 개더링에서 이탈하기 전에 매치메이킹이 완료된 경우, NotFoundException(404 에러)이 발생하여 실패합니다 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Gathering 취소한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CancelMatchmakingByUserId ( \u0026 matchmaking . CancelMatchmakingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CancelMatchmakingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e cancelMatchmakingByUserId ( ( new CancelMatchmakingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CancelMatchmakingByUserIdRequest ; import io.gs2.matchmaking.result.CancelMatchmakingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CancelMatchmakingByUserIdResult result = client . cancelMatchmakingByUserId ( new CancelMatchmakingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CancelMatchmakingByUserIdResult \u003e asyncResult = null ; yield return client . CancelMatchmakingByUserId ( new Gs2 . Gs2Matchmaking . Request . CancelMatchmakingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . cancelMatchmakingByUserId ( new Gs2Matchmaking . CancelMatchmakingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . cancel_matchmaking_by_user_id ( matchmaking . CancelMatchmakingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.cancel_matchmaking_by_user_id ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.cancel_matchmaking_by_user_id_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; earlyComplete 매치메이킹 조기 종료 매치메이킹이 규정 인원수에 도달하지 않은 상태에서 매치메이킹을 조기 종료합니다. 조기 종료가 가능한 것은 개더링을 작성한 플레이어뿐입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Gathering 취소한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . EarlyComplete ( \u0026 matchmaking . EarlyCompleteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\EarlyCompleteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e earlyComplete ( ( new EarlyCompleteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.EarlyCompleteRequest ; import io.gs2.matchmaking.result.EarlyCompleteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { EarlyCompleteResult result = client . earlyComplete ( new EarlyCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . EarlyCompleteResult \u003e asyncResult = null ; yield return client . EarlyComplete ( new Gs2 . Gs2Matchmaking . Request . EarlyCompleteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . earlyComplete ( new Gs2Matchmaking . EarlyCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . early_complete ( matchmaking . EarlyCompleteRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.early_complete ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.early_complete_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; earlyCompleteByUserId 사용자 ID를 지정하여 매치메이킹 조기 종료 매치메이킹이 규정 인원수에 도달하지 않은 상태에서 매치메이킹을 조기 종료합니다. 조기 종료가 가능한 것은 개더링을 작성한 플레이어뿐입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Gathering 취소한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . EarlyCompleteByUserId ( \u0026 matchmaking . EarlyCompleteByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\EarlyCompleteByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e earlyCompleteByUserId ( ( new EarlyCompleteByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.EarlyCompleteByUserIdRequest ; import io.gs2.matchmaking.result.EarlyCompleteByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { EarlyCompleteByUserIdResult result = client . earlyCompleteByUserId ( new EarlyCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . EarlyCompleteByUserIdResult \u003e asyncResult = null ; yield return client . EarlyCompleteByUserId ( new Gs2 . Gs2Matchmaking . Request . EarlyCompleteByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . earlyCompleteByUserId ( new Gs2Matchmaking . EarlyCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . early_complete_by_user_id ( matchmaking . EarlyCompleteByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.early_complete_by_user_id ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.early_complete_by_user_id_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGathering 개더링 삭제 지정된 개더링 및 관련된 모든 참가자 데이터를 완전히 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. Result 타입 설명 item Gathering 삭제한 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DeleteGathering ( \u0026 matchmaking . DeleteGatheringRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DeleteGatheringRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e deleteGathering ( ( new DeleteGatheringRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DeleteGatheringRequest ; import io.gs2.matchmaking.result.DeleteGatheringResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DeleteGatheringResult result = client . deleteGathering ( new DeleteGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) ); Gathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DeleteGatheringResult \u003e asyncResult = null ; yield return client . DeleteGathering ( new Gs2 . Gs2Matchmaking . Request . DeleteGatheringRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithGatheringName ( \"gathering-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . deleteGathering ( new Gs2Matchmaking . DeleteGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withGatheringName ( \"gathering-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . delete_gathering ( matchmaking . DeleteGatheringRequest () . with_namespace_name ( 'namespace-0001' ) . with_gathering_name ( 'gathering-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.delete_gathering ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.delete_gathering_async ({ namespaceName = \"namespace-0001\" , gatheringName = \"gathering-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSeasonGatherings 시즌 개더링 목록 조회 지정된 시즌의 시즌 개더링에 대한 페이지네이션 목록을 조회합니다. 티어로 필터링하여 특정 스킬 레벨의 개더링만 표시할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long 0 ~ 9223372036854775805 티어 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 시즌 개더링 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeSeasonGatherings ( \u0026 matchmaking . DescribeSeasonGatheringsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Season : pointy . Int64 ( 0 ), Tier : pointy . Int64 ( 0 ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeSeasonGatheringsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeSeasonGatherings ( ( new DescribeSeasonGatheringsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTier ( 0 ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeSeasonGatheringsRequest ; import io.gs2.matchmaking.result.DescribeSeasonGatheringsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeSeasonGatheringsResult result = client . describeSeasonGatherings ( new DescribeSeasonGatheringsRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0L ) . withTier ( 0L ) . withPageToken ( null ) . withLimit ( null ) ); List SeasonGathering \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeSeasonGatheringsResult \u003e asyncResult = null ; yield return client . DescribeSeasonGatherings ( new Gs2 . Gs2Matchmaking . Request . DescribeSeasonGatheringsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSeason ( 0L ) . WithTier ( 0L ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeSeasonGatherings ( new Gs2Matchmaking . DescribeSeasonGatheringsRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0 ) . withTier ( 0 ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_season_gatherings ( matchmaking . DescribeSeasonGatheringsRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_season ( 0 ) . with_tier ( 0 ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_season_gatherings ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_season_gatherings_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeMatchmakingSeasonGatherings 매치메이킹 중인 시즌 개더링 목록 조회 현재 매치메이킹이 가능한 시즌 개더링에 대한 페이지네이션 목록을 조회합니다. 티어로 필터링할 수 있습니다. 최대 참가 인원에 도달하지 않은 개더링만 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long 0 ~ 9223372036854775805 티어 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 시즌 개더링 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeMatchmakingSeasonGatherings ( \u0026 matchmaking . DescribeMatchmakingSeasonGatheringsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Season : pointy . Int64 ( 0 ), Tier : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeMatchmakingSeasonGatheringsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeMatchmakingSeasonGatherings ( ( new DescribeMatchmakingSeasonGatheringsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTier ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeMatchmakingSeasonGatheringsRequest ; import io.gs2.matchmaking.result.DescribeMatchmakingSeasonGatheringsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeMatchmakingSeasonGatheringsResult result = client . describeMatchmakingSeasonGatherings ( new DescribeMatchmakingSeasonGatheringsRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0L ) . withTier ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SeasonGathering \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeMatchmakingSeasonGatheringsResult \u003e asyncResult = null ; yield return client . DescribeMatchmakingSeasonGatherings ( new Gs2 . Gs2Matchmaking . Request . DescribeMatchmakingSeasonGatheringsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSeason ( 0L ) . WithTier ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeMatchmakingSeasonGatherings ( new Gs2Matchmaking . DescribeMatchmakingSeasonGatheringsRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0 ) . withTier ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_matchmaking_season_gatherings ( matchmaking . DescribeMatchmakingSeasonGatheringsRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_season ( 0 ) . with_tier ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_matchmaking_season_gatherings ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_matchmaking_season_gatherings_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; doSeasonMatchmaking 자신이 참가할 수 있는 시즌 개더링을 찾아 참가한다 일정 시간 동안 검색을 수행하며, 대상을 찾지 못한 경우에는 매치메이킹 상태를 보유하는 토큰 을 반환한다. 다음 번에 매치메이킹 상태를 보유하는 토큰 을 첨부하여 다시 요청하면, 이전 검색에 이어서 검색 처리를 재개할 수 있다. 모든 시즌 개더링을 검색했지만 참가할 수 있는 시즌 개더링이 존재하지 않는 경우에는 시즌 개더링과 토큰 모두 null이 응답된다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 matchmakingContextToken string ~ 5120자 검색 재개에 사용하는 매치메이킹 상태를 보유하는 토큰 Result 타입 설명 item SeasonGathering 참가한 시즌 개더링 matchmakingContextToken string 매치메이킹 상태를 보유하는 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DoSeasonMatchmaking ( \u0026 matchmaking . DoSeasonMatchmakingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MatchmakingContextToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item matchmakingContextToken := result . MatchmakingContextToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DoSeasonMatchmakingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e doSeasonMatchmaking ( ( new DoSeasonMatchmakingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMatchmakingContextToken ( null ) ); $item = $result -\u003e getItem (); $matchmakingContextToken = $result -\u003e getMatchmakingContextToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DoSeasonMatchmakingRequest ; import io.gs2.matchmaking.result.DoSeasonMatchmakingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DoSeasonMatchmakingResult result = client . doSeasonMatchmaking ( new DoSeasonMatchmakingRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMatchmakingContextToken ( null ) ); SeasonGathering item = result . getItem (); String matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DoSeasonMatchmakingResult \u003e asyncResult = null ; yield return client . DoSeasonMatchmaking ( new Gs2 . Gs2Matchmaking . Request . DoSeasonMatchmakingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMatchmakingContextToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var matchmakingContextToken = result . MatchmakingContextToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . doSeasonMatchmaking ( new Gs2Matchmaking . DoSeasonMatchmakingRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMatchmakingContextToken ( null ) ); const item = result . getItem (); const matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . do_season_matchmaking ( matchmaking . DoSeasonMatchmakingRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_access_token ( 'accessToken-0001' ) . with_matchmaking_context_token ( None ) ) item = result . item matchmaking_context_token = result . matchmaking_context_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.do_season_matchmaking ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , accessToken = \"accessToken-0001\" , matchmakingContextToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.do_season_matchmaking_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , accessToken = \"accessToken-0001\" , matchmakingContextToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; doSeasonMatchmakingByUserId 자신이 참가할 수 있는 시즌 개더링을 찾아 참가한다 일정 시간 동안 검색을 수행하며, 대상을 찾지 못한 경우에는 매치메이킹 상태를 보유하는 토큰 을 반환한다. 다음 번에 매치메이킹 상태를 보유하는 토큰 을 첨부하여 다시 요청하면, 이전 검색에 이어서 검색 처리를 재개할 수 있다. 모든 시즌 개더링을 검색했지만 참가할 수 있는 시즌 개더링이 존재하지 않는 경우에는 시즌 개더링과 토큰 모두 null이 응답된다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID matchmakingContextToken string ~ 5120자 검색 재개에 사용하는 매치메이킹 상태를 보유하는 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SeasonGathering 참가한 시즌 개더링 matchmakingContextToken string 매치메이킹 상태를 보유하는 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DoSeasonMatchmakingByUserId ( \u0026 matchmaking . DoSeasonMatchmakingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), UserId : pointy . String ( \"user-0001\" ), MatchmakingContextToken : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item matchmakingContextToken := result . MatchmakingContextToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DoSeasonMatchmakingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e doSeasonMatchmakingByUserId ( ( new DoSeasonMatchmakingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMatchmakingContextToken ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $matchmakingContextToken = $result -\u003e getMatchmakingContextToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DoSeasonMatchmakingByUserIdRequest ; import io.gs2.matchmaking.result.DoSeasonMatchmakingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DoSeasonMatchmakingByUserIdResult result = client . doSeasonMatchmakingByUserId ( new DoSeasonMatchmakingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withUserId ( \"user-0001\" ) . withMatchmakingContextToken ( null ) . withTimeOffsetToken ( null ) ); SeasonGathering item = result . getItem (); String matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DoSeasonMatchmakingByUserIdResult \u003e asyncResult = null ; yield return client . DoSeasonMatchmakingByUserId ( new Gs2 . Gs2Matchmaking . Request . DoSeasonMatchmakingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithUserId ( \"user-0001\" ) . WithMatchmakingContextToken ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var matchmakingContextToken = result . MatchmakingContextToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . doSeasonMatchmakingByUserId ( new Gs2Matchmaking . DoSeasonMatchmakingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withUserId ( \"user-0001\" ) . withMatchmakingContextToken ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const matchmakingContextToken = result . getMatchmakingContextToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . do_season_matchmaking_by_user_id ( matchmaking . DoSeasonMatchmakingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_user_id ( 'user-0001' ) . with_matchmaking_context_token ( None ) . with_time_offset_token ( None ) ) item = result . item matchmaking_context_token = result . matchmaking_context_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.do_season_matchmaking_by_user_id ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , userId = \"user-0001\" , matchmakingContextToken = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.do_season_matchmaking_by_user_id_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , userId = \"user-0001\" , matchmakingContextToken = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; matchmakingContextToken = result.matchmakingContextToken ; getSeasonGathering 시즌 개더링 조회 지정된 시즌 개더링의 참가자 및 티어 정보를 포함한 상세 정보를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. seasonGatheringName string  UUID ~ 128자 시즌 게더링명 시즌 게더링 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SeasonGathering 시즌 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetSeasonGathering ( \u0026 matchmaking . GetSeasonGatheringRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Season : pointy . Int64 ( 0 ), Tier : pointy . Int64 ( 0 ), SeasonGatheringName : pointy . String ( \"gathering-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetSeasonGatheringRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getSeasonGathering ( ( new GetSeasonGatheringRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTier ( 0 ) -\u003e withSeasonGatheringName ( \"gathering-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetSeasonGatheringRequest ; import io.gs2.matchmaking.result.GetSeasonGatheringResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetSeasonGatheringResult result = client . getSeasonGathering ( new GetSeasonGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0L ) . withTier ( 0L ) . withSeasonGatheringName ( \"gathering-0001\" ) ); SeasonGathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetSeasonGatheringResult \u003e asyncResult = null ; yield return client . GetSeasonGathering ( new Gs2 . Gs2Matchmaking . Request . GetSeasonGatheringRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSeason ( 0L ) . WithTier ( 0L ) . WithSeasonGatheringName ( \"gathering-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getSeasonGathering ( new Gs2Matchmaking . GetSeasonGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0 ) . withTier ( 0 ) . withSeasonGatheringName ( \"gathering-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_season_gathering ( matchmaking . GetSeasonGatheringRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_season ( 0 ) . with_tier ( 0 ) . with_season_gathering_name ( 'gathering-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_season_gathering ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , seasonGatheringName = \"gathering-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_season_gathering_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , seasonGatheringName = \"gathering-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyIncludeParticipant 영속 개더링에 사용자 ID가 포함되어 있는지 검증 지정된 시즌 개더링에 사용자가 참가하고 있는지 여부를 검증합니다. 검증 타입은 ‘include’(사용자가 참가자임을 확인) 또는 ’notInclude’(사용자가 참가자가 아님을 확인)를 지정할 수 있습니다. 검증 조건이 충족되지 않으면 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. seasonGatheringName string  UUID ~ 128자 시즌 게더링명 시즌 게더링 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 verifyType 문자열 열거형 enum {   “include”,   “notInclude” }  검증 종류 정의 설명 include 시즌 개더링에 지정한 사용자가 포함되어 있음 notInclude 시즌 개더링에 지정한 사용자가 포함되지 않음 Result 타입 설명 item SeasonGathering 시즌 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . VerifyIncludeParticipant ( \u0026 matchmaking . VerifyIncludeParticipantRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Season : pointy . Int64 ( 0 ), Tier : pointy . Int64 ( 0 ), SeasonGatheringName : pointy . String ( \"gathering-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), VerifyType : pointy . String ( \"include\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\VerifyIncludeParticipantRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e verifyIncludeParticipant ( ( new VerifyIncludeParticipantRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTier ( 0 ) -\u003e withSeasonGatheringName ( \"gathering-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withVerifyType ( \"include\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.VerifyIncludeParticipantRequest ; import io.gs2.matchmaking.result.VerifyIncludeParticipantResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { VerifyIncludeParticipantResult result = client . verifyIncludeParticipant ( new VerifyIncludeParticipantRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0L ) . withTier ( 0L ) . withSeasonGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVerifyType ( \"include\" ) ); SeasonGathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . VerifyIncludeParticipantResult \u003e asyncResult = null ; yield return client . VerifyIncludeParticipant ( new Gs2 . Gs2Matchmaking . Request . VerifyIncludeParticipantRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSeason ( 0L ) . WithTier ( 0L ) . WithSeasonGatheringName ( \"gathering-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithVerifyType ( \"include\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . verifyIncludeParticipant ( new Gs2Matchmaking . VerifyIncludeParticipantRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0 ) . withTier ( 0 ) . withSeasonGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVerifyType ( \"include\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . verify_include_participant ( matchmaking . VerifyIncludeParticipantRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_season ( 0 ) . with_tier ( 0 ) . with_season_gathering_name ( 'gathering-0001' ) . with_access_token ( 'accessToken-0001' ) . with_verify_type ( 'include' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.verify_include_participant ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , seasonGatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , verifyType = \"include\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.verify_include_participant_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , seasonGatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , verifyType = \"include\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyIncludeParticipantByUserId 사용자 ID를 지정하여 영속 개더링에 사용자 ID가 포함되어 있는지 검증 지정된 사용자가 시즌 개더링에 참가하고 있는지 여부를 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. seasonGatheringName string  UUID ~ 128자 시즌 게더링명 시즌 게더링 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID verifyType 문자열 열거형 enum {   “include”,   “notInclude” }  검증 종류 정의 설명 include 시즌 개더링에 지정한 사용자가 포함되어 있음 notInclude 시즌 개더링에 지정한 사용자가 포함되지 않음 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SeasonGathering 시즌 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . VerifyIncludeParticipantByUserId ( \u0026 matchmaking . VerifyIncludeParticipantByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Season : pointy . Int64 ( 0 ), Tier : pointy . Int64 ( 0 ), SeasonGatheringName : pointy . String ( \"gathering-0001\" ), UserId : pointy . String ( \"user-0001\" ), VerifyType : pointy . String ( \"include\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\VerifyIncludeParticipantByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e verifyIncludeParticipantByUserId ( ( new VerifyIncludeParticipantByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTier ( 0 ) -\u003e withSeasonGatheringName ( \"gathering-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withVerifyType ( \"include\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.VerifyIncludeParticipantByUserIdRequest ; import io.gs2.matchmaking.result.VerifyIncludeParticipantByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { VerifyIncludeParticipantByUserIdResult result = client . verifyIncludeParticipantByUserId ( new VerifyIncludeParticipantByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0L ) . withTier ( 0L ) . withSeasonGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withVerifyType ( \"include\" ) . withTimeOffsetToken ( null ) ); SeasonGathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . VerifyIncludeParticipantByUserIdResult \u003e asyncResult = null ; yield return client . VerifyIncludeParticipantByUserId ( new Gs2 . Gs2Matchmaking . Request . VerifyIncludeParticipantByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSeason ( 0L ) . WithTier ( 0L ) . WithSeasonGatheringName ( \"gathering-0001\" ) . WithUserId ( \"user-0001\" ) . WithVerifyType ( \"include\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . verifyIncludeParticipantByUserId ( new Gs2Matchmaking . VerifyIncludeParticipantByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0 ) . withTier ( 0 ) . withSeasonGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withVerifyType ( \"include\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . verify_include_participant_by_user_id ( matchmaking . VerifyIncludeParticipantByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_season ( 0 ) . with_tier ( 0 ) . with_season_gathering_name ( 'gathering-0001' ) . with_user_id ( 'user-0001' ) . with_verify_type ( 'include' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.verify_include_participant_by_user_id ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , seasonGatheringName = \"gathering-0001\" , userId = \"user-0001\" , verifyType = \"include\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.verify_include_participant_by_user_id_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , seasonGatheringName = \"gathering-0001\" , userId = \"user-0001\" , verifyType = \"include\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSeasonGathering 시즌 개더링 삭제 지정된 시즌 개더링 및 관련된 모든 참가자 레코드를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. seasonGatheringName string  UUID ~ 128자 시즌 게더링명 시즌 게더링 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SeasonGathering 삭제한 시즌 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DeleteSeasonGathering ( \u0026 matchmaking . DeleteSeasonGatheringRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Season : pointy . Int64 ( 0 ), Tier : pointy . Int64 ( 0 ), SeasonGatheringName : pointy . String ( \"gathering-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DeleteSeasonGatheringRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e deleteSeasonGathering ( ( new DeleteSeasonGatheringRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTier ( 0 ) -\u003e withSeasonGatheringName ( \"gathering-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DeleteSeasonGatheringRequest ; import io.gs2.matchmaking.result.DeleteSeasonGatheringResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DeleteSeasonGatheringResult result = client . deleteSeasonGathering ( new DeleteSeasonGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0L ) . withTier ( 0L ) . withSeasonGatheringName ( \"gathering-0001\" ) ); SeasonGathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DeleteSeasonGatheringResult \u003e asyncResult = null ; yield return client . DeleteSeasonGathering ( new Gs2 . Gs2Matchmaking . Request . DeleteSeasonGatheringRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSeason ( 0L ) . WithTier ( 0L ) . WithSeasonGatheringName ( \"gathering-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . deleteSeasonGathering ( new Gs2Matchmaking . DeleteSeasonGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0 ) . withTier ( 0 ) . withSeasonGatheringName ( \"gathering-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . delete_season_gathering ( matchmaking . DeleteSeasonGatheringRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_season ( 0 ) . with_tier ( 0 ) . with_season_gathering_name ( 'gathering-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.delete_season_gathering ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , seasonGatheringName = \"gathering-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.delete_season_gathering_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , season = 0 , tier = 0 , seasonGatheringName = \"gathering-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeJoinedSeasonGatherings 참가한 시즌 개더링 목록 조회 요청한 사용자가 참가한 시즌 개더링의 페이지네이션 목록을 조회합니다. 시즌 이름으로 필터링할 수 있습니다. 플레이어가 속한 시즌 매치메이킹 그룹을 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 seasonName string ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 시즌 개더링 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeJoinedSeasonGatherings ( \u0026 matchmaking . DescribeJoinedSeasonGatheringsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeJoinedSeasonGatheringsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeJoinedSeasonGatherings ( ( new DescribeJoinedSeasonGatheringsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeJoinedSeasonGatheringsRequest ; import io.gs2.matchmaking.result.DescribeJoinedSeasonGatheringsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeJoinedSeasonGatheringsResult result = client . describeJoinedSeasonGatherings ( new DescribeJoinedSeasonGatheringsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeasonName ( \"season-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List JoinedSeasonGathering \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeJoinedSeasonGatheringsResult \u003e asyncResult = null ; yield return client . DescribeJoinedSeasonGatherings ( new Gs2 . Gs2Matchmaking . Request . DescribeJoinedSeasonGatheringsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeJoinedSeasonGatherings ( new Gs2Matchmaking . DescribeJoinedSeasonGatheringsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeasonName ( \"season-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_joined_season_gatherings ( matchmaking . DescribeJoinedSeasonGatheringsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season_name ( 'season-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_joined_season_gatherings ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , seasonName = \"season-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_joined_season_gatherings_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , seasonName = \"season-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeJoinedSeasonGatheringsByUserId 사용자 ID를 지정하여 참가한 시즌 개더링 목록 조회 지정된 사용자가 참가한 시즌 개더링의 페이지네이션 목록을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID seasonName string ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 시즌 개더링 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeJoinedSeasonGatheringsByUserId ( \u0026 matchmaking . DescribeJoinedSeasonGatheringsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeJoinedSeasonGatheringsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeJoinedSeasonGatheringsByUserId ( ( new DescribeJoinedSeasonGatheringsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeJoinedSeasonGatheringsByUserIdRequest ; import io.gs2.matchmaking.result.DescribeJoinedSeasonGatheringsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeJoinedSeasonGatheringsByUserIdResult result = client . describeJoinedSeasonGatheringsByUserId ( new DescribeJoinedSeasonGatheringsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSeasonName ( \"season-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List JoinedSeasonGathering \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeJoinedSeasonGatheringsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeJoinedSeasonGatheringsByUserId ( new Gs2 . Gs2Matchmaking . Request . DescribeJoinedSeasonGatheringsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeJoinedSeasonGatheringsByUserId ( new Gs2Matchmaking . DescribeJoinedSeasonGatheringsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSeasonName ( \"season-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_joined_season_gatherings_by_user_id ( matchmaking . DescribeJoinedSeasonGatheringsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_season_name ( 'season-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_joined_season_gatherings_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , seasonName = \"season-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_joined_season_gatherings_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , seasonName = \"season-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getJoinedSeasonGathering 참가한 시즌 개더링 조회 지정된 시즌에서 요청한 사용자가 참가한 시즌 개더링을 조회합니다. 대상 개더링이 이미 존재하지 않는 경우, 참가 기록은 자동으로 정리(클린업)됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item JoinedSeasonGathering 시즌 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetJoinedSeasonGathering ( \u0026 matchmaking . GetJoinedSeasonGatheringRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Season : pointy . Int64 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetJoinedSeasonGatheringRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getJoinedSeasonGathering ( ( new GetJoinedSeasonGatheringRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSeason ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetJoinedSeasonGatheringRequest ; import io.gs2.matchmaking.result.GetJoinedSeasonGatheringResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetJoinedSeasonGatheringResult result = client . getJoinedSeasonGathering ( new GetJoinedSeasonGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0L ) ); JoinedSeasonGathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetJoinedSeasonGatheringResult \u003e asyncResult = null ; yield return client . GetJoinedSeasonGathering ( new Gs2 . Gs2Matchmaking . Request . GetJoinedSeasonGatheringRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSeason ( 0L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getJoinedSeasonGathering ( new Gs2Matchmaking . GetJoinedSeasonGatheringRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_joined_season_gathering ( matchmaking . GetJoinedSeasonGatheringRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season_name ( 'season-0001' ) . with_season ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_joined_season_gathering ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , seasonName = \"season-0001\" , season = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_joined_season_gathering_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , seasonName = \"season-0001\" , season = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getJoinedSeasonGatheringByUserId 사용자 ID를 지정하여 참가한 시즌 개더링 조회 지정된 사용자가 지정 시즌에서 참가한 시즌 개더링을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item JoinedSeasonGathering 시즌 개더링 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetJoinedSeasonGatheringByUserId ( \u0026 matchmaking . GetJoinedSeasonGatheringByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetJoinedSeasonGatheringByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getJoinedSeasonGatheringByUserId ( ( new GetJoinedSeasonGatheringByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetJoinedSeasonGatheringByUserIdRequest ; import io.gs2.matchmaking.result.GetJoinedSeasonGatheringByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetJoinedSeasonGatheringByUserIdResult result = client . getJoinedSeasonGatheringByUserId ( new GetJoinedSeasonGatheringByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); JoinedSeasonGathering item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetJoinedSeasonGatheringByUserIdResult \u003e asyncResult = null ; yield return client . GetJoinedSeasonGatheringByUserId ( new Gs2 . Gs2Matchmaking . Request . GetJoinedSeasonGatheringByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getJoinedSeasonGatheringByUserId ( new Gs2Matchmaking . GetJoinedSeasonGatheringByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSeasonName ( \"season-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_joined_season_gathering_by_user_id ( matchmaking . GetJoinedSeasonGatheringByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_season_name ( 'season-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_joined_season_gathering_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , seasonName = \"season-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_joined_season_gathering_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , seasonName = \"season-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRatings 레이팅 목록 조회 요청한 사용자의 모든 레이팅 엔트리에 대한 페이지네이션 목록을 조회합니다. 각 레이팅 엔트리에는 Glicko-2 알고리즘을 기반으로 한 현재 레이팅 값과 레이팅 편차(RD)가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 레이팅 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeRatings ( \u0026 matchmaking . DescribeRatingsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeRatingsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeRatings ( ( new DescribeRatingsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeRatingsRequest ; import io.gs2.matchmaking.result.DescribeRatingsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeRatingsResult result = client . describeRatings ( new DescribeRatingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Rating \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeRatingsResult \u003e asyncResult = null ; yield return client . DescribeRatings ( new Gs2 . Gs2Matchmaking . Request . DescribeRatingsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeRatings ( new Gs2Matchmaking . DescribeRatingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_ratings ( matchmaking . DescribeRatingsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_ratings ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_ratings_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeRatingsByUserId 사용자 ID를 지정하여 레이팅 목록 조회 지정된 사용자의 모든 레이팅 엔트리에 대한 페이지네이션 목록을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 레이팅 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeRatingsByUserId ( \u0026 matchmaking . DescribeRatingsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeRatingsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeRatingsByUserId ( ( new DescribeRatingsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeRatingsByUserIdRequest ; import io.gs2.matchmaking.result.DescribeRatingsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeRatingsByUserIdResult result = client . describeRatingsByUserId ( new DescribeRatingsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Rating \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeRatingsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeRatingsByUserId ( new Gs2 . Gs2Matchmaking . Request . DescribeRatingsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeRatingsByUserId ( new Gs2Matchmaking . DescribeRatingsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_ratings_by_user_id ( matchmaking . DescribeRatingsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_ratings_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_ratings_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getRating 레이팅 조회 지정된 레이팅 모델의 현재 레이팅 값과 레이팅 편차(RD)를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 ratingName string  ~ 128자 레이팅 이름 레이팅 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Rating 레이팅 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetRating ( \u0026 matchmaking . GetRatingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RatingName : pointy . String ( \"rating-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetRatingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getRating ( ( new GetRatingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRatingName ( \"rating-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetRatingRequest ; import io.gs2.matchmaking.result.GetRatingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetRatingResult result = client . getRating ( new GetRatingRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRatingName ( \"rating-0001\" ) ); Rating item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetRatingResult \u003e asyncResult = null ; yield return client . GetRating ( new Gs2 . Gs2Matchmaking . Request . GetRatingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRatingName ( \"rating-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getRating ( new Gs2Matchmaking . GetRatingRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRatingName ( \"rating-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_rating ( matchmaking . GetRatingRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_rating_name ( 'rating-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_rating ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , ratingName = \"rating-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_rating_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , ratingName = \"rating-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRatingByUserId 사용자 ID를 지정하여 레이팅 조회 지정된 사용자와 레이팅 모델의 현재 레이팅 값과 레이팅 편차(RD)를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID ratingName string  ~ 128자 레이팅 이름 레이팅 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Rating 레이팅 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetRatingByUserId ( \u0026 matchmaking . GetRatingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RatingName : pointy . String ( \"rating-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetRatingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getRatingByUserId ( ( new GetRatingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRatingName ( \"rating-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetRatingByUserIdRequest ; import io.gs2.matchmaking.result.GetRatingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetRatingByUserIdResult result = client . getRatingByUserId ( new GetRatingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRatingName ( \"rating-0001\" ) . withTimeOffsetToken ( null ) ); Rating item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetRatingByUserIdResult \u003e asyncResult = null ; yield return client . GetRatingByUserId ( new Gs2 . Gs2Matchmaking . Request . GetRatingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRatingName ( \"rating-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getRatingByUserId ( new Gs2Matchmaking . GetRatingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRatingName ( \"rating-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_rating_by_user_id ( matchmaking . GetRatingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_rating_name ( 'rating-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_rating_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , ratingName = \"rating-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_rating_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , ratingName = \"rating-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; putResult 레이팅 값 재계산 실행 레이팅 계산 처리에는 Glicko-2 rating system을 기반으로 한 계산 알고리즘을 채택하고 있습니다. 레이팅 값의 초기값은 1500이며, 레이팅 값 차이가 큰 상대에게 승리할수록 상승폭이 커지고, 마찬가지로 패배한 측은 감소폭이 커집니다. 레이팅 계산에는 참가한 사용자 ID의 리스트가 필요합니다. 따라서 클라이언트에서 직접 이 API를 호출하는 것은 적절하지 않습니다. 게임의 승패를 판단할 수 있는 게임 서버에서 호출하도록 해주세요. P2P 대전 등 클라이언트 주도로 대전을 구현하는 경우에는 투표 기능을 이용하여 승패를 결정하도록 해주세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 이름 레이팅 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. gameResults List 0 ~ 10 items 대전 결과 Result 타입 설명 items List 갱신 후 레이팅 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . PutResult ( \u0026 matchmaking . PutResultRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RatingName : pointy . String ( \"rating-0001\" ), GameResults : [] matchmaking . GameResult { matchmaking . GameResult { Rank : pointy . Int32 ( 1 ), UserId : pointy . String ( \"user-0001\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0002\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0003\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 3 ), UserId : pointy . String ( \"user-0004\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\PutResultRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e putResult ( ( new PutResultRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRatingName ( \"rating-0001\" ) -\u003e withGameResults ([ ( new GameResult ()) -\u003e withRank ( 1 ) -\u003e withUserId ( \"user-0001\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0002\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0003\" ), ( new GameResult ()) -\u003e withRank ( 3 ) -\u003e withUserId ( \"user-0004\" ), ]) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.PutResultRequest ; import io.gs2.matchmaking.result.PutResultResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { PutResultResult result = client . putResult ( new PutResultRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"rating-0001\" ) . withGameResults ( Arrays . asList ( new GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ) )) ); List Rating \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . PutResultResult \u003e asyncResult = null ; yield return client . PutResult ( new Gs2 . Gs2Matchmaking . Request . PutResultRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRatingName ( \"rating-0001\" ) . WithGameResults ( new Gs2 . Gs2Matchmaking . Model . GameResult [] { new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 1 ) . WithUserId ( \"user-0001\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0002\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0003\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 3 ) . WithUserId ( \"user-0004\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . putResult ( new Gs2Matchmaking . PutResultRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"rating-0001\" ) . withGameResults ([ new Gs2Matchmaking . model . GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ), ]) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . put_result ( matchmaking . PutResultRequest () . with_namespace_name ( 'namespace-0001' ) . with_rating_name ( 'rating-0001' ) . with_game_results ([ matchmaking . GameResult () . with_rank ( 1 ) . with_user_id ( 'user-0001' ), matchmaking . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0002' ), matchmaking . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0003' ), matchmaking . GameResult () . with_rank ( 3 ) . with_user_id ( 'user-0004' ), ]) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.put_result ({ namespaceName = \"namespace-0001\" , ratingName = \"rating-0001\" , gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'matchmaking' ) api_result_handler = client.put_result_async ({ namespaceName = \"namespace-0001\" , ratingName = \"rating-0001\" , gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; deleteRating 레이팅 삭제 지정된 사용자의 레이팅 기록을 삭제하고, 다음 레이팅 계산 시 초기값으로 재설정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID ratingName string  ~ 128자 레이팅 이름 레이팅 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Rating 삭제된 레이팅 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DeleteRating ( \u0026 matchmaking . DeleteRatingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RatingName : pointy . String ( \"rating-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DeleteRatingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e deleteRating ( ( new DeleteRatingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRatingName ( \"rating-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DeleteRatingRequest ; import io.gs2.matchmaking.result.DeleteRatingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DeleteRatingResult result = client . deleteRating ( new DeleteRatingRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRatingName ( \"rating-0001\" ) . withTimeOffsetToken ( null ) ); Rating item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DeleteRatingResult \u003e asyncResult = null ; yield return client . DeleteRating ( new Gs2 . Gs2Matchmaking . Request . DeleteRatingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRatingName ( \"rating-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . deleteRating ( new Gs2Matchmaking . DeleteRatingRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRatingName ( \"rating-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . delete_rating ( matchmaking . DeleteRatingRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_rating_name ( 'rating-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.delete_rating ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , ratingName = \"rating-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.delete_rating_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , ratingName = \"rating-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBallot 서명과 함께 투표용지 생성 투표 프로세스에서 사용하기 위한 암호 서명이 첨부된 투표용지를 생성합니다. 투표용지에는 레이팅 이름, 개더링 이름, 사용자 ID, 참가 인원이 포함되며, 변조 감지를 위해 지정된 GS2-Key로 서명됩니다. 반환된 바디와 서명을 Vote 또는 VoteMultiple 엔드포인트로 전송해 주세요. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. accessToken string  ~ 128자 액세스 토큰 numberOfPlayer int  2 ~ 10 참가 인원 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Ballot 투표용지 body string 서명 대상 데이터 signature string 서명 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetBallot ( \u0026 matchmaking . GetBallotRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RatingName : pointy . String ( \"rating-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), NumberOfPlayer : pointy . Int32 ( 4 ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetBallotRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getBallot ( ( new GetBallotRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRatingName ( \"rating-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withNumberOfPlayer ( 4 ) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetBallotRequest ; import io.gs2.matchmaking.result.GetBallotResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetBallotResult result = client . getBallot ( new GetBallotRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"rating-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withNumberOfPlayer ( 4 ) . withKeyId ( \"key-0001\" ) ); Ballot item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetBallotResult \u003e asyncResult = null ; yield return client . GetBallot ( new Gs2 . Gs2Matchmaking . Request . GetBallotRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRatingName ( \"rating-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithNumberOfPlayer ( 4 ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getBallot ( new Gs2Matchmaking . GetBallotRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"rating-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withNumberOfPlayer ( 4 ) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_ballot ( matchmaking . GetBallotRequest () . with_namespace_name ( 'namespace-0001' ) . with_rating_name ( 'rating-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_access_token ( 'accessToken-0001' ) . with_number_of_player ( 4 ) . with_key_id ( 'key-0001' ) ) item = result . item body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_ballot ({ namespaceName = \"namespace-0001\" , ratingName = \"rating-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , numberOfPlayer = 4 , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_ballot_async ({ namespaceName = \"namespace-0001\" , ratingName = \"rating-0001\" , gatheringName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , numberOfPlayer = 4 , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; getBallotByUserId 사용자 ID를 지정하여 서명과 함께 투표용지 생성 지정된 사용자의 투표 프로세스에서 사용하기 위한 암호 서명이 첨부된 투표용지를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. userId string  ~ 128자 사용자ID numberOfPlayer int  2 ~ 10 참가 인원 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Ballot 투표용지 body string 서명 대상 데이터 signature string 서명 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetBallotByUserId ( \u0026 matchmaking . GetBallotByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RatingName : pointy . String ( \"rating-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), UserId : pointy . String ( \"user-0001\" ), NumberOfPlayer : pointy . Int32 ( 4 ), KeyId : pointy . String ( \"key-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetBallotByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getBallotByUserId ( ( new GetBallotByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRatingName ( \"rating-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withNumberOfPlayer ( 4 ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetBallotByUserIdRequest ; import io.gs2.matchmaking.result.GetBallotByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetBallotByUserIdResult result = client . getBallotByUserId ( new GetBallotByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"rating-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withNumberOfPlayer ( 4 ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); Ballot item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetBallotByUserIdResult \u003e asyncResult = null ; yield return client . GetBallotByUserId ( new Gs2 . Gs2Matchmaking . Request . GetBallotByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRatingName ( \"rating-0001\" ) . WithGatheringName ( \"gathering-0001\" ) . WithUserId ( \"user-0001\" ) . WithNumberOfPlayer ( 4 ) . WithKeyId ( \"key-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getBallotByUserId ( new Gs2Matchmaking . GetBallotByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"rating-0001\" ) . withGatheringName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withNumberOfPlayer ( 4 ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_ballot_by_user_id ( matchmaking . GetBallotByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_rating_name ( 'rating-0001' ) . with_gathering_name ( 'gathering-0001' ) . with_user_id ( 'user-0001' ) . with_number_of_player ( 4 ) . with_key_id ( 'key-0001' ) . with_time_offset_token ( None ) ) item = result . item body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_ballot_by_user_id ({ namespaceName = \"namespace-0001\" , ratingName = \"rating-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , numberOfPlayer = 4 , keyId = \"key-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_ballot_by_user_id_async ({ namespaceName = \"namespace-0001\" , ratingName = \"rating-0001\" , gatheringName = \"gathering-0001\" , userId = \"user-0001\" , numberOfPlayer = 4 , keyId = \"key-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; vote 대전 결과를 투표 투표는 최초 투표가 이루어진 후 5분 이내에 진행해야 합니다. 즉, 결과는 즉시 반영되지 않고, 투표 시작으로부터 약 5분 후 또는 모든 플레이어가 투표를 완료했을 때 반영됩니다. 5분 이내에 모든 투표용지를 회수하지 못한 경우, 그 시점까지의 투표 내용으로 다수결을 취해 결과를 결정합니다. 각 결과의 투표 수가 동일할 경우 결과는 폐기됩니다(스크립트로 동작을 변경 가능). 결과를 즉시 반영하고 싶은 경우, 승리한 측의 대표 플레이어가 각 플레이어로부터 투표용지를 모아 voteMultiple을 호출하면 결과를 즉시 반영할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ballotBody string  ~ 1024자 투표용지의 서명 대상 데이터 ballotSignature string  ~ 256자 투표용지의 서명 gameResults List 0 ~ 10 items 투표 내용. 대전을 진행한 플레이어 그룹 1에 속한 사용자 ID 리스트 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Ballot 투표용지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . Vote ( \u0026 matchmaking . VoteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BallotBody : pointy . String ( \"ballotBody...\" ), BallotSignature : pointy . String ( \"ballotSignature...\" ), GameResults : [] matchmaking . GameResult { matchmaking . GameResult { Rank : pointy . Int32 ( 1 ), UserId : pointy . String ( \"user-0001\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0002\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0003\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 3 ), UserId : pointy . String ( \"user-0004\" ), }, }, KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\VoteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e vote ( ( new VoteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBallotBody ( \"ballotBody...\" ) -\u003e withBallotSignature ( \"ballotSignature...\" ) -\u003e withGameResults ([ ( new GameResult ()) -\u003e withRank ( 1 ) -\u003e withUserId ( \"user-0001\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0002\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0003\" ), ( new GameResult ()) -\u003e withRank ( 3 ) -\u003e withUserId ( \"user-0004\" ), ]) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.VoteRequest ; import io.gs2.matchmaking.result.VoteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { VoteResult result = client . vote ( new VoteRequest () . withNamespaceName ( \"namespace-0001\" ) . withBallotBody ( \"ballotBody...\" ) . withBallotSignature ( \"ballotSignature...\" ) . withGameResults ( Arrays . asList ( new GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ) )) . withKeyId ( \"key-0001\" ) ); Ballot item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . VoteResult \u003e asyncResult = null ; yield return client . Vote ( new Gs2 . Gs2Matchmaking . Request . VoteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBallotBody ( \"ballotBody...\" ) . WithBallotSignature ( \"ballotSignature...\" ) . WithGameResults ( new Gs2 . Gs2Matchmaking . Model . GameResult [] { new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 1 ) . WithUserId ( \"user-0001\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0002\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0003\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 3 ) . WithUserId ( \"user-0004\" ), }) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . vote ( new Gs2Matchmaking . VoteRequest () . withNamespaceName ( \"namespace-0001\" ) . withBallotBody ( \"ballotBody...\" ) . withBallotSignature ( \"ballotSignature...\" ) . withGameResults ([ new Gs2Matchmaking . model . GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ), ]) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . vote ( matchmaking . VoteRequest () . with_namespace_name ( 'namespace-0001' ) . with_ballot_body ( 'ballotBody...' ) . with_ballot_signature ( 'ballotSignature...' ) . with_game_results ([ matchmaking . GameResult () . with_rank ( 1 ) . with_user_id ( 'user-0001' ), matchmaking . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0002' ), matchmaking . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0003' ), matchmaking . GameResult () . with_rank ( 3 ) . with_user_id ( 'user-0004' ), ]) . with_key_id ( 'key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.vote ({ namespaceName = \"namespace-0001\" , ballotBody = \"ballotBody...\" , ballotSignature = \"ballotSignature...\" , gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.vote_async ({ namespaceName = \"namespace-0001\" , ballotBody = \"ballotBody...\" , ballotSignature = \"ballotSignature...\" , gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; voteMultiple 대전 결과를 일괄 투표 게임에서 승리한 측이 다른 플레이어들의 투표용지를 모아 일괄로 투표할 때 사용합니다. ‘승리한 측’이라고 표현한 이유는, 패배한 측이 자신들이 이긴 것으로 보고할 유인은 있지만 그 반대는 없기 때문입니다. 패배한 측이 투표용지를 건네지 않을 가능성이 있지만, 그 경우에도 과반수의 투표용지만 있으면 결과를 통과시킬 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. signedBallots List 0 ~ 10 items 서명이 첨부된 투표용지 리스트 gameResults List 0 ~ 10 items 투표 내용. 대전을 진행한 플레이어 그룹 1에 속한 사용자 ID 리스트 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Ballot 투표용지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . VoteMultiple ( \u0026 matchmaking . VoteMultipleRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SignedBallots : [] matchmaking . SignedBallot { matchmaking . SignedBallot { Body : pointy . String ( \"aaa\" ), Signature : pointy . String ( \"bbb\" ), }, matchmaking . SignedBallot { Body : pointy . String ( \"aaa\" ), Signature : pointy . String ( \"bbb\" ), }, matchmaking . SignedBallot { Body : pointy . String ( \"aaa\" ), Signature : pointy . String ( \"bbb\" ), }, matchmaking . SignedBallot { Body : pointy . String ( \"aaa\" ), Signature : pointy . String ( \"bbb\" ), }, }, GameResults : [] matchmaking . GameResult { matchmaking . GameResult { Rank : pointy . Int32 ( 1 ), UserId : pointy . String ( \"user-0001\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0002\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0003\" ), }, matchmaking . GameResult { Rank : pointy . Int32 ( 3 ), UserId : pointy . String ( \"user-0004\" ), }, }, KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\VoteMultipleRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e voteMultiple ( ( new VoteMultipleRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSignedBallots ([ ( new SignedBallot ()) -\u003e withBody ( \"aaa\" ) -\u003e withSignature ( \"bbb\" ), ( new SignedBallot ()) -\u003e withBody ( \"aaa\" ) -\u003e withSignature ( \"bbb\" ), ( new SignedBallot ()) -\u003e withBody ( \"aaa\" ) -\u003e withSignature ( \"bbb\" ), ( new SignedBallot ()) -\u003e withBody ( \"aaa\" ) -\u003e withSignature ( \"bbb\" ), ]) -\u003e withGameResults ([ ( new GameResult ()) -\u003e withRank ( 1 ) -\u003e withUserId ( \"user-0001\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0002\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0003\" ), ( new GameResult ()) -\u003e withRank ( 3 ) -\u003e withUserId ( \"user-0004\" ), ]) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.VoteMultipleRequest ; import io.gs2.matchmaking.result.VoteMultipleResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { VoteMultipleResult result = client . voteMultiple ( new VoteMultipleRequest () . withNamespaceName ( \"namespace-0001\" ) . withSignedBallots ( Arrays . asList ( new SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ) )) . withGameResults ( Arrays . asList ( new GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ) )) . withKeyId ( \"key-0001\" ) ); Ballot item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . VoteMultipleResult \u003e asyncResult = null ; yield return client . VoteMultiple ( new Gs2 . Gs2Matchmaking . Request . VoteMultipleRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSignedBallots ( new Gs2 . Gs2Matchmaking . Model . SignedBallot [] { new Gs2 . Gs2Matchmaking . Model . SignedBallot () . WithBody ( \"aaa\" ) . WithSignature ( \"bbb\" ), new Gs2 . Gs2Matchmaking . Model . SignedBallot () . WithBody ( \"aaa\" ) . WithSignature ( \"bbb\" ), new Gs2 . Gs2Matchmaking . Model . SignedBallot () . WithBody ( \"aaa\" ) . WithSignature ( \"bbb\" ), new Gs2 . Gs2Matchmaking . Model . SignedBallot () . WithBody ( \"aaa\" ) . WithSignature ( \"bbb\" ), }) . WithGameResults ( new Gs2 . Gs2Matchmaking . Model . GameResult [] { new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 1 ) . WithUserId ( \"user-0001\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0002\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0003\" ), new Gs2 . Gs2Matchmaking . Model . GameResult () . WithRank ( 3 ) . WithUserId ( \"user-0004\" ), }) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . voteMultiple ( new Gs2Matchmaking . VoteMultipleRequest () . withNamespaceName ( \"namespace-0001\" ) . withSignedBallots ([ new Gs2Matchmaking . model . SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new Gs2Matchmaking . model . SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new Gs2Matchmaking . model . SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new Gs2Matchmaking . model . SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), ]) . withGameResults ([ new Gs2Matchmaking . model . GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new Gs2Matchmaking . model . GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ), ]) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . vote_multiple ( matchmaking . VoteMultipleRequest () . with_namespace_name ( 'namespace-0001' ) . with_signed_ballots ([ matchmaking . SignedBallot () . with_body ( 'aaa' ) . with_signature ( 'bbb' ), matchmaking . SignedBallot () . with_body ( 'aaa' ) . with_signature ( 'bbb' ), matchmaking . SignedBallot () . with_body ( 'aaa' ) . with_signature ( 'bbb' ), matchmaking . SignedBallot () . with_body ( 'aaa' ) . with_signature ( 'bbb' ), ]) . with_game_results ([ matchmaking . GameResult () . with_rank ( 1 ) . with_user_id ( 'user-0001' ), matchmaking . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0002' ), matchmaking . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0003' ), matchmaking . GameResult () . with_rank ( 3 ) . with_user_id ( 'user-0004' ), ]) . with_key_id ( 'key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.vote_multiple ({ namespaceName = \"namespace-0001\" , signedBallots = { { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , } }, gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.vote_multiple_async ({ namespaceName = \"namespace-0001\" , signedBallots = { { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , } }, gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; commitVote 투표 상황을 강제 확정 지정된 개더링의 투표 프로세스를 강제로 완료합니다. 결과는 지금까지 수집된 투표용지를 기반으로 다수결로 결정됩니다. 표가 동수인 경우 결과는 폐기됩니다(스크립트로 동작 변경 가능). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. gatheringName string  UUID ~ 128자 개더링 이름 개더링의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 개더링을 식별하기 위해 사용됩니다. Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CommitVote ( \u0026 matchmaking . CommitVoteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RatingName : pointy . String ( \"rating-0001\" ), GatheringName : pointy . String ( \"gathering-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CommitVoteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e commitVote ( ( new CommitVoteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRatingName ( \"rating-0001\" ) -\u003e withGatheringName ( \"gathering-0001\" ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CommitVoteRequest ; import io.gs2.matchmaking.result.CommitVoteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CommitVoteResult result = client . commitVote ( new CommitVoteRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"rating-0001\" ) . withGatheringName ( \"gathering-0001\" ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CommitVoteResult \u003e asyncResult = null ; yield return client . CommitVote ( new Gs2 . Gs2Matchmaking . Request . CommitVoteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRatingName ( \"rating-0001\" ) . WithGatheringName ( \"gathering-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . commitVote ( new Gs2Matchmaking . CommitVoteRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"rating-0001\" ) . withGatheringName ( \"gathering-0001\" ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . commit_vote ( matchmaking . CommitVoteRequest () . with_namespace_name ( 'namespace-0001' ) . with_rating_name ( 'rating-0001' ) . with_gathering_name ( 'gathering-0001' ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.commit_vote ({ namespaceName = \"namespace-0001\" , ratingName = \"rating-0001\" , gatheringName = \"gathering-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'matchmaking' ) api_result_handler = client.commit_vote_async ({ namespaceName = \"namespace-0001\" , ratingName = \"rating-0001\" , gatheringName = \"gathering-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result describeRatingModels 레이팅 모델 목록 조회 지정된 네임스페이스의 현재 활성화된 레이팅 모델 목록을 조회합니다. 레이팅 모델은 초기값이나 변동성 등 Glicko-2 알고리즘의 매개변수를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 레이팅 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeRatingModels ( \u0026 matchmaking . DescribeRatingModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeRatingModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeRatingModels ( ( new DescribeRatingModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeRatingModelsRequest ; import io.gs2.matchmaking.result.DescribeRatingModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeRatingModelsResult result = client . describeRatingModels ( new DescribeRatingModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List RatingModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeRatingModelsResult \u003e asyncResult = null ; yield return client . DescribeRatingModels ( new Gs2 . Gs2Matchmaking . Request . DescribeRatingModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeRatingModels ( new Gs2Matchmaking . DescribeRatingModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_rating_models ( matchmaking . DescribeRatingModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_rating_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_rating_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getRatingModel 레이팅 모델 조회 지정된 레이팅 모델의 Glicko-2 알고리즘 초기값 및 변동성 설정을 포함한 정보를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. Result 타입 설명 item RatingModel 레이팅 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetRatingModel ( \u0026 matchmaking . GetRatingModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RatingName : pointy . String ( \"mode1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetRatingModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getRatingModel ( ( new GetRatingModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRatingName ( \"mode1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetRatingModelRequest ; import io.gs2.matchmaking.result.GetRatingModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetRatingModelResult result = client . getRatingModel ( new GetRatingModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"mode1\" ) ); RatingModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetRatingModelResult \u003e asyncResult = null ; yield return client . GetRatingModel ( new Gs2 . Gs2Matchmaking . Request . GetRatingModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRatingName ( \"mode1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getRatingModel ( new Gs2Matchmaking . GetRatingModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"mode1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_rating_model ( matchmaking . GetRatingModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_rating_name ( 'mode1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_rating_model ({ namespaceName = \"namespace-0001\" , ratingName = \"mode1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_rating_model_async ({ namespaceName = \"namespace-0001\" , ratingName = \"mode1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSeasonModels 시즌 모델 목록 취득 지정된 네임스페이스의 현재 활성화된 시즌 모델 목록을 취득합니다. 시즌 모델은 최대 참가 인원수, 경험치 모델을 사용한 티어 계산, 챌린지 기간 이벤트를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 시즌 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeSeasonModels ( \u0026 matchmaking . DescribeSeasonModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeSeasonModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeSeasonModels ( ( new DescribeSeasonModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeSeasonModelsRequest ; import io.gs2.matchmaking.result.DescribeSeasonModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeSeasonModelsResult result = client . describeSeasonModels ( new DescribeSeasonModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List SeasonModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeSeasonModelsResult \u003e asyncResult = null ; yield return client . DescribeSeasonModels ( new Gs2 . Gs2Matchmaking . Request . DescribeSeasonModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeSeasonModels ( new Gs2Matchmaking . DescribeSeasonModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_season_models ( matchmaking . DescribeSeasonModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_season_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_season_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getSeasonModel 시즌 모델 취득 지정된 시즌 모델의 최대 참가 인원수, 티어 계산용 경험치 모델 ID, 챌린지 기간 이벤트 ID를 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item SeasonModel 시즌 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetSeasonModel ( \u0026 matchmaking . GetSeasonModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetSeasonModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getSeasonModel ( ( new GetSeasonModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetSeasonModelRequest ; import io.gs2.matchmaking.result.GetSeasonModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetSeasonModelResult result = client . getSeasonModel ( new GetSeasonModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) ); SeasonModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetSeasonModelResult \u003e asyncResult = null ; yield return client . GetSeasonModel ( new Gs2 . Gs2Matchmaking . Request . GetSeasonModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getSeasonModel ( new Gs2Matchmaking . GetSeasonModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_season_model ( matchmaking . GetSeasonModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_season_model ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_season_model_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 익스포트 현재 활성화된 레이팅 모델 마스터와 시즌 모델 마스터를 활성화 가능한 형식으로 익스포트합니다. 익스포트된 데이터는 다른 네임스페이스의 마스터 데이터 갱신이나 백업 용도로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentModelMaster 활성화 가능한 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 matchmaking . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.ExportMasterRequest ; import io.gs2.matchmaking.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Matchmaking . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Matchmaking . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . export_master ( matchmaking . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentModelMaster 현재 활성화된 모델의 마스터 데이터 취득 지정된 네임스페이스의 현재 활성화된 레이팅 모델 및 시즌 모델의 마스터 데이터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentModelMaster 현재 활성화된 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetCurrentModelMaster ( \u0026 matchmaking . GetCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getCurrentModelMaster ( ( new GetCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetCurrentModelMasterRequest ; import io.gs2.matchmaking.result.GetCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetCurrentModelMasterResult result = client . getCurrentModelMaster ( new GetCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetCurrentModelMasterResult \u003e asyncResult = null ; yield return client . GetCurrentModelMaster ( new Gs2 . Gs2Matchmaking . Request . GetCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getCurrentModelMaster ( new Gs2Matchmaking . GetCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_current_model_master ( matchmaking . GetCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_current_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_current_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentModelMaster 현재 활성화된 모델의 마스터 데이터 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 대해 마스터 데이터를 업로드합니다. UpdateCurrentModelMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentModelMaster ( \u0026 matchmaking . PreUpdateCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\PreUpdateCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentModelMaster ( ( new PreUpdateCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.PreUpdateCurrentModelMasterRequest ; import io.gs2.matchmaking.result.PreUpdateCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { PreUpdateCurrentModelMasterResult result = client . preUpdateCurrentModelMaster ( new PreUpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . PreUpdateCurrentModelMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentModelMaster ( new Gs2 . Gs2Matchmaking . Request . PreUpdateCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . preUpdateCurrentModelMaster ( new Gs2Matchmaking . PreUpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . pre_update_current_model_master ( matchmaking . PreUpdateCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.pre_update_current_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'matchmaking' ) api_result_handler = client.pre_update_current_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentModelMaster 현재 활성화된 모델의 마스터 데이터 갱신 현재 활성화된 모델의 마스터 데이터를 갱신합니다. 2가지 모드를 지원합니다: 인라인 설정용 ‘direct’ 모드와, 3단계 갱신 프로세스에서 사전에 업로드한 설정을 적용하는 ‘preUpload’ 모드입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentModelMaster 갱신된 현재 활성화된 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentModelMaster ( \u0026 matchmaking . UpdateCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2020-06-24\\\", \\\"ratingModels\\\": [{\\\"name\\\": \\\"rating-0001\\\", \\\"metadata\\\": \\\"RATING_0001\\\", \\\"volatility\\\": 100, \\\"initialValue\\\": 1500}, {\\\"name\\\": \\\"rating-0002\\\", \\\"metadata\\\": \\\"RATING_0002\\\", \\\"volatility\\\": 150, \\\"initialValue\\\": 1500}], \\\"seasonModels\\\": [{\\\"name\\\": \\\"season-0001\\\", \\\"maximumParticipants\\\": 50, \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\"}, {\\\"name\\\": \\\"season-0002\\\", \\\"maximumParticipants\\\": 100, \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\\\"}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\UpdateCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e updateCurrentModelMaster ( ( new UpdateCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2020-06-24 \\\" , \\\" ratingModels \\\" : [{ \\\" name \\\" : \\\" rating-0001 \\\" , \\\" metadata \\\" : \\\" RATING_0001 \\\" , \\\" volatility \\\" : 100, \\\" initialValue \\\" : 1500}, { \\\" name \\\" : \\\" rating-0002 \\\" , \\\" metadata \\\" : \\\" RATING_0002 \\\" , \\\" volatility \\\" : 150, \\\" initialValue \\\" : 1500}], \\\" seasonModels \\\" : [{ \\\" name \\\" : \\\" season-0001 \\\" , \\\" maximumParticipants \\\" : 50, \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" }, { \\\" name \\\" : \\\" season-0002 \\\" , \\\" maximumParticipants \\\" : 100, \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002 \\\" }]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.UpdateCurrentModelMasterRequest ; import io.gs2.matchmaking.result.UpdateCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { UpdateCurrentModelMasterResult result = client . updateCurrentModelMaster ( new UpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2020-06-24\\\", \\\"ratingModels\\\": [{\\\"name\\\": \\\"rating-0001\\\", \\\"metadata\\\": \\\"RATING_0001\\\", \\\"volatility\\\": 100, \\\"initialValue\\\": 1500}, {\\\"name\\\": \\\"rating-0002\\\", \\\"metadata\\\": \\\"RATING_0002\\\", \\\"volatility\\\": 150, \\\"initialValue\\\": 1500}], \\\"seasonModels\\\": [{\\\"name\\\": \\\"season-0001\\\", \\\"maximumParticipants\\\": 50, \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\"}, {\\\"name\\\": \\\"season-0002\\\", \\\"maximumParticipants\\\": 100, \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\\\"}]}\" ) . withUploadToken ( null ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . UpdateCurrentModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentModelMaster ( new Gs2 . Gs2Matchmaking . Request . UpdateCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2020-06-24\\\", \\\"ratingModels\\\": [{\\\"name\\\": \\\"rating-0001\\\", \\\"metadata\\\": \\\"RATING_0001\\\", \\\"volatility\\\": 100, \\\"initialValue\\\": 1500}, {\\\"name\\\": \\\"rating-0002\\\", \\\"metadata\\\": \\\"RATING_0002\\\", \\\"volatility\\\": 150, \\\"initialValue\\\": 1500}], \\\"seasonModels\\\": [{\\\"name\\\": \\\"season-0001\\\", \\\"maximumParticipants\\\": 50, \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\"}, {\\\"name\\\": \\\"season-0002\\\", \\\"maximumParticipants\\\": 100, \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\\\"}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . updateCurrentModelMaster ( new Gs2Matchmaking . UpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2020-06-24\\\", \\\"ratingModels\\\": [{\\\"name\\\": \\\"rating-0001\\\", \\\"metadata\\\": \\\"RATING_0001\\\", \\\"volatility\\\": 100, \\\"initialValue\\\": 1500}, {\\\"name\\\": \\\"rating-0002\\\", \\\"metadata\\\": \\\"RATING_0002\\\", \\\"volatility\\\": 150, \\\"initialValue\\\": 1500}], \\\"seasonModels\\\": [{\\\"name\\\": \\\"season-0001\\\", \\\"maximumParticipants\\\": 50, \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\"}, {\\\"name\\\": \\\"season-0002\\\", \\\"maximumParticipants\\\": 100, \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\\\"}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . update_current_model_master ( matchmaking . UpdateCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2020-06-24\", \"ratingModels\": [{\"name\": \"rating-0001\", \"metadata\": \"RATING_0001\", \"volatility\": 100, \"initialValue\": 1500}, {\"name\": \"rating-0002\", \"metadata\": \"RATING_0002\", \"volatility\": 150, \"initialValue\": 1500}], \"seasonModels\": [{\"name\": \"season-0001\", \"maximumParticipants\": 50, \"challengePeriodEventId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\"}, {\"name\": \"season-0002\", \"maximumParticipants\": 100, \"challengePeriodEventId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\"}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.update_current_model_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2020-06-24 \\\" , \\\" ratingModels \\\" : [{ \\\" name \\\" : \\\" rating-0001 \\\" , \\\" metadata \\\" : \\\" RATING_0001 \\\" , \\\" volatility \\\" : 100, \\\" initialValue \\\" : 1500}, { \\\" name \\\" : \\\" rating-0002 \\\" , \\\" metadata \\\" : \\\" RATING_0002 \\\" , \\\" volatility \\\" : 150, \\\" initialValue \\\" : 1500}], \\\" seasonModels \\\" : [{ \\\" name \\\" : \\\" season-0001 \\\" , \\\" maximumParticipants \\\" : 50, \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" }, { \\\" name \\\" : \\\" season-0002 \\\" , \\\" maximumParticipants \\\" : 100, \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002 \\\" }]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.update_current_model_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2020-06-24 \\\" , \\\" ratingModels \\\" : [{ \\\" name \\\" : \\\" rating-0001 \\\" , \\\" metadata \\\" : \\\" RATING_0001 \\\" , \\\" volatility \\\" : 100, \\\" initialValue \\\" : 1500}, { \\\" name \\\" : \\\" rating-0002 \\\" , \\\" metadata \\\" : \\\" RATING_0002 \\\" , \\\" volatility \\\" : 150, \\\" initialValue \\\" : 1500}], \\\" seasonModels \\\" : [{ \\\" name \\\" : \\\" season-0001 \\\" , \\\" maximumParticipants \\\" : 50, \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" }, { \\\" name \\\" : \\\" season-0002 \\\" , \\\" maximumParticipants \\\" : 100, \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002 \\\" }]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentModelMasterFromGitHub 현재 활성화된 모델의 마스터 데이터를 GitHub에서 갱신 지정된 GitHub 리포지토리에서 마스터 데이터를 가져와 현재 활성화된 모델의 마스터 데이터를 갱신합니다. GS2-Key에 저장된 API 키가 인증에 사용되며, 체크아웃할 브랜치, 태그 또는 커밋 해시를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentModelMaster 갱신된 현재 활성화된 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentModelMasterFromGitHub ( \u0026 matchmaking . UpdateCurrentModelMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\UpdateCurrentModelMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e updateCurrentModelMasterFromGitHub ( ( new UpdateCurrentModelMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.UpdateCurrentModelMasterFromGitHubRequest ; import io.gs2.matchmaking.result.UpdateCurrentModelMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { UpdateCurrentModelMasterFromGitHubResult result = client . updateCurrentModelMasterFromGitHub ( new UpdateCurrentModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( null ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . UpdateCurrentModelMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentModelMasterFromGitHub ( new Gs2 . Gs2Matchmaking . Request . UpdateCurrentModelMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . updateCurrentModelMasterFromGitHub ( new Gs2Matchmaking . UpdateCurrentModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . update_current_model_master_from_git_hub ( matchmaking . UpdateCurrentModelMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.update_current_model_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.update_current_model_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRatingModelMasters 레이팅 모델 마스터 목록 취득 지정된 네임스페이스의 레이팅 모델 마스터 페이지네이션 목록을 취득합니다. 이름 접두어로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 레이팅 모델명의 필터 접두어 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 레이팅 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeRatingModelMasters ( \u0026 matchmaking . DescribeRatingModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeRatingModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeRatingModelMasters ( ( new DescribeRatingModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeRatingModelMastersRequest ; import io.gs2.matchmaking.result.DescribeRatingModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeRatingModelMastersResult result = client . describeRatingModelMasters ( new DescribeRatingModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List RatingModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeRatingModelMastersResult \u003e asyncResult = null ; yield return client . DescribeRatingModelMasters ( new Gs2 . Gs2Matchmaking . Request . DescribeRatingModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeRatingModelMasters ( new Gs2Matchmaking . DescribeRatingModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_rating_model_masters ( matchmaking . DescribeRatingModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_rating_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_rating_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createRatingModelMaster 레이팅 모델 마스터 신규 작성 지정된 Glicko-2 알고리즘 파라미터로 새로운 레이팅 모델 마스터를 작성합니다. 레이팅 계산의 초기값(기본값: 1500)과 변동성을 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialValue int 1500 100 ~ 10000 레이트 값의 초기값 플레이어가 처음 레이팅이 적용된 매치메이킹에 참가할 때 부여되는 시작 레이트 값입니다. 기본값은 1500입니다. 모든 플레이어는 동일한 레이팅에서 시작하며, 대전 결과에 따라 조정됩니다. volatility int 100 1 ~ 20000 레이팅의 변동성 각 대전 후 레이트 값이 얼마나 변동하는지를 제어하는 Glicko-2의 파라미터입니다. 값이 클수록 레이팅의 변동 폭이 커져 더 빠르게 레이팅이 조정됩니다. 값이 작을수록 레이팅이 안정되어 완만하게 변화합니다. 기본값은 100입니다. Result 타입 설명 item RatingModelMaster 작성한 레이팅 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CreateRatingModelMaster ( \u0026 matchmaking . CreateRatingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"mode1\" ), Description : nil , Metadata : nil , InitialValue : nil , Volatility : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CreateRatingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e createRatingModelMaster ( ( new CreateRatingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"mode1\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withInitialValue ( null ) -\u003e withVolatility ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CreateRatingModelMasterRequest ; import io.gs2.matchmaking.result.CreateRatingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CreateRatingModelMasterResult result = client . createRatingModelMaster ( new CreateRatingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"mode1\" ) . withDescription ( null ) . withMetadata ( null ) . withInitialValue ( null ) . withVolatility ( null ) ); RatingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CreateRatingModelMasterResult \u003e asyncResult = null ; yield return client . CreateRatingModelMaster ( new Gs2 . Gs2Matchmaking . Request . CreateRatingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"mode1\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithInitialValue ( null ) . WithVolatility ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . createRatingModelMaster ( new Gs2Matchmaking . CreateRatingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"mode1\" ) . withDescription ( null ) . withMetadata ( null ) . withInitialValue ( null ) . withVolatility ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . create_rating_model_master ( matchmaking . CreateRatingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'mode1' ) . with_description ( None ) . with_metadata ( None ) . with_initial_value ( None ) . with_volatility ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.create_rating_model_master ({ namespaceName = \"namespace-0001\" , name = \"mode1\" , description = nil , metadata = nil , initialValue = nil , volatility = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.create_rating_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"mode1\" , description = nil , metadata = nil , initialValue = nil , volatility = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRatingModelMaster 레이팅 모델 마스터 취득 지정된 레이팅 모델 마스터의 초기값 및 변동성 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item RatingModelMaster 레이팅 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetRatingModelMaster ( \u0026 matchmaking . GetRatingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RatingName : pointy . String ( \"mode1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetRatingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getRatingModelMaster ( ( new GetRatingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRatingName ( \"mode1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetRatingModelMasterRequest ; import io.gs2.matchmaking.result.GetRatingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetRatingModelMasterResult result = client . getRatingModelMaster ( new GetRatingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"mode1\" ) ); RatingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetRatingModelMasterResult \u003e asyncResult = null ; yield return client . GetRatingModelMaster ( new Gs2 . Gs2Matchmaking . Request . GetRatingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRatingName ( \"mode1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getRatingModelMaster ( new Gs2Matchmaking . GetRatingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"mode1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_rating_model_master ( matchmaking . GetRatingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rating_name ( 'mode1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_rating_model_master ({ namespaceName = \"namespace-0001\" , ratingName = \"mode1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_rating_model_master_async ({ namespaceName = \"namespace-0001\" , ratingName = \"mode1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRatingModelMaster 레이팅 모델 마스터 갱신 지정된 레이팅 모델 마스터를 갱신합니다. 설명, 메타데이터, 초기값, 변동성 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialValue int 1500 100 ~ 10000 레이트 값의 초기값 플레이어가 처음 레이팅이 적용된 매치메이킹에 참가할 때 부여되는 시작 레이트 값입니다. 기본값은 1500입니다. 모든 플레이어는 동일한 레이팅에서 시작하며, 대전 결과에 따라 조정됩니다. volatility int 100 1 ~ 20000 레이팅의 변동성 각 대전 후 레이트 값이 얼마나 변동하는지를 제어하는 Glicko-2의 파라미터입니다. 값이 클수록 레이팅의 변동 폭이 커져 더 빠르게 레이팅이 조정됩니다. 값이 작을수록 레이팅이 안정되어 완만하게 변화합니다. 기본값은 100입니다. Result 타입 설명 item RatingModelMaster 갱신한 레이팅 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . UpdateRatingModelMaster ( \u0026 matchmaking . UpdateRatingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RatingName : pointy . String ( \"mode1\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , InitialValue : nil , Volatility : pointy . Int32 ( 50 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\UpdateRatingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e updateRatingModelMaster ( ( new UpdateRatingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRatingName ( \"mode1\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withInitialValue ( null ) -\u003e withVolatility ( 50 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.UpdateRatingModelMasterRequest ; import io.gs2.matchmaking.result.UpdateRatingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { UpdateRatingModelMasterResult result = client . updateRatingModelMaster ( new UpdateRatingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"mode1\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withInitialValue ( null ) . withVolatility ( 50 ) ); RatingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . UpdateRatingModelMasterResult \u003e asyncResult = null ; yield return client . UpdateRatingModelMaster ( new Gs2 . Gs2Matchmaking . Request . UpdateRatingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRatingName ( \"mode1\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithInitialValue ( null ) . WithVolatility ( 50 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . updateRatingModelMaster ( new Gs2Matchmaking . UpdateRatingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"mode1\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withInitialValue ( null ) . withVolatility ( 50 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . update_rating_model_master ( matchmaking . UpdateRatingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rating_name ( 'mode1' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_initial_value ( None ) . with_volatility ( 50 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.update_rating_model_master ({ namespaceName = \"namespace-0001\" , ratingName = \"mode1\" , description = \"description1\" , metadata = nil , initialValue = nil , volatility = 50 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.update_rating_model_master_async ({ namespaceName = \"namespace-0001\" , ratingName = \"mode1\" , description = \"description1\" , metadata = nil , initialValue = nil , volatility = 50 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRatingModelMaster 레이팅 모델 마스터 삭제 지정된 레이팅 모델 마스터를 삭제합니다. 다음 마스터 데이터 갱신까지, 현재 활성화된 마스터 데이터에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ratingName string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item RatingModelMaster 삭제한 레이팅 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DeleteRatingModelMaster ( \u0026 matchmaking . DeleteRatingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RatingName : pointy . String ( \"mode1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DeleteRatingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e deleteRatingModelMaster ( ( new DeleteRatingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRatingName ( \"mode1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DeleteRatingModelMasterRequest ; import io.gs2.matchmaking.result.DeleteRatingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DeleteRatingModelMasterResult result = client . deleteRatingModelMaster ( new DeleteRatingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"mode1\" ) ); RatingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DeleteRatingModelMasterResult \u003e asyncResult = null ; yield return client . DeleteRatingModelMaster ( new Gs2 . Gs2Matchmaking . Request . DeleteRatingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRatingName ( \"mode1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . deleteRatingModelMaster ( new Gs2Matchmaking . DeleteRatingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRatingName ( \"mode1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . delete_rating_model_master ( matchmaking . DeleteRatingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_rating_name ( 'mode1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.delete_rating_model_master ({ namespaceName = \"namespace-0001\" , ratingName = \"mode1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.delete_rating_model_master_async ({ namespaceName = \"namespace-0001\" , ratingName = \"mode1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSeasonModelMasters 시즌 모델 마스터 목록 조회 지정된 네임스페이스의 시즌 모델 마스터에 대한 페이지네이션 목록을 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 시즌 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 시즌 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DescribeSeasonModelMasters ( \u0026 matchmaking . DescribeSeasonModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DescribeSeasonModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e describeSeasonModelMasters ( ( new DescribeSeasonModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DescribeSeasonModelMastersRequest ; import io.gs2.matchmaking.result.DescribeSeasonModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DescribeSeasonModelMastersResult result = client . describeSeasonModelMasters ( new DescribeSeasonModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SeasonModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DescribeSeasonModelMastersResult \u003e asyncResult = null ; yield return client . DescribeSeasonModelMasters ( new Gs2 . Gs2Matchmaking . Request . DescribeSeasonModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . describeSeasonModelMasters ( new Gs2Matchmaking . DescribeSeasonModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . describe_season_model_masters ( matchmaking . DescribeSeasonModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.describe_season_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'matchmaking' ) api_result_handler = client.describe_season_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createSeasonModelMaster 시즌 모델 마스터 신규 생성 지정된 설정으로 새로운 시즌 모델 마스터를 생성합니다. 개더링당 최대 참가 인원, 티어 기반 매치메이킹용 경험치 모델, 매치메이킹이 가능한 기간을 제어하는 챌린지 기간 이벤트를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 시즌 모델명 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParticipants int  2 ~ 1000 최대 참가 인원수 하나의 시즌 개더링에 참가할 수 있는 플레이어의 최대 인원수입니다. 이 상한에 도달하면 시즌 개더링은 만원 상태가 되어 더 이상 플레이어가 참가할 수 없게 됩니다. 2에서 1000 사이의 범위로 지정합니다. experienceModelId string ~ 1024자 티어 관리용 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 플레이어의 티어를 결정하기 위해 사용하는 GS2-Experience 경험치 모델의 GRN입니다. 이 경험치 모델에서의 플레이어 랭크가 매치메이킹의 티어로 사용되어, 비슷한 레벨의 플레이어끼리 그룹화됩니다. 지정하지 않으면 티어에 의한 그룹화가 비활성화되어, 레벨에 관계없이 모든 플레이어가 매칭됩니다. challengePeriodEventId string  ~ 1024자 챌린지 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 시즌의 유효 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 이벤트가 활성화되어 있는 동안에만 시즌 개더링의 생성·참가가 가능합니다. 이벤트 기간이 종료되면 시즌이 종료되어 새로운 매치메이킹이 불가능해집니다. Result 타입 설명 item SeasonModelMaster 생성한 시즌 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . CreateSeasonModelMaster ( \u0026 matchmaking . CreateSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"season-0001\" ), Description : nil , Metadata : nil , MaximumParticipants : pointy . Int32 ( 50 ), ExperienceModelId : nil , ChallengePeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\CreateSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e createSeasonModelMaster ( ( new CreateSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"season-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withMaximumParticipants ( 50 ) -\u003e withExperienceModelId ( null ) -\u003e withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.CreateSeasonModelMasterRequest ; import io.gs2.matchmaking.result.CreateSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { CreateSeasonModelMasterResult result = client . createSeasonModelMaster ( new CreateSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"season-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMaximumParticipants ( 50 ) . withExperienceModelId ( null ) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) ); SeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . CreateSeasonModelMasterResult \u003e asyncResult = null ; yield return client . CreateSeasonModelMaster ( new Gs2 . Gs2Matchmaking . Request . CreateSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"season-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithMaximumParticipants ( 50 ) . WithExperienceModelId ( null ) . WithChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . createSeasonModelMaster ( new Gs2Matchmaking . CreateSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"season-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMaximumParticipants ( 50 ) . withExperienceModelId ( null ) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . create_season_model_master ( matchmaking . CreateSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'season-0001' ) . with_description ( None ) . with_metadata ( None ) . with_maximum_participants ( 50 ) . with_experience_model_id ( None ) . with_challenge_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.create_season_model_master ({ namespaceName = \"namespace-0001\" , name = \"season-0001\" , description = nil , metadata = nil , maximumParticipants = 50 , experienceModelId = nil , challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.create_season_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"season-0001\" , description = nil , metadata = nil , maximumParticipants = 50 , experienceModelId = nil , challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSeasonModelMaster 시즌 모델 마스터 조회 지정된 시즌 모델 마스터의 최대 참가 인원, 경험치 모델 ID, 챌린지 기간 이벤트 ID를 포함한 정보를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델명 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SeasonModelMaster 시즌 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . GetSeasonModelMaster ( \u0026 matchmaking . GetSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\GetSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e getSeasonModelMaster ( ( new GetSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.GetSeasonModelMasterRequest ; import io.gs2.matchmaking.result.GetSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { GetSeasonModelMasterResult result = client . getSeasonModelMaster ( new GetSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) ); SeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . GetSeasonModelMasterResult \u003e asyncResult = null ; yield return client . GetSeasonModelMaster ( new Gs2 . Gs2Matchmaking . Request . GetSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . getSeasonModelMaster ( new Gs2Matchmaking . GetSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . get_season_model_master ( matchmaking . GetSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.get_season_model_master ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.get_season_model_master_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateSeasonModelMaster 시즌 모델 마스터 갱신 지정된 시즌 모델 마스터를 갱신합니다. 설명, 메타데이터, 최대 참가 인원, 경험치 모델 ID, 챌린지 기간 이벤트 ID를 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델명 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParticipants int  2 ~ 1000 최대 참가 인원수 하나의 시즌 개더링에 참가할 수 있는 플레이어의 최대 인원수입니다. 이 상한에 도달하면 시즌 개더링은 만원 상태가 되어 더 이상 플레이어가 참가할 수 없게 됩니다. 2에서 1000 사이의 범위로 지정합니다. experienceModelId string ~ 1024자 티어 관리용 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 플레이어의 티어를 결정하기 위해 사용하는 GS2-Experience 경험치 모델의 GRN입니다. 이 경험치 모델에서의 플레이어 랭크가 매치메이킹의 티어로 사용되어, 비슷한 레벨의 플레이어끼리 그룹화됩니다. 지정하지 않으면 티어에 의한 그룹화가 비활성화되어, 레벨에 관계없이 모든 플레이어가 매칭됩니다. challengePeriodEventId string  ~ 1024자 챌린지 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 시즌의 유효 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 이벤트가 활성화되어 있는 동안에만 시즌 개더링의 생성·참가가 가능합니다. 이벤트 기간이 종료되면 시즌이 종료되어 새로운 매치메이킹이 불가능해집니다. Result 타입 설명 item SeasonModelMaster 갱신한 시즌 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . UpdateSeasonModelMaster ( \u0026 matchmaking . UpdateSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , MaximumParticipants : pointy . Int32 ( 100 ), ExperienceModelId : nil , ChallengePeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\UpdateSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e updateSeasonModelMaster ( ( new UpdateSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withMaximumParticipants ( 100 ) -\u003e withExperienceModelId ( null ) -\u003e withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.UpdateSeasonModelMasterRequest ; import io.gs2.matchmaking.result.UpdateSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { UpdateSeasonModelMasterResult result = client . updateSeasonModelMaster ( new UpdateSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withMaximumParticipants ( 100 ) . withExperienceModelId ( null ) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) ); SeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . UpdateSeasonModelMasterResult \u003e asyncResult = null ; yield return client . UpdateSeasonModelMaster ( new Gs2 . Gs2Matchmaking . Request . UpdateSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithMaximumParticipants ( 100 ) . WithExperienceModelId ( null ) . WithChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . updateSeasonModelMaster ( new Gs2Matchmaking . UpdateSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withMaximumParticipants ( 100 ) . withExperienceModelId ( null ) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . update_season_model_master ( matchmaking . UpdateSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_maximum_participants ( 100 ) . with_experience_model_id ( None ) . with_challenge_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.update_season_model_master ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , description = \"description1\" , metadata = nil , maximumParticipants = 100 , experienceModelId = nil , challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.update_season_model_master_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , description = \"description1\" , metadata = nil , maximumParticipants = 100 , experienceModelId = nil , challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSeasonModelMaster 시즌 모델 마스터 삭제 지정된 시즌 모델 마스터를 삭제합니다. 다음 마스터 데이터 갱신까지, 현재 활성화된 마스터 데이터에는 영향을 미치지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델명 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SeasonModelMaster 삭제한 시즌 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/matchmaking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := matchmaking . Gs2MatchmakingRestClient { Session : \u0026 session , } result , err := client . DeleteSeasonModelMaster ( \u0026 matchmaking . DeleteSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Matchmaking\\Gs2MatchmakingRestClient ; use Gs2\\Matchmaking\\Request\\DeleteSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MatchmakingRestClient ( $session ); try { $result = $client -\u003e deleteSeasonModelMaster ( ( new DeleteSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.matchmaking.rest.Gs2MatchmakingRestClient ; import io.gs2.matchmaking.request.DeleteSeasonModelMasterRequest ; import io.gs2.matchmaking.result.DeleteSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MatchmakingRestClient client = new Gs2MatchmakingRestClient ( session ); try { DeleteSeasonModelMasterResult result = client . deleteSeasonModelMaster ( new DeleteSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) ); SeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MatchmakingRestClient ( session ); AsyncResult Gs2 . Gs2Matchmaking . Result . DeleteSeasonModelMasterResult \u003e asyncResult = null ; yield return client . DeleteSeasonModelMaster ( new Gs2 . Gs2Matchmaking . Request . DeleteSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Matchmaking from '@/gs2/matchmaking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Matchmaking . Gs2MatchmakingRestClient ( session ); try { const result = await client . deleteSeasonModelMaster ( new Gs2Matchmaking . DeleteSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import matchmaking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = matchmaking . Gs2MatchmakingRestClient ( session ) try : result = client . delete_season_model_master ( matchmaking . DeleteSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'matchmaking' ) api_result = client.delete_season_model_master ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'matchmaking' ) api_result_handler = client.delete_season_model_master_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Matchmaking SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Matchmaking SDK API 레퍼런스","url":"/ko/api_reference/matchmaking/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명 logSetting LogSetting 로그 출력 설정 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청/응답 로그 데이터가 대상 GS2-Log로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Layer 레이어 상세 타입 활성화 조건 필수 기본값 값 제한 설명 layerId string ※ ~ 1024자 레이어 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 numberOfMinEntries int 5 1 ~ 1000 노드 내 엔티티 수가 지정값을 밑돌면 다른 노드와의 결합을 시도합니다 numberOfMaxEntries int 20 1 ~ 1000 노드 내 엔티티 수가 지정값을 웃돌면 노드 분할을 시도합니다 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 Spatial 공간 정보 상세 타입 활성화 조건 필수 기본값 값 제한 설명 spatialId string ※ ~ 1024자 공간 정보 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 position Position  좌표 vector Vector  방향 r float 1 0 ~ 10000 반경 lastSyncAt long 레이어에 대한 마지막 동기화 일시 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 AreaModel 에어리어는 공간을 분할하는 것으로, 같은 좌표라도 에어리어가 다르면 별도의 공간으로 취급할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 areaModelId string ※ ~ 1024자 에어리어 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 에어리어 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. layerModels List [] 0 ~ 1000 items 레이어 모델 목록 LayerModel 레이어는 하나의 공간 내에서 여러 개의 논리적 계층을 구현합니다. 예를 들어, 캐릭터가 대량으로 존재하는 공간에서 에너미가 보이지 않게 되는 문제를 해결합니다. 레이어 1에는 캐릭터를 배치합니다. 레이어 2에 에너미를 배치한 경우, 레이어마다 지정한 거리 내에서의 취득 수량을 지정할 수 있으므로 보이지 않게 될 걱정이 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 layerModelId string ※ ~ 1024자 레이어 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이어 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Position 좌표 상세 타입 활성화 조건 필수 기본값 값 제한 설명 x float  -1048574 ~ 1048574 X 좌표 y float  -1048574 ~ 1048574 Y 좌표 z float  -1048574 ~ 1048574 Z 좌표 MyPosition 내 위치 정보 상세 타입 활성화 조건 필수 기본값 값 제한 설명 position Position  좌표 vector Vector  방향 r float 1 0 ~ 10000 반경 Scope 취득할 주변 상황 상세 타입 활성화 조건 필수 기본값 값 제한 설명 layerName string  ~ 128자 레이어 모델 이름 r float  1 ~ 16777214 반경 limit int  1 ~ 100 최대 개수 Vector 좌표 상세 타입 활성화 조건 필수 기본값 값 제한 설명 x float  -1048574 ~ 1048574 X 좌표 y float  -1048574 ~ 1048574 Y 좌표 z float  -1048574 ~ 1048574 Z 좌표 CurrentFieldMaster 현재 활성화된 필드 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 필드 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터의 관리에 JSON 형식 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 툴을 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-MegaField 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 AreaModelMaster 에어리어는 공간을 분할하는 것으로, 같은 좌표라도 에어리어가 다르면 별도의 공간으로 취급할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 areaModelMasterId string ※ ~ 1024자 에어리어 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 에어리어 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 LayerModelMaster 레이어는 하나의 공간 내에서 여러 개의 논리적 계층을 구현합니다. 예를 들어, 캐릭터가 대량으로 존재하는 공간에서 에너미가 보이지 않게 되는 문제를 해결합니다. 레이어 1에는 캐릭터를 배치합니다. 레이어 2에 에너미를 배치한 경우, 레이어마다 지정한 거리 내에서의 취득 수량을 지정할 수 있으므로 보이지 않게 될 걱정이 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 layerModelMasterId string ※ ~ 1024자 레이어 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이어 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 mega_field . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.DescribeNamespacesRequest ; import io.gs2.megaField.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2MegaField . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2MegaField . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . describe_namespaces ( mega_field . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mega_field' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명 logSetting LogSetting 로그 출력 설정 Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 mega_field . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , LogSetting : \u0026 megaField . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withLogSetting (( new \\Gs2\\MegaField\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.CreateNamespaceRequest ; import io.gs2.megaField.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withLogSetting ( new io . gs2 . megaField . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2MegaField . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithLogSetting ( new Gs2 . Gs2MegaField . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . createNamespace ( new Gs2MegaField . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withLogSetting ( new Gs2MegaField . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . create_namespace ( mega_field . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_log_setting ( mega_field . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 mega_field . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.GetNamespaceStatusRequest ; import io.gs2.megaField.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2MegaField . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2MegaField . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . get_namespace_status ( mega_field . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'mega_field' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 mega_field . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.GetNamespaceRequest ; import io.gs2.megaField.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2MegaField . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . getNamespace ( new Gs2MegaField . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . get_namespace ( mega_field . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명 logSetting LogSetting 로그 출력 설정 Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 mega_field . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), LogSetting : \u0026 megaField . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withLogSetting (( new \\Gs2\\MegaField\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.UpdateNamespaceRequest ; import io.gs2.megaField.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withLogSetting ( new io . gs2 . megaField . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2MegaField . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithLogSetting ( new Gs2 . Gs2MegaField . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2MegaField . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withLogSetting ( new Gs2MegaField . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . update_namespace ( mega_field . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_log_setting ( mega_field . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 mega_field . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.DeleteNamespaceRequest ; import io.gs2.megaField.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2MegaField . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2MegaField . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . delete_namespace ( mega_field . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 mega_field . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.GetServiceVersionRequest ; import io.gs2.megaField.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2MegaField . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2MegaField . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . get_service_version ( mega_field . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; putPosition 좌표 설정 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 position Position  좌표 vector Vector  방향 r float 1 0 ~ 10000 반경 Result 타입 설명 item Spatial 물체 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . PutPosition ( \u0026 mega_field . PutPositionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), Position : \u0026 megaField . Position { X : pointy . Float32 ( 0 ), Y : pointy . Float32 ( 1 ), Z : pointy . Float32 ( 2 ), }, Vector : \u0026 megaField . Vector { X : pointy . Float32 ( 10 ), Y : pointy . Float32 ( 11 ), Z : pointy . Float32 ( 12 ), }, R : pointy . Float32 ( 5 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\PutPositionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e putPosition ( ( new PutPositionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withPosition (( new Position ()) -\u003e withX ( 0 ) -\u003e withY ( 1 ) -\u003e withZ ( 2 ) ) -\u003e withVector (( new Vector ()) -\u003e withX ( 10 ) -\u003e withY ( 11 ) -\u003e withZ ( 12 ) ) -\u003e withR ( 5 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.PutPositionRequest ; import io.gs2.megaField.result.PutPositionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { PutPositionResult result = client . putPosition ( new PutPositionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPosition ( new Position () . withX ( 0f ) . withY ( 1f ) . withZ ( 2f ) ) . withVector ( new Vector () . withX ( 10f ) . withY ( 11f ) . withZ ( 12f ) ) . withR ( 5f ) ); Spatial item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . PutPositionResult \u003e asyncResult = null ; yield return client . PutPosition ( new Gs2 . Gs2MegaField . Request . PutPositionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithPosition ( new Gs2 . Gs2MegaField . Model . Position () . WithX ( 0f ) . WithY ( 1f ) . WithZ ( 2f ) ) . WithVector ( new Gs2 . Gs2MegaField . Model . Vector () . WithX ( 10f ) . WithY ( 11f ) . WithZ ( 12f ) ) . WithR ( 5f ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . putPosition ( new Gs2MegaField . PutPositionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPosition ( new Gs2MegaField . model . Position () . withX ( 0 ) . withY ( 1 ) . withZ ( 2 ) ) . withVector ( new Gs2MegaField . model . Vector () . withX ( 10 ) . withY ( 11 ) . withZ ( 12 ) ) . withR ( 5 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . put_position ( mega_field . PutPositionRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_position ( mega_field . Position () . with_x ( 0 ) . with_y ( 1 ) . with_z ( 2 ) ) . with_vector ( mega_field . Vector () . with_x ( 10 ) . with_y ( 11 ) . with_z ( 12 ) ) . with_r ( 5 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.put_position ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , position = { x = 0 , y = 1 , z = 2 , }, vector = { x = 10 , y = 11 , z = 12 , }, r = 5 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.put_position_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , position = { x = 0 , y = 1 , z = 2 , }, vector = { x = 10 , y = 11 , z = 12 , }, r = 5 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; putPositionByUserId 사용자 ID를 지정하여 좌표 설정 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 position Position  좌표 vector Vector  방향 r float 1 0 ~ 10000 반경 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Spatial 물체 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . PutPositionByUserId ( \u0026 mega_field . PutPositionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), Position : \u0026 megaField . Position { X : pointy . Float32 ( 0 ), Y : pointy . Float32 ( 1 ), Z : pointy . Float32 ( 2 ), }, Vector : \u0026 megaField . Vector { X : pointy . Float32 ( 10 ), Y : pointy . Float32 ( 11 ), Z : pointy . Float32 ( 12 ), }, R : pointy . Float32 ( 5 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\PutPositionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e putPositionByUserId ( ( new PutPositionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withPosition (( new Position ()) -\u003e withX ( 0 ) -\u003e withY ( 1 ) -\u003e withZ ( 2 ) ) -\u003e withVector (( new Vector ()) -\u003e withX ( 10 ) -\u003e withY ( 11 ) -\u003e withZ ( 12 ) ) -\u003e withR ( 5 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.PutPositionByUserIdRequest ; import io.gs2.megaField.result.PutPositionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { PutPositionByUserIdResult result = client . putPositionByUserId ( new PutPositionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPosition ( new Position () . withX ( 0f ) . withY ( 1f ) . withZ ( 2f ) ) . withVector ( new Vector () . withX ( 10f ) . withY ( 11f ) . withZ ( 12f ) ) . withR ( 5f ) . withTimeOffsetToken ( null ) ); Spatial item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . PutPositionByUserIdResult \u003e asyncResult = null ; yield return client . PutPositionByUserId ( new Gs2 . Gs2MegaField . Request . PutPositionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithPosition ( new Gs2 . Gs2MegaField . Model . Position () . WithX ( 0f ) . WithY ( 1f ) . WithZ ( 2f ) ) . WithVector ( new Gs2 . Gs2MegaField . Model . Vector () . WithX ( 10f ) . WithY ( 11f ) . WithZ ( 12f ) ) . WithR ( 5f ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . putPositionByUserId ( new Gs2MegaField . PutPositionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPosition ( new Gs2MegaField . model . Position () . withX ( 0 ) . withY ( 1 ) . withZ ( 2 ) ) . withVector ( new Gs2MegaField . model . Vector () . withX ( 10 ) . withY ( 11 ) . withZ ( 12 ) ) . withR ( 5 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . put_position_by_user_id ( mega_field . PutPositionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_position ( mega_field . Position () . with_x ( 0 ) . with_y ( 1 ) . with_z ( 2 ) ) . with_vector ( mega_field . Vector () . with_x ( 10 ) . with_y ( 11 ) . with_z ( 12 ) ) . with_r ( 5 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.put_position_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , position = { x = 0 , y = 1 , z = 2 , }, vector = { x = 10 , y = 11 , z = 12 , }, r = 5 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.put_position_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , position = { x = 0 , y = 1 , z = 2 , }, vector = { x = 10 , y = 11 , z = 12 , }, r = 5 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; fetchPosition 좌표 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 userIds List  1 ~ 100 items 사용자 ID 리스트 Result 타입 설명 items List 물체 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . FetchPosition ( \u0026 mega_field . FetchPositionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), UserIds : [] * string { pointy . String ( \"user-0001\" ), pointy . String ( \"user-0002\" ), pointy . String ( \"user-0003\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\FetchPositionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e fetchPosition ( ( new FetchPositionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withUserIds ([ \"user-0001\" , \"user-0002\" , \"user-0003\" , ]) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.FetchPositionRequest ; import io.gs2.megaField.result.FetchPositionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { FetchPositionResult result = client . fetchPosition ( new FetchPositionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withUserIds ( Arrays . asList ( \"user-0001\" , \"user-0002\" , \"user-0003\" )) ); List Spatial \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . FetchPositionResult \u003e asyncResult = null ; yield return client . FetchPosition ( new Gs2 . Gs2MegaField . Request . FetchPositionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithUserIds ( new string [] { \"user-0001\" , \"user-0002\" , \"user-0003\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . fetchPosition ( new Gs2MegaField . FetchPositionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withUserIds ([ \"user-0001\" , \"user-0002\" , \"user-0003\" , ]) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . fetch_position ( mega_field . FetchPositionRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_user_ids ([ 'user-0001' , 'user-0002' , 'user-0003' , ]) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.fetch_position ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , userIds = { \"user-0001\" , \"user-0002\" , \"user-0003\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mega_field' ) api_result_handler = client.fetch_position_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , userIds = { \"user-0001\" , \"user-0002\" , \"user-0003\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; fetchPositionFromSystem 좌표 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 userIds List  1 ~ 100 items 사용자 ID 리스트 Result 타입 설명 items List 물체 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . FetchPositionFromSystem ( \u0026 mega_field . FetchPositionFromSystemRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), UserIds : [] * string { pointy . String ( \"user-0001\" ), pointy . String ( \"user-0002\" ), pointy . String ( \"user-0003\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\FetchPositionFromSystemRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e fetchPositionFromSystem ( ( new FetchPositionFromSystemRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withUserIds ([ \"user-0001\" , \"user-0002\" , \"user-0003\" , ]) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.FetchPositionFromSystemRequest ; import io.gs2.megaField.result.FetchPositionFromSystemResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { FetchPositionFromSystemResult result = client . fetchPositionFromSystem ( new FetchPositionFromSystemRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withUserIds ( Arrays . asList ( \"user-0001\" , \"user-0002\" , \"user-0003\" )) ); List Spatial \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . FetchPositionFromSystemResult \u003e asyncResult = null ; yield return client . FetchPositionFromSystem ( new Gs2 . Gs2MegaField . Request . FetchPositionFromSystemRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithUserIds ( new string [] { \"user-0001\" , \"user-0002\" , \"user-0003\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . fetchPositionFromSystem ( new Gs2MegaField . FetchPositionFromSystemRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withUserIds ([ \"user-0001\" , \"user-0002\" , \"user-0003\" , ]) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . fetch_position_from_system ( mega_field . FetchPositionFromSystemRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_user_ids ([ 'user-0001' , 'user-0002' , 'user-0003' , ]) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.fetch_position_from_system ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , userIds = { \"user-0001\" , \"user-0002\" , \"user-0003\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mega_field' ) api_result_handler = client.fetch_position_from_system_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , userIds = { \"user-0001\" , \"user-0002\" , \"user-0003\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nearUserIds 근처에 있는 사용자 ID 리스트 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 point Position  좌표 r float  1 ~ 16777214 반경 limit int  1 ~ 100 최대 개수 Result 타입 설명 items List 근처에 있는 사용자 ID 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . NearUserIds ( \u0026 mega_field . NearUserIdsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), Point : nil , R : pointy . Float32 ( 5 ), Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\NearUserIdsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e nearUserIds ( ( new NearUserIdsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withPoint ( null ) -\u003e withR ( 5 ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.NearUserIdsRequest ; import io.gs2.megaField.result.NearUserIdsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { NearUserIdsResult result = client . nearUserIds ( new NearUserIdsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPoint ( null ) . withR ( 5f ) . withLimit ( null ) ); List String \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . NearUserIdsResult \u003e asyncResult = null ; yield return client . NearUserIds ( new Gs2 . Gs2MegaField . Request . NearUserIdsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithPoint ( null ) . WithR ( 5f ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . nearUserIds ( new Gs2MegaField . NearUserIdsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPoint ( null ) . withR ( 5 ) . withLimit ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . near_user_ids ( mega_field . NearUserIdsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_point ( None ) . with_r ( 5 ) . with_limit ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.near_user_ids ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , point = nil , r = 5 , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mega_field' ) api_result_handler = client.near_user_ids_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , point = nil , r = 5 , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nearUserIdsFromSystem 근처에 있는 사용자 ID 리스트 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 point Position  좌표 r float  1 ~ 16777214 반경 limit int  1 ~ 100 최대 개수 Result 타입 설명 items List 근처에 있는 사용자 ID 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . NearUserIdsFromSystem ( \u0026 mega_field . NearUserIdsFromSystemRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), Point : nil , R : pointy . Float32 ( 5 ), Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\NearUserIdsFromSystemRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e nearUserIdsFromSystem ( ( new NearUserIdsFromSystemRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withPoint ( null ) -\u003e withR ( 5 ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.NearUserIdsFromSystemRequest ; import io.gs2.megaField.result.NearUserIdsFromSystemResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { NearUserIdsFromSystemResult result = client . nearUserIdsFromSystem ( new NearUserIdsFromSystemRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPoint ( null ) . withR ( 5f ) . withLimit ( null ) ); List String \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . NearUserIdsFromSystemResult \u003e asyncResult = null ; yield return client . NearUserIdsFromSystem ( new Gs2 . Gs2MegaField . Request . NearUserIdsFromSystemRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithPoint ( null ) . WithR ( 5f ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . nearUserIdsFromSystem ( new Gs2MegaField . NearUserIdsFromSystemRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPoint ( null ) . withR ( 5 ) . withLimit ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . near_user_ids_from_system ( mega_field . NearUserIdsFromSystemRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_point ( None ) . with_r ( 5 ) . with_limit ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.near_user_ids_from_system ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , point = nil , r = 5 , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mega_field' ) api_result_handler = client.near_user_ids_from_system_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , point = nil , r = 5 , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; action 좌표 설정 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 position MyPosition  내 위치 정보 scopes List 0 ~ 10 items 다른 플레이어의 취득 범위 리스트 Result 타입 설명 items List 물체 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . Action ( \u0026 mega_field . ActionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), Position : nil , Scopes : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\ActionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e action ( ( new ActionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withPosition ( null ) -\u003e withScopes ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.ActionRequest ; import io.gs2.megaField.result.ActionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { ActionResult result = client . action ( new ActionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPosition ( null ) . withScopes ( null ) ); List Spatial \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . ActionResult \u003e asyncResult = null ; yield return client . Action ( new Gs2 . Gs2MegaField . Request . ActionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithPosition ( null ) . WithScopes ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . action ( new Gs2MegaField . ActionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPosition ( null ) . withScopes ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . action ( mega_field . ActionRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_position ( None ) . with_scopes ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.action ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , position = nil , scopes = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mega_field' ) api_result_handler = client.action_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , position = nil , scopes = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; actionByUserId 사용자 ID를 지정하여 좌표 설정 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID areaModelName string  ~ 128자 에어리어 이름 layerModelName string  ~ 128자 레이어 이름 position MyPosition  내 위치 정보 scopes List 0 ~ 10 items 다른 플레이어의 취득 범위 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 물체 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . ActionByUserId ( \u0026 mega_field . ActionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), Position : nil , Scopes : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\ActionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e actionByUserId ( ( new ActionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withPosition ( null ) -\u003e withScopes ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.ActionByUserIdRequest ; import io.gs2.megaField.result.ActionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { ActionByUserIdResult result = client . actionByUserId ( new ActionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPosition ( null ) . withScopes ( null ) . withTimeOffsetToken ( null ) ); List Spatial \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . ActionByUserIdResult \u003e asyncResult = null ; yield return client . ActionByUserId ( new Gs2 . Gs2MegaField . Request . ActionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithPosition ( null ) . WithScopes ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . actionByUserId ( new Gs2MegaField . ActionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withPosition ( null ) . withScopes ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . action_by_user_id ( mega_field . ActionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_position ( None ) . with_scopes ( None ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.action_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , position = nil , scopes = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mega_field' ) api_result_handler = client.action_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , position = nil , scopes = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeAreaModels 에어리어 모델 목록 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 에어리어 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . DescribeAreaModels ( \u0026 mega_field . DescribeAreaModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\DescribeAreaModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e describeAreaModels ( ( new DescribeAreaModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.DescribeAreaModelsRequest ; import io.gs2.megaField.result.DescribeAreaModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { DescribeAreaModelsResult result = client . describeAreaModels ( new DescribeAreaModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List AreaModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . DescribeAreaModelsResult \u003e asyncResult = null ; yield return client . DescribeAreaModels ( new Gs2 . Gs2MegaField . Request . DescribeAreaModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . describeAreaModels ( new Gs2MegaField . DescribeAreaModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . describe_area_models ( mega_field . DescribeAreaModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.describe_area_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mega_field' ) api_result_handler = client.describe_area_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getAreaModel 에어리어 모델 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 Result 타입 설명 item AreaModel 에어리어 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . GetAreaModel ( \u0026 mega_field . GetAreaModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\GetAreaModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e getAreaModel ( ( new GetAreaModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.GetAreaModelRequest ; import io.gs2.megaField.result.GetAreaModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { GetAreaModelResult result = client . getAreaModel ( new GetAreaModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) ); AreaModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . GetAreaModelResult \u003e asyncResult = null ; yield return client . GetAreaModel ( new Gs2 . Gs2MegaField . Request . GetAreaModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . getAreaModel ( new Gs2MegaField . GetAreaModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . get_area_model ( mega_field . GetAreaModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.get_area_model ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.get_area_model_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeLayerModels 레이어 모델 목록 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 Result 타입 설명 items List 레이어 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . DescribeLayerModels ( \u0026 mega_field . DescribeLayerModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\DescribeLayerModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e describeLayerModels ( ( new DescribeLayerModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.DescribeLayerModelsRequest ; import io.gs2.megaField.result.DescribeLayerModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { DescribeLayerModelsResult result = client . describeLayerModels ( new DescribeLayerModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) ); List LayerModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . DescribeLayerModelsResult \u003e asyncResult = null ; yield return client . DescribeLayerModels ( new Gs2 . Gs2MegaField . Request . DescribeLayerModelsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . describeLayerModels ( new Gs2MegaField . DescribeLayerModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . describe_layer_models ( mega_field . DescribeLayerModelsRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.describe_layer_models ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mega_field' ) api_result_handler = client.describe_layer_models_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getLayerModel 레이어 모델 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 layerModelName string  ~ 128자 레이어 모델 이름 Result 타입 설명 item LayerModel 레이어 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . GetLayerModel ( \u0026 mega_field . GetLayerModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\GetLayerModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e getLayerModel ( ( new GetLayerModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.GetLayerModelRequest ; import io.gs2.megaField.result.GetLayerModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { GetLayerModelResult result = client . getLayerModel ( new GetLayerModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) ); LayerModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . GetLayerModelResult \u003e asyncResult = null ; yield return client . GetLayerModel ( new Gs2 . Gs2MegaField . Request . GetLayerModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . getLayerModel ( new Gs2MegaField . GetLayerModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . get_layer_model ( mega_field . GetLayerModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.get_layer_model ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.get_layer_model_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 활성화 가능한 마스터 데이터 형식으로 모델 마스터 내보내기 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentFieldMaster 활성화 가능한 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 mega_field . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.ExportMasterRequest ; import io.gs2.megaField.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentFieldMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2MegaField . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . exportMaster ( new Gs2MegaField . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . export_master ( mega_field . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentFieldMaster 현재 활성화된 필드 모델의 마스터 데이터 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentFieldMaster 현재 활성화된 필드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . GetCurrentFieldMaster ( \u0026 mega_field . GetCurrentFieldMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\GetCurrentFieldMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e getCurrentFieldMaster ( ( new GetCurrentFieldMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.GetCurrentFieldMasterRequest ; import io.gs2.megaField.result.GetCurrentFieldMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { GetCurrentFieldMasterResult result = client . getCurrentFieldMaster ( new GetCurrentFieldMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentFieldMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . GetCurrentFieldMasterResult \u003e asyncResult = null ; yield return client . GetCurrentFieldMaster ( new Gs2 . Gs2MegaField . Request . GetCurrentFieldMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . getCurrentFieldMaster ( new Gs2MegaField . GetCurrentFieldMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . get_current_field_master ( mega_field . GetCurrentFieldMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.get_current_field_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.get_current_field_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentFieldMaster 현재 활성화된 필드 모델의 마스터 데이터 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 업데이트를 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentFieldMaster에 업로드로 취득한 토큰을 전달하여 실행함으로써 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentFieldMaster ( \u0026 mega_field . PreUpdateCurrentFieldMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\PreUpdateCurrentFieldMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentFieldMaster ( ( new PreUpdateCurrentFieldMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.PreUpdateCurrentFieldMasterRequest ; import io.gs2.megaField.result.PreUpdateCurrentFieldMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { PreUpdateCurrentFieldMasterResult result = client . preUpdateCurrentFieldMaster ( new PreUpdateCurrentFieldMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . PreUpdateCurrentFieldMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentFieldMaster ( new Gs2 . Gs2MegaField . Request . PreUpdateCurrentFieldMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . preUpdateCurrentFieldMaster ( new Gs2MegaField . PreUpdateCurrentFieldMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . pre_update_current_field_master ( mega_field . PreUpdateCurrentFieldMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.pre_update_current_field_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'mega_field' ) api_result_handler = client.pre_update_current_field_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentFieldMaster 현재 활성화된 필드 모델의 마스터 데이터 업데이트 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentFieldMaster 업데이트된 현재 활성화된 필드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentFieldMaster ( \u0026 mega_field . UpdateCurrentFieldMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2022-08-28\\\", \\\"areaModels\\\": [{\\\"name\\\": \\\"area-0001\\\", \\\"metadata\\\": \\\"AREA_0001\\\", \\\"layerModels\\\": [{\\\"name\\\": \\\"layer-0001\\\", \\\"metadata\\\": \\\"LAYER_0001\\\"}]}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\UpdateCurrentFieldMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e updateCurrentFieldMaster ( ( new UpdateCurrentFieldMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2022-08-28 \\\" , \\\" areaModels \\\" : [{ \\\" name \\\" : \\\" area-0001 \\\" , \\\" metadata \\\" : \\\" AREA_0001 \\\" , \\\" layerModels \\\" : [{ \\\" name \\\" : \\\" layer-0001 \\\" , \\\" metadata \\\" : \\\" LAYER_0001 \\\" }]}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.UpdateCurrentFieldMasterRequest ; import io.gs2.megaField.result.UpdateCurrentFieldMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { UpdateCurrentFieldMasterResult result = client . updateCurrentFieldMaster ( new UpdateCurrentFieldMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2022-08-28\\\", \\\"areaModels\\\": [{\\\"name\\\": \\\"area-0001\\\", \\\"metadata\\\": \\\"AREA_0001\\\", \\\"layerModels\\\": [{\\\"name\\\": \\\"layer-0001\\\", \\\"metadata\\\": \\\"LAYER_0001\\\"}]}]}\" ) . withUploadToken ( null ) ); CurrentFieldMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . UpdateCurrentFieldMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentFieldMaster ( new Gs2 . Gs2MegaField . Request . UpdateCurrentFieldMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2022-08-28\\\", \\\"areaModels\\\": [{\\\"name\\\": \\\"area-0001\\\", \\\"metadata\\\": \\\"AREA_0001\\\", \\\"layerModels\\\": [{\\\"name\\\": \\\"layer-0001\\\", \\\"metadata\\\": \\\"LAYER_0001\\\"}]}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . updateCurrentFieldMaster ( new Gs2MegaField . UpdateCurrentFieldMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2022-08-28\\\", \\\"areaModels\\\": [{\\\"name\\\": \\\"area-0001\\\", \\\"metadata\\\": \\\"AREA_0001\\\", \\\"layerModels\\\": [{\\\"name\\\": \\\"layer-0001\\\", \\\"metadata\\\": \\\"LAYER_0001\\\"}]}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . update_current_field_master ( mega_field . UpdateCurrentFieldMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2022-08-28\", \"areaModels\": [{\"name\": \"area-0001\", \"metadata\": \"AREA_0001\", \"layerModels\": [{\"name\": \"layer-0001\", \"metadata\": \"LAYER_0001\"}]}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.update_current_field_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2022-08-28 \\\" , \\\" areaModels \\\" : [{ \\\" name \\\" : \\\" area-0001 \\\" , \\\" metadata \\\" : \\\" AREA_0001 \\\" , \\\" layerModels \\\" : [{ \\\" name \\\" : \\\" layer-0001 \\\" , \\\" metadata \\\" : \\\" LAYER_0001 \\\" }]}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.update_current_field_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2022-08-28 \\\" , \\\" areaModels \\\" : [{ \\\" name \\\" : \\\" area-0001 \\\" , \\\" metadata \\\" : \\\" AREA_0001 \\\" , \\\" layerModels \\\" : [{ \\\" name \\\" : \\\" layer-0001 \\\" , \\\" metadata \\\" : \\\" LAYER_0001 \\\" }]}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentFieldMasterFromGitHub 현재 활성화된 필드 모델의 마스터 데이터를 GitHub에서 업데이트 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentFieldMaster 업데이트된 현재 활성화된 필드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentFieldMasterFromGitHub ( \u0026 mega_field . UpdateCurrentFieldMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 megaField . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\UpdateCurrentFieldMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e updateCurrentFieldMasterFromGitHub ( ( new UpdateCurrentFieldMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.UpdateCurrentFieldMasterFromGitHubRequest ; import io.gs2.megaField.result.UpdateCurrentFieldMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { UpdateCurrentFieldMasterFromGitHubResult result = client . updateCurrentFieldMasterFromGitHub ( new UpdateCurrentFieldMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentFieldMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . UpdateCurrentFieldMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentFieldMasterFromGitHub ( new Gs2 . Gs2MegaField . Request . UpdateCurrentFieldMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2MegaField . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . updateCurrentFieldMasterFromGitHub ( new Gs2MegaField . UpdateCurrentFieldMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2MegaField . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . update_current_field_master_from_git_hub ( mega_field . UpdateCurrentFieldMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( mega_field . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.update_current_field_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.update_current_field_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeAreaModelMasters 에어리어 모델 마스터 목록 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 에어리어 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . DescribeAreaModelMasters ( \u0026 mega_field . DescribeAreaModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\DescribeAreaModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e describeAreaModelMasters ( ( new DescribeAreaModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.DescribeAreaModelMastersRequest ; import io.gs2.megaField.result.DescribeAreaModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { DescribeAreaModelMastersResult result = client . describeAreaModelMasters ( new DescribeAreaModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List AreaModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . DescribeAreaModelMastersResult \u003e asyncResult = null ; yield return client . DescribeAreaModelMasters ( new Gs2 . Gs2MegaField . Request . DescribeAreaModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . describeAreaModelMasters ( new Gs2MegaField . DescribeAreaModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . describe_area_model_masters ( mega_field . DescribeAreaModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.describe_area_model_masters ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mega_field' ) api_result_handler = client.describe_area_model_masters_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createAreaModelMaster 에어리어 모델 마스터 신규 작성 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 에어리어 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item AreaModelMaster 생성한 에어리어 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . CreateAreaModelMaster ( \u0026 mega_field . CreateAreaModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"area-0001\" ), Description : nil , Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\CreateAreaModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e createAreaModelMaster ( ( new CreateAreaModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"area-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.CreateAreaModelMasterRequest ; import io.gs2.megaField.result.CreateAreaModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { CreateAreaModelMasterResult result = client . createAreaModelMaster ( new CreateAreaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"area-0001\" ) . withDescription ( null ) . withMetadata ( null ) ); AreaModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . CreateAreaModelMasterResult \u003e asyncResult = null ; yield return client . CreateAreaModelMaster ( new Gs2 . Gs2MegaField . Request . CreateAreaModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"area-0001\" ) . WithDescription ( null ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . createAreaModelMaster ( new Gs2MegaField . CreateAreaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"area-0001\" ) . withDescription ( null ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . create_area_model_master ( mega_field . CreateAreaModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'area-0001' ) . with_description ( None ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.create_area_model_master ({ namespaceName = \"namespace-0001\" , name = \"area-0001\" , description = nil , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.create_area_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"area-0001\" , description = nil , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getAreaModelMaster 에어리어 모델 마스터 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 Result 타입 설명 item AreaModelMaster 에어리어 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . GetAreaModelMaster ( \u0026 mega_field . GetAreaModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\GetAreaModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e getAreaModelMaster ( ( new GetAreaModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.GetAreaModelMasterRequest ; import io.gs2.megaField.result.GetAreaModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { GetAreaModelMasterResult result = client . getAreaModelMaster ( new GetAreaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) ); AreaModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . GetAreaModelMasterResult \u003e asyncResult = null ; yield return client . GetAreaModelMaster ( new Gs2 . Gs2MegaField . Request . GetAreaModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . getAreaModelMaster ( new Gs2MegaField . GetAreaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . get_area_model_master ( mega_field . GetAreaModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.get_area_model_master ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.get_area_model_master_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateAreaModelMaster 에어리어 모델 마스터 업데이트 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item AreaModelMaster 업데이트한 에어리어 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . UpdateAreaModelMaster ( \u0026 mega_field . UpdateAreaModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"AREA_MASTER\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\UpdateAreaModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e updateAreaModelMaster ( ( new UpdateAreaModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"AREA_MASTER\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.UpdateAreaModelMasterRequest ; import io.gs2.megaField.result.UpdateAreaModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { UpdateAreaModelMasterResult result = client . updateAreaModelMaster ( new UpdateAreaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"AREA_MASTER\" ) ); AreaModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . UpdateAreaModelMasterResult \u003e asyncResult = null ; yield return client . UpdateAreaModelMaster ( new Gs2 . Gs2MegaField . Request . UpdateAreaModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"AREA_MASTER\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . updateAreaModelMaster ( new Gs2MegaField . UpdateAreaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"AREA_MASTER\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . update_area_model_master ( mega_field . UpdateAreaModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_description ( 'description1' ) . with_metadata ( 'AREA_MASTER' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.update_area_model_master ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , description = \"description1\" , metadata = \"AREA_MASTER\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.update_area_model_master_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , description = \"description1\" , metadata = \"AREA_MASTER\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteAreaModelMaster 에어리어 모델 마스터 삭제 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 Result 타입 설명 item AreaModelMaster 삭제한 에어리어 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . DeleteAreaModelMaster ( \u0026 mega_field . DeleteAreaModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\DeleteAreaModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e deleteAreaModelMaster ( ( new DeleteAreaModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.DeleteAreaModelMasterRequest ; import io.gs2.megaField.result.DeleteAreaModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { DeleteAreaModelMasterResult result = client . deleteAreaModelMaster ( new DeleteAreaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) ); AreaModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . DeleteAreaModelMasterResult \u003e asyncResult = null ; yield return client . DeleteAreaModelMaster ( new Gs2 . Gs2MegaField . Request . DeleteAreaModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . deleteAreaModelMaster ( new Gs2MegaField . DeleteAreaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . delete_area_model_master ( mega_field . DeleteAreaModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.delete_area_model_master ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.delete_area_model_master_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeLayerModelMasters 레이어 모델 마스터 목록 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 레이어 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . DescribeLayerModelMasters ( \u0026 mega_field . DescribeLayerModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\DescribeLayerModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e describeLayerModelMasters ( ( new DescribeLayerModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.DescribeLayerModelMastersRequest ; import io.gs2.megaField.result.DescribeLayerModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { DescribeLayerModelMastersResult result = client . describeLayerModelMasters ( new DescribeLayerModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List LayerModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . DescribeLayerModelMastersResult \u003e asyncResult = null ; yield return client . DescribeLayerModelMasters ( new Gs2 . Gs2MegaField . Request . DescribeLayerModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . describeLayerModelMasters ( new Gs2MegaField . DescribeLayerModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . describe_layer_model_masters ( mega_field . DescribeLayerModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.describe_layer_model_masters ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mega_field' ) api_result_handler = client.describe_layer_model_masters_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createLayerModelMaster 레이어 모델 마스터 신규 작성 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 name string  ~ 128자 레이어 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item LayerModelMaster 생성한 레이어 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . CreateLayerModelMaster ( \u0026 mega_field . CreateLayerModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), Name : pointy . String ( \"layer-0001\" ), Description : nil , Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\CreateLayerModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e createLayerModelMaster ( ( new CreateLayerModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withName ( \"layer-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.CreateLayerModelMasterRequest ; import io.gs2.megaField.result.CreateLayerModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { CreateLayerModelMasterResult result = client . createLayerModelMaster ( new CreateLayerModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withName ( \"layer-0001\" ) . withDescription ( null ) . withMetadata ( null ) ); LayerModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . CreateLayerModelMasterResult \u003e asyncResult = null ; yield return client . CreateLayerModelMaster ( new Gs2 . Gs2MegaField . Request . CreateLayerModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithName ( \"layer-0001\" ) . WithDescription ( null ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . createLayerModelMaster ( new Gs2MegaField . CreateLayerModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withName ( \"layer-0001\" ) . withDescription ( null ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . create_layer_model_master ( mega_field . CreateLayerModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_name ( 'layer-0001' ) . with_description ( None ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.create_layer_model_master ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , name = \"layer-0001\" , description = nil , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.create_layer_model_master_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , name = \"layer-0001\" , description = nil , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getLayerModelMaster 레이어 모델 마스터 조회 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 layerModelName string  ~ 128자 레이어 모델 이름 Result 타입 설명 item LayerModelMaster 레이어 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . GetLayerModelMaster ( \u0026 mega_field . GetLayerModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\GetLayerModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e getLayerModelMaster ( ( new GetLayerModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.GetLayerModelMasterRequest ; import io.gs2.megaField.result.GetLayerModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { GetLayerModelMasterResult result = client . getLayerModelMaster ( new GetLayerModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) ); LayerModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . GetLayerModelMasterResult \u003e asyncResult = null ; yield return client . GetLayerModelMaster ( new Gs2 . Gs2MegaField . Request . GetLayerModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . getLayerModelMaster ( new Gs2MegaField . GetLayerModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . get_layer_model_master ( mega_field . GetLayerModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.get_layer_model_master ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.get_layer_model_master_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateLayerModelMaster 레이어 모델 마스터 업데이트 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 layerModelName string  ~ 128자 레이어 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item LayerModelMaster 업데이트한 레이어 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . UpdateLayerModelMaster ( \u0026 mega_field . UpdateLayerModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"LAYER_0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\UpdateLayerModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e updateLayerModelMaster ( ( new UpdateLayerModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"LAYER_0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.UpdateLayerModelMasterRequest ; import io.gs2.megaField.result.UpdateLayerModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { UpdateLayerModelMasterResult result = client . updateLayerModelMaster ( new UpdateLayerModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"LAYER_0001\" ) ); LayerModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . UpdateLayerModelMasterResult \u003e asyncResult = null ; yield return client . UpdateLayerModelMaster ( new Gs2 . Gs2MegaField . Request . UpdateLayerModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"LAYER_0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . updateLayerModelMaster ( new Gs2MegaField . UpdateLayerModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"LAYER_0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . update_layer_model_master ( mega_field . UpdateLayerModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) . with_description ( 'description1' ) . with_metadata ( 'LAYER_0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.update_layer_model_master ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , description = \"description1\" , metadata = \"LAYER_0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.update_layer_model_master_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , description = \"description1\" , metadata = \"LAYER_0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteLayerModelMaster 레이어 모델 마스터 삭제 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. areaModelName string  ~ 128자 에어리어 모델 이름 layerModelName string  ~ 128자 레이어 모델 이름 Result 타입 설명 item LayerModelMaster 삭제한 레이어 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/megaField\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mega_field . Gs2MegaFieldRestClient { Session : \u0026 session , } result , err := client . DeleteLayerModelMaster ( \u0026 mega_field . DeleteLayerModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AreaModelName : pointy . String ( \"area-0001\" ), LayerModelName : pointy . String ( \"layer-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\MegaField\\Gs2MegaFieldRestClient ; use Gs2\\MegaField\\Request\\DeleteLayerModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MegaFieldRestClient ( $session ); try { $result = $client -\u003e deleteLayerModelMaster ( ( new DeleteLayerModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAreaModelName ( \"area-0001\" ) -\u003e withLayerModelName ( \"layer-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.megaField.rest.Gs2MegaFieldRestClient ; import io.gs2.megaField.request.DeleteLayerModelMasterRequest ; import io.gs2.megaField.result.DeleteLayerModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MegaFieldRestClient client = new Gs2MegaFieldRestClient ( session ); try { DeleteLayerModelMasterResult result = client . deleteLayerModelMaster ( new DeleteLayerModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) ); LayerModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MegaFieldRestClient ( session ); AsyncResult Gs2 . Gs2MegaField . Result . DeleteLayerModelMasterResult \u003e asyncResult = null ; yield return client . DeleteLayerModelMaster ( new Gs2 . Gs2MegaField . Request . DeleteLayerModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAreaModelName ( \"area-0001\" ) . WithLayerModelName ( \"layer-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2MegaField from '@/gs2/megaField' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2MegaField . Gs2MegaFieldRestClient ( session ); try { const result = await client . deleteLayerModelMaster ( new Gs2MegaField . DeleteLayerModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAreaModelName ( \"area-0001\" ) . withLayerModelName ( \"layer-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mega_field session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mega_field . Gs2MegaFieldRestClient ( session ) try : result = client . delete_layer_model_master ( mega_field . DeleteLayerModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_area_model_name ( 'area-0001' ) . with_layer_model_name ( 'layer-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mega_field' ) api_result = client.delete_layer_model_master ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mega_field' ) api_result_handler = client.delete_layer_model_master_async ({ namespaceName = \"namespace-0001\" , areaModelName = \"area-0001\" , layerModelName = \"layer-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-MegaField SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-MegaField SDK API 레퍼런스","url":"/ko/api_reference/mega_field/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 미션 달성 보상 부여 시 사용되는 분산 트랜잭션 설정입니다. missionCompleteScript ScriptSetting 미션을 달성했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - missionComplete counterIncrementScript ScriptSetting 카운터가 상승했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - counterIncrement receiveRewardsScript ScriptSetting 보상을 받았을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveRewards completeNotification NotificationSetting  미션 태스크를 달성했을 때의 푸시 통지 미션 태스크의 달성 조건이 충족되었을 때 GS2-Gateway를 통해 전달되는 푸시 통지 설정입니다. 게임 클라이언트가 달성 상황을 즉시 UI에 반영할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 이 네임스페이스에 대한 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 카운터 증가, 미션 달성, 보상 수령의 디버깅에 도움이 됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Complete 미션 달성 상황 특정 미션 그룹에 대한 사용자의 미션 달성 상황과 보상 수령 상황을 추적합니다. 달성 완료된 태스크명과 보상 수령 완료된 태스크명을 각각 별도의 목록으로 관리하여, 달성된 태스크와 실제로 보상을 수령한 태스크를 구분합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 completeId string ※ ~ 1024자 달성 상황 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. completedMissionTaskNames List [] 0 ~ 1000 items 달성 완료된 태스크명 목록 사용자가 달성한(달성 조건을 충족한) 미션 태스크의 이름입니다. 카운터가 목표값에 도달하거나 검증 액션이 성공한 시점에 이 목록에 추가됩니다. 보상 수령 여부는 관계없습니다. receivedMissionTaskNames List [] 0 ~ 1000 items 보상 수령 완료된 태스크명 목록 사용자가 달성 보상을 이미 수령한 미션 태스크의 이름입니다. 보상을 받으려면 태스크가 달성 완료 목록에 포함되어 있어야 합니다. nextResetAt long 다음 리셋 타이밍 이 미션 그룹의 달성 상황이 리셋되는 일시입니다. 미션 그룹의 리셋 타입과 타이밍 설정에 따라 결정됩니다. 리셋 타입이 “notReset\"인 경우 null입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Counter 카운터 카운터는 미션 진행 상황을 게임 플레이어별로 보관하는 엔티티입니다. 카운터의 값은 연결된 태스크의 기간별로 집계됩니다. 따라서 하나의 카운터는 여러 개의 값을 가집니다. 예를 들어, 퀘스트 클리어 횟수 카운터라면 이번 달 클리어 횟수, 이번 주 클리어 횟수, 오늘 클리어 횟수와 같은 식입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 counterId string ※ ~ 1024자 카운터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID name string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. values List [] 0 ~ 32 items 값 이 카운터의 스코프별 값 리스트입니다. 각 엔트리는 특정 스코프(리셋 타이밍 또는 검증 액션 조건)의 카운터 값과 다음 리셋 시각을 보관합니다. 하나의 카운터가 여러 스코프의 값을 동시에 보관합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 CounterScopeModel 카운터 리셋 타이밍 모델 카운터의 스코프를 정의하고, 카운터 값의 리셋 방법과 타이밍을 결정합니다. 스코프는 리셋 타이밍(매일, 매주, 매월, 일정 일수마다, 또는 리셋 없음) 또는 검증 액션 조건 중 하나입니다. 각 카운터는 여러 스코프를 가질 수 있으며, 서로 다른 기간의 값을 추적할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프의 종류 카운터 스코프의 정의 방법을 결정합니다. “resetTiming” 은 정기적인 리셋 스케줄을 사용하고, “verifyAction” 은 검증 액션으로 카운터 값이 적용되는지 여부를 판정합니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 이 스코프의 카운터 값이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구 누계), 매일, 매주, 매월, 일정 일수마다 중에서 선택합니다. scopeType 이 “resetTiming” 인 경우에만 사용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋할 날짜 카운터 값이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType 이 “monthly” 인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋할 요일 카운터 값이 리셋되는 요일입니다. resetType 이 “weekly” 인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 카운터 값이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건명 이 검증 액션 조건 스코프를 식별하는 고유한 이름입니다. 카운터 내에서 대응하는 스코프 값을 조회하는 데 사용됩니다. scopeType 이 “verifyAction” 인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 condition VerifyAction {scopeType} == “verifyAction” ※ 조건 이 스코프의 카운터 값이 적용되는지 여부를 판정하는 검증 액션입니다. scopeType이 “verifyAction\"인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 카운터 값의 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 CounterModel 카운터 모델 카운터 모델은 미션 태스크의 달성 조건으로 설정할 수 있는 엔티티입니다. 카운터 값은 여러 미션 그룹에서 참조할 수 있기 때문에, 하나의 카운터를 위클리 미션과 데일리 미션 같은 여러 미션 그룹의 달성 조건으로 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 counterId string ※ ~ 1024자 카운터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scopes List [] 1 ~ 20 items 카운터의 리셋 타이밍 목록 이 카운터의 스코프(리셋 타이밍 또는 검증 액션 조건)를 정의합니다. 하나의 카운터에 여러 스코프를 설정할 수 있으며, 서로 다른 기간의 값(예: 데일리, 위클리, 누계를 동시에)을 추적할 수 있습니다. challengePeriodEventId string ~ 1024자 카운터를 조작할 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 카운터의 증감이 가능한 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 카운터는 언제든지 조작할 수 있습니다. MissionGroupModel 미션 그룹 모델 미션 그룹은 카운터의 리셋 타이밍으로 태스크를 그룹화하는 엔티티입니다. 예를 들어, 데일리 미션으로 하나의 그룹, 위클리 미션으로 하나의 그룹이 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 missionGroupId string ※ ~ 1024자 미션 그룹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tasks List [] 0 ~ 1000 items 미션 태스크 리스트 이 그룹에 속하는 미션 태스크입니다. 각 태스크는 달성 조건(카운터의 임계값 또는 검증 액션)과 달성 시 부여되는 보상을 정의합니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 미션 그룹의 달성 상황이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구), 매일, 매주, 매월, 기준 일시부터 일정 일수마다 중에서 선택합니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋하는 날짜 미션 그룹이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType이 “monthly\"인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋하는 요일 미션 그룹이 리셋되는 요일입니다. resetType이 “weekly\"인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 미션 그룹이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 completeNotificationNamespaceId string ~ 1024자 미션 태스크를 달성했을 때의 푸시 통지 이 그룹 내의 미션 태스크가 달성되었을 때 푸시 통지를 전송하는 데 사용되는 GS2-Gateway의 네임스페이스 GRN입니다. 게임 클라이언트에 실시간으로 통지할 수 있습니다. anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 MissionTaskModel 미션 태스크 모델 미션 태스크는 연결된 카운터의 값이 일정 수준을 초과하면 보상을 받을 수 있는 조건을 정의하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 missionTaskId string ※ ~ 1024자 미션 태스크 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyCompleteType 문자열 열거형 enum {   “counter”,   “verifyActions” } “counter” 달성 조건 종류 미션 태스크의 달성 판정 방법을 지정합니다. “counter\"는 관련된 카운터의 스코프 값이 목표 임곗값에 도달했는지 확인합니다. “verifyActions\"는 검증 액션을 사용하여 달성 조건을 확인합니다. 정의 설명 counter 카운터 verifyActions 검증 액션 targetCounter TargetCounterModel {verifyCompleteType} == “counter” ※ 목표 카운터 미션 태스크의 달성 판정에 사용되는 카운터, 스코프, 목표값을 정의합니다. 카운터의 스코프 값이 지정된 목표값에 도달하거나 초과한 경우, 태스크가 달성된 것으로 간주됩니다. ※ verifyCompleteType이(가) “counter” 이면 필수 verifyCompleteConsumeActions List {verifyCompleteType} == “verifyActions” [] 0 ~ 10 items 태스크 달성 판정에 사용하는 검증 액션 미션 태스크의 달성 판정에 사용되는 검증 액션의 목록입니다. 모든 검증 액션이 성공한 경우 태스크가 달성된 것으로 간주됩니다. verifyCompleteType이 “verifyActions\"인 경우에만 사용됩니다. ※ verifyCompleteType이(가) “verifyActions” 이면 활성화 completeAcquireActions List [] 0 ~ 100 items 미션 달성 시 보상 플레이어가 미션 달성 보상을 받을 때 실행되는 입수 액션의 목록입니다. challengePeriodEventId string ~ 1024자 보상을 받을 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 미션 태스크의 보상을 받을 수 있는 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 달성 후 언제든지 보상을 받을 수 있습니다. premiseMissionTaskName string ~ 128자 이 태스크에 도전하기 위해 달성해 두어야 하는 태스크의 이름 이 태스크의 보상을 받기 전에 달성해 두어야 하는, 같은 그룹 내의 전제 미션 태스크를 지정합니다. 단계적인 미션 체인을 만드는 데 사용합니다. TargetCounterModel 목표 카운터 미션의 달성 목표가 되는 카운터의 정보 상세 타입 활성화 조건 필수 기본값 값 제한 설명 counterName string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 미션 달성 판정에 사용하는 카운터 스코프의 종류를 지정합니다. “resetTiming\"은 특정 리셋 기간의 카운터 값을 평가하고, “verifyAction\"은 이름이 지정된 조건의 값을 평가합니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” 목표 리셋 타이밍 목표값과 비교할 카운터의 리셋 타이밍 스코프를 지정합니다. 예를 들어 “daily\"를 선택하면 데일리 카운터 값을 확인합니다. 생략한 경우, 미션 그룹의 리셋 타이밍이 사용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 활성화 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 목표값과 비교할 검증 액션 조건 스코프의 이름입니다. 카운터 모델의 스코프에서 정의된 conditionName과 일치해야 합니다. scopeType이 “verifyAction\"인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long  0 ~ 9223372036854775805 목표값 미션 태스크가 달성된 것으로 간주되기 위해, 카운터의 스코프 값이 도달하거나 초과해야 하는 임곗값입니다. ScopedValue 스코프 값 특정 스코프 내의 카운터 값을 나타냅니다. 각 스코프 값은 특정 리셋 타이밍(예: 매일, 매주, 매월) 또는 검증 액션 조건의 누적 카운트를 보유합니다. 리셋 타이밍이 도래하면 값은 0으로 리셋됩니다. 카운터 값에는 상한이 있으며, 증가하더라도 최댓값을 초과하지 않습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 이 스코프 값이 리셋 타이밍 스케줄에 기반한 것인지, 검증 액션 조건에 기반한 것인지를 나타냅니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” ※ 리셋 타이밍 이 스코프 값의 리셋 타이밍입니다. 카운터 값이 리셋될 때까지의 누적 기간을 결정합니다. scopeType이 “resetTiming\"인 경우에만 적용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 이 스코프 값이 대응하는 검증 액션 조건의 이름입니다. 이 값이 어느 조건 스코프에 속하는지 식별하는 데 사용됩니다. scopeType이 “verifyAction\"인 경우에만 적용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long 0 0 ~ 9223372036854775805 카운트 이 스코프의 누적 카운터 값입니다. 카운터가 증가하면 늘어나고 감소하면 줄어듭니다. 값은 최댓값으로 상한이 설정되며, 0 미만으로 내려가지 않습니다. nextResetAt long 다음 리셋 타이밍 이 스코프 값이 0으로 리셋되는 일시입니다. 리셋 타입과 타이밍 설정에 따라 산출됩니다. 리셋 타입이 “notReset\"인 경우, 또는 스코프 타입이 “verifyAction\"인 경우에는 null입니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentMissionMaster 현재 활성화된 미션 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 미션 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Mission 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 CounterModelMaster 카운터 모델 마스터 카운터 모델 마스터는 게임 내에서 사용되는 카운터 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 카운터 모델로 반영됩니다. 카운터 모델은 미션 태스크의 달성 조건으로 설정할 수 있는 엔티티입니다. 카운터의 값은 여러 미션 그룹에서 참조할 수 있으므로, 하나의 카운터로 위클리 미션과 데일리 미션 등 여러 미션 그룹의 달성 조건을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 counterId string ※ ~ 1024자 카운터 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카운터 모델명 카운터 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 scopes List [] 1 ~ 20 items 카운터의 리셋 타이밍 목록 이 카운터의 스코프(리셋 타이밍 또는 검증 액션 조건)를 정의합니다. 하나의 카운터에 여러 스코프를 설정할 수 있으며, 서로 다른 기간의 값(예: 데일리, 위클리, 누계를 동시에)을 추적할 수 있습니다. challengePeriodEventId string ~ 1024자 카운터를 조작할 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 카운터의 증감이 가능한 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 카운터는 언제든지 조작할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 MissionGroupModelMaster 미션 그룹 모델 마스터 미션 그룹 모델 마스터는 게임 내에서 사용되는 미션 그룹 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 미션 그룹 모델로 반영됩니다. 미션 그룹은 카운터의 리셋 타이밍으로 태스크를 그룹화하는 엔티티입니다. 예를 들어 데일리 미션으로 하나의 그룹, 위클리 미션으로 하나의 그룹이 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 missionGroupId string ※ ~ 1024자 미션 그룹 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 미션 그룹의 달성 상황이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구), 매일, 매주, 매월, 기준 일시부터 일정 일수마다 중에서 선택합니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋하는 날짜 미션 그룹이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType이 “monthly\"인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋하는 요일 미션 그룹이 리셋되는 요일입니다. resetType이 “weekly\"인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 미션 그룹이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 completeNotificationNamespaceId string ~ 1024자 미션 태스크를 달성했을 때의 푸시 통지 이 그룹 내의 미션 태스크가 달성되었을 때 푸시 통지를 전송하는 데 사용되는 GS2-Gateway의 네임스페이스 GRN입니다. 게임 클라이언트에 실시간으로 통지할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 MissionTaskModelMaster 미션 태스크 모델 마스터 미션 태스크 모델 마스터는 게임 내에서 사용되는 미션 태스크 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 미션 태스크 모델로 반영됩니다. 미션 태스크는 연관된 카운터의 값이 일정 수준을 초과하면 보상을 받을 수 있는 조건을 정의하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 missionTaskId string ※ ~ 1024자 미션 태스크 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 미션 태스크 모델명 미션 태스크 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 verifyCompleteType 문자열 열거형 enum {   “counter”,   “verifyActions” } “counter” 달성 조건 종류 미션 태스크의 달성 판정 방법을 지정합니다. “counter\"는 관련된 카운터의 스코프 값이 목표 임곗값에 도달했는지 확인합니다. “verifyActions\"는 검증 액션을 사용하여 달성 조건을 확인합니다. 정의 설명 counter 카운터 verifyActions 검증 액션 targetCounter TargetCounterModel {verifyCompleteType} == “counter” ※ 목표 카운터 미션 태스크의 달성 판정에 사용되는 카운터, 스코프, 목표값을 정의합니다. 카운터의 스코프 값이 지정된 목표값에 도달하거나 초과한 경우, 태스크가 달성된 것으로 간주됩니다. ※ verifyCompleteType이(가) “counter” 이면 필수 verifyCompleteConsumeActions List {verifyCompleteType} == “verifyActions” 0 ~ 10 items 태스크 달성 판정에 사용하는 검증 액션 미션 태스크의 달성 판정에 사용되는 검증 액션의 목록입니다. 모든 검증 액션이 성공한 경우 태스크가 달성된 것으로 간주됩니다. verifyCompleteType이 “verifyActions\"인 경우에만 사용됩니다. ※ verifyCompleteType이(가) “verifyActions” 이면 활성화 completeAcquireActions List [] 0 ~ 100 items 미션 달성 시 보상 플레이어가 미션 달성 보상을 받을 때 실행되는 입수 액션의 목록입니다. challengePeriodEventId string ~ 1024자 보상을 받을 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 미션 태스크의 보상을 받을 수 있는 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 달성 후 언제든지 보상을 받을 수 있습니다. premiseMissionTaskName string ~ 128자 이 태스크에 도전하기 위해 달성해 두어야 하는 태스크의 이름 이 태스크의 보상을 받기 전에 달성해 두어야 하는, 같은 그룹 내의 전제 미션 태스크를 지정합니다. 단계적인 미션 체인을 만드는 데 사용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 mission . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeNamespacesRequest ; import io.gs2.mission.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Mission . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Mission . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_namespaces ( mission . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mission' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 미션 달성 보상 부여 시 사용되는 분산 트랜잭션 설정입니다. missionCompleteScript ScriptSetting 미션을 달성했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - missionComplete counterIncrementScript ScriptSetting 카운터가 상승했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - counterIncrement receiveRewardsScript ScriptSetting 보상을 받았을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveRewards completeNotification NotificationSetting  미션 태스크를 달성했을 때의 푸시 통지 미션 태스크의 달성 조건이 충족되었을 때 GS2-Gateway를 통해 전달되는 푸시 통지 설정입니다. 게임 클라이언트가 달성 상황을 즉시 UI에 반영할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 이 네임스페이스에 대한 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 카운터 증가, 미션 달성, 보상 수령의 디버깅에 도움이 됩니다. Result 타입 설명 item Namespace 작성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 mission . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 mission . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, MissionCompleteScript : nil , CounterIncrementScript : nil , ReceiveRewardsScript : nil , CompleteNotification : nil , LogSetting : \u0026 mission . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Mission\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withMissionCompleteScript ( null ) -\u003e withCounterIncrementScript ( null ) -\u003e withReceiveRewardsScript ( null ) -\u003e withCompleteNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Mission\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CreateNamespaceRequest ; import io.gs2.mission.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . mission . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withMissionCompleteScript ( null ) . withCounterIncrementScript ( null ) . withReceiveRewardsScript ( null ) . withCompleteNotification ( null ) . withLogSetting ( new io . gs2 . mission . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Mission . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Mission . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithMissionCompleteScript ( null ) . WithCounterIncrementScript ( null ) . WithReceiveRewardsScript ( null ) . WithCompleteNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Mission . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Mission . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Mission . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withMissionCompleteScript ( null ) . withCounterIncrementScript ( null ) . withReceiveRewardsScript ( null ) . withCompleteNotification ( null ) . withLogSetting ( new Gs2Mission . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . create_namespace ( mission . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( mission . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_mission_complete_script ( None ) . with_counter_increment_script ( None ) . with_receive_rewards_script ( None ) . with_complete_notification ( None ) . with_log_setting ( mission . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, missionCompleteScript = nil , counterIncrementScript = nil , receiveRewardsScript = nil , completeNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, missionCompleteScript = nil , counterIncrementScript = nil , receiveRewardsScript = nil , completeNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 mission . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetNamespaceStatusRequest ; import io.gs2.mission.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Mission . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Mission . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_namespace_status ( mission . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'mission' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 mission . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetNamespaceRequest ; import io.gs2.mission.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Mission . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Mission . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_namespace ( mission . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 미션 달성 보상 부여 시 사용되는 분산 트랜잭션 설정입니다. missionCompleteScript ScriptSetting 미션을 달성했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - missionComplete counterIncrementScript ScriptSetting 카운터가 상승했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - counterIncrement receiveRewardsScript ScriptSetting 보상을 받았을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveRewards completeNotification NotificationSetting  미션 태스크를 달성했을 때의 푸시 통지 미션 태스크의 달성 조건이 충족되었을 때 GS2-Gateway를 통해 전달되는 푸시 통지 설정입니다. 게임 클라이언트가 달성 상황을 즉시 UI에 반영할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 이 네임스페이스에 대한 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 카운터 증가, 미션 달성, 보상 수령의 디버깅에 도움이 됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 mission . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 mission . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, MissionCompleteScript : \u0026 mission . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ), }, CounterIncrementScript : \u0026 mission . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ), }, ReceiveRewardsScript : \u0026 mission . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ), }, CompleteNotification : nil , LogSetting : \u0026 mission . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Mission\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withMissionCompleteScript (( new \\Gs2\\Mission\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) -\u003e withCounterIncrementScript (( new \\Gs2\\Mission\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) -\u003e withReceiveRewardsScript (( new \\Gs2\\Mission\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) -\u003e withCompleteNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Mission\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.UpdateNamespaceRequest ; import io.gs2.mission.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . mission . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withMissionCompleteScript ( new io . gs2 . mission . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . withCounterIncrementScript ( new io . gs2 . mission . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . withReceiveRewardsScript ( new io . gs2 . mission . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . withCompleteNotification ( null ) . withLogSetting ( new io . gs2 . mission . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Mission . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Mission . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithMissionCompleteScript ( new Gs2 . Gs2Mission . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . WithCounterIncrementScript ( new Gs2 . Gs2Mission . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . WithReceiveRewardsScript ( new Gs2 . Gs2Mission . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . WithCompleteNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Mission . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Mission . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Mission . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withMissionCompleteScript ( new Gs2Mission . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . withCounterIncrementScript ( new Gs2Mission . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . withReceiveRewardsScript ( new Gs2Mission . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" )) . withCompleteNotification ( null ) . withLogSetting ( new Gs2Mission . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . update_namespace ( mission . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( mission . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_mission_complete_script ( mission . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002' )) . with_counter_increment_script ( mission . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002' )) . with_receive_rewards_script ( mission . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002' )) . with_complete_notification ( None ) . with_log_setting ( mission . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, missionCompleteScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , }, counterIncrementScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , }, receiveRewardsScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , }, completeNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, missionCompleteScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , }, counterIncrementScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , }, receiveRewardsScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-0002\" , }, completeNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 mission . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DeleteNamespaceRequest ; import io.gs2.mission.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Mission . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Mission . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . delete_namespace ( mission . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 mission . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetServiceVersionRequest ; import io.gs2.mission.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Mission . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Mission . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_service_version ( mission . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 mission . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DumpUserDataByUserIdRequest ; import io.gs2.mission.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Mission . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Mission . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . dump_user_data_by_user_id ( mission . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'mission' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 mission . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.mission.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Mission . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Mission . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( mission . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'mission' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 mission . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CleanUserDataByUserIdRequest ; import io.gs2.mission.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Mission . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Mission . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . clean_user_data_by_user_id ( mission . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'mission' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 mission . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.mission.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Mission . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Mission . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( mission . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'mission' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 mission . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.mission.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Mission . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Mission . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( mission . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'mission' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 mission . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.ImportUserDataByUserIdRequest ; import io.gs2.mission.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Mission . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Mission . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . import_user_data_by_user_id ( mission . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'mission' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 mission . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CheckImportUserDataByUserIdRequest ; import io.gs2.mission.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Mission . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Mission . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( mission . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'mission' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeCompletes 달성 상황 목록 조회 요청 사용자의 미션 달성 상황을 페이지네이션된 목록으로 조회합니다. 각 달성 상황은 미션 그룹 내에서 어떤 미션 태스크가 달성되었고 어떤 보상을 수령했는지를 추적합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 달성 상황 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeCompletes ( \u0026 mission . DescribeCompletesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeCompletesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeCompletes ( ( new DescribeCompletesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeCompletesRequest ; import io.gs2.mission.result.DescribeCompletesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeCompletesResult result = client . describeCompletes ( new DescribeCompletesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Complete \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeCompletesResult \u003e asyncResult = null ; yield return client . DescribeCompletes ( new Gs2 . Gs2Mission . Request . DescribeCompletesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeCompletes ( new Gs2Mission . DescribeCompletesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_completes ( mission . DescribeCompletesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_completes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mission' ) api_result_handler = client.describe_completes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeCompletesByUserId 사용자 ID를 지정하여 달성 상황 목록 조회 지정된 사용자의 미션 달성 상황을 페이지네이션된 목록으로 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 달성 상황 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeCompletesByUserId ( \u0026 mission . DescribeCompletesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeCompletesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeCompletesByUserId ( ( new DescribeCompletesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeCompletesByUserIdRequest ; import io.gs2.mission.result.DescribeCompletesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeCompletesByUserIdResult result = client . describeCompletesByUserId ( new DescribeCompletesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Complete \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeCompletesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeCompletesByUserId ( new Gs2 . Gs2Mission . Request . DescribeCompletesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeCompletesByUserId ( new Gs2Mission . DescribeCompletesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_completes_by_user_id ( mission . DescribeCompletesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_completes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mission' ) api_result_handler = client.describe_completes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; complete 미션 달성 보상을 수령하기 위한 트랜잭션 발행 지정된 미션 태스크가 달성 완료 상태인지 확인하고, 설정된 보상 입수 액션을 포함하는 트랜잭션을 발행합니다. 태스크는 달성 완료(카운터 조건을 충족) 상태이며 아직 미수령 상태여야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. missionTaskName string  ~ 128자 태스크 이름 태스크 고유의 이름입니다. 영숫자와 -(하이픈), _(언더스코어), .(마침표)를 사용하여 지정합니다. accessToken string  ~ 128자 액세스 토큰 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 미션 달성 보상을 수령하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . Complete ( \u0026 mission . CompleteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), MissionTaskName : pointy . String ( \"mission-task-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CompleteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e complete ( ( new CompleteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMissionTaskName ( \"mission-task-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withConfig ( null ) ); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CompleteRequest ; import io.gs2.mission.result.CompleteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CompleteResult result = client . complete ( new CompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConfig ( null ) ); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CompleteResult \u003e asyncResult = null ; yield return client . Complete ( new Gs2 . Gs2Mission . Request . CompleteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMissionTaskName ( \"mission-task-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . complete ( new Gs2Mission . CompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConfig ( null ) ); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . complete ( mission . CompleteRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_mission_task_name ( 'mission-task-0001' ) . with_access_token ( 'accessToken-0001' ) . with_config ( None ) ) transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.complete ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , accessToken = \"accessToken-0001\" , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'mission' ) api_result_handler = client.complete_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , accessToken = \"accessToken-0001\" , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; completeByUserId 사용자 ID를 지정하여 미션 달성 보상을 수령하기 위한 트랜잭션 발행 지정된 미션 태스크가 달성 완료 상태인지 확인하고, 설정된 보상 입수 액션을 포함하는 트랜잭션을 발행합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. missionTaskName string  ~ 128자 태스크 이름 태스크 고유의 이름입니다. 영숫자와 -(하이픈), _(언더스코어), .(마침표)를 사용하여 지정합니다. userId string  ~ 128자 사용자ID config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 미션 달성 보상을 수령하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CompleteByUserId ( \u0026 mission . CompleteByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), MissionTaskName : pointy . String ( \"mission-task-0001\" ), UserId : pointy . String ( \"user-0001\" ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CompleteByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e completeByUserId ( ( new CompleteByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMissionTaskName ( \"mission-task-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CompleteByUserIdRequest ; import io.gs2.mission.result.CompleteByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CompleteByUserIdResult result = client . completeByUserId ( new CompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withUserId ( \"user-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CompleteByUserIdResult \u003e asyncResult = null ; yield return client . CompleteByUserId ( new Gs2 . Gs2Mission . Request . CompleteByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMissionTaskName ( \"mission-task-0001\" ) . WithUserId ( \"user-0001\" ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . completeByUserId ( new Gs2Mission . CompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withUserId ( \"user-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . complete_by_user_id ( mission . CompleteByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_mission_task_name ( 'mission-task-0001' ) . with_user_id ( 'user-0001' ) . with_config ( None ) . with_time_offset_token ( None ) ) transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.complete_by_user_id ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , userId = \"user-0001\" , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'mission' ) api_result_handler = client.complete_by_user_id_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , userId = \"user-0001\" , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; batchComplete 미션 달성 보상을 일괄로 수령하기 위한 트랜잭션 발행 동일한 미션 그룹 내 여러 미션 태스크의 달성 처리를 일괄로 수행하고, 모든 보상을 포함하는 트랜잭션을 발행합니다. 각 태스크는 달성 완료 상태이며 아직 미수령 상태여야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. accessToken string  ~ 128자 액세스 토큰 missionTaskNames List  1 ~ 100 items 태스크 이름 리스트 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 미션 달성 보상을 수령하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . BatchComplete ( \u0026 mission . BatchCompleteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MissionTaskNames : [] * string { pointy . String ( \"mission-task-0001\" ), pointy . String ( \"mission-task-0002\" ), }, Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\BatchCompleteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e batchComplete ( ( new BatchCompleteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMissionTaskNames ([ \"mission-task-0001\" , \"mission-task-0002\" , ]) -\u003e withConfig ( null ) ); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.BatchCompleteRequest ; import io.gs2.mission.result.BatchCompleteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { BatchCompleteResult result = client . batchComplete ( new BatchCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMissionTaskNames ( Arrays . asList ( \"mission-task-0001\" , \"mission-task-0002\" )) . withConfig ( null ) ); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . BatchCompleteResult \u003e asyncResult = null ; yield return client . BatchComplete ( new Gs2 . Gs2Mission . Request . BatchCompleteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMissionTaskNames ( new string [] { \"mission-task-0001\" , \"mission-task-0002\" , }) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . batchComplete ( new Gs2Mission . BatchCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMissionTaskNames ([ \"mission-task-0001\" , \"mission-task-0002\" , ]) . withConfig ( null ) ); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . batch_complete ( mission . BatchCompleteRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mission_task_names ([ 'mission-task-0001' , 'mission-task-0002' , ]) . with_config ( None ) ) transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.batch_complete ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , accessToken = \"accessToken-0001\" , missionTaskNames = { \"mission-task-0001\" , \"mission-task-0002\" }, config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'mission' ) api_result_handler = client.batch_complete_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , accessToken = \"accessToken-0001\" , missionTaskNames = { \"mission-task-0001\" , \"mission-task-0002\" }, config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; batchCompleteByUserId 사용자 ID를 지정하여 미션 달성 보상을 일괄로 수령하기 위한 트랜잭션 발행 동일한 미션 그룹 내 여러 미션 태스크의 달성 처리를 일괄로 수행합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. userId string  ~ 128자 사용자ID missionTaskNames List  1 ~ 100 items 태스크 이름 리스트 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 미션 달성 보상을 수령하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . BatchCompleteByUserId ( \u0026 mission . BatchCompleteByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), UserId : pointy . String ( \"user-0001\" ), MissionTaskNames : [] * string { pointy . String ( \"mission-task-0001\" ), pointy . String ( \"mission-task-0002\" ), }, Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\BatchCompleteByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e batchCompleteByUserId ( ( new BatchCompleteByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMissionTaskNames ([ \"mission-task-0001\" , \"mission-task-0002\" , ]) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.BatchCompleteByUserIdRequest ; import io.gs2.mission.result.BatchCompleteByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { BatchCompleteByUserIdResult result = client . batchCompleteByUserId ( new BatchCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withUserId ( \"user-0001\" ) . withMissionTaskNames ( Arrays . asList ( \"mission-task-0001\" , \"mission-task-0002\" )) . withConfig ( null ) . withTimeOffsetToken ( null ) ); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . BatchCompleteByUserIdResult \u003e asyncResult = null ; yield return client . BatchCompleteByUserId ( new Gs2 . Gs2Mission . Request . BatchCompleteByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithUserId ( \"user-0001\" ) . WithMissionTaskNames ( new string [] { \"mission-task-0001\" , \"mission-task-0002\" , }) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . batchCompleteByUserId ( new Gs2Mission . BatchCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withUserId ( \"user-0001\" ) . withMissionTaskNames ([ \"mission-task-0001\" , \"mission-task-0002\" , ]) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . batch_complete_by_user_id ( mission . BatchCompleteByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_user_id ( 'user-0001' ) . with_mission_task_names ([ 'mission-task-0001' , 'mission-task-0002' , ]) . with_config ( None ) . with_time_offset_token ( None ) ) transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.batch_complete_by_user_id ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , userId = \"user-0001\" , missionTaskNames = { \"mission-task-0001\" , \"mission-task-0002\" }, config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'mission' ) api_result_handler = client.batch_complete_by_user_id_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , userId = \"user-0001\" , missionTaskNames = { \"mission-task-0001\" , \"mission-task-0002\" }, config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; receiveByUserId 미션 달성 보상 수령 지정된 사용자의 지정 미션 태스크를 수령 완료 상태로 표시합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. missionTaskName string  ~ 128자 태스크 이름 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Complete 수령한 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . ReceiveByUserId ( \u0026 mission . ReceiveByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), MissionTaskName : pointy . String ( \"mission-task-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\ReceiveByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e receiveByUserId ( ( new ReceiveByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMissionTaskName ( \"mission-task-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.ReceiveByUserIdRequest ; import io.gs2.mission.result.ReceiveByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { ReceiveByUserIdResult result = client . receiveByUserId ( new ReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . ReceiveByUserIdResult \u003e asyncResult = null ; yield return client . ReceiveByUserId ( new Gs2 . Gs2Mission . Request . ReceiveByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMissionTaskName ( \"mission-task-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . receiveByUserId ( new Gs2Mission . ReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . receive_by_user_id ( mission . ReceiveByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_mission_task_name ( 'mission-task-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.receive_by_user_id ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.receive_by_user_id_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; batchReceiveByUserId 여러 미션 태스크의 달성 보상을 일괄로 수령 상태로 변경 동일한 미션 그룹 내 여러 미션 태스크를 일괄로 수령 완료 상태로 표시합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. userId string  ~ 128자 사용자ID missionTaskNames List  1 ~ 100 items 태스크 이름 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Complete 수령한 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . BatchReceiveByUserId ( \u0026 mission . BatchReceiveByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), UserId : pointy . String ( \"user-0001\" ), MissionTaskNames : [] * string { pointy . String ( \"mission-task-0001\" ), pointy . String ( \"mission-task-0002\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\BatchReceiveByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e batchReceiveByUserId ( ( new BatchReceiveByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMissionTaskNames ([ \"mission-task-0001\" , \"mission-task-0002\" , ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.BatchReceiveByUserIdRequest ; import io.gs2.mission.result.BatchReceiveByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { BatchReceiveByUserIdResult result = client . batchReceiveByUserId ( new BatchReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withUserId ( \"user-0001\" ) . withMissionTaskNames ( Arrays . asList ( \"mission-task-0001\" , \"mission-task-0002\" )) . withTimeOffsetToken ( null ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . BatchReceiveByUserIdResult \u003e asyncResult = null ; yield return client . BatchReceiveByUserId ( new Gs2 . Gs2Mission . Request . BatchReceiveByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithUserId ( \"user-0001\" ) . WithMissionTaskNames ( new string [] { \"mission-task-0001\" , \"mission-task-0002\" , }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . batchReceiveByUserId ( new Gs2Mission . BatchReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withUserId ( \"user-0001\" ) . withMissionTaskNames ([ \"mission-task-0001\" , \"mission-task-0002\" , ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . batch_receive_by_user_id ( mission . BatchReceiveByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_user_id ( 'user-0001' ) . with_mission_task_names ([ 'mission-task-0001' , 'mission-task-0002' , ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.batch_receive_by_user_id ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , userId = \"user-0001\" , missionTaskNames = { \"mission-task-0001\" , \"mission-task-0002\" }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.batch_receive_by_user_id_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , userId = \"user-0001\" , missionTaskNames = { \"mission-task-0001\" , \"mission-task-0002\" }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; revertReceiveByUserId 미션 달성 보상을 미수령 상태로 되돌리기 미션 태스크의 수령 상태를 미수령으로 되돌립니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. missionTaskName string  ~ 128자 태스크 이름 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Complete 수령한 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . RevertReceiveByUserId ( \u0026 mission . RevertReceiveByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), MissionTaskName : pointy . String ( \"mission-task-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\RevertReceiveByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e revertReceiveByUserId ( ( new RevertReceiveByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMissionTaskName ( \"mission-task-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.RevertReceiveByUserIdRequest ; import io.gs2.mission.result.RevertReceiveByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { RevertReceiveByUserIdResult result = client . revertReceiveByUserId ( new RevertReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . RevertReceiveByUserIdResult \u003e asyncResult = null ; yield return client . RevertReceiveByUserId ( new Gs2 . Gs2Mission . Request . RevertReceiveByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMissionTaskName ( \"mission-task-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . revertReceiveByUserId ( new Gs2Mission . RevertReceiveByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . revert_receive_by_user_id ( mission . RevertReceiveByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_mission_task_name ( 'mission-task-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.revert_receive_by_user_id ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.revert_receive_by_user_id_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getComplete 달성 상황 조회 요청 사용자의 지정된 미션 그룹의 달성 상황을 조회합니다. 달성 완료된 미션 태스크와 수령 완료된 미션 태스크의 목록이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Complete 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetComplete ( \u0026 mission . GetCompleteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetCompleteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getComplete ( ( new GetCompleteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetCompleteRequest ; import io.gs2.mission.result.GetCompleteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetCompleteResult result = client . getComplete ( new GetCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetCompleteResult \u003e asyncResult = null ; yield return client . GetComplete ( new Gs2 . Gs2Mission . Request . GetCompleteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getComplete ( new Gs2Mission . GetCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_complete ( mission . GetCompleteRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_complete ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_complete_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCompleteByUserId 사용자 ID를 지정하여 달성 상황 조회 지정된 사용자의 지정된 미션 그룹의 달성 상황을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Complete 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetCompleteByUserId ( \u0026 mission . GetCompleteByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetCompleteByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getCompleteByUserId ( ( new GetCompleteByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetCompleteByUserIdRequest ; import io.gs2.mission.result.GetCompleteByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetCompleteByUserIdResult result = client . getCompleteByUserId ( new GetCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetCompleteByUserIdResult \u003e asyncResult = null ; yield return client . GetCompleteByUserId ( new Gs2 . Gs2Mission . Request . GetCompleteByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getCompleteByUserId ( new Gs2Mission . GetCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_complete_by_user_id ( mission . GetCompleteByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_complete_by_user_id ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_complete_by_user_id_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; evaluateComplete 달성 상황 재평가 지정된 미션 그룹 내 모든 카운터 값을 미션 태스크 조건과 대조하여 재평가합니다. 카운터가 이미 가산된 후에 미션 태스크가 추가·변경된 경우, 새롭게 달성된 태스크를 판정하기 위해 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. Result 타입 설명 item Complete 재평가 후의 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . EvaluateComplete ( \u0026 mission . EvaluateCompleteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\EvaluateCompleteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e evaluateComplete ( ( new EvaluateCompleteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.EvaluateCompleteRequest ; import io.gs2.mission.result.EvaluateCompleteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { EvaluateCompleteResult result = client . evaluateComplete ( new EvaluateCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . EvaluateCompleteResult \u003e asyncResult = null ; yield return client . EvaluateComplete ( new Gs2 . Gs2Mission . Request . EvaluateCompleteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . evaluateComplete ( new Gs2Mission . EvaluateCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . evaluate_complete ( mission . EvaluateCompleteRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_mission_group_name ( 'mission-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.evaluate_complete ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , missionGroupName = \"mission-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.evaluate_complete_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , missionGroupName = \"mission-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; evaluateCompleteByUserId 사용자 ID를 지정하여 달성 상황 재평가 지정된 미션 그룹 내 모든 카운터 값을 미션 태스크 조건과 대조하여 재평가합니다. 카운터가 이미 가산된 후에 미션 태스크가 추가·변경된 경우에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Complete 재평가 후의 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . EvaluateCompleteByUserId ( \u0026 mission . EvaluateCompleteByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\EvaluateCompleteByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e evaluateCompleteByUserId ( ( new EvaluateCompleteByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.EvaluateCompleteByUserIdRequest ; import io.gs2.mission.result.EvaluateCompleteByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { EvaluateCompleteByUserIdResult result = client . evaluateCompleteByUserId ( new EvaluateCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withTimeOffsetToken ( null ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . EvaluateCompleteByUserIdResult \u003e asyncResult = null ; yield return client . EvaluateCompleteByUserId ( new Gs2 . Gs2Mission . Request . EvaluateCompleteByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . evaluateCompleteByUserId ( new Gs2Mission . EvaluateCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . evaluate_complete_by_user_id ( mission . EvaluateCompleteByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.evaluate_complete_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , missionGroupName = \"mission-group-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.evaluate_complete_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , missionGroupName = \"mission-group-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCompleteByUserId 달성 상황 삭제 지정된 미션 그룹과 사용자의 모든 달성 상황 레코드를 삭제합니다. 달성 완료와 수령 완료 상태가 모두 삭제되며, 해당 미션 그룹에 대한 사용자 진행도가 리셋됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Complete 삭제한 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DeleteCompleteByUserId ( \u0026 mission . DeleteCompleteByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DeleteCompleteByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e deleteCompleteByUserId ( ( new DeleteCompleteByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DeleteCompleteByUserIdRequest ; import io.gs2.mission.result.DeleteCompleteByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DeleteCompleteByUserIdResult result = client . deleteCompleteByUserId ( new DeleteCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withTimeOffsetToken ( null ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DeleteCompleteByUserIdResult \u003e asyncResult = null ; yield return client . DeleteCompleteByUserId ( new Gs2 . Gs2Mission . Request . DeleteCompleteByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . deleteCompleteByUserId ( new Gs2Mission . DeleteCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . delete_complete_by_user_id ( mission . DeleteCompleteByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.delete_complete_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , missionGroupName = \"mission-group-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.delete_complete_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , missionGroupName = \"mission-group-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyComplete 미션 달성 상황 검증 미션 태스크의 달성 상황 또는 수령 상황을 검증합니다. 지원되는 검증 타입: ‘completed’(달성 완료), ’notCompleted’(미달성), ‘received’(수령 완료), ’notReceived’(미수령), ‘completedAndNotReceived’(달성 완료이면서 미수령). 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. accessToken string  ~ 128자 액세스 토큰 verifyType 문자열 열거형 enum {   “completed”,   “notCompleted”,   “received”,   “notReceived”,   “completedAndNotReceived” }  검증 종류 정의 설명 completed 조건이 달성 완료 상태임 notCompleted 조건이 미달성 상태임 received 보상이 수령 완료 상태임 notReceived 보상이 미수령 상태임 completedAndNotReceived 조건이 달성 완료 상태이고 보상이 미수령 상태임 missionTaskName string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Complete 삭제한 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . VerifyComplete ( \u0026 mission . VerifyCompleteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), VerifyType : pointy . String ( \"completed\" ), MissionTaskName : pointy . String ( \"task-0001\" ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\VerifyCompleteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e verifyComplete ( ( new VerifyCompleteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withVerifyType ( \"completed\" ) -\u003e withMissionTaskName ( \"task-0001\" ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.VerifyCompleteRequest ; import io.gs2.mission.result.VerifyCompleteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { VerifyCompleteResult result = client . verifyComplete ( new VerifyCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVerifyType ( \"completed\" ) . withMissionTaskName ( \"task-0001\" ) . withMultiplyValueSpecifyingQuantity ( null ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . VerifyCompleteResult \u003e asyncResult = null ; yield return client . VerifyComplete ( new Gs2 . Gs2Mission . Request . VerifyCompleteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithVerifyType ( \"completed\" ) . WithMissionTaskName ( \"task-0001\" ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . verifyComplete ( new Gs2Mission . VerifyCompleteRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVerifyType ( \"completed\" ) . withMissionTaskName ( \"task-0001\" ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . verify_complete ( mission . VerifyCompleteRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_access_token ( 'accessToken-0001' ) . with_verify_type ( 'completed' ) . with_mission_task_name ( 'task-0001' ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.verify_complete ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , accessToken = \"accessToken-0001\" , verifyType = \"completed\" , missionTaskName = \"task-0001\" , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.verify_complete_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , accessToken = \"accessToken-0001\" , verifyType = \"completed\" , missionTaskName = \"task-0001\" , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyCompleteByUserId 사용자 ID를 지정하여 미션 달성 상황 검증 지정된 사용자의 미션 태스크의 달성 상황 또는 수령 상황을 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. userId string  ~ 128자 사용자ID verifyType 문자열 열거형 enum {   “completed”,   “notCompleted”,   “received”,   “notReceived”,   “completedAndNotReceived” }  검증 종류 정의 설명 completed 조건이 달성 완료 상태임 notCompleted 조건이 미달성 상태임 received 보상이 수령 완료 상태임 notReceived 보상이 미수령 상태임 completedAndNotReceived 조건이 달성 완료 상태이고 보상이 미수령 상태임 missionTaskName string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Complete 삭제한 달성 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . VerifyCompleteByUserId ( \u0026 mission . VerifyCompleteByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), UserId : pointy . String ( \"user-0001\" ), VerifyType : pointy . String ( \"completed\" ), MissionTaskName : pointy . String ( \"task-0001\" ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\VerifyCompleteByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e verifyCompleteByUserId ( ( new VerifyCompleteByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withVerifyType ( \"completed\" ) -\u003e withMissionTaskName ( \"task-0001\" ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.VerifyCompleteByUserIdRequest ; import io.gs2.mission.result.VerifyCompleteByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { VerifyCompleteByUserIdResult result = client . verifyCompleteByUserId ( new VerifyCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withUserId ( \"user-0001\" ) . withVerifyType ( \"completed\" ) . withMissionTaskName ( \"task-0001\" ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Complete item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . VerifyCompleteByUserIdResult \u003e asyncResult = null ; yield return client . VerifyCompleteByUserId ( new Gs2 . Gs2Mission . Request . VerifyCompleteByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithUserId ( \"user-0001\" ) . WithVerifyType ( \"completed\" ) . WithMissionTaskName ( \"task-0001\" ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . verifyCompleteByUserId ( new Gs2Mission . VerifyCompleteByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withUserId ( \"user-0001\" ) . withVerifyType ( \"completed\" ) . withMissionTaskName ( \"task-0001\" ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . verify_complete_by_user_id ( mission . VerifyCompleteByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_user_id ( 'user-0001' ) . with_verify_type ( 'completed' ) . with_mission_task_name ( 'task-0001' ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.verify_complete_by_user_id ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , userId = \"user-0001\" , verifyType = \"completed\" , missionTaskName = \"task-0001\" , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.verify_complete_by_user_id_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , userId = \"user-0001\" , verifyType = \"completed\" , missionTaskName = \"task-0001\" , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCounters 카운터 목록 취득 요청 사용자의 카운터의 페이지네이션 리스트를 취득합니다. 각 카운터는 미션 태스크 조건에 대한 진행 상황을 추적하는 스코프 값을 포함하며, 리셋 기간(일간·주간·월간 등)별로 값이 관리됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 카운터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeCounters ( \u0026 mission . DescribeCountersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeCountersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeCounters ( ( new DescribeCountersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeCountersRequest ; import io.gs2.mission.result.DescribeCountersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeCountersResult result = client . describeCounters ( new DescribeCountersRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Counter \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeCountersResult \u003e asyncResult = null ; yield return client . DescribeCounters ( new Gs2 . Gs2Mission . Request . DescribeCountersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeCounters ( new Gs2Mission . DescribeCountersRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_counters ( mission . DescribeCountersRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_counters ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mission' ) api_result_handler = client.describe_counters_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeCountersByUserId 사용자 ID를 지정하여 카운터 목록 취득 지정된 사용자의 카운터의 페이지네이션 리스트를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 카운터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeCountersByUserId ( \u0026 mission . DescribeCountersByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeCountersByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeCountersByUserId ( ( new DescribeCountersByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeCountersByUserIdRequest ; import io.gs2.mission.result.DescribeCountersByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeCountersByUserIdResult result = client . describeCountersByUserId ( new DescribeCountersByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Counter \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeCountersByUserIdResult \u003e asyncResult = null ; yield return client . DescribeCountersByUserId ( new Gs2 . Gs2Mission . Request . DescribeCountersByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeCountersByUserId ( new Gs2Mission . DescribeCountersByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_counters_by_user_id ( mission . DescribeCountersByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_counters_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mission' ) api_result_handler = client.describe_counters_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; increaseCounterByUserId 사용자 ID를 지정하여 카운터를 가산 지정된 사용자의 카운터에 지정한 값을 가산합니다. 가산 후, 이 카운터를 참조하는 모든 미션 태스크가 자동으로 재평가되며, 새롭게 달성된 미션은 changedCompletes 응답에서 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. userId string  ~ 128자 사용자ID value long  1 ~ 9223372036854775805 가산할 값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 가산된 카운터 changedCompletes List 갱신된 달성 상황 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . IncreaseCounterByUserId ( \u0026 mission . IncreaseCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"quest_complete\" ), UserId : pointy . String ( \"user-0001\" ), Value : pointy . Int64 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item changedCompletes := result . ChangedCompletes use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\IncreaseCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e increaseCounterByUserId ( ( new IncreaseCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"quest_complete\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withValue ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $changedCompletes = $result -\u003e getChangedCompletes (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.IncreaseCounterByUserIdRequest ; import io.gs2.mission.result.IncreaseCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { IncreaseCounterByUserIdResult result = client . increaseCounterByUserId ( new IncreaseCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"quest_complete\" ) . withUserId ( \"user-0001\" ) . withValue ( 1L ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); List Complete \u003e changedCompletes = result . getChangedCompletes (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . IncreaseCounterByUserIdResult \u003e asyncResult = null ; yield return client . IncreaseCounterByUserId ( new Gs2 . Gs2Mission . Request . IncreaseCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"quest_complete\" ) . WithUserId ( \"user-0001\" ) . WithValue ( 1L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var changedCompletes = result . ChangedCompletes ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . increaseCounterByUserId ( new Gs2Mission . IncreaseCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"quest_complete\" ) . withUserId ( \"user-0001\" ) . withValue ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const changedCompletes = result . getChangedCompletes (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . increase_counter_by_user_id ( mission . IncreaseCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'quest_complete' ) . with_user_id ( 'user-0001' ) . with_value ( 1 ) . with_time_offset_token ( None ) ) item = result . item changed_completes = result . changed_completes except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.increase_counter_by_user_id ({ namespaceName = \"namespace-0001\" , counterName = \"quest_complete\" , userId = \"user-0001\" , value = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; changedCompletes = result.changedCompletes ; client = gs2 ( 'mission' ) api_result_handler = client.increase_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , counterName = \"quest_complete\" , userId = \"user-0001\" , value = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; changedCompletes = result.changedCompletes ; setCounterByUserId 사용자 ID를 지정하여 카운터를 설정 지정된 사용자의 카운터의 스코프 값을 직접 설정하여 기존 값을 대체합니다. 변경 전과 변경 후의 카운터 상태, 그리고 새롭게 달성된 미션이 changedCompletes 응답에서 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. userId string  ~ 128자 사용자ID values List 0 ~ 20 items 설정할 값의 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 가산된 카운터 old Counter 카운터 가산 후의 카운터 changedCompletes List 갱신된 달성 상황 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . SetCounterByUserId ( \u0026 mission . SetCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), UserId : pointy . String ( \"user-0001\" ), Values : [] mission . ScopedValue { mission . ScopedValue { ResetType : pointy . String ( \"daily\" ), Value : pointy . Int64 ( 1 ), }, mission . ScopedValue { ResetType : pointy . String ( \"weekly\" ), Value : pointy . Int64 ( 2 ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old changedCompletes := result . ChangedCompletes use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\SetCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e setCounterByUserId ( ( new SetCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withValues ([ ( new ScopedValue ()) -\u003e withResetType ( \"daily\" ) -\u003e withValue ( 1 ), ( new ScopedValue ()) -\u003e withResetType ( \"weekly\" ) -\u003e withValue ( 2 ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $changedCompletes = $result -\u003e getChangedCompletes (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.SetCounterByUserIdRequest ; import io.gs2.mission.result.SetCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { SetCounterByUserIdResult result = client . setCounterByUserId ( new SetCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withUserId ( \"user-0001\" ) . withValues ( Arrays . asList ( new ScopedValue () . withResetType ( \"daily\" ) . withValue ( 1L ), new ScopedValue () . withResetType ( \"weekly\" ) . withValue ( 2L ) )) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); Counter old = result . getOld (); List Complete \u003e changedCompletes = result . getChangedCompletes (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . SetCounterByUserIdResult \u003e asyncResult = null ; yield return client . SetCounterByUserId ( new Gs2 . Gs2Mission . Request . SetCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithUserId ( \"user-0001\" ) . WithValues ( new Gs2 . Gs2Mission . Model . ScopedValue [] { new Gs2 . Gs2Mission . Model . ScopedValue () . WithResetType ( \"daily\" ) . WithValue ( 1L ), new Gs2 . Gs2Mission . Model . ScopedValue () . WithResetType ( \"weekly\" ) . WithValue ( 2L ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var changedCompletes = result . ChangedCompletes ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . setCounterByUserId ( new Gs2Mission . SetCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withUserId ( \"user-0001\" ) . withValues ([ new Gs2Mission . model . ScopedValue () . withResetType ( \"daily\" ) . withValue ( 1 ), new Gs2Mission . model . ScopedValue () . withResetType ( \"weekly\" ) . withValue ( 2 ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); const changedCompletes = result . getChangedCompletes (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . set_counter_by_user_id ( mission . SetCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'counter-0001' ) . with_user_id ( 'user-0001' ) . with_values ([ mission . ScopedValue () . with_reset_type ( 'daily' ) . with_value ( 1 ), mission . ScopedValue () . with_reset_type ( 'weekly' ) . with_value ( 2 ), ]) . with_time_offset_token ( None ) ) item = result . item old = result . old changed_completes = result . changed_completes except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.set_counter_by_user_id ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , userId = \"user-0001\" , values = { { reset_type = \"daily\" , value = 1 , }, { reset_type = \"weekly\" , value = 2 , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; changedCompletes = result.changedCompletes ; client = gs2 ( 'mission' ) api_result_handler = client.set_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , userId = \"user-0001\" , values = { { reset_type = \"daily\" , value = 1 , }, { reset_type = \"weekly\" , value = 2 , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; changedCompletes = result.changedCompletes ; decreaseCounter 카운터 감산 요청 사용자의 카운터에서 지정한 값을 감산합니다. 감산 후, 이 카운터를 참조하는 모든 미션 태스크가 자동으로 재평가되며, 달성 상황이 변경된 미션은 changedCompletes 응답으로 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. accessToken string  ~ 128자 액세스 토큰 value long  1 ~ 9223372036854775805 감산할 값 Result 타입 설명 item Counter 감산된 카운터 changedCompletes List 갱신된 달성 상황 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DecreaseCounter ( \u0026 mission . DecreaseCounterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Value : pointy . Int64 ( 1 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item changedCompletes := result . ChangedCompletes use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DecreaseCounterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e decreaseCounter ( ( new DecreaseCounterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withValue ( 1 ) ); $item = $result -\u003e getItem (); $changedCompletes = $result -\u003e getChangedCompletes (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DecreaseCounterRequest ; import io.gs2.mission.result.DecreaseCounterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DecreaseCounterResult result = client . decreaseCounter ( new DecreaseCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withValue ( 1L ) ); Counter item = result . getItem (); List Complete \u003e changedCompletes = result . getChangedCompletes (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DecreaseCounterResult \u003e asyncResult = null ; yield return client . DecreaseCounter ( new Gs2 . Gs2Mission . Request . DecreaseCounterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithValue ( 1L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var changedCompletes = result . ChangedCompletes ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . decreaseCounter ( new Gs2Mission . DecreaseCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withValue ( 1 ) ); const item = result . getItem (); const changedCompletes = result . getChangedCompletes (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . decrease_counter ( mission . DecreaseCounterRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'counter-0001' ) . with_access_token ( 'accessToken-0001' ) . with_value ( 1 ) ) item = result . item changed_completes = result . changed_completes except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.decrease_counter ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , accessToken = \"accessToken-0001\" , value = 1 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; changedCompletes = result.changedCompletes ; client = gs2 ( 'mission' ) api_result_handler = client.decrease_counter_async ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , accessToken = \"accessToken-0001\" , value = 1 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; changedCompletes = result.changedCompletes ; decreaseCounterByUserId 사용자 ID를 지정하여 카운터 감산 지정된 사용자의 카운터에서 지정한 값을 감산합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. userId string  ~ 128자 사용자ID value long  1 ~ 9223372036854775805 감산할 값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 감산된 카운터 changedCompletes List 갱신된 달성 상황 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DecreaseCounterByUserId ( \u0026 mission . DecreaseCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), UserId : pointy . String ( \"user-0001\" ), Value : pointy . Int64 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item changedCompletes := result . ChangedCompletes use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DecreaseCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e decreaseCounterByUserId ( ( new DecreaseCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withValue ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $changedCompletes = $result -\u003e getChangedCompletes (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DecreaseCounterByUserIdRequest ; import io.gs2.mission.result.DecreaseCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DecreaseCounterByUserIdResult result = client . decreaseCounterByUserId ( new DecreaseCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withUserId ( \"user-0001\" ) . withValue ( 1L ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); List Complete \u003e changedCompletes = result . getChangedCompletes (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DecreaseCounterByUserIdResult \u003e asyncResult = null ; yield return client . DecreaseCounterByUserId ( new Gs2 . Gs2Mission . Request . DecreaseCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithUserId ( \"user-0001\" ) . WithValue ( 1L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var changedCompletes = result . ChangedCompletes ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . decreaseCounterByUserId ( new Gs2Mission . DecreaseCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withUserId ( \"user-0001\" ) . withValue ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const changedCompletes = result . getChangedCompletes (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . decrease_counter_by_user_id ( mission . DecreaseCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'counter-0001' ) . with_user_id ( 'user-0001' ) . with_value ( 1 ) . with_time_offset_token ( None ) ) item = result . item changed_completes = result . changed_completes except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.decrease_counter_by_user_id ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , userId = \"user-0001\" , value = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; changedCompletes = result.changedCompletes ; client = gs2 ( 'mission' ) api_result_handler = client.decrease_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , userId = \"user-0001\" , value = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; changedCompletes = result.changedCompletes ; getCounter 카운터 조회 요청 사용자의 지정된 카운터를 모든 스코프별 값(리셋 기간별)을 포함하여 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Counter 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetCounter ( \u0026 mission . GetCounterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"quest_complete\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetCounterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getCounter ( ( new GetCounterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"quest_complete\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetCounterRequest ; import io.gs2.mission.result.GetCounterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetCounterResult result = client . getCounter ( new GetCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"quest_complete\" ) . withAccessToken ( \"accessToken-0001\" ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetCounterResult \u003e asyncResult = null ; yield return client . GetCounter ( new Gs2 . Gs2Mission . Request . GetCounterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"quest_complete\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getCounter ( new Gs2Mission . GetCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"quest_complete\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_counter ( mission . GetCounterRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'quest_complete' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_counter ({ namespaceName = \"namespace-0001\" , counterName = \"quest_complete\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_counter_async ({ namespaceName = \"namespace-0001\" , counterName = \"quest_complete\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCounterByUserId 사용자 ID를 지정하여 카운터 조회 지정된 사용자의 지정된 카운터를 모든 스코프별 값을 포함하여 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetCounterByUserId ( \u0026 mission . GetCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getCounterByUserId ( ( new GetCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetCounterByUserIdRequest ; import io.gs2.mission.result.GetCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetCounterByUserIdResult result = client . getCounterByUserId ( new GetCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetCounterByUserIdResult \u003e asyncResult = null ; yield return client . GetCounterByUserId ( new Gs2 . Gs2Mission . Request . GetCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getCounterByUserId ( new Gs2Mission . GetCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_counter_by_user_id ( mission . GetCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'counter-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_counter_by_user_id ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyCounterValue 카운터 값 검증 카운터의 스코프별 값이 지정된 조건을 충족하는지 검증합니다. 지원되는 검증 타입: ’less’(미만), ’lessEqual’(이하), ‘greater’(초과), ‘greaterEqual’(이상), ’equal’(일치), ’notEqual’(불일치). 검증은 카운터의 특정 스코프(리셋 타입과 조건)를 대상으로 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 카운터 값이 지정 값 미만임 lessEqual 카운터 값이 지정 값 이하임 greater 카운터 값이 지정 값 초과임 greaterEqual 카운터 값이 지정 값 이상임 equal 카운터 값이 지정 값과 일치함 notEqual 카운터 값이 지정 값과 일치하지 않음 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 이 스코프 값이 리셋 타이밍 스케줄에 기반한 것인지, 검증 액션 조건에 기반한 것인지를 나타냅니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” ※ 리셋 타이밍 이 스코프 값의 리셋 타이밍입니다. 카운터 값이 리셋될 때까지의 누적 기간을 결정합니다. scopeType이 “resetTiming\"인 경우에만 적용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 이 스코프 값이 대응하는 검증 액션 조건의 이름입니다. 이 값이 어느 조건 스코프에 속하는지 식별하는 데 사용됩니다. scopeType이 “verifyAction\"인 경우에만 적용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long 0 0 ~ 9223372036854775805 카운트 이 스코프의 누적 카운터 값입니다. 카운터가 증가하면 늘어나고 감소하면 줄어듭니다. 값은 최댓값으로 상한이 설정되며, 0 미만으로 내려가지 않습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Counter 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . VerifyCounterValue ( \u0026 mission . VerifyCounterValueRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), VerifyType : pointy . String ( \"less\" ), ScopeType : nil , ResetType : pointy . String ( \"daily\" ), ConditionName : nil , Value : pointy . Int64 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\VerifyCounterValueRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e verifyCounterValue ( ( new VerifyCounterValueRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withScopeType ( null ) -\u003e withResetType ( \"daily\" ) -\u003e withConditionName ( null ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.VerifyCounterValueRequest ; import io.gs2.mission.result.VerifyCounterValueResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { VerifyCounterValueResult result = client . verifyCounterValue ( new VerifyCounterValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCounterName ( \"counter-0001\" ) . withVerifyType ( \"less\" ) . withScopeType ( null ) . withResetType ( \"daily\" ) . withConditionName ( null ) . withValue ( 10L ) . withMultiplyValueSpecifyingQuantity ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . VerifyCounterValueResult \u003e asyncResult = null ; yield return client . VerifyCounterValue ( new Gs2 . Gs2Mission . Request . VerifyCounterValueRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithVerifyType ( \"less\" ) . WithScopeType ( null ) . WithResetType ( \"daily\" ) . WithConditionName ( null ) . WithValue ( 10L ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . verifyCounterValue ( new Gs2Mission . VerifyCounterValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCounterName ( \"counter-0001\" ) . withVerifyType ( \"less\" ) . withScopeType ( null ) . withResetType ( \"daily\" ) . withConditionName ( null ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . verify_counter_value ( mission . VerifyCounterValueRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_counter_name ( 'counter-0001' ) . with_verify_type ( 'less' ) . with_scope_type ( None ) . with_reset_type ( 'daily' ) . with_condition_name ( None ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.verify_counter_value ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , counterName = \"counter-0001\" , verifyType = \"less\" , scopeType = nil , resetType = \"daily\" , conditionName = nil , value = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.verify_counter_value_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , counterName = \"counter-0001\" , verifyType = \"less\" , scopeType = nil , resetType = \"daily\" , conditionName = nil , value = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyCounterValueByUserId 사용자 ID를 지정하여 카운터 값 검증 지정된 사용자의 카운터의 스코프별 값이 지정된 조건을 충족하는지 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 카운터 값이 지정 값 미만임 lessEqual 카운터 값이 지정 값 이하임 greater 카운터 값이 지정 값 초과임 greaterEqual 카운터 값이 지정 값 이상임 equal 카운터 값이 지정 값과 일치함 notEqual 카운터 값이 지정 값과 일치하지 않음 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 이 스코프 값이 리셋 타이밍 스케줄에 기반한 것인지, 검증 액션 조건에 기반한 것인지를 나타냅니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” ※ 리셋 타이밍 이 스코프 값의 리셋 타이밍입니다. 카운터 값이 리셋될 때까지의 누적 기간을 결정합니다. scopeType이 “resetTiming\"인 경우에만 적용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 이 스코프 값이 대응하는 검증 액션 조건의 이름입니다. 이 값이 어느 조건 스코프에 속하는지 식별하는 데 사용됩니다. scopeType이 “verifyAction\"인 경우에만 적용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long 0 0 ~ 9223372036854775805 카운트 이 스코프의 누적 카운터 값입니다. 카운터가 증가하면 늘어나고 감소하면 줄어듭니다. 값은 최댓값으로 상한이 설정되며, 0 미만으로 내려가지 않습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . VerifyCounterValueByUserId ( \u0026 mission . VerifyCounterValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), VerifyType : pointy . String ( \"less\" ), ScopeType : nil , ResetType : pointy . String ( \"daily\" ), ConditionName : nil , Value : pointy . Int64 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\VerifyCounterValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e verifyCounterValueByUserId ( ( new VerifyCounterValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withScopeType ( null ) -\u003e withResetType ( \"daily\" ) -\u003e withConditionName ( null ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.VerifyCounterValueByUserIdRequest ; import io.gs2.mission.result.VerifyCounterValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { VerifyCounterValueByUserIdResult result = client . verifyCounterValueByUserId ( new VerifyCounterValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"counter-0001\" ) . withVerifyType ( \"less\" ) . withScopeType ( null ) . withResetType ( \"daily\" ) . withConditionName ( null ) . withValue ( 10L ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . VerifyCounterValueByUserIdResult \u003e asyncResult = null ; yield return client . VerifyCounterValueByUserId ( new Gs2 . Gs2Mission . Request . VerifyCounterValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithVerifyType ( \"less\" ) . WithScopeType ( null ) . WithResetType ( \"daily\" ) . WithConditionName ( null ) . WithValue ( 10L ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . verifyCounterValueByUserId ( new Gs2Mission . VerifyCounterValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"counter-0001\" ) . withVerifyType ( \"less\" ) . withScopeType ( null ) . withResetType ( \"daily\" ) . withConditionName ( null ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . verify_counter_value_by_user_id ( mission . VerifyCounterValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_counter_name ( 'counter-0001' ) . with_verify_type ( 'less' ) . with_scope_type ( None ) . with_reset_type ( 'daily' ) . with_condition_name ( None ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.verify_counter_value_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , counterName = \"counter-0001\" , verifyType = \"less\" , scopeType = nil , resetType = \"daily\" , conditionName = nil , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.verify_counter_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , counterName = \"counter-0001\" , verifyType = \"less\" , scopeType = nil , resetType = \"daily\" , conditionName = nil , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; resetCounter 카운터 리셋 지정된 스코프의 카운터 값을 리셋합니다. 지정된 스코프 타입과 일치하는 스코프별 값만 리셋되며, 다른 스코프별 값은 변경되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. scopes List  1 ~ 20 items 스코프 리스트 Result 타입 설명 item Counter 삭제한 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . ResetCounter ( \u0026 mission . ResetCounterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), Scopes : [] mission . ScopedValue { mission . ScopedValue { ResetType : pointy . String ( \"daily\" ), }, mission . ScopedValue { ResetType : pointy . String ( \"weekly\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\ResetCounterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e resetCounter ( ( new ResetCounterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withScopes ([ ( new ScopedValue ()) -\u003e withResetType ( \"daily\" ), ( new ScopedValue ()) -\u003e withResetType ( \"weekly\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.ResetCounterRequest ; import io.gs2.mission.result.ResetCounterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { ResetCounterResult result = client . resetCounter ( new ResetCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCounterName ( \"counter-0001\" ) . withScopes ( Arrays . asList ( new ScopedValue () . withResetType ( \"daily\" ), new ScopedValue () . withResetType ( \"weekly\" ) )) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . ResetCounterResult \u003e asyncResult = null ; yield return client . ResetCounter ( new Gs2 . Gs2Mission . Request . ResetCounterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithScopes ( new Gs2 . Gs2Mission . Model . ScopedValue [] { new Gs2 . Gs2Mission . Model . ScopedValue () . WithResetType ( \"daily\" ), new Gs2 . Gs2Mission . Model . ScopedValue () . WithResetType ( \"weekly\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . resetCounter ( new Gs2Mission . ResetCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCounterName ( \"counter-0001\" ) . withScopes ([ new Gs2Mission . model . ScopedValue () . withResetType ( \"daily\" ), new Gs2Mission . model . ScopedValue () . withResetType ( \"weekly\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . reset_counter ( mission . ResetCounterRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_counter_name ( 'counter-0001' ) . with_scopes ([ mission . ScopedValue () . with_reset_type ( 'daily' ), mission . ScopedValue () . with_reset_type ( 'weekly' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.reset_counter ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , counterName = \"counter-0001\" , scopes = { { reset_type = \"daily\" , }, { reset_type = \"weekly\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.reset_counter_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , counterName = \"counter-0001\" , scopes = { { reset_type = \"daily\" , }, { reset_type = \"weekly\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; resetCounterByUserId 사용자 ID를 지정하여 카운터 리셋 지정된 사용자의 지정된 스코프의 카운터 값을 리셋합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. scopes List  1 ~ 20 items 스코프 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 삭제한 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . ResetCounterByUserId ( \u0026 mission . ResetCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), Scopes : [] mission . ScopedValue { mission . ScopedValue { ResetType : pointy . String ( \"daily\" ), }, mission . ScopedValue { ResetType : pointy . String ( \"weekly\" ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\ResetCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e resetCounterByUserId ( ( new ResetCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withScopes ([ ( new ScopedValue ()) -\u003e withResetType ( \"daily\" ), ( new ScopedValue ()) -\u003e withResetType ( \"weekly\" ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.ResetCounterByUserIdRequest ; import io.gs2.mission.result.ResetCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { ResetCounterByUserIdResult result = client . resetCounterByUserId ( new ResetCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"counter-0001\" ) . withScopes ( Arrays . asList ( new ScopedValue () . withResetType ( \"daily\" ), new ScopedValue () . withResetType ( \"weekly\" ) )) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . ResetCounterByUserIdResult \u003e asyncResult = null ; yield return client . ResetCounterByUserId ( new Gs2 . Gs2Mission . Request . ResetCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithScopes ( new Gs2 . Gs2Mission . Model . ScopedValue [] { new Gs2 . Gs2Mission . Model . ScopedValue () . WithResetType ( \"daily\" ), new Gs2 . Gs2Mission . Model . ScopedValue () . WithResetType ( \"weekly\" ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . resetCounterByUserId ( new Gs2Mission . ResetCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"counter-0001\" ) . withScopes ([ new Gs2Mission . model . ScopedValue () . withResetType ( \"daily\" ), new Gs2Mission . model . ScopedValue () . withResetType ( \"weekly\" ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . reset_counter_by_user_id ( mission . ResetCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_counter_name ( 'counter-0001' ) . with_scopes ([ mission . ScopedValue () . with_reset_type ( 'daily' ), mission . ScopedValue () . with_reset_type ( 'weekly' ), ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.reset_counter_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , counterName = \"counter-0001\" , scopes = { { reset_type = \"daily\" , }, { reset_type = \"weekly\" , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.reset_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , counterName = \"counter-0001\" , scopes = { { reset_type = \"daily\" , }, { reset_type = \"weekly\" , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCounter 카운터 삭제 요청 사용자의 지정된 카운터와 그에 속한 모든 스코프별 값을 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. Result 타입 설명 item Counter 삭제한 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DeleteCounter ( \u0026 mission . DeleteCounterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DeleteCounterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e deleteCounter ( ( new DeleteCounterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DeleteCounterRequest ; import io.gs2.mission.result.DeleteCounterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DeleteCounterResult result = client . deleteCounter ( new DeleteCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCounterName ( \"counter-0001\" ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DeleteCounterResult \u003e asyncResult = null ; yield return client . DeleteCounter ( new Gs2 . Gs2Mission . Request . DeleteCounterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCounterName ( \"counter-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . deleteCounter ( new Gs2Mission . DeleteCounterRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCounterName ( \"counter-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . delete_counter ( mission . DeleteCounterRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_counter_name ( 'counter-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.delete_counter ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , counterName = \"counter-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.delete_counter_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , counterName = \"counter-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCounterByUserId 사용자 ID를 지정하여 카운터 삭제 지정된 사용자의 지정된 카운터와 그에 속한 모든 스코프별 값을 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Counter 삭제한 카운터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DeleteCounterByUserId ( \u0026 mission . DeleteCounterByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), CounterName : pointy . String ( \"quest_complete\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DeleteCounterByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e deleteCounterByUserId ( ( new DeleteCounterByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCounterName ( \"quest_complete\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DeleteCounterByUserIdRequest ; import io.gs2.mission.result.DeleteCounterByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DeleteCounterByUserIdResult result = client . deleteCounterByUserId ( new DeleteCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"quest_complete\" ) . withTimeOffsetToken ( null ) ); Counter item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DeleteCounterByUserIdResult \u003e asyncResult = null ; yield return client . DeleteCounterByUserId ( new Gs2 . Gs2Mission . Request . DeleteCounterByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCounterName ( \"quest_complete\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . deleteCounterByUserId ( new Gs2Mission . DeleteCounterByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCounterName ( \"quest_complete\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . delete_counter_by_user_id ( mission . DeleteCounterByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_counter_name ( 'quest_complete' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.delete_counter_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , counterName = \"quest_complete\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.delete_counter_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , counterName = \"quest_complete\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCounterModels 카운터 모델 목록 취득 지정된 네임스페이스의 현재 활성화된 카운터 모델의 목록을 취득합니다. 카운터 모델은 카운터가 동작하는 스코프(일간·주간·월간 등의 리셋 타이밍)와 조건을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 카운터 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeCounterModels ( \u0026 mission . DescribeCounterModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeCounterModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeCounterModels ( ( new DescribeCounterModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeCounterModelsRequest ; import io.gs2.mission.result.DescribeCounterModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeCounterModelsResult result = client . describeCounterModels ( new DescribeCounterModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List CounterModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeCounterModelsResult \u003e asyncResult = null ; yield return client . DescribeCounterModels ( new Gs2 . Gs2Mission . Request . DescribeCounterModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeCounterModels ( new Gs2Mission . DescribeCounterModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_counter_models ( mission . DescribeCounterModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_counter_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mission' ) api_result_handler = client.describe_counter_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getCounterModel 카운터 모델을 취득 지정된 카운터 모델의 스코프, 리셋 조건, 챌린지 기간 이벤트 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CounterModel 카운터 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetCounterModel ( \u0026 mission . GetCounterModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetCounterModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getCounterModel ( ( new GetCounterModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetCounterModelRequest ; import io.gs2.mission.result.GetCounterModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetCounterModelResult result = client . getCounterModel ( new GetCounterModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) ); CounterModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetCounterModelResult \u003e asyncResult = null ; yield return client . GetCounterModel ( new Gs2 . Gs2Mission . Request . GetCounterModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"counter-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getCounterModel ( new Gs2Mission . GetCounterModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_counter_model ( mission . GetCounterModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'counter-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_counter_model ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_counter_model_async ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeMissionGroupModels 미션 그룹 모델 목록 취득 지정된 네임스페이스의 현재 활성화된 미션 그룹 모델의 목록을 취득합니다. 미션 그룹 모델은 공통의 리셋 타입(일간·주간·월간·없음)을 가진 미션 태스크의 그룹을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 미션 그룹 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeMissionGroupModels ( \u0026 mission . DescribeMissionGroupModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeMissionGroupModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeMissionGroupModels ( ( new DescribeMissionGroupModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeMissionGroupModelsRequest ; import io.gs2.mission.result.DescribeMissionGroupModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeMissionGroupModelsResult result = client . describeMissionGroupModels ( new DescribeMissionGroupModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List MissionGroupModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeMissionGroupModelsResult \u003e asyncResult = null ; yield return client . DescribeMissionGroupModels ( new Gs2 . Gs2Mission . Request . DescribeMissionGroupModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeMissionGroupModels ( new Gs2Mission . DescribeMissionGroupModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_mission_group_models ( mission . DescribeMissionGroupModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_mission_group_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mission' ) api_result_handler = client.describe_mission_group_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getMissionGroupModel 미션 그룹 모델을 취득 지정된 미션 그룹 모델의 리셋 타입, 리셋 타이밍 설정, 및 포함된 미션 태스크의 리스트를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item MissionGroupModel 미션 그룹 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetMissionGroupModel ( \u0026 mission . GetMissionGroupModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetMissionGroupModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getMissionGroupModel ( ( new GetMissionGroupModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetMissionGroupModelRequest ; import io.gs2.mission.result.GetMissionGroupModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetMissionGroupModelResult result = client . getMissionGroupModel ( new GetMissionGroupModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); MissionGroupModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetMissionGroupModelResult \u003e asyncResult = null ; yield return client . GetMissionGroupModel ( new Gs2 . Gs2Mission . Request . GetMissionGroupModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getMissionGroupModel ( new Gs2Mission . GetMissionGroupModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_mission_group_model ( mission . GetMissionGroupModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_mission_group_model ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_mission_group_model_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeMissionTaskModels 미션 태스크 모델 목록 취득 지정된 미션 그룹 내의 현재 활성화된 미션 태스크 모델의 목록을 취득합니다. 미션 태스크 모델은 대상 카운터 조건, 달성 검증 타입, 보상 액션을 가진 개별 태스크를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 미션 태스크 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeMissionTaskModels ( \u0026 mission . DescribeMissionTaskModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeMissionTaskModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeMissionTaskModels ( ( new DescribeMissionTaskModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeMissionTaskModelsRequest ; import io.gs2.mission.result.DescribeMissionTaskModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeMissionTaskModelsResult result = client . describeMissionTaskModels ( new DescribeMissionTaskModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); List MissionTaskModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeMissionTaskModelsResult \u003e asyncResult = null ; yield return client . DescribeMissionTaskModels ( new Gs2 . Gs2Mission . Request . DescribeMissionTaskModelsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeMissionTaskModels ( new Gs2Mission . DescribeMissionTaskModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_mission_task_models ( mission . DescribeMissionTaskModelsRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_mission_task_models ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'mission' ) api_result_handler = client.describe_mission_task_models_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getMissionTaskModel 미션 태스크 모델을 취득 지정된 미션 태스크 모델의 대상 카운터, 달성 검증 타입, 보상 입수 액션, 전제 미션 태스크 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionTaskName string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item MissionTaskModel 미션 태스크 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetMissionTaskModel ( \u0026 mission . GetMissionTaskModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), MissionTaskName : pointy . String ( \"mission-task-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetMissionTaskModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getMissionTaskModel ( ( new GetMissionTaskModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMissionTaskName ( \"mission-task-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetMissionTaskModelRequest ; import io.gs2.mission.result.GetMissionTaskModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetMissionTaskModelResult result = client . getMissionTaskModel ( new GetMissionTaskModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) ); MissionTaskModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetMissionTaskModelResult \u003e asyncResult = null ; yield return client . GetMissionTaskModel ( new Gs2 . Gs2Mission . Request . GetMissionTaskModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMissionTaskName ( \"mission-task-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getMissionTaskModel ( new Gs2Mission . GetMissionTaskModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_mission_task_model ( mission . GetMissionTaskModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_mission_task_name ( 'mission-task-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_mission_task_model ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_mission_task_model_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 미션 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 활성화된 미션 그룹 모델, 미션 태스크 모델, 카운터 모델을 활성화 가능한 형식으로 내보냅니다. 내보낸 데이터는 다른 네임스페이스의 마스터 데이터 갱신이나 백업으로 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentMissionMaster 활성화 가능한 미션 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 mission . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.ExportMasterRequest ; import io.gs2.mission.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentMissionMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Mission . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Mission . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . export_master ( mission . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentMissionMaster 현재 활성화된 미션 모델의 마스터 데이터를 취득 지정된 네임스페이스의 현재 활성화된 미션 모델의 마스터 데이터(미션 그룹 모델, 미션 태스크 모델, 카운터 모델을 포함)를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentMissionMaster 현재 활성화된 미션 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetCurrentMissionMaster ( \u0026 mission . GetCurrentMissionMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetCurrentMissionMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getCurrentMissionMaster ( ( new GetCurrentMissionMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetCurrentMissionMasterRequest ; import io.gs2.mission.result.GetCurrentMissionMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetCurrentMissionMasterResult result = client . getCurrentMissionMaster ( new GetCurrentMissionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentMissionMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetCurrentMissionMasterResult \u003e asyncResult = null ; yield return client . GetCurrentMissionMaster ( new Gs2 . Gs2Mission . Request . GetCurrentMissionMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getCurrentMissionMaster ( new Gs2Mission . GetCurrentMissionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_current_mission_master ( mission . GetCurrentMissionMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_current_mission_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_current_mission_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentMissionMaster 현재 활성화된 미션 모델의 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentMissionMaster 에 업로드로 취득한 토큰을 전달하여 실행함으로써 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentMissionMaster ( \u0026 mission . PreUpdateCurrentMissionMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\PreUpdateCurrentMissionMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentMissionMaster ( ( new PreUpdateCurrentMissionMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.PreUpdateCurrentMissionMasterRequest ; import io.gs2.mission.result.PreUpdateCurrentMissionMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { PreUpdateCurrentMissionMasterResult result = client . preUpdateCurrentMissionMaster ( new PreUpdateCurrentMissionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . PreUpdateCurrentMissionMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentMissionMaster ( new Gs2 . Gs2Mission . Request . PreUpdateCurrentMissionMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . preUpdateCurrentMissionMaster ( new Gs2Mission . PreUpdateCurrentMissionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . pre_update_current_mission_master ( mission . PreUpdateCurrentMissionMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.pre_update_current_mission_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'mission' ) api_result_handler = client.pre_update_current_mission_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentMissionMaster 현재 활성화된 미션 모델의 마스터 데이터를 갱신 현재 활성화된 미션 모델의 마스터 데이터를 갱신합니다. 2가지 모드를 지원합니다: 인라인 설정용 ‘direct’ 모드와, 3단계 갱신 프로세스에서 사전에 업로드한 설정을 적용하는 ‘preUpload’ 모드입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentMissionMaster 갱신된 현재 활성화된 미션 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentMissionMaster ( \u0026 mission . UpdateCurrentMissionMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-05-28\\\",\\n \\\"groups\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"metadata\\\": \\\"DAILY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_x10\\\",\\n \\\"metadata\\\": \\\"QUEST_X10\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"targetValue\\\": 10,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest_x20\\\",\\n \\\"metadata\\\": \\\"QUEST_X20\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_x10\\\",\\n \\\"targetValue\\\": 20,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"counterName\\\": \\\"lot_gacha\\\",\\n \\\"targetValue\\\": 1,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 30}\\\"\\n }\\n ]\\n }\\n ],\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 10\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"metadata\\\": \\\"WEEKLY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_x100\\\",\\n \\\"metadata\\\": \\\"QUEST_X100\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"targetValue\\\": 100,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 40}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest_x1000\\\",\\n \\\"metadata\\\": \\\"QUEST_X1000\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_x100\\\",\\n \\\"targetValue\\\": 1000,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 50}\\\"\\n }\\n ]\\n }\\n ],\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"monday\\\",\\n \\\"resetHour\\\": 10\\n },\\n {\\n \\\"name\\\": \\\"story\\\",\\n \\\"metadata\\\": \\\"STORY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_1-1\\\",\\n \\\"metadata\\\": \\\"QUEST_1-1\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-2\\\",\\n \\\"metadata\\\": \\\"QUEST_1-2\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-1\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-3\\\",\\n \\\"metadata\\\": \\\"QUEST_1-3\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-2\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-4\\\",\\n \\\"metadata\\\": \\\"QUEST_1-4\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-3\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_2-1\\\",\\n \\\"metadata\\\": \\\"QUEST_2-1\\\",\\n \\\"counterName\\\": \\\"quest2\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-4\\\",\\n \\\"targetValue\\\": 1\\n }\\n ],\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ],\\n \\\"counters\\\": [\\n {\\n \\\"name\\\": \\\"quest_complete\\\",\\n \\\"metadata\\\": \\\"QUEST_COMPLETE\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 5\\n },\\n {\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"monday\\\",\\n \\\"resetHour\\\": 5\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"lot_gacha\\\",\\n \\\"metadata\\\": \\\"LOT_GACHA\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 5\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest1\\\",\\n \\\"metadata\\\": \\\"QUEST1\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest2\\\",\\n \\\"metadata\\\": \\\"QUEST2\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ]\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\UpdateCurrentMissionMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e updateCurrentMissionMaster ( ( new UpdateCurrentMissionMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-05-28 \\\" , \\n \\\" groups \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" metadata \\\" : \\\" DAILY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_x10 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X10 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" targetValue \\\" : 10, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest_x20 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X20 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_x10 \\\" , \\n \\\" targetValue \\\" : 20, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" counterName \\\" : \\\" lot_gacha \\\" , \\n \\\" targetValue \\\" : 1, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 30} \\\"\\n } \\n ] \\n } \\n ], \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 10 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" metadata \\\" : \\\" WEEKLY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_x100 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X100 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" targetValue \\\" : 100, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 40} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest_x1000 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X1000 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_x100 \\\" , \\n \\\" targetValue \\\" : 1000, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 50} \\\"\\n } \\n ] \\n } \\n ], \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" monday \\\" , \\n \\\" resetHour \\\" : 10 \\n }, \\n { \\n \\\" name \\\" : \\\" story \\\" , \\n \\\" metadata \\\" : \\\" STORY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_1-1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-1 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-2 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-2 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-1 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-3 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-3 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-2 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-4 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-4 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-3 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_2-1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_2-1 \\\" , \\n \\\" counterName \\\" : \\\" quest2 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-4 \\\" , \\n \\\" targetValue \\\" : 1 \\n } \\n ], \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ], \\n \\\" counters \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_complete \\\" , \\n \\\" metadata \\\" : \\\" QUEST_COMPLETE \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 5 \\n }, \\n { \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" monday \\\" , \\n \\\" resetHour \\\" : 5 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" lot_gacha \\\" , \\n \\\" metadata \\\" : \\\" LOT_GACHA \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 5 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST1 \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest2 \\\" , \\n \\\" metadata \\\" : \\\" QUEST2 \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ] \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.UpdateCurrentMissionMasterRequest ; import io.gs2.mission.result.UpdateCurrentMissionMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { UpdateCurrentMissionMasterResult result = client . updateCurrentMissionMaster ( new UpdateCurrentMissionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-05-28\\\",\\n \\\"groups\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"metadata\\\": \\\"DAILY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_x10\\\",\\n \\\"metadata\\\": \\\"QUEST_X10\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"targetValue\\\": 10,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest_x20\\\",\\n \\\"metadata\\\": \\\"QUEST_X20\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_x10\\\",\\n \\\"targetValue\\\": 20,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"counterName\\\": \\\"lot_gacha\\\",\\n \\\"targetValue\\\": 1,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 30}\\\"\\n }\\n ]\\n }\\n ],\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 10\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"metadata\\\": \\\"WEEKLY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_x100\\\",\\n \\\"metadata\\\": \\\"QUEST_X100\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"targetValue\\\": 100,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 40}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest_x1000\\\",\\n \\\"metadata\\\": \\\"QUEST_X1000\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_x100\\\",\\n \\\"targetValue\\\": 1000,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 50}\\\"\\n }\\n ]\\n }\\n ],\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"monday\\\",\\n \\\"resetHour\\\": 10\\n },\\n {\\n \\\"name\\\": \\\"story\\\",\\n \\\"metadata\\\": \\\"STORY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_1-1\\\",\\n \\\"metadata\\\": \\\"QUEST_1-1\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-2\\\",\\n \\\"metadata\\\": \\\"QUEST_1-2\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-1\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-3\\\",\\n \\\"metadata\\\": \\\"QUEST_1-3\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-2\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-4\\\",\\n \\\"metadata\\\": \\\"QUEST_1-4\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-3\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_2-1\\\",\\n \\\"metadata\\\": \\\"QUEST_2-1\\\",\\n \\\"counterName\\\": \\\"quest2\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-4\\\",\\n \\\"targetValue\\\": 1\\n }\\n ],\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ],\\n \\\"counters\\\": [\\n {\\n \\\"name\\\": \\\"quest_complete\\\",\\n \\\"metadata\\\": \\\"QUEST_COMPLETE\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 5\\n },\\n {\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"monday\\\",\\n \\\"resetHour\\\": 5\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"lot_gacha\\\",\\n \\\"metadata\\\": \\\"LOT_GACHA\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 5\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest1\\\",\\n \\\"metadata\\\": \\\"QUEST1\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest2\\\",\\n \\\"metadata\\\": \\\"QUEST2\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ]\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentMissionMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . UpdateCurrentMissionMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentMissionMaster ( new Gs2 . Gs2Mission . Request . UpdateCurrentMissionMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-05-28\\\",\\n \\\"groups\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"metadata\\\": \\\"DAILY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_x10\\\",\\n \\\"metadata\\\": \\\"QUEST_X10\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"targetValue\\\": 10,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest_x20\\\",\\n \\\"metadata\\\": \\\"QUEST_X20\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_x10\\\",\\n \\\"targetValue\\\": 20,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"counterName\\\": \\\"lot_gacha\\\",\\n \\\"targetValue\\\": 1,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 30}\\\"\\n }\\n ]\\n }\\n ],\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 10\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"metadata\\\": \\\"WEEKLY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_x100\\\",\\n \\\"metadata\\\": \\\"QUEST_X100\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"targetValue\\\": 100,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 40}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest_x1000\\\",\\n \\\"metadata\\\": \\\"QUEST_X1000\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_x100\\\",\\n \\\"targetValue\\\": 1000,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 50}\\\"\\n }\\n ]\\n }\\n ],\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"monday\\\",\\n \\\"resetHour\\\": 10\\n },\\n {\\n \\\"name\\\": \\\"story\\\",\\n \\\"metadata\\\": \\\"STORY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_1-1\\\",\\n \\\"metadata\\\": \\\"QUEST_1-1\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-2\\\",\\n \\\"metadata\\\": \\\"QUEST_1-2\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-1\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-3\\\",\\n \\\"metadata\\\": \\\"QUEST_1-3\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-2\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-4\\\",\\n \\\"metadata\\\": \\\"QUEST_1-4\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-3\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_2-1\\\",\\n \\\"metadata\\\": \\\"QUEST_2-1\\\",\\n \\\"counterName\\\": \\\"quest2\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-4\\\",\\n \\\"targetValue\\\": 1\\n }\\n ],\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ],\\n \\\"counters\\\": [\\n {\\n \\\"name\\\": \\\"quest_complete\\\",\\n \\\"metadata\\\": \\\"QUEST_COMPLETE\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 5\\n },\\n {\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"monday\\\",\\n \\\"resetHour\\\": 5\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"lot_gacha\\\",\\n \\\"metadata\\\": \\\"LOT_GACHA\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 5\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest1\\\",\\n \\\"metadata\\\": \\\"QUEST1\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest2\\\",\\n \\\"metadata\\\": \\\"QUEST2\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ]\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . updateCurrentMissionMaster ( new Gs2Mission . UpdateCurrentMissionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-05-28\\\",\\n \\\"groups\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"metadata\\\": \\\"DAILY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_x10\\\",\\n \\\"metadata\\\": \\\"QUEST_X10\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"targetValue\\\": 10,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest_x20\\\",\\n \\\"metadata\\\": \\\"QUEST_X20\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_x10\\\",\\n \\\"targetValue\\\": 20,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"counterName\\\": \\\"lot_gacha\\\",\\n \\\"targetValue\\\": 1,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 30}\\\"\\n }\\n ]\\n }\\n ],\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 10\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"metadata\\\": \\\"WEEKLY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_x100\\\",\\n \\\"metadata\\\": \\\"QUEST_X100\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"targetValue\\\": 100,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 40}\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest_x1000\\\",\\n \\\"metadata\\\": \\\"QUEST_X1000\\\",\\n \\\"counterName\\\": \\\"quest_complete\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_x100\\\",\\n \\\"targetValue\\\": 1000,\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"experienceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceModelName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 50}\\\"\\n }\\n ]\\n }\\n ],\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"monday\\\",\\n \\\"resetHour\\\": 10\\n },\\n {\\n \\\"name\\\": \\\"story\\\",\\n \\\"metadata\\\": \\\"STORY\\\",\\n \\\"tasks\\\": [\\n {\\n \\\"name\\\": \\\"quest_1-1\\\",\\n \\\"metadata\\\": \\\"QUEST_1-1\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-2\\\",\\n \\\"metadata\\\": \\\"QUEST_1-2\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-1\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-3\\\",\\n \\\"metadata\\\": \\\"QUEST_1-3\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-2\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_1-4\\\",\\n \\\"metadata\\\": \\\"QUEST_1-4\\\",\\n \\\"counterName\\\": \\\"quest1\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-3\\\",\\n \\\"targetValue\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"quest_2-1\\\",\\n \\\"metadata\\\": \\\"QUEST_2-1\\\",\\n \\\"counterName\\\": \\\"quest2\\\",\\n \\\"premiseMissionTaskName\\\": \\\"quest_1-4\\\",\\n \\\"targetValue\\\": 1\\n }\\n ],\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ],\\n \\\"counters\\\": [\\n {\\n \\\"name\\\": \\\"quest_complete\\\",\\n \\\"metadata\\\": \\\"QUEST_COMPLETE\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 5\\n },\\n {\\n \\\"resetType\\\": \\\"weekly\\\",\\n \\\"resetDayOfWeek\\\": \\\"monday\\\",\\n \\\"resetHour\\\": 5\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"lot_gacha\\\",\\n \\\"metadata\\\": \\\"LOT_GACHA\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"daily\\\",\\n \\\"resetHour\\\": 5\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest1\\\",\\n \\\"metadata\\\": \\\"QUEST1\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"quest2\\\",\\n \\\"metadata\\\": \\\"QUEST2\\\",\\n \\\"scopes\\\": [\\n {\\n \\\"resetType\\\": \\\"notReset\\\"\\n }\\n ]\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . update_current_mission_master ( mission . UpdateCurrentMissionMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-05-28\", \\n \"groups\": [ \\n { \\n \"name\": \"daily\", \\n \"metadata\": \"DAILY\", \\n \"tasks\": [ \\n { \\n \"name\": \"quest_x10\", \\n \"metadata\": \"QUEST_X10\", \\n \"counterName\": \"quest_complete\", \\n \"targetValue\": 10, \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"experienceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceModelName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 10}\" \\n } \\n ] \\n }, \\n { \\n \"name\": \"quest_x20\", \\n \"metadata\": \"QUEST_X20\", \\n \"counterName\": \"quest_complete\", \\n \"premiseMissionTaskName\": \"quest_x10\", \\n \"targetValue\": 20, \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"experienceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceModelName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 20}\" \\n } \\n ] \\n }, \\n { \\n \"name\": \"gacha\", \\n \"metadata\": \"GACHA\", \\n \"counterName\": \"lot_gacha\", \\n \"targetValue\": 1, \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"experienceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceModelName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 30}\" \\n } \\n ] \\n } \\n ], \\n \"resetType\": \"daily\", \\n \"resetHour\": 10 \\n }, \\n { \\n \"name\": \"weekly\", \\n \"metadata\": \"WEEKLY\", \\n \"tasks\": [ \\n { \\n \"name\": \"quest_x100\", \\n \"metadata\": \"QUEST_X100\", \\n \"counterName\": \"quest_complete\", \\n \"targetValue\": 100, \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"experienceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceModelName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 40}\" \\n } \\n ] \\n }, \\n { \\n \"name\": \"quest_x1000\", \\n \"metadata\": \"QUEST_X1000\", \\n \"counterName\": \"quest_complete\", \\n \"premiseMissionTaskName\": \"quest_x100\", \\n \"targetValue\": 1000, \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"experienceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceModelName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 50}\" \\n } \\n ] \\n } \\n ], \\n \"resetType\": \"weekly\", \\n \"resetDayOfWeek\": \"monday\", \\n \"resetHour\": 10 \\n }, \\n { \\n \"name\": \"story\", \\n \"metadata\": \"STORY\", \\n \"tasks\": [ \\n { \\n \"name\": \"quest_1-1\", \\n \"metadata\": \"QUEST_1-1\", \\n \"counterName\": \"quest1\", \\n \"targetValue\": 1 \\n }, \\n { \\n \"name\": \"quest_1-2\", \\n \"metadata\": \"QUEST_1-2\", \\n \"counterName\": \"quest1\", \\n \"premiseMissionTaskName\": \"quest_1-1\", \\n \"targetValue\": 1 \\n }, \\n { \\n \"name\": \"quest_1-3\", \\n \"metadata\": \"QUEST_1-3\", \\n \"counterName\": \"quest1\", \\n \"premiseMissionTaskName\": \"quest_1-2\", \\n \"targetValue\": 1 \\n }, \\n { \\n \"name\": \"quest_1-4\", \\n \"metadata\": \"QUEST_1-4\", \\n \"counterName\": \"quest1\", \\n \"premiseMissionTaskName\": \"quest_1-3\", \\n \"targetValue\": 1 \\n }, \\n { \\n \"name\": \"quest_2-1\", \\n \"metadata\": \"QUEST_2-1\", \\n \"counterName\": \"quest2\", \\n \"premiseMissionTaskName\": \"quest_1-4\", \\n \"targetValue\": 1 \\n } \\n ], \\n \"resetType\": \"notReset\" \\n } \\n ], \\n \"counters\": [ \\n { \\n \"name\": \"quest_complete\", \\n \"metadata\": \"QUEST_COMPLETE\", \\n \"scopes\": [ \\n { \\n \"resetType\": \"daily\", \\n \"resetHour\": 5 \\n }, \\n { \\n \"resetType\": \"weekly\", \\n \"resetDayOfWeek\": \"monday\", \\n \"resetHour\": 5 \\n } \\n ] \\n }, \\n { \\n \"name\": \"lot_gacha\", \\n \"metadata\": \"LOT_GACHA\", \\n \"scopes\": [ \\n { \\n \"resetType\": \"daily\", \\n \"resetHour\": 5 \\n } \\n ] \\n }, \\n { \\n \"name\": \"quest1\", \\n \"metadata\": \"QUEST1\", \\n \"scopes\": [ \\n { \\n \"resetType\": \"notReset\" \\n } \\n ] \\n }, \\n { \\n \"name\": \"quest2\", \\n \"metadata\": \"QUEST2\", \\n \"scopes\": [ \\n { \\n \"resetType\": \"notReset\" \\n } \\n ] \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.update_current_mission_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-05-28 \\\" , \\n \\\" groups \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" metadata \\\" : \\\" DAILY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_x10 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X10 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" targetValue \\\" : 10, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest_x20 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X20 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_x10 \\\" , \\n \\\" targetValue \\\" : 20, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" counterName \\\" : \\\" lot_gacha \\\" , \\n \\\" targetValue \\\" : 1, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 30} \\\"\\n } \\n ] \\n } \\n ], \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 10 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" metadata \\\" : \\\" WEEKLY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_x100 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X100 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" targetValue \\\" : 100, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 40} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest_x1000 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X1000 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_x100 \\\" , \\n \\\" targetValue \\\" : 1000, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 50} \\\"\\n } \\n ] \\n } \\n ], \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" monday \\\" , \\n \\\" resetHour \\\" : 10 \\n }, \\n { \\n \\\" name \\\" : \\\" story \\\" , \\n \\\" metadata \\\" : \\\" STORY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_1-1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-1 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-2 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-2 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-1 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-3 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-3 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-2 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-4 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-4 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-3 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_2-1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_2-1 \\\" , \\n \\\" counterName \\\" : \\\" quest2 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-4 \\\" , \\n \\\" targetValue \\\" : 1 \\n } \\n ], \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ], \\n \\\" counters \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_complete \\\" , \\n \\\" metadata \\\" : \\\" QUEST_COMPLETE \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 5 \\n }, \\n { \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" monday \\\" , \\n \\\" resetHour \\\" : 5 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" lot_gacha \\\" , \\n \\\" metadata \\\" : \\\" LOT_GACHA \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 5 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST1 \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest2 \\\" , \\n \\\" metadata \\\" : \\\" QUEST2 \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.update_current_mission_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-05-28 \\\" , \\n \\\" groups \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" metadata \\\" : \\\" DAILY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_x10 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X10 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" targetValue \\\" : 10, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest_x20 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X20 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_x10 \\\" , \\n \\\" targetValue \\\" : 20, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" counterName \\\" : \\\" lot_gacha \\\" , \\n \\\" targetValue \\\" : 1, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 30} \\\"\\n } \\n ] \\n } \\n ], \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 10 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" metadata \\\" : \\\" WEEKLY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_x100 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X100 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" targetValue \\\" : 100, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 40} \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest_x1000 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_X1000 \\\" , \\n \\\" counterName \\\" : \\\" quest_complete \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_x100 \\\" , \\n \\\" targetValue \\\" : 1000, \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" experienceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceModelName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 50} \\\"\\n } \\n ] \\n } \\n ], \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" monday \\\" , \\n \\\" resetHour \\\" : 10 \\n }, \\n { \\n \\\" name \\\" : \\\" story \\\" , \\n \\\" metadata \\\" : \\\" STORY \\\" , \\n \\\" tasks \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_1-1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-1 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-2 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-2 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-1 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-3 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-3 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-2 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_1-4 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_1-4 \\\" , \\n \\\" counterName \\\" : \\\" quest1 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-3 \\\" , \\n \\\" targetValue \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" quest_2-1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST_2-1 \\\" , \\n \\\" counterName \\\" : \\\" quest2 \\\" , \\n \\\" premiseMissionTaskName \\\" : \\\" quest_1-4 \\\" , \\n \\\" targetValue \\\" : 1 \\n } \\n ], \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ], \\n \\\" counters \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest_complete \\\" , \\n \\\" metadata \\\" : \\\" QUEST_COMPLETE \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 5 \\n }, \\n { \\n \\\" resetType \\\" : \\\" weekly \\\" , \\n \\\" resetDayOfWeek \\\" : \\\" monday \\\" , \\n \\\" resetHour \\\" : 5 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" lot_gacha \\\" , \\n \\\" metadata \\\" : \\\" LOT_GACHA \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" daily \\\" , \\n \\\" resetHour \\\" : 5 \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest1 \\\" , \\n \\\" metadata \\\" : \\\" QUEST1 \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" quest2 \\\" , \\n \\\" metadata \\\" : \\\" QUEST2 \\\" , \\n \\\" scopes \\\" : [ \\n { \\n \\\" resetType \\\" : \\\" notReset \\\"\\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentMissionMasterFromGitHub 현재 활성화된 미션 모델의 마스터 데이터를 GitHub에서 갱신 지정된 GitHub 리포지토리에서 마스터 데이터를 가져와, 현재 활성화된 미션 모델의 마스터 데이터를 갱신합니다. GS2-Key 에 저장된 API 키가 인증에 사용되며, 체크아웃할 브랜치, 태그 또는 커밋 해시를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentMissionMaster 갱신된 현재 활성화된 미션 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentMissionMasterFromGitHub ( \u0026 mission . UpdateCurrentMissionMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 mission . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\UpdateCurrentMissionMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e updateCurrentMissionMasterFromGitHub ( ( new UpdateCurrentMissionMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.UpdateCurrentMissionMasterFromGitHubRequest ; import io.gs2.mission.result.UpdateCurrentMissionMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { UpdateCurrentMissionMasterFromGitHubResult result = client . updateCurrentMissionMasterFromGitHub ( new UpdateCurrentMissionMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentMissionMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . UpdateCurrentMissionMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentMissionMasterFromGitHub ( new Gs2 . Gs2Mission . Request . UpdateCurrentMissionMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Mission . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . updateCurrentMissionMasterFromGitHub ( new Gs2Mission . UpdateCurrentMissionMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Mission . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . update_current_mission_master_from_git_hub ( mission . UpdateCurrentMissionMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( mission . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.update_current_mission_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.update_current_mission_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCounterModelMasters 카운터 모델 마스터 목록 취득 지정된 네임스페이스의 카운터 모델 마스터의 페이지네이션 리스트를 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 카운터 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 카운터 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeCounterModelMasters ( \u0026 mission . DescribeCounterModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeCounterModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeCounterModelMasters ( ( new DescribeCounterModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeCounterModelMastersRequest ; import io.gs2.mission.result.DescribeCounterModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeCounterModelMastersResult result = client . describeCounterModelMasters ( new DescribeCounterModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List CounterModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeCounterModelMastersResult \u003e asyncResult = null ; yield return client . DescribeCounterModelMasters ( new Gs2 . Gs2Mission . Request . DescribeCounterModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeCounterModelMasters ( new Gs2Mission . DescribeCounterModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_counter_model_masters ( mission . DescribeCounterModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_counter_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mission' ) api_result_handler = client.describe_counter_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createCounterModelMaster 카운터 모델 마스터를 신규 작성 지정된 설정으로 새로운 카운터 모델 마스터를 작성합니다. 리셋 조건(일간·주간·월간·커스텀)을 정의하는 스코프와, 카운터가 유효한 기간을 제어하는 챌린지 기간 이벤트를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 카운터 모델명 카운터 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 scopes List [] 1 ~ 20 items 카운터의 리셋 타이밍 목록 이 카운터의 스코프(리셋 타이밍 또는 검증 액션 조건)를 정의합니다. 하나의 카운터에 여러 스코프를 설정할 수 있으며, 서로 다른 기간의 값(예: 데일리, 위클리, 누계를 동시에)을 추적할 수 있습니다. challengePeriodEventId string ~ 1024자 카운터를 조작할 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 카운터의 증감이 가능한 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 카운터는 언제든지 조작할 수 있습니다. Result 타입 설명 item CounterModelMaster 작성한 카운터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CreateCounterModelMaster ( \u0026 mission . CreateCounterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"counter-0001\" ), Metadata : nil , Description : nil , Scopes : [] mission . CounterScopeModel { mission . CounterScopeModel { ResetType : pointy . String ( \"notReset\" ), }, }, ChallengePeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CreateCounterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e createCounterModelMaster ( ( new CreateCounterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"counter-0001\" ) -\u003e withMetadata ( null ) -\u003e withDescription ( null ) -\u003e withScopes ([ ( new \\Gs2\\Mission\\Model\\CounterScopeModel ()) -\u003e withResetType ( \"notReset\" ), ]) -\u003e withChallengePeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CreateCounterModelMasterRequest ; import io.gs2.mission.result.CreateCounterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CreateCounterModelMasterResult result = client . createCounterModelMaster ( new CreateCounterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"counter-0001\" ) . withMetadata ( null ) . withDescription ( null ) . withScopes ( Arrays . asList ( new io . gs2 . mission . model . CounterScopeModel () . withResetType ( \"notReset\" ) )) . withChallengePeriodEventId ( null ) ); CounterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CreateCounterModelMasterResult \u003e asyncResult = null ; yield return client . CreateCounterModelMaster ( new Gs2 . Gs2Mission . Request . CreateCounterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"counter-0001\" ) . WithMetadata ( null ) . WithDescription ( null ) . WithScopes ( new Gs2 . Gs2Mission . Model . CounterScopeModel [] { new Gs2 . Gs2Mission . Model . CounterScopeModel () . WithResetType ( \"notReset\" ), }) . WithChallengePeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . createCounterModelMaster ( new Gs2Mission . CreateCounterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"counter-0001\" ) . withMetadata ( null ) . withDescription ( null ) . withScopes ([ new Gs2Mission . model . CounterScopeModel () . withResetType ( \"notReset\" ), ]) . withChallengePeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . create_counter_model_master ( mission . CreateCounterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'counter-0001' ) . with_metadata ( None ) . with_description ( None ) . with_scopes ([ mission . CounterScopeModel () . with_reset_type ( 'notReset' ), ]) . with_challenge_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.create_counter_model_master ({ namespaceName = \"namespace-0001\" , name = \"counter-0001\" , metadata = nil , description = nil , scopes = { { resetType = \"notReset\" , } }, challengePeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.create_counter_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"counter-0001\" , metadata = nil , description = nil , scopes = { { resetType = \"notReset\" , } }, challengePeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCounterModelMaster 카운터 모델 마스터를 취득 지정된 카운터 모델 마스터의 스코프, 리셋 조건, 챌린지 기간 이벤트 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델명 카운터 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CounterModelMaster 카운터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetCounterModelMaster ( \u0026 mission . GetCounterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetCounterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getCounterModelMaster ( ( new GetCounterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetCounterModelMasterRequest ; import io.gs2.mission.result.GetCounterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetCounterModelMasterResult result = client . getCounterModelMaster ( new GetCounterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) ); CounterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetCounterModelMasterResult \u003e asyncResult = null ; yield return client . GetCounterModelMaster ( new Gs2 . Gs2Mission . Request . GetCounterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"counter-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getCounterModelMaster ( new Gs2Mission . GetCounterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_counter_model_master ( mission . GetCounterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'counter-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_counter_model_master ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_counter_model_master_async ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCounterModelMaster 카운터 모델 마스터를 갱신 지정된 카운터 모델 마스터를 갱신합니다. 메타데이터, 설명, 스코프, 챌린지 기간 이벤트 ID를 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델명 카운터 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 scopes List [] 1 ~ 20 items 카운터의 리셋 타이밍 목록 이 카운터의 스코프(리셋 타이밍 또는 검증 액션 조건)를 정의합니다. 하나의 카운터에 여러 스코프를 설정할 수 있으며, 서로 다른 기간의 값(예: 데일리, 위클리, 누계를 동시에)을 추적할 수 있습니다. challengePeriodEventId string ~ 1024자 카운터를 조작할 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 카운터의 증감이 가능한 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 카운터는 언제든지 조작할 수 있습니다. Result 타입 설명 item CounterModelMaster 갱신한 카운터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . UpdateCounterModelMaster ( \u0026 mission . UpdateCounterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), Metadata : pointy . String ( \"COUNTER1\" ), Description : pointy . String ( \"description1\" ), Scopes : [] mission . CounterScopeModel { mission . CounterScopeModel { ResetType : pointy . String ( \"monthly\" ), ResetHour : pointy . Int32 ( 5 ), ResetDayOfMonth : pointy . Int32 ( 1 ), }, }, ChallengePeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\UpdateCounterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e updateCounterModelMaster ( ( new UpdateCounterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withMetadata ( \"COUNTER1\" ) -\u003e withDescription ( \"description1\" ) -\u003e withScopes ([ ( new \\Gs2\\Mission\\Model\\CounterScopeModel ()) -\u003e withResetType ( \"monthly\" ) -\u003e withResetHour ( 5 ) -\u003e withResetDayOfMonth ( 1 ), ]) -\u003e withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.UpdateCounterModelMasterRequest ; import io.gs2.mission.result.UpdateCounterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { UpdateCounterModelMasterResult result = client . updateCounterModelMaster ( new UpdateCounterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withMetadata ( \"COUNTER1\" ) . withDescription ( \"description1\" ) . withScopes ( Arrays . asList ( new io . gs2 . mission . model . CounterScopeModel () . withResetType ( \"monthly\" ) . withResetHour ( 5 ) . withResetDayOfMonth ( 1 ) )) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) ); CounterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . UpdateCounterModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCounterModelMaster ( new Gs2 . Gs2Mission . Request . UpdateCounterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"counter-0001\" ) . WithMetadata ( \"COUNTER1\" ) . WithDescription ( \"description1\" ) . WithScopes ( new Gs2 . Gs2Mission . Model . CounterScopeModel [] { new Gs2 . Gs2Mission . Model . CounterScopeModel () . WithResetType ( \"monthly\" ) . WithResetHour ( 5 ) . WithResetDayOfMonth ( 1 ), }) . WithChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . updateCounterModelMaster ( new Gs2Mission . UpdateCounterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) . withMetadata ( \"COUNTER1\" ) . withDescription ( \"description1\" ) . withScopes ([ new Gs2Mission . model . CounterScopeModel () . withResetType ( \"monthly\" ) . withResetHour ( 5 ) . withResetDayOfMonth ( 1 ), ]) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . update_counter_model_master ( mission . UpdateCounterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'counter-0001' ) . with_metadata ( 'COUNTER1' ) . with_description ( 'description1' ) . with_scopes ([ mission . CounterScopeModel () . with_reset_type ( 'monthly' ) . with_reset_hour ( 5 ) . with_reset_day_of_month ( 1 ), ]) . with_challenge_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.update_counter_model_master ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , metadata = \"COUNTER1\" , description = \"description1\" , scopes = { { resetType = \"monthly\" , resetHour = 5 , resetDayOfMonth = 1 , } }, challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.update_counter_model_master_async ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , metadata = \"COUNTER1\" , description = \"description1\" , scopes = { { resetType = \"monthly\" , resetHour = 5 , resetDayOfMonth = 1 , } }, challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCounterModelMaster 카운터 모델 마스터를 삭제 지정된 카운터 모델 마스터를 삭제합니다. 다음 마스터 데이터 갱신까지, 현재 활성화된 마스터 데이터에는 영향을 미치지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델명 카운터 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CounterModelMaster 삭제한 카운터 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DeleteCounterModelMaster ( \u0026 mission . DeleteCounterModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CounterName : pointy . String ( \"counter-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DeleteCounterModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e deleteCounterModelMaster ( ( new DeleteCounterModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCounterName ( \"counter-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DeleteCounterModelMasterRequest ; import io.gs2.mission.result.DeleteCounterModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DeleteCounterModelMasterResult result = client . deleteCounterModelMaster ( new DeleteCounterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) ); CounterModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DeleteCounterModelMasterResult \u003e asyncResult = null ; yield return client . DeleteCounterModelMaster ( new Gs2 . Gs2Mission . Request . DeleteCounterModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCounterName ( \"counter-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . deleteCounterModelMaster ( new Gs2Mission . DeleteCounterModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCounterName ( \"counter-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . delete_counter_model_master ( mission . DeleteCounterModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_counter_name ( 'counter-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.delete_counter_model_master ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.delete_counter_model_master_async ({ namespaceName = \"namespace-0001\" , counterName = \"counter-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeMissionGroupModelMasters 미션 그룹 모델 마스터 목록 취득 지정된 네임스페이스의 미션 그룹 모델 마스터의 페이지네이션 리스트를 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 미션 그룹 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 미션 그룹 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeMissionGroupModelMasters ( \u0026 mission . DescribeMissionGroupModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeMissionGroupModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeMissionGroupModelMasters ( ( new DescribeMissionGroupModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeMissionGroupModelMastersRequest ; import io.gs2.mission.result.DescribeMissionGroupModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeMissionGroupModelMastersResult result = client . describeMissionGroupModelMasters ( new DescribeMissionGroupModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List MissionGroupModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeMissionGroupModelMastersResult \u003e asyncResult = null ; yield return client . DescribeMissionGroupModelMasters ( new Gs2 . Gs2Mission . Request . DescribeMissionGroupModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeMissionGroupModelMasters ( new Gs2Mission . DescribeMissionGroupModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_mission_group_model_masters ( mission . DescribeMissionGroupModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_mission_group_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mission' ) api_result_handler = client.describe_mission_group_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createMissionGroupModelMaster 미션 그룹 모델 마스터를 신규 작성 지정된 설정으로 새로운 미션 그룹 모델 마스터를 작성합니다. 리셋 타입(일간·주간·월간·없음), 리셋 타이밍(시간·요일·월일·기준 타임스탬프), 달성 시 통지 네임스페이스를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 미션 그룹의 달성 상황이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구), 매일, 매주, 매월, 기준 일시부터 일정 일수마다 중에서 선택합니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋하는 날짜 미션 그룹이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType이 “monthly\"인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋하는 요일 미션 그룹이 리셋되는 요일입니다. resetType이 “weekly\"인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 미션 그룹이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 completeNotificationNamespaceId string ~ 1024자 미션 태스크를 달성했을 때의 푸시 통지 이 그룹 내의 미션 태스크가 달성되었을 때 푸시 통지를 전송하는 데 사용되는 GS2-Gateway의 네임스페이스 GRN입니다. 게임 클라이언트에 실시간으로 통지할 수 있습니다. Result 타입 설명 item MissionGroupModelMaster 작성한 미션 그룹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CreateMissionGroupModelMaster ( \u0026 mission . CreateMissionGroupModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"mission-group-0001\" ), Metadata : nil , Description : nil , ResetType : pointy . String ( \"notReset\" ), ResetDayOfMonth : pointy . Int32 ( 1 ), ResetDayOfWeek : pointy . String ( \"monday\" ), ResetHour : pointy . Int32 ( 10 ), AnchorTimestamp : pointy . Int64 ( 100000 ), Days : pointy . Int32 ( 3 ), CompleteNotificationNamespaceId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CreateMissionGroupModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e createMissionGroupModelMaster ( ( new CreateMissionGroupModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"mission-group-0001\" ) -\u003e withMetadata ( null ) -\u003e withDescription ( null ) -\u003e withResetType ( \"notReset\" ) -\u003e withResetDayOfMonth ( 1 ) -\u003e withResetDayOfWeek ( \"monday\" ) -\u003e withResetHour ( 10 ) -\u003e withAnchorTimestamp ( 100000 ) -\u003e withDays ( 3 ) -\u003e withCompleteNotificationNamespaceId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CreateMissionGroupModelMasterRequest ; import io.gs2.mission.result.CreateMissionGroupModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CreateMissionGroupModelMasterResult result = client . createMissionGroupModelMaster ( new CreateMissionGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"mission-group-0001\" ) . withMetadata ( null ) . withDescription ( null ) . withResetType ( \"notReset\" ) . withResetDayOfMonth ( 1 ) . withResetDayOfWeek ( \"monday\" ) . withResetHour ( 10 ) . withAnchorTimestamp ( 100000L ) . withDays ( 3 ) . withCompleteNotificationNamespaceId ( null ) ); MissionGroupModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CreateMissionGroupModelMasterResult \u003e asyncResult = null ; yield return client . CreateMissionGroupModelMaster ( new Gs2 . Gs2Mission . Request . CreateMissionGroupModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"mission-group-0001\" ) . WithMetadata ( null ) . WithDescription ( null ) . WithResetType ( \"notReset\" ) . WithResetDayOfMonth ( 1 ) . WithResetDayOfWeek ( \"monday\" ) . WithResetHour ( 10 ) . WithAnchorTimestamp ( 100000L ) . WithDays ( 3 ) . WithCompleteNotificationNamespaceId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . createMissionGroupModelMaster ( new Gs2Mission . CreateMissionGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"mission-group-0001\" ) . withMetadata ( null ) . withDescription ( null ) . withResetType ( \"notReset\" ) . withResetDayOfMonth ( 1 ) . withResetDayOfWeek ( \"monday\" ) . withResetHour ( 10 ) . withAnchorTimestamp ( 100000 ) . withDays ( 3 ) . withCompleteNotificationNamespaceId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . create_mission_group_model_master ( mission . CreateMissionGroupModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'mission-group-0001' ) . with_metadata ( None ) . with_description ( None ) . with_reset_type ( 'notReset' ) . with_reset_day_of_month ( 1 ) . with_reset_day_of_week ( 'monday' ) . with_reset_hour ( 10 ) . with_anchor_timestamp ( 100000 ) . with_days ( 3 ) . with_complete_notification_namespace_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.create_mission_group_model_master ({ namespaceName = \"namespace-0001\" , name = \"mission-group-0001\" , metadata = nil , description = nil , resetType = \"notReset\" , resetDayOfMonth = 1 , resetDayOfWeek = \"monday\" , resetHour = 10 , anchorTimestamp = 100000 , days = 3 , completeNotificationNamespaceId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.create_mission_group_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"mission-group-0001\" , metadata = nil , description = nil , resetType = \"notReset\" , resetDayOfMonth = 1 , resetDayOfWeek = \"monday\" , resetHour = 10 , anchorTimestamp = 100000 , days = 3 , completeNotificationNamespaceId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMissionGroupModelMaster 미션 그룹 모델 마스터를 취득 지정된 미션 그룹 모델 마스터의 리셋 타입, 리셋 타이밍, 통지 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item MissionGroupModelMaster 미션 그룹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetMissionGroupModelMaster ( \u0026 mission . GetMissionGroupModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetMissionGroupModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getMissionGroupModelMaster ( ( new GetMissionGroupModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetMissionGroupModelMasterRequest ; import io.gs2.mission.result.GetMissionGroupModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetMissionGroupModelMasterResult result = client . getMissionGroupModelMaster ( new GetMissionGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); MissionGroupModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetMissionGroupModelMasterResult \u003e asyncResult = null ; yield return client . GetMissionGroupModelMaster ( new Gs2 . Gs2Mission . Request . GetMissionGroupModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getMissionGroupModelMaster ( new Gs2Mission . GetMissionGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_mission_group_model_master ( mission . GetMissionGroupModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_mission_group_model_master ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_mission_group_model_master_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateMissionGroupModelMaster 미션 그룹 모델 마스터를 갱신 지정된 미션 그룹 모델 마스터를 갱신합니다. 메타데이터, 설명, 리셋 타입, 리셋 타이밍, 통지 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 미션 그룹의 달성 상황이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구), 매일, 매주, 매월, 기준 일시부터 일정 일수마다 중에서 선택합니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋하는 날짜 미션 그룹이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType이 “monthly\"인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋하는 요일 미션 그룹이 리셋되는 요일입니다. resetType이 “weekly\"인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 미션 그룹이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 completeNotificationNamespaceId string ~ 1024자 미션 태스크를 달성했을 때의 푸시 통지 이 그룹 내의 미션 태스크가 달성되었을 때 푸시 통지를 전송하는 데 사용되는 GS2-Gateway의 네임스페이스 GRN입니다. 게임 클라이언트에 실시간으로 통지할 수 있습니다. Result 타입 설명 item MissionGroupModelMaster 갱신한 미션 그룹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . UpdateMissionGroupModelMaster ( \u0026 mission . UpdateMissionGroupModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), Metadata : pointy . String ( \"MISSION_GROUP1\" ), Description : pointy . String ( \"description1\" ), ResetType : pointy . String ( \"weekly\" ), ResetDayOfMonth : pointy . Int32 ( 5 ), ResetDayOfWeek : pointy . String ( \"monday\" ), ResetHour : pointy . Int32 ( 10 ), AnchorTimestamp : pointy . Int64 ( 100000 ), Days : pointy . Int32 ( 3 ), CompleteNotificationNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:game-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\UpdateMissionGroupModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e updateMissionGroupModelMaster ( ( new UpdateMissionGroupModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMetadata ( \"MISSION_GROUP1\" ) -\u003e withDescription ( \"description1\" ) -\u003e withResetType ( \"weekly\" ) -\u003e withResetDayOfMonth ( 5 ) -\u003e withResetDayOfWeek ( \"monday\" ) -\u003e withResetHour ( 10 ) -\u003e withAnchorTimestamp ( 100000 ) -\u003e withDays ( 3 ) -\u003e withCompleteNotificationNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:game-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.UpdateMissionGroupModelMasterRequest ; import io.gs2.mission.result.UpdateMissionGroupModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { UpdateMissionGroupModelMasterResult result = client . updateMissionGroupModelMaster ( new UpdateMissionGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMetadata ( \"MISSION_GROUP1\" ) . withDescription ( \"description1\" ) . withResetType ( \"weekly\" ) . withResetDayOfMonth ( 5 ) . withResetDayOfWeek ( \"monday\" ) . withResetHour ( 10 ) . withAnchorTimestamp ( 100000L ) . withDays ( 3 ) . withCompleteNotificationNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:game-0001\" ) ); MissionGroupModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . UpdateMissionGroupModelMasterResult \u003e asyncResult = null ; yield return client . UpdateMissionGroupModelMaster ( new Gs2 . Gs2Mission . Request . UpdateMissionGroupModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMetadata ( \"MISSION_GROUP1\" ) . WithDescription ( \"description1\" ) . WithResetType ( \"weekly\" ) . WithResetDayOfMonth ( 5 ) . WithResetDayOfWeek ( \"monday\" ) . WithResetHour ( 10 ) . WithAnchorTimestamp ( 100000L ) . WithDays ( 3 ) . WithCompleteNotificationNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:game-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . updateMissionGroupModelMaster ( new Gs2Mission . UpdateMissionGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMetadata ( \"MISSION_GROUP1\" ) . withDescription ( \"description1\" ) . withResetType ( \"weekly\" ) . withResetDayOfMonth ( 5 ) . withResetDayOfWeek ( \"monday\" ) . withResetHour ( 10 ) . withAnchorTimestamp ( 100000 ) . withDays ( 3 ) . withCompleteNotificationNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:game-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . update_mission_group_model_master ( mission . UpdateMissionGroupModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_metadata ( 'MISSION_GROUP1' ) . with_description ( 'description1' ) . with_reset_type ( 'weekly' ) . with_reset_day_of_month ( 5 ) . with_reset_day_of_week ( 'monday' ) . with_reset_hour ( 10 ) . with_anchor_timestamp ( 100000 ) . with_days ( 3 ) . with_complete_notification_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:gateway:game-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.update_mission_group_model_master ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , metadata = \"MISSION_GROUP1\" , description = \"description1\" , resetType = \"weekly\" , resetDayOfMonth = 5 , resetDayOfWeek = \"monday\" , resetHour = 10 , anchorTimestamp = 100000 , days = 3 , completeNotificationNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:game-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.update_mission_group_model_master_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , metadata = \"MISSION_GROUP1\" , description = \"description1\" , resetType = \"weekly\" , resetDayOfMonth = 5 , resetDayOfWeek = \"monday\" , resetHour = 10 , anchorTimestamp = 100000 , days = 3 , completeNotificationNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:game-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMissionGroupModelMaster 미션 그룹 모델 마스터를 삭제 지정된 미션 그룹 모델 마스터를 삭제합니다. 다음 마스터 데이터 갱신까지, 현재 활성화된 마스터 데이터에는 영향을 미치지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item MissionGroupModelMaster 삭제한 미션 그룹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DeleteMissionGroupModelMaster ( \u0026 mission . DeleteMissionGroupModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DeleteMissionGroupModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e deleteMissionGroupModelMaster ( ( new DeleteMissionGroupModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DeleteMissionGroupModelMasterRequest ; import io.gs2.mission.result.DeleteMissionGroupModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DeleteMissionGroupModelMasterResult result = client . deleteMissionGroupModelMaster ( new DeleteMissionGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); MissionGroupModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DeleteMissionGroupModelMasterResult \u003e asyncResult = null ; yield return client . DeleteMissionGroupModelMaster ( new Gs2 . Gs2Mission . Request . DeleteMissionGroupModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . deleteMissionGroupModelMaster ( new Gs2Mission . DeleteMissionGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . delete_mission_group_model_master ( mission . DeleteMissionGroupModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.delete_mission_group_model_master ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.delete_mission_group_model_master_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeMissionTaskModelMasters 미션 태스크 모델 마스터 목록 취득 지정된 미션 그룹 내의 미션 태스크 모델 마스터의 페이지네이션 리스트를 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 미션 태스크 모델 마스터 이름의 필터 접두사 missionGroupName string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 미션 태스크 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DescribeMissionTaskModelMasters ( \u0026 mission . DescribeMissionTaskModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , MissionGroupName : pointy . String ( \"mission-group-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DescribeMissionTaskModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e describeMissionTaskModelMasters ( ( new DescribeMissionTaskModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DescribeMissionTaskModelMastersRequest ; import io.gs2.mission.result.DescribeMissionTaskModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DescribeMissionTaskModelMastersResult result = client . describeMissionTaskModelMasters ( new DescribeMissionTaskModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withMissionGroupName ( \"mission-group-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List MissionTaskModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DescribeMissionTaskModelMastersResult \u003e asyncResult = null ; yield return client . DescribeMissionTaskModelMasters ( new Gs2 . Gs2Mission . Request . DescribeMissionTaskModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . describeMissionTaskModelMasters ( new Gs2Mission . DescribeMissionTaskModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withMissionGroupName ( \"mission-group-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . describe_mission_task_model_masters ( mission . DescribeMissionTaskModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_mission_group_name ( 'mission-group-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.describe_mission_task_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , missionGroupName = \"mission-group-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'mission' ) api_result_handler = client.describe_mission_task_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , missionGroupName = \"mission-group-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createMissionTaskModelMaster 미션 태스크 모델 마스터를 신규 작성 지정된 설정으로 새로운 미션 태스크 모델 마스터를 작성합니다. 대상 카운터와 임계값, 달성 검증 타입(카운터 값 또는 커스텀 소비 액션), 보상 입수 액션, 챌린지 기간 이벤트, 전제 미션 태스크를 설정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 미션 태스크 모델명 미션 태스크 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 verifyCompleteType 문자열 열거형 enum {   “counter”,   “verifyActions” } “counter” 달성 조건 종류 미션 태스크의 달성 판정 방법을 지정합니다. “counter\"는 관련된 카운터의 스코프 값이 목표 임곗값에 도달했는지 확인합니다. “verifyActions\"는 검증 액션을 사용하여 달성 조건을 확인합니다. 정의 설명 counter 카운터 verifyActions 검증 액션 targetCounter TargetCounterModel {verifyCompleteType} == “counter” ※ 목표 카운터 미션 태스크의 달성 판정에 사용되는 카운터, 스코프, 목표값을 정의합니다. 카운터의 스코프 값이 지정된 목표값에 도달하거나 초과한 경우, 태스크가 달성된 것으로 간주됩니다. ※ verifyCompleteType이(가) “counter” 이면 필수 verifyCompleteConsumeActions List {verifyCompleteType} == “verifyActions” 0 ~ 10 items 태스크 달성 판정에 사용하는 검증 액션 미션 태스크의 달성 판정에 사용되는 검증 액션의 목록입니다. 모든 검증 액션이 성공한 경우 태스크가 달성된 것으로 간주됩니다. verifyCompleteType이 “verifyActions\"인 경우에만 사용됩니다. ※ verifyCompleteType이(가) “verifyActions” 이면 활성화 completeAcquireActions List [] 0 ~ 100 items 미션 달성 시 보상 플레이어가 미션 달성 보상을 받을 때 실행되는 입수 액션의 목록입니다. challengePeriodEventId string ~ 1024자 보상을 받을 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 미션 태스크의 보상을 받을 수 있는 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 달성 후 언제든지 보상을 받을 수 있습니다. premiseMissionTaskName string ~ 128자 이 태스크에 도전하기 위해 달성해 두어야 하는 태스크의 이름 이 태스크의 보상을 받기 전에 달성해 두어야 하는, 같은 그룹 내의 전제 미션 태스크를 지정합니다. 단계적인 미션 체인을 만드는 데 사용합니다. Result 타입 설명 item MissionTaskModelMaster 작성한 미션 태스크 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . CreateMissionTaskModelMaster ( \u0026 mission . CreateMissionTaskModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), Name : pointy . String ( \"mission-task-0001\" ), Metadata : nil , Description : nil , VerifyCompleteType : pointy . String ( \"counter\" ), TargetCounter : \u0026 mission . TargetCounterModel { CounterName : pointy . String ( \"counter-0001\" ), Value : pointy . Int64 ( 10 ), }, VerifyCompleteConsumeActions : nil , CompleteAcquireActions : [] mission . AcquireAction { mission . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request1\" ), }, }, ChallengePeriodEventId : nil , PremiseMissionTaskName : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\CreateMissionTaskModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e createMissionTaskModelMaster ( ( new CreateMissionTaskModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withName ( \"mission-task-0001\" ) -\u003e withMetadata ( null ) -\u003e withDescription ( null ) -\u003e withVerifyCompleteType ( \"counter\" ) -\u003e withTargetCounter (( new \\Gs2\\Mission\\Model\\TargetCounterModel ()) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withValue ( 10 )) -\u003e withVerifyCompleteConsumeActions ( null ) -\u003e withCompleteAcquireActions ([ ( new \\Gs2\\Mission\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), ]) -\u003e withChallengePeriodEventId ( null ) -\u003e withPremiseMissionTaskName ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.CreateMissionTaskModelMasterRequest ; import io.gs2.mission.result.CreateMissionTaskModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { CreateMissionTaskModelMasterResult result = client . createMissionTaskModelMaster ( new CreateMissionTaskModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withName ( \"mission-task-0001\" ) . withMetadata ( null ) . withDescription ( null ) . withVerifyCompleteType ( \"counter\" ) . withTargetCounter ( new io . gs2 . mission . model . TargetCounterModel () . withCounterName ( \"counter-0001\" ) . withValue ( 10L )) . withVerifyCompleteConsumeActions ( null ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . mission . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ) )) . withChallengePeriodEventId ( null ) . withPremiseMissionTaskName ( null ) ); MissionTaskModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . CreateMissionTaskModelMasterResult \u003e asyncResult = null ; yield return client . CreateMissionTaskModelMaster ( new Gs2 . Gs2Mission . Request . CreateMissionTaskModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithName ( \"mission-task-0001\" ) . WithMetadata ( null ) . WithDescription ( null ) . WithVerifyCompleteType ( \"counter\" ) . WithTargetCounter ( new Gs2 . Gs2Mission . Model . TargetCounterModel () . WithCounterName ( \"counter-0001\" ) . WithValue ( 10L )) . WithVerifyCompleteConsumeActions ( null ) . WithCompleteAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), }) . WithChallengePeriodEventId ( null ) . WithPremiseMissionTaskName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . createMissionTaskModelMaster ( new Gs2Mission . CreateMissionTaskModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withName ( \"mission-task-0001\" ) . withMetadata ( null ) . withDescription ( null ) . withVerifyCompleteType ( \"counter\" ) . withTargetCounter ( new Gs2Mission . model . TargetCounterModel () . withCounterName ( \"counter-0001\" ) . withValue ( 10 )) . withVerifyCompleteConsumeActions ( null ) . withCompleteAcquireActions ([ new Gs2Mission . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), ]) . withChallengePeriodEventId ( null ) . withPremiseMissionTaskName ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . create_mission_task_model_master ( mission . CreateMissionTaskModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_name ( 'mission-task-0001' ) . with_metadata ( None ) . with_description ( None ) . with_verify_complete_type ( 'counter' ) . with_target_counter ( mission . TargetCounterModel () . with_counter_name ( 'counter-0001' ) . with_value ( 10 )) . with_verify_complete_consume_actions ( None ) . with_complete_acquire_actions ([ mission . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request1' ), ]) . with_challenge_period_event_id ( None ) . with_premise_mission_task_name ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.create_mission_task_model_master ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , name = \"mission-task-0001\" , metadata = nil , description = nil , verifyCompleteType = \"counter\" , targetCounter = { counterName = \"counter-0001\" , value = 10 , }, verifyCompleteConsumeActions = nil , completeAcquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request1\" , } }, challengePeriodEventId = nil , premiseMissionTaskName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.create_mission_task_model_master_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , name = \"mission-task-0001\" , metadata = nil , description = nil , verifyCompleteType = \"counter\" , targetCounter = { counterName = \"counter-0001\" , value = 10 , }, verifyCompleteConsumeActions = nil , completeAcquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request1\" , } }, challengePeriodEventId = nil , premiseMissionTaskName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMissionTaskModelMaster 미션 태스크 모델 마스터를 취득 지정된 미션 태스크 모델 마스터의 대상 카운터, 달성 검증 타입, 보상 액션, 전제 설정을 포함한 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionTaskName string  ~ 128자 미션 태스크 모델명 미션 태스크 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item MissionTaskModelMaster 미션 태스크 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . GetMissionTaskModelMaster ( \u0026 mission . GetMissionTaskModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), MissionTaskName : pointy . String ( \"mission-task-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\GetMissionTaskModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e getMissionTaskModelMaster ( ( new GetMissionTaskModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMissionTaskName ( \"mission-task-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.GetMissionTaskModelMasterRequest ; import io.gs2.mission.result.GetMissionTaskModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { GetMissionTaskModelMasterResult result = client . getMissionTaskModelMaster ( new GetMissionTaskModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) ); MissionTaskModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . GetMissionTaskModelMasterResult \u003e asyncResult = null ; yield return client . GetMissionTaskModelMaster ( new Gs2 . Gs2Mission . Request . GetMissionTaskModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMissionTaskName ( \"mission-task-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . getMissionTaskModelMaster ( new Gs2Mission . GetMissionTaskModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . get_mission_task_model_master ( mission . GetMissionTaskModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_mission_task_name ( 'mission-task-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.get_mission_task_model_master ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.get_mission_task_model_master_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateMissionTaskModelMaster 미션 태스크 모델 마스터를 갱신 지정된 미션 태스크 모델 마스터를 갱신합니다. 메타데이터, 설명, 대상 카운터, 달성 검증 타입, 보상 액션, 챌린지 기간 이벤트, 전제 미션 태스크를 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionTaskName string  ~ 128자 미션 태스크 모델명 미션 태스크 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 verifyCompleteType 문자열 열거형 enum {   “counter”,   “verifyActions” } “counter” 달성 조건 종류 미션 태스크의 달성 판정 방법을 지정합니다. “counter\"는 관련된 카운터의 스코프 값이 목표 임곗값에 도달했는지 확인합니다. “verifyActions\"는 검증 액션을 사용하여 달성 조건을 확인합니다. 정의 설명 counter 카운터 verifyActions 검증 액션 targetCounter TargetCounterModel {verifyCompleteType} == “counter” ※ 목표 카운터 미션 태스크의 달성 판정에 사용되는 카운터, 스코프, 목표값을 정의합니다. 카운터의 스코프 값이 지정된 목표값에 도달하거나 초과한 경우, 태스크가 달성된 것으로 간주됩니다. ※ verifyCompleteType이(가) “counter” 이면 필수 verifyCompleteConsumeActions List {verifyCompleteType} == “verifyActions” 0 ~ 10 items 태스크 달성 판정에 사용하는 검증 액션 미션 태스크의 달성 판정에 사용되는 검증 액션의 목록입니다. 모든 검증 액션이 성공한 경우 태스크가 달성된 것으로 간주됩니다. verifyCompleteType이 “verifyActions\"인 경우에만 사용됩니다. ※ verifyCompleteType이(가) “verifyActions” 이면 활성화 completeAcquireActions List [] 0 ~ 100 items 미션 달성 시 보상 플레이어가 미션 달성 보상을 받을 때 실행되는 입수 액션의 목록입니다. challengePeriodEventId string ~ 1024자 보상을 받을 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 미션 태스크의 보상을 받을 수 있는 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 달성 후 언제든지 보상을 받을 수 있습니다. premiseMissionTaskName string ~ 128자 이 태스크에 도전하기 위해 달성해 두어야 하는 태스크의 이름 이 태스크의 보상을 받기 전에 달성해 두어야 하는, 같은 그룹 내의 전제 미션 태스크를 지정합니다. 단계적인 미션 체인을 만드는 데 사용합니다. Result 타입 설명 item MissionTaskModelMaster 갱신한 미션 태스크 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . UpdateMissionTaskModelMaster ( \u0026 mission . UpdateMissionTaskModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), MissionTaskName : pointy . String ( \"mission-task-0001\" ), Metadata : pointy . String ( \"MISSION_TASK1\" ), Description : pointy . String ( \"description1\" ), VerifyCompleteType : pointy . String ( \"counter\" ), TargetCounter : \u0026 mission . TargetCounterModel { CounterName : pointy . String ( \"counter-0001\" ), Value : pointy . Int64 ( 100 ), }, VerifyCompleteConsumeActions : nil , CompleteAcquireActions : [] mission . AcquireAction { mission . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId-request\" ), }, }, ChallengePeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), PremiseMissionTaskName : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\UpdateMissionTaskModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e updateMissionTaskModelMaster ( ( new UpdateMissionTaskModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMissionTaskName ( \"mission-task-0001\" ) -\u003e withMetadata ( \"MISSION_TASK1\" ) -\u003e withDescription ( \"description1\" ) -\u003e withVerifyCompleteType ( \"counter\" ) -\u003e withTargetCounter (( new \\Gs2\\Mission\\Model\\TargetCounterModel ()) -\u003e withCounterName ( \"counter-0001\" ) -\u003e withValue ( 100 )) -\u003e withVerifyCompleteConsumeActions ( null ) -\u003e withCompleteAcquireActions ([ ( new \\Gs2\\Mission\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"Gs2Stamina:RecoverStaminaByUserId-request\" ), ]) -\u003e withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) -\u003e withPremiseMissionTaskName ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.UpdateMissionTaskModelMasterRequest ; import io.gs2.mission.result.UpdateMissionTaskModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { UpdateMissionTaskModelMasterResult result = client . updateMissionTaskModelMaster ( new UpdateMissionTaskModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withMetadata ( \"MISSION_TASK1\" ) . withDescription ( \"description1\" ) . withVerifyCompleteType ( \"counter\" ) . withTargetCounter ( new io . gs2 . mission . model . TargetCounterModel () . withCounterName ( \"counter-0001\" ) . withValue ( 100L )) . withVerifyCompleteConsumeActions ( null ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . mission . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"Gs2Stamina:RecoverStaminaByUserId-request\" ) )) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) . withPremiseMissionTaskName ( null ) ); MissionTaskModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . UpdateMissionTaskModelMasterResult \u003e asyncResult = null ; yield return client . UpdateMissionTaskModelMaster ( new Gs2 . Gs2Mission . Request . UpdateMissionTaskModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMissionTaskName ( \"mission-task-0001\" ) . WithMetadata ( \"MISSION_TASK1\" ) . WithDescription ( \"description1\" ) . WithVerifyCompleteType ( \"counter\" ) . WithTargetCounter ( new Gs2 . Gs2Mission . Model . TargetCounterModel () . WithCounterName ( \"counter-0001\" ) . WithValue ( 100L )) . WithVerifyCompleteConsumeActions ( null ) . WithCompleteAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"Gs2Stamina:RecoverStaminaByUserId-request\" ), }) . WithChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) . WithPremiseMissionTaskName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . updateMissionTaskModelMaster ( new Gs2Mission . UpdateMissionTaskModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) . withMetadata ( \"MISSION_TASK1\" ) . withDescription ( \"description1\" ) . withVerifyCompleteType ( \"counter\" ) . withTargetCounter ( new Gs2Mission . model . TargetCounterModel () . withCounterName ( \"counter-0001\" ) . withValue ( 100 )) . withVerifyCompleteConsumeActions ( null ) . withCompleteAcquireActions ([ new Gs2Mission . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"Gs2Stamina:RecoverStaminaByUserId-request\" ), ]) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) . withPremiseMissionTaskName ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . update_mission_task_model_master ( mission . UpdateMissionTaskModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_mission_task_name ( 'mission-task-0001' ) . with_metadata ( 'MISSION_TASK1' ) . with_description ( 'description1' ) . with_verify_complete_type ( 'counter' ) . with_target_counter ( mission . TargetCounterModel () . with_counter_name ( 'counter-0001' ) . with_value ( 100 )) . with_verify_complete_consume_actions ( None ) . with_complete_acquire_actions ([ mission . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( 'Gs2Stamina:RecoverStaminaByUserId-request' ), ]) . with_challenge_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001' ) . with_premise_mission_task_name ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.update_mission_task_model_master ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , metadata = \"MISSION_TASK1\" , description = \"description1\" , verifyCompleteType = \"counter\" , targetCounter = { counterName = \"counter-0001\" , value = 100 , }, verifyCompleteConsumeActions = nil , completeAcquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"Gs2Stamina:RecoverStaminaByUserId-request\" , } }, challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , premiseMissionTaskName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.update_mission_task_model_master_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , metadata = \"MISSION_TASK1\" , description = \"description1\" , verifyCompleteType = \"counter\" , targetCounter = { counterName = \"counter-0001\" , value = 100 , }, verifyCompleteConsumeActions = nil , completeAcquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"Gs2Stamina:RecoverStaminaByUserId-request\" , } }, challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , premiseMissionTaskName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMissionTaskModelMaster 미션 태스크 모델 마스터를 삭제 지정된 미션 태스크 모델 마스터를 삭제합니다. 다음 마스터 데이터 갱신까지, 현재 활성화된 마스터 데이터에는 영향을 미치지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹 모델명 미션 그룹 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionTaskName string  ~ 128자 미션 태스크 모델명 미션 태스크 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item MissionTaskModelMaster 삭제한 미션 태스크 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/mission\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := mission . Gs2MissionRestClient { Session : \u0026 session , } result , err := client . DeleteMissionTaskModelMaster ( \u0026 mission . DeleteMissionTaskModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MissionGroupName : pointy . String ( \"mission-group-0001\" ), MissionTaskName : pointy . String ( \"mission-task-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Mission\\Gs2MissionRestClient ; use Gs2\\Mission\\Request\\DeleteMissionTaskModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MissionRestClient ( $session ); try { $result = $client -\u003e deleteMissionTaskModelMaster ( ( new DeleteMissionTaskModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMissionGroupName ( \"mission-group-0001\" ) -\u003e withMissionTaskName ( \"mission-task-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.mission.rest.Gs2MissionRestClient ; import io.gs2.mission.request.DeleteMissionTaskModelMasterRequest ; import io.gs2.mission.result.DeleteMissionTaskModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MissionRestClient client = new Gs2MissionRestClient ( session ); try { DeleteMissionTaskModelMasterResult result = client . deleteMissionTaskModelMaster ( new DeleteMissionTaskModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) ); MissionTaskModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MissionRestClient ( session ); AsyncResult Gs2 . Gs2Mission . Result . DeleteMissionTaskModelMasterResult \u003e asyncResult = null ; yield return client . DeleteMissionTaskModelMaster ( new Gs2 . Gs2Mission . Request . DeleteMissionTaskModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMissionGroupName ( \"mission-group-0001\" ) . WithMissionTaskName ( \"mission-task-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Mission from '@/gs2/mission' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Mission . Gs2MissionRestClient ( session ); try { const result = await client . deleteMissionTaskModelMaster ( new Gs2Mission . DeleteMissionTaskModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMissionGroupName ( \"mission-group-0001\" ) . withMissionTaskName ( \"mission-task-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import mission session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = mission . Gs2MissionRestClient ( session ) try : result = client . delete_mission_task_model_master ( mission . DeleteMissionTaskModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mission_group_name ( 'mission-group-0001' ) . with_mission_task_name ( 'mission-task-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'mission' ) api_result = client.delete_mission_task_model_master ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'mission' ) api_result_handler = client.delete_mission_task_model_master_async ({ namespaceName = \"namespace-0001\" , missionGroupName = \"mission-group-0001\" , missionTaskName = \"mission-task-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Mission SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Mission SDK API 레퍼런스","url":"/ko/api_reference/mission/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 머니 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. priority 문자열 열거형 enum {   “free”,   “paid” }  소비 우선순위 지갑에서 통화를 소비할 때, 유료 통화와 무료 통화 중 어느 쪽을 먼저 소비할지를 결정합니다. “free\"로 설정하면 무료 통화(단가=0)가 먼저 소비되고, 그 다음 단가가 높은 유료 통화가 소비됩니다. “paid\"로 설정하면 단가가 높은 유료 통화가 먼저 소비되고, 그 다음 무료 통화가 소비됩니다. 정의 설명 free 무료 통화를 우선해서 사용한다 paid 유료 통화를 우선해서 사용한다 shareFree bool  무료 통화 공유 무료 통화를 모든 지갑 슬롯 간에 공유할지 여부입니다. 활성화하면 무료 통화 잔액이 슬롯 0에서 다른 모든 슬롯으로 동기화되어, 서로 다른 플랫폼의 플레이어가 동일한 무료 통화 풀을 공유할 수 있습니다. 유료 통화는 이 설정과 관계없이 항상 슬롯별로 별도로 관리됩니다. currency 문자열 열거형 enum {   “JPY”,   “USD”,   “TWD” }  통화 종류 가격 설정과 자금결제법 준수 계산에 사용되는 실제 통화입니다. 유료 통화 가치 추적과 환불 의무 계산 시의 측정 단위를 결정합니다. 네임스페이스 생성 후에는 변경할 수 없습니다. 정의 설명 JPY 일본 엔 USD 미국 달러 TWD 대만 달러 appleKey string ~ 1024자 Apple App Store 번들 ID Apple App Store의 구매 영수증을 검증하는 데 사용되는 iOS 앱의 Bundle ID입니다. iOS 기기로부터의 인앱 구매를 받으려면 필요합니다. googleKey string ~ 5120자 Google PlayStore 비밀 키 Google Play의 구매 영수증을 검증하는 데 사용되는 서비스 계정의 비밀 키입니다. Android 기기로부터의 인앱 구매를 받으려면 필요합니다. enableFakeReceipt bool false 가짜 영수증 활성화 테스트 목적으로 Unity Editor가 생성하는 가짜 구매 영수증을 허용할지 여부입니다. 개발/테스트 환경에서만 활성화해야 하며, 부정한 통화 지급을 방지하기 위해 운영 환경에서는 반드시 비활성화해야 합니다. 기본값은 false입니다. createWalletScript ScriptSetting 지갑 생성 시 스크립트 새로운 지갑이 처음 생성될 때 실행되는 스크립트입니다. 지갑은 최초 접근 시 자동으로 생성되므로, 플레이어가 통화 시스템에 처음 접근했을 때 이 스크립트가 트리거됩니다. depositScript ScriptSetting 잔액 충전 시 스크립트 지갑에 통화가 충전될 때 실행되는 스크립트입니다. 유료 통화 충전(스토어 구매)과 무료 통화 지급 양쪽에서 트리거됩니다. withdrawScript ScriptSetting 잔액 소비 시 스크립트 지갑에서 통화가 소비될 때 실행되는 스크립트입니다. 소비 우선순위 설정에 따라 유료 통화 또는 무료 통화가 차감될 때 트리거됩니다. balance double 0.0 0 ~ 281474976710653 미사용 잔액 이 네임스페이스 내 모든 사용자에 걸친 유료 통화의 미사용 잔액 합계로, 설정된 실제 통화 단위로 측정됩니다. 자금결제법 준수를 위해 미이행 의무 총액을 추적하는 데 사용됩니다. 이 값은 충전과 소비가 발생할 때마다 시스템에 의해 자동으로 관리됩니다. logSetting LogSetting 로그 출력 설정 API 요청/응답 로그를 GS2-Log에 출력하기 위한 설정입니다. 설정하면 지갑 조작(충전, 소비, 구매)이 모니터링, 감사, 분석을 위해 로그로 출력됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Wallet 지갑 지갑 내 통화는 유료로 구매한 통화와 무료로 얻은 통화로 크게 나누어 관리됩니다. 유료로 구매한 통화는 다시 구매 시점의 단가별로 관리되어, 서비스가 종료되었을 때의 환불이나 자금결제법에 해당하는 잔액이 존재하는지를 집계할 수 있습니다. 지갑에는 슬롯이 있으며, 슬롯마다 서로 다른 잔액을 관리할 수 있습니다. 플랫폼 간에 잔액을 공유할 수 없는 경우에는 플랫폼마다 다른 슬롯을 사용함으로써 나누어 관리할 수 있습니다. 이때 무료로 얻은 통화는 모든 플랫폼에서 공통된 값을 사용할 수도 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 walletId string ※ ~ 1024자 지갑 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. paid int 0 0 ~ 2147483646 유료 통화 보유량 이 지갑 슬롯 내 유료(구매한) 통화의 합계량입니다. 단가가 0이 아닌 모든 WalletDetail 항목의 합계입니다. 스토어 구매를 통한 충전으로 증가하고, 소비 우선순위에 따라 소비되어 감소합니다. free int 0 0 ~ 2147483646 무료 통화 보유량 이 지갑 슬롯 내 무료(지급된) 통화의 합계량입니다. 단가가 0인 WalletDetail 항목에 해당합니다. 네임스페이스에서 shareFree가 활성화된 경우, 이 값은 슬롯 0에서 모든 지갑 슬롯으로 동기화됩니다. detail List [] 0 ~ 1000 items 지갑 상세 목록 단가(가격 포인트)별 통화 보유 내역입니다. 각 항목은 특정 단가로 취득한 통화 수량을 추적합니다. 무상 통화는 단가 0으로 저장됩니다. 유상 통화 항목은 소비 시 단가 내림차순으로 정렬됩니다. 항목의 수량이 0이 되면 목록에서 자동으로 삭제됩니다. 최대 1000건. shareFree bool false 무상 통화 공유 이 지갑의 무상 통화가 모든 슬롯 간에 공유되는지 여부입니다. 이 값은 지갑 생성 시 네임스페이스 설정에서 상속됩니다. true인 경우, 무상 통화가 슬롯 0에서 다른 모든 지갑 슬롯으로 동기화됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Receipt 영수증 영수증은 결제 이력을 기록하는 엔티티입니다. 결제 이력에는 유료 통화의 증감에 관한 요청뿐만 아니라, 각종 배포 플랫폼에서의 결제 트랜잭션 이력도 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 receiptId string ※ ~ 1024자 영수증 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 transactionId string  ~ 1024자 트랜잭션 ID 이 트랜잭션의 고유 식별자입니다. 스토어 구매의 경우, 플랫폼별 트랜잭션 ID(예: Apple 트랜잭션 ID, Google 주문 ID)에 해당합니다. 충전 및 소비 조작의 경우, 시스템이 생성한 식별자입니다. purchaseToken string ~ 4096자 구매 토큰 Google Play 결제 트랜잭션에서 얻어지는 purchaseToken입니다. Google Play 인앱 구매를 검증하고 승인하는 데 사용됩니다. Google Play 구매 영수증에만 존재합니다. userId string  ~ 128자 사용자ID type 문자열 열거형 enum {   “purchase”,   “deposit”,   “withdraw” }  영수증 종류 이 영수증이 기록하는 트랜잭션의 종류입니다. “purchase\"는 스토어 플랫폼(Apple/Google)의 구매를 기록하고, “deposit\"은 지갑에 통화가 충전되는 것을 기록하며, “withdraw\"는 지갑에서 통화가 소비되는 것을 기록합니다. 종류에 따라 사용 가능한 필드가 다릅니다. 구매 영수증에는 contentsId가 있고, 충전/소비 영수증에는 slot, price, paid, free, total이 있습니다. 정의 설명 purchase 구매 deposit 충전 withdraw 소비 slot int {type} != “purchase” ※ 0 ~ 100000000 슬롯 번호 이 충전 또는 소비 조작의 대상이 된 지갑 슬롯입니다. 충전(deposit) 및 소비(withdraw) 영수증 종류에만 존재합니다. price float {type} != “purchase” ※ 0 ~ 100000.0 단가 이 트랜잭션과 관련된 통화의 단가입니다. 0은 무료 통화를 나타냅니다. 충전(deposit) 및 소비(withdraw) 영수증 종류에만 존재합니다. paid int {type} != “purchase” ※ 0 ~ 2147483646 유료 통화 이 트랜잭션과 관련된 유료 통화의 수량입니다. 충전의 경우 추가된 유료 통화의 수량이며, 소비의 경우 소비된 유료 통화의 수량입니다. 충전(deposit) 및 소비(withdraw) 영수증 종류에만 존재합니다. free int {type} != “purchase” ※ 0 ~ 2147483646 무료 통화 이 트랜잭션과 관련된 무료 통화의 수량입니다. 충전의 경우 추가된 무료 통화의 수량이며, 소비의 경우 소비된 무료 통화의 수량입니다. 충전(deposit) 및 소비(withdraw) 영수증 종류에만 존재합니다. total int {type} != “purchase” ※ 0 ~ 2147483646 합계 이 트랜잭션과 관련된 통화(유료 + 무료)의 총 수량입니다. 충전(deposit) 및 소비(withdraw) 영수증 종류에만 존재합니다. contentsId string {type} == “purchase” ~ 1024자 콘텐츠 ID Apple App Store 또는 Google Play와 같은 스토어 플랫폼에서 판매되는 아이템의 상품 식별자입니다. Apple App Store의 상품 ID 또는 Google Play의 상품 ID에 해당합니다. 구매(purchase) 영수증 종류에만 존재합니다. ※ type이(가) “purchase” 이면 활성화 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 WalletDetail 지갑 상세 정보 특정 단가로 취득한 통화의 수량을 추적하는, 지갑 내 가격 포인트 항목입니다. 무료 통화는 단가 0으로 표시되며, 유료 통화는 실제 구매 비용에 해당하는 양의 단가를 가집니다. 이 세분화를 통해 통화 단위별로 얼마가 지불되었는지 정확히 파악할 수 있어, 정확한 환불 계산과 자금결제법 준수가 가능해집니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 price float  0 ~ 100000.0 단가 구매 시점의 통화 1단위당 실제 가격입니다. 0은 무료 통화를 나타냅니다. 양수 값은 네임스페이스에 설정된 통화(JPY, USD, TWD)로 표시되는 단가를 가진 유료 통화를 나타냅니다. 총 가격 계산(단가 × 수량)과 소비 시 단위당 가격 계산에 사용됩니다. count int  0 ~ 2147483646 보유량 이 단가에서 보유하고 있는 통화의 수량입니다. 충전으로 증가하고 소비로 감소합니다. 수량이 0이 되면 이 상세 항목은 지갑에서 자동으로 삭제됩니다. 소비 시에는 네임스페이스의 소비 우선순위에 따라(단가가 높은 순 또는 무료 우선) 상세 항목에서 통화가 소비됩니다. 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 money . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.DescribeNamespacesRequest ; import io.gs2.money.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Money . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Money . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . describe_namespaces ( money . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 머니 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. priority 문자열 열거형 enum {   “free”,   “paid” }  소비 우선순위 지갑에서 통화를 소비할 때, 유료 통화와 무료 통화 중 어느 쪽을 먼저 소비할지를 결정합니다. “free\"로 설정하면 무료 통화(단가=0)가 먼저 소비되고, 그 다음 단가가 높은 유료 통화가 소비됩니다. “paid\"로 설정하면 단가가 높은 유료 통화가 먼저 소비되고, 그 다음 무료 통화가 소비됩니다. 정의 설명 free 무료 통화를 우선해서 사용한다 paid 유료 통화를 우선해서 사용한다 shareFree bool  무료 통화 공유 무료 통화를 모든 지갑 슬롯 간에 공유할지 여부입니다. 활성화하면 무료 통화 잔액이 슬롯 0에서 다른 모든 슬롯으로 동기화되어, 서로 다른 플랫폼의 플레이어가 동일한 무료 통화 풀을 공유할 수 있습니다. 유료 통화는 이 설정과 관계없이 항상 슬롯별로 별도로 관리됩니다. currency 문자열 열거형 enum {   “JPY”,   “USD”,   “TWD” }  통화 종류 가격 설정과 자금결제법 준수 계산에 사용되는 실제 통화입니다. 유료 통화 가치 추적과 환불 의무 계산 시의 측정 단위를 결정합니다. 네임스페이스 생성 후에는 변경할 수 없습니다. 정의 설명 JPY 일본 엔 USD 미국 달러 TWD 대만 달러 appleKey string ~ 1024자 Apple App Store 번들 ID Apple App Store의 구매 영수증을 검증하는 데 사용되는 iOS 앱의 Bundle ID입니다. iOS 기기로부터의 인앱 구매를 받으려면 필요합니다. googleKey string ~ 5120자 Google PlayStore 비밀 키 Google Play의 구매 영수증을 검증하는 데 사용되는 서비스 계정의 비밀 키입니다. Android 기기로부터의 인앱 구매를 받으려면 필요합니다. enableFakeReceipt bool false 가짜 영수증 활성화 테스트 목적으로 Unity Editor가 생성하는 가짜 구매 영수증을 허용할지 여부입니다. 개발/테스트 환경에서만 활성화해야 하며, 부정한 통화 지급을 방지하기 위해 운영 환경에서는 반드시 비활성화해야 합니다. 기본값은 false입니다. createWalletScript ScriptSetting 지갑 생성 시 스크립트 새로운 지갑이 처음 생성될 때 실행되는 스크립트입니다. 지갑은 최초 접근 시 자동으로 생성되므로, 플레이어가 통화 시스템에 처음 접근했을 때 이 스크립트가 트리거됩니다. depositScript ScriptSetting 잔액 충전 시 스크립트 지갑에 통화가 충전될 때 실행되는 스크립트입니다. 유료 통화 충전(스토어 구매)과 무료 통화 지급 양쪽에서 트리거됩니다. withdrawScript ScriptSetting 잔액 소비 시 스크립트 지갑에서 통화가 소비될 때 실행되는 스크립트입니다. 소비 우선순위 설정에 따라 유료 통화 또는 무료 통화가 차감될 때 트리거됩니다. logSetting LogSetting 로그 출력 설정 API 요청/응답 로그를 GS2-Log에 출력하기 위한 설정입니다. 설정하면 지갑 조작(충전, 소비, 구매)이 모니터링, 감사, 분석을 위해 로그로 출력됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 money . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , Priority : pointy . String ( \"paid\" ), ShareFree : pointy . Bool ( false ), Currency : pointy . String ( \"USD\" ), AppleKey : nil , GoogleKey : nil , EnableFakeReceipt : nil , CreateWalletScript : nil , DepositScript : nil , WithdrawScript : nil , LogSetting : \u0026 money . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withPriority ( \"paid\" ) -\u003e withShareFree ( false ) -\u003e withCurrency ( \"USD\" ) -\u003e withAppleKey ( null ) -\u003e withGoogleKey ( null ) -\u003e withEnableFakeReceipt ( null ) -\u003e withCreateWalletScript ( null ) -\u003e withDepositScript ( null ) -\u003e withWithdrawScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Money\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.CreateNamespaceRequest ; import io.gs2.money.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withPriority ( \"paid\" ) . withShareFree ( false ) . withCurrency ( \"USD\" ) . withAppleKey ( null ) . withGoogleKey ( null ) . withEnableFakeReceipt ( null ) . withCreateWalletScript ( null ) . withDepositScript ( null ) . withWithdrawScript ( null ) . withLogSetting ( new io . gs2 . money . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Money . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithPriority ( \"paid\" ) . WithShareFree ( false ) . WithCurrency ( \"USD\" ) . WithAppleKey ( null ) . WithGoogleKey ( null ) . WithEnableFakeReceipt ( null ) . WithCreateWalletScript ( null ) . WithDepositScript ( null ) . WithWithdrawScript ( null ) . WithLogSetting ( new Gs2 . Gs2Money . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Money . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withPriority ( \"paid\" ) . withShareFree ( false ) . withCurrency ( \"USD\" ) . withAppleKey ( null ) . withGoogleKey ( null ) . withEnableFakeReceipt ( null ) . withCreateWalletScript ( null ) . withDepositScript ( null ) . withWithdrawScript ( null ) . withLogSetting ( new Gs2Money . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . create_namespace ( money . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_priority ( 'paid' ) . with_share_free ( False ) . with_currency ( 'USD' ) . with_apple_key ( None ) . with_google_key ( None ) . with_enable_fake_receipt ( None ) . with_create_wallet_script ( None ) . with_deposit_script ( None ) . with_withdraw_script ( None ) . with_log_setting ( money . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , priority = \"paid\" , shareFree = false , currency = \"USD\" , appleKey = nil , googleKey = nil , enableFakeReceipt = nil , createWalletScript = nil , depositScript = nil , withdrawScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , priority = \"paid\" , shareFree = false , currency = \"USD\" , appleKey = nil , googleKey = nil , enableFakeReceipt = nil , createWalletScript = nil , depositScript = nil , withdrawScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 money . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.GetNamespaceStatusRequest ; import io.gs2.money.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Money . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Money . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . get_namespace_status ( money . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'money' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 money . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.GetNamespaceRequest ; import io.gs2.money.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Money . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Money . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . get_namespace ( money . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 머니 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. priority 문자열 열거형 enum {   “free”,   “paid” }  소비 우선순위 지갑에서 통화를 소비할 때, 유료 통화와 무료 통화 중 어느 쪽을 먼저 소비할지를 결정합니다. “free\"로 설정하면 무료 통화(단가=0)가 먼저 소비되고, 그 다음 단가가 높은 유료 통화가 소비됩니다. “paid\"로 설정하면 단가가 높은 유료 통화가 먼저 소비되고, 그 다음 무료 통화가 소비됩니다. 정의 설명 free 무료 통화를 우선해서 사용한다 paid 유료 통화를 우선해서 사용한다 appleKey string ~ 1024자 Apple App Store 번들 ID Apple App Store의 구매 영수증을 검증하는 데 사용되는 iOS 앱의 Bundle ID입니다. iOS 기기로부터의 인앱 구매를 받으려면 필요합니다. googleKey string ~ 5120자 Google PlayStore 비밀 키 Google Play의 구매 영수증을 검증하는 데 사용되는 서비스 계정의 비밀 키입니다. Android 기기로부터의 인앱 구매를 받으려면 필요합니다. enableFakeReceipt bool false 가짜 영수증 활성화 테스트 목적으로 Unity Editor가 생성하는 가짜 구매 영수증을 허용할지 여부입니다. 개발/테스트 환경에서만 활성화해야 하며, 부정한 통화 지급을 방지하기 위해 운영 환경에서는 반드시 비활성화해야 합니다. 기본값은 false입니다. createWalletScript ScriptSetting 지갑 생성 시 스크립트 새로운 지갑이 처음 생성될 때 실행되는 스크립트입니다. 지갑은 최초 접근 시 자동으로 생성되므로, 플레이어가 통화 시스템에 처음 접근했을 때 이 스크립트가 트리거됩니다. depositScript ScriptSetting 잔액 충전 시 스크립트 지갑에 통화가 충전될 때 실행되는 스크립트입니다. 유료 통화 충전(스토어 구매)과 무료 통화 지급 양쪽에서 트리거됩니다. withdrawScript ScriptSetting 잔액 소비 시 스크립트 지갑에서 통화가 소비될 때 실행되는 스크립트입니다. 소비 우선순위 설정에 따라 유료 통화 또는 무료 통화가 차감될 때 트리거됩니다. logSetting LogSetting 로그 출력 설정 API 요청/응답 로그를 GS2-Log에 출력하기 위한 설정입니다. 설정하면 지갑 조작(충전, 소비, 구매)이 모니터링, 감사, 분석을 위해 로그로 출력됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 money . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , Priority : pointy . String ( \"paid\" ), AppleKey : pointy . String ( \"io.gs2.sample\" ), GoogleKey : pointy . String ( \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAicE6mZuA6w39F+xhKQfn+KJw9AVxLuwsJGS8oTRj8K9IPTfs4BVuVLYkgxz7qA0ltO20X2Xvkf/lRfZJBLlwMa1PihXv96/sipj6FPu7xsqlvvaPmDi5JT5+8XirE33M8ezR5M7QlUoNHOuELT+DGxbnFn1s/A3bGI58SYqLzQvoqrEDGHKfKsCtP5ncX1ZwF8AFvk5WQlK5W3wkkrZXrbJbBsfur+5hWpVg5qS+dXAKSrKPfPmq9Fn11rhMDutGmm8BQ+/fDMz5jiuAVWcSjhEn7HI473es7dquQ7OO4NZJ0R9vkpTiQUzrEdnforr51du0riegjJOLTQtXAKLOIQIDAQAB\" ), EnableFakeReceipt : nil , CreateWalletScript : \u0026 money . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" ), }, DepositScript : \u0026 money . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ), }, WithdrawScript : \u0026 money . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ), }, LogSetting : \u0026 money . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withPriority ( \"paid\" ) -\u003e withAppleKey ( \"io.gs2.sample\" ) -\u003e withGoogleKey ( \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAicE6mZuA6w39F+xhKQfn+KJw9AVxLuwsJGS8oTRj8K9IPTfs4BVuVLYkgxz7qA0ltO20X2Xvkf/lRfZJBLlwMa1PihXv96/sipj6FPu7xsqlvvaPmDi5JT5+8XirE33M8ezR5M7QlUoNHOuELT+DGxbnFn1s/A3bGI58SYqLzQvoqrEDGHKfKsCtP5ncX1ZwF8AFvk5WQlK5W3wkkrZXrbJbBsfur+5hWpVg5qS+dXAKSrKPfPmq9Fn11rhMDutGmm8BQ+/fDMz5jiuAVWcSjhEn7HI473es7dquQ7OO4NZJ0R9vkpTiQUzrEdnforr51du0riegjJOLTQtXAKLOIQIDAQAB\" ) -\u003e withEnableFakeReceipt ( null ) -\u003e withCreateWalletScript (( new \\Gs2\\Money\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) -\u003e withDepositScript (( new \\Gs2\\Money\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) -\u003e withWithdrawScript (( new \\Gs2\\Money\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) -\u003e withLogSetting (( new \\Gs2\\Money\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.UpdateNamespaceRequest ; import io.gs2.money.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withPriority ( \"paid\" ) . withAppleKey ( \"io.gs2.sample\" ) . withGoogleKey ( \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAicE6mZuA6w39F+xhKQfn+KJw9AVxLuwsJGS8oTRj8K9IPTfs4BVuVLYkgxz7qA0ltO20X2Xvkf/lRfZJBLlwMa1PihXv96/sipj6FPu7xsqlvvaPmDi5JT5+8XirE33M8ezR5M7QlUoNHOuELT+DGxbnFn1s/A3bGI58SYqLzQvoqrEDGHKfKsCtP5ncX1ZwF8AFvk5WQlK5W3wkkrZXrbJbBsfur+5hWpVg5qS+dXAKSrKPfPmq9Fn11rhMDutGmm8BQ+/fDMz5jiuAVWcSjhEn7HI473es7dquQ7OO4NZJ0R9vkpTiQUzrEdnforr51du0riegjJOLTQtXAKLOIQIDAQAB\" ) . withEnableFakeReceipt ( null ) . withCreateWalletScript ( new io . gs2 . money . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . withDepositScript ( new io . gs2 . money . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . withWithdrawScript ( new io . gs2 . money . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . withLogSetting ( new io . gs2 . money . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Money . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithPriority ( \"paid\" ) . WithAppleKey ( \"io.gs2.sample\" ) . WithGoogleKey ( \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAicE6mZuA6w39F+xhKQfn+KJw9AVxLuwsJGS8oTRj8K9IPTfs4BVuVLYkgxz7qA0ltO20X2Xvkf/lRfZJBLlwMa1PihXv96/sipj6FPu7xsqlvvaPmDi5JT5+8XirE33M8ezR5M7QlUoNHOuELT+DGxbnFn1s/A3bGI58SYqLzQvoqrEDGHKfKsCtP5ncX1ZwF8AFvk5WQlK5W3wkkrZXrbJbBsfur+5hWpVg5qS+dXAKSrKPfPmq9Fn11rhMDutGmm8BQ+/fDMz5jiuAVWcSjhEn7HI473es7dquQ7OO4NZJ0R9vkpTiQUzrEdnforr51du0riegjJOLTQtXAKLOIQIDAQAB\" ) . WithEnableFakeReceipt ( null ) . WithCreateWalletScript ( new Gs2 . Gs2Money . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . WithDepositScript ( new Gs2 . Gs2Money . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . WithWithdrawScript ( new Gs2 . Gs2Money . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . WithLogSetting ( new Gs2 . Gs2Money . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Money . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withPriority ( \"paid\" ) . withAppleKey ( \"io.gs2.sample\" ) . withGoogleKey ( \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAicE6mZuA6w39F+xhKQfn+KJw9AVxLuwsJGS8oTRj8K9IPTfs4BVuVLYkgxz7qA0ltO20X2Xvkf/lRfZJBLlwMa1PihXv96/sipj6FPu7xsqlvvaPmDi5JT5+8XirE33M8ezR5M7QlUoNHOuELT+DGxbnFn1s/A3bGI58SYqLzQvoqrEDGHKfKsCtP5ncX1ZwF8AFvk5WQlK5W3wkkrZXrbJbBsfur+5hWpVg5qS+dXAKSrKPfPmq9Fn11rhMDutGmm8BQ+/fDMz5jiuAVWcSjhEn7HI473es7dquQ7OO4NZJ0R9vkpTiQUzrEdnforr51du0riegjJOLTQtXAKLOIQIDAQAB\" ) . withEnableFakeReceipt ( null ) . withCreateWalletScript ( new Gs2Money . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" )) . withDepositScript ( new Gs2Money . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . withWithdrawScript ( new Gs2Money . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . withLogSetting ( new Gs2Money . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . update_namespace ( money . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_priority ( 'paid' ) . with_apple_key ( 'io.gs2.sample' ) . with_google_key ( 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAicE6mZuA6w39F+xhKQfn+KJw9AVxLuwsJGS8oTRj8K9IPTfs4BVuVLYkgxz7qA0ltO20X2Xvkf/lRfZJBLlwMa1PihXv96/sipj6FPu7xsqlvvaPmDi5JT5+8XirE33M8ezR5M7QlUoNHOuELT+DGxbnFn1s/A3bGI58SYqLzQvoqrEDGHKfKsCtP5ncX1ZwF8AFvk5WQlK5W3wkkrZXrbJbBsfur+5hWpVg5qS+dXAKSrKPfPmq9Fn11rhMDutGmm8BQ+/fDMz5jiuAVWcSjhEn7HI473es7dquQ7OO4NZJ0R9vkpTiQUzrEdnforr51du0riegjJOLTQtXAKLOIQIDAQAB' ) . with_enable_fake_receipt ( None ) . with_create_wallet_script ( money . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002' )) . with_deposit_script ( money . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004' )) . with_withdraw_script ( money . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006' )) . with_log_setting ( money . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , priority = \"paid\" , appleKey = \"io.gs2.sample\" , googleKey = \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAicE6mZuA6w39F+xhKQfn+KJw9AVxLuwsJGS8oTRj8K9IPTfs4BVuVLYkgxz7qA0ltO20X2Xvkf/lRfZJBLlwMa1PihXv96/sipj6FPu7xsqlvvaPmDi5JT5+8XirE33M8ezR5M7QlUoNHOuELT+DGxbnFn1s/A3bGI58SYqLzQvoqrEDGHKfKsCtP5ncX1ZwF8AFvk5WQlK5W3wkkrZXrbJbBsfur+5hWpVg5qS+dXAKSrKPfPmq9Fn11rhMDutGmm8BQ+/fDMz5jiuAVWcSjhEn7HI473es7dquQ7OO4NZJ0R9vkpTiQUzrEdnforr51du0riegjJOLTQtXAKLOIQIDAQAB\" , enableFakeReceipt = nil , createWalletScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , }, depositScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , }, withdrawScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , priority = \"paid\" , appleKey = \"io.gs2.sample\" , googleKey = \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAicE6mZuA6w39F+xhKQfn+KJw9AVxLuwsJGS8oTRj8K9IPTfs4BVuVLYkgxz7qA0ltO20X2Xvkf/lRfZJBLlwMa1PihXv96/sipj6FPu7xsqlvvaPmDi5JT5+8XirE33M8ezR5M7QlUoNHOuELT+DGxbnFn1s/A3bGI58SYqLzQvoqrEDGHKfKsCtP5ncX1ZwF8AFvk5WQlK5W3wkkrZXrbJbBsfur+5hWpVg5qS+dXAKSrKPfPmq9Fn11rhMDutGmm8BQ+/fDMz5jiuAVWcSjhEn7HI473es7dquQ7OO4NZJ0R9vkpTiQUzrEdnforr51du0riegjJOLTQtXAKLOIQIDAQAB\" , enableFakeReceipt = nil , createWalletScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1001\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1002\" , }, depositScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , }, withdrawScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , }, logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 money . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.DeleteNamespaceRequest ; import io.gs2.money.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Money . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Money . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . delete_namespace ( money . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 money . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.GetServiceVersionRequest ; import io.gs2.money.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Money . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Money . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . get_service_version ( money . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 money . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.DumpUserDataByUserIdRequest ; import io.gs2.money.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Money . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Money . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . dump_user_data_by_user_id ( money . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'money' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 money . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.money.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Money . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Money . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( money . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'money' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 money . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.CleanUserDataByUserIdRequest ; import io.gs2.money.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Money . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Money . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . clean_user_data_by_user_id ( money . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'money' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID의 사용자 데이터 완전 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 money . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.money.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Money . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Money . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( money . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'money' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 money . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.money.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Money . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Money . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( money . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'money' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 money . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.ImportUserDataByUserIdRequest ; import io.gs2.money.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Money . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Money . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . import_user_data_by_user_id ( money . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'money' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 money . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.CheckImportUserDataByUserIdRequest ; import io.gs2.money.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Money . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Money . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( money . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'money' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeWallets 지갑 목록 취득 요청 사용자의 지갑 슬롯에 대한 페이지네이션 목록을 취득합니다. 각 지갑 슬롯은 유료 통화와 무료 통화가 개별적으로 관리되는 독립된 잔액을 가집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 지갑 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . DescribeWallets ( \u0026 money . DescribeWalletsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\DescribeWalletsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e describeWallets ( ( new DescribeWalletsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.DescribeWalletsRequest ; import io.gs2.money.result.DescribeWalletsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { DescribeWalletsResult result = client . describeWallets ( new DescribeWalletsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Wallet \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . DescribeWalletsResult \u003e asyncResult = null ; yield return client . DescribeWallets ( new Gs2 . Gs2Money . Request . DescribeWalletsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . describeWallets ( new Gs2Money . DescribeWalletsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . describe_wallets ( money . DescribeWalletsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.describe_wallets ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money' ) api_result_handler = client.describe_wallets_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeWalletsByUserId 사용자 ID를 지정하여 지갑 목록 취득 지정한 사용자의 지갑 슬롯에 대한 페이지네이션 목록을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 지갑 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . DescribeWalletsByUserId ( \u0026 money . DescribeWalletsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\DescribeWalletsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e describeWalletsByUserId ( ( new DescribeWalletsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.DescribeWalletsByUserIdRequest ; import io.gs2.money.result.DescribeWalletsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { DescribeWalletsByUserIdResult result = client . describeWalletsByUserId ( new DescribeWalletsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Wallet \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . DescribeWalletsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeWalletsByUserId ( new Gs2 . Gs2Money . Request . DescribeWalletsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . describeWalletsByUserId ( new Gs2Money . DescribeWalletsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . describe_wallets_by_user_id ( money . DescribeWalletsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.describe_wallets_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money' ) api_result_handler = client.describe_wallets_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getWallet 지갑 취득 요청 사용자의 지정한 슬롯에 있는 지갑을 유료 통화 및 무료 통화 잔액을 포함하여 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. Result 타입 설명 item Wallet 지갑 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . GetWallet ( \u0026 money . GetWalletRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Slot : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\GetWalletRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e getWallet ( ( new GetWalletRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSlot ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.GetWalletRequest ; import io.gs2.money.result.GetWalletResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { GetWalletResult result = client . getWallet ( new GetWalletRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSlot ( 0 ) ); Wallet item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . GetWalletResult \u003e asyncResult = null ; yield return client . GetWallet ( new Gs2 . Gs2Money . Request . GetWalletRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSlot ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . getWallet ( new Gs2Money . GetWalletRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSlot ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . get_wallet ( money . GetWalletRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_slot ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.get_wallet ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , slot = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.get_wallet_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , slot = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getWalletByUserId 사용자 ID를 지정하여 지갑 취득 지정한 사용자의 지정한 슬롯에 있는 지갑을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Wallet 지갑 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . GetWalletByUserId ( \u0026 money . GetWalletByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Slot : pointy . Int32 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\GetWalletByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e getWalletByUserId ( ( new GetWalletByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSlot ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.GetWalletByUserIdRequest ; import io.gs2.money.result.GetWalletByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { GetWalletByUserIdResult result = client . getWalletByUserId ( new GetWalletByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withTimeOffsetToken ( null ) ); Wallet item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . GetWalletByUserIdResult \u003e asyncResult = null ; yield return client . GetWalletByUserId ( new Gs2 . Gs2Money . Request . GetWalletByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSlot ( 0 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . getWalletByUserId ( new Gs2Money . GetWalletByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . get_wallet_by_user_id ( money . GetWalletByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_slot ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.get_wallet_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.get_wallet_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; depositByUserId 사용자 ID를 지정하여 지갑 잔액에 가산 지정한 사용자의 지갑에 지정한 양의 통화를 추가합니다. 가격이 0인 경우는 무료 통화로, 그 외의 경우는 유료 통화로 취급됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. price float  0 ~ 100000.0 구매 가격 count int  1 ~ 2147483646 지급할 유료 통화 수량 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Wallet 가산 후 지갑 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . DepositByUserId ( \u0026 money . DepositByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Slot : pointy . Int32 ( 0 ), Price : pointy . Float32 ( 120 ), Count : pointy . Int32 ( 50 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\DepositByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e depositByUserId ( ( new DepositByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSlot ( 0 ) -\u003e withPrice ( 120 ) -\u003e withCount ( 50 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.DepositByUserIdRequest ; import io.gs2.money.result.DepositByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { DepositByUserIdResult result = client . depositByUserId ( new DepositByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withPrice ( 120f ) . withCount ( 50 ) . withTimeOffsetToken ( null ) ); Wallet item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . DepositByUserIdResult \u003e asyncResult = null ; yield return client . DepositByUserId ( new Gs2 . Gs2Money . Request . DepositByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSlot ( 0 ) . WithPrice ( 120f ) . WithCount ( 50 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . depositByUserId ( new Gs2Money . DepositByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withPrice ( 120 ) . withCount ( 50 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . deposit_by_user_id ( money . DepositByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_slot ( 0 ) . with_price ( 120 ) . with_count ( 50 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.deposit_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , price = 120 , count = 50 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.deposit_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , price = 120 , count = 50 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; withdraw 지갑에서 잔액 소비 요청 사용자의 지갑에서 지정한 양의 통화를 소비합니다. paidOnly가 false인 경우, 무료 통화가 먼저 소비되고 그다음 유료 통화가 소비됩니다. paidOnly가 true인 경우, 유료 통화만 소비됩니다. 응답에는 소비한 통화의 가격이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. count int  1 ~ 2147483646 소비할 유료 통화 수량 paidOnly bool false 유료 통화만을 대상으로 할지 여부 Result 타입 설명 item Wallet 소비 후 지갑 price float 소비한 통화의 가격 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . Withdraw ( \u0026 money . WithdrawRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Slot : pointy . Int32 ( 0 ), Count : pointy . Int32 ( 50 ), PaidOnly : pointy . Bool ( false ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item price := result . Price use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\WithdrawRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e withdraw ( ( new WithdrawRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSlot ( 0 ) -\u003e withCount ( 50 ) -\u003e withPaidOnly ( false ) ); $item = $result -\u003e getItem (); $price = $result -\u003e getPrice (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.WithdrawRequest ; import io.gs2.money.result.WithdrawResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { WithdrawResult result = client . withdraw ( new WithdrawRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSlot ( 0 ) . withCount ( 50 ) . withPaidOnly ( false ) ); Wallet item = result . getItem (); float price = result . getPrice (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . WithdrawResult \u003e asyncResult = null ; yield return client . Withdraw ( new Gs2 . Gs2Money . Request . WithdrawRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSlot ( 0 ) . WithCount ( 50 ) . WithPaidOnly ( false ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var price = result . Price ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . withdraw ( new Gs2Money . WithdrawRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSlot ( 0 ) . withCount ( 50 ) . withPaidOnly ( false ) ); const item = result . getItem (); const price = result . getPrice (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . withdraw ( money . WithdrawRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_slot ( 0 ) . with_count ( 50 ) . with_paid_only ( False ) ) item = result . item price = result . price except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.withdraw ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , slot = 0 , count = 50 , paidOnly = false , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; price = result.price ; client = gs2 ( 'money' ) api_result_handler = client.withdraw_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , slot = 0 , count = 50 , paidOnly = false , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; price = result.price ; withdrawByUserId 사용자 ID를 지정하여 지갑에서 잔액 소비 지정한 사용자의 지갑에서 지정한 양의 통화를 소비합니다. paidOnly가 false인 경우, 무료 통화가 먼저 소비되고 그다음 유료 통화가 소비됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. count int  1 ~ 2147483646 소비할 유료 통화 수량 paidOnly bool false 유료 통화만을 대상으로 할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Wallet 소비 후 지갑 price float 소비한 통화의 가격 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . WithdrawByUserId ( \u0026 money . WithdrawByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Slot : pointy . Int32 ( 0 ), Count : pointy . Int32 ( 50 ), PaidOnly : pointy . Bool ( false ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item price := result . Price use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\WithdrawByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e withdrawByUserId ( ( new WithdrawByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSlot ( 0 ) -\u003e withCount ( 50 ) -\u003e withPaidOnly ( false ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $price = $result -\u003e getPrice (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.WithdrawByUserIdRequest ; import io.gs2.money.result.WithdrawByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { WithdrawByUserIdResult result = client . withdrawByUserId ( new WithdrawByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withCount ( 50 ) . withPaidOnly ( false ) . withTimeOffsetToken ( null ) ); Wallet item = result . getItem (); float price = result . getPrice (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . WithdrawByUserIdResult \u003e asyncResult = null ; yield return client . WithdrawByUserId ( new Gs2 . Gs2Money . Request . WithdrawByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSlot ( 0 ) . WithCount ( 50 ) . WithPaidOnly ( false ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var price = result . Price ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . withdrawByUserId ( new Gs2Money . WithdrawByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withCount ( 50 ) . withPaidOnly ( false ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const price = result . getPrice (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . withdraw_by_user_id ( money . WithdrawByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_slot ( 0 ) . with_count ( 50 ) . with_paid_only ( False ) . with_time_offset_token ( None ) ) item = result . item price = result . price except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.withdraw_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , count = 50 , paidOnly = false , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; price = result.price ; client = gs2 ( 'money' ) api_result_handler = client.withdraw_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , count = 50 , paidOnly = false , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; price = result.price ; describeReceipts 영수증 목록 취득 지정한 날짜 범위 내의 구매 영수증에 대한 페이지네이션 목록을 취득합니다. 사용자 ID와 지갑 슬롯으로 필터링할 수 있습니다. 구매 이력 감사나 트랜잭션 검증에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID slot int 0 ~ 100000000 슬롯 begin long 현재 시각으로부터 30일 전의 절대 시각 검색 시작 일시 end long 현재 시각 검색 종료 일시 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 영수증 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . DescribeReceipts ( \u0026 money . DescribeReceiptsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Slot : pointy . Int32 ( 0 ), Begin : nil , End : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\DescribeReceiptsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e describeReceipts ( ( new DescribeReceiptsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSlot ( 0 ) -\u003e withBegin ( null ) -\u003e withEnd ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.DescribeReceiptsRequest ; import io.gs2.money.result.DescribeReceiptsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { DescribeReceiptsResult result = client . describeReceipts ( new DescribeReceiptsRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withBegin ( null ) . withEnd ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Receipt \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . DescribeReceiptsResult \u003e asyncResult = null ; yield return client . DescribeReceipts ( new Gs2 . Gs2Money . Request . DescribeReceiptsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSlot ( 0 ) . WithBegin ( null ) . WithEnd ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . describeReceipts ( new Gs2Money . DescribeReceiptsRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withBegin ( null ) . withEnd ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . describe_receipts ( money . DescribeReceiptsRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_slot ( 0 ) . with_begin ( None ) . with_end ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.describe_receipts ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , begin = nil , end = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money' ) api_result_handler = client.describe_receipts_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , begin = nil , end = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getByUserIdAndTransactionId 사용자 ID와 트랜잭션 ID를 지정하여 영수증 취득 지정한 사용자의 트랜잭션 ID로 특정 구매 영수증을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID transactionId string  ~ 1024자 트랜잭션 ID 이 트랜잭션의 고유 식별자입니다. 스토어 구매의 경우, 플랫폼별 트랜잭션 ID(예: Apple 트랜잭션 ID, Google 주문 ID)에 해당합니다. 충전 및 소비 조작의 경우, 시스템이 생성한 식별자입니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Receipt 영수증 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . GetByUserIdAndTransactionId ( \u0026 money . GetByUserIdAndTransactionIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TransactionId : pointy . String ( \"transaction-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\GetByUserIdAndTransactionIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e getByUserIdAndTransactionId ( ( new GetByUserIdAndTransactionIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTransactionId ( \"transaction-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.GetByUserIdAndTransactionIdRequest ; import io.gs2.money.result.GetByUserIdAndTransactionIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { GetByUserIdAndTransactionIdResult result = client . getByUserIdAndTransactionId ( new GetByUserIdAndTransactionIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"transaction-0001\" ) . withTimeOffsetToken ( null ) ); Receipt item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . GetByUserIdAndTransactionIdResult \u003e asyncResult = null ; yield return client . GetByUserIdAndTransactionId ( new Gs2 . Gs2Money . Request . GetByUserIdAndTransactionIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTransactionId ( \"transaction-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . getByUserIdAndTransactionId ( new Gs2Money . GetByUserIdAndTransactionIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTransactionId ( \"transaction-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . get_by_user_id_and_transaction_id ( money . GetByUserIdAndTransactionIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_transaction_id ( 'transaction-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.get_by_user_id_and_transaction_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , transactionId = \"transaction-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.get_by_user_id_and_transaction_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , transactionId = \"transaction-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; recordReceipt 영수증 기록 스토어 플랫폼(Apple App Store / Google Play)으로부터의 구매 영수증을 기록·검증합니다. 부정 방지를 위해 플랫폼 서버에 대해 영수증이 검증됩니다. 재전송 공격 방지를 위해 중복된 영수증은 거부됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID contentsId string  ~ 1024자 스토어 플랫폼에서 판매되는 콘텐츠 ID receipt string  ~ 524288자 영수증 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Receipt 기록한 영수증 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . RecordReceipt ( \u0026 money . RecordReceiptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ContentsId : pointy . String ( \"contents-0001\" ), Receipt : pointy . String ( \"receipt...\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\RecordReceiptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e recordReceipt ( ( new RecordReceiptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withContentsId ( \"contents-0001\" ) -\u003e withReceipt ( \"receipt...\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.RecordReceiptRequest ; import io.gs2.money.result.RecordReceiptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { RecordReceiptResult result = client . recordReceipt ( new RecordReceiptRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withContentsId ( \"contents-0001\" ) . withReceipt ( \"receipt...\" ) . withTimeOffsetToken ( null ) ); Receipt item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . RecordReceiptResult \u003e asyncResult = null ; yield return client . RecordReceipt ( new Gs2 . Gs2Money . Request . RecordReceiptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithContentsId ( \"contents-0001\" ) . WithReceipt ( \"receipt...\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . recordReceipt ( new Gs2Money . RecordReceiptRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withContentsId ( \"contents-0001\" ) . withReceipt ( \"receipt...\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . record_receipt ( money . RecordReceiptRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_contents_id ( 'contents-0001' ) . with_receipt ( 'receipt...' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.record_receipt ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , contentsId = \"contents-0001\" , receipt = \"receipt...\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.record_receipt_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , contentsId = \"contents-0001\" , receipt = \"receipt...\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; revertRecordReceipt 사용자 ID를 지정하여 영수증 기록 삭제 트랜잭션 ID를 추출하여 해당하는 레코드를 삭제함으로써, 이전에 기록된 영수증을 취소합니다. 스토어 플랫폼으로부터의 환불이나 차지백 처리에 사용합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID receipt string  ~ 524288자 영수증 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Receipt 기록한 영수증 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money . Gs2MoneyRestClient { Session : \u0026 session , } result , err := client . RevertRecordReceipt ( \u0026 money . RevertRecordReceiptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Receipt : pointy . String ( \"receipt...\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money\\Gs2MoneyRestClient ; use Gs2\\Money\\Request\\RevertRecordReceiptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2MoneyRestClient ( $session ); try { $result = $client -\u003e revertRecordReceipt ( ( new RevertRecordReceiptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withReceipt ( \"receipt...\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money.rest.Gs2MoneyRestClient ; import io.gs2.money.request.RevertRecordReceiptRequest ; import io.gs2.money.result.RevertRecordReceiptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2MoneyRestClient client = new Gs2MoneyRestClient ( session ); try { RevertRecordReceiptResult result = client . revertRecordReceipt ( new RevertRecordReceiptRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withReceipt ( \"receipt...\" ) . withTimeOffsetToken ( null ) ); Receipt item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2MoneyRestClient ( session ); AsyncResult Gs2 . Gs2Money . Result . RevertRecordReceiptResult \u003e asyncResult = null ; yield return client . RevertRecordReceipt ( new Gs2 . Gs2Money . Request . RevertRecordReceiptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithReceipt ( \"receipt...\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money from '@/gs2/money' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money . Gs2MoneyRestClient ( session ); try { const result = await client . revertRecordReceipt ( new Gs2Money . RevertRecordReceiptRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withReceipt ( \"receipt...\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money . Gs2MoneyRestClient ( session ) try : result = client . revert_record_receipt ( money . RevertRecordReceiptRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_receipt ( 'receipt...' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money' ) api_result = client.revert_record_receipt ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , receipt = \"receipt...\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money' ) api_result_handler = client.revert_record_receipt_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , receipt = \"receipt...\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Money SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Money SDK API 레퍼런스","url":"/ko/api_reference/money/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 재화의 입금·출금 시 사용되는 분산 트랜잭션의 설정입니다. currencyUsagePriority 문자열 열거형 enum {   “PrioritizeFree”,   “PrioritizePaid” }  소비 우선순위 지갑에서 출금할 때 유상 재화와 무상 재화 중 어느 것을 먼저 소비할지를 결정합니다. “PrioritizeFree\"는 무상 재화를 우선하고, “PrioritizePaid\"는 유상 재화를 우선합니다. 정의 설명 PrioritizeFree 무료 통화를 우선해서 사용한다 PrioritizePaid 유료 통화를 우선해서 사용한다 sharedFreeCurrency bool  무상 재화를 다른 슬롯과 공유할지 여부 활성화하면 무상 재화 잔액이 모든 지갑 슬롯(플랫폼) 간에 공유됩니다. 유상 재화는 슬롯별로 분리된 상태로 유지됩니다. 이 설정은 네임스페이스 생성 시에만 설정할 수 있으며, 이후에는 변경할 수 없습니다. platformSetting PlatformSetting  스토어 플랫폼 설정 지원되는 각 스토어 플랫폼(Apple App Store, Google Play, 테스트용 Fake)의 설정입니다. 각 플랫폼에서의 영수증 검증에 필요한 인증 정보와 키를 포함합니다. depositBalanceScript ScriptSetting 지갑 잔액을 가산했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - deposit withdrawBalanceScript ScriptSetting 지갑 잔액을 소비했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - withdraw verifyReceiptScript ScriptSetting 영수증 검증을 실행했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - verifyReceipt subscribeScript string ~ 1024자 기간 결제를 신규 계약할 때 실행할 GS2-Script 스크립트 GRN(사용자 연결 변경 시에는 호출되지 않음/한 번 계약이 실효된 후 다시 계약한 경우에도 호출됨) Script 트리거 레퍼런스 - subscribe renewScript string ~ 1024자 기간 결제를 갱신할 때 실행할 GS2-Script 스크립트 GRN Script 트리거 레퍼런스 - renew unsubscribeScript string ~ 1024자 기간 결제를 해지할 때 실행할 GS2-Script 스크립트 GRN(사용자 연결 변경 시에는 호출되지 않음) Script 트리거 레퍼런스 - unsubscribe takeOverScript ScriptSetting 기간 결제에 연결된 사용자를 변경할 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - takeOver changeSubscriptionStatusNotification NotificationSetting 기간 결제의 계약 상태가 변화했을 때의 푸시 알림 구독 상태가 변화했을 때(활성화, 갱신, 해지, 만료, 취소 등) GS2-Gateway를 통해 전송되는 푸시 알림 설정입니다. 게임 클라이언트가 구독 상태 변화에 실시간으로 대응할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 이 네임스페이스에 대한 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 입금, 출금, 영수증 검증, 구독 이벤트의 추적에 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Wallet 지갑 지갑 내 통화는 유료로 구매한 통화와 무료로 얻은 통화로 크게 나누어 관리됩니다. 유료로 구매한 통화는 다시 구매 시점의 단가별로 관리되어, 서비스가 종료되었을 때의 환불이나 자금결제법에 해당하는 잔액이 존재하는지를 집계할 수 있습니다. 지갑에는 슬롯이 있으며, 슬롯마다 서로 다른 잔액을 관리할 수 있습니다. 플랫폼 간에 잔액을 공유할 수 없는 경우에는 플랫폼마다 다른 슬롯을 사용함으로써 나누어 관리할 수 있습니다. 이때 무료로 얻은 통화는 모든 플랫폼에서 공통된 값을 사용할 수도 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 walletId string ※ ~ 1024자 지갑 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). summary WalletSummary  지갑 상태 지갑의 현재 잔액 요약으로, 유료 통화, 무료 통화, 합계 금액으로 나누어 표시됩니다. 입금 트랜잭션으로부터 산출됩니다. depositTransactions List [] 0 ~ 1000 items 입금 트랜잭션 리스트 이 지갑으로의 모든 입금 기록입니다. 각 트랜잭션은 구매 가격, 통화 코드, 수량, 입금 일시를 추적합니다. 유료 입금(가격 \u003e 0)은 환불 계산 및 법규제 대응을 위해 단가별로 관리됩니다. sharedFreeCurrency bool  무료 통화 공유 여부 이 지갑의 무료 통화가 모든 슬롯 간에 공유되는지 여부를 나타냅니다. 지갑 생성 시 네임스페이스 설정으로부터 상속됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Event 이벤트 이벤트는 결제 이력을 기록하는 엔티티입니다. 결제 이력에는 과금 통화의 증감에 관한 요청뿐 아니라 각종 배포 플랫폼에서의 결제 트랜잭션 이력도 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 eventId string ※ ~ 1024자 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 transactionId string  ~ 1024자 트랜잭션 ID 이 결제 이벤트의 고유 식별자입니다. 영수증 검증 이벤트의 경우 스토어 플랫폼의 트랜잭션 ID에 해당합니다. userId string  ~ 128자 사용자ID eventType 문자열 열거형 enum {   “VerifyReceipt”,   “Deposit”,   “Withdraw”,   “Refund” }  이벤트 종류 결제 이벤트의 종류입니다. “VerifyReceipt\"는 스토어의 영수증 검증을, “Deposit\"은 통화의 추가를, “Withdraw\"는 통화의 소비를, “Refund\"는 환불 처리를 기록합니다. 정의 설명 VerifyReceipt 영수증 검증 Deposit 충전 Withdraw 소비 Refund 환불 완료 verifyReceiptEvent VerifyReceiptEvent 영수증 검증 이벤트 영수증 검증 이벤트의 상세 정보입니다. eventType이 “VerifyReceipt\"인 경우에 설정됩니다. 스토어 콘텐츠 이름, 플랫폼, 플랫폼별 검증 결과를 포함합니다. depositEvent DepositEvent 입금 이벤트 입금 이벤트의 상세 정보입니다. eventType이 “Deposit\"인 경우에 설정됩니다. 지갑 슬롯, 입금 트랜잭션, 입금 후 지갑 상태를 포함합니다. withdrawEvent WithdrawEvent 출금 이벤트 출금 이벤트의 상세 정보입니다. eventType이 “Withdraw\"인 경우에 설정됩니다. 지갑 슬롯, 출금 상세 정보, 출금 후 지갑 상태를 포함합니다. refundEvent RefundEvent 환불 이벤트 환불 이벤트의 상세 정보입니다. eventType이 “Refund\"인 경우에 설정됩니다. 스토어 콘텐츠 이름, 플랫폼, 플랫폼별 환불 정보를 포함합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SubscribeTransaction 구독 구매 정보 스토어 플랫폼으로부터의 구독 구매 레코드를 나타냅니다. 유효, 트라이얼, 초회 할인, 유예 기간, 해지, 기한 만료, 취소 등 라이프사이클을 통한 상세한 구독 상태를 추적합니다. 각 트랜잭션은 특정 스토어 플랫폼과 사용자에 연결됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeTransactionId string ※ ~ 1024자 구독 트랜잭션 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 transactionId string  ~ 1024자 트랜잭션 ID 스토어 플랫폼에 의해 할당된 고유한 트랜잭션 식별자입니다. 동일 구매의 중복 처리를 방지하는 데 사용됩니다. store 문자열 열거형 enum {   “AppleAppStore”,   “GooglePlay”,   “fake” }  스토어 구매가 이루어진 스토어 플랫폼입니다. 영수증 검증에 사용되는 검증 방법을 결정합니다. 정의 설명 AppleAppStore Apple App Store GooglePlay Google Play fake Fake userId string ~ 128자 사용자ID statusDetail 문자열 열거형 enum {   “active@active”,   “active@converted_from_trial”,   “active@in_trial”,   “active@in_intro_offer”,   “grace@canceled”,   “grace@grace_period”,   “grace@on_hold”,   “inactive@expired”,   “inactive@revoked” }  상태 상세한 구독 상태입니다. 간략 카테고리(active/grace/inactive) 뒤에 구체적인 상태가 이어집니다. active 상태는 구독을 사용할 수 있음을, grace 상태는 결제에 문제가 있지만 일시적으로 이용 가능함을, inactive 상태는 구독이 더 이상 유효하지 않음을 나타냅니다. 정의 설명 active@active 유효 active@converted_from_trial 무료 체험판이 종료되고 유료 플랜으로 전환됨 active@in_trial 무료 체험판 이용 중 active@in_intro_offer 최초 할인 기간 중 grace@canceled 사용자가 수동으로 해지함 grace@grace_period 결제가 실패했지만 유예 기간 이내 grace@on_hold 결제가 실패했으며, 일정 기간 내에 결제가 완료되지 않으면 이용이 제한됨 inactive@expired 구독이 만료됨 inactive@revoked 환불 등으로 강제로 취소됨 expiresAt long  유효기간 이 구독 트랜잭션이 만료되는 일시입니다. 스토어 플랫폼에 의해 구독이 갱신되면 함께 업데이트됩니다. lastAllocatedAt long 마지막으로 사용자에게 할당된 일시 이 구독 트랜잭션이 마지막으로 사용자에게 할당된 일시입니다. reallocateSpanDays와 함께 사용되어 구독을 다른 사용자에게 재할당할 수 있는지 여부를 판단하는 데 사용됩니다. lastTakeOverAt long 마지막으로 대상 사용자가 전환된 일시 이 구독에 연결된 사용자가 마지막으로 변경(인계)된 일시입니다. 구독의 계정 이전 이력을 추적합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SubscriptionStatus 구독 계약 상태 특정 구독 콘텐츠에 대한 사용자의 구독 계약 상태를 추적합니다. 상세한 구독 트랜잭션 상태로부터 도출된 간이 유효/무효 상태와 유효기간, 관련 구독 트랜잭션 목록을 제공합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string ~ 128자 사용자ID contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 status 문자열 열거형 enum {   “active”,   “inactive” }  상태 간이 구독 상태입니다. “active\"는 유효, 트라이얼, 초회 할인, 유예 기간 상태를 포함합니다. “inactive\"는 기한 만료와 취소 상태를 포함합니다. 정의 설명 active 유효 inactive 비활성 expiresAt long  유효기간 구독이 만료되는 일시입니다. 구독이 갱신되거나 상태가 변경될 때 업데이트됩니다. detail List [] 0 ~ 100 items 계약 상태 상세 정보 이 구독과 관련된 구독 트랜잭션 목록입니다. 각 트랜잭션은 스토어 플랫폼의 구매 레코드로, 상세한 상태 정보(유효, 트라이얼, 유예 기간, 기한 만료, 취소 등)를 가집니다. RefundHistory 환불 이력 정보 환불 이벤트를 날짜, 사용자, 환불 상세 정보와 함께 기록합니다. 스토어 플랫폼(Apple App Store, Google Play)에서 처리된 환불 트랜잭션을 추적합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 refundHistoryId string ※ ~ 1024자 구독 트랜잭션 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 transactionId string  ~ 1024자 트랜잭션 ID 스토어 플랫폼에 의해 할당된 고유한 트랜잭션 식별자입니다. 동일 구매의 중복 처리를 방지하는 데 사용됩니다. year int  2000 ~ 3000 년 month int  1 ~ 12 월 day int  1 ~ 31 일 userId string ~ 128자 사용자ID detail RefundEvent  환불 이벤트 정보 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 DailyTransactionHistory 일일 거래 이력 일별 거래 데이터를 집계합니다. 통화 코드별 입금 총액(매출), 출금 총액(소비), 발행 통화 수, 소비 통화 수를 포함합니다. 재무 보고 및 모니터링에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 dailyTransactionHistoryId string ※ ~ 1024자 일일 거래 내역 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 year int  2000 ~ 3000 년 month int  1 ~ 12 월 day int  1 ~ 31 일 currency string  ~ 8자 통화 코드 depositAmount double 0 0 ~ 281474976710654 매출 총액 이 날 입금된 실제 금액(매출)의 합계이며, 지정된 통화로 표시됩니다. withdrawAmount double 0 0 ~ 281474976710654 소비 총액 이 날 소비(출금)된 통화의 실제 금액 환산 합계이며, 소비된 각 입금 트랜잭션의 단가로부터 산출됩니다. issueCount long 0 0 ~ 9223372036854775805 발행 수량 이 날 입금(발행)된 가상 통화의 총 단위 수이며, 유상 통화와 무상 통화를 모두 포함합니다. consumeCount long 0 0 ~ 9223372036854775805 소비 수량 이 날 소비(출금)된 가상 통화의 총 단위 수입니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 UnusedBalance 미사용 잔액 통화별 과금 통화의 미사용 잔액을 보유하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 unusedBalanceId string ※ ~ 1024자 미사용 잔액 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 currency string  ~ 8자 통화 코드 미사용 잔액이 추적되는 ISO 통화 코드(예: “JPY”, “USD”)입니다. balance double  0 ~ 16777214 미사용 잔액 전체 사용자에 걸친 유상 통화의 미사용 총액이며, 지정된 통화로 표시됩니다. 자금결제법 등 유사 규제 준수에 사용됩니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 StoreContentModel 스토어 콘텐츠 모델 다양한 스토어 플랫폼의 콘텐츠를 저장하는 모델입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 storeContentModelId string ※ ~ 1024자 스토어 콘텐츠 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스토어 콘텐츠 모델 이름 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. appleAppStore AppleAppStoreContent Apple App Store의 콘텐츠 이 스토어 콘텐츠의 Apple App Store 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. googlePlay GooglePlayContent Google Play의 콘텐츠 이 스토어 콘텐츠의 Google Play 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. StoreSubscriptionContentModel 스토어 구독 콘텐츠 모델 다양한 스토어 플랫폼의 구독 콘텐츠를 저장하는 모델입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 storeSubscriptionContentModelId string ※ ~ 1024자 구독 콘텐츠 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스토어 구독 콘텐츠 모델 이름 metadata string ~ 1024자 메타데이터 scheduleNamespaceId string  ~ 1024자 구독 기간을 연동시킬 GS2-Schedule의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN triggerName string  ~ 128자 구독 기간을 반영하는 트리거 이름 구독의 유효 기간을 반영하기 위해 실행되는 GS2-Schedule의 트리거 이름입니다. 트리거의 지속 시간은 구독의 유효 기한으로 설정됩니다. triggerExtendMode 문자열 열거형 enum {   “just”,   “rollupHour” } “just” 구독 기간을 트리거에 반영할 때의 모드 구독의 유효 기한을 트리거의 지속 시간에 어떻게 매핑할지를 제어합니다. “just\"는 구독 기간을 그대로 사용합니다. “rollupHour\"는 지정한 시각(UTC)까지 연장하여 하루 중간에 만료되는 것을 방지합니다. 정의 설명 just 그대로 구독 기간을 반영 rollupHour 다음 날짜 변경 시각까지 연장하여 구독 기간을 반영 rollupHour int {triggerExtendMode} == “rollupHour” 0 0 ~ 23 날짜 변경 시각(UTC) triggerExtendMode가 “rollupHour\"인 경우, 구독 기간은 유효 기한일의 이 시각(0~23, UTC)까지 연장됩니다. 사용자의 플레이 세션 중에 구독이 만료되는 것을 방지합니다. ※ triggerExtendMode이(가) “rollupHour” 이면 활성화 reallocateSpanDays int 30 0 ~ 365 구독 계약 정보를 다른 사용자에게 할당할 수 있게 되는 기간(일) 마지막 할당 이후, 구독 계약을 다른 사용자에게 재할당할 수 있게 되기까지의 일수입니다. 사용자가 계정을 변경할 때의 부정 이용을 방지하기 위해 구독 이전에 대기 기간을 둡니다. appleAppStore AppleAppStoreSubscriptionContent Apple App Store 콘텐츠 이 구독 콘텐츠의 Apple App Store 구독 정보(구독 그룹 ID)입니다. googlePlay GooglePlaySubscriptionContent Google Play 콘텐츠 이 구독 콘텐츠의 Google Play 구독 정보(프로덕트 ID)입니다. Receipt 스토어 플랫폼의 영수증 스토어 플랫폼(Apple App Store, Google Play, 또는 테스트용 Fake)으로부터의 구매 영수증을 나타냅니다. 서버 사이드 영수증 검증에 필요한 트랜잭션 ID와 페이로드 데이터를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 Store 문자열 열거형 enum {   “AppleAppStore”,   “GooglePlay”,   “fake” }  스토어 구매가 이루어진 스토어 플랫폼입니다. 영수증 검증에 사용되는 검증 방법을 결정합니다. 정의 설명 AppleAppStore Apple App Store GooglePlay Google Play fake Fake TransactionID string  ~ 1024자 트랜잭션 ID 스토어 플랫폼에 의해 할당된 고유한 트랜잭션 식별자입니다. 동일 구매의 중복 처리를 방지하는 데 사용됩니다. Payload string  ~ 1048576자 페이로드 스토어 플랫폼으로부터의 영수증 데이터입니다. 형식은 플랫폼에 따라 다릅니다. Apple App Store의 경우 트랜잭션 영수증이며, Google Play의 경우 구매 토큰 및 관련 데이터입니다. PlatformSetting 스토어 플랫폼 설정 지원되는 모든 스토어 플랫폼의 설정을 통합합니다. Apple App Store, Google Play, Fake(Unity Editor에서의 테스트용) 설정을 포함합니다. 각 플랫폼 설정에는 영수증 검증에 필요한 인증 정보와 키가 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 appleAppStore AppleAppStoreSetting Apple App Store 설정 Apple App Store 영수증 검증에 사용하는 인증 정보입니다. 번들 ID, 공유 비밀 키, Issuer ID, 키 ID, 비공개 키를 포함합니다. googlePlay GooglePlaySetting Google Play 설정 Google Play 영수증 검증에 사용하는 인증 정보입니다. 패키지 이름과 서명 검증용 공개 키를 포함합니다. fake FakeSetting Fake(Unity Editor) 설정 개발 및 테스트 중에 Unity Editor가 생성하는 가짜 영수증을 수용하기 위한 설정입니다. AppleAppStoreSetting Apple App Store 설정 Apple App Store 영수증 검증을 위한 설정입니다. Apple의 영수증 검증 서버와 통신하는 데 필요한 인증 정보를 포함하며, 번들 ID, 공유 비밀 키, App Store Connect의 Issuer ID, 키 ID, 비밀 키가 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 bundleId string ~ 1024자 Apple App Store 번들 ID sharedSecretKey string ~ 1024자 AppStore Connect에서 발급한 영수증의 암호화에 사용되는 공유 비밀 키 issuerId string ~ 1024자 AppStore Connect에 등록된 인앱 결제의 Issuer ID keyId string ~ 1024자 Apple에 등록된 키 ID privateKeyPem string ~ 10240자 Apple로부터 받은 비밀 키 GooglePlaySetting Google Play 설정 Google Play 영수증 검증을 위한 설정입니다. Google Play의 구매 서명을 검증하는 데 필요한 패키지 이름과 공개 키를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 packageName string ~ 5120자 Google Play에서 배포하는 패키지 이름 publicKey string ~ 5120자 서명 검증에 사용하는 공개 키 FakeSetting 디버그용 가짜 플랫폼 설정 개발 중 Unity Editor가 생성하는 가짜 영수증 처리에 관한 설정입니다. 가짜 영수증을 허용할지 거부할지를 제어하여, 실제 스토어 플랫폼을 사용하지 않고도 인앱 결제 흐름을 테스트할 수 있도록 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 acceptFakeReceipt 문자열 열거형 enum {   “Accept”,   “Reject” } “Reject” Unity Editor가 출력하는 가짜 영수증으로 결제할 수 있도록 할지 여부 가짜 영수증의 허용 여부를 제어합니다. 개발·테스트 중에는 “Accept\"로 설정하고, 프로덕션 환경에서는 부정한 재화 입금을 방지하기 위해 “Reject\"로 설정하세요. 정의 설명 Accept 허용 Reject 거부 WalletSummary 지갑 상태 지갑의 통화 잔액을 요약해서 보여주며, 유상 금액과 무상 금액을 구분합니다. 지갑 내 모든 입금 트랜잭션을 가격을 기준으로 집계하여 산출됩니다(가격 \u003e 0은 유상, 가격 = 0은 무상). 상세 타입 활성화 조건 필수 기본값 값 제한 설명 paid int 0 0 ~ 2147483646 유상 통화 실제 돈으로 구매된 통화의 합계량입니다(가격 \u003e 0인 입금 트랜잭션). free int 0 0 ~ 2147483646 무상 통화 무상으로 획득한 통화의 합계량입니다(가격 = 0인 입금 트랜잭션). 로그인 보너스나 이벤트 보상 등이 포함됩니다. total int 0 0 ~ 2147483646 총수 통화 잔액의 합계(유상 + 무상)입니다. 지갑에서 이용 가능한 전체 수량을 나타냅니다. DepositTransaction 입금 트랜잭션 지갑 내 단일 입금 레코드를 나타냅니다. 유상 입금(가격 \u003e 0)은 정확한 환불 계산과 자금결제법 준수를 위해 단가별로 추적됩니다. 무상 입금(가격 = 0)은 별도로 추적됩니다. 출금 시에는 네임스페이스의 재화 소비 우선순위에 기반하여 입금 트랜잭션이 소비됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 price double  0.0 ~ 100000000.0 구매 가격 이 입금에 대해 현지 통화로 지급된 실제 금액입니다. 0은 무료 통화를 나타냅니다. 환불 목적의 단가 계산에 사용됩니다. currency string {price} \u003e 0 ※ ~ 8자 통화 코드 실제 결제의 ISO 통화 코드(예: “JPY”, “USD”)입니다. 유료 입금(가격 \u003e 0)의 경우에만 적용됩니다. ※ price이(가) 0 보다 크면 필수 count int  0 ~ 2147483646 과금 통화 수량 이 입금에서의 가상 통화 단위 수입니다. 지갑에서 출금되면 감소합니다. depositedAt long 입금 일시 이 입금이 이루어진 일시입니다. VerifyReceiptEvent 영수증 검증 이벤트 스토어 영수증 검증의 상세 정보를 기록합니다. 검증된 스토어 콘텐츠, 사용된 플랫폼, 플랫폼별 검증 결과를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 contentName string  ~ 128자 스토어 콘텐츠 모델 이름 platform 문자열 열거형 enum {   “AppleAppStore”,   “GooglePlay”,   “fake” }  스토어 플랫폼 영수증이 발행된 스토어 플랫폼입니다. 어떤 검증 흐름이 사용되었는지를 결정합니다. 정의 설명 AppleAppStore Apple App Store GooglePlay Google Play fake Fake appleAppStoreVerifyReceiptEvent AppleAppStoreVerifyReceiptEvent Apple App Store의 영수증 검증 이벤트 Apple App Store로부터의 검증 결과입니다. 환경(sandbox 또는 production) 정보를 포함합니다. platform이 “AppleAppStore\"인 경우에 설정됩니다. googlePlayVerifyReceiptEvent GooglePlayVerifyReceiptEvent Google Play의 영수증 검증 이벤트 Google Play로부터의 검증 결과입니다. 구매 토큰을 포함합니다. platform이 “GooglePlay\"인 경우에 설정됩니다. DepositEvent 입금 이벤트 지갑에 대한 재화 입금의 상세 정보를 기록합니다. 입금 트랜잭션과 입금 후 지갑의 상태를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). depositTransactions List [] 0 ~ 1000 items 입금 트랜잭션 리스트 이 이벤트에서 지갑에 추가된 입금 트랜잭션입니다. status WalletSummary  지갑 상태 입금이 적용된 후의 지갑 잔액 요약(유상, 무상, 합계)입니다. WithdrawEvent 출금 이벤트 지갑에서의 통화 출금 상세 정보를 기록합니다. 소비된 입금 트랜잭션의 내역과 출금 후 지갑 상태를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). withdrawDetails List [] 0 ~ 1000 items 출금된 지갑의 상세 목록 통화가 소비된 입금 트랜잭션의 내역입니다. 어느 입금(유상인지 무상인지, 어떤 단가인지)에서 차감되었는지를 나타냅니다. status WalletSummary  지갑 상태 출금이 적용된 후의 지갑 잔액 요약(유상, 무상, 합계)입니다. RefundEvent 환불 이벤트 환불 이벤트의 상세 정보를 기록합니다. 환불된 스토어 콘텐츠, 환불이 처리된 플랫폼, 플랫폼별 환불 정보를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 contentName string  ~ 128자 스토어 콘텐츠 모델 이름 platform 문자열 열거형 enum {   “AppleAppStore”,   “GooglePlay”,   “fake” }  스토어 플랫폼 환불이 발행된 스토어 플랫폼입니다. 정의 설명 AppleAppStore Apple App Store GooglePlay Google Play fake Fake appleAppStoreRefundEvent AppleAppStoreVerifyReceiptEvent Apple App Store의 영수증 검증 이벤트 googlePlayRefundEvent GooglePlayVerifyReceiptEvent Google Play의 영수증 검증 이벤트 AppleAppStoreVerifyReceiptEvent Apple App Store의 영수증 Apple App Store 영수증 검증 결과를 포함합니다. 구매가 이루어진 환경(sandbox 또는 production) 정보를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 environment 문자열 열거형 enum {   “sandbox”,   “production” }  환경 영수증이 생성된 Apple App Store의 환경입니다. “sandbox\"는 테스트 구매를, “production\"은 실제 구매를 나타냅니다. 정의 설명 sandbox Sandbox production Production GooglePlayVerifyReceiptEvent Google Play의 영수증 검증 이벤트 Google Play의 영수증 검증 결과를 포함합니다. 구매 검증에 사용된 구매 토큰을 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 purchaseToken string ~ 4096자 Purchase Token 구매 성공 후 Google Play로부터 반환되는 구매 토큰입니다. Google Play 서버에서 구매를 검증하고 확인하는 데 사용됩니다. AppleAppStoreContent Apple App Store의 콘텐츠 인앱 결제 상품에 대응하는 Apple App Store의 프로덕트 ID를 포함합니다. 영수증 검증 시 대조에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 이 인앱 결제 아이템에 대해 App Store Connect에 등록된 Apple App Store의 프로덕트 식별자입니다. GooglePlayContent Google Play의 콘텐츠 인앱 결제 상품에 대응하는 Google Play의 프로덕트 ID를 포함합니다. 영수증 검증 시 대조에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 이 인앱 결제 아이템에 대해 Google Play Console에 등록되어 있는 Google Play의 프로덕트 식별자입니다. AppleAppStoreSubscriptionContent Apple App Store의 기간 결제 콘텐츠 구독 기반 상품의 Apple App Store 구독 그룹 식별자를 포함합니다. 자동 갱신 구독의 관리와 검증에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscriptionGroupIdentifier string ~ 64자 구독 그룹 ID App Store Connect에 등록된 구독 그룹 식별자입니다. 동일 그룹 내의 구독은 상호 배타적이며, 사용자는 동시에 하나만 계약할 수 있습니다. GooglePlaySubscriptionContent Google Play 구독 콘텐츠 구독 기반 상품의 Google Play 프로덕트 ID를 포함합니다. Google Play에서 자동 갱신 구독을 관리하고 검증하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID GooglePlayRealtimeNotificationMessage RTDN 메시지 Google Play의 실시간 개발자 알림(RTDN) 메시지를 나타냅니다. RTDN 메시지는 Google Play에서 서버로 전송되며, 구독 상태의 변화(갱신, 해지, 만료 등)를 알립니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 data string  ~ 1048576자 데이터 Google Play의 구독 상태 변경 정보를 포함하는 Base64로 인코딩된 알림 페이로드입니다. messageId string  ~ 1024자 메시지 ID 이 RTDN 메시지의 고유 식별자입니다. 중복 제거에 사용됩니다. publishTime string  ~ 1024자 통지가 전송된 일시 Google Cloud Pub/Sub에 의해 통지가 전송된 일시이며, RFC 3339 형식입니다. CurrentModelMaster 현재 활성화되어 있는 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Money2 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 StoreContentModelMaster 스토어 콘텐츠 모델 마스터 스토어 콘텐츠 모델은 각종 스토어 플랫폼의 콘텐츠를 저장하는 모델입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 storeContentModelId string ※ ~ 1024자 콘텐츠 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스토어 콘텐츠 모델 이름 description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 appleAppStore AppleAppStoreContent Apple App Store의 콘텐츠 이 스토어 콘텐츠의 Apple App Store 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. googlePlay GooglePlayContent Google Play의 콘텐츠 이 스토어 콘텐츠의 Google Play 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 StoreSubscriptionContentModelMaster 스토어 구독 콘텐츠 모델 마스터 다양한 스토어 플랫폼의 구독 콘텐츠를 저장하는 모델입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 storeSubscriptionContentModelId string ※ ~ 1024자 구독 콘텐츠 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스토어 구독 콘텐츠 모델 이름 description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 scheduleNamespaceId string  ~ 1024자 구독 기간을 연동시킬 GS2-Schedule의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN triggerName string  ~ 128자 구독 기간을 반영하는 트리거 이름 구독의 유효 기간을 반영하기 위해 실행되는 GS2-Schedule의 트리거 이름입니다. 트리거의 지속 시간은 구독의 유효 기한으로 설정됩니다. reallocateSpanDays int 30 0 ~ 365 구독 계약 정보를 다른 사용자에게 할당할 수 있게 되는 기간(일) 마지막 할당 이후, 구독 계약을 다른 사용자에게 재할당할 수 있게 되기까지의 일수입니다. 사용자가 계정을 변경할 때의 부정 이용을 방지하기 위해 구독 이전에 대기 기간을 둡니다. triggerExtendMode 문자열 열거형 enum {   “just”,   “rollupHour” } “just” 구독 기간을 트리거에 반영할 때의 모드 구독의 유효 기한을 트리거의 지속 시간에 어떻게 매핑할지를 제어합니다. “just\"는 구독 기간을 그대로 사용합니다. “rollupHour\"는 지정한 시각(UTC)까지 연장하여 하루 중간에 만료되는 것을 방지합니다. 정의 설명 just 그대로 구독 기간을 반영 rollupHour 다음 날짜 변경 시각까지 연장하여 구독 기간을 반영 rollupHour int {triggerExtendMode} == “rollupHour” 0 0 ~ 23 날짜 변경 시각(UTC) triggerExtendMode가 “rollupHour\"인 경우, 구독 기간은 유효 기한일의 이 시각(0~23, UTC)까지 연장됩니다. 사용자의 플레이 세션 중에 구독이 만료되는 것을 방지합니다. ※ triggerExtendMode이(가) “rollupHour” 이면 활성화 appleAppStore AppleAppStoreSubscriptionContent Apple App Store 콘텐츠 이 구독 콘텐츠의 Apple App Store 구독 정보(구독 그룹 ID)입니다. googlePlay GooglePlaySubscriptionContent Google Play 콘텐츠 이 구독 콘텐츠의 Google Play 구독 정보(프로덕트 ID)입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 money2 . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeNamespacesRequest ; import io.gs2.money2.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Money2 . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Money2 . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_namespaces ( money2 . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. currencyUsagePriority 문자열 열거형 enum {   “PrioritizeFree”,   “PrioritizePaid” }  소비 우선순위 지갑에서 출금할 때 유상 재화와 무상 재화 중 어느 것을 먼저 소비할지를 결정합니다. “PrioritizeFree\"는 무상 재화를 우선하고, “PrioritizePaid\"는 유상 재화를 우선합니다. 정의 설명 PrioritizeFree 무료 통화를 우선해서 사용한다 PrioritizePaid 유료 통화를 우선해서 사용한다 description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 재화의 입금·출금 시 사용되는 분산 트랜잭션의 설정입니다. sharedFreeCurrency bool  무상 재화를 다른 슬롯과 공유할지 여부 활성화하면 무상 재화 잔액이 모든 지갑 슬롯(플랫폼) 간에 공유됩니다. 유상 재화는 슬롯별로 분리된 상태로 유지됩니다. 이 설정은 네임스페이스 생성 시에만 설정할 수 있으며, 이후에는 변경할 수 없습니다. platformSetting PlatformSetting  스토어 플랫폼 설정 지원되는 각 스토어 플랫폼(Apple App Store, Google Play, 테스트용 Fake)의 설정입니다. 각 플랫폼에서의 영수증 검증에 필요한 인증 정보와 키를 포함합니다. depositBalanceScript ScriptSetting 지갑 잔액을 가산했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - deposit withdrawBalanceScript ScriptSetting 지갑 잔액을 소비했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - withdraw verifyReceiptScript ScriptSetting 영수증 검증을 실행했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - verifyReceipt subscribeScript string ~ 1024자 기간 결제를 신규 계약할 때 실행할 GS2-Script 스크립트 GRN(사용자 연결 변경 시에는 호출되지 않음/한 번 계약이 실효된 후 다시 계약한 경우에도 호출됨) Script 트리거 레퍼런스 - subscribe renewScript string ~ 1024자 기간 결제를 갱신할 때 실행할 GS2-Script 스크립트 GRN Script 트리거 레퍼런스 - renew unsubscribeScript string ~ 1024자 기간 결제를 해지할 때 실행할 GS2-Script 스크립트 GRN(사용자 연결 변경 시에는 호출되지 않음) Script 트리거 레퍼런스 - unsubscribe takeOverScript ScriptSetting 기간 결제에 연결된 사용자를 변경할 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - takeOver changeSubscriptionStatusNotification NotificationSetting 기간 결제의 계약 상태가 변화했을 때의 푸시 알림 구독 상태가 변화했을 때(활성화, 갱신, 해지, 만료, 취소 등) GS2-Gateway를 통해 전송되는 푸시 알림 설정입니다. 게임 클라이언트가 구독 상태 변화에 실시간으로 대응할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 이 네임스페이스에 대한 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 입금, 출금, 영수증 검증, 구독 이벤트의 추적에 유용합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 money2 . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), CurrencyUsagePriority : pointy . String ( \"PrioritizeFree\" ), Description : nil , TransactionSetting : nil , SharedFreeCurrency : pointy . Bool ( false ), PlatformSetting : nil , DepositBalanceScript : nil , WithdrawBalanceScript : nil , VerifyReceiptScript : nil , SubscribeScript : nil , RenewScript : nil , UnsubscribeScript : nil , TakeOverScript : nil , ChangeSubscriptionStatusNotification : nil , LogSetting : \u0026 money2 . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withCurrencyUsagePriority ( \"PrioritizeFree\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withSharedFreeCurrency ( false ) -\u003e withPlatformSetting ( null ) -\u003e withDepositBalanceScript ( null ) -\u003e withWithdrawBalanceScript ( null ) -\u003e withVerifyReceiptScript ( null ) -\u003e withSubscribeScript ( null ) -\u003e withRenewScript ( null ) -\u003e withUnsubscribeScript ( null ) -\u003e withTakeOverScript ( null ) -\u003e withChangeSubscriptionStatusNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Money2\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.CreateNamespaceRequest ; import io.gs2.money2.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withCurrencyUsagePriority ( \"PrioritizeFree\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withSharedFreeCurrency ( false ) . withPlatformSetting ( null ) . withDepositBalanceScript ( null ) . withWithdrawBalanceScript ( null ) . withVerifyReceiptScript ( null ) . withSubscribeScript ( null ) . withRenewScript ( null ) . withUnsubscribeScript ( null ) . withTakeOverScript ( null ) . withChangeSubscriptionStatusNotification ( null ) . withLogSetting ( new io . gs2 . money2 . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Money2 . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithCurrencyUsagePriority ( \"PrioritizeFree\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithSharedFreeCurrency ( false ) . WithPlatformSetting ( null ) . WithDepositBalanceScript ( null ) . WithWithdrawBalanceScript ( null ) . WithVerifyReceiptScript ( null ) . WithSubscribeScript ( null ) . WithRenewScript ( null ) . WithUnsubscribeScript ( null ) . WithTakeOverScript ( null ) . WithChangeSubscriptionStatusNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Money2 . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . createNamespace ( new Gs2Money2 . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withCurrencyUsagePriority ( \"PrioritizeFree\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withSharedFreeCurrency ( false ) . withPlatformSetting ( null ) . withDepositBalanceScript ( null ) . withWithdrawBalanceScript ( null ) . withVerifyReceiptScript ( null ) . withSubscribeScript ( null ) . withRenewScript ( null ) . withUnsubscribeScript ( null ) . withTakeOverScript ( null ) . withChangeSubscriptionStatusNotification ( null ) . withLogSetting ( new Gs2Money2 . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . create_namespace ( money2 . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_currency_usage_priority ( 'PrioritizeFree' ) . with_description ( None ) . with_transaction_setting ( None ) . with_shared_free_currency ( False ) . with_platform_setting ( None ) . with_deposit_balance_script ( None ) . with_withdraw_balance_script ( None ) . with_verify_receipt_script ( None ) . with_subscribe_script ( None ) . with_renew_script ( None ) . with_unsubscribe_script ( None ) . with_take_over_script ( None ) . with_change_subscription_status_notification ( None ) . with_log_setting ( money2 . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , currencyUsagePriority = \"PrioritizeFree\" , description = nil , transactionSetting = nil , sharedFreeCurrency = false , platformSetting = nil , depositBalanceScript = nil , withdrawBalanceScript = nil , verifyReceiptScript = nil , subscribeScript = nil , renewScript = nil , unsubscribeScript = nil , takeOverScript = nil , changeSubscriptionStatusNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , currencyUsagePriority = \"PrioritizeFree\" , description = nil , transactionSetting = nil , sharedFreeCurrency = false , platformSetting = nil , depositBalanceScript = nil , withdrawBalanceScript = nil , verifyReceiptScript = nil , subscribeScript = nil , renewScript = nil , unsubscribeScript = nil , takeOverScript = nil , changeSubscriptionStatusNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 money2 . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetNamespaceStatusRequest ; import io.gs2.money2.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Money2 . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Money2 . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_namespace_status ( money2 . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'money2' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 money2 . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetNamespaceRequest ; import io.gs2.money2.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Money2 . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getNamespace ( new Gs2Money2 . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_namespace ( money2 . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. currencyUsagePriority 문자열 열거형 enum {   “PrioritizeFree”,   “PrioritizePaid” }  소비 우선순위 지갑에서 출금할 때 유상 재화와 무상 재화 중 어느 것을 먼저 소비할지를 결정합니다. “PrioritizeFree\"는 무상 재화를 우선하고, “PrioritizePaid\"는 유상 재화를 우선합니다. 정의 설명 PrioritizeFree 무료 통화를 우선해서 사용한다 PrioritizePaid 유료 통화를 우선해서 사용한다 description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 재화의 입금·출금 시 사용되는 분산 트랜잭션의 설정입니다. platformSetting PlatformSetting  스토어 플랫폼 설정 지원되는 각 스토어 플랫폼(Apple App Store, Google Play, 테스트용 Fake)의 설정입니다. 각 플랫폼에서의 영수증 검증에 필요한 인증 정보와 키를 포함합니다. depositBalanceScript ScriptSetting 지갑 잔액을 가산했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - deposit withdrawBalanceScript ScriptSetting 지갑 잔액을 소비했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - withdraw verifyReceiptScript ScriptSetting 영수증 검증을 실행했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - verifyReceipt subscribeScript string ~ 1024자 기간 결제를 신규 계약할 때 실행할 GS2-Script 스크립트 GRN(사용자 연결 변경 시에는 호출되지 않음/한 번 계약이 실효된 후 다시 계약한 경우에도 호출됨) Script 트리거 레퍼런스 - subscribe renewScript string ~ 1024자 기간 결제를 갱신할 때 실행할 GS2-Script 스크립트 GRN Script 트리거 레퍼런스 - renew unsubscribeScript string ~ 1024자 기간 결제를 해지할 때 실행할 GS2-Script 스크립트 GRN(사용자 연결 변경 시에는 호출되지 않음) Script 트리거 레퍼런스 - unsubscribe takeOverScript ScriptSetting 기간 결제에 연결된 사용자를 변경할 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - takeOver changeSubscriptionStatusNotification NotificationSetting 기간 결제의 계약 상태가 변화했을 때의 푸시 알림 구독 상태가 변화했을 때(활성화, 갱신, 해지, 만료, 취소 등) GS2-Gateway를 통해 전송되는 푸시 알림 설정입니다. 게임 클라이언트가 구독 상태 변화에 실시간으로 대응할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 이 네임스페이스에 대한 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 입금, 출금, 영수증 검증, 구독 이벤트의 추적에 유용합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 money2 . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CurrencyUsagePriority : pointy . String ( \"PrioritizePaid\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , PlatformSetting : \u0026 money2 . PlatformSetting { }, DepositBalanceScript : \u0026 money2 . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" ), }, WithdrawBalanceScript : \u0026 money2 . ScriptSetting { TriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ), DoneTriggerScriptId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" ), }, VerifyReceiptScript : nil , SubscribeScript : nil , RenewScript : nil , UnsubscribeScript : nil , TakeOverScript : nil , ChangeSubscriptionStatusNotification : nil , LogSetting : \u0026 money2 . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCurrencyUsagePriority ( \"PrioritizePaid\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withPlatformSetting (( new \\Gs2\\Money2\\Model\\PlatformSetting ())) -\u003e withDepositBalanceScript (( new \\Gs2\\Money2\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) -\u003e withWithdrawBalanceScript (( new \\Gs2\\Money2\\Model\\ScriptSetting ()) -\u003e withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) -\u003e withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) -\u003e withVerifyReceiptScript ( null ) -\u003e withSubscribeScript ( null ) -\u003e withRenewScript ( null ) -\u003e withUnsubscribeScript ( null ) -\u003e withTakeOverScript ( null ) -\u003e withChangeSubscriptionStatusNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Money2\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.UpdateNamespaceRequest ; import io.gs2.money2.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withCurrencyUsagePriority ( \"PrioritizePaid\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withPlatformSetting ( new io . gs2 . money2 . model . PlatformSetting ()) . withDepositBalanceScript ( new io . gs2 . money2 . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . withWithdrawBalanceScript ( new io . gs2 . money2 . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . withVerifyReceiptScript ( null ) . withSubscribeScript ( null ) . withRenewScript ( null ) . withUnsubscribeScript ( null ) . withTakeOverScript ( null ) . withChangeSubscriptionStatusNotification ( null ) . withLogSetting ( new io . gs2 . money2 . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Money2 . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCurrencyUsagePriority ( \"PrioritizePaid\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithPlatformSetting ( new Gs2 . Gs2Money2 . Model . PlatformSetting ()) . WithDepositBalanceScript ( new Gs2 . Gs2Money2 . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . WithWithdrawBalanceScript ( new Gs2 . Gs2Money2 . Model . ScriptSetting () . WithTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . WithDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . WithVerifyReceiptScript ( null ) . WithSubscribeScript ( null ) . WithRenewScript ( null ) . WithUnsubscribeScript ( null ) . WithTakeOverScript ( null ) . WithChangeSubscriptionStatusNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Money2 . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Money2 . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withCurrencyUsagePriority ( \"PrioritizePaid\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withPlatformSetting ( new Gs2Money2 . model . PlatformSetting ()) . withDepositBalanceScript ( new Gs2Money2 . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" )) . withWithdrawBalanceScript ( new Gs2Money2 . model . ScriptSetting () . withTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" ) . withDoneTriggerScriptId ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" )) . withVerifyReceiptScript ( null ) . withSubscribeScript ( null ) . withRenewScript ( null ) . withUnsubscribeScript ( null ) . withTakeOverScript ( null ) . withChangeSubscriptionStatusNotification ( null ) . withLogSetting ( new Gs2Money2 . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . update_namespace ( money2 . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_currency_usage_priority ( 'PrioritizePaid' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_platform_setting ( money2 . PlatformSetting ()) . with_deposit_balance_script ( money2 . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004' )) . with_withdraw_balance_script ( money2 . ScriptSetting () . with_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005' ) . with_done_trigger_script_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006' )) . with_verify_receipt_script ( None ) . with_subscribe_script ( None ) . with_renew_script ( None ) . with_unsubscribe_script ( None ) . with_take_over_script ( None ) . with_change_subscription_status_notification ( None ) . with_log_setting ( money2 . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , currencyUsagePriority = \"PrioritizePaid\" , description = \"description1\" , transactionSetting = nil , platformSetting = { }, depositBalanceScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , }, withdrawBalanceScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , }, verifyReceiptScript = nil , subscribeScript = nil , renewScript = nil , unsubscribeScript = nil , takeOverScript = nil , changeSubscriptionStatusNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , currencyUsagePriority = \"PrioritizePaid\" , description = \"description1\" , transactionSetting = nil , platformSetting = { }, depositBalanceScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1003\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1004\" , }, withdrawBalanceScript = { triggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1005\" , doneTriggerScriptId = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script-1006\" , }, verifyReceiptScript = nil , subscribeScript = nil , renewScript = nil , unsubscribeScript = nil , takeOverScript = nil , changeSubscriptionStatusNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 money2 . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DeleteNamespaceRequest ; import io.gs2.money2.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Money2 . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Money2 . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . delete_namespace ( money2 . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 money2 . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetServiceVersionRequest ; import io.gs2.money2.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Money2 . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Money2 . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_service_version ( money2 . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 money2 . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DumpUserDataByUserIdRequest ; import io.gs2.money2.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Money2 . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Money2 . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . dump_user_data_by_user_id ( money2 . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'money2' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 money2 . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.money2.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Money2 . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Money2 . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( money2 . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'money2' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 money2 . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.CleanUserDataByUserIdRequest ; import io.gs2.money2.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Money2 . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Money2 . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . clean_user_data_by_user_id ( money2 . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'money2' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 money2 . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.money2.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Money2 . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Money2 . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( money2 . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'money2' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 money2 . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.money2.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Money2 . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Money2 . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( money2 . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'money2' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 money2 . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.ImportUserDataByUserIdRequest ; import io.gs2.money2.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Money2 . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Money2 . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . import_user_data_by_user_id ( money2 . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'money2' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 money2 . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.CheckImportUserDataByUserIdRequest ; import io.gs2.money2.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Money2 . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Money2 . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . check_import_user_data_by_user_id ( money2 . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'money2' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeWallets 지갑 목록 취득 요청 사용자의 지갑에 대한 페이지네이션 목록을 취득합니다. 각 지갑은 유상 통화와 무상 통화가 개별적으로 관리되는 독립된 잔액을 가집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 지갑 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeWallets ( \u0026 money2 . DescribeWalletsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeWalletsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeWallets ( ( new DescribeWalletsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeWalletsRequest ; import io.gs2.money2.result.DescribeWalletsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeWalletsResult result = client . describeWallets ( new DescribeWalletsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Wallet \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeWalletsResult \u003e asyncResult = null ; yield return client . DescribeWallets ( new Gs2 . Gs2Money2 . Request . DescribeWalletsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeWallets ( new Gs2Money2 . DescribeWalletsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_wallets ( money2 . DescribeWalletsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_wallets ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_wallets_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeWalletsByUserId 사용자 ID를 지정하여 지갑 목록 취득 지정된 사용자의 지갑에 대한 페이지네이션 목록을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 지갑 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeWalletsByUserId ( \u0026 money2 . DescribeWalletsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeWalletsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeWalletsByUserId ( ( new DescribeWalletsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeWalletsByUserIdRequest ; import io.gs2.money2.result.DescribeWalletsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeWalletsByUserIdResult result = client . describeWalletsByUserId ( new DescribeWalletsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Wallet \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeWalletsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeWalletsByUserId ( new Gs2 . Gs2Money2 . Request . DescribeWalletsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeWalletsByUserId ( new Gs2Money2 . DescribeWalletsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_wallets_by_user_id ( money2 . DescribeWalletsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_wallets_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_wallets_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getWallet 지갑 취득 요청 사용자의 지정한 슬롯에 있는 지갑을 유료 통화 및 무료 통화 잔액을 포함하여 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). Result 타입 설명 item Wallet 지갑 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetWallet ( \u0026 money2 . GetWalletRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Slot : pointy . Int32 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetWalletRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getWallet ( ( new GetWalletRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSlot ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetWalletRequest ; import io.gs2.money2.result.GetWalletResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetWalletResult result = client . getWallet ( new GetWalletRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSlot ( 0 ) ); Wallet item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetWalletResult \u003e asyncResult = null ; yield return client . GetWallet ( new Gs2 . Gs2Money2 . Request . GetWalletRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSlot ( 0 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getWallet ( new Gs2Money2 . GetWalletRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSlot ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_wallet ( money2 . GetWalletRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_slot ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_wallet ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , slot = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_wallet_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , slot = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getWalletByUserId 사용자 ID를 지정하여 지갑 취득 지정한 사용자의 지정한 슬롯에 있는 지갑을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Wallet 지갑 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetWalletByUserId ( \u0026 money2 . GetWalletByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Slot : pointy . Int32 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetWalletByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getWalletByUserId ( ( new GetWalletByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSlot ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetWalletByUserIdRequest ; import io.gs2.money2.result.GetWalletByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetWalletByUserIdResult result = client . getWalletByUserId ( new GetWalletByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withTimeOffsetToken ( null ) ); Wallet item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetWalletByUserIdResult \u003e asyncResult = null ; yield return client . GetWalletByUserId ( new Gs2 . Gs2Money2 . Request . GetWalletByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSlot ( 0 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getWalletByUserId ( new Gs2Money2 . GetWalletByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_wallet_by_user_id ( money2 . GetWalletByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_slot ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_wallet_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_wallet_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; depositByUserId 사용자 ID를 지정하여 지갑 잔액에 가산 지정된 사용자의 지갑에 지정된 입금 트랜잭션을 추가합니다. 각 입금 트랜잭션에 대해 이벤트 로그가 기록됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). depositTransactions List  1 ~ 1000 items 입금 트랜잭션 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Wallet 가산 후 지갑 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DepositByUserId ( \u0026 money2 . DepositByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Slot : pointy . Int32 ( 0 ), DepositTransactions : [] money2 . DepositTransaction { money2 . DepositTransaction { Price : pointy . Float64 ( 120 ), Currency : pointy . String ( \"JPY\" ), Count : pointy . Int32 ( 50 ), }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DepositByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e depositByUserId ( ( new DepositByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSlot ( 0 ) -\u003e withDepositTransactions ([ ( new DepositTransaction ()) -\u003e withPrice ( 120 ) -\u003e withCurrency ( \"JPY\" ) -\u003e withCount ( 50 ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DepositByUserIdRequest ; import io.gs2.money2.result.DepositByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DepositByUserIdResult result = client . depositByUserId ( new DepositByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withDepositTransactions ( Arrays . asList ( new DepositTransaction () . withPrice ( 120 ) . withCurrency ( \"JPY\" ) . withCount ( 50 ) )) . withTimeOffsetToken ( null ) ); Wallet item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DepositByUserIdResult \u003e asyncResult = null ; yield return client . DepositByUserId ( new Gs2 . Gs2Money2 . Request . DepositByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSlot ( 0 ) . WithDepositTransactions ( new Gs2 . Gs2Money2 . Model . DepositTransaction [] { new Gs2 . Gs2Money2 . Model . DepositTransaction () . WithPrice ( 120 ) . WithCurrency ( \"JPY\" ) . WithCount ( 50 ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . depositByUserId ( new Gs2Money2 . DepositByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withDepositTransactions ([ new Gs2Money2 . model . DepositTransaction () . withPrice ( 120 ) . withCurrency ( \"JPY\" ) . withCount ( 50 ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . deposit_by_user_id ( money2 . DepositByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_slot ( 0 ) . with_deposit_transactions ([ money2 . DepositTransaction () . with_price ( 120 ) . with_currency ( 'JPY' ) . with_count ( 50 ), ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.deposit_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , depositTransactions = { { price = 120 , currency = \"JPY\" , count = 50 , } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.deposit_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , depositTransactions = { { price = 120 , currency = \"JPY\" , count = 50 , } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; withdraw 지갑에서 잔액 소비 요청 사용자의 지갑에서 지정된 양의 통화를 소비합니다. paidOnly가 false인 경우 무상 통화가 먼저 소비되고, 그다음 유상 통화가 소비됩니다. paidOnly가 true인 경우 유상 통화만 소비됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). withdrawCount int  1 ~ 2147483646 소비할 유료 통화 수량 paidOnly bool false 유료 통화만을 대상으로 할지 여부 Result 타입 설명 item Wallet 소비 후 지갑 withdrawTransactions List 소비한 입금 트랜잭션 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . Withdraw ( \u0026 money2 . WithdrawRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Slot : pointy . Int32 ( 0 ), WithdrawCount : pointy . Int32 ( 50 ), PaidOnly : pointy . Bool ( false ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item withdrawTransactions := result . WithdrawTransactions use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\WithdrawRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e withdraw ( ( new WithdrawRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSlot ( 0 ) -\u003e withWithdrawCount ( 50 ) -\u003e withPaidOnly ( false ) ); $item = $result -\u003e getItem (); $withdrawTransactions = $result -\u003e getWithdrawTransactions (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.WithdrawRequest ; import io.gs2.money2.result.WithdrawResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { WithdrawResult result = client . withdraw ( new WithdrawRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSlot ( 0 ) . withWithdrawCount ( 50 ) . withPaidOnly ( false ) ); Wallet item = result . getItem (); List DepositTransaction \u003e withdrawTransactions = result . getWithdrawTransactions (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . WithdrawResult \u003e asyncResult = null ; yield return client . Withdraw ( new Gs2 . Gs2Money2 . Request . WithdrawRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSlot ( 0 ) . WithWithdrawCount ( 50 ) . WithPaidOnly ( false ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var withdrawTransactions = result . WithdrawTransactions ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . withdraw ( new Gs2Money2 . WithdrawRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSlot ( 0 ) . withWithdrawCount ( 50 ) . withPaidOnly ( false ) ); const item = result . getItem (); const withdrawTransactions = result . getWithdrawTransactions (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . withdraw ( money2 . WithdrawRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_slot ( 0 ) . with_withdraw_count ( 50 ) . with_paid_only ( False ) ) item = result . item withdraw_transactions = result . withdraw_transactions except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.withdraw ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , slot = 0 , withdrawCount = 50 , paidOnly = false , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; withdrawTransactions = result.withdrawTransactions ; client = gs2 ( 'money2' ) api_result_handler = client.withdraw_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , slot = 0 , withdrawCount = 50 , paidOnly = false , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; withdrawTransactions = result.withdrawTransactions ; withdrawByUserId 사용자 ID를 지정하여 지갑에서 잔액 소비 지정된 사용자의 지갑에서 지정된 양의 통화를 소비합니다. paidOnly가 false인 경우 무상 통화가 먼저 소비되고, 그다음 유상 통화가 소비됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). withdrawCount int  1 ~ 2147483646 소비할 유료 통화 수량 paidOnly bool false 유료 통화만을 대상으로 할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Wallet 소비 후 지갑 withdrawTransactions List 소비한 입금 트랜잭션 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . WithdrawByUserId ( \u0026 money2 . WithdrawByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Slot : pointy . Int32 ( 0 ), WithdrawCount : pointy . Int32 ( 50 ), PaidOnly : pointy . Bool ( false ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item withdrawTransactions := result . WithdrawTransactions use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\WithdrawByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e withdrawByUserId ( ( new WithdrawByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSlot ( 0 ) -\u003e withWithdrawCount ( 50 ) -\u003e withPaidOnly ( false ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $withdrawTransactions = $result -\u003e getWithdrawTransactions (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.WithdrawByUserIdRequest ; import io.gs2.money2.result.WithdrawByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { WithdrawByUserIdResult result = client . withdrawByUserId ( new WithdrawByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withWithdrawCount ( 50 ) . withPaidOnly ( false ) . withTimeOffsetToken ( null ) ); Wallet item = result . getItem (); List DepositTransaction \u003e withdrawTransactions = result . getWithdrawTransactions (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . WithdrawByUserIdResult \u003e asyncResult = null ; yield return client . WithdrawByUserId ( new Gs2 . Gs2Money2 . Request . WithdrawByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithSlot ( 0 ) . WithWithdrawCount ( 50 ) . WithPaidOnly ( false ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var withdrawTransactions = result . WithdrawTransactions ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . withdrawByUserId ( new Gs2Money2 . WithdrawByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withSlot ( 0 ) . withWithdrawCount ( 50 ) . withPaidOnly ( false ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const withdrawTransactions = result . getWithdrawTransactions (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . withdraw_by_user_id ( money2 . WithdrawByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_slot ( 0 ) . with_withdraw_count ( 50 ) . with_paid_only ( False ) . with_time_offset_token ( None ) ) item = result . item withdraw_transactions = result . withdraw_transactions except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.withdraw_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , withdrawCount = 50 , paidOnly = false , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; withdrawTransactions = result.withdrawTransactions ; client = gs2 ( 'money2' ) api_result_handler = client.withdraw_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , slot = 0 , withdrawCount = 50 , paidOnly = false , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; withdrawTransactions = result.withdrawTransactions ; describeEventsByUserId 이벤트 목록 취득 지정된 사용자의 구매 이벤트에 대한 페이지네이션 목록을 지정된 날짜 범위 내에서 취득합니다. 기본 날짜 범위는 최근 30일간입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID begin long 현재 시각으로부터 30일 전의 절대 시각 검색 시작 일시 end long 현재 시각 검색 종료 일시 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 이벤트 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeEventsByUserId ( \u0026 money2 . DescribeEventsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Begin : nil , End : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeEventsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeEventsByUserId ( ( new DescribeEventsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withBegin ( null ) -\u003e withEnd ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeEventsByUserIdRequest ; import io.gs2.money2.result.DescribeEventsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeEventsByUserIdResult result = client . describeEventsByUserId ( new DescribeEventsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withBegin ( null ) . withEnd ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Event \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeEventsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeEventsByUserId ( new Gs2 . Gs2Money2 . Request . DescribeEventsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithBegin ( null ) . WithEnd ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeEventsByUserId ( new Gs2Money2 . DescribeEventsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withBegin ( null ) . withEnd ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_events_by_user_id ( money2 . DescribeEventsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_begin ( None ) . with_end ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_events_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , begin = nil , end = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_events_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , begin = nil , end = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getEventByTransactionId 트랜잭션 ID를 지정하여 이벤트 취득 트랜잭션 ID로 특정 구매 이벤트를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. transactionId string  ~ 1024자 트랜잭션 ID 이 결제 이벤트의 고유 식별자입니다. 영수증 검증 이벤트의 경우 스토어 플랫폼의 트랜잭션 ID에 해당합니다. Result 타입 설명 item Event 이벤트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetEventByTransactionId ( \u0026 money2 . GetEventByTransactionIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), TransactionId : pointy . String ( \"transaction-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetEventByTransactionIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getEventByTransactionId ( ( new GetEventByTransactionIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withTransactionId ( \"transaction-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetEventByTransactionIdRequest ; import io.gs2.money2.result.GetEventByTransactionIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetEventByTransactionIdResult result = client . getEventByTransactionId ( new GetEventByTransactionIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withTransactionId ( \"transaction-0001\" ) ); Event item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetEventByTransactionIdResult \u003e asyncResult = null ; yield return client . GetEventByTransactionId ( new Gs2 . Gs2Money2 . Request . GetEventByTransactionIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithTransactionId ( \"transaction-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getEventByTransactionId ( new Gs2Money2 . GetEventByTransactionIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withTransactionId ( \"transaction-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_event_by_transaction_id ( money2 . GetEventByTransactionIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_transaction_id ( 'transaction-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_event_by_transaction_id ({ namespaceName = \"namespace-0001\" , transactionId = \"transaction-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_event_by_transaction_id_async ({ namespaceName = \"namespace-0001\" , transactionId = \"transaction-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyReceipt 영수증을 사용 완료 처리 스토어 콘텐츠 모델에 대해 구매 영수증을 검증하고, 사용 완료로 기록합니다. 이벤트 로그가 기록되며, 네임스페이스에 설정된 영수증 검증 스크립트가 실행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 contentName string  ~ 128자 스토어 콘텐츠 모델 이름 receipt Receipt  영수증 Result 타입 설명 item Event 이벤트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . VerifyReceipt ( \u0026 money2 . VerifyReceiptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ContentName : pointy . String ( \"content-0001\" ), Receipt : \u0026 money2 . Receipt { Store : pointy . String ( \"AppleAppStore\" ), TransactionID : pointy . String ( \"transaction-0001\" ), Payload : pointy . String ( \"payload\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\VerifyReceiptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e verifyReceipt ( ( new VerifyReceiptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withContentName ( \"content-0001\" ) -\u003e withReceipt (( new Receipt ()) -\u003e withStore ( \"AppleAppStore\" ) -\u003e withTransactionID ( \"transaction-0001\" ) -\u003e withPayload ( \"payload\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.VerifyReceiptRequest ; import io.gs2.money2.result.VerifyReceiptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { VerifyReceiptResult result = client . verifyReceipt ( new VerifyReceiptRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withContentName ( \"content-0001\" ) . withReceipt ( new Receipt () . withStore ( \"AppleAppStore\" ) . withTransactionID ( \"transaction-0001\" ) . withPayload ( \"payload\" ) ) ); Event item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . VerifyReceiptResult \u003e asyncResult = null ; yield return client . VerifyReceipt ( new Gs2 . Gs2Money2 . Request . VerifyReceiptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithContentName ( \"content-0001\" ) . WithReceipt ( new Gs2 . Gs2Money2 . Model . Receipt () . WithStore ( \"AppleAppStore\" ) . WithTransactionID ( \"transaction-0001\" ) . WithPayload ( \"payload\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . verifyReceipt ( new Gs2Money2 . VerifyReceiptRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withContentName ( \"content-0001\" ) . withReceipt ( new Gs2Money2 . model . Receipt () . withStore ( \"AppleAppStore\" ) . withTransactionID ( \"transaction-0001\" ) . withPayload ( \"payload\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . verify_receipt ( money2 . VerifyReceiptRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_content_name ( 'content-0001' ) . with_receipt ( money2 . Receipt () . with_store ( 'AppleAppStore' ) . with_transaction_i_d ( 'transaction-0001' ) . with_payload ( 'payload' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.verify_receipt ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , contentName = \"content-0001\" , receipt = { store = \"AppleAppStore\" , transaction_i_d = \"transaction-0001\" , payload = \"payload\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.verify_receipt_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , contentName = \"content-0001\" , receipt = { store = \"AppleAppStore\" , transaction_i_d = \"transaction-0001\" , payload = \"payload\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyReceiptByUserId 사용자 ID를 지정하여 영수증을 사용 완료 처리 지정된 사용자의 구매 영수증을 검증하고, 사용 완료로 기록합니다. 이벤트 로그가 기록되며, 네임스페이스에 설정된 영수증 검증 스크립트가 실행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID contentName string  ~ 128자 스토어 콘텐츠 모델 이름 receipt Receipt  영수증 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Event 이벤트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . VerifyReceiptByUserId ( \u0026 money2 . VerifyReceiptByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ContentName : pointy . String ( \"content-0001\" ), Receipt : \u0026 money2 . Receipt { Store : pointy . String ( \"AppleAppStore\" ), TransactionID : pointy . String ( \"transaction-0001\" ), Payload : pointy . String ( \"payload\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\VerifyReceiptByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e verifyReceiptByUserId ( ( new VerifyReceiptByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withContentName ( \"content-0001\" ) -\u003e withReceipt (( new Receipt ()) -\u003e withStore ( \"AppleAppStore\" ) -\u003e withTransactionID ( \"transaction-0001\" ) -\u003e withPayload ( \"payload\" ) ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.VerifyReceiptByUserIdRequest ; import io.gs2.money2.result.VerifyReceiptByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { VerifyReceiptByUserIdResult result = client . verifyReceiptByUserId ( new VerifyReceiptByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withContentName ( \"content-0001\" ) . withReceipt ( new Receipt () . withStore ( \"AppleAppStore\" ) . withTransactionID ( \"transaction-0001\" ) . withPayload ( \"payload\" ) ) . withTimeOffsetToken ( null ) ); Event item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . VerifyReceiptByUserIdResult \u003e asyncResult = null ; yield return client . VerifyReceiptByUserId ( new Gs2 . Gs2Money2 . Request . VerifyReceiptByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithContentName ( \"content-0001\" ) . WithReceipt ( new Gs2 . Gs2Money2 . Model . Receipt () . WithStore ( \"AppleAppStore\" ) . WithTransactionID ( \"transaction-0001\" ) . WithPayload ( \"payload\" ) ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . verifyReceiptByUserId ( new Gs2Money2 . VerifyReceiptByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withContentName ( \"content-0001\" ) . withReceipt ( new Gs2Money2 . model . Receipt () . withStore ( \"AppleAppStore\" ) . withTransactionID ( \"transaction-0001\" ) . withPayload ( \"payload\" ) ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . verify_receipt_by_user_id ( money2 . VerifyReceiptByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_content_name ( 'content-0001' ) . with_receipt ( money2 . Receipt () . with_store ( 'AppleAppStore' ) . with_transaction_i_d ( 'transaction-0001' ) . with_payload ( 'payload' ) ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.verify_receipt_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , contentName = \"content-0001\" , receipt = { store = \"AppleAppStore\" , transaction_i_d = \"transaction-0001\" , payload = \"payload\" , }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.verify_receipt_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , contentName = \"content-0001\" , receipt = { store = \"AppleAppStore\" , transaction_i_d = \"transaction-0001\" , payload = \"payload\" , }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSubscriptionStatuses 구독 계약 상태 목록 취득 요청 사용자의 모든 구독 콘텐츠 모델에 대한 계약 상태를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string ~ 128자 액세스 토큰 Result 타입 설명 items List 구독 계약 상태 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscriptionStatuses ( \u0026 money2 . DescribeSubscriptionStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeSubscriptionStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeSubscriptionStatuses ( ( new DescribeSubscriptionStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeSubscriptionStatusesRequest ; import io.gs2.money2.result.DescribeSubscriptionStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeSubscriptionStatusesResult result = client . describeSubscriptionStatuses ( new DescribeSubscriptionStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List SubscriptionStatus \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeSubscriptionStatusesResult \u003e asyncResult = null ; yield return client . DescribeSubscriptionStatuses ( new Gs2 . Gs2Money2 . Request . DescribeSubscriptionStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeSubscriptionStatuses ( new Gs2Money2 . DescribeSubscriptionStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_subscription_statuses ( money2 . DescribeSubscriptionStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_subscription_statuses ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'money2' ) api_result_handler = client.describe_subscription_statuses_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeSubscriptionStatusesByUserId 사용자 ID를 지정하여 구독 계약 상태 목록 취득 지정된 사용자의 모든 구독 콘텐츠 모델에 대한 계약 상태를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 구독 계약 상태 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscriptionStatusesByUserId ( \u0026 money2 . DescribeSubscriptionStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeSubscriptionStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeSubscriptionStatusesByUserId ( ( new DescribeSubscriptionStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeSubscriptionStatusesByUserIdRequest ; import io.gs2.money2.result.DescribeSubscriptionStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeSubscriptionStatusesByUserIdResult result = client . describeSubscriptionStatusesByUserId ( new DescribeSubscriptionStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List SubscriptionStatus \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeSubscriptionStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeSubscriptionStatusesByUserId ( new Gs2 . Gs2Money2 . Request . DescribeSubscriptionStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeSubscriptionStatusesByUserId ( new Gs2Money2 . DescribeSubscriptionStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_subscription_statuses_by_user_id ( money2 . DescribeSubscriptionStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_subscription_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'money2' ) api_result_handler = client.describe_subscription_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getSubscriptionStatus 구독 계약 상태 취득 요청 사용자의 지정된 콘텐츠에 대한 구독 계약 상태를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string ~ 128자 액세스 토큰 contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 Result 타입 설명 item SubscriptionStatus 구독 계약 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetSubscriptionStatus ( \u0026 money2 . GetSubscriptionStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ContentName : pointy . String ( \"content-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetSubscriptionStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getSubscriptionStatus ( ( new GetSubscriptionStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withContentName ( \"content-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetSubscriptionStatusRequest ; import io.gs2.money2.result.GetSubscriptionStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetSubscriptionStatusResult result = client . getSubscriptionStatus ( new GetSubscriptionStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withContentName ( \"content-0001\" ) ); SubscriptionStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetSubscriptionStatusResult \u003e asyncResult = null ; yield return client . GetSubscriptionStatus ( new Gs2 . Gs2Money2 . Request . GetSubscriptionStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithContentName ( \"content-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getSubscriptionStatus ( new Gs2Money2 . GetSubscriptionStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withContentName ( \"content-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_subscription_status ( money2 . GetSubscriptionStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_content_name ( 'content-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_subscription_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , contentName = \"content-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_subscription_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , contentName = \"content-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscriptionStatusByUserId 사용자 ID를 지정하여 구독 계약 상태 취득 지정된 사용자의 지정된 콘텐츠에 대한 구독 계약 상태를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscriptionStatus 구독 계약 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetSubscriptionStatusByUserId ( \u0026 money2 . GetSubscriptionStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), ContentName : pointy . String ( \"content-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetSubscriptionStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getSubscriptionStatusByUserId ( ( new GetSubscriptionStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withContentName ( \"content-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetSubscriptionStatusByUserIdRequest ; import io.gs2.money2.result.GetSubscriptionStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetSubscriptionStatusByUserIdResult result = client . getSubscriptionStatusByUserId ( new GetSubscriptionStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withContentName ( \"content-0001\" ) . withTimeOffsetToken ( null ) ); SubscriptionStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetSubscriptionStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetSubscriptionStatusByUserId ( new Gs2 . Gs2Money2 . Request . GetSubscriptionStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithContentName ( \"content-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getSubscriptionStatusByUserId ( new Gs2Money2 . GetSubscriptionStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withContentName ( \"content-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_subscription_status_by_user_id ( money2 . GetSubscriptionStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_content_name ( 'content-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_subscription_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , contentName = \"content-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_subscription_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , contentName = \"content-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; allocateSubscriptionStatus 영수증으로부터 구독 계약 상태 할당 스토어 플랫폼(Apple App Store / Google Play)에 대해 영수증을 검증하고, 요청 사용자에게 구독을 할당합니다. 구독이 신규로 할당된 경우, 네임스페이스에 설정된 구독 스크립트가 실행되고 스케줄 트리거가 갱신됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string ~ 128자 액세스 토큰 receipt string  ~ 1024자 영수증 Result 타입 설명 item SubscriptionStatus 구독 계약 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . AllocateSubscriptionStatus ( \u0026 money2 . AllocateSubscriptionStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Receipt : pointy . String ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\AllocateSubscriptionStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e allocateSubscriptionStatus ( ( new AllocateSubscriptionStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withReceipt ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.AllocateSubscriptionStatusRequest ; import io.gs2.money2.result.AllocateSubscriptionStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { AllocateSubscriptionStatusResult result = client . allocateSubscriptionStatus ( new AllocateSubscriptionStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) ); SubscriptionStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . AllocateSubscriptionStatusResult \u003e asyncResult = null ; yield return client . AllocateSubscriptionStatus ( new Gs2 . Gs2Money2 . Request . AllocateSubscriptionStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . allocateSubscriptionStatus ( new Gs2Money2 . AllocateSubscriptionStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . allocate_subscription_status ( money2 . AllocateSubscriptionStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_receipt ( '{\"Store\": \"AppleAppStore\", \"TransactionID\": \"transaction-0001\", \"Payload\": \"payload\"}' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.allocate_subscription_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , receipt = \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.allocate_subscription_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , receipt = \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; allocateSubscriptionStatusByUserId 사용자 ID를 지정하여 영수증으로부터 구독 계약 상태 할당 스토어 플랫폼에 대해 영수증을 검증하고, 지정된 사용자에게 구독을 할당합니다. 구독이 이미 다른 사용자에게 할당되어 있는 경우, AlreadyUsed 에러가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID receipt string  ~ 1024자 영수증 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscriptionStatus 구독 계약 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . AllocateSubscriptionStatusByUserId ( \u0026 money2 . AllocateSubscriptionStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Receipt : pointy . String ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\AllocateSubscriptionStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e allocateSubscriptionStatusByUserId ( ( new AllocateSubscriptionStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withReceipt ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.AllocateSubscriptionStatusByUserIdRequest ; import io.gs2.money2.result.AllocateSubscriptionStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { AllocateSubscriptionStatusByUserIdResult result = client . allocateSubscriptionStatusByUserId ( new AllocateSubscriptionStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) . withTimeOffsetToken ( null ) ); SubscriptionStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . AllocateSubscriptionStatusByUserIdResult \u003e asyncResult = null ; yield return client . AllocateSubscriptionStatusByUserId ( new Gs2 . Gs2Money2 . Request . AllocateSubscriptionStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . allocateSubscriptionStatusByUserId ( new Gs2Money2 . AllocateSubscriptionStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . allocate_subscription_status_by_user_id ( money2 . AllocateSubscriptionStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_receipt ( '{\"Store\": \"AppleAppStore\", \"TransactionID\": \"transaction-0001\", \"Payload\": \"payload\"}' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.allocate_subscription_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , receipt = \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.allocate_subscription_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , receipt = \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; takeoverSubscriptionStatus 이미 다른 사용자에게 할당되어 있는 구독 계약 상태를 인계 현재 다른 사용자에게 할당되어 있는 구독을 요청 사용자에게 이전합니다. 네임스페이스에 설정된 인계 스크립트가 실행되며, 기존 사용자와 신규 사용자 양쪽의 스케줄 트리거가 갱신됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string ~ 128자 액세스 토큰 receipt string  ~ 1024자 영수증 Result 타입 설명 item SubscriptionStatus 구독 계약 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . TakeoverSubscriptionStatus ( \u0026 money2 . TakeoverSubscriptionStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Receipt : pointy . String ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\TakeoverSubscriptionStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e takeoverSubscriptionStatus ( ( new TakeoverSubscriptionStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withReceipt ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.TakeoverSubscriptionStatusRequest ; import io.gs2.money2.result.TakeoverSubscriptionStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { TakeoverSubscriptionStatusResult result = client . takeoverSubscriptionStatus ( new TakeoverSubscriptionStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) ); SubscriptionStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . TakeoverSubscriptionStatusResult \u003e asyncResult = null ; yield return client . TakeoverSubscriptionStatus ( new Gs2 . Gs2Money2 . Request . TakeoverSubscriptionStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . takeoverSubscriptionStatus ( new Gs2Money2 . TakeoverSubscriptionStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . takeover_subscription_status ( money2 . TakeoverSubscriptionStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_receipt ( '{\"Store\": \"AppleAppStore\", \"TransactionID\": \"transaction-0001\", \"Payload\": \"payload\"}' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.takeover_subscription_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , receipt = \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.takeover_subscription_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , receipt = \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; takeoverSubscriptionStatusByUserId 사용자 ID를 지정하여 이미 다른 사용자에게 할당되어 있는 구독 계약 상태를 인계 현재 다른 사용자에게 할당되어 있는 구독을 지정된 사용자에게 이전합니다. 인계 스크립트가 실행되며, 양쪽 사용자의 구독 트리거가 갱신됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID receipt string  ~ 1024자 영수증 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscriptionStatus 구독 계약 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . TakeoverSubscriptionStatusByUserId ( \u0026 money2 . TakeoverSubscriptionStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Receipt : pointy . String ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\TakeoverSubscriptionStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e takeoverSubscriptionStatusByUserId ( ( new TakeoverSubscriptionStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withReceipt ( \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.TakeoverSubscriptionStatusByUserIdRequest ; import io.gs2.money2.result.TakeoverSubscriptionStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { TakeoverSubscriptionStatusByUserIdResult result = client . takeoverSubscriptionStatusByUserId ( new TakeoverSubscriptionStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) . withTimeOffsetToken ( null ) ); SubscriptionStatus item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . TakeoverSubscriptionStatusByUserIdResult \u003e asyncResult = null ; yield return client . TakeoverSubscriptionStatusByUserId ( new Gs2 . Gs2Money2 . Request . TakeoverSubscriptionStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . takeoverSubscriptionStatusByUserId ( new Gs2Money2 . TakeoverSubscriptionStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withReceipt ( \"{\\\"Store\\\": \\\"AppleAppStore\\\", \\\"TransactionID\\\": \\\"transaction-0001\\\", \\\"Payload\\\": \\\"payload\\\"}\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . takeover_subscription_status_by_user_id ( money2 . TakeoverSubscriptionStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_receipt ( '{\"Store\": \"AppleAppStore\", \"TransactionID\": \"transaction-0001\", \"Payload\": \"payload\"}' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.takeover_subscription_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , receipt = \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.takeover_subscription_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , receipt = \"{ \\\" Store \\\" : \\\" AppleAppStore \\\" , \\\" TransactionID \\\" : \\\" transaction-0001 \\\" , \\\" Payload \\\" : \\\" payload \\\" }\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRefundHistoriesByUserId 사용자 ID를 지정하여 환불 이력 정보 목록 취득 지정된 사용자의 환불 이력 레코드에 대한 페이지네이션 목록을 취득합니다. 각 레코드에는 콘텐츠 이름 및 플랫폼 정보를 포함한 환불 이벤트의 상세 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 환불 이력 정보 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeRefundHistoriesByUserId ( \u0026 money2 . DescribeRefundHistoriesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeRefundHistoriesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeRefundHistoriesByUserId ( ( new DescribeRefundHistoriesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeRefundHistoriesByUserIdRequest ; import io.gs2.money2.result.DescribeRefundHistoriesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeRefundHistoriesByUserIdResult result = client . describeRefundHistoriesByUserId ( new DescribeRefundHistoriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List RefundHistory \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeRefundHistoriesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeRefundHistoriesByUserId ( new Gs2 . Gs2Money2 . Request . DescribeRefundHistoriesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeRefundHistoriesByUserId ( new Gs2Money2 . DescribeRefundHistoriesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_refund_histories_by_user_id ( money2 . DescribeRefundHistoriesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_refund_histories_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_refund_histories_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeRefundHistoriesByDate 연도와 월을 지정하여 환불 이력 정보 목록 취득 연도와 월로 필터링된 환불 이력 레코드의 페이지네이션 목록을 취득합니다. 옵션으로 일(day) 단위 필터링도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. year int  2000 ~ 3000 년 month int  1 ~ 12 월 day int 1 ~ 31 일 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 환불 이력 정보 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeRefundHistoriesByDate ( \u0026 money2 . DescribeRefundHistoriesByDateRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Year : pointy . Int32 ( 2025 ), Month : pointy . Int32 ( 1 ), Day : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeRefundHistoriesByDateRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeRefundHistoriesByDate ( ( new DescribeRefundHistoriesByDateRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withYear ( 2025 ) -\u003e withMonth ( 1 ) -\u003e withDay ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeRefundHistoriesByDateRequest ; import io.gs2.money2.result.DescribeRefundHistoriesByDateResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeRefundHistoriesByDateResult result = client . describeRefundHistoriesByDate ( new DescribeRefundHistoriesByDateRequest () . withNamespaceName ( \"namespace-0001\" ) . withYear ( 2025 ) . withMonth ( 1 ) . withDay ( null ) . withPageToken ( null ) . withLimit ( null ) ); List RefundHistory \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeRefundHistoriesByDateResult \u003e asyncResult = null ; yield return client . DescribeRefundHistoriesByDate ( new Gs2 . Gs2Money2 . Request . DescribeRefundHistoriesByDateRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithYear ( 2025 ) . WithMonth ( 1 ) . WithDay ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeRefundHistoriesByDate ( new Gs2Money2 . DescribeRefundHistoriesByDateRequest () . withNamespaceName ( \"namespace-0001\" ) . withYear ( 2025 ) . withMonth ( 1 ) . withDay ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_refund_histories_by_date ( money2 . DescribeRefundHistoriesByDateRequest () . with_namespace_name ( 'namespace-0001' ) . with_year ( 2025 ) . with_month ( 1 ) . with_day ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_refund_histories_by_date ({ namespaceName = \"namespace-0001\" , year = 2025 , month = 1 , day = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_refund_histories_by_date_async ({ namespaceName = \"namespace-0001\" , year = 2025 , month = 1 , day = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getRefundHistory 트랜잭션 ID를 지정하여 환불 이력 정보 취득 트랜잭션 ID로 특정 환불 이력 레코드를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. transactionId string  ~ 1024자 트랜잭션 ID 스토어 플랫폼에 의해 할당된 고유한 트랜잭션 식별자입니다. 동일 구매의 중복 처리를 방지하는 데 사용됩니다. Result 타입 설명 item RefundHistory 환불 이력 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetRefundHistory ( \u0026 money2 . GetRefundHistoryRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), TransactionId : pointy . String ( \"transaction-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetRefundHistoryRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getRefundHistory ( ( new GetRefundHistoryRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withTransactionId ( \"transaction-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetRefundHistoryRequest ; import io.gs2.money2.result.GetRefundHistoryResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetRefundHistoryResult result = client . getRefundHistory ( new GetRefundHistoryRequest () . withNamespaceName ( \"namespace-0001\" ) . withTransactionId ( \"transaction-0001\" ) ); RefundHistory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetRefundHistoryResult \u003e asyncResult = null ; yield return client . GetRefundHistory ( new Gs2 . Gs2Money2 . Request . GetRefundHistoryRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithTransactionId ( \"transaction-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getRefundHistory ( new Gs2Money2 . GetRefundHistoryRequest () . withNamespaceName ( \"namespace-0001\" ) . withTransactionId ( \"transaction-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_refund_history ( money2 . GetRefundHistoryRequest () . with_namespace_name ( 'namespace-0001' ) . with_transaction_id ( 'transaction-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_refund_history ({ namespaceName = \"namespace-0001\" , transactionId = \"transaction-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_refund_history_async ({ namespaceName = \"namespace-0001\" , transactionId = \"transaction-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeDailyTransactionHistoriesByCurrency 통화를 지정하여 일별 거래 이력 목록 취득 지정된 통화와 연도로 필터링된 일별 거래 이력의 페이지네이션 목록을 취득합니다. 옵션으로 월 단위 필터링도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. currency string  ~ 8자 통화 코드 year int  2000 ~ 3000 년 month int 1 ~ 12 월 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 일일 거래 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeDailyTransactionHistoriesByCurrency ( \u0026 money2 . DescribeDailyTransactionHistoriesByCurrencyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Currency : pointy . String ( \"JPY\" ), Year : pointy . Int32 ( 2024 ), Month : pointy . Int32 ( 1 ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeDailyTransactionHistoriesByCurrencyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeDailyTransactionHistoriesByCurrency ( ( new DescribeDailyTransactionHistoriesByCurrencyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCurrency ( \"JPY\" ) -\u003e withYear ( 2024 ) -\u003e withMonth ( 1 ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeDailyTransactionHistoriesByCurrencyRequest ; import io.gs2.money2.result.DescribeDailyTransactionHistoriesByCurrencyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeDailyTransactionHistoriesByCurrencyResult result = client . describeDailyTransactionHistoriesByCurrency ( new DescribeDailyTransactionHistoriesByCurrencyRequest () . withNamespaceName ( \"namespace-0001\" ) . withCurrency ( \"JPY\" ) . withYear ( 2024 ) . withMonth ( 1 ) . withPageToken ( null ) . withLimit ( null ) ); List DailyTransactionHistory \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeDailyTransactionHistoriesByCurrencyResult \u003e asyncResult = null ; yield return client . DescribeDailyTransactionHistoriesByCurrency ( new Gs2 . Gs2Money2 . Request . DescribeDailyTransactionHistoriesByCurrencyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCurrency ( \"JPY\" ) . WithYear ( 2024 ) . WithMonth ( 1 ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeDailyTransactionHistoriesByCurrency ( new Gs2Money2 . DescribeDailyTransactionHistoriesByCurrencyRequest () . withNamespaceName ( \"namespace-0001\" ) . withCurrency ( \"JPY\" ) . withYear ( 2024 ) . withMonth ( 1 ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_daily_transaction_histories_by_currency ( money2 . DescribeDailyTransactionHistoriesByCurrencyRequest () . with_namespace_name ( 'namespace-0001' ) . with_currency ( 'JPY' ) . with_year ( 2024 ) . with_month ( 1 ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_daily_transaction_histories_by_currency ({ namespaceName = \"namespace-0001\" , currency = \"JPY\" , year = 2024 , month = 1 , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_daily_transaction_histories_by_currency_async ({ namespaceName = \"namespace-0001\" , currency = \"JPY\" , year = 2024 , month = 1 , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeDailyTransactionHistories 일별 거래 이력 목록 취득 지정된 연도의 일별 거래 이력에 대한 페이지네이션 목록을 취득합니다. 옵션으로 월 단위 필터링이 가능하며, 월을 지정한 경우 추가로 일 단위 필터링도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. year int  2000 ~ 3000 년 month int 1 ~ 12 월 day int {month} \u003e 0 1 ~ 31 일 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 일일 거래 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeDailyTransactionHistories ( \u0026 money2 . DescribeDailyTransactionHistoriesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Year : pointy . Int32 ( 2024 ), Month : pointy . Int32 ( 1 ), Day : pointy . Int32 ( 2 ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeDailyTransactionHistoriesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeDailyTransactionHistories ( ( new DescribeDailyTransactionHistoriesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withYear ( 2024 ) -\u003e withMonth ( 1 ) -\u003e withDay ( 2 ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeDailyTransactionHistoriesRequest ; import io.gs2.money2.result.DescribeDailyTransactionHistoriesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeDailyTransactionHistoriesResult result = client . describeDailyTransactionHistories ( new DescribeDailyTransactionHistoriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withYear ( 2024 ) . withMonth ( 1 ) . withDay ( 2 ) . withPageToken ( null ) . withLimit ( null ) ); List DailyTransactionHistory \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeDailyTransactionHistoriesResult \u003e asyncResult = null ; yield return client . DescribeDailyTransactionHistories ( new Gs2 . Gs2Money2 . Request . DescribeDailyTransactionHistoriesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithYear ( 2024 ) . WithMonth ( 1 ) . WithDay ( 2 ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeDailyTransactionHistories ( new Gs2Money2 . DescribeDailyTransactionHistoriesRequest () . withNamespaceName ( \"namespace-0001\" ) . withYear ( 2024 ) . withMonth ( 1 ) . withDay ( 2 ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_daily_transaction_histories ( money2 . DescribeDailyTransactionHistoriesRequest () . with_namespace_name ( 'namespace-0001' ) . with_year ( 2024 ) . with_month ( 1 ) . with_day ( 2 ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_daily_transaction_histories ({ namespaceName = \"namespace-0001\" , year = 2024 , month = 1 , day = 2 , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_daily_transaction_histories_async ({ namespaceName = \"namespace-0001\" , year = 2024 , month = 1 , day = 2 , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getDailyTransactionHistory 날짜와 통화를 지정하여 일별 거래 이력 취득 지정된 날짜와 통화의 일별 거래 이력 레코드를 취득합니다. 레코드에는 해당 일의 입출금액 및 발행/소비 횟수가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. year int  2000 ~ 3000 년 month int  1 ~ 12 월 day int  1 ~ 31 일 currency string  ~ 8자 통화 코드 Result 타입 설명 item DailyTransactionHistory 일일 거래 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetDailyTransactionHistory ( \u0026 money2 . GetDailyTransactionHistoryRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Year : pointy . Int32 ( 2024 ), Month : pointy . Int32 ( 1 ), Day : pointy . Int32 ( 2 ), Currency : pointy . String ( \"JPY\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetDailyTransactionHistoryRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getDailyTransactionHistory ( ( new GetDailyTransactionHistoryRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withYear ( 2024 ) -\u003e withMonth ( 1 ) -\u003e withDay ( 2 ) -\u003e withCurrency ( \"JPY\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetDailyTransactionHistoryRequest ; import io.gs2.money2.result.GetDailyTransactionHistoryResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetDailyTransactionHistoryResult result = client . getDailyTransactionHistory ( new GetDailyTransactionHistoryRequest () . withNamespaceName ( \"namespace-0001\" ) . withYear ( 2024 ) . withMonth ( 1 ) . withDay ( 2 ) . withCurrency ( \"JPY\" ) ); DailyTransactionHistory item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetDailyTransactionHistoryResult \u003e asyncResult = null ; yield return client . GetDailyTransactionHistory ( new Gs2 . Gs2Money2 . Request . GetDailyTransactionHistoryRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithYear ( 2024 ) . WithMonth ( 1 ) . WithDay ( 2 ) . WithCurrency ( \"JPY\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getDailyTransactionHistory ( new Gs2Money2 . GetDailyTransactionHistoryRequest () . withNamespaceName ( \"namespace-0001\" ) . withYear ( 2024 ) . withMonth ( 1 ) . withDay ( 2 ) . withCurrency ( \"JPY\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_daily_transaction_history ( money2 . GetDailyTransactionHistoryRequest () . with_namespace_name ( 'namespace-0001' ) . with_year ( 2024 ) . with_month ( 1 ) . with_day ( 2 ) . with_currency ( 'JPY' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_daily_transaction_history ({ namespaceName = \"namespace-0001\" , year = 2024 , month = 1 , day = 2 , currency = \"JPY\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_daily_transaction_history_async ({ namespaceName = \"namespace-0001\" , year = 2024 , month = 1 , day = 2 , currency = \"JPY\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeUnusedBalances 미사용 잔액 목록 취득 네임스페이스의 미사용 잔액 레코드에 대한 페이지네이션이 적용된 리스트를 취득합니다. 각 레코드는 특정 통화의 미사용 유상 통화 잔액을 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 미사용 잔액 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeUnusedBalances ( \u0026 money2 . DescribeUnusedBalancesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeUnusedBalancesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeUnusedBalances ( ( new DescribeUnusedBalancesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeUnusedBalancesRequest ; import io.gs2.money2.result.DescribeUnusedBalancesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeUnusedBalancesResult result = client . describeUnusedBalances ( new DescribeUnusedBalancesRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List UnusedBalance \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeUnusedBalancesResult \u003e asyncResult = null ; yield return client . DescribeUnusedBalances ( new Gs2 . Gs2Money2 . Request . DescribeUnusedBalancesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeUnusedBalances ( new Gs2Money2 . DescribeUnusedBalancesRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_unused_balances ( money2 . DescribeUnusedBalancesRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_unused_balances ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_unused_balances_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getUnusedBalance 통화를 지정하여 미사용 잔액 취득 지정된 통화의 미사용 잔액을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. currency string  ~ 8자 통화 코드 미사용 잔액이 추적되는 ISO 통화 코드(예: “JPY”, “USD”)입니다. Result 타입 설명 item UnusedBalance 미사용 잔액 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetUnusedBalance ( \u0026 money2 . GetUnusedBalanceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Currency : pointy . String ( \"JPY\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetUnusedBalanceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getUnusedBalance ( ( new GetUnusedBalanceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCurrency ( \"JPY\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetUnusedBalanceRequest ; import io.gs2.money2.result.GetUnusedBalanceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetUnusedBalanceResult result = client . getUnusedBalance ( new GetUnusedBalanceRequest () . withNamespaceName ( \"namespace-0001\" ) . withCurrency ( \"JPY\" ) ); UnusedBalance item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetUnusedBalanceResult \u003e asyncResult = null ; yield return client . GetUnusedBalance ( new Gs2 . Gs2Money2 . Request . GetUnusedBalanceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCurrency ( \"JPY\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getUnusedBalance ( new Gs2Money2 . GetUnusedBalanceRequest () . withNamespaceName ( \"namespace-0001\" ) . withCurrency ( \"JPY\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_unused_balance ( money2 . GetUnusedBalanceRequest () . with_namespace_name ( 'namespace-0001' ) . with_currency ( 'JPY' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_unused_balance ({ namespaceName = \"namespace-0001\" , currency = \"JPY\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_unused_balance_async ({ namespaceName = \"namespace-0001\" , currency = \"JPY\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStoreContentModels 스토어 콘텐츠 모델 목록 취득 현재 활성화된 스토어 콘텐츠 모델의 리스트를 취득합니다. 이 모델들은 플랫폼별 프로덕트 ID를 가진 구매 가능한 콘텐츠 아이템을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 스토어 콘텐츠 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeStoreContentModels ( \u0026 money2 . DescribeStoreContentModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeStoreContentModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeStoreContentModels ( ( new DescribeStoreContentModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeStoreContentModelsRequest ; import io.gs2.money2.result.DescribeStoreContentModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeStoreContentModelsResult result = client . describeStoreContentModels ( new DescribeStoreContentModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List StoreContentModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeStoreContentModelsResult \u003e asyncResult = null ; yield return client . DescribeStoreContentModels ( new Gs2 . Gs2Money2 . Request . DescribeStoreContentModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeStoreContentModels ( new Gs2Money2 . DescribeStoreContentModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_store_content_models ( money2 . DescribeStoreContentModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_store_content_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'money2' ) api_result_handler = client.describe_store_content_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getStoreContentModel 스토어 콘텐츠 모델 취득 Apple App Store 및 Google Play 설정을 포함하여 지정된 스토어 콘텐츠 모델을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. contentName string  ~ 128자 스토어 콘텐츠 모델 이름 Result 타입 설명 item StoreContentModel 스토어 콘텐츠 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetStoreContentModel ( \u0026 money2 . GetStoreContentModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ContentName : pointy . String ( \"content-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetStoreContentModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getStoreContentModel ( ( new GetStoreContentModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withContentName ( \"content-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetStoreContentModelRequest ; import io.gs2.money2.result.GetStoreContentModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetStoreContentModelResult result = client . getStoreContentModel ( new GetStoreContentModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); StoreContentModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetStoreContentModelResult \u003e asyncResult = null ; yield return client . GetStoreContentModel ( new Gs2 . Gs2Money2 . Request . GetStoreContentModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithContentName ( \"content-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getStoreContentModel ( new Gs2Money2 . GetStoreContentModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_store_content_model ( money2 . GetStoreContentModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_content_name ( 'content-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_store_content_model ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_store_content_model_async ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStoreSubscriptionContentModels 스토어 구독 콘텐츠 모델 목록 취득 현재 활성화된 스토어 구독 콘텐츠 모델의 리스트를 취득합니다. 이 모델들은 플랫폼별 설정과 스케줄링 파라미터를 가진 구독 상품을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 스토어 구독 콘텐츠 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeStoreSubscriptionContentModels ( \u0026 money2 . DescribeStoreSubscriptionContentModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeStoreSubscriptionContentModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeStoreSubscriptionContentModels ( ( new DescribeStoreSubscriptionContentModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeStoreSubscriptionContentModelsRequest ; import io.gs2.money2.result.DescribeStoreSubscriptionContentModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeStoreSubscriptionContentModelsResult result = client . describeStoreSubscriptionContentModels ( new DescribeStoreSubscriptionContentModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List StoreSubscriptionContentModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeStoreSubscriptionContentModelsResult \u003e asyncResult = null ; yield return client . DescribeStoreSubscriptionContentModels ( new Gs2 . Gs2Money2 . Request . DescribeStoreSubscriptionContentModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeStoreSubscriptionContentModels ( new Gs2Money2 . DescribeStoreSubscriptionContentModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_store_subscription_content_models ( money2 . DescribeStoreSubscriptionContentModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_store_subscription_content_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'money2' ) api_result_handler = client.describe_store_subscription_content_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getStoreSubscriptionContentModel 스토어 구독 콘텐츠 모델 취득 지정된 스토어 구독 콘텐츠 모델을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 Result 타입 설명 item StoreSubscriptionContentModel 스토어 구독 콘텐츠 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetStoreSubscriptionContentModel ( \u0026 money2 . GetStoreSubscriptionContentModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ContentName : pointy . String ( \"content-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetStoreSubscriptionContentModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getStoreSubscriptionContentModel ( ( new GetStoreSubscriptionContentModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withContentName ( \"content-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetStoreSubscriptionContentModelRequest ; import io.gs2.money2.result.GetStoreSubscriptionContentModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetStoreSubscriptionContentModelResult result = client . getStoreSubscriptionContentModel ( new GetStoreSubscriptionContentModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); StoreSubscriptionContentModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetStoreSubscriptionContentModelResult \u003e asyncResult = null ; yield return client . GetStoreSubscriptionContentModel ( new Gs2 . Gs2Money2 . Request . GetStoreSubscriptionContentModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithContentName ( \"content-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getStoreSubscriptionContentModel ( new Gs2Money2 . GetStoreSubscriptionContentModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_store_subscription_content_model ( money2 . GetStoreSubscriptionContentModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_content_name ( 'content-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_store_subscription_content_model ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_store_subscription_content_model_async ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 모델 마스터를 유효화 가능한 마스터 데이터 형식으로 내보내기 현재 등록되어 있는 모델 마스터(스토어 콘텐츠 모델 및 정기결제 콘텐츠 모델)를 유효화 가능한 마스터 데이터 형식으로 내보냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentModelMaster 유효화 가능한 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 money2 . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.ExportMasterRequest ; import io.gs2.money2.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Money2 . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . exportMaster ( new Gs2Money2 . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . export_master ( money2 . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentModelMaster 현재 활성화된 모델의 마스터 데이터 취득 스토어 콘텐츠 모델 및 정기결제 콘텐츠 모델을 포함한, 현재 활성화된 모델의 마스터 데이터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentModelMaster 현재 활성화된 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetCurrentModelMaster ( \u0026 money2 . GetCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getCurrentModelMaster ( ( new GetCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetCurrentModelMasterRequest ; import io.gs2.money2.result.GetCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetCurrentModelMasterResult result = client . getCurrentModelMaster ( new GetCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetCurrentModelMasterResult \u003e asyncResult = null ; yield return client . GetCurrentModelMaster ( new Gs2 . Gs2Money2 . Request . GetCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getCurrentModelMaster ( new Gs2Money2 . GetCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_current_model_master ( money2 . GetCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_current_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_current_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentModelMaster 현재 활성화된 모델의 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentMissionMaster 에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentModelMaster ( \u0026 money2 . PreUpdateCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\PreUpdateCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentModelMaster ( ( new PreUpdateCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.PreUpdateCurrentModelMasterRequest ; import io.gs2.money2.result.PreUpdateCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { PreUpdateCurrentModelMasterResult result = client . preUpdateCurrentModelMaster ( new PreUpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . PreUpdateCurrentModelMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentModelMaster ( new Gs2 . Gs2Money2 . Request . PreUpdateCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . preUpdateCurrentModelMaster ( new Gs2Money2 . PreUpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . pre_update_current_model_master ( money2 . PreUpdateCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.pre_update_current_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'money2' ) api_result_handler = client.pre_update_current_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentModelMaster 현재 활성화된 모델의 마스터 데이터 갱신 현재 활성화된 모델의 마스터 데이터를 갱신합니다. 대용량 마스터 데이터에 대응하기 위해 직접 갱신 모드와 사전 업로드 모드를 모두 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentModelMaster 갱신된 현재 활성화된 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . UpdateCurrentModelMaster ( \u0026 money2 . UpdateCurrentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2024-06-20\\\", \\\"storeContentModels\\\": [{\\\"name\\\": \\\"content-0001\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product1\\\"}, \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product1\\\"}}, {\\\"name\\\": \\\"content-0002\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product2\\\"}, \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product2\\\"}}, {\\\"name\\\": \\\"apple-only-0001\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product3\\\"}}, {\\\"name\\\": \\\"google-only-0001\\\", \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product3\\\"}}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\UpdateCurrentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e updateCurrentModelMaster ( ( new UpdateCurrentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2024-06-20 \\\" , \\\" storeContentModels \\\" : [{ \\\" name \\\" : \\\" content-0001 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product1 \\\" }, \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product1 \\\" }}, { \\\" name \\\" : \\\" content-0002 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product2 \\\" }, \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product2 \\\" }}, { \\\" name \\\" : \\\" apple-only-0001 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product3 \\\" }}, { \\\" name \\\" : \\\" google-only-0001 \\\" , \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product3 \\\" }}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.UpdateCurrentModelMasterRequest ; import io.gs2.money2.result.UpdateCurrentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { UpdateCurrentModelMasterResult result = client . updateCurrentModelMaster ( new UpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-06-20\\\", \\\"storeContentModels\\\": [{\\\"name\\\": \\\"content-0001\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product1\\\"}, \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product1\\\"}}, {\\\"name\\\": \\\"content-0002\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product2\\\"}, \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product2\\\"}}, {\\\"name\\\": \\\"apple-only-0001\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product3\\\"}}, {\\\"name\\\": \\\"google-only-0001\\\", \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product3\\\"}}]}\" ) . withUploadToken ( null ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . UpdateCurrentModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentModelMaster ( new Gs2 . Gs2Money2 . Request . UpdateCurrentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2024-06-20\\\", \\\"storeContentModels\\\": [{\\\"name\\\": \\\"content-0001\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product1\\\"}, \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product1\\\"}}, {\\\"name\\\": \\\"content-0002\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product2\\\"}, \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product2\\\"}}, {\\\"name\\\": \\\"apple-only-0001\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product3\\\"}}, {\\\"name\\\": \\\"google-only-0001\\\", \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product3\\\"}}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . updateCurrentModelMaster ( new Gs2Money2 . UpdateCurrentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-06-20\\\", \\\"storeContentModels\\\": [{\\\"name\\\": \\\"content-0001\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product1\\\"}, \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product1\\\"}}, {\\\"name\\\": \\\"content-0002\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product2\\\"}, \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product2\\\"}}, {\\\"name\\\": \\\"apple-only-0001\\\", \\\"appleAppStore\\\": {\\\"productId\\\": \\\"io.gs2.sample.apple.product3\\\"}}, {\\\"name\\\": \\\"google-only-0001\\\", \\\"googlePlay\\\": {\\\"productId\\\": \\\"io.gs2.sample.google.product3\\\"}}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . update_current_model_master ( money2 . UpdateCurrentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2024-06-20\", \"storeContentModels\": [{\"name\": \"content-0001\", \"appleAppStore\": {\"productId\": \"io.gs2.sample.apple.product1\"}, \"googlePlay\": {\"productId\": \"io.gs2.sample.google.product1\"}}, {\"name\": \"content-0002\", \"appleAppStore\": {\"productId\": \"io.gs2.sample.apple.product2\"}, \"googlePlay\": {\"productId\": \"io.gs2.sample.google.product2\"}}, {\"name\": \"apple-only-0001\", \"appleAppStore\": {\"productId\": \"io.gs2.sample.apple.product3\"}}, {\"name\": \"google-only-0001\", \"googlePlay\": {\"productId\": \"io.gs2.sample.google.product3\"}}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.update_current_model_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-06-20 \\\" , \\\" storeContentModels \\\" : [{ \\\" name \\\" : \\\" content-0001 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product1 \\\" }, \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product1 \\\" }}, { \\\" name \\\" : \\\" content-0002 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product2 \\\" }, \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product2 \\\" }}, { \\\" name \\\" : \\\" apple-only-0001 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product3 \\\" }}, { \\\" name \\\" : \\\" google-only-0001 \\\" , \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product3 \\\" }}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.update_current_model_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-06-20 \\\" , \\\" storeContentModels \\\" : [{ \\\" name \\\" : \\\" content-0001 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product1 \\\" }, \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product1 \\\" }}, { \\\" name \\\" : \\\" content-0002 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product2 \\\" }, \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product2 \\\" }}, { \\\" name \\\" : \\\" apple-only-0001 \\\" , \\\" appleAppStore \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.apple.product3 \\\" }}, { \\\" name \\\" : \\\" google-only-0001 \\\" , \\\" googlePlay \\\" : { \\\" productId \\\" : \\\" io.gs2.sample.google.product3 \\\" }}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentModelMasterFromGitHub 현재 활성화된 모델의 마스터 데이터를 GitHub에서 갱신 지정된 체크아웃 설정을 사용하여 GitHub 리포지토리에서 마스터 데이터를 체크아웃하고, 현재 활성화된 모델의 마스터 데이터를 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentModelMaster 갱신된 현재 활성화된 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . UpdateCurrentModelMasterFromGitHub ( \u0026 money2 . UpdateCurrentModelMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 money2 . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\UpdateCurrentModelMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e updateCurrentModelMasterFromGitHub ( ( new UpdateCurrentModelMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.UpdateCurrentModelMasterFromGitHubRequest ; import io.gs2.money2.result.UpdateCurrentModelMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { UpdateCurrentModelMasterFromGitHubResult result = client . updateCurrentModelMasterFromGitHub ( new UpdateCurrentModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . UpdateCurrentModelMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentModelMasterFromGitHub ( new Gs2 . Gs2Money2 . Request . UpdateCurrentModelMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Money2 . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . updateCurrentModelMasterFromGitHub ( new Gs2Money2 . UpdateCurrentModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Money2 . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . update_current_model_master_from_git_hub ( money2 . UpdateCurrentModelMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( money2 . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.update_current_model_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.update_current_model_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStoreContentModelMasters 스토어 콘텐츠 모델 마스터 목록 취득 스토어 콘텐츠 모델 마스터의 페이지네이션 목록을 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 스토어 콘텐츠 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스토어 콘텐츠 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeStoreContentModelMasters ( \u0026 money2 . DescribeStoreContentModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeStoreContentModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeStoreContentModelMasters ( ( new DescribeStoreContentModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeStoreContentModelMastersRequest ; import io.gs2.money2.result.DescribeStoreContentModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeStoreContentModelMastersResult result = client . describeStoreContentModelMasters ( new DescribeStoreContentModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List StoreContentModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeStoreContentModelMastersResult \u003e asyncResult = null ; yield return client . DescribeStoreContentModelMasters ( new Gs2 . Gs2Money2 . Request . DescribeStoreContentModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeStoreContentModelMasters ( new Gs2Money2 . DescribeStoreContentModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_store_content_model_masters ( money2 . DescribeStoreContentModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_store_content_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_store_content_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createStoreContentModelMaster 스토어 콘텐츠 마스터 신규 생성 Apple App Store 및 Google Play의 제품 ID용 플랫폼별 설정을 가진 새로운 스토어 콘텐츠 모델 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 스토어 콘텐츠 모델 이름 description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 appleAppStore AppleAppStoreContent Apple App Store의 콘텐츠 이 스토어 콘텐츠의 Apple App Store 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. googlePlay GooglePlayContent Google Play의 콘텐츠 이 스토어 콘텐츠의 Google Play 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. Result 타입 설명 item StoreContentModelMaster 생성한 스토어 콘텐츠 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . CreateStoreContentModelMaster ( \u0026 money2 . CreateStoreContentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"content-0001\" ), Description : nil , Metadata : nil , AppleAppStore : \u0026 money2 . AppleAppStoreContent { ProductId : pointy . String ( \"io.gs2.sample.apple.product1\" ), }, GooglePlay : \u0026 money2 . GooglePlayContent { ProductId : pointy . String ( \"io.gs2.sample.google.product1\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\CreateStoreContentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e createStoreContentModelMaster ( ( new CreateStoreContentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"content-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withAppleAppStore (( new \\Gs2\\Money2\\Model\\AppleAppStoreContent ()) -\u003e withProductId ( \"io.gs2.sample.apple.product1\" )) -\u003e withGooglePlay (( new \\Gs2\\Money2\\Model\\GooglePlayContent ()) -\u003e withProductId ( \"io.gs2.sample.google.product1\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.CreateStoreContentModelMasterRequest ; import io.gs2.money2.result.CreateStoreContentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { CreateStoreContentModelMasterResult result = client . createStoreContentModelMaster ( new CreateStoreContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"content-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withAppleAppStore ( new io . gs2 . money2 . model . AppleAppStoreContent () . withProductId ( \"io.gs2.sample.apple.product1\" )) . withGooglePlay ( new io . gs2 . money2 . model . GooglePlayContent () . withProductId ( \"io.gs2.sample.google.product1\" )) ); StoreContentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . CreateStoreContentModelMasterResult \u003e asyncResult = null ; yield return client . CreateStoreContentModelMaster ( new Gs2 . Gs2Money2 . Request . CreateStoreContentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"content-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithAppleAppStore ( new Gs2 . Gs2Money2 . Model . AppleAppStoreContent () . WithProductId ( \"io.gs2.sample.apple.product1\" )) . WithGooglePlay ( new Gs2 . Gs2Money2 . Model . GooglePlayContent () . WithProductId ( \"io.gs2.sample.google.product1\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . createStoreContentModelMaster ( new Gs2Money2 . CreateStoreContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"content-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withAppleAppStore ( new Gs2Money2 . model . AppleAppStoreContent () . withProductId ( \"io.gs2.sample.apple.product1\" )) . withGooglePlay ( new Gs2Money2 . model . GooglePlayContent () . withProductId ( \"io.gs2.sample.google.product1\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . create_store_content_model_master ( money2 . CreateStoreContentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'content-0001' ) . with_description ( None ) . with_metadata ( None ) . with_apple_app_store ( money2 . AppleAppStoreContent () . with_product_id ( 'io.gs2.sample.apple.product1' )) . with_google_play ( money2 . GooglePlayContent () . with_product_id ( 'io.gs2.sample.google.product1' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.create_store_content_model_master ({ namespaceName = \"namespace-0001\" , name = \"content-0001\" , description = nil , metadata = nil , appleAppStore = { productId = \"io.gs2.sample.apple.product1\" , }, googlePlay = { productId = \"io.gs2.sample.google.product1\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.create_store_content_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"content-0001\" , description = nil , metadata = nil , appleAppStore = { productId = \"io.gs2.sample.apple.product1\" , }, googlePlay = { productId = \"io.gs2.sample.google.product1\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStoreContentModelMaster 스토어 콘텐츠 마스터 취득 지정된 스토어 콘텐츠 모델 마스터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. contentName string  ~ 128자 스토어 콘텐츠 모델 이름 Result 타입 설명 item StoreContentModelMaster 스토어 콘텐츠 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetStoreContentModelMaster ( \u0026 money2 . GetStoreContentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ContentName : pointy . String ( \"content-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetStoreContentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getStoreContentModelMaster ( ( new GetStoreContentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withContentName ( \"content-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetStoreContentModelMasterRequest ; import io.gs2.money2.result.GetStoreContentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetStoreContentModelMasterResult result = client . getStoreContentModelMaster ( new GetStoreContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); StoreContentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetStoreContentModelMasterResult \u003e asyncResult = null ; yield return client . GetStoreContentModelMaster ( new Gs2 . Gs2Money2 . Request . GetStoreContentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithContentName ( \"content-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getStoreContentModelMaster ( new Gs2Money2 . GetStoreContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_store_content_model_master ( money2 . GetStoreContentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_content_name ( 'content-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_store_content_model_master ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_store_content_model_master_async ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateStoreContentModelMaster 스토어 콘텐츠 마스터 갱신 지정된 스토어 콘텐츠 모델 마스터를 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. contentName string  ~ 128자 스토어 콘텐츠 모델 이름 description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 appleAppStore AppleAppStoreContent Apple App Store의 콘텐츠 이 스토어 콘텐츠의 Apple App Store 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. googlePlay GooglePlayContent Google Play의 콘텐츠 이 스토어 콘텐츠의 Google Play 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. Result 타입 설명 item StoreContentModelMaster 갱신한 스토어 콘텐츠 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . UpdateStoreContentModelMaster ( \u0026 money2 . UpdateStoreContentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ContentName : pointy . String ( \"content-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , AppleAppStore : \u0026 money2 . AppleAppStoreContent { ProductId : pointy . String ( \"io.gs2.sample.apple.product2\" ), }, GooglePlay : \u0026 money2 . GooglePlayContent { ProductId : pointy . String ( \"io.gs2.sample.google.product2\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\UpdateStoreContentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e updateStoreContentModelMaster ( ( new UpdateStoreContentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withContentName ( \"content-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withAppleAppStore (( new \\Gs2\\Money2\\Model\\AppleAppStoreContent ()) -\u003e withProductId ( \"io.gs2.sample.apple.product2\" )) -\u003e withGooglePlay (( new \\Gs2\\Money2\\Model\\GooglePlayContent ()) -\u003e withProductId ( \"io.gs2.sample.google.product2\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.UpdateStoreContentModelMasterRequest ; import io.gs2.money2.result.UpdateStoreContentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { UpdateStoreContentModelMasterResult result = client . updateStoreContentModelMaster ( new UpdateStoreContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withAppleAppStore ( new io . gs2 . money2 . model . AppleAppStoreContent () . withProductId ( \"io.gs2.sample.apple.product2\" )) . withGooglePlay ( new io . gs2 . money2 . model . GooglePlayContent () . withProductId ( \"io.gs2.sample.google.product2\" )) ); StoreContentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . UpdateStoreContentModelMasterResult \u003e asyncResult = null ; yield return client . UpdateStoreContentModelMaster ( new Gs2 . Gs2Money2 . Request . UpdateStoreContentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithContentName ( \"content-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithAppleAppStore ( new Gs2 . Gs2Money2 . Model . AppleAppStoreContent () . WithProductId ( \"io.gs2.sample.apple.product2\" )) . WithGooglePlay ( new Gs2 . Gs2Money2 . Model . GooglePlayContent () . WithProductId ( \"io.gs2.sample.google.product2\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . updateStoreContentModelMaster ( new Gs2Money2 . UpdateStoreContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withAppleAppStore ( new Gs2Money2 . model . AppleAppStoreContent () . withProductId ( \"io.gs2.sample.apple.product2\" )) . withGooglePlay ( new Gs2Money2 . model . GooglePlayContent () . withProductId ( \"io.gs2.sample.google.product2\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . update_store_content_model_master ( money2 . UpdateStoreContentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_content_name ( 'content-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_apple_app_store ( money2 . AppleAppStoreContent () . with_product_id ( 'io.gs2.sample.apple.product2' )) . with_google_play ( money2 . GooglePlayContent () . with_product_id ( 'io.gs2.sample.google.product2' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.update_store_content_model_master ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , description = \"description1\" , metadata = nil , appleAppStore = { productId = \"io.gs2.sample.apple.product2\" , }, googlePlay = { productId = \"io.gs2.sample.google.product2\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.update_store_content_model_master_async ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , description = \"description1\" , metadata = nil , appleAppStore = { productId = \"io.gs2.sample.apple.product2\" , }, googlePlay = { productId = \"io.gs2.sample.google.product2\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteStoreContentModelMaster 스토어 콘텐츠 마스터 삭제 지정된 스토어 콘텐츠 모델 마스터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. contentName string  ~ 128자 스토어 콘텐츠 모델 이름 Result 타입 설명 item StoreContentModelMaster 삭제한 스토어 콘텐츠 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DeleteStoreContentModelMaster ( \u0026 money2 . DeleteStoreContentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ContentName : pointy . String ( \"content-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DeleteStoreContentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e deleteStoreContentModelMaster ( ( new DeleteStoreContentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withContentName ( \"content-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DeleteStoreContentModelMasterRequest ; import io.gs2.money2.result.DeleteStoreContentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DeleteStoreContentModelMasterResult result = client . deleteStoreContentModelMaster ( new DeleteStoreContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); StoreContentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DeleteStoreContentModelMasterResult \u003e asyncResult = null ; yield return client . DeleteStoreContentModelMaster ( new Gs2 . Gs2Money2 . Request . DeleteStoreContentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithContentName ( \"content-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . deleteStoreContentModelMaster ( new Gs2Money2 . DeleteStoreContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . delete_store_content_model_master ( money2 . DeleteStoreContentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_content_name ( 'content-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.delete_store_content_model_master ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.delete_store_content_model_master_async ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStoreSubscriptionContentModelMasters 스토어 정기결제 콘텐츠 모델 마스터 목록 취득 스토어 정기결제 콘텐츠 모델 마스터의 페이지네이션 목록을 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 스토어 정기결제 콘텐츠 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스토어 정기결제 콘텐츠 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DescribeStoreSubscriptionContentModelMasters ( \u0026 money2 . DescribeStoreSubscriptionContentModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DescribeStoreSubscriptionContentModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e describeStoreSubscriptionContentModelMasters ( ( new DescribeStoreSubscriptionContentModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DescribeStoreSubscriptionContentModelMastersRequest ; import io.gs2.money2.result.DescribeStoreSubscriptionContentModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DescribeStoreSubscriptionContentModelMastersResult result = client . describeStoreSubscriptionContentModelMasters ( new DescribeStoreSubscriptionContentModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List StoreSubscriptionContentModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DescribeStoreSubscriptionContentModelMastersResult \u003e asyncResult = null ; yield return client . DescribeStoreSubscriptionContentModelMasters ( new Gs2 . Gs2Money2 . Request . DescribeStoreSubscriptionContentModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . describeStoreSubscriptionContentModelMasters ( new Gs2Money2 . DescribeStoreSubscriptionContentModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . describe_store_subscription_content_model_masters ( money2 . DescribeStoreSubscriptionContentModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.describe_store_subscription_content_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'money2' ) api_result_handler = client.describe_store_subscription_content_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createStoreSubscriptionContentModelMaster 스토어 정기결제 콘텐츠 모델 마스터 신규 생성 스케줄링 파라미터와 Apple App Store 및 Google Play의 플랫폼별 설정을 가진 새로운 스토어 정기결제 콘텐츠 모델 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 스토어 구독 콘텐츠 모델 이름 description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 scheduleNamespaceId string  ~ 1024자 구독 기간을 연동시킬 GS2-Schedule의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN triggerName string  ~ 128자 구독 기간을 반영하는 트리거 이름 구독의 유효 기간을 반영하기 위해 실행되는 GS2-Schedule의 트리거 이름입니다. 트리거의 지속 시간은 구독의 유효 기한으로 설정됩니다. triggerExtendMode 문자열 열거형 enum {   “just”,   “rollupHour” } “just” 구독 기간을 트리거에 반영할 때의 모드 구독의 유효 기한을 트리거의 지속 시간에 어떻게 매핑할지를 제어합니다. “just\"는 구독 기간을 그대로 사용합니다. “rollupHour\"는 지정한 시각(UTC)까지 연장하여 하루 중간에 만료되는 것을 방지합니다. 정의 설명 just 그대로 구독 기간을 반영 rollupHour 다음 날짜 변경 시각까지 연장하여 구독 기간을 반영 rollupHour int {triggerExtendMode} == “rollupHour” 0 0 ~ 23 날짜 변경 시각(UTC) triggerExtendMode가 “rollupHour\"인 경우, 구독 기간은 유효 기한일의 이 시각(0~23, UTC)까지 연장됩니다. 사용자의 플레이 세션 중에 구독이 만료되는 것을 방지합니다. ※ triggerExtendMode이(가) “rollupHour” 이면 필수 reallocateSpanDays int 30 0 ~ 365 구독 계약 정보를 다른 사용자에게 할당할 수 있게 되는 기간(일) 마지막 할당 이후, 구독 계약을 다른 사용자에게 재할당할 수 있게 되기까지의 일수입니다. 사용자가 계정을 변경할 때의 부정 이용을 방지하기 위해 구독 이전에 대기 기간을 둡니다. appleAppStore AppleAppStoreSubscriptionContent Apple App Store 콘텐츠 이 구독 콘텐츠의 Apple App Store 구독 정보(구독 그룹 ID)입니다. googlePlay GooglePlaySubscriptionContent Google Play 콘텐츠 이 구독 콘텐츠의 Google Play 구독 정보(프로덕트 ID)입니다. Result 타입 설명 item StoreSubscriptionContentModelMaster 생성한 스토어 정기결제 콘텐츠 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . CreateStoreSubscriptionContentModelMaster ( \u0026 money2 . CreateStoreSubscriptionContentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"content-0001\" ), Description : nil , Metadata : nil , ScheduleNamespaceId : pointy . String ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ), TriggerName : pointy . String ( \"trigger-0001\" ), TriggerExtendMode : nil , RollupHour : nil , ReallocateSpanDays : nil , AppleAppStore : \u0026 money2 . AppleAppStoreSubscriptionContent { SubscriptionGroupIdentifier : pointy . String ( \"21642260\" ), }, GooglePlay : \u0026 money2 . GooglePlaySubscriptionContent { ProductId : pointy . String ( \"io.gs2.sample.google.product1\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\CreateStoreSubscriptionContentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e createStoreSubscriptionContentModelMaster ( ( new CreateStoreSubscriptionContentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"content-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withScheduleNamespaceId ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ) -\u003e withTriggerName ( \"trigger-0001\" ) -\u003e withTriggerExtendMode ( null ) -\u003e withRollupHour ( null ) -\u003e withReallocateSpanDays ( null ) -\u003e withAppleAppStore (( new \\Gs2\\Money2\\Model\\AppleAppStoreSubscriptionContent ()) -\u003e withSubscriptionGroupIdentifier ( \"21642260\" )) -\u003e withGooglePlay (( new \\Gs2\\Money2\\Model\\GooglePlaySubscriptionContent ()) -\u003e withProductId ( \"io.gs2.sample.google.product1\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.CreateStoreSubscriptionContentModelMasterRequest ; import io.gs2.money2.result.CreateStoreSubscriptionContentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { CreateStoreSubscriptionContentModelMasterResult result = client . createStoreSubscriptionContentModelMaster ( new CreateStoreSubscriptionContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"content-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withScheduleNamespaceId ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ) . withTriggerName ( \"trigger-0001\" ) . withTriggerExtendMode ( null ) . withRollupHour ( null ) . withReallocateSpanDays ( null ) . withAppleAppStore ( new io . gs2 . money2 . model . AppleAppStoreSubscriptionContent () . withSubscriptionGroupIdentifier ( \"21642260\" )) . withGooglePlay ( new io . gs2 . money2 . model . GooglePlaySubscriptionContent () . withProductId ( \"io.gs2.sample.google.product1\" )) ); StoreSubscriptionContentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . CreateStoreSubscriptionContentModelMasterResult \u003e asyncResult = null ; yield return client . CreateStoreSubscriptionContentModelMaster ( new Gs2 . Gs2Money2 . Request . CreateStoreSubscriptionContentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"content-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithScheduleNamespaceId ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ) . WithTriggerName ( \"trigger-0001\" ) . WithTriggerExtendMode ( null ) . WithRollupHour ( null ) . WithReallocateSpanDays ( null ) . WithAppleAppStore ( new Gs2 . Gs2Money2 . Model . AppleAppStoreSubscriptionContent () . WithSubscriptionGroupIdentifier ( \"21642260\" )) . WithGooglePlay ( new Gs2 . Gs2Money2 . Model . GooglePlaySubscriptionContent () . WithProductId ( \"io.gs2.sample.google.product1\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . createStoreSubscriptionContentModelMaster ( new Gs2Money2 . CreateStoreSubscriptionContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"content-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withScheduleNamespaceId ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ) . withTriggerName ( \"trigger-0001\" ) . withTriggerExtendMode ( null ) . withRollupHour ( null ) . withReallocateSpanDays ( null ) . withAppleAppStore ( new Gs2Money2 . model . AppleAppStoreSubscriptionContent () . withSubscriptionGroupIdentifier ( \"21642260\" )) . withGooglePlay ( new Gs2Money2 . model . GooglePlaySubscriptionContent () . withProductId ( \"io.gs2.sample.google.product1\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . create_store_subscription_content_model_master ( money2 . CreateStoreSubscriptionContentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'content-0001' ) . with_description ( None ) . with_metadata ( None ) . with_schedule_namespace_id ( 'grn:ap-northeast-1:YourOwnerId:schedule:namespaceName' ) . with_trigger_name ( 'trigger-0001' ) . with_trigger_extend_mode ( None ) . with_rollup_hour ( None ) . with_reallocate_span_days ( None ) . with_apple_app_store ( money2 . AppleAppStoreSubscriptionContent () . with_subscription_group_identifier ( '21642260' )) . with_google_play ( money2 . GooglePlaySubscriptionContent () . with_product_id ( 'io.gs2.sample.google.product1' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.create_store_subscription_content_model_master ({ namespaceName = \"namespace-0001\" , name = \"content-0001\" , description = nil , metadata = nil , scheduleNamespaceId = \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" , triggerName = \"trigger-0001\" , triggerExtendMode = nil , rollupHour = nil , reallocateSpanDays = nil , appleAppStore = { subscriptionGroupIdentifier = \"21642260\" , }, googlePlay = { productId = \"io.gs2.sample.google.product1\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.create_store_subscription_content_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"content-0001\" , description = nil , metadata = nil , scheduleNamespaceId = \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" , triggerName = \"trigger-0001\" , triggerExtendMode = nil , rollupHour = nil , reallocateSpanDays = nil , appleAppStore = { subscriptionGroupIdentifier = \"21642260\" , }, googlePlay = { productId = \"io.gs2.sample.google.product1\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStoreSubscriptionContentModelMaster 스토어 정기결제 콘텐츠 모델 마스터 취득 지정된 스토어 정기결제 콘텐츠 모델 마스터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 Result 타입 설명 item StoreSubscriptionContentModelMaster 스토어 정기결제 콘텐츠 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . GetStoreSubscriptionContentModelMaster ( \u0026 money2 . GetStoreSubscriptionContentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ContentName : pointy . String ( \"content-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\GetStoreSubscriptionContentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e getStoreSubscriptionContentModelMaster ( ( new GetStoreSubscriptionContentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withContentName ( \"content-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.GetStoreSubscriptionContentModelMasterRequest ; import io.gs2.money2.result.GetStoreSubscriptionContentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { GetStoreSubscriptionContentModelMasterResult result = client . getStoreSubscriptionContentModelMaster ( new GetStoreSubscriptionContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); StoreSubscriptionContentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . GetStoreSubscriptionContentModelMasterResult \u003e asyncResult = null ; yield return client . GetStoreSubscriptionContentModelMaster ( new Gs2 . Gs2Money2 . Request . GetStoreSubscriptionContentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithContentName ( \"content-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . getStoreSubscriptionContentModelMaster ( new Gs2Money2 . GetStoreSubscriptionContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . get_store_subscription_content_model_master ( money2 . GetStoreSubscriptionContentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_content_name ( 'content-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.get_store_subscription_content_model_master ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.get_store_subscription_content_model_master_async ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateStoreSubscriptionContentModelMaster 스토어 정기결제 콘텐츠 모델 마스터 갱신 지정된 스토어 정기결제 콘텐츠 모델 마스터를 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 scheduleNamespaceId string  ~ 1024자 구독 기간을 연동시킬 GS2-Schedule의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN triggerName string  ~ 128자 구독 기간을 반영하는 트리거 이름 구독의 유효 기간을 반영하기 위해 실행되는 GS2-Schedule의 트리거 이름입니다. 트리거의 지속 시간은 구독의 유효 기한으로 설정됩니다. triggerExtendMode 문자열 열거형 enum {   “just”,   “rollupHour” } “just” 구독 기간을 트리거에 반영할 때의 모드 구독의 유효 기한을 트리거의 지속 시간에 어떻게 매핑할지를 제어합니다. “just\"는 구독 기간을 그대로 사용합니다. “rollupHour\"는 지정한 시각(UTC)까지 연장하여 하루 중간에 만료되는 것을 방지합니다. 정의 설명 just 그대로 구독 기간을 반영 rollupHour 다음 날짜 변경 시각까지 연장하여 구독 기간을 반영 rollupHour int {triggerExtendMode} == “rollupHour” 0 0 ~ 23 날짜 변경 시각(UTC) triggerExtendMode가 “rollupHour\"인 경우, 구독 기간은 유효 기한일의 이 시각(0~23, UTC)까지 연장됩니다. 사용자의 플레이 세션 중에 구독이 만료되는 것을 방지합니다. ※ triggerExtendMode이(가) “rollupHour” 이면 필수 reallocateSpanDays int 30 0 ~ 365 구독 계약 정보를 다른 사용자에게 할당할 수 있게 되는 기간(일) 마지막 할당 이후, 구독 계약을 다른 사용자에게 재할당할 수 있게 되기까지의 일수입니다. 사용자가 계정을 변경할 때의 부정 이용을 방지하기 위해 구독 이전에 대기 기간을 둡니다. appleAppStore AppleAppStoreSubscriptionContent Apple App Store 콘텐츠 이 구독 콘텐츠의 Apple App Store 구독 정보(구독 그룹 ID)입니다. googlePlay GooglePlaySubscriptionContent Google Play 콘텐츠 이 구독 콘텐츠의 Google Play 구독 정보(프로덕트 ID)입니다. Result 타입 설명 item StoreSubscriptionContentModelMaster 갱신한 스토어 정기결제 콘텐츠 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . UpdateStoreSubscriptionContentModelMaster ( \u0026 money2 . UpdateStoreSubscriptionContentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ContentName : pointy . String ( \"content-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , ScheduleNamespaceId : pointy . String ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ), TriggerName : pointy . String ( \"trigger-0001\" ), TriggerExtendMode : nil , RollupHour : nil , ReallocateSpanDays : pointy . Int32 ( 45 ), AppleAppStore : \u0026 money2 . AppleAppStoreSubscriptionContent { SubscriptionGroupIdentifier : pointy . String ( \"21642260\" ), }, GooglePlay : \u0026 money2 . GooglePlaySubscriptionContent { ProductId : pointy . String ( \"io.gs2.sample.google.product2\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\UpdateStoreSubscriptionContentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e updateStoreSubscriptionContentModelMaster ( ( new UpdateStoreSubscriptionContentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withContentName ( \"content-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withScheduleNamespaceId ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ) -\u003e withTriggerName ( \"trigger-0001\" ) -\u003e withTriggerExtendMode ( null ) -\u003e withRollupHour ( null ) -\u003e withReallocateSpanDays ( 45 ) -\u003e withAppleAppStore (( new \\Gs2\\Money2\\Model\\AppleAppStoreSubscriptionContent ()) -\u003e withSubscriptionGroupIdentifier ( \"21642260\" )) -\u003e withGooglePlay (( new \\Gs2\\Money2\\Model\\GooglePlaySubscriptionContent ()) -\u003e withProductId ( \"io.gs2.sample.google.product2\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.UpdateStoreSubscriptionContentModelMasterRequest ; import io.gs2.money2.result.UpdateStoreSubscriptionContentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { UpdateStoreSubscriptionContentModelMasterResult result = client . updateStoreSubscriptionContentModelMaster ( new UpdateStoreSubscriptionContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withScheduleNamespaceId ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ) . withTriggerName ( \"trigger-0001\" ) . withTriggerExtendMode ( null ) . withRollupHour ( null ) . withReallocateSpanDays ( 45 ) . withAppleAppStore ( new io . gs2 . money2 . model . AppleAppStoreSubscriptionContent () . withSubscriptionGroupIdentifier ( \"21642260\" )) . withGooglePlay ( new io . gs2 . money2 . model . GooglePlaySubscriptionContent () . withProductId ( \"io.gs2.sample.google.product2\" )) ); StoreSubscriptionContentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . UpdateStoreSubscriptionContentModelMasterResult \u003e asyncResult = null ; yield return client . UpdateStoreSubscriptionContentModelMaster ( new Gs2 . Gs2Money2 . Request . UpdateStoreSubscriptionContentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithContentName ( \"content-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithScheduleNamespaceId ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ) . WithTriggerName ( \"trigger-0001\" ) . WithTriggerExtendMode ( null ) . WithRollupHour ( null ) . WithReallocateSpanDays ( 45 ) . WithAppleAppStore ( new Gs2 . Gs2Money2 . Model . AppleAppStoreSubscriptionContent () . WithSubscriptionGroupIdentifier ( \"21642260\" )) . WithGooglePlay ( new Gs2 . Gs2Money2 . Model . GooglePlaySubscriptionContent () . WithProductId ( \"io.gs2.sample.google.product2\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . updateStoreSubscriptionContentModelMaster ( new Gs2Money2 . UpdateStoreSubscriptionContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withScheduleNamespaceId ( \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" ) . withTriggerName ( \"trigger-0001\" ) . withTriggerExtendMode ( null ) . withRollupHour ( null ) . withReallocateSpanDays ( 45 ) . withAppleAppStore ( new Gs2Money2 . model . AppleAppStoreSubscriptionContent () . withSubscriptionGroupIdentifier ( \"21642260\" )) . withGooglePlay ( new Gs2Money2 . model . GooglePlaySubscriptionContent () . withProductId ( \"io.gs2.sample.google.product2\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . update_store_subscription_content_model_master ( money2 . UpdateStoreSubscriptionContentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_content_name ( 'content-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_schedule_namespace_id ( 'grn:ap-northeast-1:YourOwnerId:schedule:namespaceName' ) . with_trigger_name ( 'trigger-0001' ) . with_trigger_extend_mode ( None ) . with_rollup_hour ( None ) . with_reallocate_span_days ( 45 ) . with_apple_app_store ( money2 . AppleAppStoreSubscriptionContent () . with_subscription_group_identifier ( '21642260' )) . with_google_play ( money2 . GooglePlaySubscriptionContent () . with_product_id ( 'io.gs2.sample.google.product2' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.update_store_subscription_content_model_master ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , description = \"description1\" , metadata = nil , scheduleNamespaceId = \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" , triggerName = \"trigger-0001\" , triggerExtendMode = nil , rollupHour = nil , reallocateSpanDays = 45 , appleAppStore = { subscriptionGroupIdentifier = \"21642260\" , }, googlePlay = { productId = \"io.gs2.sample.google.product2\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.update_store_subscription_content_model_master_async ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , description = \"description1\" , metadata = nil , scheduleNamespaceId = \"grn:ap-northeast-1:YourOwnerId:schedule:namespaceName\" , triggerName = \"trigger-0001\" , triggerExtendMode = nil , rollupHour = nil , reallocateSpanDays = 45 , appleAppStore = { subscriptionGroupIdentifier = \"21642260\" , }, googlePlay = { productId = \"io.gs2.sample.google.product2\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteStoreSubscriptionContentModelMaster 스토어 정기결제 콘텐츠 모델 마스터 삭제 지정된 스토어 정기결제 콘텐츠 모델 마스터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. contentName string  ~ 128자 스토어 구독 콘텐츠 모델 이름 Result 타입 설명 item StoreSubscriptionContentModelMaster 삭제한 스토어 정기결제 콘텐츠 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/money2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := money2 . Gs2Money2RestClient { Session : \u0026 session , } result , err := client . DeleteStoreSubscriptionContentModelMaster ( \u0026 money2 . DeleteStoreSubscriptionContentModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ContentName : pointy . String ( \"content-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Money2\\Gs2Money2RestClient ; use Gs2\\Money2\\Request\\DeleteStoreSubscriptionContentModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Money2RestClient ( $session ); try { $result = $client -\u003e deleteStoreSubscriptionContentModelMaster ( ( new DeleteStoreSubscriptionContentModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withContentName ( \"content-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.money2.rest.Gs2Money2RestClient ; import io.gs2.money2.request.DeleteStoreSubscriptionContentModelMasterRequest ; import io.gs2.money2.result.DeleteStoreSubscriptionContentModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Money2RestClient client = new Gs2Money2RestClient ( session ); try { DeleteStoreSubscriptionContentModelMasterResult result = client . deleteStoreSubscriptionContentModelMaster ( new DeleteStoreSubscriptionContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); StoreSubscriptionContentModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Money2RestClient ( session ); AsyncResult Gs2 . Gs2Money2 . Result . DeleteStoreSubscriptionContentModelMasterResult \u003e asyncResult = null ; yield return client . DeleteStoreSubscriptionContentModelMaster ( new Gs2 . Gs2Money2 . Request . DeleteStoreSubscriptionContentModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithContentName ( \"content-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Money2 from '@/gs2/money2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Money2 . Gs2Money2RestClient ( session ); try { const result = await client . deleteStoreSubscriptionContentModelMaster ( new Gs2Money2 . DeleteStoreSubscriptionContentModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withContentName ( \"content-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import money2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = money2 . Gs2Money2RestClient ( session ) try : result = client . delete_store_subscription_content_model_master ( money2 . DeleteStoreSubscriptionContentModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_content_name ( 'content-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'money2' ) api_result = client.delete_store_subscription_content_model_master ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'money2' ) api_result_handler = client.delete_store_subscription_content_model_master_async ({ namespaceName = \"namespace-0001\" , contentName = \"content-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Money2 SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Money2 SDK API 레퍼런스","url":"/ko/api_reference/money2/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 version string ~ 1024자 버전 배포된 뉴스 콘텐츠의 현재 버전 식별자입니다. 새 게시글 데이터가 업로드되거나 GitHub 저장소에서 동기화되면 자동으로 갱신됩니다. 이 값은 기밀 정보이며 클라이언트에는 공개되지 않습니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그를 GS2-Log로 출력하기 위한 설정입니다. 설정하면 뉴스 관련 작업(게시글 조회, 콘텐츠 생성, Cookie 발급 등)이 모니터링과 분석을 위해 로그로 출력됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터(뉴스 사이트 데이터)를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(ZIP 형식) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Progress 콘텐츠 생성 진행 상황 업로드된 Hugo 사이트 데이터로부터 정적 HTML 콘텐츠를 생성하는 진행 상황을 추적합니다. 게시글 데이터가 업로드되거나 GitHub에서 동기화되면, 서로 다른 사용자 세그먼트(패턴)별로 콘텐츠가 생성됩니다. 이 엔티티는 예상 총 개수 대비 몇 개의 패턴이 생성되었는지를 모니터링하고, 생성 과정에서 발생하는 Output 로그 엔트리를 수집합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 progressId string ※ ~ 1024자 콘텐츠 생성 진행 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 uploadToken string  ~ 1024자 업로드 토큰 이 콘텐츠 생성을 트리거한 특정 업로드 세션을 식별하는 토큰입니다. 진행 상황 추적을 원래의 업로드 요청과 연관 짓는 데 사용됩니다. generated int  0 ~ 1000 생성된 콘텐츠 수 지금까지 정상적으로 생성된 콘텐츠 패턴의 개수입니다. 각 패턴이 처리될 때마다 이 값이 증가합니다. patternCount와 같아지면 생성이 완료됩니다. 최대 1000. patternCount int  0 ~ 1000 패턴 수 이번 업로드에서 생성해야 하는 콘텐츠 패턴(템플릿)의 총 개수입니다. 생성 작업의 전체 범위를 나타냅니다. 진행률은 generated / patternCount로 측정됩니다. 최대 1000. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Output 출력 콘텐츠 생성 과정에서 발생하는 로그 엔트리입니다. 각 Output은 Hugo 사이트 데이터로부터 정적 HTML을 생성하는 진행 상황이나 결과에 대한 메시지를 기록합니다. Output은 Progress 엔티티와 연결됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 outputId string ※ ~ 1024자 콘텐츠 생성 진행 출력 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 출력 이름 각 콘텐츠 생성 진행 출력의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 콘텐츠 생성 진행 출력을 식별하는 데 사용됩니다. text string  ~ 1048576자 텍스트 콘텐츠 생성 중에 출력된 로그 메시지 텍스트입니다. 상태 메시지, 오류 상세 정보 등 생성 과정에 관한 기타 정보를 포함할 수 있습니다. 최대 1MB. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 News 공지사항 게시글 Hugo 사이트 데이터로부터 생성된 개별 뉴스 게시글을 나타냅니다. 각 게시글은 섹션과 콘텐츠 경로에 속하며, 제목, 타임스탬프, Front Matter 메타데이터를 가집니다. 게시글은 필요에 따라 GS2-Schedule의 이벤트와 연결하여 표시 기간을 제어할 수 있습니다. Front Matter에는 JSON 형식의 추가 메타데이터가 포함되며, 표시 순서를 제어하기 위한 선택적 weight 필드도 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 section string  ~ 1024자 섹션 이름 이 게시글이 속한 섹션(카테고리)이며, Hugo의 콘텐츠 디렉터리 구조에 대응합니다. 게시글을 표시용 논리 그룹으로 구성하는 데 사용됩니다. content string  ~ 1024자 콘텐츠 섹션 내에서 이 게시글의 콘텐츠 경로 식별자입니다. 섹션과 함께 Hugo 콘텐츠 구조 내에서 게시글의 위치를 고유하게 식별합니다. title string  ~ 1024자 게시글 제목 뉴스 게시글의 제목이며, 일반적으로 Hugo의 Front Matter에서 정의됩니다. 플레이어에게 게시글 목록을 표시할 때 제목으로 표시됩니다. scheduleEventId string ~ 1024자 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timestamp long  타임스탬프 UNIX 시간(밀리초) frontMatter string  ~ 1024자 Front Matter 게시글에 연결된 JSON 형식의 메타데이터이며, 원래 Hugo 마크다운의 Front Matter에서 정의됩니다. weight(표시 순서 제어용), 태그, 카테고리 등 임의의 사용자 정의 속성 필드를 포함할 수 있습니다. SetCookieRequestEntry Cookie 설정 요청 엔트리 뉴스 게시글의 웹 콘텐츠에 접근하기 위해 브라우저/WebView에 설정해야 하는 Cookie의 키-값 쌍을 나타냅니다. 클라이언트는 게시글 URL을 불러오기 전에 이 Cookie를 설정하여 콘텐츠에 대한 인가된 접근을 보장해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 128자 Cookie 키 뉴스 콘텐츠에 인증된 방식으로 접근하기 위해 설정해야 하는 Cookie의 이름입니다. 최대 128자. value string  ~ 1024자 Cookie 값 뉴스 콘텐츠에 인증된 방식으로 접근하기 위해 설정해야 하는 Cookie의 값입니다. 최대 1024자. View 뷰 특정 사용자에 대한 뉴스 콘텐츠의 현재 버전과 이전 버전 간의 차이를 나타냅니다. 추가·갱신할 콘텐츠 목록과 삭제할 콘텐츠 목록, 두 가지 목록을 포함합니다. 이 차분 기반 방식을 통해 클라이언트 측에서 효율적인 증분 업데이트가 가능하며, 업데이트할 때마다 전체 콘텐츠를 다시 다운로드할 필요가 없습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 contents List 0 ~ 1000 items 추가·갱신 콘텐츠 클라이언트의 로컬 캐시에 추가하거나 갱신해야 할 콘텐츠 엔트리 목록입니다. 사용자가 마지막으로 조회한 버전 이후 새로 작성되거나 변경된 게시글을 나타냅니다. 최대 1000건. removeContents List 0 ~ 1000 items 삭제 콘텐츠 클라이언트의 로컬 캐시에서 삭제해야 할 콘텐츠 엔트리 목록입니다. 이전 버전 이후 삭제되었거나 더 이상 표시되지 않는 게시글을 나타냅니다. 최대 1000건. Content 콘텐츠 어떤 게시글을 포함하거나 제외할지 지정하는 View 정의에서 사용되는 콘텐츠 엔트리입니다. 각 Content는 섹션과 콘텐츠 경로로 식별되며, JSON 형식의 Front Matter 메타데이터를 가집니다. Front Matter는 JSON 형식으로 메타데이터를 보관합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 section string  ~ 1024자 섹션 이 콘텐츠 엔트리의 섹션(카테고리) 경로입니다. Hugo의 콘텐츠 디렉터리 구조에 대응합니다. content string  ~ 1024자 콘텐츠 경로 섹션 내에서 이 콘텐츠 엔트리를 고유하게 식별하기 위한 콘텐츠 경로 식별자입니다. View 내에서의 고유성은 이 필드로 보장됩니다. frontMatter string  ~ 1048576자 Front Matter 이 콘텐츠 엔트리에 연결된 JSON 형식의 메타데이터입니다. 제목, 날짜, weight, 태그 등 Hugo Front Matter 필드와 같은 게시글 속성을 포함합니다. 최대 1MB까지 메타데이터를 저장할 수 있습니다. 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 선택적으로 페이지 토큰을 사용하여 리스트의 특정 위치부터 데이터 취득을 시작할 수 있습니다. 또한 취득할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 news . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.DescribeNamespacesRequest ; import io.gs2.news.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2News . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2News . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . describe_namespaces ( news . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'news' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 API 요청·응답 로그를 GS2-Log로 출력하기 위한 설정입니다. 설정하면 뉴스 관련 작업(게시글 조회, 콘텐츠 생성, Cookie 발급 등)이 모니터링과 분석을 위해 로그로 출력됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 news . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , LogSetting : \u0026 news . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withLogSetting (( new \\Gs2\\News\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.CreateNamespaceRequest ; import io.gs2.news.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withLogSetting ( new io . gs2 . news . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2News . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithLogSetting ( new Gs2 . Gs2News . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . createNamespace ( new Gs2News . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withLogSetting ( new Gs2News . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . create_namespace ( news . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_log_setting ( news . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'news' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 news . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.GetNamespaceStatusRequest ; import io.gs2.news.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2News . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2News . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . get_namespace_status ( news . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'news' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 news . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.GetNamespaceRequest ; import io.gs2.news.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2News . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . getNamespace ( new Gs2News . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . get_namespace ( news . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'news' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 API 요청·응답 로그를 GS2-Log로 출력하기 위한 설정입니다. 설정하면 뉴스 관련 작업(게시글 조회, 콘텐츠 생성, Cookie 발급 등)이 모니터링과 분석을 위해 로그로 출력됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 news . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), LogSetting : \u0026 news . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withLogSetting (( new \\Gs2\\News\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.UpdateNamespaceRequest ; import io.gs2.news.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withLogSetting ( new io . gs2 . news . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2News . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithLogSetting ( new Gs2 . Gs2News . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2News . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withLogSetting ( new Gs2News . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . update_namespace ( news . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_log_setting ( news . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'news' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 news . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.DeleteNamespaceRequest ; import io.gs2.news.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2News . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2News . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . delete_namespace ( news . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'news' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 news . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.GetServiceVersionRequest ; import io.gs2.news.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2News . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2News . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . get_service_version ( news . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'news' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeProgresses 콘텐츠 생성 진행 상황 목록 조회 네임스페이스의 콘텐츠 생성 진행 상황 레코드를 페이지네이션과 함께 조회합니다. 각 레코드는 사이트 생성 작업의 상태를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 콘텐츠 생성 진행 상황 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . DescribeProgresses ( \u0026 news . DescribeProgressesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\DescribeProgressesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e describeProgresses ( ( new DescribeProgressesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.DescribeProgressesRequest ; import io.gs2.news.result.DescribeProgressesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { DescribeProgressesResult result = client . describeProgresses ( new DescribeProgressesRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Progress \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . DescribeProgressesResult \u003e asyncResult = null ; yield return client . DescribeProgresses ( new Gs2 . Gs2News . Request . DescribeProgressesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . describeProgresses ( new Gs2News . DescribeProgressesRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . describe_progresses ( news . DescribeProgressesRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.describe_progresses ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'news' ) api_result_handler = client.describe_progresses_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getProgress 콘텐츠 생성 진행 상황 조회 지정된 업로드 토큰의 콘텐츠 생성 진행 상황을 조회합니다. 사이트 생성 작업의 현재 상태와 상세 정보를 표시합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. uploadToken string  ~ 1024자 업로드 토큰 이 콘텐츠 생성을 트리거한 특정 업로드 세션을 식별하는 토큰입니다. 진행 상황 추적을 원래의 업로드 요청과 연관 짓는 데 사용됩니다. Result 타입 설명 item Progress 콘텐츠 생성 진행 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . GetProgress ( \u0026 news . GetProgressRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\GetProgressRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e getProgress ( ( new GetProgressRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.GetProgressRequest ; import io.gs2.news.result.GetProgressResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { GetProgressResult result = client . getProgress ( new GetProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withUploadToken ( \"upload-0001\" ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . GetProgressResult \u003e asyncResult = null ; yield return client . GetProgress ( new Gs2 . Gs2News . Request . GetProgressRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUploadToken ( \"upload-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . getProgress ( new Gs2News . GetProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withUploadToken ( \"upload-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . get_progress ( news . GetProgressRequest () . with_namespace_name ( 'namespace-0001' ) . with_upload_token ( 'upload-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.get_progress ({ namespaceName = \"namespace-0001\" , uploadToken = \"upload-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'news' ) api_result_handler = client.get_progress_async ({ namespaceName = \"namespace-0001\" , uploadToken = \"upload-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeOutputs 콘텐츠 생성 진행 출력 목록 조회 지정된 업로드 토큰에 대한 콘텐츠 생성 처리의 출력 로그를 페이지네이션과 함께 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. uploadToken string  ~ 1024자 업로드 토큰 이 콘텐츠 생성을 트리거한 특정 업로드 세션을 식별하는 토큰입니다. 진행 상황 추적을 원래의 업로드 요청과 연관 짓는 데 사용됩니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 콘텐츠 생성 진행 출력 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . DescribeOutputs ( \u0026 news . DescribeOutputsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\DescribeOutputsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e describeOutputs ( ( new DescribeOutputsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.DescribeOutputsRequest ; import io.gs2.news.result.DescribeOutputsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { DescribeOutputsResult result = client . describeOutputs ( new DescribeOutputsRequest () . withNamespaceName ( \"namespace-0001\" ) . withUploadToken ( \"upload-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Output \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . DescribeOutputsResult \u003e asyncResult = null ; yield return client . DescribeOutputs ( new Gs2 . Gs2News . Request . DescribeOutputsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . describeOutputs ( new Gs2News . DescribeOutputsRequest () . withNamespaceName ( \"namespace-0001\" ) . withUploadToken ( \"upload-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . describe_outputs ( news . DescribeOutputsRequest () . with_namespace_name ( 'namespace-0001' ) . with_upload_token ( 'upload-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.describe_outputs ({ namespaceName = \"namespace-0001\" , uploadToken = \"upload-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'news' ) api_result_handler = client.describe_outputs_async ({ namespaceName = \"namespace-0001\" , uploadToken = \"upload-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getOutput 콘텐츠 생성 진행 출력 조회 업로드 토큰과 출력 이름을 지정하여 콘텐츠 생성 처리의 특정 출력 로그 항목을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. uploadToken string  ~ 1024자 업로드 토큰 이 콘텐츠 생성을 트리거한 특정 업로드 세션을 식별하는 토큰입니다. 진행 상황 추적을 원래의 업로드 요청과 연관 짓는 데 사용됩니다. outputName string  UUID ~ 36자 출력 이름 각 콘텐츠 생성 진행 출력의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 콘텐츠 생성 진행 출력을 식별하는 데 사용됩니다. Result 타입 설명 item Output 콘텐츠 생성 진행 출력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . GetOutput ( \u0026 news . GetOutputRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), OutputName : pointy . String ( \"output-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\GetOutputRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e getOutput ( ( new GetOutputRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withOutputName ( \"output-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.GetOutputRequest ; import io.gs2.news.result.GetOutputResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { GetOutputResult result = client . getOutput ( new GetOutputRequest () . withNamespaceName ( \"namespace-0001\" ) . withUploadToken ( \"upload-0001\" ) . withOutputName ( \"output-0001\" ) ); Output item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . GetOutputResult \u003e asyncResult = null ; yield return client . GetOutput ( new Gs2 . Gs2News . Request . GetOutputRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithOutputName ( \"output-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . getOutput ( new Gs2News . GetOutputRequest () . withNamespaceName ( \"namespace-0001\" ) . withUploadToken ( \"upload-0001\" ) . withOutputName ( \"output-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . get_output ( news . GetOutputRequest () . with_namespace_name ( 'namespace-0001' ) . with_upload_token ( 'upload-0001' ) . with_output_name ( 'output-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.get_output ({ namespaceName = \"namespace-0001\" , uploadToken = \"upload-0001\" , outputName = \"output-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'news' ) api_result_handler = client.get_output_async ({ namespaceName = \"namespace-0001\" , uploadToken = \"upload-0001\" , outputName = \"output-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeNews 공지 기사 목록 조회 요청한 사용자의 공지 기사 목록을 조회합니다. 캐시 검증용 콘텐츠 해시와 템플릿 해시도 함께 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 items List 공지 기사 리스트 contentHash string 공지 기사 데이터의 해시 값 templateHash string 템플릿 데이터의 해시 값 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . DescribeNews ( \u0026 news . DescribeNewsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items contentHash := result . ContentHash templateHash := result . TemplateHash use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\DescribeNewsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e describeNews ( ( new DescribeNewsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); $contentHash = $result -\u003e getContentHash (); $templateHash = $result -\u003e getTemplateHash (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.DescribeNewsRequest ; import io.gs2.news.result.DescribeNewsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { DescribeNewsResult result = client . describeNews ( new DescribeNewsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List News \u003e items = result . getItems (); String contentHash = result . getContentHash (); String templateHash = result . getTemplateHash (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . DescribeNewsResult \u003e asyncResult = null ; yield return client . DescribeNews ( new Gs2 . Gs2News . Request . DescribeNewsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var contentHash = result . ContentHash ; var templateHash = result . TemplateHash ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . describeNews ( new Gs2News . DescribeNewsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); const contentHash = result . getContentHash (); const templateHash = result . getTemplateHash (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . describe_news ( news . DescribeNewsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items content_hash = result . content_hash template_hash = result . template_hash except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.describe_news ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; contentHash = result.contentHash ; templateHash = result.templateHash ; client = gs2 ( 'news' ) api_result_handler = client.describe_news_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; contentHash = result.contentHash ; templateHash = result.templateHash ; describeNewsByUserId 사용자 ID를 지정하여 공지 기사 목록 조회 지정한 사용자의 공지 기사 목록을 조회합니다. 캐시 검증용 콘텐츠 해시와 템플릿 해시도 함께 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 공지 기사 리스트 contentHash string 공지 기사 데이터의 해시 값 templateHash string 템플릿 데이터의 해시 값 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . DescribeNewsByUserId ( \u0026 news . DescribeNewsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items contentHash := result . ContentHash templateHash := result . TemplateHash use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\DescribeNewsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e describeNewsByUserId ( ( new DescribeNewsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $contentHash = $result -\u003e getContentHash (); $templateHash = $result -\u003e getTemplateHash (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.DescribeNewsByUserIdRequest ; import io.gs2.news.result.DescribeNewsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { DescribeNewsByUserIdResult result = client . describeNewsByUserId ( new DescribeNewsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List News \u003e items = result . getItems (); String contentHash = result . getContentHash (); String templateHash = result . getTemplateHash (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . DescribeNewsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeNewsByUserId ( new Gs2 . Gs2News . Request . DescribeNewsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var contentHash = result . ContentHash ; var templateHash = result . TemplateHash ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . describeNewsByUserId ( new Gs2News . DescribeNewsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const contentHash = result . getContentHash (); const templateHash = result . getTemplateHash (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . describe_news_by_user_id ( news . DescribeNewsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items content_hash = result . content_hash template_hash = result . template_hash except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.describe_news_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; contentHash = result.contentHash ; templateHash = result.templateHash ; client = gs2 ( 'news' ) api_result_handler = client.describe_news_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; contentHash = result.contentHash ; templateHash = result.templateHash ; wantGrant 공지 기사에 액세스하기 위해 필요한 정보를 조회 요청한 사용자의 공지 웹 콘텐츠에 액세스하기 위해 필요한 쿠키와 URL을 조회합니다. 브라우저 액세스용 쿠키, 브라우저 URL, 그리고 쿠키가 필요 없는 ZIP 다운로드 URL을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 items List 공지 웹 콘텐츠에 액세스하기 위해 설정이 필요한 쿠키 리스트 browserUrl string 공지 웹 콘텐츠에 액세스하기 위한 URL zipUrl string ZIP 형식의 공지 웹 콘텐츠에 액세스하기 위한 URL (액세스에 Cookie 설정 불필요) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . WantGrant ( \u0026 news . WantGrantRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items browserUrl := result . BrowserUrl zipUrl := result . ZipUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\WantGrantRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e wantGrant ( ( new WantGrantRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); $browserUrl = $result -\u003e getBrowserUrl (); $zipUrl = $result -\u003e getZipUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.WantGrantRequest ; import io.gs2.news.result.WantGrantResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { WantGrantResult result = client . wantGrant ( new WantGrantRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List SetCookieRequestEntry \u003e items = result . getItems (); String browserUrl = result . getBrowserUrl (); String zipUrl = result . getZipUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . WantGrantResult \u003e asyncResult = null ; yield return client . WantGrant ( new Gs2 . Gs2News . Request . WantGrantRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var browserUrl = result . BrowserUrl ; var zipUrl = result . ZipUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . wantGrant ( new Gs2News . WantGrantRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); const browserUrl = result . getBrowserUrl (); const zipUrl = result . getZipUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . want_grant ( news . WantGrantRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items browser_url = result . browser_url zip_url = result . zip_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.want_grant ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; browserUrl = result.browserUrl ; zipUrl = result.zipUrl ; client = gs2 ( 'news' ) api_result_handler = client.want_grant_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; browserUrl = result.browserUrl ; zipUrl = result.zipUrl ; wantGrantByUserId 사용자 ID를 지정하여 공지 기사에 액세스하기 위해 필요한 정보를 조회 지정한 사용자의 공지 웹 콘텐츠에 액세스하기 위해 필요한 쿠키와 URL을 조회합니다. 브라우저 액세스용 쿠키, 브라우저 URL, 그리고 쿠키가 필요 없는 ZIP 다운로드 URL을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 공지 웹 콘텐츠에 액세스하기 위해 설정이 필요한 쿠키 리스트 browserUrl string 공지 웹 콘텐츠에 액세스하기 위한 URL zipUrl string ZIP 형식의 공지 웹 콘텐츠에 액세스하기 위한 URL (액세스에 Cookie 설정 불필요) 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . WantGrantByUserId ( \u0026 news . WantGrantByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items browserUrl := result . BrowserUrl zipUrl := result . ZipUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\WantGrantByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e wantGrantByUserId ( ( new WantGrantByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $browserUrl = $result -\u003e getBrowserUrl (); $zipUrl = $result -\u003e getZipUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.WantGrantByUserIdRequest ; import io.gs2.news.result.WantGrantByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { WantGrantByUserIdResult result = client . wantGrantByUserId ( new WantGrantByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List SetCookieRequestEntry \u003e items = result . getItems (); String browserUrl = result . getBrowserUrl (); String zipUrl = result . getZipUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . WantGrantByUserIdResult \u003e asyncResult = null ; yield return client . WantGrantByUserId ( new Gs2 . Gs2News . Request . WantGrantByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var browserUrl = result . BrowserUrl ; var zipUrl = result . ZipUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . wantGrantByUserId ( new Gs2News . WantGrantByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const browserUrl = result . getBrowserUrl (); const zipUrl = result . getZipUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . want_grant_by_user_id ( news . WantGrantByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items browser_url = result . browser_url zip_url = result . zip_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.want_grant_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; browserUrl = result.browserUrl ; zipUrl = result.zipUrl ; client = gs2 ( 'news' ) api_result_handler = client.want_grant_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; browserUrl = result.browserUrl ; zipUrl = result.zipUrl ; prepareUpdateCurrentNewsMaster 현재 활성화된 공지 갱신 준비 응답에 포함된 URL에 사이트 데이터를 압축한 zip 파일을 업로드하고 업로드 완료 후 updateCurrentNewsMaster를 호출하여 반영합니다. zip 파일을 업로드할 때는 Content-Type에 application/zip을 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 templateUploadUrl string 템플릿 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . PrepareUpdateCurrentNewsMaster ( \u0026 news . PrepareUpdateCurrentNewsMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken templateUploadUrl := result . TemplateUploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\PrepareUpdateCurrentNewsMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e prepareUpdateCurrentNewsMaster ( ( new PrepareUpdateCurrentNewsMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $templateUploadUrl = $result -\u003e getTemplateUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.PrepareUpdateCurrentNewsMasterRequest ; import io.gs2.news.result.PrepareUpdateCurrentNewsMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { PrepareUpdateCurrentNewsMasterResult result = client . prepareUpdateCurrentNewsMaster ( new PrepareUpdateCurrentNewsMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String templateUploadUrl = result . getTemplateUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . PrepareUpdateCurrentNewsMasterResult \u003e asyncResult = null ; yield return client . PrepareUpdateCurrentNewsMaster ( new Gs2 . Gs2News . Request . PrepareUpdateCurrentNewsMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var templateUploadUrl = result . TemplateUploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . prepareUpdateCurrentNewsMaster ( new Gs2News . PrepareUpdateCurrentNewsMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const templateUploadUrl = result . getTemplateUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . prepare_update_current_news_master ( news . PrepareUpdateCurrentNewsMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token template_upload_url = result . template_upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.prepare_update_current_news_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; templateUploadUrl = result.templateUploadUrl ; client = gs2 ( 'news' ) api_result_handler = client.prepare_update_current_news_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; templateUploadUrl = result.templateUploadUrl ; updateCurrentNewsMaster 현재 유효한 공지 갱신 업로드된 사이트 데이터를 적용하여 공지 콘텐츠를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentNewsMaster ( \u0026 news . UpdateCurrentNewsMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UploadToken : pointy . String ( \"token\" ), } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\UpdateCurrentNewsMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e updateCurrentNewsMaster ( ( new UpdateCurrentNewsMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUploadToken ( \"token\" ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.UpdateCurrentNewsMasterRequest ; import io.gs2.news.result.UpdateCurrentNewsMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { UpdateCurrentNewsMasterResult result = client . updateCurrentNewsMaster ( new UpdateCurrentNewsMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withUploadToken ( \"token\" ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . UpdateCurrentNewsMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentNewsMaster ( new Gs2 . Gs2News . Request . UpdateCurrentNewsMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUploadToken ( \"token\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . updateCurrentNewsMaster ( new Gs2News . UpdateCurrentNewsMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withUploadToken ( \"token\" ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . update_current_news_master ( news . UpdateCurrentNewsMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_upload_token ( 'token' ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.update_current_news_master ({ namespaceName = \"namespace-0001\" , uploadToken = \"token\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'news' ) api_result_handler = client.update_current_news_master_async ({ namespaceName = \"namespace-0001\" , uploadToken = \"token\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareUpdateCurrentNewsMasterFromGitHub 현재 유효한 공지를 GitHub에서 갱신 GitHub 리포지토리에서 뉴스 사이트 데이터를 체크아웃하여 공지 콘텐츠 갱신을 준비합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터(뉴스 사이트 데이터)를 체크아웃하는 설정 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/news\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := news . Gs2NewsRestClient { Session : \u0026 session , } result , err := client . PrepareUpdateCurrentNewsMasterFromGitHub ( \u0026 news . PrepareUpdateCurrentNewsMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 news . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\News\\Gs2NewsRestClient ; use Gs2\\News\\Request\\PrepareUpdateCurrentNewsMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2NewsRestClient ( $session ); try { $result = $client -\u003e prepareUpdateCurrentNewsMasterFromGitHub ( ( new PrepareUpdateCurrentNewsMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $uploadToken = $result -\u003e getUploadToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.news.rest.Gs2NewsRestClient ; import io.gs2.news.request.PrepareUpdateCurrentNewsMasterFromGitHubRequest ; import io.gs2.news.result.PrepareUpdateCurrentNewsMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2NewsRestClient client = new Gs2NewsRestClient ( session ); try { PrepareUpdateCurrentNewsMasterFromGitHubResult result = client . prepareUpdateCurrentNewsMasterFromGitHub ( new PrepareUpdateCurrentNewsMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); String uploadToken = result . getUploadToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2NewsRestClient ( session ); AsyncResult Gs2 . Gs2News . Result . PrepareUpdateCurrentNewsMasterFromGitHubResult \u003e asyncResult = null ; yield return client . PrepareUpdateCurrentNewsMasterFromGitHub ( new Gs2 . Gs2News . Request . PrepareUpdateCurrentNewsMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2News . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2News from '@/gs2/news' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2News . Gs2NewsRestClient ( session ); try { const result = await client . prepareUpdateCurrentNewsMasterFromGitHub ( new Gs2News . PrepareUpdateCurrentNewsMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2News . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const uploadToken = result . getUploadToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import news session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = news . Gs2NewsRestClient ( session ) try : result = client . prepare_update_current_news_master_from_git_hub ( news . PrepareUpdateCurrentNewsMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( news . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) upload_token = result . upload_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'news' ) api_result = client.prepare_update_current_news_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; client = gs2 ( 'news' ) api_result_handler = client.prepare_update_current_news_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-News SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-News SDK API 레퍼런스","url":"/ko/api_reference/news/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 퀘스트 보상 지급 시 트랜잭션 처리 방식을 제어하는 설정입니다. startQuestScript ScriptSetting 퀘스트를 시작했을 때 실행할 스크립트 설정 Script 트리거 참조 - startQuest completeQuestScript ScriptSetting 퀘스트를 클리어했을 때 실행할 스크립트 설정 Script 트리거 참조 - completeQuest failedQuestScript ScriptSetting 퀘스트에 실패했을 때 실행할 스크립트 설정 Script 트리거 참조 - failedQuest logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 퀘스트의 시작·클리어·실패 이벤트를 추적하는 데 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Progress 퀘스트 진행 상황 퀘스트 시작 시 생성되며, 종료 시 삭제됩니다. 인게임 도중 앱을 종료한 경우 이 데이터가 남은 상태가 되며 엔티티가 보유한 진행 중인 퀘스트 정보를 통해 게임을 재개할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 progressId string ※ ~ 1024자 퀘스트 진행 상황 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID transactionId string  UUID ~ 36자 트랜잭션 ID 퀘스트 트랜잭션의 고유 식별자입니다. 퀘스트 진행 상황과 보상 배포를 관리하는 트랜잭션을 연결하는 데 사용됩니다. questModelId string  ~ 1024자 퀘스트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 현재 진행 중인 퀘스트 모델의 GRN입니다. 사용자가 플레이 중인 퀘스트를 식별하며, 퀘스트 도중 앱을 종료한 경우 게임 재개를 가능하게 합니다. randomSeed long  0 ~ 9223372036854775805 난수 시드 퀘스트 시작 시 할당되는 난수 시드입니다. 이 퀘스트 시도에서 선택되는 콘텐츠 배리에이션(보상 세트)을 결정하는 데 사용되며, 재현 가능한 결과를 보장합니다. rewards List [] 0 ~ 1000 items 클리어 보상 목록 퀘스트 클리어 시 지급되는 보상의 목록입니다. 난수 시드로 선택된 콘텐츠 배리에이션에 기반하여 퀘스트 시작 시 결정됩니다. failedRewards List [] 0 ~ 1000 items 실패 시 보상 목록 퀘스트 실패 시 지급되는 보상의 목록입니다. 퀘스트 시작 시 결정되며, 실패에 대한 위로 보상이나 비용 일부 반환으로 제공됩니다. metadata string ~ 256자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 CompletedQuestList 클리어 완료 퀘스트 목록 퀘스트 그룹 내에서 사용자가 클리어한 퀘스트를 추적합니다. 전제 퀘스트의 클리어 판정 및 최초 클리어 보너스 판정에 사용됩니다. 각 퀘스트 이름은 클리어 횟수에 관계없이 한 번만 기록됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 completedQuestListId string ※ ~ 1024자 클리어 완료 퀘스트 리스트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 이 클리어 완료 퀘스트 목록이 속한 퀘스트 그룹의 이름입니다. 사용자별·퀘스트 그룹별로 하나의 CompletedQuestList가 존재합니다. completeQuestNames List [] 0 ~ 1000 items 클리어 완료 퀘스트 이름 목록 이 퀘스트 그룹 내에서 사용자가 클리어한 퀘스트 이름의 목록입니다. 최초 클리어 시 퀘스트 이름이 추가되며, 중복은 제거됩니다. 전제 퀘스트 조건 평가 및 최초 클리어 보너스 판정에 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 QuestGroupModel 퀘스트 그룹 모델 퀘스트 그룹은 여러 퀘스트를 그룹화하기 위한 엔티티로, 퀘스트 진행은 그룹 내에서 동시에 하나만 실행할 수 있습니다. 즉, 퀘스트를 병렬로 진행할 수 있도록 하려면 그룹을 분리해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 questGroupModelId string ※ ~ 1024자 퀘스트 그룹 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. quests List [] 0 ~ 1000 items 그룹에 속한 퀘스트 이 퀘스트 그룹에 속한 퀘스트 모델의 목록입니다. 그룹 내에서는 동시에 하나의 퀘스트만 진행할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그룹 내 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule의 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화된 기간 동안에만 퀘스트를 시작할 수 있습니다. QuestModel 퀘스트 모델 퀘스트 모델은 인게임 시작에 필요한 대가와 클리어했을 때 얻는 보상을 보유하는 엔티티입니다. 클리어했을 때 얻는 보상은 여러 배리에이션을 준비할 수 있으며, 퀘스트 시작 시 추첨할 수 있습니다. 예를 들어, 퀘스트 자체는 동일하더라도 레어 몬스터의 출현 여부에 따라 두 가지 콘텐츠 배리에이션을 만들 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 questModelId string ※ ~ 1024자 퀘스트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. contents List [] 1 ~ 10 items 퀘스트 내용 이 퀘스트의 콘텐츠 배리에이션 목록입니다. 퀘스트 시작 시 가중치 추첨을 통해 하나의 배리에이션이 선택됩니다. 각 배리에이션마다 서로 다른 클리어 보상을 정의할 수 있어, 동일한 퀘스트라도 다른 결과(예: 레어 몬스터의 출현)를 구현할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화되어 있는 기간에만 퀘스트를 시작할 수 있습니다. 이 설정은 퀘스트 그룹의 도전 가능 기간보다 우선됩니다. firstCompleteAcquireActions List [] 0 ~ 10 items 최초 클리어 보상 입수 액션 리스트 이 퀘스트를 처음 클리어했을 때만 실행되는 입수 액션의 리스트입니다. 일반 클리어 보상에 더해 지급되는 보너스 보상으로, 최초 클리어 보너스를 구현하는 데 사용합니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 이 퀘스트를 시작하기 위한 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공해야만 퀘스트를 시작할 수 있습니다. 레벨 확인이나 아이템 소지 등의 요건을 강제하는 데 사용합니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 퀘스트의 시작 비용으로 실행되는 소비 액션입니다. 스태미나나 통화 등의 비용이 퀘스트 시작 시 소비됩니다. failedAcquireActions List [] 0 ~ 100 items 실패 시 입수 액션 리스트 퀘스트 실패 시 실행되는 입수 액션입니다. 실패 시 위로 보상이나 퀘스트 참가 비용의 일부 반환 등에 사용합니다. premiseQuestNames List [] 0 ~ 10 items 전제 퀘스트 이름 리스트 이 퀘스트에 도전하기 전에 클리어가 필요한 같은 그룹 내 퀘스트 이름의 리스트입니다. 연속되는 퀘스트 체인이나 분기되는 퀘스트 경로 작성에 사용합니다. Contents 콘텐츠 퀘스트 콘텐츠의 하나의 배리에이션을 나타냅니다. 각 퀘스트는 서로 다른 보상을 가진 여러 콘텐츠 배리에이션을 가질 수 있으며, 퀘스트 시작 시 가중치 추첨을 통해 하나가 선택됩니다. 메타데이터는 사용자 ID 및 컨피그 값을 이용한 템플릿 변수 치환을 지원합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 256자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. completeAcquireActions List [] 0 ~ 10 items 클리어 보상 획득 액션 이 콘텐츠 배리에이션으로 퀘스트를 클리어했을 때 실행되는 획득 액션입니다. 플레이어가 퀘스트 클리어 시 받게 되는 실제 보상을 정의합니다. weight int 1 1 ~ 2147483646 추첨 가중치 퀘스트 시작 시 이 콘텐츠 배리에이션의 무작위 선택에 사용되는 상대적 가중치입니다. 값이 클수록 이 배리에이션이 선택될 확률이 높아집니다. 예를 들어 가중치가 9인 배리에이션은 가중치가 1인 배리에이션보다 9배 선택되기 쉽습니다. Reward 보상 퀘스트 시작 시 결정되는 개별 보상 아이템을 나타냅니다. 실행할 입수 액션, 대상 리소스, 지급할 수량을 포함합니다. Progress 엔티티에 저장되며, 퀘스트 클리어 또는 실패 시 보상 배포에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 5242880자 리퀘스트 입수 액션 실행 시 사용되는 리퀘스트 파라미터의 JSON 문자열입니다. 대상 네임스페이스, 리소스 이름, 수량 등 보상의 구체적인 세부 사항을 포함합니다. itemId string  ~ 1024자 아이템 ID 보상으로 입수하는 리소스의 GRN입니다. 플레이어에게 지급되는 아이템, 통화, 기타 리소스를 특정합니다. value int  0 ~ 2147483646 수량 보상으로 지급하는 리소스의 수량입니다. 게임 로직에 따라 동적으로 조정할 수 있습니다. AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentQuestMaster 현재 활성화된 퀘스트 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 퀘스트 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 툴을 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Quest 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 QuestGroupModelMaster 퀘스트 그룹 모델 마스터 퀘스트 그룹 모델 마스터는 게임 내에서 사용되는 퀘스트 그룹 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 퀘스트 그룹 모델로 반영됩니다. 퀘스트 그룹은 여러 퀘스트를 그룹화하기 위한 엔티티로, 퀘스트 진행은 그룹 내에서 동시에 하나만 실행할 수 있습니다. 즉, 퀘스트를 병렬로 진행할 수 있도록 하려면 그룹을 분리해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 questGroupModelId string ※ ~ 1024자 퀘스트 그룹 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그룹 내 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule의 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화된 기간 동안에만 퀘스트를 시작할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 QuestModelMaster 퀘스트 모델 마스터 퀘스트 모델 마스터는 게임 내에서 사용되는 퀘스트 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 퀘스트 모델로 반영됩니다. 퀘스트 모델은 인게임 시작에 필요한 비용과 클리어 시 얻을 수 있는 보상을 보유하는 엔티티입니다. 클리어 시 얻을 수 있는 보상은 여러 배리에이션을 준비할 수 있으며, 퀘스트 시작 시 추첨할 수 있습니다. 예를 들어 퀘스트 자체는 동일하더라도, 레어 몬스터의 출현 여부에 따라 두 종류의 콘텐츠 배리에이션을 만들 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 questModelId string ※ ~ 1024자 퀘스트 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 name string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. contents List  1 ~ 10 items 퀘스트 내용 이 퀘스트의 콘텐츠 배리에이션 목록입니다. 퀘스트 시작 시 가중치 추첨을 통해 하나의 배리에이션이 선택됩니다. 각 배리에이션마다 서로 다른 클리어 보상을 정의할 수 있어, 동일한 퀘스트라도 다른 결과(예: 레어 몬스터의 출현)를 구현할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화되어 있는 기간에만 퀘스트를 시작할 수 있습니다. 이 설정은 퀘스트 그룹의 도전 가능 기간보다 우선됩니다. firstCompleteAcquireActions List [] 0 ~ 10 items 최초 클리어 보상 입수 액션 리스트 이 퀘스트를 처음 클리어했을 때만 실행되는 입수 액션의 리스트입니다. 일반 클리어 보상에 더해 지급되는 보너스 보상으로, 최초 클리어 보너스를 구현하는 데 사용합니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 이 퀘스트를 시작하기 위한 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공해야만 퀘스트를 시작할 수 있습니다. 레벨 확인이나 아이템 소지 등의 요건을 강제하는 데 사용합니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 퀘스트의 시작 비용으로 실행되는 소비 액션입니다. 스태미나나 통화 등의 비용이 퀘스트 시작 시 소비됩니다. failedAcquireActions List [] 0 ~ 100 items 실패 시 입수 액션 리스트 퀘스트 실패 시 실행되는 입수 액션입니다. 실패 시 위로 보상이나 퀘스트 참가 비용의 일부 반환 등에 사용합니다. premiseQuestNames List [] 0 ~ 10 items 전제 퀘스트 이름 리스트 이 퀘스트에 도전하기 전에 클리어가 필요한 같은 그룹 내 퀘스트 이름의 리스트입니다. 연속되는 퀘스트 체인이나 분기되는 퀘스트 경로 작성에 사용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 quest . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DescribeNamespacesRequest ; import io.gs2.quest.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Quest . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Quest . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . describe_namespaces ( quest . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'quest' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 퀘스트 보상 지급 시 트랜잭션 처리 방식을 제어하는 설정입니다. startQuestScript ScriptSetting 퀘스트를 시작했을 때 실행할 스크립트 설정 Script 트리거 참조 - startQuest completeQuestScript ScriptSetting 퀘스트를 클리어했을 때 실행할 스크립트 설정 Script 트리거 참조 - completeQuest failedQuestScript ScriptSetting 퀘스트에 실패했을 때 실행할 스크립트 설정 Script 트리거 참조 - failedQuest logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 퀘스트의 시작·클리어·실패 이벤트를 추적하는 데 사용됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 quest . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 quest . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, StartQuestScript : nil , CompleteQuestScript : nil , FailedQuestScript : nil , LogSetting : \u0026 quest . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Quest\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withStartQuestScript ( null ) -\u003e withCompleteQuestScript ( null ) -\u003e withFailedQuestScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Quest\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.CreateNamespaceRequest ; import io.gs2.quest.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . quest . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withStartQuestScript ( null ) . withCompleteQuestScript ( null ) . withFailedQuestScript ( null ) . withLogSetting ( new io . gs2 . quest . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Quest . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Quest . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithStartQuestScript ( null ) . WithCompleteQuestScript ( null ) . WithFailedQuestScript ( null ) . WithLogSetting ( new Gs2 . Gs2Quest . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Quest . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Quest . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withStartQuestScript ( null ) . withCompleteQuestScript ( null ) . withFailedQuestScript ( null ) . withLogSetting ( new Gs2Quest . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . create_namespace ( quest . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( quest . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_start_quest_script ( None ) . with_complete_quest_script ( None ) . with_failed_quest_script ( None ) . with_log_setting ( quest . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, startQuestScript = nil , completeQuestScript = nil , failedQuestScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, startQuestScript = nil , completeQuestScript = nil , failedQuestScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 quest . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetNamespaceStatusRequest ; import io.gs2.quest.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Quest . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Quest . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_namespace_status ( quest . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'quest' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 quest . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetNamespaceRequest ; import io.gs2.quest.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Quest . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Quest . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_namespace ( quest . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 퀘스트 보상 지급 시 트랜잭션 처리 방식을 제어하는 설정입니다. startQuestScript ScriptSetting 퀘스트를 시작했을 때 실행할 스크립트 설정 Script 트리거 참조 - startQuest completeQuestScript ScriptSetting 퀘스트를 클리어했을 때 실행할 스크립트 설정 Script 트리거 참조 - completeQuest failedQuestScript ScriptSetting 퀘스트에 실패했을 때 실행할 스크립트 설정 Script 트리거 참조 - failedQuest logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 퀘스트의 시작·클리어·실패 이벤트를 추적하는 데 사용됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 quest . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 quest . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, StartQuestScript : nil , CompleteQuestScript : nil , FailedQuestScript : nil , LogSetting : \u0026 quest . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Quest\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withStartQuestScript ( null ) -\u003e withCompleteQuestScript ( null ) -\u003e withFailedQuestScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Quest\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.UpdateNamespaceRequest ; import io.gs2.quest.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . quest . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withStartQuestScript ( null ) . withCompleteQuestScript ( null ) . withFailedQuestScript ( null ) . withLogSetting ( new io . gs2 . quest . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Quest . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Quest . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithStartQuestScript ( null ) . WithCompleteQuestScript ( null ) . WithFailedQuestScript ( null ) . WithLogSetting ( new Gs2 . Gs2Quest . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Quest . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Quest . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withStartQuestScript ( null ) . withCompleteQuestScript ( null ) . withFailedQuestScript ( null ) . withLogSetting ( new Gs2Quest . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . update_namespace ( quest . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( quest . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_start_quest_script ( None ) . with_complete_quest_script ( None ) . with_failed_quest_script ( None ) . with_log_setting ( quest . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, startQuestScript = nil , completeQuestScript = nil , failedQuestScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, startQuestScript = nil , completeQuestScript = nil , failedQuestScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 quest . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DeleteNamespaceRequest ; import io.gs2.quest.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Quest . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Quest . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . delete_namespace ( quest . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 quest . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetServiceVersionRequest ; import io.gs2.quest.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Quest . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Quest . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_service_version ( quest . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 quest . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DumpUserDataByUserIdRequest ; import io.gs2.quest.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Quest . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Quest . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . dump_user_data_by_user_id ( quest . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'quest' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 quest . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.quest.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Quest . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Quest . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( quest . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'quest' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 quest . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.CleanUserDataByUserIdRequest ; import io.gs2.quest.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Quest . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Quest . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . clean_user_data_by_user_id ( quest . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'quest' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 quest . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.quest.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Quest . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Quest . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( quest . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'quest' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 quest . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.quest.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Quest . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Quest . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( quest . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'quest' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 quest . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.ImportUserDataByUserIdRequest ; import io.gs2.quest.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Quest . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Quest . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . import_user_data_by_user_id ( quest . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'quest' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 quest . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.CheckImportUserDataByUserIdRequest ; import io.gs2.quest.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Quest . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Quest . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( quest . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'quest' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeProgressesByUserId 퀘스트 진행 상황 목록 조회 지정한 사용자의 퀘스트 진행 상황을 조회합니다. 사용자는 퀘스트 그룹마다 동시에 하나의 퀘스트 진행 상황만 보유할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 퀘스트 진행 상황 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DescribeProgressesByUserId ( \u0026 quest . DescribeProgressesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DescribeProgressesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e describeProgressesByUserId ( ( new DescribeProgressesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DescribeProgressesByUserIdRequest ; import io.gs2.quest.result.DescribeProgressesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DescribeProgressesByUserIdResult result = client . describeProgressesByUserId ( new DescribeProgressesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Progress \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DescribeProgressesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeProgressesByUserId ( new Gs2 . Gs2Quest . Request . DescribeProgressesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . describeProgressesByUserId ( new Gs2Quest . DescribeProgressesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . describe_progresses_by_user_id ( quest . DescribeProgressesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.describe_progresses_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'quest' ) api_result_handler = client.describe_progresses_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createProgressByUserId 사용자 ID를 지정하여 퀘스트 진행 상황 생성 퀘스트 모델을 참조하여 퀘스트 콘텐츠 추첨을 수행하고 퀘스트를 시작합니다. 이미 진행 중인 퀘스트가 있는 경우, force 플래그가 설정되어 있지 않으면 오류를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID questModelId string  ~ 1024자 시작할 퀘스트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN force bool false 이미 시작한 퀘스트가 있는 경우 이를 파기하고 시작할지 여부 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Progress 퀘스트 진행 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . CreateProgressByUserId ( \u0026 quest . CreateProgressByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), QuestModelId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:quest:namespace-0001:group:main:quest:1-1\" ), Force : nil , Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\CreateProgressByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e createProgressByUserId ( ( new CreateProgressByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withQuestModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:quest:namespace-0001:group:main:quest:1-1\" ) -\u003e withForce ( null ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.CreateProgressByUserIdRequest ; import io.gs2.quest.result.CreateProgressByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { CreateProgressByUserIdResult result = client . createProgressByUserId ( new CreateProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withQuestModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:quest:namespace-0001:group:main:quest:1-1\" ) . withForce ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . CreateProgressByUserIdResult \u003e asyncResult = null ; yield return client . CreateProgressByUserId ( new Gs2 . Gs2Quest . Request . CreateProgressByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithQuestModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:quest:namespace-0001:group:main:quest:1-1\" ) . WithForce ( null ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . createProgressByUserId ( new Gs2Quest . CreateProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withQuestModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:quest:namespace-0001:group:main:quest:1-1\" ) . withForce ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . create_progress_by_user_id ( quest . CreateProgressByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_quest_model_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:quest:namespace-0001:group:main:quest:1-1' ) . with_force ( None ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.create_progress_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , questModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:quest:namespace-0001:group:main:quest:1-1\" , force = nil , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.create_progress_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , questModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:quest:namespace-0001:group:main:quest:1-1\" , force = nil , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getProgress 퀘스트 진행 상황 조회 현재 퀘스트 진행 상황을 관련된 퀘스트 그룹 모델 및 퀘스트 모델과 함께 조회합니다. 퀘스트를 재개하거나 표시하는 데 필요한 모든 정보를 제공합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Progress 퀘스트 진행 상황 questGroup QuestGroupModel 퀘스트 그룹 모델 quest QuestModel 퀘스트 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetProgress ( \u0026 quest . GetProgressRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item questGroup := result . QuestGroup quest := result . Quest use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetProgressRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getProgress ( ( new GetProgressRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); $questGroup = $result -\u003e getQuestGroup (); $quest = $result -\u003e getQuest (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetProgressRequest ; import io.gs2.quest.result.GetProgressResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetProgressResult result = client . getProgress ( new GetProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Progress item = result . getItem (); QuestGroupModel questGroup = result . getQuestGroup (); QuestModel quest = result . getQuest (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetProgressResult \u003e asyncResult = null ; yield return client . GetProgress ( new Gs2 . Gs2Quest . Request . GetProgressRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var questGroup = result . QuestGroup ; var quest = result . Quest ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getProgress ( new Gs2Quest . GetProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); const questGroup = result . getQuestGroup (); const quest = result . getQuest (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_progress ( quest . GetProgressRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item quest_group = result . quest_group quest = result . quest except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_progress ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; questGroup = result.questGroup ; quest = result.quest ; client = gs2 ( 'quest' ) api_result_handler = client.get_progress_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; questGroup = result.questGroup ; quest = result.quest ; getProgressByUserId 사용자 ID를 지정하여 퀘스트 진행 상황 조회 지정한 사용자의 현재 퀘스트 진행 상황을 관련된 퀘스트 그룹 모델 및 퀘스트 모델과 함께 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Progress 퀘스트 진행 상황 questGroup QuestGroupModel 퀘스트 그룹 모델 quest QuestModel 퀘스트 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetProgressByUserId ( \u0026 quest . GetProgressByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item questGroup := result . QuestGroup quest := result . Quest use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetProgressByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getProgressByUserId ( ( new GetProgressByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $questGroup = $result -\u003e getQuestGroup (); $quest = $result -\u003e getQuest (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetProgressByUserIdRequest ; import io.gs2.quest.result.GetProgressByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetProgressByUserIdResult result = client . getProgressByUserId ( new GetProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Progress item = result . getItem (); QuestGroupModel questGroup = result . getQuestGroup (); QuestModel quest = result . getQuest (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetProgressByUserIdResult \u003e asyncResult = null ; yield return client . GetProgressByUserId ( new Gs2 . Gs2Quest . Request . GetProgressByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var questGroup = result . QuestGroup ; var quest = result . Quest ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getProgressByUserId ( new Gs2Quest . GetProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const questGroup = result . getQuestGroup (); const quest = result . getQuest (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_progress_by_user_id ( quest . GetProgressByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item quest_group = result . quest_group quest = result . quest except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_progress_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; questGroup = result.questGroup ; quest = result.quest ; client = gs2 ( 'quest' ) api_result_handler = client.get_progress_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; questGroup = result.questGroup ; quest = result.quest ; start 퀘스트 시작 같은 카테고리 내에서 게임 플레이어는 동시에 하나의 퀘스트만 실행할 수 있습니다. 이미 같은 카테고리 내에서 실행 중인 퀘스트가 있는 경우, 이 API는 오류를 반환합니다. 진행 중인 퀘스트를 조회하는 API를 호출하면 퀘스트를 재개하는 데 필요한 정보를 얻을 수 있습니다. force 파라미터에 true를 지정하면 강제로 퀘스트를 시작할 수 있습니다. 퀘스트가 정상적으로 시작되면 Progress 오브젝트를 응답합니다. Progress 오브젝트는 퀘스트를 실행하는 데 필요한 몇 가지 정보를 응답합니다. transactionId는 실행 중인 퀘스트 고유의 ID입니다. 퀘스트 완료 보고 시 이 ID를 지정해야 합니다. randomSeed는 퀘스트의 내용을 결정하는 데 사용할 수 있는 난수 시드입니다. 퀘스트를 시작할 때마다 다른 난수가 발급되므로, 이 값을 시드 값으로 사용하여 게임을 진행시키면 퀘스트 도중 애플리케이션이 강제 종료되더라도 동일한 조건으로 재개할 수 있습니다. rewards에는 이 퀘스트에서 획득 가능한 보상과 그 수량의 “최댓값\"이 제공됩니다. 퀘스트 완료 보고 시에도 rewards를 전달할 수 있으며, 여기서 퀘스트 중 실제로 획득한 아이템의 수량을 지정합니다. 자세한 내용은 퀘스트 완료 보고 API 문서를 참조하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 questName string  ~ 128자 퀘스트 모델 이름 accessToken string  ~ 128자 액세스 토큰 force bool false 이미 시작한 퀘스트가 있는 경우 이를 파기하고 시작할지 여부 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 퀘스트 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . Start ( \u0026 quest . StartRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"group-0001\" ), QuestName : pointy . String ( \"quest-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Force : nil , Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\StartRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e start ( ( new StartRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"group-0001\" ) -\u003e withQuestName ( \"quest-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withForce ( null ) -\u003e withConfig ( null ) ); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.StartRequest ; import io.gs2.quest.result.StartResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { StartResult result = client . start ( new StartRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"group-0001\" ) . withQuestName ( \"quest-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withForce ( null ) . withConfig ( null ) ); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . StartResult \u003e asyncResult = null ; yield return client . Start ( new Gs2 . Gs2Quest . Request . StartRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"group-0001\" ) . WithQuestName ( \"quest-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithForce ( null ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . start ( new Gs2Quest . StartRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"group-0001\" ) . withQuestName ( \"quest-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withForce ( null ) . withConfig ( null ) ); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . start ( quest . StartRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'group-0001' ) . with_quest_name ( 'quest-0001' ) . with_access_token ( 'accessToken-0001' ) . with_force ( None ) . with_config ( None ) ) transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.start ({ namespaceName = \"namespace-0001\" , questGroupName = \"group-0001\" , questName = \"quest-0001\" , accessToken = \"accessToken-0001\" , force = nil , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'quest' ) api_result_handler = client.start_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"group-0001\" , questName = \"quest-0001\" , accessToken = \"accessToken-0001\" , force = nil , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; startByUserId 사용자 ID를 지정하여 퀘스트 시작 같은 카테고리 내에서 게임 플레이어는 동시에 하나의 퀘스트만 실행할 수 있습니다. 이미 같은 카테고리 내에서 실행 중인 퀘스트가 있는 경우, 이 API는 오류를 반환합니다. 진행 중인 퀘스트를 조회하는 API를 호출하면 퀘스트를 재개하는 데 필요한 정보를 얻을 수 있습니다. force 파라미터에 true를 지정하면 강제로 퀘스트를 시작할 수 있습니다. 퀘스트가 정상적으로 시작되면 Progress 오브젝트를 응답합니다. Progress 오브젝트는 퀘스트를 실행하는 데 필요한 몇 가지 정보를 응답합니다. transactionId는 실행 중인 퀘스트 고유의 ID입니다. 퀘스트 완료 보고 시 이 ID를 지정해야 합니다. randomSeed는 퀘스트의 내용을 결정하는 데 사용할 수 있는 난수 시드입니다. 퀘스트를 시작할 때마다 다른 난수가 발급되므로, 이 값을 시드 값으로 사용하여 게임을 진행시키면 퀘스트 도중 애플리케이션이 강제 종료되더라도 동일한 조건으로 재개할 수 있습니다. rewards에는 이 퀘스트에서 획득 가능한 보상과 그 수량의 “최댓값\"이 제공됩니다. 퀘스트 완료 보고 시에도 rewards를 전달할 수 있으며, 여기서 퀘스트 중 실제로 획득한 아이템의 수량을 지정합니다. 자세한 내용은 퀘스트 완료 보고 API 문서를 참조하십시오. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 questName string  ~ 128자 퀘스트 모델 이름 userId string  ~ 128자 사용자ID force bool false 이미 시작한 퀘스트가 있는 경우 이를 파기하고 시작할지 여부 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 transactionId string 발행된 트랜잭션 ID stampSheet string 퀘스트 시작 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . StartByUserId ( \u0026 quest . StartByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"group-0001\" ), QuestName : pointy . String ( \"quest-0001\" ), UserId : pointy . String ( \"user-0001\" ), Force : nil , Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\StartByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e startByUserId ( ( new StartByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"group-0001\" ) -\u003e withQuestName ( \"quest-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withForce ( null ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.StartByUserIdRequest ; import io.gs2.quest.result.StartByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { StartByUserIdResult result = client . startByUserId ( new StartByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"group-0001\" ) . withQuestName ( \"quest-0001\" ) . withUserId ( \"user-0001\" ) . withForce ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . StartByUserIdResult \u003e asyncResult = null ; yield return client . StartByUserId ( new Gs2 . Gs2Quest . Request . StartByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"group-0001\" ) . WithQuestName ( \"quest-0001\" ) . WithUserId ( \"user-0001\" ) . WithForce ( null ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . startByUserId ( new Gs2Quest . StartByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"group-0001\" ) . withQuestName ( \"quest-0001\" ) . withUserId ( \"user-0001\" ) . withForce ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . start_by_user_id ( quest . StartByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'group-0001' ) . with_quest_name ( 'quest-0001' ) . with_user_id ( 'user-0001' ) . with_force ( None ) . with_config ( None ) . with_time_offset_token ( None ) ) transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.start_by_user_id ({ namespaceName = \"namespace-0001\" , questGroupName = \"group-0001\" , questName = \"quest-0001\" , userId = \"user-0001\" , force = nil , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'quest' ) api_result_handler = client.start_by_user_id_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"group-0001\" , questName = \"quest-0001\" , userId = \"user-0001\" , force = nil , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; end 퀘스트 완료 시작 시 전달받은 퀘스트에서 획득 가능한 보상과 그 수량의 “최댓값” 중, 퀘스트 내에서 실제로 획득한 보상을 rewards로 보고합니다. isComplete에는 퀘스트를 클리어했는지 여부를 보고합니다. 퀘스트에 실패한 경우, rewards의 값은 무시되고 퀘스트에 설정된 실패 시 보상이 지급됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rewards List [] 0 ~ 1000 items 퀘스트에서 실제로 획득한 보상 isComplete bool  퀘스트를 클리어했는지 여부 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item Progress 퀘스트 진행 상황 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 지급 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . End ( \u0026 quest . EndRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Rewards : [] quest . Reward {}, IsComplete : pointy . Bool ( true ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\EndRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e end ( ( new EndRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRewards ([]) -\u003e withIsComplete ( true ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.EndRequest ; import io.gs2.quest.result.EndResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { EndResult result = client . end ( new EndRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRewards ( new ArrayList Reward \u003e ()) . withIsComplete ( true ) . withConfig ( null ) ); Progress item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . EndResult \u003e asyncResult = null ; yield return client . End ( new Gs2 . Gs2Quest . Request . EndRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRewards ( new Gs2 . Gs2Quest . Model . Reward [] {}) . WithIsComplete ( true ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . end ( new Gs2Quest . EndRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRewards ([]) . withIsComplete ( true ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . end ( quest . EndRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_rewards ([]) . with_is_complete ( True ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.end ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rewards = {}, isComplete = true , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'quest' ) api_result_handler = client.end_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rewards = {}, isComplete = true , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; endByUserId 사용자 ID를 지정하여 퀘스트 완료 시작 시 전달받은 퀘스트에서 획득 가능한 보상과 그 수량의 “최댓값” 중, 퀘스트 내에서 실제로 획득한 보상을 rewards로 보고합니다. isComplete에는 퀘스트를 클리어했는지 여부를 보고합니다. 퀘스트에 실패한 경우, rewards의 값은 무시되고 퀘스트에 설정된 실패 시 보상이 지급됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rewards List [] 0 ~ 1000 items 퀘스트에서 실제로 획득한 보상 isComplete bool  퀘스트를 클리어했는지 여부 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Progress 퀘스트 진행 상황 transactionId string 발행된 트랜잭션 ID stampSheet string 보상 지급 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . EndByUserId ( \u0026 quest . EndByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Rewards : [] quest . Reward {}, IsComplete : pointy . Bool ( true ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\EndByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e endByUserId ( ( new EndByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRewards ([]) -\u003e withIsComplete ( true ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.EndByUserIdRequest ; import io.gs2.quest.result.EndByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { EndByUserIdResult result = client . endByUserId ( new EndByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRewards ( new ArrayList Reward \u003e ()) . withIsComplete ( true ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Progress item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . EndByUserIdResult \u003e asyncResult = null ; yield return client . EndByUserId ( new Gs2 . Gs2Quest . Request . EndByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRewards ( new Gs2 . Gs2Quest . Model . Reward [] {}) . WithIsComplete ( true ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . endByUserId ( new Gs2Quest . EndByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRewards ([]) . withIsComplete ( true ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . end_by_user_id ( quest . EndByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_rewards ([]) . with_is_complete ( True ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.end_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rewards = {}, isComplete = true , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'quest' ) api_result_handler = client.end_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rewards = {}, isComplete = true , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; deleteProgress 퀘스트 진행 상황 삭제 요청한 사용자의 현재 퀘스트 진행 상황을 삭제합니다. 진행 중인 퀘스트를 취소하고 새로운 퀘스트를 시작할 수 있게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Progress 퀘스트 진행 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DeleteProgress ( \u0026 quest . DeleteProgressRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DeleteProgressRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e deleteProgress ( ( new DeleteProgressRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DeleteProgressRequest ; import io.gs2.quest.result.DeleteProgressResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DeleteProgressResult result = client . deleteProgress ( new DeleteProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DeleteProgressResult \u003e asyncResult = null ; yield return client . DeleteProgress ( new Gs2 . Gs2Quest . Request . DeleteProgressRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . deleteProgress ( new Gs2Quest . DeleteProgressRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . delete_progress ( quest . DeleteProgressRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.delete_progress ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.delete_progress_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteProgressByUserId 사용자 ID를 지정하여 퀘스트 진행 상황 삭제 지정한 사용자의 현재 퀘스트 진행 상황을 삭제합니다. 진행 중인 퀘스트를 취소하고 새로운 퀘스트를 시작할 수 있게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Progress 퀘스트 진행 상황 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DeleteProgressByUserId ( \u0026 quest . DeleteProgressByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DeleteProgressByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e deleteProgressByUserId ( ( new DeleteProgressByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DeleteProgressByUserIdRequest ; import io.gs2.quest.result.DeleteProgressByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DeleteProgressByUserIdResult result = client . deleteProgressByUserId ( new DeleteProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Progress item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DeleteProgressByUserIdResult \u003e asyncResult = null ; yield return client . DeleteProgressByUserId ( new Gs2 . Gs2Quest . Request . DeleteProgressByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . deleteProgressByUserId ( new Gs2Quest . DeleteProgressByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . delete_progress_by_user_id ( quest . DeleteProgressByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.delete_progress_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.delete_progress_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCompletedQuestLists 클리어한 퀘스트 리스트 목록 조회 요청한 사용자의 클리어한 퀘스트 리스트를 페이지네이션 방식으로 조회합니다. 각 항목은 퀘스트 그룹과 그 안에서 클리어한 퀘스트를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클리어한 퀘스트 리스트 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DescribeCompletedQuestLists ( \u0026 quest . DescribeCompletedQuestListsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DescribeCompletedQuestListsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e describeCompletedQuestLists ( ( new DescribeCompletedQuestListsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DescribeCompletedQuestListsRequest ; import io.gs2.quest.result.DescribeCompletedQuestListsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DescribeCompletedQuestListsResult result = client . describeCompletedQuestLists ( new DescribeCompletedQuestListsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List CompletedQuestList \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DescribeCompletedQuestListsResult \u003e asyncResult = null ; yield return client . DescribeCompletedQuestLists ( new Gs2 . Gs2Quest . Request . DescribeCompletedQuestListsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . describeCompletedQuestLists ( new Gs2Quest . DescribeCompletedQuestListsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . describe_completed_quest_lists ( quest . DescribeCompletedQuestListsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.describe_completed_quest_lists ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'quest' ) api_result_handler = client.describe_completed_quest_lists_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeCompletedQuestListsByUserId 사용자 ID를 지정하여 클리어한 퀘스트 리스트 목록 조회 지정한 사용자의 클리어한 퀘스트 리스트를 페이지네이션 방식으로 조회합니다. 각 항목은 퀘스트 그룹과 그 안에서 클리어한 퀘스트를 나타냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 클리어한 퀘스트 리스트 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DescribeCompletedQuestListsByUserId ( \u0026 quest . DescribeCompletedQuestListsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DescribeCompletedQuestListsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e describeCompletedQuestListsByUserId ( ( new DescribeCompletedQuestListsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DescribeCompletedQuestListsByUserIdRequest ; import io.gs2.quest.result.DescribeCompletedQuestListsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DescribeCompletedQuestListsByUserIdResult result = client . describeCompletedQuestListsByUserId ( new DescribeCompletedQuestListsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List CompletedQuestList \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DescribeCompletedQuestListsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeCompletedQuestListsByUserId ( new Gs2 . Gs2Quest . Request . DescribeCompletedQuestListsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . describeCompletedQuestListsByUserId ( new Gs2Quest . DescribeCompletedQuestListsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . describe_completed_quest_lists_by_user_id ( quest . DescribeCompletedQuestListsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.describe_completed_quest_lists_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'quest' ) api_result_handler = client.describe_completed_quest_lists_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getCompletedQuestList 클리어한 퀘스트 리스트 조회 지정한 퀘스트 그룹의 클리어한 퀘스트 리스트를 조회합니다. 요청한 사용자가 그룹 내에서 클리어한 모든 퀘스트 이름을 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 이 클리어 완료 퀘스트 목록이 속한 퀘스트 그룹의 이름입니다. 사용자별·퀘스트 그룹별로 하나의 CompletedQuestList가 존재합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item CompletedQuestList 클리어한 퀘스트 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetCompletedQuestList ( \u0026 quest . GetCompletedQuestListRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"main\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetCompletedQuestListRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getCompletedQuestList ( ( new GetCompletedQuestListRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"main\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetCompletedQuestListRequest ; import io.gs2.quest.result.GetCompletedQuestListResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetCompletedQuestListResult result = client . getCompletedQuestList ( new GetCompletedQuestListRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"main\" ) . withAccessToken ( \"accessToken-0001\" ) ); CompletedQuestList item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetCompletedQuestListResult \u003e asyncResult = null ; yield return client . GetCompletedQuestList ( new Gs2 . Gs2Quest . Request . GetCompletedQuestListRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"main\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getCompletedQuestList ( new Gs2Quest . GetCompletedQuestListRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"main\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_completed_quest_list ( quest . GetCompletedQuestListRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'main' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_completed_quest_list ({ namespaceName = \"namespace-0001\" , questGroupName = \"main\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_completed_quest_list_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"main\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCompletedQuestListByUserId 사용자 ID를 지정하여 클리어한 퀘스트 리스트 조회 지정한 퀘스트 그룹과 사용자의 클리어한 퀘스트 리스트를 조회합니다. 사용자가 그룹 내에서 클리어한 모든 퀘스트 이름을 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 이 클리어 완료 퀘스트 목록이 속한 퀘스트 그룹의 이름입니다. 사용자별·퀘스트 그룹별로 하나의 CompletedQuestList가 존재합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item CompletedQuestList 클리어한 퀘스트 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetCompletedQuestListByUserId ( \u0026 quest . GetCompletedQuestListByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"main\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetCompletedQuestListByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getCompletedQuestListByUserId ( ( new GetCompletedQuestListByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"main\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetCompletedQuestListByUserIdRequest ; import io.gs2.quest.result.GetCompletedQuestListByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetCompletedQuestListByUserIdResult result = client . getCompletedQuestListByUserId ( new GetCompletedQuestListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"main\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); CompletedQuestList item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetCompletedQuestListByUserIdResult \u003e asyncResult = null ; yield return client . GetCompletedQuestListByUserId ( new Gs2 . Gs2Quest . Request . GetCompletedQuestListByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"main\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getCompletedQuestListByUserId ( new Gs2Quest . GetCompletedQuestListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"main\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_completed_quest_list_by_user_id ( quest . GetCompletedQuestListByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'main' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_completed_quest_list_by_user_id ({ namespaceName = \"namespace-0001\" , questGroupName = \"main\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_completed_quest_list_by_user_id_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"main\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCompletedQuestListByUserId 사용자 ID를 지정하여 클리어한 퀘스트 리스트 삭제 지정한 퀘스트 그룹과 사용자의 클리어한 퀘스트 리스트를 삭제합니다. 그룹 내 모든 퀘스트의 클리어 상태가 초기화되어, 첫 클리어 보상을 다시 획득할 수 있게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 이 클리어 완료 퀘스트 목록이 속한 퀘스트 그룹의 이름입니다. 사용자별·퀘스트 그룹별로 하나의 CompletedQuestList가 존재합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item CompletedQuestList 클리어한 퀘스트 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DeleteCompletedQuestListByUserId ( \u0026 quest . DeleteCompletedQuestListByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"main\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DeleteCompletedQuestListByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e deleteCompletedQuestListByUserId ( ( new DeleteCompletedQuestListByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"main\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DeleteCompletedQuestListByUserIdRequest ; import io.gs2.quest.result.DeleteCompletedQuestListByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DeleteCompletedQuestListByUserIdResult result = client . deleteCompletedQuestListByUserId ( new DeleteCompletedQuestListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"main\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); CompletedQuestList item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DeleteCompletedQuestListByUserIdResult \u003e asyncResult = null ; yield return client . DeleteCompletedQuestListByUserId ( new Gs2 . Gs2Quest . Request . DeleteCompletedQuestListByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"main\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . deleteCompletedQuestListByUserId ( new Gs2Quest . DeleteCompletedQuestListByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"main\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . delete_completed_quest_list_by_user_id ( quest . DeleteCompletedQuestListByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'main' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.delete_completed_quest_list_by_user_id ({ namespaceName = \"namespace-0001\" , questGroupName = \"main\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.delete_completed_quest_list_by_user_id_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"main\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeQuestGroupModels 퀘스트 그룹 모델 목록 조회 현재 활성화된 퀘스트 그룹 모델의 목록을 조회합니다. 퀘스트 그룹은 퀘스트를 정리하는 카테고리 역할을 하며, 사용자는 그룹별로 하나의 퀘스트만 진행할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 퀘스트 그룹 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DescribeQuestGroupModels ( \u0026 quest . DescribeQuestGroupModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DescribeQuestGroupModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e describeQuestGroupModels ( ( new DescribeQuestGroupModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DescribeQuestGroupModelsRequest ; import io.gs2.quest.result.DescribeQuestGroupModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DescribeQuestGroupModelsResult result = client . describeQuestGroupModels ( new DescribeQuestGroupModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List QuestGroupModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DescribeQuestGroupModelsResult \u003e asyncResult = null ; yield return client . DescribeQuestGroupModels ( new Gs2 . Gs2Quest . Request . DescribeQuestGroupModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . describeQuestGroupModels ( new Gs2Quest . DescribeQuestGroupModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . describe_quest_group_models ( quest . DescribeQuestGroupModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.describe_quest_group_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'quest' ) api_result_handler = client.describe_quest_group_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getQuestGroupModel 퀘스트 그룹 모델 조회 챌린지 기간 이벤트 설정과, 포함된 퀘스트 모델 목록을 포함하여 지정된 퀘스트 그룹 모델을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item QuestGroupModel 퀘스트 그룹 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetQuestGroupModel ( \u0026 quest . GetQuestGroupModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetQuestGroupModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getQuestGroupModel ( ( new GetQuestGroupModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetQuestGroupModelRequest ; import io.gs2.quest.result.GetQuestGroupModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetQuestGroupModelResult result = client . getQuestGroupModel ( new GetQuestGroupModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) ); QuestGroupModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetQuestGroupModelResult \u003e asyncResult = null ; yield return client . GetQuestGroupModel ( new Gs2 . Gs2Quest . Request . GetQuestGroupModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getQuestGroupModel ( new Gs2Quest . GetQuestGroupModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_quest_group_model ( quest . GetQuestGroupModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_quest_group_model ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_quest_group_model_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeQuestModels 퀘스트 모델 리스트 조회 지정한 퀘스트 그룹 내 현재 활성화된 퀘스트 모델의 리스트를 조회합니다. 이 모델들은 퀘스트의 콘텐츠, 보상, 조건을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 퀘스트 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DescribeQuestModels ( \u0026 quest . DescribeQuestModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DescribeQuestModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e describeQuestModels ( ( new DescribeQuestModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DescribeQuestModelsRequest ; import io.gs2.quest.result.DescribeQuestModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DescribeQuestModelsResult result = client . describeQuestModels ( new DescribeQuestModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) ); List QuestModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DescribeQuestModelsResult \u003e asyncResult = null ; yield return client . DescribeQuestModels ( new Gs2 . Gs2Quest . Request . DescribeQuestModelsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . describeQuestModels ( new Gs2Quest . DescribeQuestModelsRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . describe_quest_models ( quest . DescribeQuestModelsRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.describe_quest_models ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'quest' ) api_result_handler = client.describe_quest_models_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getQuestModel 퀘스트 모델 조회 콘텐츠 정의, 보상 설정, 소비 액션, 전제 퀘스트 조건을 포함한 지정된 퀘스트 모델을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questName string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item QuestModel 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetQuestModel ( \u0026 quest . GetQuestModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), QuestName : pointy . String ( \"quest-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetQuestModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getQuestModel ( ( new GetQuestModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) -\u003e withQuestName ( \"quest-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetQuestModelRequest ; import io.gs2.quest.result.GetQuestModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetQuestModelResult result = client . getQuestModel ( new GetQuestModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withQuestName ( \"quest-0001\" ) ); QuestModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetQuestModelResult \u003e asyncResult = null ; yield return client . GetQuestModel ( new Gs2 . Gs2Quest . Request . GetQuestModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ) . WithQuestName ( \"quest-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getQuestModel ( new Gs2Quest . GetQuestModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withQuestName ( \"quest-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_quest_model ( quest . GetQuestModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) . with_quest_name ( 'quest-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_quest_model ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , questName = \"quest-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_quest_model_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , questName = \"quest-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 퀘스트 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 등록된 퀘스트 그룹 모델 마스터 및 퀘스트 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentQuestMaster 활성화 가능한 퀘스트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 quest . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.ExportMasterRequest ; import io.gs2.quest.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentQuestMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Quest . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Quest . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . export_master ( quest . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentQuestMaster 현재 활성화된 퀘스트 모델의 마스터 데이터 조회 퀘스트 그룹 모델 및 퀘스트 모델을 포함한, 현재 활성화된 퀘스트 모델의 마스터 데이터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentQuestMaster 현재 활성화된 퀘스트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetCurrentQuestMaster ( \u0026 quest . GetCurrentQuestMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetCurrentQuestMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getCurrentQuestMaster ( ( new GetCurrentQuestMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetCurrentQuestMasterRequest ; import io.gs2.quest.result.GetCurrentQuestMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetCurrentQuestMasterResult result = client . getCurrentQuestMaster ( new GetCurrentQuestMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentQuestMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetCurrentQuestMasterResult \u003e asyncResult = null ; yield return client . GetCurrentQuestMaster ( new Gs2 . Gs2Quest . Request . GetCurrentQuestMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getCurrentQuestMaster ( new Gs2Quest . GetCurrentQuestMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_current_quest_master ( quest . GetCurrentQuestMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_current_quest_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_current_quest_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentQuestMaster 현재 활성화된 퀘스트 모델의 마스터 데이터 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentQuestMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentQuestMaster ( \u0026 quest . PreUpdateCurrentQuestMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\PreUpdateCurrentQuestMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentQuestMaster ( ( new PreUpdateCurrentQuestMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.PreUpdateCurrentQuestMasterRequest ; import io.gs2.quest.result.PreUpdateCurrentQuestMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { PreUpdateCurrentQuestMasterResult result = client . preUpdateCurrentQuestMaster ( new PreUpdateCurrentQuestMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . PreUpdateCurrentQuestMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentQuestMaster ( new Gs2 . Gs2Quest . Request . PreUpdateCurrentQuestMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . preUpdateCurrentQuestMaster ( new Gs2Quest . PreUpdateCurrentQuestMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . pre_update_current_quest_master ( quest . PreUpdateCurrentQuestMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.pre_update_current_quest_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'quest' ) api_result_handler = client.pre_update_current_quest_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentQuestMaster 현재 활성화된 퀘스트 모델의 마스터 데이터 갱신 현재 활성화된 퀘스트 모델의 마스터 데이터를 갱신합니다. 대용량 마스터 데이터에 대응하기 위해 직접 갱신 모드와 사전 업로드 모드를 모두 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentQuestMaster 갱신된 현재 활성화된 퀘스트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentQuestMaster ( \u0026 quest . UpdateCurrentQuestMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-05-14\\\",\\n \\\"groups\\\": [\\n {\\n \\\"name\\\": \\\"main\\\",\\n \\\"metadata\\\": \\\"MAIN\\\",\\n \\\"quests\\\": [\\n {\\n \\\"name\\\": \\\"1-1\\\",\\n \\\"metadata\\\": \\\"stage1-1\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 100, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 99\\n },\\n {\\n \\\"metadata\\\": \\\"rare\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 500, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n }\\n ],\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:ConsumeStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"failedAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"recoverValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n ]\\n },\\n {\\n \\\"name\\\": \\\"1-2\\\",\\n \\\"metadata\\\": \\\"stage1-2\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 200, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 98\\n },\\n {\\n \\\"metadata\\\": \\\"rare\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1000, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 2\\n }\\n ],\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:ConsumeStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"consumeValue\\\\\\\": 5, \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\"}\\\"\\n }\\n ],\\n \\\"failedAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"recoverValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n \\\"1-1\\\"\\n ]\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"sub\\\",\\n \\\"metadata\\\": \\\"SUB\\\",\\n \\\"quests\\\": [\\n {\\n \\\"name\\\": \\\"1-1\\\",\\n \\\"metadata\\\": \\\"stage1-1\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2JobQueue:PushByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"queue-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"jobs\\\\\\\": [{\\\\\\\"scriptId\\\\\\\": \\\\\\\"script-0001\\\\\\\", \\\\\\\"args\\\\\\\": {}, \\\\\\\"maxTryCount\\\\\\\": 3}]}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n ]\\n }\\n ]\\n }\\n ]\\n }\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\UpdateCurrentQuestMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e updateCurrentQuestMaster ( ( new UpdateCurrentQuestMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-05-14 \\\" , \\n \\\" groups \\\" : [ \\n { \\n \\\" name \\\" : \\\" main \\\" , \\n \\\" metadata \\\" : \\\" MAIN \\\" , \\n \\\" quests \\\" : [ \\n { \\n \\\" name \\\" : \\\" 1-1 \\\" , \\n \\\" metadata \\\" : \\\" stage1-1 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 100, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 99 \\n }, \\n { \\n \\\" metadata \\\" : \\\" rare \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 500, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n } \\n ], \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:ConsumeStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" failedAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" recoverValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" 1-2 \\\" , \\n \\\" metadata \\\" : \\\" stage1-2 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 200, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 98 \\n }, \\n { \\n \\\" metadata \\\" : \\\" rare \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1000, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 2 \\n } \\n ], \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:ConsumeStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" consumeValue \\\\\\\" : 5, \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" } \\\"\\n } \\n ], \\n \\\" failedAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" recoverValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n \\\" 1-1 \\\"\\n ] \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" sub \\\" , \\n \\\" metadata \\\" : \\\" SUB \\\" , \\n \\\" quests \\\" : [ \\n { \\n \\\" name \\\" : \\\" 1-1 \\\" , \\n \\\" metadata \\\" : \\\" stage1-1 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2JobQueue:PushByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" queue-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" jobs \\\\\\\" : [{ \\\\\\\" scriptId \\\\\\\" : \\\\\\\" script-0001 \\\\\\\" , \\\\\\\" args \\\\\\\" : {}, \\\\\\\" maxTryCount \\\\\\\" : 3}]} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n ] \\n } \\n ] \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.UpdateCurrentQuestMasterRequest ; import io.gs2.quest.result.UpdateCurrentQuestMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { UpdateCurrentQuestMasterResult result = client . updateCurrentQuestMaster ( new UpdateCurrentQuestMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-05-14\\\",\\n \\\"groups\\\": [\\n {\\n \\\"name\\\": \\\"main\\\",\\n \\\"metadata\\\": \\\"MAIN\\\",\\n \\\"quests\\\": [\\n {\\n \\\"name\\\": \\\"1-1\\\",\\n \\\"metadata\\\": \\\"stage1-1\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 100, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 99\\n },\\n {\\n \\\"metadata\\\": \\\"rare\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 500, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n }\\n ],\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:ConsumeStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"failedAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"recoverValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n ]\\n },\\n {\\n \\\"name\\\": \\\"1-2\\\",\\n \\\"metadata\\\": \\\"stage1-2\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 200, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 98\\n },\\n {\\n \\\"metadata\\\": \\\"rare\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1000, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 2\\n }\\n ],\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:ConsumeStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"consumeValue\\\\\\\": 5, \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\"}\\\"\\n }\\n ],\\n \\\"failedAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"recoverValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n \\\"1-1\\\"\\n ]\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"sub\\\",\\n \\\"metadata\\\": \\\"SUB\\\",\\n \\\"quests\\\": [\\n {\\n \\\"name\\\": \\\"1-1\\\",\\n \\\"metadata\\\": \\\"stage1-1\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2JobQueue:PushByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"queue-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"jobs\\\\\\\": [{\\\\\\\"scriptId\\\\\\\": \\\\\\\"script-0001\\\\\\\", \\\\\\\"args\\\\\\\": {}, \\\\\\\"maxTryCount\\\\\\\": 3}]}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n ]\\n }\\n ]\\n }\\n ]\\n }\" ) . withUploadToken ( null ) ); CurrentQuestMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . UpdateCurrentQuestMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentQuestMaster ( new Gs2 . Gs2Quest . Request . UpdateCurrentQuestMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-05-14\\\",\\n \\\"groups\\\": [\\n {\\n \\\"name\\\": \\\"main\\\",\\n \\\"metadata\\\": \\\"MAIN\\\",\\n \\\"quests\\\": [\\n {\\n \\\"name\\\": \\\"1-1\\\",\\n \\\"metadata\\\": \\\"stage1-1\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 100, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 99\\n },\\n {\\n \\\"metadata\\\": \\\"rare\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 500, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n }\\n ],\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:ConsumeStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"failedAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"recoverValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n ]\\n },\\n {\\n \\\"name\\\": \\\"1-2\\\",\\n \\\"metadata\\\": \\\"stage1-2\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 200, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 98\\n },\\n {\\n \\\"metadata\\\": \\\"rare\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1000, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 2\\n }\\n ],\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:ConsumeStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"consumeValue\\\\\\\": 5, \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\"}\\\"\\n }\\n ],\\n \\\"failedAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"recoverValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n \\\"1-1\\\"\\n ]\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"sub\\\",\\n \\\"metadata\\\": \\\"SUB\\\",\\n \\\"quests\\\": [\\n {\\n \\\"name\\\": \\\"1-1\\\",\\n \\\"metadata\\\": \\\"stage1-1\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2JobQueue:PushByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"queue-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"jobs\\\\\\\": [{\\\\\\\"scriptId\\\\\\\": \\\\\\\"script-0001\\\\\\\", \\\\\\\"args\\\\\\\": {}, \\\\\\\"maxTryCount\\\\\\\": 3}]}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n ]\\n }\\n ]\\n }\\n ]\\n }\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . updateCurrentQuestMaster ( new Gs2Quest . UpdateCurrentQuestMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-05-14\\\",\\n \\\"groups\\\": [\\n {\\n \\\"name\\\": \\\"main\\\",\\n \\\"metadata\\\": \\\"MAIN\\\",\\n \\\"quests\\\": [\\n {\\n \\\"name\\\": \\\"1-1\\\",\\n \\\"metadata\\\": \\\"stage1-1\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 100, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 99\\n },\\n {\\n \\\"metadata\\\": \\\"rare\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 10}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 500, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n }\\n ],\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:ConsumeStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"failedAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"recoverValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n ]\\n },\\n {\\n \\\"name\\\": \\\"1-2\\\",\\n \\\"metadata\\\": \\\"stage1-2\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 200, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 98\\n },\\n {\\n \\\"metadata\\\": \\\"rare\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Experience:AddExperienceByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"experienceName\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"propertyId\\\\\\\": \\\\\\\"player\\\\\\\", \\\\\\\"experienceValue\\\\\\\": 20}\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"gold\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"wallet\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1000, \\\\\\\"expiresAt\\\\\\\": null}\\\"\\n }\\n ],\\n \\\"weight\\\": 2\\n }\\n ],\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:ConsumeStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"consumeValue\\\\\\\": 5, \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\"}\\\"\\n }\\n ],\\n \\\"failedAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Stamina:RecoverStaminaByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"basic\\\\\\\", \\\\\\\"staminaName\\\\\\\": \\\\\\\"quest\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"recoverValue\\\\\\\": 5}\\\"\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n \\\"1-1\\\"\\n ]\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"sub\\\",\\n \\\"metadata\\\": \\\"SUB\\\",\\n \\\"quests\\\": [\\n {\\n \\\"name\\\": \\\"1-1\\\",\\n \\\"metadata\\\": \\\"stage1-1\\\",\\n \\\"contents\\\": [\\n {\\n \\\"metadata\\\": \\\"normal\\\",\\n \\\"completeAcquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2JobQueue:PushByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"queue-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"jobs\\\\\\\": [{\\\\\\\"scriptId\\\\\\\": \\\\\\\"script-0001\\\\\\\", \\\\\\\"args\\\\\\\": {}, \\\\\\\"maxTryCount\\\\\\\": 3}]}\\\"\\n }\\n ],\\n \\\"weight\\\": 1\\n }\\n ],\\n \\\"premiseQuestNames\\\": [\\n ]\\n }\\n ]\\n }\\n ]\\n }\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . update_current_quest_master ( quest . UpdateCurrentQuestMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-05-14\", \\n \"groups\": [ \\n { \\n \"name\": \"main\", \\n \"metadata\": \"MAIN\", \\n \"quests\": [ \\n { \\n \"name\": \"1-1\", \\n \"metadata\": \"stage1-1\", \\n \"contents\": [ \\n { \\n \"metadata\": \"normal\", \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 10}\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"gold \\\\ \", \\\\ \"inventoryName \\\\ \": \\\\ \"wallet \\\\ \", \\\\ \"itemName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"acquireCount \\\\ \": 100, \\\\ \"expiresAt \\\\ \": null}\" \\n } \\n ], \\n \"weight\": 99 \\n }, \\n { \\n \"metadata\": \"rare\", \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 10}\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"gold \\\\ \", \\\\ \"inventoryName \\\\ \": \\\\ \"wallet \\\\ \", \\\\ \"itemName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"acquireCount \\\\ \": 500, \\\\ \"expiresAt \\\\ \": null}\" \\n } \\n ], \\n \"weight\": 1 \\n } \\n ], \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Stamina:ConsumeStaminaByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"staminaName \\\\ \": \\\\ \"quest \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"consumeValue \\\\ \": 5}\" \\n } \\n ], \\n \"failedAcquireActions\": [ \\n { \\n \"action\": \"Gs2Stamina:RecoverStaminaByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"staminaName \\\\ \": \\\\ \"quest \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"recoverValue \\\\ \": 5}\" \\n } \\n ], \\n \"premiseQuestNames\": [ \\n ] \\n }, \\n { \\n \"name\": \"1-2\", \\n \"metadata\": \"stage1-2\", \\n \"contents\": [ \\n { \\n \"metadata\": \"normal\", \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 20}\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"gold \\\\ \", \\\\ \"inventoryName \\\\ \": \\\\ \"wallet \\\\ \", \\\\ \"itemName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"acquireCount \\\\ \": 200, \\\\ \"expiresAt \\\\ \": null}\" \\n } \\n ], \\n \"weight\": 98 \\n }, \\n { \\n \"metadata\": \"rare\", \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2Experience:AddExperienceByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"experienceName \\\\ \": \\\\ \"player \\\\ \", \\\\ \"propertyId \\\\ \": \\\\ \"player \\\\ \", \\\\ \"experienceValue \\\\ \": 20}\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"gold \\\\ \", \\\\ \"inventoryName \\\\ \": \\\\ \"wallet \\\\ \", \\\\ \"itemName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"acquireCount \\\\ \": 1000, \\\\ \"expiresAt \\\\ \": null}\" \\n } \\n ], \\n \"weight\": 2 \\n } \\n ], \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Stamina:ConsumeStaminaByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"staminaName \\\\ \": \\\\ \"quest \\\\ \", \\\\ \"consumeValue \\\\ \": 5, \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \"}\" \\n } \\n ], \\n \"failedAcquireActions\": [ \\n { \\n \"action\": \"Gs2Stamina:RecoverStaminaByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"basic \\\\ \", \\\\ \"staminaName \\\\ \": \\\\ \"quest \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"recoverValue \\\\ \": 5}\" \\n } \\n ], \\n \"premiseQuestNames\": [ \\n \"1-1\" \\n ] \\n } \\n ] \\n }, \\n { \\n \"name\": \"sub\", \\n \"metadata\": \"SUB\", \\n \"quests\": [ \\n { \\n \"name\": \"1-1\", \\n \"metadata\": \"stage1-1\", \\n \"contents\": [ \\n { \\n \"metadata\": \"normal\", \\n \"completeAcquireActions\": [ \\n { \\n \"action\": \"Gs2JobQueue:PushByUserId\", \\n \"request\": \"{ \\\\ \"namespaceName \\\\ \": \\\\ \"queue-0001 \\\\ \", \\\\ \"userId \\\\ \": \\\\ \"# {userId} \\\\ \", \\\\ \"jobs \\\\ \": [{ \\\\ \"scriptId \\\\ \": \\\\ \"script-0001 \\\\ \", \\\\ \"args \\\\ \": {} , \\\\ \"maxTryCount \\\\ \": 3}]}\" \\n } \\n ], \\n \"weight\": 1 \\n } \\n ], \\n \"premiseQuestNames\": [ \\n ] \\n } \\n ] \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.update_current_quest_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-05-14 \\\" , \\n \\\" groups \\\" : [ \\n { \\n \\\" name \\\" : \\\" main \\\" , \\n \\\" metadata \\\" : \\\" MAIN \\\" , \\n \\\" quests \\\" : [ \\n { \\n \\\" name \\\" : \\\" 1-1 \\\" , \\n \\\" metadata \\\" : \\\" stage1-1 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 100, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 99 \\n }, \\n { \\n \\\" metadata \\\" : \\\" rare \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 500, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n } \\n ], \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:ConsumeStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" failedAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" recoverValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" 1-2 \\\" , \\n \\\" metadata \\\" : \\\" stage1-2 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 200, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 98 \\n }, \\n { \\n \\\" metadata \\\" : \\\" rare \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1000, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 2 \\n } \\n ], \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:ConsumeStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" consumeValue \\\\\\\" : 5, \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" } \\\"\\n } \\n ], \\n \\\" failedAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" recoverValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n \\\" 1-1 \\\"\\n ] \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" sub \\\" , \\n \\\" metadata \\\" : \\\" SUB \\\" , \\n \\\" quests \\\" : [ \\n { \\n \\\" name \\\" : \\\" 1-1 \\\" , \\n \\\" metadata \\\" : \\\" stage1-1 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2JobQueue:PushByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" queue-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" jobs \\\\\\\" : [{ \\\\\\\" scriptId \\\\\\\" : \\\\\\\" script-0001 \\\\\\\" , \\\\\\\" args \\\\\\\" : {}, \\\\\\\" maxTryCount \\\\\\\" : 3}]} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n ] \\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.update_current_quest_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-05-14 \\\" , \\n \\\" groups \\\" : [ \\n { \\n \\\" name \\\" : \\\" main \\\" , \\n \\\" metadata \\\" : \\\" MAIN \\\" , \\n \\\" quests \\\" : [ \\n { \\n \\\" name \\\" : \\\" 1-1 \\\" , \\n \\\" metadata \\\" : \\\" stage1-1 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 100, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 99 \\n }, \\n { \\n \\\" metadata \\\" : \\\" rare \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 10} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 500, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n } \\n ], \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:ConsumeStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" failedAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" recoverValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" 1-2 \\\" , \\n \\\" metadata \\\" : \\\" stage1-2 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 200, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 98 \\n }, \\n { \\n \\\" metadata \\\" : \\\" rare \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Experience:AddExperienceByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" experienceName \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" propertyId \\\\\\\" : \\\\\\\" player \\\\\\\" , \\\\\\\" experienceValue \\\\\\\" : 20} \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" gold \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" wallet \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1000, \\\\\\\" expiresAt \\\\\\\" : null} \\\"\\n } \\n ], \\n \\\" weight \\\" : 2 \\n } \\n ], \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:ConsumeStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" consumeValue \\\\\\\" : 5, \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" } \\\"\\n } \\n ], \\n \\\" failedAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Stamina:RecoverStaminaByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" basic \\\\\\\" , \\\\\\\" staminaName \\\\\\\" : \\\\\\\" quest \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" recoverValue \\\\\\\" : 5} \\\"\\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n \\\" 1-1 \\\"\\n ] \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" sub \\\" , \\n \\\" metadata \\\" : \\\" SUB \\\" , \\n \\\" quests \\\" : [ \\n { \\n \\\" name \\\" : \\\" 1-1 \\\" , \\n \\\" metadata \\\" : \\\" stage1-1 \\\" , \\n \\\" contents \\\" : [ \\n { \\n \\\" metadata \\\" : \\\" normal \\\" , \\n \\\" completeAcquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2JobQueue:PushByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" queue-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" jobs \\\\\\\" : [{ \\\\\\\" scriptId \\\\\\\" : \\\\\\\" script-0001 \\\\\\\" , \\\\\\\" args \\\\\\\" : {}, \\\\\\\" maxTryCount \\\\\\\" : 3}]} \\\"\\n } \\n ], \\n \\\" weight \\\" : 1 \\n } \\n ], \\n \\\" premiseQuestNames \\\" : [ \\n ] \\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentQuestMasterFromGitHub 현재 활성화된 퀘스트 모델의 마스터 데이터를 GitHub에서 갱신 지정된 체크아웃 설정을 사용하여 GitHub 리포지토리에서 마스터 데이터를 체크아웃하고, 현재 활성화된 퀘스트 모델의 마스터 데이터를 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentQuestMaster 갱신된 현재 활성화된 퀘스트 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentQuestMasterFromGitHub ( \u0026 quest . UpdateCurrentQuestMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 quest . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\UpdateCurrentQuestMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e updateCurrentQuestMasterFromGitHub ( ( new UpdateCurrentQuestMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.UpdateCurrentQuestMasterFromGitHubRequest ; import io.gs2.quest.result.UpdateCurrentQuestMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { UpdateCurrentQuestMasterFromGitHubResult result = client . updateCurrentQuestMasterFromGitHub ( new UpdateCurrentQuestMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentQuestMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . UpdateCurrentQuestMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentQuestMasterFromGitHub ( new Gs2 . Gs2Quest . Request . UpdateCurrentQuestMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Quest . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . updateCurrentQuestMasterFromGitHub ( new Gs2Quest . UpdateCurrentQuestMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Quest . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . update_current_quest_master_from_git_hub ( quest . UpdateCurrentQuestMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( quest . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.update_current_quest_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.update_current_quest_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeQuestGroupModelMasters 퀘스트 그룹 모델 마스터 리스트 조회 퀘스트 그룹 모델 마스터의 페이지네이션 리스트를 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 퀘스트 그룹 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 퀘스트 그룹 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DescribeQuestGroupModelMasters ( \u0026 quest . DescribeQuestGroupModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DescribeQuestGroupModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e describeQuestGroupModelMasters ( ( new DescribeQuestGroupModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DescribeQuestGroupModelMastersRequest ; import io.gs2.quest.result.DescribeQuestGroupModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DescribeQuestGroupModelMastersResult result = client . describeQuestGroupModelMasters ( new DescribeQuestGroupModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List QuestGroupModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DescribeQuestGroupModelMastersResult \u003e asyncResult = null ; yield return client . DescribeQuestGroupModelMasters ( new Gs2 . Gs2Quest . Request . DescribeQuestGroupModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . describeQuestGroupModelMasters ( new Gs2Quest . DescribeQuestGroupModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . describe_quest_group_model_masters ( quest . DescribeQuestGroupModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.describe_quest_group_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'quest' ) api_result_handler = client.describe_quest_group_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createQuestGroupModelMaster 퀘스트 그룹 모델 마스터 신규 작성 지정한 이름, 설명, 메타데이터 및 선택적인 챌린지 기간 이벤트 설정을 가진 새로운 퀘스트 그룹 모델 마스터를 작성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그룹 내 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule의 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화된 기간 동안에만 퀘스트를 시작할 수 있습니다. Result 타입 설명 item QuestGroupModelMaster 작성한 퀘스트 그룹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . CreateQuestGroupModelMaster ( \u0026 quest . CreateQuestGroupModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"quest-group-0001\" ), Description : nil , Metadata : nil , ChallengePeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\CreateQuestGroupModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e createQuestGroupModelMaster ( ( new CreateQuestGroupModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"quest-group-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withChallengePeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.CreateQuestGroupModelMasterRequest ; import io.gs2.quest.result.CreateQuestGroupModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { CreateQuestGroupModelMasterResult result = client . createQuestGroupModelMaster ( new CreateQuestGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"quest-group-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withChallengePeriodEventId ( null ) ); QuestGroupModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . CreateQuestGroupModelMasterResult \u003e asyncResult = null ; yield return client . CreateQuestGroupModelMaster ( new Gs2 . Gs2Quest . Request . CreateQuestGroupModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"quest-group-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithChallengePeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . createQuestGroupModelMaster ( new Gs2Quest . CreateQuestGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"quest-group-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withChallengePeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . create_quest_group_model_master ( quest . CreateQuestGroupModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'quest-group-0001' ) . with_description ( None ) . with_metadata ( None ) . with_challenge_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.create_quest_group_model_master ({ namespaceName = \"namespace-0001\" , name = \"quest-group-0001\" , description = nil , metadata = nil , challengePeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.create_quest_group_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"quest-group-0001\" , description = nil , metadata = nil , challengePeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getQuestGroupModelMaster 퀘스트 그룹 모델 마스터 조회 지정된 퀘스트 그룹 모델 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item QuestGroupModelMaster 퀘스트 그룹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetQuestGroupModelMaster ( \u0026 quest . GetQuestGroupModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetQuestGroupModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getQuestGroupModelMaster ( ( new GetQuestGroupModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetQuestGroupModelMasterRequest ; import io.gs2.quest.result.GetQuestGroupModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetQuestGroupModelMasterResult result = client . getQuestGroupModelMaster ( new GetQuestGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) ); QuestGroupModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetQuestGroupModelMasterResult \u003e asyncResult = null ; yield return client . GetQuestGroupModelMaster ( new Gs2 . Gs2Quest . Request . GetQuestGroupModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getQuestGroupModelMaster ( new Gs2Quest . GetQuestGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_quest_group_model_master ( quest . GetQuestGroupModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_quest_group_model_master ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_quest_group_model_master_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateQuestGroupModelMaster 퀘스트 그룹 모델 마스터 갱신 지정된 퀘스트 그룹 모델 마스터의 설명, 메타데이터, 챌린지 기간 이벤트 설정을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그룹 내 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule의 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화된 기간 동안에만 퀘스트를 시작할 수 있습니다. Result 타입 설명 item QuestGroupModelMaster 업데이트된 퀘스트 그룹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . UpdateQuestGroupModelMaster ( \u0026 quest . UpdateQuestGroupModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , ChallengePeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\UpdateQuestGroupModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e updateQuestGroupModelMaster ( ( new UpdateQuestGroupModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.UpdateQuestGroupModelMasterRequest ; import io.gs2.quest.result.UpdateQuestGroupModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { UpdateQuestGroupModelMasterResult result = client . updateQuestGroupModelMaster ( new UpdateQuestGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); QuestGroupModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . UpdateQuestGroupModelMasterResult \u003e asyncResult = null ; yield return client . UpdateQuestGroupModelMaster ( new Gs2 . Gs2Quest . Request . UpdateQuestGroupModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . updateQuestGroupModelMaster ( new Gs2Quest . UpdateQuestGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . update_quest_group_model_master ( quest . UpdateQuestGroupModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_challenge_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.update_quest_group_model_master ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , description = \"description1\" , metadata = nil , challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.update_quest_group_model_master_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , description = \"description1\" , metadata = nil , challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteQuestGroupModelMaster 퀘스트 그룹 모델 마스터 삭제 지정된 퀘스트 그룹 모델 마스터를 삭제합니다. 그룹 내 모든 퀘스트 모델 마스터도 함께 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item QuestGroupModelMaster 삭제된 퀘스트 그룹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DeleteQuestGroupModelMaster ( \u0026 quest . DeleteQuestGroupModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DeleteQuestGroupModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e deleteQuestGroupModelMaster ( ( new DeleteQuestGroupModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DeleteQuestGroupModelMasterRequest ; import io.gs2.quest.result.DeleteQuestGroupModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DeleteQuestGroupModelMasterResult result = client . deleteQuestGroupModelMaster ( new DeleteQuestGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) ); QuestGroupModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DeleteQuestGroupModelMasterResult \u003e asyncResult = null ; yield return client . DeleteQuestGroupModelMaster ( new Gs2 . Gs2Quest . Request . DeleteQuestGroupModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . deleteQuestGroupModelMaster ( new Gs2Quest . DeleteQuestGroupModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . delete_quest_group_model_master ( quest . DeleteQuestGroupModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.delete_quest_group_model_master ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.delete_quest_group_model_master_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeQuestModelMasters 퀘스트 모델 마스터 리스트 조회 지정한 퀘스트 그룹 내 퀘스트 모델 마스터의 페이지네이션 리스트를 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 퀘스트 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 퀘스트 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DescribeQuestModelMasters ( \u0026 quest . DescribeQuestModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DescribeQuestModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e describeQuestModelMasters ( ( new DescribeQuestModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DescribeQuestModelMastersRequest ; import io.gs2.quest.result.DescribeQuestModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DescribeQuestModelMastersResult result = client . describeQuestModelMasters ( new DescribeQuestModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List QuestModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DescribeQuestModelMastersResult \u003e asyncResult = null ; yield return client . DescribeQuestModelMasters ( new Gs2 . Gs2Quest . Request . DescribeQuestModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . describeQuestModelMasters ( new Gs2Quest . DescribeQuestModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . describe_quest_model_masters ( quest . DescribeQuestModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.describe_quest_model_masters ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'quest' ) api_result_handler = client.describe_quest_model_masters_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createQuestModelMaster 퀘스트 모델 마스터 신규 작성 콘텐츠 정의, 보상 설정, 소비 액션, 검증 액션, 실패 시 획득 액션, 전제 퀘스트 이름을 가진 새로운 퀘스트 모델 마스터를 작성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. contents List  1 ~ 10 items 퀘스트 내용 이 퀘스트의 콘텐츠 배리에이션 목록입니다. 퀘스트 시작 시 가중치 추첨을 통해 하나의 배리에이션이 선택됩니다. 각 배리에이션마다 서로 다른 클리어 보상을 정의할 수 있어, 동일한 퀘스트라도 다른 결과(예: 레어 몬스터의 출현)를 구현할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화되어 있는 기간에만 퀘스트를 시작할 수 있습니다. 이 설정은 퀘스트 그룹의 도전 가능 기간보다 우선됩니다. firstCompleteAcquireActions List [] 0 ~ 10 items 최초 클리어 보상 입수 액션 리스트 이 퀘스트를 처음 클리어했을 때만 실행되는 입수 액션의 리스트입니다. 일반 클리어 보상에 더해 지급되는 보너스 보상으로, 최초 클리어 보너스를 구현하는 데 사용합니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 이 퀘스트를 시작하기 위한 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공해야만 퀘스트를 시작할 수 있습니다. 레벨 확인이나 아이템 소지 등의 요건을 강제하는 데 사용합니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 퀘스트의 시작 비용으로 실행되는 소비 액션입니다. 스태미나나 통화 등의 비용이 퀘스트 시작 시 소비됩니다. failedAcquireActions List [] 0 ~ 100 items 실패 시 입수 액션 리스트 퀘스트 실패 시 실행되는 입수 액션입니다. 실패 시 위로 보상이나 퀘스트 참가 비용의 일부 반환 등에 사용합니다. premiseQuestNames List [] 0 ~ 10 items 전제 퀘스트 이름 리스트 이 퀘스트에 도전하기 전에 클리어가 필요한 같은 그룹 내 퀘스트 이름의 리스트입니다. 연속되는 퀘스트 체인이나 분기되는 퀘스트 경로 작성에 사용합니다. Result 타입 설명 item QuestModelMaster 작성한 퀘스트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . CreateQuestModelMaster ( \u0026 quest . CreateQuestModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), Name : pointy . String ( \"quest-0001\" ), Description : nil , Metadata : nil , Contents : [] quest . Contents { quest . Contents { Metadata : pointy . String ( \"normal\" ), CompleteAcquireActions : [] quest . AcquireAction { quest . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request1\" ), }, }, Weight : pointy . Int32 ( 1 ), }, }, ChallengePeriodEventId : nil , FirstCompleteAcquireActions : nil , VerifyActions : nil , ConsumeActions : nil , FailedAcquireActions : nil , PremiseQuestNames : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\CreateQuestModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e createQuestModelMaster ( ( new CreateQuestModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) -\u003e withName ( \"quest-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withContents ([ ( new \\Gs2\\Quest\\Model\\Contents ()) -\u003e withMetadata ( \"normal\" ) -\u003e withCompleteAcquireActions ([ ( new \\Gs2\\Quest\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), ]) -\u003e withWeight ( 1 ), ]) -\u003e withChallengePeriodEventId ( null ) -\u003e withFirstCompleteAcquireActions ( null ) -\u003e withVerifyActions ( null ) -\u003e withConsumeActions ( null ) -\u003e withFailedAcquireActions ( null ) -\u003e withPremiseQuestNames ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.CreateQuestModelMasterRequest ; import io.gs2.quest.result.CreateQuestModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { CreateQuestModelMasterResult result = client . createQuestModelMaster ( new CreateQuestModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withName ( \"quest-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withContents ( Arrays . asList ( new io . gs2 . quest . model . Contents () . withMetadata ( \"normal\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . quest . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ) )) . withWeight ( 1 ) )) . withChallengePeriodEventId ( null ) . withFirstCompleteAcquireActions ( null ) . withVerifyActions ( null ) . withConsumeActions ( null ) . withFailedAcquireActions ( null ) . withPremiseQuestNames ( null ) ); QuestModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . CreateQuestModelMasterResult \u003e asyncResult = null ; yield return client . CreateQuestModelMaster ( new Gs2 . Gs2Quest . Request . CreateQuestModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ) . WithName ( \"quest-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithContents ( new Gs2 . Gs2Quest . Model . Contents [] { new Gs2 . Gs2Quest . Model . Contents () . WithMetadata ( \"normal\" ) . WithCompleteAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), }) . WithWeight ( 1 ), }) . WithChallengePeriodEventId ( null ) . WithFirstCompleteAcquireActions ( null ) . WithVerifyActions ( null ) . WithConsumeActions ( null ) . WithFailedAcquireActions ( null ) . WithPremiseQuestNames ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . createQuestModelMaster ( new Gs2Quest . CreateQuestModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withName ( \"quest-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withContents ([ new Gs2Quest . model . Contents () . withMetadata ( \"normal\" ) . withCompleteAcquireActions ([ new Gs2Quest . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), ]) . withWeight ( 1 ), ]) . withChallengePeriodEventId ( null ) . withFirstCompleteAcquireActions ( null ) . withVerifyActions ( null ) . withConsumeActions ( null ) . withFailedAcquireActions ( null ) . withPremiseQuestNames ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . create_quest_model_master ( quest . CreateQuestModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) . with_name ( 'quest-0001' ) . with_description ( None ) . with_metadata ( None ) . with_contents ([ quest . Contents () . with_metadata ( 'normal' ) . with_complete_acquire_actions ([ quest . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request1' ), ]) . with_weight ( 1 ), ]) . with_challenge_period_event_id ( None ) . with_first_complete_acquire_actions ( None ) . with_verify_actions ( None ) . with_consume_actions ( None ) . with_failed_acquire_actions ( None ) . with_premise_quest_names ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.create_quest_model_master ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , name = \"quest-0001\" , description = nil , metadata = nil , contents = { { metadata = \"normal\" , completeAcquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request1\" , } }, weight = 1 , } }, challengePeriodEventId = nil , firstCompleteAcquireActions = nil , verifyActions = nil , consumeActions = nil , failedAcquireActions = nil , premiseQuestNames = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.create_quest_model_master_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , name = \"quest-0001\" , description = nil , metadata = nil , contents = { { metadata = \"normal\" , completeAcquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request1\" , } }, weight = 1 , } }, challengePeriodEventId = nil , firstCompleteAcquireActions = nil , verifyActions = nil , consumeActions = nil , failedAcquireActions = nil , premiseQuestNames = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getQuestModelMaster 퀘스트 모델 마스터 조회 콘텐츠 정의, 보상 설정, 전제 조건을 포함한 지정된 퀘스트 모델 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questName string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item QuestModelMaster 퀘스트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . GetQuestModelMaster ( \u0026 quest . GetQuestModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), QuestName : pointy . String ( \"quest-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\GetQuestModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e getQuestModelMaster ( ( new GetQuestModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) -\u003e withQuestName ( \"quest-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.GetQuestModelMasterRequest ; import io.gs2.quest.result.GetQuestModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { GetQuestModelMasterResult result = client . getQuestModelMaster ( new GetQuestModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withQuestName ( \"quest-0001\" ) ); QuestModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . GetQuestModelMasterResult \u003e asyncResult = null ; yield return client . GetQuestModelMaster ( new Gs2 . Gs2Quest . Request . GetQuestModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ) . WithQuestName ( \"quest-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . getQuestModelMaster ( new Gs2Quest . GetQuestModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withQuestName ( \"quest-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . get_quest_model_master ( quest . GetQuestModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) . with_quest_name ( 'quest-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.get_quest_model_master ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , questName = \"quest-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.get_quest_model_master_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , questName = \"quest-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateQuestModelMaster 퀘스트 모델 마스터 갱신 지정된 퀘스트 모델 마스터의 콘텐츠 정의, 보상 설정, 소비 액션, 검증 액션, 실패 시 획득 액션, 전제 퀘스트 이름을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questName string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. contents List  1 ~ 10 items 퀘스트 내용 이 퀘스트의 콘텐츠 배리에이션 목록입니다. 퀘스트 시작 시 가중치 추첨을 통해 하나의 배리에이션이 선택됩니다. 각 배리에이션마다 서로 다른 클리어 보상을 정의할 수 있어, 동일한 퀘스트라도 다른 결과(예: 레어 몬스터의 출현)를 구현할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화되어 있는 기간에만 퀘스트를 시작할 수 있습니다. 이 설정은 퀘스트 그룹의 도전 가능 기간보다 우선됩니다. firstCompleteAcquireActions List [] 0 ~ 10 items 최초 클리어 보상 입수 액션 리스트 이 퀘스트를 처음 클리어했을 때만 실행되는 입수 액션의 리스트입니다. 일반 클리어 보상에 더해 지급되는 보너스 보상으로, 최초 클리어 보너스를 구현하는 데 사용합니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 이 퀘스트를 시작하기 위한 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공해야만 퀘스트를 시작할 수 있습니다. 레벨 확인이나 아이템 소지 등의 요건을 강제하는 데 사용합니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 퀘스트의 시작 비용으로 실행되는 소비 액션입니다. 스태미나나 통화 등의 비용이 퀘스트 시작 시 소비됩니다. failedAcquireActions List [] 0 ~ 100 items 실패 시 입수 액션 리스트 퀘스트 실패 시 실행되는 입수 액션입니다. 실패 시 위로 보상이나 퀘스트 참가 비용의 일부 반환 등에 사용합니다. premiseQuestNames List [] 0 ~ 10 items 전제 퀘스트 이름 리스트 이 퀘스트에 도전하기 전에 클리어가 필요한 같은 그룹 내 퀘스트 이름의 리스트입니다. 연속되는 퀘스트 체인이나 분기되는 퀘스트 경로 작성에 사용합니다. Result 타입 설명 item QuestModelMaster 갱신한 퀘스트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . UpdateQuestModelMaster ( \u0026 quest . UpdateQuestModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), QuestName : pointy . String ( \"quest-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , Contents : [] quest . Contents { quest . Contents { Metadata : pointy . String ( \"normal\" ), CompleteAcquireActions : [] quest . AcquireAction { quest . AcquireAction { Action : pointy . String ( \"Gs2Experience:AddExperienceByUserId\" ), Request : pointy . String ( \"Gs2Experience:AddExperienceByUserId-request1\" ), }, }, Weight : pointy . Int32 ( 1 ), }, }, ChallengePeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ), FirstCompleteAcquireActions : nil , VerifyActions : nil , ConsumeActions : nil , FailedAcquireActions : nil , PremiseQuestNames : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\UpdateQuestModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e updateQuestModelMaster ( ( new UpdateQuestModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) -\u003e withQuestName ( \"quest-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withContents ([ ( new \\Gs2\\Quest\\Model\\Contents ()) -\u003e withMetadata ( \"normal\" ) -\u003e withCompleteAcquireActions ([ ( new \\Gs2\\Quest\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Experience:AddExperienceByUserId\" ) -\u003e withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), ]) -\u003e withWeight ( 1 ), ]) -\u003e withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) -\u003e withFirstCompleteAcquireActions ( null ) -\u003e withVerifyActions ( null ) -\u003e withConsumeActions ( null ) -\u003e withFailedAcquireActions ( null ) -\u003e withPremiseQuestNames ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.UpdateQuestModelMasterRequest ; import io.gs2.quest.result.UpdateQuestModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { UpdateQuestModelMasterResult result = client . updateQuestModelMaster ( new UpdateQuestModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withQuestName ( \"quest-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withContents ( Arrays . asList ( new io . gs2 . quest . model . Contents () . withMetadata ( \"normal\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . quest . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ) )) . withWeight ( 1 ) )) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) . withFirstCompleteAcquireActions ( null ) . withVerifyActions ( null ) . withConsumeActions ( null ) . withFailedAcquireActions ( null ) . withPremiseQuestNames ( null ) ); QuestModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . UpdateQuestModelMasterResult \u003e asyncResult = null ; yield return client . UpdateQuestModelMaster ( new Gs2 . Gs2Quest . Request . UpdateQuestModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ) . WithQuestName ( \"quest-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithContents ( new Gs2 . Gs2Quest . Model . Contents [] { new Gs2 . Gs2Quest . Model . Contents () . WithMetadata ( \"normal\" ) . WithCompleteAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Experience:AddExperienceByUserId\" ) . WithRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), }) . WithWeight ( 1 ), }) . WithChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) . WithFirstCompleteAcquireActions ( null ) . WithVerifyActions ( null ) . WithConsumeActions ( null ) . WithFailedAcquireActions ( null ) . WithPremiseQuestNames ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . updateQuestModelMaster ( new Gs2Quest . UpdateQuestModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withQuestName ( \"quest-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withContents ([ new Gs2Quest . model . Contents () . withMetadata ( \"normal\" ) . withCompleteAcquireActions ([ new Gs2Quest . model . AcquireAction () . withAction ( \"Gs2Experience:AddExperienceByUserId\" ) . withRequest ( \"Gs2Experience:AddExperienceByUserId-request1\" ), ]) . withWeight ( 1 ), ]) . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) . withFirstCompleteAcquireActions ( null ) . withVerifyActions ( null ) . withConsumeActions ( null ) . withFailedAcquireActions ( null ) . withPremiseQuestNames ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . update_quest_model_master ( quest . UpdateQuestModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) . with_quest_name ( 'quest-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_contents ([ quest . Contents () . with_metadata ( 'normal' ) . with_complete_acquire_actions ([ quest . AcquireAction () . with_action ( 'Gs2Experience:AddExperienceByUserId' ) . with_request ( 'Gs2Experience:AddExperienceByUserId-request1' ), ]) . with_weight ( 1 ), ]) . with_challenge_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002' ) . with_first_complete_acquire_actions ( None ) . with_verify_actions ( None ) . with_consume_actions ( None ) . with_failed_acquire_actions ( None ) . with_premise_quest_names ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.update_quest_model_master ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , questName = \"quest-0001\" , description = \"description1\" , metadata = nil , contents = { { metadata = \"normal\" , completeAcquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request1\" , } }, weight = 1 , } }, challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" , firstCompleteAcquireActions = nil , verifyActions = nil , consumeActions = nil , failedAcquireActions = nil , premiseQuestNames = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.update_quest_model_master_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , questName = \"quest-0001\" , description = \"description1\" , metadata = nil , contents = { { metadata = \"normal\" , completeAcquireActions = { { action = \"Gs2Experience:AddExperienceByUserId\" , request = \"Gs2Experience:AddExperienceByUserId-request1\" , } }, weight = 1 , } }, challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" , firstCompleteAcquireActions = nil , verifyActions = nil , consumeActions = nil , failedAcquireActions = nil , premiseQuestNames = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteQuestModelMaster 퀘스트 모델 마스터 삭제 지정된 퀘스트 모델 마스터를 퀘스트 그룹에서 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questGroupName string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. questName string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item QuestModelMaster 삭제한 퀘스트 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/quest\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := quest . Gs2QuestRestClient { Session : \u0026 session , } result , err := client . DeleteQuestModelMaster ( \u0026 quest . DeleteQuestModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), QuestGroupName : pointy . String ( \"quest-group-0001\" ), QuestName : pointy . String ( \"quest-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Quest\\Gs2QuestRestClient ; use Gs2\\Quest\\Request\\DeleteQuestModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2QuestRestClient ( $session ); try { $result = $client -\u003e deleteQuestModelMaster ( ( new DeleteQuestModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withQuestGroupName ( \"quest-group-0001\" ) -\u003e withQuestName ( \"quest-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.quest.rest.Gs2QuestRestClient ; import io.gs2.quest.request.DeleteQuestModelMasterRequest ; import io.gs2.quest.result.DeleteQuestModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2QuestRestClient client = new Gs2QuestRestClient ( session ); try { DeleteQuestModelMasterResult result = client . deleteQuestModelMaster ( new DeleteQuestModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withQuestName ( \"quest-0001\" ) ); QuestModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2QuestRestClient ( session ); AsyncResult Gs2 . Gs2Quest . Result . DeleteQuestModelMasterResult \u003e asyncResult = null ; yield return client . DeleteQuestModelMaster ( new Gs2 . Gs2Quest . Request . DeleteQuestModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithQuestGroupName ( \"quest-group-0001\" ) . WithQuestName ( \"quest-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Quest from '@/gs2/quest' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Quest . Gs2QuestRestClient ( session ); try { const result = await client . deleteQuestModelMaster ( new Gs2Quest . DeleteQuestModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withQuestGroupName ( \"quest-group-0001\" ) . withQuestName ( \"quest-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import quest session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = quest . Gs2QuestRestClient ( session ) try : result = client . delete_quest_model_master ( quest . DeleteQuestModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_quest_group_name ( 'quest-group-0001' ) . with_quest_name ( 'quest-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'quest' ) api_result = client.delete_quest_model_master ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , questName = \"quest-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'quest' ) api_result_handler = client.delete_quest_model_master_async ({ namespaceName = \"namespace-0001\" , questGroupName = \"quest-group-0001\" , questName = \"quest-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Quest SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Quest SDK API 레퍼런스","url":"/ko/api_reference/quest/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 랭킹 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. lastCalculatedAts List [] 0 ~ 1000 items 최종 집계일시 리스트 각 카테고리의 글로벌 랭킹이 마지막으로 집계된 일시를 기록하는 타임스탬프 리스트입니다. 카테고리별로 1개의 엔트리가 유지되며, 재집계가 완료되면 해당 엔트리가 업데이트됩니다(신규 카테고리의 경우 새로운 엔트리가 추가됩니다). logSetting LogSetting 로그 출력 설정 랭킹 관련 조작 로그를 GS2-Log에 출력하기 위한 설정입니다. 설정하면 스코어 등록, 랭킹 취득, 구독 변경 등의 작업이 분석 및 감사를 위해 기록됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Subscribe 구독 스코프 랭킹의 구독 상태를 보유하며, 플레이어가 어떤 사용자의 스코어를 팔로우하고 있는지를 추적합니다. 스코프 랭킹 모드에서는 각 플레이어가 구독한 사용자에 기반한 개인화된 리더보드를 참조합니다. targetUserIds는 플레이어가 추적하고 싶은 사용자의 목록이며, subscribedUserIds는 확인된(상호 또는 승인된) 구독을 나타냅니다. 사용자별·카테고리별로 최대 10,000건의 구독이 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeId string ※ ~ 1024자 구독 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 categoryName string  ~ 128자 카테고리명 userId string  ~ 128자 사용자ID targetUserIds List [] 0 ~ 10000 items 구독 대상 사용자 ID 목록 스코프 랭킹에서 플레이어가 추적하고자 하는 사용자 ID 목록입니다. 이 목록에 사용자 ID를 추가하면 해당 사용자의 점수가 플레이어의 개인화된 리더보드에 포함됩니다. 최대 10,000건. subscribedUserIds List [] 0 ~ 10000 items 구독자 사용자 ID 목록 이 플레이어의 점수를 구독(팔로우)하고 있는 사용자 ID 목록입니다. 구독 관계의 역방향을 나타내며, 이 사용자들의 스코프 랭킹에는 이 플레이어의 점수가 표시됩니다. 최대 10,000건. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Score 스코어 게임 플레이어별·카테고리별로 등록된 스코어를 보유하는 엔티티입니다. 각 스코어 엔트리는 고유 ID로 식별되며, 카테고리 및 스코어 등록 사용자와 연결됩니다. 합산 모드에서는 새로운 스코어가 별도의 엔트리를 생성하는 대신 AddScore 조작을 통해 기존 합계에 가산됩니다. 카테고리의 최소값·최대값 범위를 벗어나는 스코어는 등록 시 거부됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 scoreId string ※ ~ 1024자 스코어 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 categoryName string  ~ 128자 카테고리명 userId string  ~ 128자 사용자ID uniqueId string  UUID ~ 36자 고유 ID 이 스코어 엔트리를 고유하게 식별하는 UUID입니다. 생성 시 자동으로 생성됩니다. uniqueByUserId가 비활성화된 경우, 동일 사용자의 동일 카테고리 내 여러 스코어 엔트리를 구분하기 위해 사용됩니다. scorerUserId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 플레이어가 등록한 스코어 값입니다. 카테고리에 설정된 최소값·최대값 범위 내여야 합니다. 합산 모드에서는 AddScore 조작을 통해 이 값을 증가시킬 수 있습니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Ranking 랭킹 랭킹 리더보드의 한 항목을 나타내며, 사용자의 순위, 점수 및 관련 메타데이터를 포함합니다. 글로벌 랭킹(모든 플레이어가 공유 보드에서 배치 집계로 경쟁)과 스코프 랭킹(구독한 플레이어를 기반으로 한 사용자별 보드에서 실시간 반영)의 두 종류가 있습니다. 랭킹은 카테고리에 설정된 정렬 방향으로 정렬되며, 동일 점수인 항목은 동일한 순위를 공유하면서도 서로 다른 인덱스를 유지합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rank long  1 ~ 9223372036854775805 순위 이 항목의 랭킹 순위(1부터 시작)입니다. 동일 점수인 항목은 동일한 순위 값을 공유합니다. 예를 들어 두 사용자가 1위로 동점인 경우, 둘 다 순위 1이 되고 다음 항목은 순위 3이 됩니다. index long  0 ~ 9223372036854775805 인덱스 랭킹 목록 내의 0부터 시작하는 순차 인덱스입니다. rank 와 달리, 여러 항목이 동일 점수를 공유하더라도 인덱스는 항상 유일하며 연속됩니다. 페이지네이션이나 범위 기반 쿼리에 사용됩니다. categoryName string  ~ 128자 카테고리 모델 이름 userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 이 랭킹 엔트리의 스코어 값입니다. 합산 모드의 경우, 등록된 모든 스코어의 누적 합계입니다. 랭킹 정렬 순서에 사용되는 값은 카테고리의 orderDirection 설정에 따라 달라집니다. metadata string ~ 512자 메타데이터 이 랭킹 엔트리에 연결된 임의의 메타데이터입니다. 스코어 등록 시 설정되며, 랭킹 결과와 함께 반환됩니다. 최대 512자. createdAt long  작성일시 UNIX 시간·밀리초 ※ 서버 측에서 자동으로 설정 SubscribeUser 구독 사용자 스코프 랭킹 카테고리 내 개별 구독 관계를 나타냅니다. 각 항목은 상위 사용자가 지정된 카테고리에서 대상 사용자의 점수를 구독(팔로우)하고 있음을 나타냅니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeUserId string ※ ~ 1024자 구독 대상 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 categoryName string  ~ 128자 카테고리 모델 이름 userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독 대상 사용자 ID 구독 대상 플레이어의 사용자 ID입니다. 이 사용자의 점수는 구독한 사용자의 지정된 카테고리에 대한 스코프 랭킹에 표시됩니다. CategoryModel 카테고리 모델 카테고리마다 서로 다른 랭킹을 생성할 수 있습니다. 카테고리에는 등록 가능한 스코어의 최소값·최대값을 설정할 수 있으며, 해당 범위를 벗어나는 스코어는 폐기됩니다. 랭킹을 집계할 때 스코어가 작은 것을 상위(오름차순)로 할지, 큰 것을 상위(내림차순)로 할지를 설정할 수 있습니다. 랭킹의 종류로 글로벌 과 스코프 를 선택할 수 있습니다. 글로벌은 모든 플레이어가 동일한 결과를 참조하는 것이며, 스코프는 친구 내 랭킹이나 길드 내 랭킹처럼 게임 플레이어마다 결과가 다른 랭킹입니다. 글로벌 랭킹은 카테고리별로 랭킹 집계 간격을 15분~24시간으로 설정할 수 있습니다. 스코프 랭킹은 실시간으로 집계 결과가 반영됩니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 스코어를 리셋할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 점수 최솟값 이 카테고리에 등록할 수 있는 점수의 최솟값입니다. 이 임곗값보다 낮은 점수는 등록 시 거부됩니다. 설정하지 않으면 하한이 없습니다. maximumValue long 0 ~ 9223372036854775805 점수 최댓값 이 카테고리에 등록할 수 있는 점수의 최댓값입니다. 이 임곗값보다 높은 점수는 등록 시 거부됩니다. 설정하지 않으면 상한이 없습니다. sum bool false 합산 모드 활성화하면 새로 등록된 점수가 기존 점수를 대체하는 것이 아니라 합계에 더해집니다. 랭킹은 누적된 합계값을 기준으로 계산됩니다. 비활성화된 경우 각 점수 등록은 독립된 항목으로 처리됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 집계의 정렬 순서를 결정합니다. “asc”(오름차순)는 낮은 점수를 상위로 하며, 시간 기반이나 골프식 랭킹에 적합합니다. “desc”(내림차순)는 높은 점수를 상위로 하며, 포인트 기반이나 하이스코어 랭킹에 적합합니다. 정의 설명 asc 오름차순 desc 내림차순 scope 문자열 열거형 enum {   “global”,   “scoped” }  랭킹 종류 이 카테고리의 랭킹 타입입니다. “global” 은 모든 플레이어가 공유하는 단일 리더보드를 만들며, 설정된 간격으로 배치 집계됩니다. “scoped” 는 구독한 플레이어(친구나 길드 멤버 등)를 기반으로 한 사용자별 리더보드를 만들며, 점수가 실시간으로 반영됩니다. 정의 설명 global 글로벌 scoped 스코프 globalRankingSetting GlobalRankingSetting {scope} == “global” ※ 글로벌 랭킹 설정 글로벌 랭킹 모드 전용 설정입니다. 집계 간격, 고정 시각, 점수의 유니크 여부, 세대 관리, 추가 기간 한정 스코프를 포함합니다. scope 가 “global” 로 설정된 경우에만 적용됩니다. ※ scope이(가) “global” 이면 필수 entryPeriodEventId string ~ 1024자 점수 등록 기간 이벤트 ID 점수 등록을 받는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 점수 등록 요청은 거부됩니다. 설정하지 않으면 점수는 언제든지 등록할 수 있습니다. accessPeriodEventId string ~ 1024자 접근 기간 이벤트 ID 랭킹 데이터를 열람할 수 있는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 랭킹 조회 요청은 거부됩니다. 설정하지 않으면 랭킹은 언제든지 접근할 수 있습니다. Scope 집계 스코프 글로벌 랭킹 모드에서의 추가적인 기간 한정 집계 스코프를 정의합니다. 일반적으로 글로벌 랭킹은 등록된 모든 스코어를 대상으로 집계됩니다. 스코프를 추가하면 지정한 일수 이내에 등록된 스코어만을 대상으로 하는 별도의 랭킹을 생성할 수 있으며, 전체 기간 랭킹과 함께 데일리·위클리·먼슬리 등의 리더보드를 구현할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. targetDays long  1 ~ 365 집계 대상 일수 집계 윈도우에 포함할 일수입니다. 현재 시각으로부터 이 일수 이내에 등록된 스코어만 스코프 랭킹의 대상이 됩니다. 범위: 1~365일. GlobalRankingSetting 글로벌 랭킹 설정 글로벌은 모든 플레이어가 동일한 결과를 참조하는 방식입니다. 랭킹 집계 간격은 15분~24시간으로 설정할 수 있습니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 점수를 초기화할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 uniqueByUserId bool true 사용자 ID별 유니크 활성화하면 랭킹 내에서 사용자 ID별로 하나의 점수만 유지됩니다. 사용자가 새로운 점수를 등록하면 정렬 방향에 따라 더 나은 점수로 교체됩니다. 비활성화하면 동일 사용자로부터 여러 점수 항목이 허용되어 합산 모드나 다중 항목 경쟁이 가능해집니다. calculateIntervalMinutes int  15 ~ 1440 집계 간격(분) 연속되는 랭킹 재집계 사이의 간격(분)입니다. 시스템은 이 간격으로 등록된 모든 점수를 기반으로 글로벌 랭킹을 정기적으로 재집계합니다. 범위: 15 1440분(15분 24시간). calculateFixedTiming FixedTiming 집계 시각 고정 설정 랭킹 재집계가 시작되는 하루 중 고정 시각(UTC)을 지정합니다. 설정하지 않으면 재집계는 정해지지 않은 기준 시각부터 일정 간격으로 실행됩니다. 이를 설정하면 매일 예측 가능하고 일관된 시각에 재집계가 이루어지도록 할 수 있습니다. additionalScopes List 0 ~ 10 items 추가 스코프 목록 추가적인 기간 한정 집계 스코프 목록입니다. 각 스코프는 지정한 일수 이내에 등록된 점수만을 대상으로 하는 별도의 랭킹을 정의합니다. 전체 기간의 글로벌 랭킹과 함께 데일리·위클리·먼슬리 등의 리더보드를 만들 수 있습니다. 최대 10건. ignoreUserIds List 0 ~ 10000 items 제외 사용자 ID 목록 랭킹 집계에서 점수를 제외할 사용자 ID 목록입니다. 테스트 계정, 관리자 계정 또는 알려진 부정 사용자를 리더보드에서 제외하는 데 사용합니다. 최대 10,000건. generation string ~ 256자 세대 현재 랭킹 세대를 나타내는 임의의 문자열입니다. 이 값을 변경하면 이전 세대의 점수는 랭킹 집계에 포함되지 않으므로 사실상 점수가 초기화됩니다. 시즌제 초기화나 정기적인 랭킹 초기화를 구현하는 데 사용합니다. 최대 256자. FixedTiming 집계 시각 고정 설정 글로벌 랭킹의 집계가 시작되는 고정 시각을 지정합니다. 이 설정이 없으면 랭킹 집계는 정해지지 않은 기준 시각부터 일정 간격으로 실행됩니다. 고정된 시·분을 지정함으로써 매일의 집계 시작 시각(UTC)을 예측 가능하게 할 수 있으며, 자정이나 특정 시각에 집계를 시작하도록 제어할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 hour int 0 ~ 23 시 랭킹 집계가 시작되는 시각의 시(UTC)입니다. 0~23 사이의 정수로 지정합니다. minute int 0 ~ 59 분 지정한 시각의 분입니다. 0~59 사이의 정수로 지정합니다. CalculatedAt 최종 집계일시 특정 카테고리에 대한 마지막 랭킹 집계의 타임스탬프를 기록합니다. 네임스페이스는 카테고리별로 하나씩 이 엔트리의 리스트를 유지하며, 글로벌 랭킹의 재집계가 완료될 때마다 업데이트됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 categoryName string  ~ 128자 카테고리 이름 최종 집계 시각이 추적되는 카테고리 모델의 이름입니다. 동일한 네임스페이스 내에서 정의된 CategoryModel의 name 필드와 일치합니다. calculatedAt long  집계일시 이 카테고리의 랭킹 집계가 마지막으로 완료된 타임스탬프입니다. UNIX 시간(밀리초)으로 표현됩니다. 랭킹 재집계가 완료되었을 때 서버가 자동으로 설정합니다. CurrentRankingMaster 현재 활성화된 랭킹 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 랭킹 모델의 정의를 기술한 마스터 데이터입니다. GS2는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Ranking 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 CategoryModelMaster 카테고리 모델 마스터 카테고리 모델 마스터는 게임 내에서 사용되는 카테고리 모델을 편집·관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 저장됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 카테고리 모델로 반영됩니다. 카테고리별로 서로 다른 랭킹을 만들 수 있습니다. 카테고리에는 등록 가능한 점수의 최솟값·최댓값을 설정할 수 있으며, 해당 범위를 벗어난 점수는 폐기됩니다. 랭킹을 집계할 때 점수가 작은 쪽을 상위로 할지(오름차순), 큰 쪽을 상위로 할지(내림차순) 설정할 수 있습니다. 랭킹 종류로 글로벌 과 스코프 를 선택할 수 있습니다. 글로벌은 모든 플레이어가 동일한 결과를 참조하는 것이며, 스코프는 친구 랭킹이나 길드 랭킹처럼 게임 플레이어마다 결과가 다른 랭킹입니다. 글로벌 랭킹은 카테고리별로 랭킹 집계 간격을 15분~24시간으로 설정할 수 있습니다. 스코프 랭킹은 실시간으로 집계 결과가 반영됩니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 점수를 초기화할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 카테고리 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 점수 최솟값 이 카테고리에 등록할 수 있는 점수의 최솟값입니다. 이 임곗값보다 낮은 점수는 등록 시 거부됩니다. 설정하지 않으면 하한이 없습니다. maximumValue long 0 ~ 9223372036854775805 점수 최댓값 이 카테고리에 등록할 수 있는 점수의 최댓값입니다. 이 임곗값보다 높은 점수는 등록 시 거부됩니다. 설정하지 않으면 상한이 없습니다. sum bool false 합산 모드 활성화하면 새로 등록된 점수가 기존 점수를 대체하는 것이 아니라 합계에 더해집니다. 랭킹은 누적된 합계값을 기준으로 계산됩니다. 비활성화된 경우 각 점수 등록은 독립된 항목으로 처리됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 집계의 정렬 순서를 결정합니다. “asc”(오름차순)는 낮은 점수를 상위로 하며, 시간 기반이나 골프식 랭킹에 적합합니다. “desc”(내림차순)는 높은 점수를 상위로 하며, 포인트 기반이나 하이스코어 랭킹에 적합합니다. 정의 설명 asc 오름차순 desc 내림차순 scope 문자열 열거형 enum {   “global”,   “scoped” }  랭킹 종류 이 카테고리의 랭킹 타입입니다. “global” 은 모든 플레이어가 공유하는 단일 리더보드를 만들며, 설정된 간격으로 배치 집계됩니다. “scoped” 는 구독한 플레이어(친구나 길드 멤버 등)를 기반으로 한 사용자별 리더보드를 만들며, 점수가 실시간으로 반영됩니다. 정의 설명 global 글로벌 scoped 스코프 globalRankingSetting GlobalRankingSetting {scope} == “global” ※ 글로벌 랭킹 설정 글로벌 랭킹 모드 전용 설정입니다. 집계 간격, 고정 시각, 점수의 유니크 여부, 세대 관리, 추가 기간 한정 스코프를 포함합니다. scope 가 “global” 로 설정된 경우에만 적용됩니다. ※ scope이(가) “global” 이면 필수 entryPeriodEventId string ~ 1024자 점수 등록 기간 이벤트 ID 점수 등록을 받는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 점수 등록 요청은 거부됩니다. 설정하지 않으면 점수는 언제든지 등록할 수 있습니다. accessPeriodEventId string ~ 1024자 접근 기간 이벤트 ID 랭킹 데이터를 열람할 수 있는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 랭킹 조회 요청은 거부됩니다. 설정하지 않으면 랭킹은 언제든지 접근할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 ranking . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeNamespacesRequest ; import io.gs2.ranking.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Ranking . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Ranking . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_namespaces ( ranking . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 랭킹 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 랭킹 관련 조작 로그를 GS2-Log에 출력하기 위한 설정입니다. 설정하면 스코어 등록, 랭킹 취득, 구독 변경 등의 작업이 분석 및 감사를 위해 기록됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 ranking . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , LogSetting : \u0026 ranking . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Ranking\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.CreateNamespaceRequest ; import io.gs2.ranking.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . ranking . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Ranking . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Ranking . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Ranking . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Ranking . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . create_namespace ( ranking . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_log_setting ( ranking . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 ranking . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetNamespaceStatusRequest ; import io.gs2.ranking.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Ranking . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Ranking . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_namespace_status ( ranking . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'ranking' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 ranking . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetNamespaceRequest ; import io.gs2.ranking.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Ranking . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Ranking . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_namespace ( ranking . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 랭킹 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 랭킹 관련 조작 로그를 GS2-Log에 출력하기 위한 설정입니다. 설정하면 스코어 등록, 랭킹 취득, 구독 변경 등의 작업이 분석 및 감사를 위해 기록됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 ranking . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , LogSetting : \u0026 ranking . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Ranking\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.UpdateNamespaceRequest ; import io.gs2.ranking.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . ranking . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Ranking . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Ranking . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Ranking . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Ranking . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . update_namespace ( ranking . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_log_setting ( ranking . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 ranking . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DeleteNamespaceRequest ; import io.gs2.ranking.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Ranking . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Ranking . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . delete_namespace ( ranking . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 ranking . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetServiceVersionRequest ; import io.gs2.ranking.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Ranking . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Ranking . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_service_version ( ranking . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 ranking . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DumpUserDataByUserIdRequest ; import io.gs2.ranking.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Ranking . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Ranking . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . dump_user_data_by_user_id ( ranking . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ranking' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 ranking . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.ranking.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Ranking . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Ranking . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( ranking . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'ranking' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 ranking . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.CleanUserDataByUserIdRequest ; import io.gs2.ranking.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Ranking . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Ranking . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . clean_user_data_by_user_id ( ranking . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ranking' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 ranking . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.ranking.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Ranking . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Ranking . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( ranking . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ranking' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 ranking . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.ranking.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Ranking . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Ranking . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( ranking . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'ranking' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 ranking . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.ImportUserDataByUserIdRequest ; import io.gs2.ranking.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Ranking . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Ranking . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . import_user_data_by_user_id ( ranking . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ranking' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 ranking . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.CheckImportUserDataByUserIdRequest ; import io.gs2.ranking.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Ranking . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Ranking . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( ranking . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'ranking' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; subscribe 대상 사용자 구독 지정한 카테고리에서 지정한 대상 사용자의 랭킹을 구독합니다. 대상 사용자의 스코어가 요청한 사용자의 스코프 지정 랭킹에 포함되게 됩니다. 자기 자신을 구독할 수는 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 구독할 사용자 ID Result 타입 설명 item SubscribeUser 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . Subscribe ( \u0026 ranking . SubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\SubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e subscribe ( ( new SubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.SubscribeRequest ; import io.gs2.ranking.result.SubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { SubscribeResult result = client . subscribe ( new SubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . SubscribeResult \u003e asyncResult = null ; yield return client . Subscribe ( new Gs2 . Gs2Ranking . Request . SubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . subscribe ( new Gs2Ranking . SubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . subscribe ( ranking . SubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.subscribe ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.subscribe_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; subscribeByUserId 사용자 ID를 지정하여 대상 사용자 구독 지정한 사용자를 대신하여 지정한 카테고리에서 지정한 대상 사용자의 랭킹을 구독합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독할 사용자 ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeUser 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . SubscribeByUserId ( \u0026 ranking . SubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\SubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e subscribeByUserId ( ( new SubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.SubscribeByUserIdRequest ; import io.gs2.ranking.result.SubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { SubscribeByUserIdResult result = client . subscribeByUserId ( new SubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . SubscribeByUserIdResult \u003e asyncResult = null ; yield return client . SubscribeByUserId ( new Gs2 . Gs2Ranking . Request . SubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . subscribeByUserId ( new Gs2Ranking . SubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . subscribe_by_user_id ( ranking . SubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.subscribe_by_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.subscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeScores 스코어 목록 취득 지정한 카테고리에서 지정한 스코어 등록자가 등록한 스코어 목록을 페이지네이션으로 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 accessToken string  ~ 128자 액세스 토큰 scorerUserId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeScores ( \u0026 ranking . DescribeScoresRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ScorerUserId : pointy . String ( \"user-0002\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeScoresRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeScores ( ( new DescribeScoresRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withScorerUserId ( \"user-0002\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeScoresRequest ; import io.gs2.ranking.result.DescribeScoresResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeScoresResult result = client . describeScores ( new DescribeScoresRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScorerUserId ( \"user-0002\" ) . withPageToken ( null ) . withLimit ( null ) ); List Score \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeScoresResult \u003e asyncResult = null ; yield return client . DescribeScores ( new Gs2 . Gs2Ranking . Request . DescribeScoresRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithScorerUserId ( \"user-0002\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeScores ( new Gs2Ranking . DescribeScoresRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScorerUserId ( \"user-0002\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_scores ( ranking . DescribeScoresRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) . with_scorer_user_id ( 'user-0002' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_scores ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , scorerUserId = \"user-0002\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_scores_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , scorerUserId = \"user-0002\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeScoresByUserId 사용자 ID를 지정하여 스코어 목록 취득 지정한 사용자에 대해, 지정한 카테고리에서 지정한 스코어 등록자가 등록한 스코어 목록을 페이지네이션으로 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 userId string  ~ 128자 사용자ID scorerUserId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeScoresByUserId ( \u0026 ranking . DescribeScoresByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), ScorerUserId : pointy . String ( \"user-0002\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeScoresByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeScoresByUserId ( ( new DescribeScoresByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withScorerUserId ( \"user-0002\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeScoresByUserIdRequest ; import io.gs2.ranking.result.DescribeScoresByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeScoresByUserIdResult result = client . describeScoresByUserId ( new DescribeScoresByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withScorerUserId ( \"user-0002\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Score \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeScoresByUserIdResult \u003e asyncResult = null ; yield return client . DescribeScoresByUserId ( new Gs2 . Gs2Ranking . Request . DescribeScoresByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithScorerUserId ( \"user-0002\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeScoresByUserId ( new Gs2Ranking . DescribeScoresByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withScorerUserId ( \"user-0002\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_scores_by_user_id ( ranking . DescribeScoresByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_scorer_user_id ( 'user-0002' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_scores_by_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , scorerUserId = \"user-0002\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_scores_by_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , scorerUserId = \"user-0002\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getScore 스코어 취득 카테고리, 스코어 등록자의 사용자 ID, 고유 ID를 지정하여 특정 스코어 레코드를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 accessToken string  ~ 128자 액세스 토큰 scorerUserId string  ~ 128자 사용자ID uniqueId string “0” ~ 36자 스코어의 고유 ID Result 타입 설명 item Score 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetScore ( \u0026 ranking . GetScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ScorerUserId : pointy . String ( \"user-0002\" ), UniqueId : pointy . String ( \"unique-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getScore ( ( new GetScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withScorerUserId ( \"user-0002\" ) -\u003e withUniqueId ( \"unique-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetScoreRequest ; import io.gs2.ranking.result.GetScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetScoreResult result = client . getScore ( new GetScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScorerUserId ( \"user-0002\" ) . withUniqueId ( \"unique-0001\" ) ); Score item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetScoreResult \u003e asyncResult = null ; yield return client . GetScore ( new Gs2 . Gs2Ranking . Request . GetScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithScorerUserId ( \"user-0002\" ) . WithUniqueId ( \"unique-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getScore ( new Gs2Ranking . GetScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScorerUserId ( \"user-0002\" ) . withUniqueId ( \"unique-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_score ( ranking . GetScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) . with_scorer_user_id ( 'user-0002' ) . with_unique_id ( 'unique-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_score ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , scorerUserId = \"user-0002\" , uniqueId = \"unique-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_score_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , scorerUserId = \"user-0002\" , uniqueId = \"unique-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getScoreByUserId 사용자 ID를 지정하여 스코어 취득 지정한 사용자에 대해, 카테고리, 스코어 등록자의 사용자 ID, 고유 ID를 지정하여 특정 스코어 레코드를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 userId string  ~ 128자 사용자ID scorerUserId string  ~ 128자 사용자ID uniqueId string “0” ~ 36자 스코어의 고유 ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Score 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetScoreByUserId ( \u0026 ranking . GetScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), ScorerUserId : pointy . String ( \"user-0002\" ), UniqueId : pointy . String ( \"unique-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getScoreByUserId ( ( new GetScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withScorerUserId ( \"user-0002\" ) -\u003e withUniqueId ( \"unique-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetScoreByUserIdRequest ; import io.gs2.ranking.result.GetScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetScoreByUserIdResult result = client . getScoreByUserId ( new GetScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withScorerUserId ( \"user-0002\" ) . withUniqueId ( \"unique-0001\" ) . withTimeOffsetToken ( null ) ); Score item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetScoreByUserIdResult \u003e asyncResult = null ; yield return client . GetScoreByUserId ( new Gs2 . Gs2Ranking . Request . GetScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithScorerUserId ( \"user-0002\" ) . WithUniqueId ( \"unique-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getScoreByUserId ( new Gs2Ranking . GetScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withScorerUserId ( \"user-0002\" ) . withUniqueId ( \"unique-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_score_by_user_id ( ranking . GetScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_scorer_user_id ( 'user-0002' ) . with_unique_id ( 'unique-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_score_by_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , scorerUserId = \"user-0002\" , uniqueId = \"unique-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , scorerUserId = \"user-0002\" , uniqueId = \"unique-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRankings 랭킹 취득 지정한 카테고리의 랭킹을 페이지네이션으로 취득합니다. 글로벌 랭킹과 스코프 지정 랭킹 양쪽 모두를 지원합니다. 시작 인덱스를 지정하여 특정 순위부터 취득을 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string ~ 128자 액세스 토큰 additionalScopeName string ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. startIndex long 0 ~ 9223372036854775805 랭킹 취득을 시작할 인덱스 pageToken string ~ 4096자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeRankings ( \u0026 ranking . DescribeRankingsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), AdditionalScopeName : nil , StartIndex : pointy . Int64 ( 0 ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeRankingsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeRankings ( ( new DescribeRankingsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withAdditionalScopeName ( null ) -\u003e withStartIndex ( 0 ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeRankingsRequest ; import io.gs2.ranking.result.DescribeRankingsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeRankingsResult result = client . describeRankings ( new DescribeRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAdditionalScopeName ( null ) . withStartIndex ( 0L ) . withPageToken ( null ) . withLimit ( null ) ); List Ranking \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeRankingsResult \u003e asyncResult = null ; yield return client . DescribeRankings ( new Gs2 . Gs2Ranking . Request . DescribeRankingsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithAdditionalScopeName ( null ) . WithStartIndex ( 0L ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeRankings ( new Gs2Ranking . DescribeRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withAdditionalScopeName ( null ) . withStartIndex ( 0 ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_rankings ( ranking . DescribeRankingsRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) . with_additional_scope_name ( None ) . with_start_index ( 0 ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_rankings ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , additionalScopeName = nil , startIndex = 0 , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_rankings_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , additionalScopeName = nil , startIndex = 0 , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeRankingssByUserId 사용자 ID를 지정하여 랭킹 취득 지정한 카테고리와 사용자의 랭킹을 페이지네이션으로 취득합니다. 글로벌 랭킹과 스코프 지정 랭킹 양쪽 모두를 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string ~ 128자 사용자ID additionalScopeName string ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. startIndex long 0 ~ 9223372036854775805 랭킹 취득을 시작할 인덱스 pageToken string ~ 4096자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeRankingssByUserId ( \u0026 ranking . DescribeRankingssByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), AdditionalScopeName : nil , StartIndex : pointy . Int64 ( 0 ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeRankingssByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeRankingssByUserId ( ( new DescribeRankingssByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withAdditionalScopeName ( null ) -\u003e withStartIndex ( 0 ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeRankingssByUserIdRequest ; import io.gs2.ranking.result.DescribeRankingssByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeRankingssByUserIdResult result = client . describeRankingssByUserId ( new DescribeRankingssByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withAdditionalScopeName ( null ) . withStartIndex ( 0L ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Ranking \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeRankingssByUserIdResult \u003e asyncResult = null ; yield return client . DescribeRankingssByUserId ( new Gs2 . Gs2Ranking . Request . DescribeRankingssByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithAdditionalScopeName ( null ) . WithStartIndex ( 0L ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeRankingssByUserId ( new Gs2Ranking . DescribeRankingssByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withAdditionalScopeName ( null ) . withStartIndex ( 0 ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_rankingss_by_user_id ( ranking . DescribeRankingssByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_additional_scope_name ( None ) . with_start_index ( 0 ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_rankingss_by_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , additionalScopeName = nil , startIndex = 0 , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_rankingss_by_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , additionalScopeName = nil , startIndex = 0 , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeNearRankings 지정한 스코어 부근의 랭킹 취득 이 API는 글로벌 랭킹일 때만 사용할 수 있습니다 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. additionalScopeName string ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. score long  0 ~ 9223372036854775805 스코어 이 랭킹 엔트리의 스코어 값입니다. 합산 모드의 경우, 등록된 모든 스코어의 누적 합계입니다. 랭킹 정렬 순서에 사용되는 값은 카테고리의 orderDirection 설정에 따라 달라집니다. Result 타입 설명 items List 랭킹 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeNearRankings ( \u0026 ranking . DescribeNearRankingsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AdditionalScopeName : nil , Score : pointy . Int64 ( 1000 ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeNearRankingsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeNearRankings ( ( new DescribeNearRankingsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAdditionalScopeName ( null ) -\u003e withScore ( 1000 ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeNearRankingsRequest ; import io.gs2.ranking.result.DescribeNearRankingsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeNearRankingsResult result = client . describeNearRankings ( new DescribeNearRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAdditionalScopeName ( null ) . withScore ( 1000L ) ); List Ranking \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeNearRankingsResult \u003e asyncResult = null ; yield return client . DescribeNearRankings ( new Gs2 . Gs2Ranking . Request . DescribeNearRankingsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAdditionalScopeName ( null ) . WithScore ( 1000L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeNearRankings ( new Gs2Ranking . DescribeNearRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAdditionalScopeName ( null ) . withScore ( 1000 ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_near_rankings ( ranking . DescribeNearRankingsRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_additional_scope_name ( None ) . with_score ( 1000 ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_near_rankings ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , additionalScopeName = nil , score = 1000 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_near_rankings_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , additionalScopeName = nil , score = 1000 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getRanking 랭킹 취득 특정 스코어 등록자의 스코어에 대한 랭킹 정보(순위 포함)를 취득합니다. 지정한 스코어 부근의 랭킹도 함께 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 scorerUserId string  ~ 128자 스코어를 획득한 사용자의 사용자 ID uniqueId string “0” ~ 36자 스코어의 고유 ID additionalScopeName string ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. Result 타입 설명 item Ranking 랭킹 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetRanking ( \u0026 ranking . GetRankingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ScorerUserId : pointy . String ( \"user-0001\" ), UniqueId : pointy . String ( \"unique-id\" ), AdditionalScopeName : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetRankingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getRanking ( ( new GetRankingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withScorerUserId ( \"user-0001\" ) -\u003e withUniqueId ( \"unique-id\" ) -\u003e withAdditionalScopeName ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetRankingRequest ; import io.gs2.ranking.result.GetRankingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetRankingResult result = client . getRanking ( new GetRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScorerUserId ( \"user-0001\" ) . withUniqueId ( \"unique-id\" ) . withAdditionalScopeName ( null ) ); Ranking item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetRankingResult \u003e asyncResult = null ; yield return client . GetRanking ( new Gs2 . Gs2Ranking . Request . GetRankingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithScorerUserId ( \"user-0001\" ) . WithUniqueId ( \"unique-id\" ) . WithAdditionalScopeName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getRanking ( new Gs2Ranking . GetRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScorerUserId ( \"user-0001\" ) . withUniqueId ( \"unique-id\" ) . withAdditionalScopeName ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_ranking ( ranking . GetRankingRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) . with_scorer_user_id ( 'user-0001' ) . with_unique_id ( 'unique-id' ) . with_additional_scope_name ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_ranking ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , scorerUserId = \"user-0001\" , uniqueId = \"unique-id\" , additionalScopeName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_ranking_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , scorerUserId = \"user-0001\" , uniqueId = \"unique-id\" , additionalScopeName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRankingByUserId 사용자 ID를 지정하여 랭킹 취득 지정한 사용자에서의 특정 스코어 등록자의 스코어에 대한 랭킹 정보(순위 포함)를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 랭킹을 취득할 사용자 ID(GS2-Schedule의 기간 판정에 사용됩니다.) scorerUserId string  ~ 128자 스코어를 획득한 사용자의 사용자 ID uniqueId string “0” ~ 36자 스코어의 고유 ID additionalScopeName string ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Ranking 랭킹 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetRankingByUserId ( \u0026 ranking . GetRankingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), ScorerUserId : pointy . String ( \"user-0001\" ), UniqueId : pointy . String ( \"unique-id\" ), AdditionalScopeName : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetRankingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getRankingByUserId ( ( new GetRankingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withScorerUserId ( \"user-0001\" ) -\u003e withUniqueId ( \"unique-id\" ) -\u003e withAdditionalScopeName ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetRankingByUserIdRequest ; import io.gs2.ranking.result.GetRankingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetRankingByUserIdResult result = client . getRankingByUserId ( new GetRankingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withScorerUserId ( \"user-0001\" ) . withUniqueId ( \"unique-id\" ) . withAdditionalScopeName ( null ) . withTimeOffsetToken ( null ) ); Ranking item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetRankingByUserIdResult \u003e asyncResult = null ; yield return client . GetRankingByUserId ( new Gs2 . Gs2Ranking . Request . GetRankingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithScorerUserId ( \"user-0001\" ) . WithUniqueId ( \"unique-id\" ) . WithAdditionalScopeName ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getRankingByUserId ( new Gs2Ranking . GetRankingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withScorerUserId ( \"user-0001\" ) . withUniqueId ( \"unique-id\" ) . withAdditionalScopeName ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_ranking_by_user_id ( ranking . GetRankingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_scorer_user_id ( 'user-0001' ) . with_unique_id ( 'unique-id' ) . with_additional_scope_name ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_ranking_by_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , scorerUserId = \"user-0001\" , uniqueId = \"unique-id\" , additionalScopeName = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_ranking_by_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , scorerUserId = \"user-0001\" , uniqueId = \"unique-id\" , additionalScopeName = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; putScore 스코어 등록 지정한 랭킹 카테고리에 요청한 사용자의 스코어를 등록합니다. 카테고리 타입에 따라 글로벌 랭킹 또는 스코프 지정 랭킹 처리로 분류됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 score long  0 ~ 9223372036854775805 스코어 이 랭킹 엔트리의 스코어 값입니다. 합산 모드의 경우, 등록된 모든 스코어의 누적 합계입니다. 랭킹 정렬 순서에 사용되는 값은 카테고리의 orderDirection 설정에 따라 달라집니다. metadata string ~ 512자 메타데이터 이 랭킹 엔트리에 연결된 임의의 메타데이터입니다. 스코어 등록 시 설정되며, 랭킹 결과와 함께 반환됩니다. 최대 512자. Result 타입 설명 item Score 등록한 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . PutScore ( \u0026 ranking . PutScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Score : pointy . Int64 ( 1000 ), Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\PutScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e putScore ( ( new PutScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withScore ( 1000 ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.PutScoreRequest ; import io.gs2.ranking.result.PutScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { PutScoreResult result = client . putScore ( new PutScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScore ( 1000L ) . withMetadata ( null ) ); Score item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . PutScoreResult \u003e asyncResult = null ; yield return client . PutScore ( new Gs2 . Gs2Ranking . Request . PutScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithScore ( 1000L ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . putScore ( new Gs2Ranking . PutScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScore ( 1000 ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . put_score ( ranking . PutScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) . with_score ( 1000 ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.put_score ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , score = 1000 , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.put_score_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , score = 1000 , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; putScoreByUserId 사용자 ID를 지정하여 스코어 등록 지정한 랭킹 카테고리에 지정한 사용자의 스코어를 등록합니다. 카테고리 타입에 따라 글로벌 랭킹 또는 스코프 지정 랭킹 처리로 분류됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 이 랭킹 엔트리의 스코어 값입니다. 합산 모드의 경우, 등록된 모든 스코어의 누적 합계입니다. 랭킹 정렬 순서에 사용되는 값은 카테고리의 orderDirection 설정에 따라 달라집니다. metadata string ~ 512자 메타데이터 이 랭킹 엔트리에 연결된 임의의 메타데이터입니다. 스코어 등록 시 설정되며, 랭킹 결과와 함께 반환됩니다. 최대 512자. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Score 등록한 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . PutScoreByUserId ( \u0026 ranking . PutScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), Score : pointy . Int64 ( 1000 ), Metadata : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\PutScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e putScoreByUserId ( ( new PutScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withScore ( 1000 ) -\u003e withMetadata ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.PutScoreByUserIdRequest ; import io.gs2.ranking.result.PutScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { PutScoreByUserIdResult result = client . putScoreByUserId ( new PutScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withScore ( 1000L ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); Score item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . PutScoreByUserIdResult \u003e asyncResult = null ; yield return client . PutScoreByUserId ( new Gs2 . Gs2Ranking . Request . PutScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithScore ( 1000L ) . WithMetadata ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . putScoreByUserId ( new Gs2Ranking . PutScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withScore ( 1000 ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . put_score_by_user_id ( ranking . PutScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_score ( 1000 ) . with_metadata ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.put_score_by_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , score = 1000 , metadata = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.put_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , score = 1000 , metadata = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; calcRanking 랭킹 계산 처리의 강제 실행 예약된 계산 시점과 관계없이 지정한 카테고리의 랭킹 재계산을 즉시 실행합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 additionalScopeName string ~ 128자 추가 스코프 Result 타입 설명 processing bool 비동기 처리로 집계 처리가 진행 중인지 여부 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . CalcRanking ( \u0026 ranking . CalcRankingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AdditionalScopeName : nil , } ) if err != nil { panic ( \"error occurred\" ) } processing := result . Processing use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\CalcRankingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e calcRanking ( ( new CalcRankingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAdditionalScopeName ( null ) ); $processing = $result -\u003e getProcessing (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.CalcRankingRequest ; import io.gs2.ranking.result.CalcRankingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { CalcRankingResult result = client . calcRanking ( new CalcRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAdditionalScopeName ( null ) ); boolean processing = result . getProcessing (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . CalcRankingResult \u003e asyncResult = null ; yield return client . CalcRanking ( new Gs2 . Gs2Ranking . Request . CalcRankingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAdditionalScopeName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var processing = result . Processing ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . calcRanking ( new Gs2Ranking . CalcRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAdditionalScopeName ( null ) ); const processing = result . getProcessing (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . calc_ranking ( ranking . CalcRankingRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_additional_scope_name ( None ) ) processing = result . processing except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.calc_ranking ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , additionalScopeName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result processing = result.processing ; client = gs2 ( 'ranking' ) api_result_handler = client.calc_ranking_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , additionalScopeName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result processing = result.processing ; getSubscribe 구독 대상 사용자 정보 취득 지정한 랭킹 카테고리에서 특정 대상 사용자의 구독 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 사용자ID Result 타입 설명 item SubscribeUser 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetSubscribe ( \u0026 ranking . GetSubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetSubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getSubscribe ( ( new GetSubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetSubscribeRequest ; import io.gs2.ranking.result.GetSubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetSubscribeResult result = client . getSubscribe ( new GetSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetSubscribeResult \u003e asyncResult = null ; yield return client . GetSubscribe ( new Gs2 . Gs2Ranking . Request . GetSubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getSubscribe ( new Gs2Ranking . GetSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_subscribe ( ranking . GetSubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_subscribe ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_subscribe_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribeByUserId 사용자 ID를 지정하여 구독 정보 취득 지정한 사용자에 대해, 지정한 랭킹 카테고리의 특정 대상 사용자에 대한 구독 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeUser 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetSubscribeByUserId ( \u0026 ranking . GetSubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetSubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getSubscribeByUserId ( ( new GetSubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetSubscribeByUserIdRequest ; import io.gs2.ranking.result.GetSubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetSubscribeByUserIdResult result = client . getSubscribeByUserId ( new GetSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetSubscribeByUserIdResult \u003e asyncResult = null ; yield return client . GetSubscribeByUserId ( new Gs2 . Gs2Ranking . Request . GetSubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getSubscribeByUserId ( new Gs2Ranking . GetSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_subscribe_by_user_id ( ranking . GetSubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_subscribe_by_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_subscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unsubscribe 대상 사용자의 구독 해제 지정한 카테고리에서 지정한 대상 사용자의 랭킹 구독을 해제합니다. 대상 사용자의 스코어는 요청한 사용자의 스코프 랭킹에 더 이상 표시되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 구독 해제할 사용자 ID Result 타입 설명 item SubscribeUser 해제한 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . Unsubscribe ( \u0026 ranking . UnsubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\UnsubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e unsubscribe ( ( new UnsubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.UnsubscribeRequest ; import io.gs2.ranking.result.UnsubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { UnsubscribeResult result = client . unsubscribe ( new UnsubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . UnsubscribeResult \u003e asyncResult = null ; yield return client . Unsubscribe ( new Gs2 . Gs2Ranking . Request . UnsubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . unsubscribe ( new Gs2Ranking . UnsubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . unsubscribe ( ranking . UnsubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.unsubscribe ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.unsubscribe_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; unsubscribeByUserId 사용자 ID를 지정하여 대상 사용자의 구독 해제 지정한 사용자를 대신하여, 지정한 카테고리에서 지정한 대상 사용자의 랭킹 구독을 해제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리명 userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독 해제할 사용자 ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeUser 해제한 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . UnsubscribeByUserId ( \u0026 ranking . UnsubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\UnsubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e unsubscribeByUserId ( ( new UnsubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.UnsubscribeByUserIdRequest ; import io.gs2.ranking.result.UnsubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { UnsubscribeByUserIdResult result = client . unsubscribeByUserId ( new UnsubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . UnsubscribeByUserIdResult \u003e asyncResult = null ; yield return client . UnsubscribeByUserId ( new Gs2 . Gs2Ranking . Request . UnsubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . unsubscribeByUserId ( new Gs2Ranking . UnsubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . unsubscribe_by_user_id ( ranking . UnsubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.unsubscribe_by_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.unsubscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSubscribesByCategoryName 구독 중인 사용자의 사용자 ID 목록 취득 지정한 랭킹 카테고리에서 요청한 사용자가 구독하고 있는 사용자의 목록을 취득합니다. 구독 사용자의 스코어는 스코프 지정 랭킹에 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 items List 구독 대상 사용자 정보 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeSubscribesByCategoryName ( \u0026 ranking . DescribeSubscribesByCategoryNameRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeSubscribesByCategoryNameRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeSubscribesByCategoryName ( ( new DescribeSubscribesByCategoryNameRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeSubscribesByCategoryNameRequest ; import io.gs2.ranking.result.DescribeSubscribesByCategoryNameResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeSubscribesByCategoryNameResult result = client . describeSubscribesByCategoryName ( new DescribeSubscribesByCategoryNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List SubscribeUser \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeSubscribesByCategoryNameResult \u003e asyncResult = null ; yield return client . DescribeSubscribesByCategoryName ( new Gs2 . Gs2Ranking . Request . DescribeSubscribesByCategoryNameRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeSubscribesByCategoryName ( new Gs2Ranking . DescribeSubscribesByCategoryNameRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_subscribes_by_category_name ( ranking . DescribeSubscribesByCategoryNameRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_subscribes_by_category_name ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_subscribes_by_category_name_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeSubscribesByCategoryNameAndUserId 사용자 ID를 지정하여 해당 사용자가 구독하고 있는 사용자 목록 취득 지정한 랭킹 카테고리에서 지정한 사용자가 구독하고 있는 사용자의 목록을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 구독 대상 사용자 정보 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeSubscribesByCategoryNameAndUserId ( \u0026 ranking . DescribeSubscribesByCategoryNameAndUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeSubscribesByCategoryNameAndUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeSubscribesByCategoryNameAndUserId ( ( new DescribeSubscribesByCategoryNameAndUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeSubscribesByCategoryNameAndUserIdRequest ; import io.gs2.ranking.result.DescribeSubscribesByCategoryNameAndUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeSubscribesByCategoryNameAndUserIdResult result = client . describeSubscribesByCategoryNameAndUserId ( new DescribeSubscribesByCategoryNameAndUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List SubscribeUser \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeSubscribesByCategoryNameAndUserIdResult \u003e asyncResult = null ; yield return client . DescribeSubscribesByCategoryNameAndUserId ( new Gs2 . Gs2Ranking . Request . DescribeSubscribesByCategoryNameAndUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeSubscribesByCategoryNameAndUserId ( new Gs2Ranking . DescribeSubscribesByCategoryNameAndUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_subscribes_by_category_name_and_user_id ( ranking . DescribeSubscribesByCategoryNameAndUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_subscribes_by_category_name_and_user_id ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_subscribes_by_category_name_and_user_id_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeCategoryModels 카테고리 모델 목록 취득 현재 활성화된 카테고리 모델의 목록을 취득합니다. 카테고리 모델은 스코어링 규칙, 계산 설정, 스코프 설정을 포함한 랭킹 카테고리를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 카테고리 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeCategoryModels ( \u0026 ranking . DescribeCategoryModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeCategoryModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeCategoryModels ( ( new DescribeCategoryModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeCategoryModelsRequest ; import io.gs2.ranking.result.DescribeCategoryModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeCategoryModelsResult result = client . describeCategoryModels ( new DescribeCategoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List CategoryModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeCategoryModelsResult \u003e asyncResult = null ; yield return client . DescribeCategoryModels ( new Gs2 . Gs2Ranking . Request . DescribeCategoryModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeCategoryModels ( new Gs2Ranking . DescribeCategoryModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_category_models ( ranking . DescribeCategoryModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_category_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_category_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getCategoryModel 카테고리 모델 취득 스코어 범위, 정렬 순서, 스코프 타입, 글로벌 랭킹 설정, 엔트리/액세스 기간 이벤트 설정을 포함한 지정된 카테고리 모델을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CategoryModel 카테고리 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetCategoryModel ( \u0026 ranking . GetCategoryModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetCategoryModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getCategoryModel ( ( new GetCategoryModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetCategoryModelRequest ; import io.gs2.ranking.result.GetCategoryModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetCategoryModelResult result = client . getCategoryModel ( new GetCategoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) ); CategoryModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetCategoryModelResult \u003e asyncResult = null ; yield return client . GetCategoryModel ( new Gs2 . Gs2Ranking . Request . GetCategoryModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getCategoryModel ( new Gs2Ranking . GetCategoryModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_category_model ( ranking . GetCategoryModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_category_model ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_category_model_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 모델 마스터를 유효화 가능한 마스터 데이터 형식으로 익스포트 현재 등록되어 있는 카테고리 모델 마스터를 유효화 가능한 마스터 데이터 형식으로 익스포트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentRankingMaster 활성화 가능한 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 ranking . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.ExportMasterRequest ; import io.gs2.ranking.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentRankingMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Ranking . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Ranking . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . export_master ( ranking . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentRankingMaster 현재 활성화된 랭킹 모델 마스터 데이터 취득 카테고리 모델 정의를 포함한 현재 활성화된 랭킹 모델의 마스터 데이터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetCurrentRankingMaster ( \u0026 ranking . GetCurrentRankingMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetCurrentRankingMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getCurrentRankingMaster ( ( new GetCurrentRankingMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetCurrentRankingMasterRequest ; import io.gs2.ranking.result.GetCurrentRankingMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetCurrentRankingMasterResult result = client . getCurrentRankingMaster ( new GetCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentRankingMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetCurrentRankingMasterResult \u003e asyncResult = null ; yield return client . GetCurrentRankingMaster ( new Gs2 . Gs2Ranking . Request . GetCurrentRankingMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getCurrentRankingMaster ( new Gs2Ranking . GetCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_current_ranking_master ( ranking . GetCurrentRankingMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_current_ranking_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_current_ranking_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 업데이트（3단계 버전） 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 업데이트를 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 획득합니다. 획득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentRankingMaster 에 업로드로 획득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentRankingMaster ( \u0026 ranking . PreUpdateCurrentRankingMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\PreUpdateCurrentRankingMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentRankingMaster ( ( new PreUpdateCurrentRankingMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.PreUpdateCurrentRankingMasterRequest ; import io.gs2.ranking.result.PreUpdateCurrentRankingMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { PreUpdateCurrentRankingMasterResult result = client . preUpdateCurrentRankingMaster ( new PreUpdateCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . PreUpdateCurrentRankingMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentRankingMaster ( new Gs2 . Gs2Ranking . Request . PreUpdateCurrentRankingMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . preUpdateCurrentRankingMaster ( new Gs2Ranking . PreUpdateCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . pre_update_current_ranking_master ( ranking . PreUpdateCurrentRankingMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.pre_update_current_ranking_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'ranking' ) api_result_handler = client.pre_update_current_ranking_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 업데이트 현재 활성화된 랭킹 모델의 마스터 데이터를 업데이트합니다. 대용량 마스터 데이터에 대응하기 위해, 직접 업데이트 모드와 사전 업로드 모드를 모두 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentRankingMaster 업데이트된 현재 활성화된 랭킹 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentRankingMaster ( \u0026 ranking . UpdateCurrentRankingMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-09-17\\\",\\n \\\"categoryModels\\\": [\\n {\\n \\\"name\\\": \\\"category-0001\\\",\\n \\\"orderDirection\\\": \\\"asc\\\",\\n \\\"scope\\\": \\\"global\\\",\\n \\\"uniqueByUserId\\\": false,\\n \\\"sum\\\": false,\\n \\\"calculateFixedTimingHour\\\": -1,\\n \\\"calculateFixedTimingMinute\\\": 0,\\n \\\"calculateIntervalMinutes\\\": 15,\\n \\\"additionalScopes\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"targetDays\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"targetDays\\\": 7\\n }\\n ],\\n \\\"ignoreUserIds\\\": []\\n },\\n {\\n \\\"name\\\": \\\"category-0002\\\",\\n \\\"metadata\\\": \\\"CATEGORY_0002\\\",\\n \\\"minimumValue\\\": 1000,\\n \\\"maximumValue\\\": 100000,\\n \\\"orderDirection\\\": \\\"asc\\\",\\n \\\"scope\\\": \\\"scoped\\\",\\n \\\"uniqueByUserId\\\": true,\\n \\\"sum\\\": false,\\n \\\"calculateFixedTimingHour\\\": -1,\\n \\\"calculateFixedTimingMinute\\\": 0,\\n \\\"calculateIntervalMinutes\\\": 60,\\n \\\"additionalScopes\\\": [],\\n \\\"ignoreUserIds\\\": []\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\UpdateCurrentRankingMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e updateCurrentRankingMaster ( ( new UpdateCurrentRankingMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-09-17 \\\" , \\n \\\" categoryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" category-0001 \\\" , \\n \\\" orderDirection \\\" : \\\" asc \\\" , \\n \\\" scope \\\" : \\\" global \\\" , \\n \\\" uniqueByUserId \\\" : false, \\n \\\" sum \\\" : false, \\n \\\" calculateFixedTimingHour \\\" : -1, \\n \\\" calculateFixedTimingMinute \\\" : 0, \\n \\\" calculateIntervalMinutes \\\" : 15, \\n \\\" additionalScopes \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" targetDays \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" targetDays \\\" : 7 \\n } \\n ], \\n \\\" ignoreUserIds \\\" : [] \\n }, \\n { \\n \\\" name \\\" : \\\" category-0002 \\\" , \\n \\\" metadata \\\" : \\\" CATEGORY_0002 \\\" , \\n \\\" minimumValue \\\" : 1000, \\n \\\" maximumValue \\\" : 100000, \\n \\\" orderDirection \\\" : \\\" asc \\\" , \\n \\\" scope \\\" : \\\" scoped \\\" , \\n \\\" uniqueByUserId \\\" : true, \\n \\\" sum \\\" : false, \\n \\\" calculateFixedTimingHour \\\" : -1, \\n \\\" calculateFixedTimingMinute \\\" : 0, \\n \\\" calculateIntervalMinutes \\\" : 60, \\n \\\" additionalScopes \\\" : [], \\n \\\" ignoreUserIds \\\" : [] \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.UpdateCurrentRankingMasterRequest ; import io.gs2.ranking.result.UpdateCurrentRankingMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { UpdateCurrentRankingMasterResult result = client . updateCurrentRankingMaster ( new UpdateCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-09-17\\\",\\n \\\"categoryModels\\\": [\\n {\\n \\\"name\\\": \\\"category-0001\\\",\\n \\\"orderDirection\\\": \\\"asc\\\",\\n \\\"scope\\\": \\\"global\\\",\\n \\\"uniqueByUserId\\\": false,\\n \\\"sum\\\": false,\\n \\\"calculateFixedTimingHour\\\": -1,\\n \\\"calculateFixedTimingMinute\\\": 0,\\n \\\"calculateIntervalMinutes\\\": 15,\\n \\\"additionalScopes\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"targetDays\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"targetDays\\\": 7\\n }\\n ],\\n \\\"ignoreUserIds\\\": []\\n },\\n {\\n \\\"name\\\": \\\"category-0002\\\",\\n \\\"metadata\\\": \\\"CATEGORY_0002\\\",\\n \\\"minimumValue\\\": 1000,\\n \\\"maximumValue\\\": 100000,\\n \\\"orderDirection\\\": \\\"asc\\\",\\n \\\"scope\\\": \\\"scoped\\\",\\n \\\"uniqueByUserId\\\": true,\\n \\\"sum\\\": false,\\n \\\"calculateFixedTimingHour\\\": -1,\\n \\\"calculateFixedTimingMinute\\\": 0,\\n \\\"calculateIntervalMinutes\\\": 60,\\n \\\"additionalScopes\\\": [],\\n \\\"ignoreUserIds\\\": []\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentRankingMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . UpdateCurrentRankingMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentRankingMaster ( new Gs2 . Gs2Ranking . Request . UpdateCurrentRankingMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-09-17\\\",\\n \\\"categoryModels\\\": [\\n {\\n \\\"name\\\": \\\"category-0001\\\",\\n \\\"orderDirection\\\": \\\"asc\\\",\\n \\\"scope\\\": \\\"global\\\",\\n \\\"uniqueByUserId\\\": false,\\n \\\"sum\\\": false,\\n \\\"calculateFixedTimingHour\\\": -1,\\n \\\"calculateFixedTimingMinute\\\": 0,\\n \\\"calculateIntervalMinutes\\\": 15,\\n \\\"additionalScopes\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"targetDays\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"targetDays\\\": 7\\n }\\n ],\\n \\\"ignoreUserIds\\\": []\\n },\\n {\\n \\\"name\\\": \\\"category-0002\\\",\\n \\\"metadata\\\": \\\"CATEGORY_0002\\\",\\n \\\"minimumValue\\\": 1000,\\n \\\"maximumValue\\\": 100000,\\n \\\"orderDirection\\\": \\\"asc\\\",\\n \\\"scope\\\": \\\"scoped\\\",\\n \\\"uniqueByUserId\\\": true,\\n \\\"sum\\\": false,\\n \\\"calculateFixedTimingHour\\\": -1,\\n \\\"calculateFixedTimingMinute\\\": 0,\\n \\\"calculateIntervalMinutes\\\": 60,\\n \\\"additionalScopes\\\": [],\\n \\\"ignoreUserIds\\\": []\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . updateCurrentRankingMaster ( new Gs2Ranking . UpdateCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-09-17\\\",\\n \\\"categoryModels\\\": [\\n {\\n \\\"name\\\": \\\"category-0001\\\",\\n \\\"orderDirection\\\": \\\"asc\\\",\\n \\\"scope\\\": \\\"global\\\",\\n \\\"uniqueByUserId\\\": false,\\n \\\"sum\\\": false,\\n \\\"calculateFixedTimingHour\\\": -1,\\n \\\"calculateFixedTimingMinute\\\": 0,\\n \\\"calculateIntervalMinutes\\\": 15,\\n \\\"additionalScopes\\\": [\\n {\\n \\\"name\\\": \\\"daily\\\",\\n \\\"targetDays\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"weekly\\\",\\n \\\"targetDays\\\": 7\\n }\\n ],\\n \\\"ignoreUserIds\\\": []\\n },\\n {\\n \\\"name\\\": \\\"category-0002\\\",\\n \\\"metadata\\\": \\\"CATEGORY_0002\\\",\\n \\\"minimumValue\\\": 1000,\\n \\\"maximumValue\\\": 100000,\\n \\\"orderDirection\\\": \\\"asc\\\",\\n \\\"scope\\\": \\\"scoped\\\",\\n \\\"uniqueByUserId\\\": true,\\n \\\"sum\\\": false,\\n \\\"calculateFixedTimingHour\\\": -1,\\n \\\"calculateFixedTimingMinute\\\": 0,\\n \\\"calculateIntervalMinutes\\\": 60,\\n \\\"additionalScopes\\\": [],\\n \\\"ignoreUserIds\\\": []\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . update_current_ranking_master ( ranking . UpdateCurrentRankingMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-09-17\", \\n \"categoryModels\": [ \\n { \\n \"name\": \"category-0001\", \\n \"orderDirection\": \"asc\", \\n \"scope\": \"global\", \\n \"uniqueByUserId\": false, \\n \"sum\": false, \\n \"calculateFixedTimingHour\": -1, \\n \"calculateFixedTimingMinute\": 0, \\n \"calculateIntervalMinutes\": 15, \\n \"additionalScopes\": [ \\n { \\n \"name\": \"daily\", \\n \"targetDays\": 1 \\n }, \\n { \\n \"name\": \"weekly\", \\n \"targetDays\": 7 \\n } \\n ], \\n \"ignoreUserIds\": [] \\n }, \\n { \\n \"name\": \"category-0002\", \\n \"metadata\": \"CATEGORY_0002\", \\n \"minimumValue\": 1000, \\n \"maximumValue\": 100000, \\n \"orderDirection\": \"asc\", \\n \"scope\": \"scoped\", \\n \"uniqueByUserId\": true, \\n \"sum\": false, \\n \"calculateFixedTimingHour\": -1, \\n \"calculateFixedTimingMinute\": 0, \\n \"calculateIntervalMinutes\": 60, \\n \"additionalScopes\": [], \\n \"ignoreUserIds\": [] \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.update_current_ranking_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-09-17 \\\" , \\n \\\" categoryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" category-0001 \\\" , \\n \\\" orderDirection \\\" : \\\" asc \\\" , \\n \\\" scope \\\" : \\\" global \\\" , \\n \\\" uniqueByUserId \\\" : false, \\n \\\" sum \\\" : false, \\n \\\" calculateFixedTimingHour \\\" : -1, \\n \\\" calculateFixedTimingMinute \\\" : 0, \\n \\\" calculateIntervalMinutes \\\" : 15, \\n \\\" additionalScopes \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" targetDays \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" targetDays \\\" : 7 \\n } \\n ], \\n \\\" ignoreUserIds \\\" : [] \\n }, \\n { \\n \\\" name \\\" : \\\" category-0002 \\\" , \\n \\\" metadata \\\" : \\\" CATEGORY_0002 \\\" , \\n \\\" minimumValue \\\" : 1000, \\n \\\" maximumValue \\\" : 100000, \\n \\\" orderDirection \\\" : \\\" asc \\\" , \\n \\\" scope \\\" : \\\" scoped \\\" , \\n \\\" uniqueByUserId \\\" : true, \\n \\\" sum \\\" : false, \\n \\\" calculateFixedTimingHour \\\" : -1, \\n \\\" calculateFixedTimingMinute \\\" : 0, \\n \\\" calculateIntervalMinutes \\\" : 60, \\n \\\" additionalScopes \\\" : [], \\n \\\" ignoreUserIds \\\" : [] \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.update_current_ranking_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-09-17 \\\" , \\n \\\" categoryModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" category-0001 \\\" , \\n \\\" orderDirection \\\" : \\\" asc \\\" , \\n \\\" scope \\\" : \\\" global \\\" , \\n \\\" uniqueByUserId \\\" : false, \\n \\\" sum \\\" : false, \\n \\\" calculateFixedTimingHour \\\" : -1, \\n \\\" calculateFixedTimingMinute \\\" : 0, \\n \\\" calculateIntervalMinutes \\\" : 15, \\n \\\" additionalScopes \\\" : [ \\n { \\n \\\" name \\\" : \\\" daily \\\" , \\n \\\" targetDays \\\" : 1 \\n }, \\n { \\n \\\" name \\\" : \\\" weekly \\\" , \\n \\\" targetDays \\\" : 7 \\n } \\n ], \\n \\\" ignoreUserIds \\\" : [] \\n }, \\n { \\n \\\" name \\\" : \\\" category-0002 \\\" , \\n \\\" metadata \\\" : \\\" CATEGORY_0002 \\\" , \\n \\\" minimumValue \\\" : 1000, \\n \\\" maximumValue \\\" : 100000, \\n \\\" orderDirection \\\" : \\\" asc \\\" , \\n \\\" scope \\\" : \\\" scoped \\\" , \\n \\\" uniqueByUserId \\\" : true, \\n \\\" sum \\\" : false, \\n \\\" calculateFixedTimingHour \\\" : -1, \\n \\\" calculateFixedTimingMinute \\\" : 0, \\n \\\" calculateIntervalMinutes \\\" : 60, \\n \\\" additionalScopes \\\" : [], \\n \\\" ignoreUserIds \\\" : [] \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentRankingMasterFromGitHub 현재 활성화된 랭킹 모델의 마스터 데이터를 GitHub에서 업데이트 지정된 체크아웃 설정을 사용하여 GitHub 리포지토리에서 마스터 데이터를 체크아웃하고, 현재 활성화된 랭킹 모델의 마스터 데이터를 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentRankingMaster 업데이트된 현재 활성화된 랭킹 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentRankingMasterFromGitHub ( \u0026 ranking . UpdateCurrentRankingMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 ranking . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\UpdateCurrentRankingMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e updateCurrentRankingMasterFromGitHub ( ( new UpdateCurrentRankingMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.UpdateCurrentRankingMasterFromGitHubRequest ; import io.gs2.ranking.result.UpdateCurrentRankingMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { UpdateCurrentRankingMasterFromGitHubResult result = client . updateCurrentRankingMasterFromGitHub ( new UpdateCurrentRankingMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentRankingMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . UpdateCurrentRankingMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentRankingMasterFromGitHub ( new Gs2 . Gs2Ranking . Request . UpdateCurrentRankingMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Ranking . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . updateCurrentRankingMasterFromGitHub ( new Gs2Ranking . UpdateCurrentRankingMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Ranking . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . update_current_ranking_master_from_git_hub ( ranking . UpdateCurrentRankingMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( ranking . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.update_current_ranking_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.update_current_ranking_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCategoryModelMasters 카테고리 모델 마스터 목록 취득 카테고리 모델 마스터의 페이지네이션 목록을 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 카테고리 모델명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 카테고리 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DescribeCategoryModelMasters ( \u0026 ranking . DescribeCategoryModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DescribeCategoryModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e describeCategoryModelMasters ( ( new DescribeCategoryModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DescribeCategoryModelMastersRequest ; import io.gs2.ranking.result.DescribeCategoryModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DescribeCategoryModelMastersResult result = client . describeCategoryModelMasters ( new DescribeCategoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List CategoryModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DescribeCategoryModelMastersResult \u003e asyncResult = null ; yield return client . DescribeCategoryModelMasters ( new Gs2 . Gs2Ranking . Request . DescribeCategoryModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . describeCategoryModelMasters ( new Gs2Ranking . DescribeCategoryModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . describe_category_model_masters ( ranking . DescribeCategoryModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.describe_category_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking' ) api_result_handler = client.describe_category_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createCategoryModelMaster 카테고리 모델 마스터 신규 작성 스코어 범위, 정렬 순서, 스코프 타입, 글로벌 랭킹 설정, 엔트리/액세스 기간 이벤트 설정을 가진 새로운 카테고리 모델 마스터를 작성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 점수 최솟값 이 카테고리에 등록할 수 있는 점수의 최솟값입니다. 이 임곗값보다 낮은 점수는 등록 시 거부됩니다. 설정하지 않으면 하한이 없습니다. maximumValue long 0 ~ 9223372036854775805 점수 최댓값 이 카테고리에 등록할 수 있는 점수의 최댓값입니다. 이 임곗값보다 높은 점수는 등록 시 거부됩니다. 설정하지 않으면 상한이 없습니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 집계의 정렬 순서를 결정합니다. “asc”(오름차순)는 낮은 점수를 상위로 하며, 시간 기반이나 골프식 랭킹에 적합합니다. “desc”(내림차순)는 높은 점수를 상위로 하며, 포인트 기반이나 하이스코어 랭킹에 적합합니다. 정의 설명 asc 오름차순 desc 내림차순 scope 문자열 열거형 enum {   “global”,   “scoped” }  랭킹 종류 이 카테고리의 랭킹 타입입니다. “global” 은 모든 플레이어가 공유하는 단일 리더보드를 만들며, 설정된 간격으로 배치 집계됩니다. “scoped” 는 구독한 플레이어(친구나 길드 멤버 등)를 기반으로 한 사용자별 리더보드를 만들며, 점수가 실시간으로 반영됩니다. 정의 설명 global 글로벌 scoped 스코프 globalRankingSetting GlobalRankingSetting {scope} == “global” ※ 글로벌 랭킹 설정 글로벌 랭킹 모드 전용 설정입니다. 집계 간격, 고정 시각, 점수의 유니크 여부, 세대 관리, 추가 기간 한정 스코프를 포함합니다. scope 가 “global” 로 설정된 경우에만 적용됩니다. ※ scope이(가) “global” 이면 필수 entryPeriodEventId string ~ 1024자 점수 등록 기간 이벤트 ID 점수 등록을 받는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 점수 등록 요청은 거부됩니다. 설정하지 않으면 점수는 언제든지 등록할 수 있습니다. accessPeriodEventId string ~ 1024자 접근 기간 이벤트 ID 랭킹 데이터를 열람할 수 있는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 랭킹 조회 요청은 거부됩니다. 설정하지 않으면 랭킹은 언제든지 접근할 수 있습니다. sum bool false 합산 모드 활성화하면 새로 등록된 점수가 기존 점수를 대체하는 것이 아니라 합계에 더해집니다. 랭킹은 누적된 합계값을 기준으로 계산됩니다. 비활성화된 경우 각 점수 등록은 독립된 항목으로 처리됩니다. Result 타입 설명 item CategoryModelMaster 작성한 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . CreateCategoryModelMaster ( \u0026 ranking . CreateCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"category-0001\" ), Description : nil , Metadata : nil , MinimumValue : nil , MaximumValue : nil , OrderDirection : pointy . String ( \"asc\" ), Scope : pointy . String ( \"global\" ), GlobalRankingSetting : \u0026 ranking . GlobalRankingSetting { CalculateIntervalMinutes : pointy . Int32 ( 15 ), UniqueByUserId : pointy . Bool ( false ), AdditionalScopes : [] ranking . Scope { ranking . Scope { Name : pointy . String ( \"daily\" ), TargetDays : pointy . Int64 ( 1 ), }, ranking . Scope { Name : pointy . String ( \"weekly\" ), TargetDays : pointy . Int64 ( 7 ), }, }, }, EntryPeriodEventId : nil , AccessPeriodEventId : nil , Sum : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\CreateCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e createCategoryModelMaster ( ( new CreateCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"category-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withMinimumValue ( null ) -\u003e withMaximumValue ( null ) -\u003e withOrderDirection ( \"asc\" ) -\u003e withScope ( \"global\" ) -\u003e withGlobalRankingSetting (( new \\Gs2\\Ranking\\Model\\GlobalRankingSetting ()) -\u003e withCalculateIntervalMinutes ( 15 ) -\u003e withUniqueByUserId ( false ) -\u003e withAdditionalScopes ([ ( new \\Gs2\\Ranking\\Model\\Scope ()) -\u003e withName ( \"daily\" ) -\u003e withTargetDays ( 1 ), ( new \\Gs2\\Ranking\\Model\\Scope ()) -\u003e withName ( \"weekly\" ) -\u003e withTargetDays ( 7 ), ])) -\u003e withEntryPeriodEventId ( null ) -\u003e withAccessPeriodEventId ( null ) -\u003e withSum ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.CreateCategoryModelMasterRequest ; import io.gs2.ranking.result.CreateCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { CreateCategoryModelMasterResult result = client . createCategoryModelMaster ( new CreateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"category-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMinimumValue ( null ) . withMaximumValue ( null ) . withOrderDirection ( \"asc\" ) . withScope ( \"global\" ) . withGlobalRankingSetting ( new io . gs2 . ranking . model . GlobalRankingSetting () . withCalculateIntervalMinutes ( 15 ) . withUniqueByUserId ( false ) . withAdditionalScopes ( Arrays . asList ( new io . gs2 . ranking . model . Scope () . withName ( \"daily\" ) . withTargetDays ( 1L ), new io . gs2 . ranking . model . Scope () . withName ( \"weekly\" ) . withTargetDays ( 7L ) ))) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) . withSum ( null ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . CreateCategoryModelMasterResult \u003e asyncResult = null ; yield return client . CreateCategoryModelMaster ( new Gs2 . Gs2Ranking . Request . CreateCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"category-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithMinimumValue ( null ) . WithMaximumValue ( null ) . WithOrderDirection ( \"asc\" ) . WithScope ( \"global\" ) . WithGlobalRankingSetting ( new Gs2 . Gs2Ranking . Model . GlobalRankingSetting () . WithCalculateIntervalMinutes ( 15 ) . WithUniqueByUserId ( false ) . WithAdditionalScopes ( new Gs2 . Gs2Ranking . Model . Scope [] { new Gs2 . Gs2Ranking . Model . Scope () . WithName ( \"daily\" ) . WithTargetDays ( 1L ), new Gs2 . Gs2Ranking . Model . Scope () . WithName ( \"weekly\" ) . WithTargetDays ( 7L ), })) . WithEntryPeriodEventId ( null ) . WithAccessPeriodEventId ( null ) . WithSum ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . createCategoryModelMaster ( new Gs2Ranking . CreateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"category-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMinimumValue ( null ) . withMaximumValue ( null ) . withOrderDirection ( \"asc\" ) . withScope ( \"global\" ) . withGlobalRankingSetting ( new Gs2Ranking . model . GlobalRankingSetting () . withCalculateIntervalMinutes ( 15 ) . withUniqueByUserId ( false ) . withAdditionalScopes ([ new Gs2Ranking . model . Scope () . withName ( \"daily\" ) . withTargetDays ( 1 ), new Gs2Ranking . model . Scope () . withName ( \"weekly\" ) . withTargetDays ( 7 ), ])) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) . withSum ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . create_category_model_master ( ranking . CreateCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'category-0001' ) . with_description ( None ) . with_metadata ( None ) . with_minimum_value ( None ) . with_maximum_value ( None ) . with_order_direction ( 'asc' ) . with_scope ( 'global' ) . with_global_ranking_setting ( ranking . GlobalRankingSetting () . with_calculate_interval_minutes ( 15 ) . with_unique_by_user_id ( False ) . with_additional_scopes ([ ranking . Scope () . with_name ( 'daily' ) . with_target_days ( 1 ), ranking . Scope () . with_name ( 'weekly' ) . with_target_days ( 7 ), ])) . with_entry_period_event_id ( None ) . with_access_period_event_id ( None ) . with_sum ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.create_category_model_master ({ namespaceName = \"namespace-0001\" , name = \"category-0001\" , description = nil , metadata = nil , minimumValue = nil , maximumValue = nil , orderDirection = \"asc\" , scope = \"global\" , globalRankingSetting = { calculateIntervalMinutes = 15 , uniqueByUserId = false , additionalScopes = { { name = \"daily\" , targetDays = 1 , }, { name = \"weekly\" , targetDays = 7 , } }, }, entryPeriodEventId = nil , accessPeriodEventId = nil , sum = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.create_category_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"category-0001\" , description = nil , metadata = nil , minimumValue = nil , maximumValue = nil , orderDirection = \"asc\" , scope = \"global\" , globalRankingSetting = { calculateIntervalMinutes = 15 , uniqueByUserId = false , additionalScopes = { { name = \"daily\" , targetDays = 1 , }, { name = \"weekly\" , targetDays = 7 , } }, }, entryPeriodEventId = nil , accessPeriodEventId = nil , sum = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCategoryModelMaster 카테고리 모델 마스터 취득 지정된 카테고리 모델 마스터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CategoryModelMaster 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . GetCategoryModelMaster ( \u0026 ranking . GetCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\GetCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e getCategoryModelMaster ( ( new GetCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.GetCategoryModelMasterRequest ; import io.gs2.ranking.result.GetCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { GetCategoryModelMasterResult result = client . getCategoryModelMaster ( new GetCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . GetCategoryModelMasterResult \u003e asyncResult = null ; yield return client . GetCategoryModelMaster ( new Gs2 . Gs2Ranking . Request . GetCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . getCategoryModelMaster ( new Gs2Ranking . GetCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . get_category_model_master ( ranking . GetCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.get_category_model_master ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.get_category_model_master_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCategoryModelMaster 카테고리 모델 마스터 갱신 지정된 카테고리 모델 마스터의 스코어 범위, 정렬 순서, 스코프 타입, 글로벌 랭킹 설정, 엔트리/액세스 기간 이벤트 설정을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 점수 최솟값 이 카테고리에 등록할 수 있는 점수의 최솟값입니다. 이 임곗값보다 낮은 점수는 등록 시 거부됩니다. 설정하지 않으면 하한이 없습니다. maximumValue long 0 ~ 9223372036854775805 점수 최댓값 이 카테고리에 등록할 수 있는 점수의 최댓값입니다. 이 임곗값보다 높은 점수는 등록 시 거부됩니다. 설정하지 않으면 상한이 없습니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 집계의 정렬 순서를 결정합니다. “asc”(오름차순)는 낮은 점수를 상위로 하며, 시간 기반이나 골프식 랭킹에 적합합니다. “desc”(내림차순)는 높은 점수를 상위로 하며, 포인트 기반이나 하이스코어 랭킹에 적합합니다. 정의 설명 asc 오름차순 desc 내림차순 scope 문자열 열거형 enum {   “global”,   “scoped” }  랭킹 종류 이 카테고리의 랭킹 타입입니다. “global” 은 모든 플레이어가 공유하는 단일 리더보드를 만들며, 설정된 간격으로 배치 집계됩니다. “scoped” 는 구독한 플레이어(친구나 길드 멤버 등)를 기반으로 한 사용자별 리더보드를 만들며, 점수가 실시간으로 반영됩니다. 정의 설명 global 글로벌 scoped 스코프 globalRankingSetting GlobalRankingSetting {scope} == “global” ※ 글로벌 랭킹 설정 글로벌 랭킹 모드 전용 설정입니다. 집계 간격, 고정 시각, 점수의 유니크 여부, 세대 관리, 추가 기간 한정 스코프를 포함합니다. scope 가 “global” 로 설정된 경우에만 적용됩니다. ※ scope이(가) “global” 이면 필수 entryPeriodEventId string ~ 1024자 점수 등록 기간 이벤트 ID 점수 등록을 받는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 점수 등록 요청은 거부됩니다. 설정하지 않으면 점수는 언제든지 등록할 수 있습니다. accessPeriodEventId string ~ 1024자 접근 기간 이벤트 ID 랭킹 데이터를 열람할 수 있는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 랭킹 조회 요청은 거부됩니다. 설정하지 않으면 랭킹은 언제든지 접근할 수 있습니다. sum bool false 합산 모드 활성화하면 새로 등록된 점수가 기존 점수를 대체하는 것이 아니라 합계에 더해집니다. 랭킹은 누적된 합계값을 기준으로 계산됩니다. 비활성화된 경우 각 점수 등록은 독립된 항목으로 처리됩니다. Result 타입 설명 item CategoryModelMaster 갱신한 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . UpdateCategoryModelMaster ( \u0026 ranking . UpdateCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"CATEGORY_0001\" ), MinimumValue : pointy . Int64 ( 100 ), MaximumValue : pointy . Int64 ( 10000 ), OrderDirection : pointy . String ( \"desc\" ), Scope : pointy . String ( \"global\" ), GlobalRankingSetting : \u0026 ranking . GlobalRankingSetting { CalculateIntervalMinutes : pointy . Int32 ( 15 ), UniqueByUserId : pointy . Bool ( true ), AdditionalScopes : [] ranking . Scope { ranking . Scope { Name : pointy . String ( \"weekly\" ), TargetDays : pointy . Int64 ( 7 ), }, ranking . Scope { Name : pointy . String ( \"monthly\" ), TargetDays : pointy . Int64 ( 30 ), }, }, }, EntryPeriodEventId : nil , AccessPeriodEventId : nil , Sum : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\UpdateCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e updateCategoryModelMaster ( ( new UpdateCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"CATEGORY_0001\" ) -\u003e withMinimumValue ( 100 ) -\u003e withMaximumValue ( 10000 ) -\u003e withOrderDirection ( \"desc\" ) -\u003e withScope ( \"global\" ) -\u003e withGlobalRankingSetting (( new \\Gs2\\Ranking\\Model\\GlobalRankingSetting ()) -\u003e withCalculateIntervalMinutes ( 15 ) -\u003e withUniqueByUserId ( true ) -\u003e withAdditionalScopes ([ ( new \\Gs2\\Ranking\\Model\\Scope ()) -\u003e withName ( \"weekly\" ) -\u003e withTargetDays ( 7 ), ( new \\Gs2\\Ranking\\Model\\Scope ()) -\u003e withName ( \"monthly\" ) -\u003e withTargetDays ( 30 ), ])) -\u003e withEntryPeriodEventId ( null ) -\u003e withAccessPeriodEventId ( null ) -\u003e withSum ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.UpdateCategoryModelMasterRequest ; import io.gs2.ranking.result.UpdateCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { UpdateCategoryModelMasterResult result = client . updateCategoryModelMaster ( new UpdateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"CATEGORY_0001\" ) . withMinimumValue ( 100L ) . withMaximumValue ( 10000L ) . withOrderDirection ( \"desc\" ) . withScope ( \"global\" ) . withGlobalRankingSetting ( new io . gs2 . ranking . model . GlobalRankingSetting () . withCalculateIntervalMinutes ( 15 ) . withUniqueByUserId ( true ) . withAdditionalScopes ( Arrays . asList ( new io . gs2 . ranking . model . Scope () . withName ( \"weekly\" ) . withTargetDays ( 7L ), new io . gs2 . ranking . model . Scope () . withName ( \"monthly\" ) . withTargetDays ( 30L ) ))) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) . withSum ( null ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . UpdateCategoryModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCategoryModelMaster ( new Gs2 . Gs2Ranking . Request . UpdateCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"CATEGORY_0001\" ) . WithMinimumValue ( 100L ) . WithMaximumValue ( 10000L ) . WithOrderDirection ( \"desc\" ) . WithScope ( \"global\" ) . WithGlobalRankingSetting ( new Gs2 . Gs2Ranking . Model . GlobalRankingSetting () . WithCalculateIntervalMinutes ( 15 ) . WithUniqueByUserId ( true ) . WithAdditionalScopes ( new Gs2 . Gs2Ranking . Model . Scope [] { new Gs2 . Gs2Ranking . Model . Scope () . WithName ( \"weekly\" ) . WithTargetDays ( 7L ), new Gs2 . Gs2Ranking . Model . Scope () . WithName ( \"monthly\" ) . WithTargetDays ( 30L ), })) . WithEntryPeriodEventId ( null ) . WithAccessPeriodEventId ( null ) . WithSum ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . updateCategoryModelMaster ( new Gs2Ranking . UpdateCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"CATEGORY_0001\" ) . withMinimumValue ( 100 ) . withMaximumValue ( 10000 ) . withOrderDirection ( \"desc\" ) . withScope ( \"global\" ) . withGlobalRankingSetting ( new Gs2Ranking . model . GlobalRankingSetting () . withCalculateIntervalMinutes ( 15 ) . withUniqueByUserId ( true ) . withAdditionalScopes ([ new Gs2Ranking . model . Scope () . withName ( \"weekly\" ) . withTargetDays ( 7 ), new Gs2Ranking . model . Scope () . withName ( \"monthly\" ) . withTargetDays ( 30 ), ])) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) . withSum ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . update_category_model_master ( ranking . UpdateCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) . with_description ( 'description1' ) . with_metadata ( 'CATEGORY_0001' ) . with_minimum_value ( 100 ) . with_maximum_value ( 10000 ) . with_order_direction ( 'desc' ) . with_scope ( 'global' ) . with_global_ranking_setting ( ranking . GlobalRankingSetting () . with_calculate_interval_minutes ( 15 ) . with_unique_by_user_id ( True ) . with_additional_scopes ([ ranking . Scope () . with_name ( 'weekly' ) . with_target_days ( 7 ), ranking . Scope () . with_name ( 'monthly' ) . with_target_days ( 30 ), ])) . with_entry_period_event_id ( None ) . with_access_period_event_id ( None ) . with_sum ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.update_category_model_master ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , description = \"description1\" , metadata = \"CATEGORY_0001\" , minimumValue = 100 , maximumValue = 10000 , orderDirection = \"desc\" , scope = \"global\" , globalRankingSetting = { calculateIntervalMinutes = 15 , uniqueByUserId = true , additionalScopes = { { name = \"weekly\" , targetDays = 7 , }, { name = \"monthly\" , targetDays = 30 , } }, }, entryPeriodEventId = nil , accessPeriodEventId = nil , sum = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.update_category_model_master_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , description = \"description1\" , metadata = \"CATEGORY_0001\" , minimumValue = 100 , maximumValue = 10000 , orderDirection = \"desc\" , scope = \"global\" , globalRankingSetting = { calculateIntervalMinutes = 15 , uniqueByUserId = true , additionalScopes = { { name = \"weekly\" , targetDays = 7 , }, { name = \"monthly\" , targetDays = 30 , } }, }, entryPeriodEventId = nil , accessPeriodEventId = nil , sum = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCategoryModelMaster 카테고리 모델 마스터 삭제 지정된 카테고리 모델 마스터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. categoryName string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CategoryModelMaster 삭제한 카테고리 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking . Gs2RankingRestClient { Session : \u0026 session , } result , err := client . DeleteCategoryModelMaster ( \u0026 ranking . DeleteCategoryModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CategoryName : pointy . String ( \"category-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking\\Gs2RankingRestClient ; use Gs2\\Ranking\\Request\\DeleteCategoryModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RankingRestClient ( $session ); try { $result = $client -\u003e deleteCategoryModelMaster ( ( new DeleteCategoryModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCategoryName ( \"category-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking.rest.Gs2RankingRestClient ; import io.gs2.ranking.request.DeleteCategoryModelMasterRequest ; import io.gs2.ranking.result.DeleteCategoryModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RankingRestClient client = new Gs2RankingRestClient ( session ); try { DeleteCategoryModelMasterResult result = client . deleteCategoryModelMaster ( new DeleteCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) ); CategoryModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RankingRestClient ( session ); AsyncResult Gs2 . Gs2Ranking . Result . DeleteCategoryModelMasterResult \u003e asyncResult = null ; yield return client . DeleteCategoryModelMaster ( new Gs2 . Gs2Ranking . Request . DeleteCategoryModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCategoryName ( \"category-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking from '@/gs2/ranking' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking . Gs2RankingRestClient ( session ); try { const result = await client . deleteCategoryModelMaster ( new Gs2Ranking . DeleteCategoryModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCategoryName ( \"category-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking . Gs2RankingRestClient ( session ) try : result = client . delete_category_model_master ( ranking . DeleteCategoryModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_category_name ( 'category-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking' ) api_result = client.delete_category_model_master ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking' ) api_result_handler = client.delete_category_model_master_async ({ namespaceName = \"namespace-0001\" , categoryName = \"category-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Ranking SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Ranking SDK API 레퍼런스","url":"/ko/api_reference/ranking/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 랭킹 보상 지급에 사용되는 분산 트랜잭션 설정입니다. 입수 액션을 자동으로 실행하는 오토런, 전체의 성패를 보장하는 아토믹 커밋을 지원합니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 점수 등록이나 랭킹 보상 배포 추적에 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 GlobalRankingScore 글로벌 랭킹 스코어 특정 시즌의 글로벌 랭킹에서 사용자의 등록 스코어를 저장합니다. 합산 모드가 활성화된 경우, 여러 개의 등록 스코어가 누적됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 globalRankingScoreId string ※ ~ 1024자 글로벌 랭킹 스코어 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. 새로운 랭킹 기간마다 증가합니다. score long  0 ~ 9223372036854775805 스코어 사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 GlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 글로벌 랭킹의 순위에 대해 보상을 설정할 수 있습니다. 보상을 설정하려면 순위 임계값과 보상 내용을 설정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 globalRankingReceivedRewardId string ※ ~ 1024자 글로벌 랭킹 보상 수령 이력 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. 새로운 랭킹 기간마다 증가합니다. receivedAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 GlobalRankingData 글로벌 랭킹 특정 시즌의 글로벌 랭킹에서의 랭킹 엔트리를 나타냅니다. 사용자의 스코어, 0부터 시작하는 인덱스(정렬 위치), 1부터 시작하는 순위(동점을 고려)를 포함합니다. 순위는 인덱스 + 1로 계산됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 globalRankingDataId string ※ ~ 1024자 글로벌 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. 새로운 랭킹 기간마다 증가합니다. userId string  ~ 128자 사용자ID index int 0 ~ 2147483646 인덱스 랭킹 내 이 엔트리의 0부터 시작하는 고유한 정렬 위치입니다. 순위와 달리, 스코어가 동점이어도 인덱스는 항상 고유합니다. 인덱스 기반 보상 계산에 사용됩니다. rank int 0 ~ 2147483646 순위 1부터 시작하는 랭킹 순위입니다. 스코어가 같은 플레이어는 동일한 순위를 공유합니다. 인덱스 + 1로 계산됩니다. 순위 기반 보상 계산에 사용됩니다. score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. invertUpdatedAt long  0 ~ 9223372036854775805 updatedAt의 반전 값(정렬용 내부 값) createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ClusterRankingScore 클러스터 랭킹 스코어 특정 시즌·클러스터에서의 사용자 등록 스코어를 저장합니다. 스코어 접수 전에 클러스터 타입 설정에 따라 사용자의 클러스터 소속이 검증됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 clusterRankingScoreId string ※ ~ 1024자 클러스터 랭킹 스코어 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 이 클러스터 내에서 사용자가 등록한 스코어 값입니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 클러스터 랭킹 순위에 따른 보상을 설정할 수 있습니다. 보상을 설정하려면 순위 임계값과 보상 내용을 설정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 clusterRankingReceivedRewardId string ※ ~ 1024자 클러스터 랭킹 보상 수령 이력 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID receivedAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ClusterRankingData 클러스터 랭킹 특정 시즌·클러스터에서의 클러스터 랭킹의 랭킹 엔트리를 나타냅니다. 클러스터 내 사용자의 스코어, 0부터 시작하는 인덱스, 1부터 시작하는 순위를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 clusterRankingDataId string ※ ~ 1024자 클러스터 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 시즌이 속한 클러스터(길드, 게더링, 또는 그룹)의 이름입니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID index int 0 ~ 2147483646 인덱스 클러스터 랭킹 내에서 0부터 시작하는 고유한 정렬 위치입니다. 스코어가 동점이어도 항상 고유합니다. rank int 0 ~ 2147483646 순위 클러스터 내에서 1부터 시작하는 랭킹 순위입니다. 스코어가 같은 플레이어는 동일한 순위를 공유합니다. 인덱스 + 1로 계산됩니다. score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. invertUpdatedAt long  0 ~ 9223372036854775805 updatedAt의 반전 값(정렬용 내부 값) createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Subscribe 구독 다른 플레이어를 구독 대상으로 등록하면, 해당 플레이어의 최신 스코어를 자신의 랭킹 보드에 반영할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeId string ※ ~ 1024자 스코어 구독 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserIds List [] 0 ~ 1000 items 구독 대상 사용자 ID 이 사용자가 구독하고 있는 사용자 ID 목록입니다. 구독 대상 사용자의 스코어가 이 사용자의 구독 랭킹에 표시됩니다. 최대 1000명까지 구독할 수 있으며, 중복 구독은 방지됩니다. fromUserIds List [] 0 ~ 1000 items 피구독 사용자 ID 이 사용자를 구독하고 있는 사용자 ID 목록입니다. targetUserIds의 역방향 관계로, 어떤 사용자가 이 사용자의 스코어를 팔로우하고 있는지를 추적합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SubscribeRankingScore 구독 랭킹 스코어 특정 시즌의 구독 랭킹에서 사용자가 등록한 점수를 저장합니다. 이 점수는 이 사용자를 구독하고 있는 사용자에게 표시되어 맞춤형 친구 랭킹을 구성합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeRankingScoreId string ※ ~ 1024자 구독 랭킹 스코어 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SubscribeRankingData 구독 랭킹 특정 시즌의 사용자별 맞춤 구독 랭킹에서의 랭킹 엔트리를 나타냅니다. 구독한 사용자의 점수를 포함하며, 친구 목록 내에서 순위가 매겨집니다. 각 엔트리에는 점수를 달성한 사용자ID가 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeRankingDataId string ※ ~ 1024자 구독 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. userId string  ~ 128자 사용자ID index int 0 ~ 2147483646 인덱스 구독 랭킹 내에서 0부터 시작하는 고유한 정렬 위치입니다. rank int 0 ~ 2147483646 순위 구독 랭킹 내에서 1부터 시작하는 랭킹 순위입니다. 인덱스 + 1로 계산됩니다. scorerUserId string  ~ 128자 점수를 획득한 사용자ID 이 점수를 달성한 플레이어의 사용자ID입니다. 구독 랭킹에서는 구독한 사용자의 점수가 엔트리가 되므로, 이 필드는 어느 친구의 점수인지를 식별합니다. score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. invertUpdatedAt long  0 ~ 9223372036854775805 updatedAt의 반전 값(정렬용 내부 값) createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SubscribeUser 구독 대상 사용자 정보 구독 랭킹에서 두 사용자 간의 구독 관계를 나타냅니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독 대상 사용자 ID 구독 대상 플레이어의 사용자 ID입니다. 이 플레이어의 스코어가 구독자의 개인화된 랭킹에 포함됩니다. GlobalRankingModel 글로벌 랭킹 모델 글로벌 랭킹은 모든 플레이어를 대상으로 한 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연결하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 globalRankingModelId string ※ ~ 1024자 글로벌 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 스코어 최솟값 허용되는 스코어의 최솟값입니다. 이 값보다 낮은 스코어는 등록 시 거부됩니다. 유효하지 않거나 의도하지 않은 스코어 값을 필터링하는 데 사용합니다. maximumValue long 0 ~ 9223372036854775805 스코어 최댓값 허용되는 스코어의 최댓값입니다. 이 값을 초과하는 스코어는 등록 시 거부됩니다. 비정상적으로 높은 스코어의 등록을 방지하는 데 사용합니다. sum bool false 스코어 합산 활성화하면 등록된 모든 스코어가 합산되어 합계 값으로 랭킹이 결정됩니다. 비활성화된 경우, 정렬 방향에 따른 최적의 스코어(최댓값 또는 최솟값)만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 스코어의 정렬 방향입니다. 낮은 스코어일수록 상위인 경우(예: 타임어택)에는 “오름차순\"을, 높은 스코어일수록 상위인 경우(예: 하이스코어)에는 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 반복 사이클마다 랭킹이 초기화되어 시즌제 랭킹을 구현할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. 각 보상은 순위 임계값과 실행할 입수 액션을 정의합니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 일반적으로 스코어 등록 기간 사이의 간격으로 설정합니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위를 사용하며(동점 스코어의 플레이어는 동일한 순위를 공유), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치를 사용합니다(동일 순위 없음). 일반적인 사용 사례에서는 “순위 기반\"을 선택하시기 바랍니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 ClusterRankingModel 클러스터 랭킹 모델 클러스터 랭킹은 길드나 게더링 내의 플레이어를 대상으로 하는 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연동하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 clusterRankingModelId string ※ ~ 1024자 클러스터 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. clusterType 문자열 열거형 enum {   “Raw”,   “Gs2Guild::Guild”,   “Gs2Matchmaking::SeasonGathering” }  클러스터 타입 랭킹의 세그멘테이션에 사용하는 그룹(클러스터)의 종류를 정의합니다. “Raw\"는 소속 검증 없이 임의의 클러스터 이름을 지정할 수 있으며, “Gs2Guild::Guild\"는 GS2-Guild 길드에 대한 소속을 검증하고, “Gs2Matchmaking::SeasonGathering\"은 GS2-Matchmaking 시즌 개더링에 대한 소속을 검증합니다. 정의 설명 Raw 검증 없음 Gs2Guild::Guild GS2-Guild 길드 Gs2Matchmaking::SeasonGathering GS2-Matchmaking 시즌 개더링 minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위(동점 스코어는 동일 순위), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치(동일 순위 없음)를 사용합니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 SubscribeRankingModel 구독 랭킹 모델 구독한 다른 플레이어의 점수를 집계하여 랭킹을 작성하는 모델입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeRankingModelId string ※ ~ 1024자 구독 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과를 열람할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. RankingReward 랭킹 보상 점수 등록 기간이 설정된 랭킹에서, 등록 기간 외 참조 기간 내에 받을 수 있는 보상을 설정합니다. 반복 설정이 유효한 경우, 가장 최근에 종료된 기간의 랭킹이 보상 수령 대상이 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 thresholdRank int  1 ~ 1001 순위 임계값 이 보상 티어의 순위 임계값입니다. 순위(또는 인덱스, rewardCalculationIndex 설정에 따라 다름)가 이 임계값 이상인 플레이어가 이 보상을 받습니다. 1001로 설정하면 랭크 외(상위 1000위 밖) 플레이어를 위한 보상을 정의할 수 있습니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. acquireActions List [] 0 ~ 100 items 입수 액션 리스트 플레이어가 이 랭킹 보상을 수령할 때 실행되는 입수 액션의 목록입니다. 이 순위 임계값을 달성한 보상으로 지급되는 아이템, 화폐, 기타 리소스를 정의합니다. VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 CurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 랭킹 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 제작하여 적절한 형식의 JSON 파일을 출력하는 방법으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Ranking2 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 GlobalRankingModelMaster 글로벌 랭킹 모델 마스터 글로벌 랭킹 모델 마스터는 게임 내에서 사용되는 글로벌 랭킹 모델의 편집·관리용 데이터로, 관리 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 글로벌 랭킹 모델로 반영됩니다. 글로벌 랭킹 모델은 모든 플레이어를 대상으로 하는 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연동하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 globalRankingModelId string ※ ~ 1024자 글로벌 랭킹 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 스코어 최솟값 허용되는 스코어의 최솟값입니다. 이 값보다 낮은 스코어는 등록 시 거부됩니다. 유효하지 않거나 의도하지 않은 스코어 값을 필터링하는 데 사용합니다. maximumValue long 0 ~ 9223372036854775805 스코어 최댓값 허용되는 스코어의 최댓값입니다. 이 값을 초과하는 스코어는 등록 시 거부됩니다. 비정상적으로 높은 스코어의 등록을 방지하는 데 사용합니다. sum bool false 스코어 합산 활성화하면 등록된 모든 스코어가 합산되어 합계 값으로 랭킹이 결정됩니다. 비활성화된 경우, 정렬 방향에 따른 최적의 스코어(최댓값 또는 최솟값)만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 스코어의 정렬 방향입니다. 낮은 스코어일수록 상위인 경우(예: 타임어택)에는 “오름차순\"을, 높은 스코어일수록 상위인 경우(예: 하이스코어)에는 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 반복 사이클마다 랭킹이 초기화되어 시즌제 랭킹을 구현할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. 각 보상은 순위 임계값과 실행할 입수 액션을 정의합니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 일반적으로 스코어 등록 기간 사이의 간격으로 설정합니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위를 사용하며(동점 스코어의 플레이어는 동일한 순위를 공유), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치를 사용합니다(동일 순위 없음). 일반적인 사용 사례에서는 “순위 기반\"을 선택하시기 바랍니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ClusterRankingModelMaster 클러스터 랭킹 모델 마스터 클러스터 랭킹 모델 마스터는 게임 내에서 사용되는 클러스터 랭킹 모델을 편집·관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 가져오기·업데이트 처리를 수행하면, 실제로 게임에서 참조되는 클러스터 랭킹 모델로 반영됩니다. 클러스터 랭킹 모델은 길드나 개더링 내 플레이어를 대상으로 한 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연결하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 clusterRankingModelId string ※ ~ 1024자 클러스터 랭킹 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. clusterType 문자열 열거형 enum {   “Raw”,   “Gs2Guild::Guild”,   “Gs2Matchmaking::SeasonGathering” }  클러스터 타입 랭킹의 세그멘테이션에 사용하는 그룹(클러스터)의 종류를 정의합니다. “Raw\"는 소속 검증 없이 임의의 클러스터 이름을 지정할 수 있으며, “Gs2Guild::Guild\"는 GS2-Guild 길드에 대한 소속을 검증하고, “Gs2Matchmaking::SeasonGathering\"은 GS2-Matchmaking 시즌 개더링에 대한 소속을 검증합니다. 정의 설명 Raw 검증 없음 Gs2Guild::Guild GS2-Guild 길드 Gs2Matchmaking::SeasonGathering GS2-Matchmaking 시즌 개더링 minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위(동점 스코어는 동일 순위), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치(동일 순위 없음)를 사용합니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SubscribeRankingModelMaster 구독 랭킹 모델 마스터 구독 랭킹 모델 마스터는 게임 내에서 사용되는 구독 랭킹 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·갱신 처리를 수행함으로써 실제로 게임에서 참조되는 구독 랭킹 모델로 반영됩니다. 구독 랭킹 모델은 사용자가 구독한 다른 플레이어의 점수를 집계하여 랭킹을 생성하는 모델입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeRankingModelId string ※ ~ 1024자 구독 랭킹 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 구독 랭킹 모델명 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과를 열람할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 ranking2 . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeNamespacesRequest ; import io.gs2.ranking2.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Ranking2 . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Ranking2 . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_namespaces ( ranking2 . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 랭킹 보상 지급에 사용되는 분산 트랜잭션 설정입니다. 입수 액션을 자동으로 실행하는 오토런, 전체의 성패를 보장하는 아토믹 커밋을 지원합니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 점수 등록이나 랭킹 보상 배포 추적에 사용됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 ranking2 . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , LogSetting : \u0026 ranking2 . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Ranking2\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CreateNamespaceRequest ; import io.gs2.ranking2.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . ranking2 . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Ranking2 . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Ranking2 . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . createNamespace ( new Gs2Ranking2 . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Ranking2 . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . create_namespace ( ranking2 . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_log_setting ( ranking2 . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 ranking2 . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetNamespaceStatusRequest ; import io.gs2.ranking2.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Ranking2 . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Ranking2 . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_namespace_status ( ranking2 . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 ranking2 . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetNamespaceRequest ; import io.gs2.ranking2.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Ranking2 . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getNamespace ( new Gs2Ranking2 . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_namespace ( ranking2 . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 랭킹 보상 지급에 사용되는 분산 트랜잭션 설정입니다. 입수 액션을 자동으로 실행하는 오토런, 전체의 성패를 보장하는 아토믹 커밋을 지원합니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 점수 등록이나 랭킹 보상 배포 추적에 사용됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 ranking2 . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , LogSetting : \u0026 ranking2 . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Ranking2\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.UpdateNamespaceRequest ; import io.gs2.ranking2.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . ranking2 . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Ranking2 . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Ranking2 . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Ranking2 . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Ranking2 . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . update_namespace ( ranking2 . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_log_setting ( ranking2 . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 ranking2 . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteNamespaceRequest ; import io.gs2.ranking2.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Ranking2 . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Ranking2 . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_namespace ( ranking2 . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 ranking2 . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetServiceVersionRequest ; import io.gs2.ranking2.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Ranking2 . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Ranking2 . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_service_version ( ranking2 . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 ranking2 . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DumpUserDataByUserIdRequest ; import io.gs2.ranking2.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Ranking2 . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Ranking2 . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . dump_user_data_by_user_id ( ranking2 . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ranking2' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 ranking2 . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.ranking2.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Ranking2 . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Ranking2 . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( ranking2 . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'ranking2' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 ranking2 . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CleanUserDataByUserIdRequest ; import io.gs2.ranking2.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Ranking2 . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Ranking2 . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . clean_user_data_by_user_id ( ranking2 . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ranking2' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 ranking2 . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.ranking2.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Ranking2 . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Ranking2 . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( ranking2 . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ranking2' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 ranking2 . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.ranking2.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Ranking2 . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Ranking2 . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( ranking2 . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'ranking2' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 ranking2 . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.ImportUserDataByUserIdRequest ; import io.gs2.ranking2.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Ranking2 . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Ranking2 . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . import_user_data_by_user_id ( ranking2 . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'ranking2' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 ranking2 . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CheckImportUserDataByUserIdRequest ; import io.gs2.ranking2.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Ranking2 . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Ranking2 . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . check_import_user_data_by_user_id ( ranking2 . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'ranking2' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeGlobalRankingScores 글로벌 랭킹 스코어 목록 조회 요청한 사용자가 등록한 글로벌 랭킹 스코어의 페이지네이션 목록을 조회합니다. 랭킹 이름으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 글로벌 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeGlobalRankingScores ( \u0026 ranking2 . DescribeGlobalRankingScoresRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeGlobalRankingScoresRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeGlobalRankingScores ( ( new DescribeGlobalRankingScoresRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeGlobalRankingScoresRequest ; import io.gs2.ranking2.result.DescribeGlobalRankingScoresResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeGlobalRankingScoresResult result = client . describeGlobalRankingScores ( new DescribeGlobalRankingScoresRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List GlobalRankingScore \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeGlobalRankingScoresResult \u003e asyncResult = null ; yield return client . DescribeGlobalRankingScores ( new Gs2 . Gs2Ranking2 . Request . DescribeGlobalRankingScoresRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeGlobalRankingScores ( new Gs2Ranking2 . DescribeGlobalRankingScoresRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_global_ranking_scores ( ranking2 . DescribeGlobalRankingScoresRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_global_ranking_scores ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_global_ranking_scores_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeGlobalRankingScoresByUserId 사용자 ID를 지정하여 글로벌 랭킹 스코어 목록 조회 지정한 사용자가 등록한 글로벌 랭킹 스코어의 페이지네이션 목록을 조회합니다. 랭킹 이름으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 글로벌 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeGlobalRankingScoresByUserId ( \u0026 ranking2 . DescribeGlobalRankingScoresByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeGlobalRankingScoresByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeGlobalRankingScoresByUserId ( ( new DescribeGlobalRankingScoresByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeGlobalRankingScoresByUserIdRequest ; import io.gs2.ranking2.result.DescribeGlobalRankingScoresByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeGlobalRankingScoresByUserIdResult result = client . describeGlobalRankingScoresByUserId ( new DescribeGlobalRankingScoresByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List GlobalRankingScore \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeGlobalRankingScoresByUserIdResult \u003e asyncResult = null ; yield return client . DescribeGlobalRankingScoresByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeGlobalRankingScoresByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeGlobalRankingScoresByUserId ( new Gs2Ranking2 . DescribeGlobalRankingScoresByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_global_ranking_scores_by_user_id ( ranking2 . DescribeGlobalRankingScoresByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_global_ranking_scores_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_global_ranking_scores_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; putGlobalRankingScore 글로벌 랭킹 스코어 등록 지정한 글로벌 랭킹에 스코어를 등록합니다. 스코어는 랭킹 모델에서 정의된 범위 내에 있어야 합니다. 엔트리 기간 이벤트가 설정된 경우, 활성 기간 중에만 스코어를 등록할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 score long  0 ~ 9223372036854775805 스코어 사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item GlobalRankingScore 등록한 글로벌 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . PutGlobalRankingScore ( \u0026 ranking2 . PutGlobalRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Score : pointy . Int64 ( 100 ), Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\PutGlobalRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e putGlobalRankingScore ( ( new PutGlobalRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withScore ( 100 ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.PutGlobalRankingScoreRequest ; import io.gs2.ranking2.result.PutGlobalRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { PutGlobalRankingScoreResult result = client . putGlobalRankingScore ( new PutGlobalRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScore ( 100L ) . withMetadata ( null ) ); GlobalRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . PutGlobalRankingScoreResult \u003e asyncResult = null ; yield return client . PutGlobalRankingScore ( new Gs2 . Gs2Ranking2 . Request . PutGlobalRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithScore ( 100L ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . putGlobalRankingScore ( new Gs2Ranking2 . PutGlobalRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScore ( 100 ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . put_global_ranking_score ( ranking2 . PutGlobalRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_score ( 100 ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.put_global_ranking_score ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , score = 100 , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.put_global_ranking_score_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , score = 100 , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; putGlobalRankingScoreByUserId 사용자 ID를 지정하여 글로벌 랭킹 스코어 등록 지정한 사용자를 대신하여, 지정한 글로벌 랭킹에 스코어를 등록합니다. 스코어는 랭킹 모델에서 정의된 범위 내에 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingScore 등록한 글로벌 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . PutGlobalRankingScoreByUserId ( \u0026 ranking2 . PutGlobalRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Score : nil , Metadata : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\PutGlobalRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e putGlobalRankingScoreByUserId ( ( new PutGlobalRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withScore ( null ) -\u003e withMetadata ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.PutGlobalRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.PutGlobalRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { PutGlobalRankingScoreByUserIdResult result = client . putGlobalRankingScoreByUserId ( new PutGlobalRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withScore ( null ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); GlobalRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . PutGlobalRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . PutGlobalRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . PutGlobalRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithScore ( null ) . WithMetadata ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . putGlobalRankingScoreByUserId ( new Gs2Ranking2 . PutGlobalRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withScore ( null ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . put_global_ranking_score_by_user_id ( ranking2 . PutGlobalRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_score ( None ) . with_metadata ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.put_global_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , score = nil , metadata = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.put_global_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , score = nil , metadata = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGlobalRankingScore 글로벌 랭킹 스코어 조회 지정한 랭킹에 대해 요청한 사용자가 등록한 글로벌 랭킹 스코어를 조회합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item GlobalRankingScore 글로벌 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetGlobalRankingScore ( \u0026 ranking2 . GetGlobalRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : pointy . Int64 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetGlobalRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getGlobalRankingScore ( ( new GetGlobalRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetGlobalRankingScoreRequest ; import io.gs2.ranking2.result.GetGlobalRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetGlobalRankingScoreResult result = client . getGlobalRankingScore ( new GetGlobalRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0L ) ); GlobalRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetGlobalRankingScoreResult \u003e asyncResult = null ; yield return client . GetGlobalRankingScore ( new Gs2 . Gs2Ranking2 . Request . GetGlobalRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( 0L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getGlobalRankingScore ( new Gs2Ranking2 . GetGlobalRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_global_ranking_score ( ranking2 . GetGlobalRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_global_ranking_score ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_global_ranking_score_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGlobalRankingScoreByUserId 사용자 ID를 지정하여 글로벌 랭킹 스코어 조회 지정한 랭킹에 대해 지정한 사용자가 등록한 글로벌 랭킹 스코어를 조회합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingScore 글로벌 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetGlobalRankingScoreByUserId ( \u0026 ranking2 . GetGlobalRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetGlobalRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getGlobalRankingScoreByUserId ( ( new GetGlobalRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetGlobalRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.GetGlobalRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetGlobalRankingScoreByUserIdResult result = client . getGlobalRankingScoreByUserId ( new GetGlobalRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); GlobalRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetGlobalRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . GetGlobalRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . GetGlobalRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getGlobalRankingScoreByUserId ( new Gs2Ranking2 . GetGlobalRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_global_ranking_score_by_user_id ( ranking2 . GetGlobalRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_global_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_global_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGlobalRankingScoreByUserId 사용자 ID를 지정하여 글로벌 랭킹 스코어 삭제 지정한 사용자가 지정한 랭킹 및 시즌에 등록한 글로벌 랭킹 스코어를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingScore 삭제한 글로벌 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteGlobalRankingScoreByUserId ( \u0026 ranking2 . DeleteGlobalRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteGlobalRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteGlobalRankingScoreByUserId ( ( new DeleteGlobalRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteGlobalRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.DeleteGlobalRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteGlobalRankingScoreByUserIdResult result = client . deleteGlobalRankingScoreByUserId ( new DeleteGlobalRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); GlobalRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteGlobalRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . DeleteGlobalRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . DeleteGlobalRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteGlobalRankingScoreByUserId ( new Gs2Ranking2 . DeleteGlobalRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_global_ranking_score_by_user_id ( ranking2 . DeleteGlobalRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_global_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_global_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyGlobalRankingScore 글로벌 랭킹의 스코어 검증 글로벌 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item GlobalRankingScore 글로벌 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . VerifyGlobalRankingScore ( \u0026 ranking2 . VerifyGlobalRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), VerifyType : pointy . String ( \"less\" ), Season : nil , Score : pointy . Int64 ( 100 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\VerifyGlobalRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e verifyGlobalRankingScore ( ( new VerifyGlobalRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withSeason ( null ) -\u003e withScore ( 100 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.VerifyGlobalRankingScoreRequest ; import io.gs2.ranking2.result.VerifyGlobalRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { VerifyGlobalRankingScoreResult result = client . verifyGlobalRankingScore ( new VerifyGlobalRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100L ) . withMultiplyValueSpecifyingQuantity ( null ) ); GlobalRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . VerifyGlobalRankingScoreResult \u003e asyncResult = null ; yield return client . VerifyGlobalRankingScore ( new Gs2 . Gs2Ranking2 . Request . VerifyGlobalRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithVerifyType ( \"less\" ) . WithSeason ( null ) . WithScore ( 100L ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . verifyGlobalRankingScore ( new Gs2Ranking2 . VerifyGlobalRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . verify_global_ranking_score ( ranking2 . VerifyGlobalRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_verify_type ( 'less' ) . with_season ( None ) . with_score ( 100 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.verify_global_ranking_score ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.verify_global_ranking_score_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyGlobalRankingScoreByUserId 사용자 ID를 지정하여 글로벌 랭킹의 스코어 검증 지정한 사용자의 글로벌 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingScore 글로벌 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . VerifyGlobalRankingScoreByUserId ( \u0026 ranking2 . VerifyGlobalRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), VerifyType : pointy . String ( \"less\" ), Season : nil , Score : pointy . Int64 ( 100 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\VerifyGlobalRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e verifyGlobalRankingScoreByUserId ( ( new VerifyGlobalRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withSeason ( null ) -\u003e withScore ( 100 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.VerifyGlobalRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.VerifyGlobalRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { VerifyGlobalRankingScoreByUserIdResult result = client . verifyGlobalRankingScoreByUserId ( new VerifyGlobalRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100L ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); GlobalRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . VerifyGlobalRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . VerifyGlobalRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . VerifyGlobalRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithVerifyType ( \"less\" ) . WithSeason ( null ) . WithScore ( 100L ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . verifyGlobalRankingScoreByUserId ( new Gs2Ranking2 . VerifyGlobalRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . verify_global_ranking_score_by_user_id ( ranking2 . VerifyGlobalRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_verify_type ( 'less' ) . with_season ( None ) . with_score ( 100 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.verify_global_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.verify_global_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGlobalRankingReceivedRewards 글로벌 랭킹 보상 수령 이력 목록 취득 요청한 사용자의 글로벌 랭킹 보상 수령 이력의 페이지네이션이 포함된 목록을 취득합니다. 랭킹 이름과 시즌으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 글로벌 랭킹 보상 수령 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeGlobalRankingReceivedRewards ( \u0026 ranking2 . DescribeGlobalRankingReceivedRewardsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), Season : pointy . Int64 ( 0 ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeGlobalRankingReceivedRewardsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeGlobalRankingReceivedRewards ( ( new DescribeGlobalRankingReceivedRewardsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withSeason ( 0 ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeGlobalRankingReceivedRewardsRequest ; import io.gs2.ranking2.result.DescribeGlobalRankingReceivedRewardsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeGlobalRankingReceivedRewardsResult result = client . describeGlobalRankingReceivedRewards ( new DescribeGlobalRankingReceivedRewardsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( 0L ) . withPageToken ( null ) . withLimit ( null ) ); List GlobalRankingReceivedReward \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeGlobalRankingReceivedRewardsResult \u003e asyncResult = null ; yield return client . DescribeGlobalRankingReceivedRewards ( new Gs2 . Gs2Ranking2 . Request . DescribeGlobalRankingReceivedRewardsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithSeason ( 0L ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeGlobalRankingReceivedRewards ( new Gs2Ranking2 . DescribeGlobalRankingReceivedRewardsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( 0 ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_global_ranking_received_rewards ( ranking2 . DescribeGlobalRankingReceivedRewardsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_season ( 0 ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_global_ranking_received_rewards ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , season = 0 , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_global_ranking_received_rewards_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , season = 0 , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeGlobalRankingReceivedRewardsByUserId 사용자 ID를 지정하여 글로벌 랭킹 보상 수령 이력 목록 취득 지정한 사용자의 글로벌 랭킹 보상 수령 이력의 페이지네이션이 포함된 목록을 취득합니다. 랭킹 이름과 시즌으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 글로벌 랭킹 보상 수령 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeGlobalRankingReceivedRewardsByUserId ( \u0026 ranking2 . DescribeGlobalRankingReceivedRewardsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), Season : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeGlobalRankingReceivedRewardsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeGlobalRankingReceivedRewardsByUserId ( ( new DescribeGlobalRankingReceivedRewardsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeGlobalRankingReceivedRewardsByUserIdRequest ; import io.gs2.ranking2.result.DescribeGlobalRankingReceivedRewardsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeGlobalRankingReceivedRewardsByUserIdResult result = client . describeGlobalRankingReceivedRewardsByUserId ( new DescribeGlobalRankingReceivedRewardsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List GlobalRankingReceivedReward \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeGlobalRankingReceivedRewardsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeGlobalRankingReceivedRewardsByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeGlobalRankingReceivedRewardsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeGlobalRankingReceivedRewardsByUserId ( new Gs2Ranking2 . DescribeGlobalRankingReceivedRewardsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_global_ranking_received_rewards_by_user_id ( ranking2 . DescribeGlobalRankingReceivedRewardsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_global_ranking_received_rewards_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_global_ranking_received_rewards_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createGlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 기록 지정한 글로벌 랭킹의 보상 수령 이력을 기록합니다. 실제로 보상을 수령하기 전에 이 기록이 필요합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item GlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CreateGlobalRankingReceivedReward ( \u0026 ranking2 . CreateGlobalRankingReceivedRewardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : pointy . Int64 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CreateGlobalRankingReceivedRewardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e createGlobalRankingReceivedReward ( ( new CreateGlobalRankingReceivedRewardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CreateGlobalRankingReceivedRewardRequest ; import io.gs2.ranking2.result.CreateGlobalRankingReceivedRewardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CreateGlobalRankingReceivedRewardResult result = client . createGlobalRankingReceivedReward ( new CreateGlobalRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0L ) ); GlobalRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CreateGlobalRankingReceivedRewardResult \u003e asyncResult = null ; yield return client . CreateGlobalRankingReceivedReward ( new Gs2 . Gs2Ranking2 . Request . CreateGlobalRankingReceivedRewardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( 0L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . createGlobalRankingReceivedReward ( new Gs2Ranking2 . CreateGlobalRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . create_global_ranking_received_reward ( ranking2 . CreateGlobalRankingReceivedRewardRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.create_global_ranking_received_reward ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.create_global_ranking_received_reward_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createGlobalRankingReceivedRewardByUserId 사용자 ID를 지정하여 글로벌 랭킹 보상 수령 이력 기록 지정한 사용자를 대신하여, 지정한 글로벌 랭킹의 보상 수령 이력을 기록합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CreateGlobalRankingReceivedRewardByUserId ( \u0026 ranking2 . CreateGlobalRankingReceivedRewardByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CreateGlobalRankingReceivedRewardByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e createGlobalRankingReceivedRewardByUserId ( ( new CreateGlobalRankingReceivedRewardByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CreateGlobalRankingReceivedRewardByUserIdRequest ; import io.gs2.ranking2.result.CreateGlobalRankingReceivedRewardByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CreateGlobalRankingReceivedRewardByUserIdResult result = client . createGlobalRankingReceivedRewardByUserId ( new CreateGlobalRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); GlobalRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CreateGlobalRankingReceivedRewardByUserIdResult \u003e asyncResult = null ; yield return client . CreateGlobalRankingReceivedRewardByUserId ( new Gs2 . Gs2Ranking2 . Request . CreateGlobalRankingReceivedRewardByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . createGlobalRankingReceivedRewardByUserId ( new Gs2Ranking2 . CreateGlobalRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . create_global_ranking_received_reward_by_user_id ( ranking2 . CreateGlobalRankingReceivedRewardByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.create_global_ranking_received_reward_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.create_global_ranking_received_reward_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; receiveGlobalRankingReceivedReward 글로벌 랭킹 보상 수령 지정한 글로벌 랭킹과 시즌의 랭킹 보상을 수령합니다. 보상은 사용자의 랭킹 순위와 랭킹 모델의 보상 설정에 따라 결정됩니다. 보상 아이템을 부여하기 위한 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item GlobalRankingModel 글로벌 랭킹 모델 acquireActions List 보상 수령 시 실행되는 입수 액션 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . ReceiveGlobalRankingReceivedReward ( \u0026 ranking2 . ReceiveGlobalRankingReceivedRewardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), Season : pointy . Int64 ( 0 ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item acquireActions := result . AcquireActions transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\ReceiveGlobalRankingReceivedRewardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e receiveGlobalRankingReceivedReward ( ( new ReceiveGlobalRankingReceivedRewardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withSeason ( 0 ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $acquireActions = $result -\u003e getAcquireActions (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.ReceiveGlobalRankingReceivedRewardRequest ; import io.gs2.ranking2.result.ReceiveGlobalRankingReceivedRewardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { ReceiveGlobalRankingReceivedRewardResult result = client . receiveGlobalRankingReceivedReward ( new ReceiveGlobalRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( 0L ) . withConfig ( null ) ); GlobalRankingModel item = result . getItem (); List AcquireAction \u003e acquireActions = result . getAcquireActions (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . ReceiveGlobalRankingReceivedRewardResult \u003e asyncResult = null ; yield return client . ReceiveGlobalRankingReceivedReward ( new Gs2 . Gs2Ranking2 . Request . ReceiveGlobalRankingReceivedRewardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithSeason ( 0L ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var acquireActions = result . AcquireActions ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . receiveGlobalRankingReceivedReward ( new Gs2Ranking2 . ReceiveGlobalRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( 0 ) . withConfig ( null ) ); const item = result . getItem (); const acquireActions = result . getAcquireActions (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . receive_global_ranking_received_reward ( ranking2 . ReceiveGlobalRankingReceivedRewardRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_season ( 0 ) . with_config ( None ) ) item = result . item acquire_actions = result . acquire_actions transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.receive_global_ranking_received_reward ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , season = 0 , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquireActions = result.acquireActions ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'ranking2' ) api_result_handler = client.receive_global_ranking_received_reward_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , season = 0 , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquireActions = result.acquireActions ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; receiveGlobalRankingReceivedRewardByUserId 사용자 ID를 지정하여 글로벌 랭킹 보상 수령 지정한 사용자를 대신하여, 지정한 글로벌 랭킹과 시즌의 랭킹 보상을 수령합니다. 보상 아이템을 부여하기 위한 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingModel 글로벌 랭킹 모델 acquireActions List 보상 수령 시 실행되는 입수 액션 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . ReceiveGlobalRankingReceivedRewardByUserId ( \u0026 ranking2 . ReceiveGlobalRankingReceivedRewardByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), Season : pointy . Int64 ( 0 ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item acquireActions := result . AcquireActions transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\ReceiveGlobalRankingReceivedRewardByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e receiveGlobalRankingReceivedRewardByUserId ( ( new ReceiveGlobalRankingReceivedRewardByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withSeason ( 0 ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $acquireActions = $result -\u003e getAcquireActions (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.ReceiveGlobalRankingReceivedRewardByUserIdRequest ; import io.gs2.ranking2.result.ReceiveGlobalRankingReceivedRewardByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { ReceiveGlobalRankingReceivedRewardByUserIdResult result = client . receiveGlobalRankingReceivedRewardByUserId ( new ReceiveGlobalRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( 0L ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); GlobalRankingModel item = result . getItem (); List AcquireAction \u003e acquireActions = result . getAcquireActions (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . ReceiveGlobalRankingReceivedRewardByUserIdResult \u003e asyncResult = null ; yield return client . ReceiveGlobalRankingReceivedRewardByUserId ( new Gs2 . Gs2Ranking2 . Request . ReceiveGlobalRankingReceivedRewardByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithSeason ( 0L ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var acquireActions = result . AcquireActions ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . receiveGlobalRankingReceivedRewardByUserId ( new Gs2Ranking2 . ReceiveGlobalRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( 0 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const acquireActions = result . getAcquireActions (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . receive_global_ranking_received_reward_by_user_id ( ranking2 . ReceiveGlobalRankingReceivedRewardByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_season ( 0 ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item acquire_actions = result . acquire_actions transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.receive_global_ranking_received_reward_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , season = 0 , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquireActions = result.acquireActions ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'ranking2' ) api_result_handler = client.receive_global_ranking_received_reward_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , season = 0 , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquireActions = result.acquireActions ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; getGlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 취득 지정한 글로벌 랭킹의 보상 수령 이력을 취득합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item GlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetGlobalRankingReceivedReward ( \u0026 ranking2 . GetGlobalRankingReceivedRewardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : pointy . Int64 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetGlobalRankingReceivedRewardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getGlobalRankingReceivedReward ( ( new GetGlobalRankingReceivedRewardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetGlobalRankingReceivedRewardRequest ; import io.gs2.ranking2.result.GetGlobalRankingReceivedRewardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetGlobalRankingReceivedRewardResult result = client . getGlobalRankingReceivedReward ( new GetGlobalRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0L ) ); GlobalRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetGlobalRankingReceivedRewardResult \u003e asyncResult = null ; yield return client . GetGlobalRankingReceivedReward ( new Gs2 . Gs2Ranking2 . Request . GetGlobalRankingReceivedRewardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( 0L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getGlobalRankingReceivedReward ( new Gs2Ranking2 . GetGlobalRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_global_ranking_received_reward ( ranking2 . GetGlobalRankingReceivedRewardRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_global_ranking_received_reward ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_global_ranking_received_reward_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGlobalRankingReceivedRewardByUserId 사용자 ID를 지정하여 글로벌 랭킹 보상 수령 이력 취득 지정한 사용자의 지정한 글로벌 랭킹의 보상 수령 이력을 취득합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingReceivedReward 글로벌 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetGlobalRankingReceivedRewardByUserId ( \u0026 ranking2 . GetGlobalRankingReceivedRewardByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetGlobalRankingReceivedRewardByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getGlobalRankingReceivedRewardByUserId ( ( new GetGlobalRankingReceivedRewardByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetGlobalRankingReceivedRewardByUserIdRequest ; import io.gs2.ranking2.result.GetGlobalRankingReceivedRewardByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetGlobalRankingReceivedRewardByUserIdResult result = client . getGlobalRankingReceivedRewardByUserId ( new GetGlobalRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); GlobalRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetGlobalRankingReceivedRewardByUserIdResult \u003e asyncResult = null ; yield return client . GetGlobalRankingReceivedRewardByUserId ( new Gs2 . Gs2Ranking2 . Request . GetGlobalRankingReceivedRewardByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getGlobalRankingReceivedRewardByUserId ( new Gs2Ranking2 . GetGlobalRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_global_ranking_received_reward_by_user_id ( ranking2 . GetGlobalRankingReceivedRewardByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_global_ranking_received_reward_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_global_ranking_received_reward_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGlobalRankingReceivedRewardByUserId 사용자 ID를 지정하여 글로벌 랭킹 보상 수령 이력 삭제 지정한 사용자의 지정한 랭킹 및 시즌의 글로벌 랭킹 보상 수령 이력을 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. 새로운 랭킹 기간마다 증가합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingReceivedReward 삭제한 글로벌 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteGlobalRankingReceivedRewardByUserId ( \u0026 ranking2 . DeleteGlobalRankingReceivedRewardByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteGlobalRankingReceivedRewardByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteGlobalRankingReceivedRewardByUserId ( ( new DeleteGlobalRankingReceivedRewardByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteGlobalRankingReceivedRewardByUserIdRequest ; import io.gs2.ranking2.result.DeleteGlobalRankingReceivedRewardByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteGlobalRankingReceivedRewardByUserIdResult result = client . deleteGlobalRankingReceivedRewardByUserId ( new DeleteGlobalRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); GlobalRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteGlobalRankingReceivedRewardByUserIdResult \u003e asyncResult = null ; yield return client . DeleteGlobalRankingReceivedRewardByUserId ( new Gs2 . Gs2Ranking2 . Request . DeleteGlobalRankingReceivedRewardByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteGlobalRankingReceivedRewardByUserId ( new Gs2Ranking2 . DeleteGlobalRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_global_ranking_received_reward_by_user_id ( ranking2 . DeleteGlobalRankingReceivedRewardByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_global_ranking_received_reward_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_global_ranking_received_reward_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGlobalRankings 글로벌 랭킹 목록 조회 지정한 랭킹의 글로벌 랭킹 데이터의 페이지네이션 지원 목록을 조회합니다. 랭킹 데이터에는 순위, 스코어, 사용자 정보가 포함됩니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 글로벌 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeGlobalRankings ( \u0026 ranking2 . DescribeGlobalRankingsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), Season : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeGlobalRankingsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeGlobalRankings ( ( new DescribeGlobalRankingsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeGlobalRankingsRequest ; import io.gs2.ranking2.result.DescribeGlobalRankingsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeGlobalRankingsResult result = client . describeGlobalRankings ( new DescribeGlobalRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) ); List GlobalRankingData \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeGlobalRankingsResult \u003e asyncResult = null ; yield return client . DescribeGlobalRankings ( new Gs2 . Gs2Ranking2 . Request . DescribeGlobalRankingsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeGlobalRankings ( new Gs2Ranking2 . DescribeGlobalRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_global_rankings ( ranking2 . DescribeGlobalRankingsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_global_rankings ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_global_rankings_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeGlobalRankingsByUserId 사용자 ID를 지정하여 글로벌 랭킹 목록 조회 지정한 사용자를 대신하여, 지정한 랭킹의 글로벌 랭킹 데이터의 페이지네이션 지원 목록을 조회합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 글로벌 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeGlobalRankingsByUserId ( \u0026 ranking2 . DescribeGlobalRankingsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), Season : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeGlobalRankingsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeGlobalRankingsByUserId ( ( new DescribeGlobalRankingsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeGlobalRankingsByUserIdRequest ; import io.gs2.ranking2.result.DescribeGlobalRankingsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeGlobalRankingsByUserIdResult result = client . describeGlobalRankingsByUserId ( new DescribeGlobalRankingsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List GlobalRankingData \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeGlobalRankingsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeGlobalRankingsByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeGlobalRankingsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeGlobalRankingsByUserId ( new Gs2Ranking2 . DescribeGlobalRankingsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_global_rankings_by_user_id ( ranking2 . DescribeGlobalRankingsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_global_rankings_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_global_rankings_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getGlobalRanking 글로벌 랭킹 조회 지정한 글로벌 랭킹에서 요청한 사용자의 순위와 스코어를 조회합니다. 랭킹 데이터는 등록된 스코어로부터 계산됩니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item GlobalRankingData 글로벌 랭킹 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetGlobalRanking ( \u0026 ranking2 . GetGlobalRankingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetGlobalRankingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getGlobalRanking ( ( new GetGlobalRankingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetGlobalRankingRequest ; import io.gs2.ranking2.result.GetGlobalRankingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetGlobalRankingResult result = client . getGlobalRanking ( new GetGlobalRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( null ) ); GlobalRankingData item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetGlobalRankingResult \u003e asyncResult = null ; yield return client . GetGlobalRanking ( new Gs2 . Gs2Ranking2 . Request . GetGlobalRankingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getGlobalRanking ( new Gs2Ranking2 . GetGlobalRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_global_ranking ( ranking2 . GetGlobalRankingRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_global_ranking ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_global_ranking_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGlobalRankingByUserId 사용자 ID를 지정하여 글로벌 랭킹 조회 지정한 글로벌 랭킹에서 지정한 사용자의 순위와 스코어를 조회합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item GlobalRankingData 글로벌 랭킹 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetGlobalRankingByUserId ( \u0026 ranking2 . GetGlobalRankingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetGlobalRankingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getGlobalRankingByUserId ( ( new GetGlobalRankingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetGlobalRankingByUserIdRequest ; import io.gs2.ranking2.result.GetGlobalRankingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetGlobalRankingByUserIdResult result = client . getGlobalRankingByUserId ( new GetGlobalRankingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); GlobalRankingData item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetGlobalRankingByUserIdResult \u003e asyncResult = null ; yield return client . GetGlobalRankingByUserId ( new Gs2 . Gs2Ranking2 . Request . GetGlobalRankingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getGlobalRankingByUserId ( new Gs2Ranking2 . GetGlobalRankingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_global_ranking_by_user_id ( ranking2 . GetGlobalRankingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_global_ranking_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_global_ranking_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeClusterRankingScores 클러스터 랭킹 스코어 목록 취득 요청한 사용자가 등록한 클러스터 랭킹 스코어의 페이지네이션이 포함된 목록을 취득합니다. 랭킹 이름, 클러스터 이름, 시즌으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클러스터 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeClusterRankingScores ( \u0026 ranking2 . DescribeClusterRankingScoresRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), Season : pointy . Int64 ( 0 ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeClusterRankingScoresRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeClusterRankingScores ( ( new DescribeClusterRankingScoresRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withSeason ( 0 ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeClusterRankingScoresRequest ; import io.gs2.ranking2.result.DescribeClusterRankingScoresResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeClusterRankingScoresResult result = client . describeClusterRankingScores ( new DescribeClusterRankingScoresRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( 0L ) . withPageToken ( null ) . withLimit ( null ) ); List ClusterRankingScore \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeClusterRankingScoresResult \u003e asyncResult = null ; yield return client . DescribeClusterRankingScores ( new Gs2 . Gs2Ranking2 . Request . DescribeClusterRankingScoresRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithSeason ( 0L ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeClusterRankingScores ( new Gs2Ranking2 . DescribeClusterRankingScoresRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( 0 ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_cluster_ranking_scores ( ranking2 . DescribeClusterRankingScoresRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_season ( 0 ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_cluster_ranking_scores ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = 0 , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_cluster_ranking_scores_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = 0 , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeClusterRankingScoresByUserId 사용자 ID를 지정하여 클러스터 랭킹 스코어 목록 취득 지정한 사용자가 등록한 클러스터 랭킹 스코어의 페이지네이션이 포함된 목록을 취득합니다. 랭킹 이름, 클러스터 이름, 시즌으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 클러스터 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeClusterRankingScoresByUserId ( \u0026 ranking2 . DescribeClusterRankingScoresByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : nil , ClusterName : pointy . String ( \"cluster-0001\" ), Season : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeClusterRankingScoresByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeClusterRankingScoresByUserId ( ( new DescribeClusterRankingScoresByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( null ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeClusterRankingScoresByUserIdRequest ; import io.gs2.ranking2.result.DescribeClusterRankingScoresByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeClusterRankingScoresByUserIdResult result = client . describeClusterRankingScoresByUserId ( new DescribeClusterRankingScoresByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( null ) . withClusterName ( \"cluster-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ClusterRankingScore \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeClusterRankingScoresByUserIdResult \u003e asyncResult = null ; yield return client . DescribeClusterRankingScoresByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeClusterRankingScoresByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( null ) . WithClusterName ( \"cluster-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeClusterRankingScoresByUserId ( new Gs2Ranking2 . DescribeClusterRankingScoresByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( null ) . withClusterName ( \"cluster-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_cluster_ranking_scores_by_user_id ( ranking2 . DescribeClusterRankingScoresByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( None ) . with_cluster_name ( 'cluster-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_cluster_ranking_scores_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = nil , clusterName = \"cluster-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_cluster_ranking_scores_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = nil , clusterName = \"cluster-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; putClusterRankingScore 클러스터 랭킹 스코어 등록 지정한 클러스터 랭킹에 스코어를 등록합니다. 사용자는 지정한 클러스터(길드 또는 매치메이킹 게더링)에 소속되어 있어야 합니다. 스코어는 랭킹 모델에서 정의된 범위 내에 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. accessToken string  ~ 128자 액세스 토큰 score long  0 ~ 9223372036854775805 스코어 이 클러스터 내에서 사용자가 등록한 스코어 값입니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item ClusterRankingScore 등록한 클러스터 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . PutClusterRankingScore ( \u0026 ranking2 . PutClusterRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Score : pointy . Int64 ( 100 ), Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\PutClusterRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e putClusterRankingScore ( ( new PutClusterRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withScore ( 100 ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.PutClusterRankingScoreRequest ; import io.gs2.ranking2.result.PutClusterRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { PutClusterRankingScoreResult result = client . putClusterRankingScore ( new PutClusterRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScore ( 100L ) . withMetadata ( null ) ); ClusterRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . PutClusterRankingScoreResult \u003e asyncResult = null ; yield return client . PutClusterRankingScore ( new Gs2 . Gs2Ranking2 . Request . PutClusterRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithScore ( 100L ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . putClusterRankingScore ( new Gs2Ranking2 . PutClusterRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScore ( 100 ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . put_cluster_ranking_score ( ranking2 . PutClusterRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_access_token ( 'accessToken-0001' ) . with_score ( 100 ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.put_cluster_ranking_score ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , score = 100 , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.put_cluster_ranking_score_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , score = 100 , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; putClusterRankingScoreByUserId 사용자 ID를 지정하여 클러스터 랭킹 스코어 등록 지정한 사용자를 대신하여, 지정한 클러스터 랭킹에 스코어를 등록합니다. 사용자는 지정한 클러스터에 소속되어 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 이 클러스터 내에서 사용자가 등록한 스코어 값입니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingScore 등록한 클러스터 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . PutClusterRankingScoreByUserId ( \u0026 ranking2 . PutClusterRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), UserId : pointy . String ( \"user-0001\" ), Score : nil , Metadata : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\PutClusterRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e putClusterRankingScoreByUserId ( ( new PutClusterRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withScore ( null ) -\u003e withMetadata ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.PutClusterRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.PutClusterRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { PutClusterRankingScoreByUserIdResult result = client . putClusterRankingScoreByUserId ( new PutClusterRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withScore ( null ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); ClusterRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . PutClusterRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . PutClusterRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . PutClusterRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithUserId ( \"user-0001\" ) . WithScore ( null ) . WithMetadata ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . putClusterRankingScoreByUserId ( new Gs2Ranking2 . PutClusterRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withScore ( null ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . put_cluster_ranking_score_by_user_id ( ranking2 . PutClusterRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_user_id ( 'user-0001' ) . with_score ( None ) . with_metadata ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.put_cluster_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , score = nil , metadata = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.put_cluster_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , score = nil , metadata = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getClusterRankingScore 클러스터 랭킹 스코어 취득 지정한 랭킹 및 클러스터에 대해 요청한 사용자가 등록한 클러스터 랭킹 스코어를 취득합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item ClusterRankingScore 클러스터 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetClusterRankingScore ( \u0026 ranking2 . GetClusterRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : pointy . Int64 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetClusterRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getClusterRankingScore ( ( new GetClusterRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetClusterRankingScoreRequest ; import io.gs2.ranking2.result.GetClusterRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetClusterRankingScoreResult result = client . getClusterRankingScore ( new GetClusterRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0L ) ); ClusterRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetClusterRankingScoreResult \u003e asyncResult = null ; yield return client . GetClusterRankingScore ( new Gs2 . Gs2Ranking2 . Request . GetClusterRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( 0L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getClusterRankingScore ( new Gs2Ranking2 . GetClusterRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_cluster_ranking_score ( ranking2 . GetClusterRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_cluster_ranking_score ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_cluster_ranking_score_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getClusterRankingScoreByUserId 사용자 ID를 지정하여 클러스터 랭킹 스코어 취득 지정한 랭킹 및 클러스터에 대해 지정한 사용자가 등록한 클러스터 랭킹 스코어를 취득합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingScore 클러스터 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetClusterRankingScoreByUserId ( \u0026 ranking2 . GetClusterRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetClusterRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getClusterRankingScoreByUserId ( ( new GetClusterRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetClusterRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.GetClusterRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetClusterRankingScoreByUserIdResult result = client . getClusterRankingScoreByUserId ( new GetClusterRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); ClusterRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetClusterRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . GetClusterRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . GetClusterRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getClusterRankingScoreByUserId ( new Gs2Ranking2 . GetClusterRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_cluster_ranking_score_by_user_id ( ranking2 . GetClusterRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_user_id ( 'user-0001' ) . with_season ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_cluster_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_cluster_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteClusterRankingScoreByUserId 사용자 ID를 지정하여 클러스터 랭킹 스코어 삭제 지정한 사용자가 지정한 랭킹, 클러스터, 시즌에 등록한 클러스터 랭킹 스코어를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingScore 삭제한 클러스터 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteClusterRankingScoreByUserId ( \u0026 ranking2 . DeleteClusterRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteClusterRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteClusterRankingScoreByUserId ( ( new DeleteClusterRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteClusterRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.DeleteClusterRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteClusterRankingScoreByUserIdResult result = client . deleteClusterRankingScoreByUserId ( new DeleteClusterRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); ClusterRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteClusterRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . DeleteClusterRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . DeleteClusterRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteClusterRankingScoreByUserId ( new Gs2Ranking2 . DeleteClusterRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_cluster_ranking_score_by_user_id ( ranking2 . DeleteClusterRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_cluster_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_cluster_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyClusterRankingScore 클러스터 랭킹의 스코어 검증 클러스터 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 이 클러스터 내에서 사용자가 등록한 스코어 값입니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item ClusterRankingScore 클러스터 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . VerifyClusterRankingScore ( \u0026 ranking2 . VerifyClusterRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), VerifyType : pointy . String ( \"less\" ), Season : nil , Score : pointy . Int64 ( 100 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\VerifyClusterRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e verifyClusterRankingScore ( ( new VerifyClusterRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withSeason ( null ) -\u003e withScore ( 100 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.VerifyClusterRankingScoreRequest ; import io.gs2.ranking2.result.VerifyClusterRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { VerifyClusterRankingScoreResult result = client . verifyClusterRankingScore ( new VerifyClusterRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100L ) . withMultiplyValueSpecifyingQuantity ( null ) ); ClusterRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . VerifyClusterRankingScoreResult \u003e asyncResult = null ; yield return client . VerifyClusterRankingScore ( new Gs2 . Gs2Ranking2 . Request . VerifyClusterRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithVerifyType ( \"less\" ) . WithSeason ( null ) . WithScore ( 100L ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . verifyClusterRankingScore ( new Gs2Ranking2 . VerifyClusterRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . verify_cluster_ranking_score ( ranking2 . VerifyClusterRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_verify_type ( 'less' ) . with_season ( None ) . with_score ( 100 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.verify_cluster_ranking_score ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.verify_cluster_ranking_score_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyClusterRankingScoreByUserId 사용자 ID를 지정하여 클러스터 랭킹의 스코어 검증 지정한 사용자의 클러스터 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 이 클러스터 내에서 사용자가 등록한 스코어 값입니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingScore 클러스터 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . VerifyClusterRankingScoreByUserId ( \u0026 ranking2 . VerifyClusterRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), VerifyType : pointy . String ( \"less\" ), Season : nil , Score : pointy . Int64 ( 100 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\VerifyClusterRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e verifyClusterRankingScoreByUserId ( ( new VerifyClusterRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withSeason ( null ) -\u003e withScore ( 100 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.VerifyClusterRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.VerifyClusterRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { VerifyClusterRankingScoreByUserIdResult result = client . verifyClusterRankingScoreByUserId ( new VerifyClusterRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100L ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); ClusterRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . VerifyClusterRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . VerifyClusterRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . VerifyClusterRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithVerifyType ( \"less\" ) . WithSeason ( null ) . WithScore ( 100L ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . verifyClusterRankingScoreByUserId ( new Gs2Ranking2 . VerifyClusterRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . verify_cluster_ranking_score_by_user_id ( ranking2 . VerifyClusterRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_verify_type ( 'less' ) . with_season ( None ) . with_score ( 100 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.verify_cluster_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.verify_cluster_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeClusterRankingReceivedRewards 클러스터 랭킹 보상 수령 이력 목록 조회 요청한 사용자의 클러스터 랭킹 보상 수령 이력의 페이지네이션 목록을 조회합니다. 랭킹 이름, 클러스터 이름, 시즌으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클러스터 랭킹 보상 수령 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeClusterRankingReceivedRewards ( \u0026 ranking2 . DescribeClusterRankingReceivedRewardsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), Season : pointy . Int64 ( 0 ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeClusterRankingReceivedRewardsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeClusterRankingReceivedRewards ( ( new DescribeClusterRankingReceivedRewardsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withSeason ( 0 ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeClusterRankingReceivedRewardsRequest ; import io.gs2.ranking2.result.DescribeClusterRankingReceivedRewardsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeClusterRankingReceivedRewardsResult result = client . describeClusterRankingReceivedRewards ( new DescribeClusterRankingReceivedRewardsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( 0L ) . withPageToken ( null ) . withLimit ( null ) ); List ClusterRankingReceivedReward \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeClusterRankingReceivedRewardsResult \u003e asyncResult = null ; yield return client . DescribeClusterRankingReceivedRewards ( new Gs2 . Gs2Ranking2 . Request . DescribeClusterRankingReceivedRewardsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithSeason ( 0L ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeClusterRankingReceivedRewards ( new Gs2Ranking2 . DescribeClusterRankingReceivedRewardsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( 0 ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_cluster_ranking_received_rewards ( ranking2 . DescribeClusterRankingReceivedRewardsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_season ( 0 ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_cluster_ranking_received_rewards ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = 0 , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_cluster_ranking_received_rewards_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = 0 , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeClusterRankingReceivedRewardsByUserId 사용자 ID를 지정하여 클러스터 랭킹 보상 수령 이력 목록 조회 지정한 사용자의 클러스터 랭킹 보상 수령 이력의 페이지네이션 목록을 조회합니다. 랭킹 이름, 클러스터 이름, 시즌으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 클러스터 랭킹 보상 수령 이력 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeClusterRankingReceivedRewardsByUserId ( \u0026 ranking2 . DescribeClusterRankingReceivedRewardsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), Season : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeClusterRankingReceivedRewardsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeClusterRankingReceivedRewardsByUserId ( ( new DescribeClusterRankingReceivedRewardsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeClusterRankingReceivedRewardsByUserIdRequest ; import io.gs2.ranking2.result.DescribeClusterRankingReceivedRewardsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeClusterRankingReceivedRewardsByUserIdResult result = client . describeClusterRankingReceivedRewardsByUserId ( new DescribeClusterRankingReceivedRewardsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ClusterRankingReceivedReward \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeClusterRankingReceivedRewardsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeClusterRankingReceivedRewardsByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeClusterRankingReceivedRewardsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeClusterRankingReceivedRewardsByUserId ( new Gs2Ranking2 . DescribeClusterRankingReceivedRewardsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_cluster_ranking_received_rewards_by_user_id ( ranking2 . DescribeClusterRankingReceivedRewardsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_cluster_ranking_received_rewards_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_cluster_ranking_received_rewards_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 기록 지정한 클러스터 랭킹 및 클러스터의 보상 수령 이력을 기록합니다. 실제로 보상을 수령하기 전에 이 기록이 필요합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item ClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CreateClusterRankingReceivedReward ( \u0026 ranking2 . CreateClusterRankingReceivedRewardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : pointy . Int64 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CreateClusterRankingReceivedRewardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e createClusterRankingReceivedReward ( ( new CreateClusterRankingReceivedRewardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CreateClusterRankingReceivedRewardRequest ; import io.gs2.ranking2.result.CreateClusterRankingReceivedRewardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CreateClusterRankingReceivedRewardResult result = client . createClusterRankingReceivedReward ( new CreateClusterRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0L ) ); ClusterRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CreateClusterRankingReceivedRewardResult \u003e asyncResult = null ; yield return client . CreateClusterRankingReceivedReward ( new Gs2 . Gs2Ranking2 . Request . CreateClusterRankingReceivedRewardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( 0L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . createClusterRankingReceivedReward ( new Gs2Ranking2 . CreateClusterRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . create_cluster_ranking_received_reward ( ranking2 . CreateClusterRankingReceivedRewardRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.create_cluster_ranking_received_reward ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.create_cluster_ranking_received_reward_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createClusterRankingReceivedRewardByUserId 사용자 ID를 지정하여 클러스터 랭킹 보상 수령 이력 기록 지정한 사용자를 대신하여, 지정한 클러스터 랭킹 및 클러스터의 보상 수령 이력을 기록합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CreateClusterRankingReceivedRewardByUserId ( \u0026 ranking2 . CreateClusterRankingReceivedRewardByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CreateClusterRankingReceivedRewardByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e createClusterRankingReceivedRewardByUserId ( ( new CreateClusterRankingReceivedRewardByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CreateClusterRankingReceivedRewardByUserIdRequest ; import io.gs2.ranking2.result.CreateClusterRankingReceivedRewardByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CreateClusterRankingReceivedRewardByUserIdResult result = client . createClusterRankingReceivedRewardByUserId ( new CreateClusterRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); ClusterRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CreateClusterRankingReceivedRewardByUserIdResult \u003e asyncResult = null ; yield return client . CreateClusterRankingReceivedRewardByUserId ( new Gs2 . Gs2Ranking2 . Request . CreateClusterRankingReceivedRewardByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . createClusterRankingReceivedRewardByUserId ( new Gs2Ranking2 . CreateClusterRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . create_cluster_ranking_received_reward_by_user_id ( ranking2 . CreateClusterRankingReceivedRewardByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.create_cluster_ranking_received_reward_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.create_cluster_ranking_received_reward_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; receiveClusterRankingReceivedReward 클러스터 랭킹 보상 수령 지정한 클러스터 랭킹, 클러스터, 시즌의 랭킹 보상을 수령합니다. 보상은 사용자의 랭킹 순위와 랭킹 모델의 보상 설정에 따라 결정됩니다. 보상 아이템을 부여하기 위한 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long 0 ~ 9223372036854775805 시즌 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item ClusterRankingModel 클러스터 랭킹 모델 acquireActions List 보상 수령 시 실행되는 입수 액션 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . ReceiveClusterRankingReceivedReward ( \u0026 ranking2 . ReceiveClusterRankingReceivedRewardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), Season : pointy . Int64 ( 0 ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item acquireActions := result . AcquireActions transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\ReceiveClusterRankingReceivedRewardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e receiveClusterRankingReceivedReward ( ( new ReceiveClusterRankingReceivedRewardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withSeason ( 0 ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $acquireActions = $result -\u003e getAcquireActions (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.ReceiveClusterRankingReceivedRewardRequest ; import io.gs2.ranking2.result.ReceiveClusterRankingReceivedRewardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { ReceiveClusterRankingReceivedRewardResult result = client . receiveClusterRankingReceivedReward ( new ReceiveClusterRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( 0L ) . withConfig ( null ) ); ClusterRankingModel item = result . getItem (); List AcquireAction \u003e acquireActions = result . getAcquireActions (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . ReceiveClusterRankingReceivedRewardResult \u003e asyncResult = null ; yield return client . ReceiveClusterRankingReceivedReward ( new Gs2 . Gs2Ranking2 . Request . ReceiveClusterRankingReceivedRewardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithSeason ( 0L ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var acquireActions = result . AcquireActions ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . receiveClusterRankingReceivedReward ( new Gs2Ranking2 . ReceiveClusterRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( 0 ) . withConfig ( null ) ); const item = result . getItem (); const acquireActions = result . getAcquireActions (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . receive_cluster_ranking_received_reward ( ranking2 . ReceiveClusterRankingReceivedRewardRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_season ( 0 ) . with_config ( None ) ) item = result . item acquire_actions = result . acquire_actions transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.receive_cluster_ranking_received_reward ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = 0 , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquireActions = result.acquireActions ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'ranking2' ) api_result_handler = client.receive_cluster_ranking_received_reward_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = 0 , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquireActions = result.acquireActions ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; receiveClusterRankingReceivedRewardByUserId 사용자 ID를 지정하여 클러스터 랭킹 보상 수령 지정한 사용자를 대신하여, 지정한 클러스터 랭킹, 클러스터, 시즌의 랭킹 보상을 수령합니다. 보상 아이템을 부여하기 위한 트랜잭션이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. season long 0 ~ 9223372036854775805 시즌 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingModel 클러스터 랭킹 모델 acquireActions List 보상 수령 시 실행되는 입수 액션 목록 transactionId string 발행된 트랜잭션 ID stampSheet string 교환 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . ReceiveClusterRankingReceivedRewardByUserId ( \u0026 ranking2 . ReceiveClusterRankingReceivedRewardByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), Season : pointy . Int64 ( 0 ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item acquireActions := result . AcquireActions transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\ReceiveClusterRankingReceivedRewardByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e receiveClusterRankingReceivedRewardByUserId ( ( new ReceiveClusterRankingReceivedRewardByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withSeason ( 0 ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $acquireActions = $result -\u003e getAcquireActions (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.ReceiveClusterRankingReceivedRewardByUserIdRequest ; import io.gs2.ranking2.result.ReceiveClusterRankingReceivedRewardByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { ReceiveClusterRankingReceivedRewardByUserIdResult result = client . receiveClusterRankingReceivedRewardByUserId ( new ReceiveClusterRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( 0L ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); ClusterRankingModel item = result . getItem (); List AcquireAction \u003e acquireActions = result . getAcquireActions (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . ReceiveClusterRankingReceivedRewardByUserIdResult \u003e asyncResult = null ; yield return client . ReceiveClusterRankingReceivedRewardByUserId ( new Gs2 . Gs2Ranking2 . Request . ReceiveClusterRankingReceivedRewardByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithSeason ( 0L ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var acquireActions = result . AcquireActions ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . receiveClusterRankingReceivedRewardByUserId ( new Gs2Ranking2 . ReceiveClusterRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( 0 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const acquireActions = result . getAcquireActions (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . receive_cluster_ranking_received_reward_by_user_id ( ranking2 . ReceiveClusterRankingReceivedRewardByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_season ( 0 ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item acquire_actions = result . acquire_actions transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.receive_cluster_ranking_received_reward_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = 0 , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquireActions = result.acquireActions ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'ranking2' ) api_result_handler = client.receive_cluster_ranking_received_reward_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = 0 , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acquireActions = result.acquireActions ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; getClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 조회 지정한 클러스터 랭킹 및 클러스터의 보상 수령 이력을 조회합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item ClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetClusterRankingReceivedReward ( \u0026 ranking2 . GetClusterRankingReceivedRewardRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : pointy . Int64 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetClusterRankingReceivedRewardRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getClusterRankingReceivedReward ( ( new GetClusterRankingReceivedRewardRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetClusterRankingReceivedRewardRequest ; import io.gs2.ranking2.result.GetClusterRankingReceivedRewardResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetClusterRankingReceivedRewardResult result = client . getClusterRankingReceivedReward ( new GetClusterRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0L ) ); ClusterRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetClusterRankingReceivedRewardResult \u003e asyncResult = null ; yield return client . GetClusterRankingReceivedReward ( new Gs2 . Gs2Ranking2 . Request . GetClusterRankingReceivedRewardRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( 0L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getClusterRankingReceivedReward ( new Gs2Ranking2 . GetClusterRankingReceivedRewardRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_cluster_ranking_received_reward ( ranking2 . GetClusterRankingReceivedRewardRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_cluster_ranking_received_reward ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_cluster_ranking_received_reward_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getClusterRankingReceivedRewardByUserId 사용자 ID를 지정하여 클러스터 랭킹 보상 수령 이력 조회 지정한 사용자의 지정한 클러스터 랭킹 및 클러스터의 보상 수령 이력을 조회합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingReceivedReward 클러스터 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetClusterRankingReceivedRewardByUserId ( \u0026 ranking2 . GetClusterRankingReceivedRewardByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetClusterRankingReceivedRewardByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getClusterRankingReceivedRewardByUserId ( ( new GetClusterRankingReceivedRewardByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetClusterRankingReceivedRewardByUserIdRequest ; import io.gs2.ranking2.result.GetClusterRankingReceivedRewardByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetClusterRankingReceivedRewardByUserIdResult result = client . getClusterRankingReceivedRewardByUserId ( new GetClusterRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); ClusterRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetClusterRankingReceivedRewardByUserIdResult \u003e asyncResult = null ; yield return client . GetClusterRankingReceivedRewardByUserId ( new Gs2 . Gs2Ranking2 . Request . GetClusterRankingReceivedRewardByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getClusterRankingReceivedRewardByUserId ( new Gs2Ranking2 . GetClusterRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_cluster_ranking_received_reward_by_user_id ( ranking2 . GetClusterRankingReceivedRewardByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_cluster_ranking_received_reward_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_cluster_ranking_received_reward_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteClusterRankingReceivedRewardByUserId 사용자 ID를 지정하여 클러스터 랭킹 보상 수령 이력 삭제 지정한 사용자의 지정한 랭킹, 클러스터, 시즌의 클러스터 랭킹 보상 수령 이력을 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. userId string  ~ 128자 사용자ID season long  0 ~ 9223372036854775805 시즌 GS2-Schedule 이벤트의 반복 횟수에 대응하는 시즌 번호입니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingReceivedReward 삭제한 클러스터 랭킹 보상 수령 이력 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteClusterRankingReceivedRewardByUserId ( \u0026 ranking2 . DeleteClusterRankingReceivedRewardByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteClusterRankingReceivedRewardByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteClusterRankingReceivedRewardByUserId ( ( new DeleteClusterRankingReceivedRewardByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteClusterRankingReceivedRewardByUserIdRequest ; import io.gs2.ranking2.result.DeleteClusterRankingReceivedRewardByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteClusterRankingReceivedRewardByUserIdResult result = client . deleteClusterRankingReceivedRewardByUserId ( new DeleteClusterRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); ClusterRankingReceivedReward item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteClusterRankingReceivedRewardByUserIdResult \u003e asyncResult = null ; yield return client . DeleteClusterRankingReceivedRewardByUserId ( new Gs2 . Gs2Ranking2 . Request . DeleteClusterRankingReceivedRewardByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteClusterRankingReceivedRewardByUserId ( new Gs2Ranking2 . DeleteClusterRankingReceivedRewardByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_cluster_ranking_received_reward_by_user_id ( ranking2 . DeleteClusterRankingReceivedRewardByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_cluster_ranking_received_reward_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_cluster_ranking_received_reward_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeClusterRankings 클러스터 랭킹 목록 조회 지정한 랭킹 및 클러스터의 클러스터 랭킹 데이터의 페이지네이션 목록을 조회합니다. 랭킹 데이터에는 순위, 스코어, 사용자 정보가 포함됩니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 시즌이 속한 클러스터(길드, 게더링, 또는 그룹)의 이름입니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클러스터 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeClusterRankings ( \u0026 ranking2 . DescribeClusterRankingsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), Season : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeClusterRankingsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeClusterRankings ( ( new DescribeClusterRankingsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeClusterRankingsRequest ; import io.gs2.ranking2.result.DescribeClusterRankingsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeClusterRankingsResult result = client . describeClusterRankings ( new DescribeClusterRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) ); List ClusterRankingData \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeClusterRankingsResult \u003e asyncResult = null ; yield return client . DescribeClusterRankings ( new Gs2 . Gs2Ranking2 . Request . DescribeClusterRankingsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeClusterRankings ( new Gs2Ranking2 . DescribeClusterRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_cluster_rankings ( ranking2 . DescribeClusterRankingsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_cluster_rankings ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_cluster_rankings_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeClusterRankingsByUserId 사용자 ID를 지정하여 클러스터 랭킹 목록 조회 지정한 사용자를 대신하여, 지정한 랭킹 및 클러스터의 클러스터 랭킹 데이터의 페이지네이션 목록을 조회합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 시즌이 속한 클러스터(길드, 게더링, 또는 그룹)의 이름입니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 클러스터 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeClusterRankingsByUserId ( \u0026 ranking2 . DescribeClusterRankingsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), Season : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeClusterRankingsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeClusterRankingsByUserId ( ( new DescribeClusterRankingsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeClusterRankingsByUserIdRequest ; import io.gs2.ranking2.result.DescribeClusterRankingsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeClusterRankingsByUserIdResult result = client . describeClusterRankingsByUserId ( new DescribeClusterRankingsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List ClusterRankingData \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeClusterRankingsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeClusterRankingsByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeClusterRankingsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeClusterRankingsByUserId ( new Gs2Ranking2 . DescribeClusterRankingsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_cluster_rankings_by_user_id ( ranking2 . DescribeClusterRankingsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_cluster_rankings_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_cluster_rankings_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getClusterRanking 클러스터 랭킹 조회 지정한 클러스터 랭킹에서 요청한 사용자의 순위와 스코어를 조회합니다. 랭킹 데이터는 클러스터 내에 등록된 스코어로부터 계산됩니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 시즌이 속한 클러스터(길드, 게더링, 또는 그룹)의 이름입니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item ClusterRankingData 클러스터 랭킹 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetClusterRanking ( \u0026 ranking2 . GetClusterRankingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetClusterRankingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getClusterRanking ( ( new GetClusterRankingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetClusterRankingRequest ; import io.gs2.ranking2.result.GetClusterRankingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetClusterRankingResult result = client . getClusterRanking ( new GetClusterRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( null ) ); ClusterRankingData item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetClusterRankingResult \u003e asyncResult = null ; yield return client . GetClusterRanking ( new Gs2 . Gs2Ranking2 . Request . GetClusterRankingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getClusterRanking ( new Gs2Ranking2 . GetClusterRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_cluster_ranking ( ranking2 . GetClusterRankingRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_cluster_ranking ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , season = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_cluster_ranking_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , accessToken = \"accessToken-0001\" , season = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getClusterRankingByUserId 사용자 ID를 지정하여 클러스터 랭킹 조회 지정한 클러스터 랭킹에서 지정한 사용자의 순위와 스코어를 조회합니다. 시즌을 선택적으로 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 시즌이 속한 클러스터(길드, 게더링, 또는 그룹)의 이름입니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item ClusterRankingData 클러스터 랭킹 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetClusterRankingByUserId ( \u0026 ranking2 . GetClusterRankingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), ClusterName : pointy . String ( \"cluster-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetClusterRankingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getClusterRankingByUserId ( ( new GetClusterRankingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withClusterName ( \"cluster-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetClusterRankingByUserIdRequest ; import io.gs2.ranking2.result.GetClusterRankingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetClusterRankingByUserIdResult result = client . getClusterRankingByUserId ( new GetClusterRankingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); ClusterRankingData item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetClusterRankingByUserIdResult \u003e asyncResult = null ; yield return client . GetClusterRankingByUserId ( new Gs2 . Gs2Ranking2 . Request . GetClusterRankingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithClusterName ( \"cluster-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getClusterRankingByUserId ( new Gs2Ranking2 . GetClusterRankingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withClusterName ( \"cluster-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_cluster_ranking_by_user_id ( ranking2 . GetClusterRankingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_cluster_name ( 'cluster-0001' ) . with_user_id ( 'user-0001' ) . with_season ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_cluster_ranking_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_cluster_ranking_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , clusterName = \"cluster-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSubscribes 구독 대상 사용자 정보 목록 취득 요청한 사용자가 구독 랭킹을 위해 구독하고 있는 사용자의 페이지네이션이 포함된 목록을 취득합니다. 랭킹 이름으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 구독 대상 사용자 정보 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscribes ( \u0026 ranking2 . DescribeSubscribesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeSubscribesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeSubscribes ( ( new DescribeSubscribesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeSubscribesRequest ; import io.gs2.ranking2.result.DescribeSubscribesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeSubscribesResult result = client . describeSubscribes ( new DescribeSubscribesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List SubscribeUser \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeSubscribesResult \u003e asyncResult = null ; yield return client . DescribeSubscribes ( new Gs2 . Gs2Ranking2 . Request . DescribeSubscribesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeSubscribes ( new Gs2Ranking2 . DescribeSubscribesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_subscribes ( ranking2 . DescribeSubscribesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_subscribes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_subscribes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeSubscribesByUserId 사용자 ID를 지정하여 구독 대상 사용자 정보 목록 취득 지정한 사용자가 구독 랭킹을 위해 구독하고 있는 사용자의 페이지네이션이 포함된 목록을 취득합니다. 랭킹 이름으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 구독 대상 사용자 정보 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscribesByUserId ( \u0026 ranking2 . DescribeSubscribesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeSubscribesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeSubscribesByUserId ( ( new DescribeSubscribesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeSubscribesByUserIdRequest ; import io.gs2.ranking2.result.DescribeSubscribesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeSubscribesByUserIdResult result = client . describeSubscribesByUserId ( new DescribeSubscribesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List SubscribeUser \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeSubscribesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeSubscribesByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeSubscribesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeSubscribesByUserId ( new Gs2Ranking2 . DescribeSubscribesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_subscribes_by_user_id ( ranking2 . DescribeSubscribesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_subscribes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_subscribes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; addSubscribe 구독 대상 사용자 ID 등록 지정한 구독 랭킹에서 지정한 대상 사용자를 구독합니다. 대상 사용자의 스코어가 요청한 사용자의 구독 랭킹에 포함됩니다. 구독이 추가되면 대상 사용자의 기존 스코어가 구독자의 랭킹 데이터에 동기화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 구독 대상 사용자 ID Result 타입 설명 item SubscribeUser 등록한 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . AddSubscribe ( \u0026 ranking2 . AddSubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\AddSubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e addSubscribe ( ( new AddSubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.AddSubscribeRequest ; import io.gs2.ranking2.result.AddSubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { AddSubscribeResult result = client . addSubscribe ( new AddSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . AddSubscribeResult \u003e asyncResult = null ; yield return client . AddSubscribe ( new Gs2 . Gs2Ranking2 . Request . AddSubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . addSubscribe ( new Gs2Ranking2 . AddSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . add_subscribe ( ranking2 . AddSubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.add_subscribe ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.add_subscribe_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; addSubscribeByUserId 사용자 ID를 지정하여 구독 대상 사용자 ID 등록 지정한 사용자를 대신하여, 지정한 구독 랭킹에서 지정한 대상 사용자를 구독합니다. 기존 스코어가 구독자의 랭킹 데이터에 동기화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독 대상 사용자 ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeUser 등록한 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . AddSubscribeByUserId ( \u0026 ranking2 . AddSubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\AddSubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e addSubscribeByUserId ( ( new AddSubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.AddSubscribeByUserIdRequest ; import io.gs2.ranking2.result.AddSubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { AddSubscribeByUserIdResult result = client . addSubscribeByUserId ( new AddSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . AddSubscribeByUserIdResult \u003e asyncResult = null ; yield return client . AddSubscribeByUserId ( new Gs2 . Gs2Ranking2 . Request . AddSubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . addSubscribeByUserId ( new Gs2Ranking2 . AddSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . add_subscribe_by_user_id ( ranking2 . AddSubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.add_subscribe_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.add_subscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSubscribeRankingScores 구독 랭킹 스코어 목록 취득 요청한 사용자가 등록한 구독 랭킹 스코어의 페이지네이션이 포함된 목록을 취득합니다. 랭킹 이름으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 구독 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscribeRankingScores ( \u0026 ranking2 . DescribeSubscribeRankingScoresRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeSubscribeRankingScoresRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeSubscribeRankingScores ( ( new DescribeSubscribeRankingScoresRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeSubscribeRankingScoresRequest ; import io.gs2.ranking2.result.DescribeSubscribeRankingScoresResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeSubscribeRankingScoresResult result = client . describeSubscribeRankingScores ( new DescribeSubscribeRankingScoresRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List SubscribeRankingScore \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeSubscribeRankingScoresResult \u003e asyncResult = null ; yield return client . DescribeSubscribeRankingScores ( new Gs2 . Gs2Ranking2 . Request . DescribeSubscribeRankingScoresRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeSubscribeRankingScores ( new Gs2Ranking2 . DescribeSubscribeRankingScoresRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_subscribe_ranking_scores ( ranking2 . DescribeSubscribeRankingScoresRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_subscribe_ranking_scores ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_subscribe_ranking_scores_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeSubscribeRankingScoresByUserId 사용자 ID를 지정하여 구독 랭킹 스코어 목록 취득 지정한 사용자가 등록한 구독 랭킹 스코어의 페이지네이션이 포함된 목록을 취득합니다. 랭킹 이름으로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 구독 랭킹 스코어 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscribeRankingScoresByUserId ( \u0026 ranking2 . DescribeSubscribeRankingScoresByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeSubscribeRankingScoresByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeSubscribeRankingScoresByUserId ( ( new DescribeSubscribeRankingScoresByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeSubscribeRankingScoresByUserIdRequest ; import io.gs2.ranking2.result.DescribeSubscribeRankingScoresByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeSubscribeRankingScoresByUserIdResult result = client . describeSubscribeRankingScoresByUserId ( new DescribeSubscribeRankingScoresByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List SubscribeRankingScore \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeSubscribeRankingScoresByUserIdResult \u003e asyncResult = null ; yield return client . DescribeSubscribeRankingScoresByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeSubscribeRankingScoresByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeSubscribeRankingScoresByUserId ( new Gs2Ranking2 . DescribeSubscribeRankingScoresByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_subscribe_ranking_scores_by_user_id ( ranking2 . DescribeSubscribeRankingScoresByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_subscribe_ranking_scores_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_subscribe_ranking_scores_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; putSubscribeRankingScore 구독 랭킹 스코어 등록 지정한 구독 랭킹에 스코어를 등록합니다. 스코어는 모든 구독자의 랭킹 데이터에 반영됩니다. 스코어는 랭킹 모델에서 정의된 범위 내에 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item SubscribeRankingScore 등록한 구독 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . PutSubscribeRankingScore ( \u0026 ranking2 . PutSubscribeRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Score : pointy . Int64 ( 100 ), Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\PutSubscribeRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e putSubscribeRankingScore ( ( new PutSubscribeRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withScore ( 100 ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.PutSubscribeRankingScoreRequest ; import io.gs2.ranking2.result.PutSubscribeRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { PutSubscribeRankingScoreResult result = client . putSubscribeRankingScore ( new PutSubscribeRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScore ( 100L ) . withMetadata ( null ) ); SubscribeRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . PutSubscribeRankingScoreResult \u003e asyncResult = null ; yield return client . PutSubscribeRankingScore ( new Gs2 . Gs2Ranking2 . Request . PutSubscribeRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithScore ( 100L ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . putSubscribeRankingScore ( new Gs2Ranking2 . PutSubscribeRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withScore ( 100 ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . put_subscribe_ranking_score ( ranking2 . PutSubscribeRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_score ( 100 ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.put_subscribe_ranking_score ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , score = 100 , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.put_subscribe_ranking_score_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , score = 100 , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; putSubscribeRankingScoreByUserId 사용자 ID를 지정하여 구독 랭킹 스코어 등록 지정한 사용자를 대신하여, 지정한 구독 랭킹에 스코어를 등록합니다. 스코어는 모든 구독자의 랭킹 데이터에 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID score long  0 ~ 9223372036854775805 스코어 metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeRankingScore 등록한 구독 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . PutSubscribeRankingScoreByUserId ( \u0026 ranking2 . PutSubscribeRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Score : nil , Metadata : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\PutSubscribeRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e putSubscribeRankingScoreByUserId ( ( new PutSubscribeRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withScore ( null ) -\u003e withMetadata ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.PutSubscribeRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.PutSubscribeRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { PutSubscribeRankingScoreByUserIdResult result = client . putSubscribeRankingScoreByUserId ( new PutSubscribeRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withScore ( null ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); SubscribeRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . PutSubscribeRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . PutSubscribeRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . PutSubscribeRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithScore ( null ) . WithMetadata ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . putSubscribeRankingScoreByUserId ( new Gs2Ranking2 . PutSubscribeRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withScore ( null ) . withMetadata ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . put_subscribe_ranking_score_by_user_id ( ranking2 . PutSubscribeRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_score ( None ) . with_metadata ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.put_subscribe_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , score = nil , metadata = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.put_subscribe_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , score = nil , metadata = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribeRankingScore 구독 랭킹 스코어 취득 지정한 랭킹에 대해 요청한 사용자가 등록한 구독 랭킹 스코어를 취득합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 Result 타입 설명 item SubscribeRankingScore 구독 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetSubscribeRankingScore ( \u0026 ranking2 . GetSubscribeRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : pointy . Int64 ( 0 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetSubscribeRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getSubscribeRankingScore ( ( new GetSubscribeRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( 0 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetSubscribeRankingScoreRequest ; import io.gs2.ranking2.result.GetSubscribeRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetSubscribeRankingScoreResult result = client . getSubscribeRankingScore ( new GetSubscribeRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0L ) ); SubscribeRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetSubscribeRankingScoreResult \u003e asyncResult = null ; yield return client . GetSubscribeRankingScore ( new Gs2 . Gs2Ranking2 . Request . GetSubscribeRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( 0L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getSubscribeRankingScore ( new Gs2Ranking2 . GetSubscribeRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( 0 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_subscribe_ranking_score ( ranking2 . GetSubscribeRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( 0 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_subscribe_ranking_score ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_subscribe_ranking_score_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = 0 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribeRankingScoreByUserId 사용자 ID를 지정하여 구독 랭킹 스코어 취득 지정한 랭킹에 대해 지정한 사용자가 등록한 구독 랭킹 스코어를 취득합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeRankingScore 구독 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetSubscribeRankingScoreByUserId ( \u0026 ranking2 . GetSubscribeRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetSubscribeRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getSubscribeRankingScoreByUserId ( ( new GetSubscribeRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetSubscribeRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.GetSubscribeRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetSubscribeRankingScoreByUserIdResult result = client . getSubscribeRankingScoreByUserId ( new GetSubscribeRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); SubscribeRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetSubscribeRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . GetSubscribeRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . GetSubscribeRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getSubscribeRankingScoreByUserId ( new Gs2Ranking2 . GetSubscribeRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_subscribe_ranking_score_by_user_id ( ranking2 . GetSubscribeRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_subscribe_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_subscribe_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSubscribeRankingScoreByUserId 사용자 ID를 지정하여 구독 랭킹 스코어 삭제 지정한 사용자가 지정한 랭킹 및 시즌에 등록한 구독 랭킹 스코어를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeRankingScore 삭제한 구독 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteSubscribeRankingScoreByUserId ( \u0026 ranking2 . DeleteSubscribeRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : pointy . Int64 ( 0 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteSubscribeRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteSubscribeRankingScoreByUserId ( ( new DeleteSubscribeRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( 0 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteSubscribeRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.DeleteSubscribeRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteSubscribeRankingScoreByUserIdResult result = client . deleteSubscribeRankingScoreByUserId ( new DeleteSubscribeRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0L ) . withTimeOffsetToken ( null ) ); SubscribeRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteSubscribeRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . DeleteSubscribeRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . DeleteSubscribeRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( 0L ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteSubscribeRankingScoreByUserId ( new Gs2Ranking2 . DeleteSubscribeRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( 0 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_subscribe_ranking_score_by_user_id ( ranking2 . DeleteSubscribeRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( 0 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_subscribe_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_subscribe_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = 0 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifySubscribeRankingScore 구독 랭킹의 스코어를 검증 구독 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item SubscribeRankingScore 구독 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . VerifySubscribeRankingScore ( \u0026 ranking2 . VerifySubscribeRankingScoreRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), VerifyType : pointy . String ( \"less\" ), Season : nil , Score : pointy . Int64 ( 100 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\VerifySubscribeRankingScoreRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e verifySubscribeRankingScore ( ( new VerifySubscribeRankingScoreRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withSeason ( null ) -\u003e withScore ( 100 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.VerifySubscribeRankingScoreRequest ; import io.gs2.ranking2.result.VerifySubscribeRankingScoreResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { VerifySubscribeRankingScoreResult result = client . verifySubscribeRankingScore ( new VerifySubscribeRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100L ) . withMultiplyValueSpecifyingQuantity ( null ) ); SubscribeRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . VerifySubscribeRankingScoreResult \u003e asyncResult = null ; yield return client . VerifySubscribeRankingScore ( new Gs2 . Gs2Ranking2 . Request . VerifySubscribeRankingScoreRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithVerifyType ( \"less\" ) . WithSeason ( null ) . WithScore ( 100L ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . verifySubscribeRankingScore ( new Gs2Ranking2 . VerifySubscribeRankingScoreRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . verify_subscribe_ranking_score ( ranking2 . VerifySubscribeRankingScoreRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_verify_type ( 'less' ) . with_season ( None ) . with_score ( 100 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.verify_subscribe_ranking_score ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.verify_subscribe_ranking_score_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifySubscribeRankingScoreByUserId 사용자 ID를 지정하여 구독 랭킹의 스코어를 검증 지정한 사용자의 구독 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeRankingScore 구독 랭킹 스코어 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . VerifySubscribeRankingScoreByUserId ( \u0026 ranking2 . VerifySubscribeRankingScoreByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), VerifyType : pointy . String ( \"less\" ), Season : nil , Score : pointy . Int64 ( 100 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\VerifySubscribeRankingScoreByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e verifySubscribeRankingScoreByUserId ( ( new VerifySubscribeRankingScoreByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withSeason ( null ) -\u003e withScore ( 100 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.VerifySubscribeRankingScoreByUserIdRequest ; import io.gs2.ranking2.result.VerifySubscribeRankingScoreByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { VerifySubscribeRankingScoreByUserIdResult result = client . verifySubscribeRankingScoreByUserId ( new VerifySubscribeRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100L ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); SubscribeRankingScore item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . VerifySubscribeRankingScoreByUserIdResult \u003e asyncResult = null ; yield return client . VerifySubscribeRankingScoreByUserId ( new Gs2 . Gs2Ranking2 . Request . VerifySubscribeRankingScoreByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithVerifyType ( \"less\" ) . WithSeason ( null ) . WithScore ( 100L ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . verifySubscribeRankingScoreByUserId ( new Gs2Ranking2 . VerifySubscribeRankingScoreByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withVerifyType ( \"less\" ) . withSeason ( null ) . withScore ( 100 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . verify_subscribe_ranking_score_by_user_id ( ranking2 . VerifySubscribeRankingScoreByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_verify_type ( 'less' ) . with_season ( None ) . with_score ( 100 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.verify_subscribe_ranking_score_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.verify_subscribe_ranking_score_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , verifyType = \"less\" , season = nil , score = 100 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSubscribeRankings 구독 랭킹 목록 취득 지정한 랭킹의 구독 랭킹 데이터의 페이지네이션이 포함된 목록을 취득합니다. 랭킹에는 요청한 사용자가 구독하고 있는 사용자의 스코어만 포함됩니다. 옵션으로 시즌을 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 구독 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscribeRankings ( \u0026 ranking2 . DescribeSubscribeRankingsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), Season : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeSubscribeRankingsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeSubscribeRankings ( ( new DescribeSubscribeRankingsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeSubscribeRankingsRequest ; import io.gs2.ranking2.result.DescribeSubscribeRankingsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeSubscribeRankingsResult result = client . describeSubscribeRankings ( new DescribeSubscribeRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SubscribeRankingData \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeSubscribeRankingsResult \u003e asyncResult = null ; yield return client . DescribeSubscribeRankings ( new Gs2 . Gs2Ranking2 . Request . DescribeSubscribeRankingsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeSubscribeRankings ( new Gs2Ranking2 . DescribeSubscribeRankingsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_subscribe_rankings ( ranking2 . DescribeSubscribeRankingsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_subscribe_rankings ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_subscribe_rankings_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeSubscribeRankingsByUserId 사용자 ID를 지정하여 구독 랭킹 목록 취득 지정한 사용자를 대신하여, 지정한 랭킹의 구독 랭킹 데이터의 페이지네이션이 포함된 목록을 취득합니다. 랭킹에는 지정한 사용자가 구독하고 있는 사용자의 스코어만 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long 0 ~ 9223372036854775805 시즌 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 구독 랭킹 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscribeRankingsByUserId ( \u0026 ranking2 . DescribeSubscribeRankingsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), Season : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeSubscribeRankingsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeSubscribeRankingsByUserId ( ( new DescribeSubscribeRankingsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withSeason ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeSubscribeRankingsByUserIdRequest ; import io.gs2.ranking2.result.DescribeSubscribeRankingsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeSubscribeRankingsByUserIdResult result = client . describeSubscribeRankingsByUserId ( new DescribeSubscribeRankingsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List SubscribeRankingData \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeSubscribeRankingsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeSubscribeRankingsByUserId ( new Gs2 . Gs2Ranking2 . Request . DescribeSubscribeRankingsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithSeason ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeSubscribeRankingsByUserId ( new Gs2Ranking2 . DescribeSubscribeRankingsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withRankingName ( \"ranking-0001\" ) . withSeason ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_subscribe_rankings_by_user_id ( ranking2 . DescribeSubscribeRankingsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_season ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_subscribe_rankings_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_subscribe_rankings_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , rankingName = \"ranking-0001\" , season = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getSubscribeRanking 구독 랭킹 취득 구독 랭킹 내 요청한 사용자(또는 지정한 스코어러)의 순위와 스코어를 취득합니다. 옵션으로 시즌과 스코어러 사용자 ID를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 season long 0 ~ 9223372036854775805 시즌 scorerUserId string ~ 128자 점수를 획득한 사용자ID 이 점수를 달성한 플레이어의 사용자ID입니다. 구독 랭킹에서는 구독한 사용자의 점수가 엔트리가 되므로, 이 필드는 어느 친구의 점수인지를 식별합니다. Result 타입 설명 item SubscribeRankingData 구독 랭킹 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetSubscribeRanking ( \u0026 ranking2 . GetSubscribeRankingRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Season : nil , ScorerUserId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetSubscribeRankingRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getSubscribeRanking ( ( new GetSubscribeRankingRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withSeason ( null ) -\u003e withScorerUserId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetSubscribeRankingRequest ; import io.gs2.ranking2.result.GetSubscribeRankingResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetSubscribeRankingResult result = client . getSubscribeRanking ( new GetSubscribeRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( null ) . withScorerUserId ( null ) ); SubscribeRankingData item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetSubscribeRankingResult \u003e asyncResult = null ; yield return client . GetSubscribeRanking ( new Gs2 . Gs2Ranking2 . Request . GetSubscribeRankingRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithSeason ( null ) . WithScorerUserId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getSubscribeRanking ( new Gs2Ranking2 . GetSubscribeRankingRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withSeason ( null ) . withScorerUserId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_subscribe_ranking ( ranking2 . GetSubscribeRankingRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_season ( None ) . with_scorer_user_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_subscribe_ranking ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = nil , scorerUserId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_subscribe_ranking_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , season = nil , scorerUserId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribeRankingByUserId 사용자 ID를 지정하여 구독 랭킹 취득 구독 랭킹 내 지정한 사용자(또는 지정한 스코어러)의 순위와 스코어를 취득합니다. 옵션으로 시즌과 스코어러 사용자 ID를 지정할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID season long 0 ~ 9223372036854775805 시즌 scorerUserId string ~ 128자 점수를 획득한 사용자ID 이 점수를 달성한 플레이어의 사용자ID입니다. 구독 랭킹에서는 구독한 사용자의 점수가 엔트리가 되므로, 이 필드는 어느 친구의 점수인지를 식별합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeRankingData 구독 랭킹 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetSubscribeRankingByUserId ( \u0026 ranking2 . GetSubscribeRankingByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), Season : nil , ScorerUserId : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetSubscribeRankingByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getSubscribeRankingByUserId ( ( new GetSubscribeRankingByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withSeason ( null ) -\u003e withScorerUserId ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetSubscribeRankingByUserIdRequest ; import io.gs2.ranking2.result.GetSubscribeRankingByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetSubscribeRankingByUserIdResult result = client . getSubscribeRankingByUserId ( new GetSubscribeRankingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withScorerUserId ( null ) . withTimeOffsetToken ( null ) ); SubscribeRankingData item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetSubscribeRankingByUserIdResult \u003e asyncResult = null ; yield return client . GetSubscribeRankingByUserId ( new Gs2 . Gs2Ranking2 . Request . GetSubscribeRankingByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithSeason ( null ) . WithScorerUserId ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getSubscribeRankingByUserId ( new Gs2Ranking2 . GetSubscribeRankingByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withSeason ( null ) . withScorerUserId ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_subscribe_ranking_by_user_id ( ranking2 . GetSubscribeRankingByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_season ( None ) . with_scorer_user_id ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_subscribe_ranking_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = nil , scorerUserId = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_subscribe_ranking_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , season = nil , scorerUserId = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribe 구독 대상 사용자 ID 취득 지정한 구독 랭킹에서 지정한 대상 사용자의 구독 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 구독 대상 사용자 ID Result 타입 설명 item SubscribeUser 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetSubscribe ( \u0026 ranking2 . GetSubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetSubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getSubscribe ( ( new GetSubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetSubscribeRequest ; import io.gs2.ranking2.result.GetSubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetSubscribeResult result = client . getSubscribe ( new GetSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetSubscribeResult \u003e asyncResult = null ; yield return client . GetSubscribe ( new Gs2 . Gs2Ranking2 . Request . GetSubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getSubscribe ( new Gs2Ranking2 . GetSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_subscribe ( ranking2 . GetSubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_subscribe ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_subscribe_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribeByUserId 사용자 ID를 지정하여 구독 대상 사용자 ID 취득 지정한 사용자에 있어서, 지정한 구독 랭킹의 지정한 대상 사용자의 구독 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독 대상 사용자 ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeUser 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetSubscribeByUserId ( \u0026 ranking2 . GetSubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetSubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getSubscribeByUserId ( ( new GetSubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetSubscribeByUserIdRequest ; import io.gs2.ranking2.result.GetSubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetSubscribeByUserIdResult result = client . getSubscribeByUserId ( new GetSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetSubscribeByUserIdResult \u003e asyncResult = null ; yield return client . GetSubscribeByUserId ( new Gs2 . Gs2Ranking2 . Request . GetSubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getSubscribeByUserId ( new Gs2Ranking2 . GetSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_subscribe_by_user_id ( ranking2 . GetSubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_subscribe_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_subscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSubscribe 구독 대상 사용자 ID 삭제 지정한 구독 랭킹에서 지정한 대상 사용자의 구독을 해제합니다. 대상 사용자의 스코어는 더 이상 요청한 사용자의 구독 랭킹에 표시되지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetUserId string  ~ 128자 구독 대상 사용자 ID Result 타입 설명 item SubscribeUser 삭제한 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteSubscribe ( \u0026 ranking2 . DeleteSubscribeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteSubscribeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteSubscribe ( ( new DeleteSubscribeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteSubscribeRequest ; import io.gs2.ranking2.result.DeleteSubscribeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteSubscribeResult result = client . deleteSubscribe ( new DeleteSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteSubscribeResult \u003e asyncResult = null ; yield return client . DeleteSubscribe ( new Gs2 . Gs2Ranking2 . Request . DeleteSubscribeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetUserId ( \"user-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteSubscribe ( new Gs2Ranking2 . DeleteSubscribeRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetUserId ( \"user-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_subscribe ( ranking2 . DeleteSubscribeRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_user_id ( 'user-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_subscribe ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_subscribe_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , accessToken = \"accessToken-0001\" , targetUserId = \"user-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSubscribeByUserId 사용자 ID를 지정하여 구독 대상 사용자 ID 삭제 지정한 사용자를 대신하여, 지정한 구독 랭킹에서 지정한 대상 사용자의 구독을 해제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetUserId string  ~ 128자 구독 대상 사용자 ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SubscribeUser 삭제한 구독 대상 사용자 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteSubscribeByUserId ( \u0026 ranking2 . DeleteSubscribeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetUserId : pointy . String ( \"user-0002\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteSubscribeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteSubscribeByUserId ( ( new DeleteSubscribeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetUserId ( \"user-0002\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteSubscribeByUserIdRequest ; import io.gs2.ranking2.result.DeleteSubscribeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteSubscribeByUserIdResult result = client . deleteSubscribeByUserId ( new DeleteSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); SubscribeUser item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteSubscribeByUserIdResult \u003e asyncResult = null ; yield return client . DeleteSubscribeByUserId ( new Gs2 . Gs2Ranking2 . Request . DeleteSubscribeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetUserId ( \"user-0002\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteSubscribeByUserId ( new Gs2Ranking2 . DeleteSubscribeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) . withUserId ( \"user-0001\" ) . withTargetUserId ( \"user-0002\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_subscribe_by_user_id ( ranking2 . DeleteSubscribeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) . with_user_id ( 'user-0001' ) . with_target_user_id ( 'user-0002' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_subscribe_by_user_id ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_subscribe_by_user_id_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , userId = \"user-0001\" , targetUserId = \"user-0002\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGlobalRankingModels 글로벌 랭킹 모델 목록 취득 현재 활성화된 글로벌 랭킹 모델의 목록을 취득합니다. 글로벌 랭킹 모델은 스코어 범위, 정렬 순서, 보상 설정, 진입/접근 기간 이벤트 등의 랭킹 설정을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 글로벌 랭킹 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeGlobalRankingModels ( \u0026 ranking2 . DescribeGlobalRankingModelsRequest { NamespaceName : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeGlobalRankingModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeGlobalRankingModels ( ( new DescribeGlobalRankingModelsRequest ()) -\u003e withNamespaceName ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeGlobalRankingModelsRequest ; import io.gs2.ranking2.result.DescribeGlobalRankingModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeGlobalRankingModelsResult result = client . describeGlobalRankingModels ( new DescribeGlobalRankingModelsRequest () . withNamespaceName ( null ) ); List GlobalRankingModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeGlobalRankingModelsResult \u003e asyncResult = null ; yield return client . DescribeGlobalRankingModels ( new Gs2 . Gs2Ranking2 . Request . DescribeGlobalRankingModelsRequest () . WithNamespaceName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeGlobalRankingModels ( new Gs2Ranking2 . DescribeGlobalRankingModelsRequest () . withNamespaceName ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_global_ranking_models ( ranking2 . DescribeGlobalRankingModelsRequest () . with_namespace_name ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_global_ranking_models ({ namespaceName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_global_ranking_models_async ({ namespaceName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getGlobalRankingModel 글로벌 랭킹 모델 취득 스코어 범위, 정렬 순서, 랭킹 보상, 진입/접근 기간 이벤트 설정을 포함한 지정된 글로벌 랭킹 모델을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GlobalRankingModel 글로벌 랭킹 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetGlobalRankingModel ( \u0026 ranking2 . GetGlobalRankingModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetGlobalRankingModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getGlobalRankingModel ( ( new GetGlobalRankingModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetGlobalRankingModelRequest ; import io.gs2.ranking2.result.GetGlobalRankingModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetGlobalRankingModelResult result = client . getGlobalRankingModel ( new GetGlobalRankingModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) ); GlobalRankingModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetGlobalRankingModelResult \u003e asyncResult = null ; yield return client . GetGlobalRankingModel ( new Gs2 . Gs2Ranking2 . Request . GetGlobalRankingModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getGlobalRankingModel ( new Gs2Ranking2 . GetGlobalRankingModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_global_ranking_model ( ranking2 . GetGlobalRankingModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_global_ranking_model ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_global_ranking_model_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeClusterRankingModels 클러스터 랭킹 모델 목록 조회 현재 활성화된 클러스터 랭킹 모델의 목록을 조회합니다. 클러스터 랭킹 모델은 클러스터 타입(길드 또는 매치메이킹 개더링), 스코어 범위, 정렬 순서, 보상 설정, 참가/접근 기간 이벤트 등의 랭킹 설정을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 클러스터 랭킹 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeClusterRankingModels ( \u0026 ranking2 . DescribeClusterRankingModelsRequest { NamespaceName : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeClusterRankingModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeClusterRankingModels ( ( new DescribeClusterRankingModelsRequest ()) -\u003e withNamespaceName ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeClusterRankingModelsRequest ; import io.gs2.ranking2.result.DescribeClusterRankingModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeClusterRankingModelsResult result = client . describeClusterRankingModels ( new DescribeClusterRankingModelsRequest () . withNamespaceName ( null ) ); List ClusterRankingModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeClusterRankingModelsResult \u003e asyncResult = null ; yield return client . DescribeClusterRankingModels ( new Gs2 . Gs2Ranking2 . Request . DescribeClusterRankingModelsRequest () . WithNamespaceName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeClusterRankingModels ( new Gs2Ranking2 . DescribeClusterRankingModelsRequest () . withNamespaceName ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_cluster_ranking_models ( ranking2 . DescribeClusterRankingModelsRequest () . with_namespace_name ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_cluster_ranking_models ({ namespaceName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_cluster_ranking_models_async ({ namespaceName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getClusterRankingModel 클러스터 랭킹 모델 조회 클러스터 타입, 스코어 범위, 정렬 순서, 랭킹 보상, 참가/접근 기간 이벤트 설정을 포함하여 지정된 클러스터 랭킹 모델을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ClusterRankingModel 클러스터 랭킹 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetClusterRankingModel ( \u0026 ranking2 . GetClusterRankingModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetClusterRankingModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getClusterRankingModel ( ( new GetClusterRankingModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetClusterRankingModelRequest ; import io.gs2.ranking2.result.GetClusterRankingModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetClusterRankingModelResult result = client . getClusterRankingModel ( new GetClusterRankingModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) ); ClusterRankingModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetClusterRankingModelResult \u003e asyncResult = null ; yield return client . GetClusterRankingModel ( new Gs2 . Gs2Ranking2 . Request . GetClusterRankingModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getClusterRankingModel ( new Gs2Ranking2 . GetClusterRankingModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_cluster_ranking_model ( ranking2 . GetClusterRankingModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_cluster_ranking_model ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_cluster_ranking_model_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSubscribeRankingModels 구독 랭킹 모델 목록 조회 현재 활성화된 구독 랭킹 모델의 목록을 조회합니다. 구독 랭킹 모델은 구독한 친구와만 경쟁하는 랭킹 설정을 정의하며, 스코어 범위, 정렬 순서, 참가/접근 기간 이벤트 등을 포함합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 구독 랭킹 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscribeRankingModels ( \u0026 ranking2 . DescribeSubscribeRankingModelsRequest { NamespaceName : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeSubscribeRankingModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeSubscribeRankingModels ( ( new DescribeSubscribeRankingModelsRequest ()) -\u003e withNamespaceName ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeSubscribeRankingModelsRequest ; import io.gs2.ranking2.result.DescribeSubscribeRankingModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeSubscribeRankingModelsResult result = client . describeSubscribeRankingModels ( new DescribeSubscribeRankingModelsRequest () . withNamespaceName ( null ) ); List SubscribeRankingModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeSubscribeRankingModelsResult \u003e asyncResult = null ; yield return client . DescribeSubscribeRankingModels ( new Gs2 . Gs2Ranking2 . Request . DescribeSubscribeRankingModelsRequest () . WithNamespaceName ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeSubscribeRankingModels ( new Gs2Ranking2 . DescribeSubscribeRankingModelsRequest () . withNamespaceName ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_subscribe_ranking_models ( ranking2 . DescribeSubscribeRankingModelsRequest () . with_namespace_name ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_subscribe_ranking_models ({ namespaceName = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_subscribe_ranking_models_async ({ namespaceName = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getSubscribeRankingModel 구독 랭킹 모델 조회 스코어 범위, 정렬 순서, 참가/접근 기간 이벤트 설정을 포함하여 지정된 구독 랭킹 모델을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item SubscribeRankingModel 구독 랭킹 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetSubscribeRankingModel ( \u0026 ranking2 . GetSubscribeRankingModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"ranking-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetSubscribeRankingModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getSubscribeRankingModel ( ( new GetSubscribeRankingModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"ranking-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetSubscribeRankingModelRequest ; import io.gs2.ranking2.result.GetSubscribeRankingModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetSubscribeRankingModelResult result = client . getSubscribeRankingModel ( new GetSubscribeRankingModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) ); SubscribeRankingModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetSubscribeRankingModelResult \u003e asyncResult = null ; yield return client . GetSubscribeRankingModel ( new Gs2 . Gs2Ranking2 . Request . GetSubscribeRankingModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"ranking-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getSubscribeRankingModel ( new Gs2Ranking2 . GetSubscribeRankingModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"ranking-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_subscribe_ranking_model ( ranking2 . GetSubscribeRankingModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'ranking-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_subscribe_ranking_model ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_subscribe_ranking_model_async ({ namespaceName = \"namespace-0001\" , rankingName = \"ranking-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 활성화 가능한 마스터 데이터 형식으로 모델 마스터 내보내기 현재 등록되어 있는 글로벌, 클러스터, 구독 랭킹 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보냅니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentRankingMaster 활성화 가능한 마스터 데이터 형식으로 모델 마스터 내보내기 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 ranking2 . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.ExportMasterRequest ; import io.gs2.ranking2.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentRankingMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Ranking2 . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . exportMaster ( new Gs2Ranking2 . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . export_master ( ranking2 . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 조회 글로벌, 클러스터, 구독 랭킹 모델 정의를 포함한 현재 활성화된 랭킹 모델의 마스터 데이터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetCurrentRankingMaster ( \u0026 ranking2 . GetCurrentRankingMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetCurrentRankingMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getCurrentRankingMaster ( ( new GetCurrentRankingMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetCurrentRankingMasterRequest ; import io.gs2.ranking2.result.GetCurrentRankingMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetCurrentRankingMasterResult result = client . getCurrentRankingMaster ( new GetCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentRankingMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetCurrentRankingMasterResult \u003e asyncResult = null ; yield return client . GetCurrentRankingMaster ( new Gs2 . Gs2Ranking2 . Request . GetCurrentRankingMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getCurrentRankingMaster ( new Gs2Ranking2 . GetCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_current_ranking_master ( ranking2 . GetCurrentRankingMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_current_ranking_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_current_ranking_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 업데이트（3단계 버전） 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 업데이트를 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 획득합니다. 획득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentRankingMaster 에 업로드로 획득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentRankingMaster ( \u0026 ranking2 . PreUpdateCurrentRankingMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\PreUpdateCurrentRankingMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentRankingMaster ( ( new PreUpdateCurrentRankingMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.PreUpdateCurrentRankingMasterRequest ; import io.gs2.ranking2.result.PreUpdateCurrentRankingMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { PreUpdateCurrentRankingMasterResult result = client . preUpdateCurrentRankingMaster ( new PreUpdateCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . PreUpdateCurrentRankingMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentRankingMaster ( new Gs2 . Gs2Ranking2 . Request . PreUpdateCurrentRankingMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . preUpdateCurrentRankingMaster ( new Gs2Ranking2 . PreUpdateCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . pre_update_current_ranking_master ( ranking2 . PreUpdateCurrentRankingMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.pre_update_current_ranking_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'ranking2' ) api_result_handler = client.pre_update_current_ranking_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 업데이트 현재 활성화된 랭킹 모델의 마스터 데이터를 업데이트합니다. 대용량 마스터 데이터에 대응하기 위해, 직접 업데이트 모드와 사전 업로드 모드를 모두 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentRankingMaster 업데이트된 현재 활성화된 랭킹 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . UpdateCurrentRankingMaster ( \u0026 ranking2 . UpdateCurrentRankingMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2024-05-30\\\", \\\"globalRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"orderDirection\\\": \\\"desc\\\"}], \\\"clusterRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"clusterType\\\": \\\"Raw\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"clusterType\\\": \\\"Gs2Guild::Guild\\\", \\\"orderDirection\\\": \\\"desc\\\"}], \\\"subscribeRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"orderDirection\\\": \\\"desc\\\"}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\UpdateCurrentRankingMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e updateCurrentRankingMaster ( ( new UpdateCurrentRankingMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2024-05-30 \\\" , \\\" globalRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }], \\\" clusterRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" clusterType \\\" : \\\" Raw \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" clusterType \\\" : \\\" Gs2Guild::Guild \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }], \\\" subscribeRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.UpdateCurrentRankingMasterRequest ; import io.gs2.ranking2.result.UpdateCurrentRankingMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { UpdateCurrentRankingMasterResult result = client . updateCurrentRankingMaster ( new UpdateCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-05-30\\\", \\\"globalRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"orderDirection\\\": \\\"desc\\\"}], \\\"clusterRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"clusterType\\\": \\\"Raw\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"clusterType\\\": \\\"Gs2Guild::Guild\\\", \\\"orderDirection\\\": \\\"desc\\\"}], \\\"subscribeRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"orderDirection\\\": \\\"desc\\\"}]}\" ) . withUploadToken ( null ) ); CurrentRankingMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . UpdateCurrentRankingMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentRankingMaster ( new Gs2 . Gs2Ranking2 . Request . UpdateCurrentRankingMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2024-05-30\\\", \\\"globalRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"orderDirection\\\": \\\"desc\\\"}], \\\"clusterRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"clusterType\\\": \\\"Raw\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"clusterType\\\": \\\"Gs2Guild::Guild\\\", \\\"orderDirection\\\": \\\"desc\\\"}], \\\"subscribeRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"orderDirection\\\": \\\"desc\\\"}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . updateCurrentRankingMaster ( new Gs2Ranking2 . UpdateCurrentRankingMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-05-30\\\", \\\"globalRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"orderDirection\\\": \\\"desc\\\"}], \\\"clusterRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"clusterType\\\": \\\"Raw\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"clusterType\\\": \\\"Gs2Guild::Guild\\\", \\\"orderDirection\\\": \\\"desc\\\"}], \\\"subscribeRankingModels\\\": [{\\\"name\\\": \\\"ranking-0001\\\", \\\"orderDirection\\\": \\\"asc\\\"}, {\\\"name\\\": \\\"ranking-0002\\\", \\\"orderDirection\\\": \\\"desc\\\"}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . update_current_ranking_master ( ranking2 . UpdateCurrentRankingMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2024-05-30\", \"globalRankingModels\": [{\"name\": \"ranking-0001\", \"orderDirection\": \"asc\"}, {\"name\": \"ranking-0002\", \"orderDirection\": \"desc\"}], \"clusterRankingModels\": [{\"name\": \"ranking-0001\", \"clusterType\": \"Raw\", \"orderDirection\": \"asc\"}, {\"name\": \"ranking-0002\", \"clusterType\": \"Gs2Guild::Guild\", \"orderDirection\": \"desc\"}], \"subscribeRankingModels\": [{\"name\": \"ranking-0001\", \"orderDirection\": \"asc\"}, {\"name\": \"ranking-0002\", \"orderDirection\": \"desc\"}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.update_current_ranking_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-05-30 \\\" , \\\" globalRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }], \\\" clusterRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" clusterType \\\" : \\\" Raw \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" clusterType \\\" : \\\" Gs2Guild::Guild \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }], \\\" subscribeRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.update_current_ranking_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-05-30 \\\" , \\\" globalRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }], \\\" clusterRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" clusterType \\\" : \\\" Raw \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" clusterType \\\" : \\\" Gs2Guild::Guild \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }], \\\" subscribeRankingModels \\\" : [{ \\\" name \\\" : \\\" ranking-0001 \\\" , \\\" orderDirection \\\" : \\\" asc \\\" }, { \\\" name \\\" : \\\" ranking-0002 \\\" , \\\" orderDirection \\\" : \\\" desc \\\" }]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentRankingMasterFromGitHub 현재 활성화된 랭킹 모델의 마스터 데이터를 GitHub에서 업데이트 지정된 체크아웃 설정을 사용하여 GitHub 리포지토리에서 마스터 데이터를 체크아웃하고, 현재 활성화된 랭킹 모델의 마스터 데이터를 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentRankingMaster 업데이트된 현재 활성화된 랭킹 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . UpdateCurrentRankingMasterFromGitHub ( \u0026 ranking2 . UpdateCurrentRankingMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 ranking2 . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\UpdateCurrentRankingMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e updateCurrentRankingMasterFromGitHub ( ( new UpdateCurrentRankingMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.UpdateCurrentRankingMasterFromGitHubRequest ; import io.gs2.ranking2.result.UpdateCurrentRankingMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { UpdateCurrentRankingMasterFromGitHubResult result = client . updateCurrentRankingMasterFromGitHub ( new UpdateCurrentRankingMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentRankingMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . UpdateCurrentRankingMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentRankingMasterFromGitHub ( new Gs2 . Gs2Ranking2 . Request . UpdateCurrentRankingMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Ranking2 . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . updateCurrentRankingMasterFromGitHub ( new Gs2Ranking2 . UpdateCurrentRankingMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Ranking2 . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . update_current_ranking_master_from_git_hub ( ranking2 . UpdateCurrentRankingMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( ranking2 . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.update_current_ranking_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.update_current_ranking_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeGlobalRankingModelMasters 글로벌 랭킹 모델 마스터 목록 조회 글로벌 랭킹 모델 마스터의 페이지네이션 목록을 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 글로벌 랭킹 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 글로벌 랭킹 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeGlobalRankingModelMasters ( \u0026 ranking2 . DescribeGlobalRankingModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeGlobalRankingModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeGlobalRankingModelMasters ( ( new DescribeGlobalRankingModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeGlobalRankingModelMastersRequest ; import io.gs2.ranking2.result.DescribeGlobalRankingModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeGlobalRankingModelMastersResult result = client . describeGlobalRankingModelMasters ( new DescribeGlobalRankingModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List GlobalRankingModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeGlobalRankingModelMastersResult \u003e asyncResult = null ; yield return client . DescribeGlobalRankingModelMasters ( new Gs2 . Gs2Ranking2 . Request . DescribeGlobalRankingModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeGlobalRankingModelMasters ( new Gs2Ranking2 . DescribeGlobalRankingModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_global_ranking_model_masters ( ranking2 . DescribeGlobalRankingModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_global_ranking_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_global_ranking_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createGlobalRankingModelMaster 글로벌 랭킹 모델 마스터 신규 생성 스코어 범위, 정렬 순서, 합계 모드, 랭킹 보상, 보상 계산 인덱스, 엔트리/액세스 기간 이벤트 설정을 가진 새로운 글로벌 랭킹 모델 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 스코어 최솟값 허용되는 스코어의 최솟값입니다. 이 값보다 낮은 스코어는 등록 시 거부됩니다. 유효하지 않거나 의도하지 않은 스코어 값을 필터링하는 데 사용합니다. maximumValue long 0 ~ 9223372036854775805 스코어 최댓값 허용되는 스코어의 최댓값입니다. 이 값을 초과하는 스코어는 등록 시 거부됩니다. 비정상적으로 높은 스코어의 등록을 방지하는 데 사용합니다. sum bool false 스코어 합산 활성화하면 등록된 모든 스코어가 합산되어 합계 값으로 랭킹이 결정됩니다. 비활성화된 경우, 정렬 방향에 따른 최적의 스코어(최댓값 또는 최솟값)만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 스코어의 정렬 방향입니다. 낮은 스코어일수록 상위인 경우(예: 타임어택)에는 “오름차순\"을, 높은 스코어일수록 상위인 경우(예: 하이스코어)에는 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. 각 보상은 순위 임계값과 실행할 입수 액션을 정의합니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위를 사용하며(동점 스코어의 플레이어는 동일한 순위를 공유), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치를 사용합니다(동일 순위 없음). 일반적인 사용 사례에서는 “순위 기반\"을 선택하시기 바랍니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 반복 사이클마다 랭킹이 초기화되어 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 일반적으로 스코어 등록 기간 사이의 간격으로 설정합니다. Result 타입 설명 item GlobalRankingModelMaster 생성한 글로벌 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CreateGlobalRankingModelMaster ( \u0026 ranking2 . CreateGlobalRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"global-0001\" ), Description : nil , Metadata : nil , MinimumValue : nil , MaximumValue : nil , Sum : nil , OrderDirection : pointy . String ( \"asc\" ), RankingRewards : nil , RewardCalculationIndex : nil , EntryPeriodEventId : nil , AccessPeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CreateGlobalRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e createGlobalRankingModelMaster ( ( new CreateGlobalRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"global-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withMinimumValue ( null ) -\u003e withMaximumValue ( null ) -\u003e withSum ( null ) -\u003e withOrderDirection ( \"asc\" ) -\u003e withRankingRewards ( null ) -\u003e withRewardCalculationIndex ( null ) -\u003e withEntryPeriodEventId ( null ) -\u003e withAccessPeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CreateGlobalRankingModelMasterRequest ; import io.gs2.ranking2.result.CreateGlobalRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CreateGlobalRankingModelMasterResult result = client . createGlobalRankingModelMaster ( new CreateGlobalRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"global-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMinimumValue ( null ) . withMaximumValue ( null ) . withSum ( null ) . withOrderDirection ( \"asc\" ) . withRankingRewards ( null ) . withRewardCalculationIndex ( null ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); GlobalRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CreateGlobalRankingModelMasterResult \u003e asyncResult = null ; yield return client . CreateGlobalRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . CreateGlobalRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"global-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithMinimumValue ( null ) . WithMaximumValue ( null ) . WithSum ( null ) . WithOrderDirection ( \"asc\" ) . WithRankingRewards ( null ) . WithRewardCalculationIndex ( null ) . WithEntryPeriodEventId ( null ) . WithAccessPeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . createGlobalRankingModelMaster ( new Gs2Ranking2 . CreateGlobalRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"global-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMinimumValue ( null ) . withMaximumValue ( null ) . withSum ( null ) . withOrderDirection ( \"asc\" ) . withRankingRewards ( null ) . withRewardCalculationIndex ( null ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . create_global_ranking_model_master ( ranking2 . CreateGlobalRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'global-0001' ) . with_description ( None ) . with_metadata ( None ) . with_minimum_value ( None ) . with_maximum_value ( None ) . with_sum ( None ) . with_order_direction ( 'asc' ) . with_ranking_rewards ( None ) . with_reward_calculation_index ( None ) . with_entry_period_event_id ( None ) . with_access_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.create_global_ranking_model_master ({ namespaceName = \"namespace-0001\" , name = \"global-0001\" , description = nil , metadata = nil , minimumValue = nil , maximumValue = nil , sum = nil , orderDirection = \"asc\" , rankingRewards = nil , rewardCalculationIndex = nil , entryPeriodEventId = nil , accessPeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.create_global_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"global-0001\" , description = nil , metadata = nil , minimumValue = nil , maximumValue = nil , sum = nil , orderDirection = \"asc\" , rankingRewards = nil , rewardCalculationIndex = nil , entryPeriodEventId = nil , accessPeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getGlobalRankingModelMaster 글로벌 랭킹 모델 마스터 조회 지정된 글로벌 랭킹 모델 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GlobalRankingModelMaster 글로벌 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetGlobalRankingModelMaster ( \u0026 ranking2 . GetGlobalRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"global-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetGlobalRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getGlobalRankingModelMaster ( ( new GetGlobalRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"global-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetGlobalRankingModelMasterRequest ; import io.gs2.ranking2.result.GetGlobalRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetGlobalRankingModelMasterResult result = client . getGlobalRankingModelMaster ( new GetGlobalRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"global-0001\" ) ); GlobalRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetGlobalRankingModelMasterResult \u003e asyncResult = null ; yield return client . GetGlobalRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . GetGlobalRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"global-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getGlobalRankingModelMaster ( new Gs2Ranking2 . GetGlobalRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"global-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_global_ranking_model_master ( ranking2 . GetGlobalRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'global-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_global_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"global-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_global_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"global-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateGlobalRankingModelMaster 글로벌 랭킹 모델 마스터 업데이트 지정된 글로벌 랭킹 모델 마스터의 스코어 범위, 정렬 순서, 합계 모드, 랭킹 보상, 보상 계산 인덱스, 엔트리/액세스 기간 이벤트 설정을 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 스코어 최솟값 허용되는 스코어의 최솟값입니다. 이 값보다 낮은 스코어는 등록 시 거부됩니다. 유효하지 않거나 의도하지 않은 스코어 값을 필터링하는 데 사용합니다. maximumValue long 0 ~ 9223372036854775805 스코어 최댓값 허용되는 스코어의 최댓값입니다. 이 값을 초과하는 스코어는 등록 시 거부됩니다. 비정상적으로 높은 스코어의 등록을 방지하는 데 사용합니다. sum bool false 스코어 합산 활성화하면 등록된 모든 스코어가 합산되어 합계 값으로 랭킹이 결정됩니다. 비활성화된 경우, 정렬 방향에 따른 최적의 스코어(최댓값 또는 최솟값)만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 스코어의 정렬 방향입니다. 낮은 스코어일수록 상위인 경우(예: 타임어택)에는 “오름차순\"을, 높은 스코어일수록 상위인 경우(예: 하이스코어)에는 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. 각 보상은 순위 임계값과 실행할 입수 액션을 정의합니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위를 사용하며(동점 스코어의 플레이어는 동일한 순위를 공유), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치를 사용합니다(동일 순위 없음). 일반적인 사용 사례에서는 “순위 기반\"을 선택하시기 바랍니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 반복 사이클마다 랭킹이 초기화되어 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 일반적으로 스코어 등록 기간 사이의 간격으로 설정합니다. Result 타입 설명 item GlobalRankingModelMaster 업데이트한 글로벌 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . UpdateGlobalRankingModelMaster ( \u0026 ranking2 . UpdateGlobalRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"global-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"CATEGORY_0001\" ), MinimumValue : pointy . Int64 ( 100 ), MaximumValue : pointy . Int64 ( 10000 ), Sum : nil , OrderDirection : pointy . String ( \"desc\" ), RankingRewards : nil , RewardCalculationIndex : nil , EntryPeriodEventId : nil , AccessPeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\UpdateGlobalRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e updateGlobalRankingModelMaster ( ( new UpdateGlobalRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"global-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"CATEGORY_0001\" ) -\u003e withMinimumValue ( 100 ) -\u003e withMaximumValue ( 10000 ) -\u003e withSum ( null ) -\u003e withOrderDirection ( \"desc\" ) -\u003e withRankingRewards ( null ) -\u003e withRewardCalculationIndex ( null ) -\u003e withEntryPeriodEventId ( null ) -\u003e withAccessPeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.UpdateGlobalRankingModelMasterRequest ; import io.gs2.ranking2.result.UpdateGlobalRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { UpdateGlobalRankingModelMasterResult result = client . updateGlobalRankingModelMaster ( new UpdateGlobalRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"global-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"CATEGORY_0001\" ) . withMinimumValue ( 100L ) . withMaximumValue ( 10000L ) . withSum ( null ) . withOrderDirection ( \"desc\" ) . withRankingRewards ( null ) . withRewardCalculationIndex ( null ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); GlobalRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . UpdateGlobalRankingModelMasterResult \u003e asyncResult = null ; yield return client . UpdateGlobalRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . UpdateGlobalRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"global-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"CATEGORY_0001\" ) . WithMinimumValue ( 100L ) . WithMaximumValue ( 10000L ) . WithSum ( null ) . WithOrderDirection ( \"desc\" ) . WithRankingRewards ( null ) . WithRewardCalculationIndex ( null ) . WithEntryPeriodEventId ( null ) . WithAccessPeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . updateGlobalRankingModelMaster ( new Gs2Ranking2 . UpdateGlobalRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"global-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"CATEGORY_0001\" ) . withMinimumValue ( 100 ) . withMaximumValue ( 10000 ) . withSum ( null ) . withOrderDirection ( \"desc\" ) . withRankingRewards ( null ) . withRewardCalculationIndex ( null ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . update_global_ranking_model_master ( ranking2 . UpdateGlobalRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'global-0001' ) . with_description ( 'description1' ) . with_metadata ( 'CATEGORY_0001' ) . with_minimum_value ( 100 ) . with_maximum_value ( 10000 ) . with_sum ( None ) . with_order_direction ( 'desc' ) . with_ranking_rewards ( None ) . with_reward_calculation_index ( None ) . with_entry_period_event_id ( None ) . with_access_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.update_global_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"global-0001\" , description = \"description1\" , metadata = \"CATEGORY_0001\" , minimumValue = 100 , maximumValue = 10000 , sum = nil , orderDirection = \"desc\" , rankingRewards = nil , rewardCalculationIndex = nil , entryPeriodEventId = nil , accessPeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.update_global_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"global-0001\" , description = \"description1\" , metadata = \"CATEGORY_0001\" , minimumValue = 100 , maximumValue = 10000 , sum = nil , orderDirection = \"desc\" , rankingRewards = nil , rewardCalculationIndex = nil , entryPeriodEventId = nil , accessPeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteGlobalRankingModelMaster 글로벌 랭킹 모델 마스터 삭제 지정된 글로벌 랭킹 모델 마스터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item GlobalRankingModelMaster 삭제한 글로벌 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteGlobalRankingModelMaster ( \u0026 ranking2 . DeleteGlobalRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"global-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteGlobalRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteGlobalRankingModelMaster ( ( new DeleteGlobalRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"global-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteGlobalRankingModelMasterRequest ; import io.gs2.ranking2.result.DeleteGlobalRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteGlobalRankingModelMasterResult result = client . deleteGlobalRankingModelMaster ( new DeleteGlobalRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"global-0001\" ) ); GlobalRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteGlobalRankingModelMasterResult \u003e asyncResult = null ; yield return client . DeleteGlobalRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . DeleteGlobalRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"global-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteGlobalRankingModelMaster ( new Gs2Ranking2 . DeleteGlobalRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"global-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_global_ranking_model_master ( ranking2 . DeleteGlobalRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'global-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_global_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"global-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_global_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"global-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeClusterRankingModelMasters 클러스터 랭킹 모델 마스터 목록 조회 클러스터 랭킹 모델 마스터의 페이지네이션 지원 목록을 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 클러스터 랭킹 모델명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 클러스터 랭킹 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeClusterRankingModelMasters ( \u0026 ranking2 . DescribeClusterRankingModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeClusterRankingModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeClusterRankingModelMasters ( ( new DescribeClusterRankingModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeClusterRankingModelMastersRequest ; import io.gs2.ranking2.result.DescribeClusterRankingModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeClusterRankingModelMastersResult result = client . describeClusterRankingModelMasters ( new DescribeClusterRankingModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List ClusterRankingModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeClusterRankingModelMastersResult \u003e asyncResult = null ; yield return client . DescribeClusterRankingModelMasters ( new Gs2 . Gs2Ranking2 . Request . DescribeClusterRankingModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeClusterRankingModelMasters ( new Gs2Ranking2 . DescribeClusterRankingModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_cluster_ranking_model_masters ( ranking2 . DescribeClusterRankingModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_cluster_ranking_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_cluster_ranking_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createClusterRankingModelMaster 클러스터 랭킹 모델 마스터 신규 생성 클러스터 타입, 스코어 범위, 정렬 순서, 합산 모드, 랭킹 보상, 보상 계산 인덱스, 참가/접근 기간 이벤트 설정을 가진 새로운 클러스터 랭킹 모델 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. clusterType 문자열 열거형 enum {   “Raw”,   “Gs2Guild::Guild”,   “Gs2Matchmaking::SeasonGathering” }  클러스터 타입 랭킹의 세그멘테이션에 사용하는 그룹(클러스터)의 종류를 정의합니다. “Raw\"는 소속 검증 없이 임의의 클러스터 이름을 지정할 수 있으며, “Gs2Guild::Guild\"는 GS2-Guild 길드에 대한 소속을 검증하고, “Gs2Matchmaking::SeasonGathering\"은 GS2-Matchmaking 시즌 개더링에 대한 소속을 검증합니다. 정의 설명 Raw 검증 없음 Gs2Guild::Guild GS2-Guild 길드 Gs2Matchmaking::SeasonGathering GS2-Matchmaking 시즌 개더링 minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위(동점 스코어는 동일 순위), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치(동일 순위 없음)를 사용합니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. Result 타입 설명 item ClusterRankingModelMaster 생성한 클러스터 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CreateClusterRankingModelMaster ( \u0026 ranking2 . CreateClusterRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"cluster-0001\" ), Description : nil , Metadata : nil , ClusterType : pointy . String ( \"Raw\" ), MinimumValue : nil , MaximumValue : nil , Sum : nil , OrderDirection : pointy . String ( \"asc\" ), RankingRewards : nil , RewardCalculationIndex : nil , EntryPeriodEventId : nil , AccessPeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CreateClusterRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e createClusterRankingModelMaster ( ( new CreateClusterRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"cluster-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withClusterType ( \"Raw\" ) -\u003e withMinimumValue ( null ) -\u003e withMaximumValue ( null ) -\u003e withSum ( null ) -\u003e withOrderDirection ( \"asc\" ) -\u003e withRankingRewards ( null ) -\u003e withRewardCalculationIndex ( null ) -\u003e withEntryPeriodEventId ( null ) -\u003e withAccessPeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CreateClusterRankingModelMasterRequest ; import io.gs2.ranking2.result.CreateClusterRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CreateClusterRankingModelMasterResult result = client . createClusterRankingModelMaster ( new CreateClusterRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"cluster-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withClusterType ( \"Raw\" ) . withMinimumValue ( null ) . withMaximumValue ( null ) . withSum ( null ) . withOrderDirection ( \"asc\" ) . withRankingRewards ( null ) . withRewardCalculationIndex ( null ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); ClusterRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CreateClusterRankingModelMasterResult \u003e asyncResult = null ; yield return client . CreateClusterRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . CreateClusterRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"cluster-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithClusterType ( \"Raw\" ) . WithMinimumValue ( null ) . WithMaximumValue ( null ) . WithSum ( null ) . WithOrderDirection ( \"asc\" ) . WithRankingRewards ( null ) . WithRewardCalculationIndex ( null ) . WithEntryPeriodEventId ( null ) . WithAccessPeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . createClusterRankingModelMaster ( new Gs2Ranking2 . CreateClusterRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"cluster-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withClusterType ( \"Raw\" ) . withMinimumValue ( null ) . withMaximumValue ( null ) . withSum ( null ) . withOrderDirection ( \"asc\" ) . withRankingRewards ( null ) . withRewardCalculationIndex ( null ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . create_cluster_ranking_model_master ( ranking2 . CreateClusterRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'cluster-0001' ) . with_description ( None ) . with_metadata ( None ) . with_cluster_type ( 'Raw' ) . with_minimum_value ( None ) . with_maximum_value ( None ) . with_sum ( None ) . with_order_direction ( 'asc' ) . with_ranking_rewards ( None ) . with_reward_calculation_index ( None ) . with_entry_period_event_id ( None ) . with_access_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.create_cluster_ranking_model_master ({ namespaceName = \"namespace-0001\" , name = \"cluster-0001\" , description = nil , metadata = nil , clusterType = \"Raw\" , minimumValue = nil , maximumValue = nil , sum = nil , orderDirection = \"asc\" , rankingRewards = nil , rewardCalculationIndex = nil , entryPeriodEventId = nil , accessPeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.create_cluster_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"cluster-0001\" , description = nil , metadata = nil , clusterType = \"Raw\" , minimumValue = nil , maximumValue = nil , sum = nil , orderDirection = \"asc\" , rankingRewards = nil , rewardCalculationIndex = nil , entryPeriodEventId = nil , accessPeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getClusterRankingModelMaster 클러스터 랭킹 모델 마스터 조회 지정된 클러스터 랭킹 모델 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ClusterRankingModelMaster 클러스터 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetClusterRankingModelMaster ( \u0026 ranking2 . GetClusterRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"cluster-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetClusterRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getClusterRankingModelMaster ( ( new GetClusterRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"cluster-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetClusterRankingModelMasterRequest ; import io.gs2.ranking2.result.GetClusterRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetClusterRankingModelMasterResult result = client . getClusterRankingModelMaster ( new GetClusterRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"cluster-0001\" ) ); ClusterRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetClusterRankingModelMasterResult \u003e asyncResult = null ; yield return client . GetClusterRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . GetClusterRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"cluster-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getClusterRankingModelMaster ( new Gs2Ranking2 . GetClusterRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"cluster-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_cluster_ranking_model_master ( ranking2 . GetClusterRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'cluster-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_cluster_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"cluster-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_cluster_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"cluster-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateClusterRankingModelMaster 클러스터 랭킹 모델 마스터 갱신 지정된 클러스터 랭킹 모델 마스터의 클러스터 타입, 스코어 범위, 정렬 순서, 합산 모드, 랭킹 보상, 보상 계산 인덱스, 참가/접근 기간 이벤트 설정을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. clusterType 문자열 열거형 enum {   “Raw”,   “Gs2Guild::Guild”,   “Gs2Matchmaking::SeasonGathering” }  클러스터 타입 랭킹의 세그멘테이션에 사용하는 그룹(클러스터)의 종류를 정의합니다. “Raw\"는 소속 검증 없이 임의의 클러스터 이름을 지정할 수 있으며, “Gs2Guild::Guild\"는 GS2-Guild 길드에 대한 소속을 검증하고, “Gs2Matchmaking::SeasonGathering\"은 GS2-Matchmaking 시즌 개더링에 대한 소속을 검증합니다. 정의 설명 Raw 검증 없음 Gs2Guild::Guild GS2-Guild 길드 Gs2Matchmaking::SeasonGathering GS2-Matchmaking 시즌 개더링 minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위(동점 스코어는 동일 순위), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치(동일 순위 없음)를 사용합니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. Result 타입 설명 item ClusterRankingModelMaster 갱신한 클러스터 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . UpdateClusterRankingModelMaster ( \u0026 ranking2 . UpdateClusterRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"cluster-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"CATEGORY_0001\" ), ClusterType : pointy . String ( \"Gs2Guild::Guild\" ), MinimumValue : pointy . Int64 ( 100 ), MaximumValue : pointy . Int64 ( 10000 ), Sum : nil , OrderDirection : pointy . String ( \"desc\" ), RankingRewards : nil , RewardCalculationIndex : nil , EntryPeriodEventId : nil , AccessPeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\UpdateClusterRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e updateClusterRankingModelMaster ( ( new UpdateClusterRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"cluster-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"CATEGORY_0001\" ) -\u003e withClusterType ( \"Gs2Guild::Guild\" ) -\u003e withMinimumValue ( 100 ) -\u003e withMaximumValue ( 10000 ) -\u003e withSum ( null ) -\u003e withOrderDirection ( \"desc\" ) -\u003e withRankingRewards ( null ) -\u003e withRewardCalculationIndex ( null ) -\u003e withEntryPeriodEventId ( null ) -\u003e withAccessPeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.UpdateClusterRankingModelMasterRequest ; import io.gs2.ranking2.result.UpdateClusterRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { UpdateClusterRankingModelMasterResult result = client . updateClusterRankingModelMaster ( new UpdateClusterRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"cluster-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"CATEGORY_0001\" ) . withClusterType ( \"Gs2Guild::Guild\" ) . withMinimumValue ( 100L ) . withMaximumValue ( 10000L ) . withSum ( null ) . withOrderDirection ( \"desc\" ) . withRankingRewards ( null ) . withRewardCalculationIndex ( null ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); ClusterRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . UpdateClusterRankingModelMasterResult \u003e asyncResult = null ; yield return client . UpdateClusterRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . UpdateClusterRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"cluster-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"CATEGORY_0001\" ) . WithClusterType ( \"Gs2Guild::Guild\" ) . WithMinimumValue ( 100L ) . WithMaximumValue ( 10000L ) . WithSum ( null ) . WithOrderDirection ( \"desc\" ) . WithRankingRewards ( null ) . WithRewardCalculationIndex ( null ) . WithEntryPeriodEventId ( null ) . WithAccessPeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . updateClusterRankingModelMaster ( new Gs2Ranking2 . UpdateClusterRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"cluster-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"CATEGORY_0001\" ) . withClusterType ( \"Gs2Guild::Guild\" ) . withMinimumValue ( 100 ) . withMaximumValue ( 10000 ) . withSum ( null ) . withOrderDirection ( \"desc\" ) . withRankingRewards ( null ) . withRewardCalculationIndex ( null ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . update_cluster_ranking_model_master ( ranking2 . UpdateClusterRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'cluster-0001' ) . with_description ( 'description1' ) . with_metadata ( 'CATEGORY_0001' ) . with_cluster_type ( 'Gs2Guild::Guild' ) . with_minimum_value ( 100 ) . with_maximum_value ( 10000 ) . with_sum ( None ) . with_order_direction ( 'desc' ) . with_ranking_rewards ( None ) . with_reward_calculation_index ( None ) . with_entry_period_event_id ( None ) . with_access_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.update_cluster_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"cluster-0001\" , description = \"description1\" , metadata = \"CATEGORY_0001\" , clusterType = \"Gs2Guild::Guild\" , minimumValue = 100 , maximumValue = 10000 , sum = nil , orderDirection = \"desc\" , rankingRewards = nil , rewardCalculationIndex = nil , entryPeriodEventId = nil , accessPeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.update_cluster_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"cluster-0001\" , description = \"description1\" , metadata = \"CATEGORY_0001\" , clusterType = \"Gs2Guild::Guild\" , minimumValue = 100 , maximumValue = 10000 , sum = nil , orderDirection = \"desc\" , rankingRewards = nil , rewardCalculationIndex = nil , entryPeriodEventId = nil , accessPeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteClusterRankingModelMaster 클러스터 랭킹 모델 마스터 삭제 지정된 클러스터 랭킹 모델 마스터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item ClusterRankingModelMaster 삭제한 클러스터 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteClusterRankingModelMaster ( \u0026 ranking2 . DeleteClusterRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"cluster-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteClusterRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteClusterRankingModelMaster ( ( new DeleteClusterRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"cluster-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteClusterRankingModelMasterRequest ; import io.gs2.ranking2.result.DeleteClusterRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteClusterRankingModelMasterResult result = client . deleteClusterRankingModelMaster ( new DeleteClusterRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"cluster-0001\" ) ); ClusterRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteClusterRankingModelMasterResult \u003e asyncResult = null ; yield return client . DeleteClusterRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . DeleteClusterRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"cluster-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteClusterRankingModelMaster ( new Gs2Ranking2 . DeleteClusterRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"cluster-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_cluster_ranking_model_master ( ranking2 . DeleteClusterRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'cluster-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_cluster_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"cluster-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_cluster_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"cluster-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSubscribeRankingModelMasters 구독 랭킹 모델 마스터 목록 조회 구독 랭킹 모델 마스터의 페이지네이션 목록을 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 구독 랭킹 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 구독 랭킹 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DescribeSubscribeRankingModelMasters ( \u0026 ranking2 . DescribeSubscribeRankingModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DescribeSubscribeRankingModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e describeSubscribeRankingModelMasters ( ( new DescribeSubscribeRankingModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DescribeSubscribeRankingModelMastersRequest ; import io.gs2.ranking2.result.DescribeSubscribeRankingModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DescribeSubscribeRankingModelMastersResult result = client . describeSubscribeRankingModelMasters ( new DescribeSubscribeRankingModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SubscribeRankingModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DescribeSubscribeRankingModelMastersResult \u003e asyncResult = null ; yield return client . DescribeSubscribeRankingModelMasters ( new Gs2 . Gs2Ranking2 . Request . DescribeSubscribeRankingModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . describeSubscribeRankingModelMasters ( new Gs2Ranking2 . DescribeSubscribeRankingModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . describe_subscribe_ranking_model_masters ( ranking2 . DescribeSubscribeRankingModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.describe_subscribe_ranking_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'ranking2' ) api_result_handler = client.describe_subscribe_ranking_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createSubscribeRankingModelMaster 구독 랭킹 모델 마스터 신규 생성 스코어 범위, 정렬 순서, 합계 모드, 엔트리/액세스 기간 이벤트 설정을 가진 새로운 구독 랭킹 모델 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 구독 랭킹 모델명 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과를 열람할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. Result 타입 설명 item SubscribeRankingModelMaster 생성한 구독 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . CreateSubscribeRankingModelMaster ( \u0026 ranking2 . CreateSubscribeRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"subscribe-0001\" ), Description : nil , Metadata : nil , MinimumValue : nil , MaximumValue : nil , Sum : nil , OrderDirection : pointy . String ( \"asc\" ), EntryPeriodEventId : nil , AccessPeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\CreateSubscribeRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e createSubscribeRankingModelMaster ( ( new CreateSubscribeRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"subscribe-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withMinimumValue ( null ) -\u003e withMaximumValue ( null ) -\u003e withSum ( null ) -\u003e withOrderDirection ( \"asc\" ) -\u003e withEntryPeriodEventId ( null ) -\u003e withAccessPeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.CreateSubscribeRankingModelMasterRequest ; import io.gs2.ranking2.result.CreateSubscribeRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { CreateSubscribeRankingModelMasterResult result = client . createSubscribeRankingModelMaster ( new CreateSubscribeRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"subscribe-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMinimumValue ( null ) . withMaximumValue ( null ) . withSum ( null ) . withOrderDirection ( \"asc\" ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); SubscribeRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . CreateSubscribeRankingModelMasterResult \u003e asyncResult = null ; yield return client . CreateSubscribeRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . CreateSubscribeRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"subscribe-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithMinimumValue ( null ) . WithMaximumValue ( null ) . WithSum ( null ) . WithOrderDirection ( \"asc\" ) . WithEntryPeriodEventId ( null ) . WithAccessPeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . createSubscribeRankingModelMaster ( new Gs2Ranking2 . CreateSubscribeRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"subscribe-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMinimumValue ( null ) . withMaximumValue ( null ) . withSum ( null ) . withOrderDirection ( \"asc\" ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . create_subscribe_ranking_model_master ( ranking2 . CreateSubscribeRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'subscribe-0001' ) . with_description ( None ) . with_metadata ( None ) . with_minimum_value ( None ) . with_maximum_value ( None ) . with_sum ( None ) . with_order_direction ( 'asc' ) . with_entry_period_event_id ( None ) . with_access_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.create_subscribe_ranking_model_master ({ namespaceName = \"namespace-0001\" , name = \"subscribe-0001\" , description = nil , metadata = nil , minimumValue = nil , maximumValue = nil , sum = nil , orderDirection = \"asc\" , entryPeriodEventId = nil , accessPeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.create_subscribe_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"subscribe-0001\" , description = nil , metadata = nil , minimumValue = nil , maximumValue = nil , sum = nil , orderDirection = \"asc\" , entryPeriodEventId = nil , accessPeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSubscribeRankingModelMaster 구독 랭킹 모델 마스터 조회 지정된 구독 랭킹 모델 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델명 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. Result 타입 설명 item SubscribeRankingModelMaster 구독 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . GetSubscribeRankingModelMaster ( \u0026 ranking2 . GetSubscribeRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"subscribe-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\GetSubscribeRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e getSubscribeRankingModelMaster ( ( new GetSubscribeRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"subscribe-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.GetSubscribeRankingModelMasterRequest ; import io.gs2.ranking2.result.GetSubscribeRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { GetSubscribeRankingModelMasterResult result = client . getSubscribeRankingModelMaster ( new GetSubscribeRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"subscribe-0001\" ) ); SubscribeRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . GetSubscribeRankingModelMasterResult \u003e asyncResult = null ; yield return client . GetSubscribeRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . GetSubscribeRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"subscribe-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . getSubscribeRankingModelMaster ( new Gs2Ranking2 . GetSubscribeRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"subscribe-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . get_subscribe_ranking_model_master ( ranking2 . GetSubscribeRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'subscribe-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.get_subscribe_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"subscribe-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.get_subscribe_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"subscribe-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateSubscribeRankingModelMaster 구독 랭킹 모델 마스터 업데이트 지정된 구독 랭킹 모델 마스터의 스코어 범위, 정렬 순서, 합계 모드, 엔트리/액세스 기간 이벤트 설정을 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델명 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과를 열람할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. Result 타입 설명 item SubscribeRankingModelMaster 업데이트한 구독 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . UpdateSubscribeRankingModelMaster ( \u0026 ranking2 . UpdateSubscribeRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"subscribe-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"CATEGORY_0001\" ), MinimumValue : pointy . Int64 ( 100 ), MaximumValue : pointy . Int64 ( 10000 ), Sum : nil , OrderDirection : pointy . String ( \"desc\" ), EntryPeriodEventId : nil , AccessPeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\UpdateSubscribeRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e updateSubscribeRankingModelMaster ( ( new UpdateSubscribeRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"subscribe-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"CATEGORY_0001\" ) -\u003e withMinimumValue ( 100 ) -\u003e withMaximumValue ( 10000 ) -\u003e withSum ( null ) -\u003e withOrderDirection ( \"desc\" ) -\u003e withEntryPeriodEventId ( null ) -\u003e withAccessPeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.UpdateSubscribeRankingModelMasterRequest ; import io.gs2.ranking2.result.UpdateSubscribeRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { UpdateSubscribeRankingModelMasterResult result = client . updateSubscribeRankingModelMaster ( new UpdateSubscribeRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"subscribe-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"CATEGORY_0001\" ) . withMinimumValue ( 100L ) . withMaximumValue ( 10000L ) . withSum ( null ) . withOrderDirection ( \"desc\" ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); SubscribeRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . UpdateSubscribeRankingModelMasterResult \u003e asyncResult = null ; yield return client . UpdateSubscribeRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . UpdateSubscribeRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"subscribe-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"CATEGORY_0001\" ) . WithMinimumValue ( 100L ) . WithMaximumValue ( 10000L ) . WithSum ( null ) . WithOrderDirection ( \"desc\" ) . WithEntryPeriodEventId ( null ) . WithAccessPeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . updateSubscribeRankingModelMaster ( new Gs2Ranking2 . UpdateSubscribeRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"subscribe-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"CATEGORY_0001\" ) . withMinimumValue ( 100 ) . withMaximumValue ( 10000 ) . withSum ( null ) . withOrderDirection ( \"desc\" ) . withEntryPeriodEventId ( null ) . withAccessPeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . update_subscribe_ranking_model_master ( ranking2 . UpdateSubscribeRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'subscribe-0001' ) . with_description ( 'description1' ) . with_metadata ( 'CATEGORY_0001' ) . with_minimum_value ( 100 ) . with_maximum_value ( 10000 ) . with_sum ( None ) . with_order_direction ( 'desc' ) . with_entry_period_event_id ( None ) . with_access_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.update_subscribe_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"subscribe-0001\" , description = \"description1\" , metadata = \"CATEGORY_0001\" , minimumValue = 100 , maximumValue = 10000 , sum = nil , orderDirection = \"desc\" , entryPeriodEventId = nil , accessPeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.update_subscribe_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"subscribe-0001\" , description = \"description1\" , metadata = \"CATEGORY_0001\" , minimumValue = 100 , maximumValue = 10000 , sum = nil , orderDirection = \"desc\" , entryPeriodEventId = nil , accessPeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSubscribeRankingModelMaster 구독 랭킹 모델 마스터 삭제 지정된 구독 랭킹 모델 마스터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 구독 랭킹 모델명 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. Result 타입 설명 item SubscribeRankingModelMaster 삭제한 구독 랭킹 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/ranking2\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := ranking2 . Gs2Ranking2RestClient { Session : \u0026 session , } result , err := client . DeleteSubscribeRankingModelMaster ( \u0026 ranking2 . DeleteSubscribeRankingModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RankingName : pointy . String ( \"subscribe-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Ranking2\\Gs2Ranking2RestClient ; use Gs2\\Ranking2\\Request\\DeleteSubscribeRankingModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2Ranking2RestClient ( $session ); try { $result = $client -\u003e deleteSubscribeRankingModelMaster ( ( new DeleteSubscribeRankingModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRankingName ( \"subscribe-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.ranking2.rest.Gs2Ranking2RestClient ; import io.gs2.ranking2.request.DeleteSubscribeRankingModelMasterRequest ; import io.gs2.ranking2.result.DeleteSubscribeRankingModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2Ranking2RestClient client = new Gs2Ranking2RestClient ( session ); try { DeleteSubscribeRankingModelMasterResult result = client . deleteSubscribeRankingModelMaster ( new DeleteSubscribeRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"subscribe-0001\" ) ); SubscribeRankingModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2Ranking2RestClient ( session ); AsyncResult Gs2 . Gs2Ranking2 . Result . DeleteSubscribeRankingModelMasterResult \u003e asyncResult = null ; yield return client . DeleteSubscribeRankingModelMaster ( new Gs2 . Gs2Ranking2 . Request . DeleteSubscribeRankingModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRankingName ( \"subscribe-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Ranking2 from '@/gs2/ranking2' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Ranking2 . Gs2Ranking2RestClient ( session ); try { const result = await client . deleteSubscribeRankingModelMaster ( new Gs2Ranking2 . DeleteSubscribeRankingModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRankingName ( \"subscribe-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import ranking2 session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = ranking2 . Gs2Ranking2RestClient ( session ) try : result = client . delete_subscribe_ranking_model_master ( ranking2 . DeleteSubscribeRankingModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_ranking_name ( 'subscribe-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'ranking2' ) api_result = client.delete_subscribe_ranking_model_master ({ namespaceName = \"namespace-0001\" , rankingName = \"subscribe-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'ranking2' ) api_result_handler = client.delete_subscribe_ranking_model_master_async ({ namespaceName = \"namespace-0001\" , rankingName = \"subscribe-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Ranking2 SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Ranking2 SDK API 레퍼런스","url":"/ko/api_reference/ranking2/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 리얼타임 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. serverType 문자열 열거형 enum {   “relay” }  서버 타입 실시간 통신을 위해 프로비저닝하는 게임 서버의 타입. 현재 “relay” 모드를 지원하며, 접속된 게임 클라이언트 간에 메시지를 전달하는 패킷 릴레이 서버를 제공합니다. 정의 설명 relay 패킷 릴레이 serverSpec 문자열 열거형 enum {   “realtime1.nano” }  서버 스펙 프로비저닝되는 게임 서버의 하드웨어 스펙 티어. 각 룸의 서버 인스턴스에 할당되는 컴퓨팅 리소스(CPU, 메모리)를 결정합니다. 현재 “realtime1.nano\"를 지원합니다. 정의 설명 realtime1.nano realtime1.nano createNotification NotificationSetting 룸 생성 완료 알림 룸의 프로비저닝이 완료되어 접속이 가능해졌을 때 트리거되는 푸시 알림 설정. 룸 생성은 비동기로 이루어지며(IP 주소, 포트, 암호화 키는 약간의 지연 후 할당됨), 이 알림을 통해 클라이언트에게 룸이 접속을 받을 준비가 되었음을 알립니다. logSetting LogSetting 로그 출력 설정 리얼타임 관련 조작 로그를 GS2-Log에 출력하기 위한 설정. 설정하면 룸 생성, 접속 이벤트, 메시지 릴레이 활동 등이 분석과 디버깅을 위해 기록됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Room 룸 멀티플레이어 대전에서 실시간 통신을 처리하기 위한 전용 게임 서버 인스턴스를 나타냅니다. 룸 생성은 비동기로 이루어지며, 요청 후 시스템이 서버를 프로비저닝하고 인스턴스 준비가 완료되면 IP 주소, 포트, 암호화 키가 할당됩니다. 클라이언트는 접속을 시도하기 전에 생성 완료 알림을 기다리거나 폴링해야 합니다. 암호화 키는 게임 클라이언트와 릴레이 서버 간의 안전한 통신 채널을 확립하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 roomId string ※ ~ 1024자 룸 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ipAddress string ~ 128자 IP 주소 프로비저닝된 게임 서버의 IP 주소. 룸의 서버 인스턴스 준비가 완료된 후 시스템에 의해 자동으로 할당됩니다. 룸 생성 직후에는 이용할 수 없습니다. 최대 128자. port int 0 ~ 65535 대기 포트 프로비저닝된 게임 서버의 대기 포트 번호. 서버 인스턴스 준비가 완료된 후 IP 주소와 함께 자동으로 할당됩니다. 범위: 0~65535. encryptionKey string ~ 256자 암호화 키 게임 클라이언트와 릴레이 서버 간의 통신을 암호화하기 위한 키. 서버 인스턴스 준비가 완료된 후 IP 주소 및 포트와 함께 자동으로 할당됩니다. 클라이언트는 릴레이 서버를 통해 송수신하는 메시지의 암호화·복호화에 이 키를 사용해야 합니다. 최대 256자. notificationUserIds List [] 0 ~ 1000 items 통지 대상 사용자 ID 목록 룸의 프로비저닝이 완료되어 접속이 가능해졌을 때 푸시 알림을 받을 사용자 ID 목록. 일반적으로 실시간 세션에 참가하는 플레이어를 포함하여 접속을 시작하도록 알립니다. 최대 1,000건. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 realtime . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.DescribeNamespacesRequest ; import io.gs2.realtime.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Realtime . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Realtime . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . describe_namespaces ( realtime . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'realtime' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 리얼타임 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. serverType 문자열 열거형 enum {   “relay” }  서버 타입 실시간 통신을 위해 프로비저닝하는 게임 서버의 타입. 현재 “relay” 모드를 지원하며, 접속된 게임 클라이언트 간에 메시지를 전달하는 패킷 릴레이 서버를 제공합니다. 정의 설명 relay 패킷 릴레이 serverSpec 문자열 열거형 enum {   “realtime1.nano” }  서버 스펙 프로비저닝되는 게임 서버의 하드웨어 스펙 티어. 각 룸의 서버 인스턴스에 할당되는 컴퓨팅 리소스(CPU, 메모리)를 결정합니다. 현재 “realtime1.nano\"를 지원합니다. 정의 설명 realtime1.nano realtime1.nano createNotification NotificationSetting 룸 생성 완료 알림 룸의 프로비저닝이 완료되어 접속이 가능해졌을 때 트리거되는 푸시 알림 설정. 룸 생성은 비동기로 이루어지며(IP 주소, 포트, 암호화 키는 약간의 지연 후 할당됨), 이 알림을 통해 클라이언트에게 룸이 접속을 받을 준비가 되었음을 알립니다. logSetting LogSetting 로그 출력 설정 리얼타임 관련 조작 로그를 GS2-Log에 출력하기 위한 설정. 설정하면 룸 생성, 접속 이벤트, 메시지 릴레이 활동 등이 분석과 디버깅을 위해 기록됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 realtime . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , ServerType : pointy . String ( \"relay\" ), ServerSpec : pointy . String ( \"realtime1.nano\" ), CreateNotification : nil , LogSetting : \u0026 realtime . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withServerType ( \"relay\" ) -\u003e withServerSpec ( \"realtime1.nano\" ) -\u003e withCreateNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Realtime\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.CreateNamespaceRequest ; import io.gs2.realtime.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withServerType ( \"relay\" ) . withServerSpec ( \"realtime1.nano\" ) . withCreateNotification ( null ) . withLogSetting ( new io . gs2 . realtime . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Realtime . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithServerType ( \"relay\" ) . WithServerSpec ( \"realtime1.nano\" ) . WithCreateNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Realtime . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Realtime . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withServerType ( \"relay\" ) . withServerSpec ( \"realtime1.nano\" ) . withCreateNotification ( null ) . withLogSetting ( new Gs2Realtime . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . create_namespace ( realtime . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_server_type ( 'relay' ) . with_server_spec ( 'realtime1.nano' ) . with_create_notification ( None ) . with_log_setting ( realtime . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , serverType = \"relay\" , serverSpec = \"realtime1.nano\" , createNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'realtime' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , serverType = \"relay\" , serverSpec = \"realtime1.nano\" , createNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 realtime . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.GetNamespaceStatusRequest ; import io.gs2.realtime.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Realtime . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Realtime . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . get_namespace_status ( realtime . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'realtime' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 realtime . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.GetNamespaceRequest ; import io.gs2.realtime.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Realtime . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Realtime . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . get_namespace ( realtime . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'realtime' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 리얼타임 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. serverType 문자열 열거형 enum {   “relay” }  서버 타입 실시간 통신을 위해 프로비저닝하는 게임 서버의 타입. 현재 “relay” 모드를 지원하며, 접속된 게임 클라이언트 간에 메시지를 전달하는 패킷 릴레이 서버를 제공합니다. 정의 설명 relay 패킷 릴레이 serverSpec 문자열 열거형 enum {   “realtime1.nano” }  서버 스펙 프로비저닝되는 게임 서버의 하드웨어 스펙 티어. 각 룸의 서버 인스턴스에 할당되는 컴퓨팅 리소스(CPU, 메모리)를 결정합니다. 현재 “realtime1.nano\"를 지원합니다. 정의 설명 realtime1.nano realtime1.nano createNotification NotificationSetting 룸 생성 완료 알림 룸의 프로비저닝이 완료되어 접속이 가능해졌을 때 트리거되는 푸시 알림 설정. 룸 생성은 비동기로 이루어지며(IP 주소, 포트, 암호화 키는 약간의 지연 후 할당됨), 이 알림을 통해 클라이언트에게 룸이 접속을 받을 준비가 되었음을 알립니다. logSetting LogSetting 로그 출력 설정 리얼타임 관련 조작 로그를 GS2-Log에 출력하기 위한 설정. 설정하면 룸 생성, 접속 이벤트, 메시지 릴레이 활동 등이 분석과 디버깅을 위해 기록됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 realtime . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , ServerType : pointy . String ( \"relay\" ), ServerSpec : pointy . String ( \"realtime1.nano\" ), CreateNotification : nil , LogSetting : \u0026 realtime . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withServerType ( \"relay\" ) -\u003e withServerSpec ( \"realtime1.nano\" ) -\u003e withCreateNotification ( null ) -\u003e withLogSetting (( new \\Gs2\\Realtime\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.UpdateNamespaceRequest ; import io.gs2.realtime.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withServerType ( \"relay\" ) . withServerSpec ( \"realtime1.nano\" ) . withCreateNotification ( null ) . withLogSetting ( new io . gs2 . realtime . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Realtime . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithServerType ( \"relay\" ) . WithServerSpec ( \"realtime1.nano\" ) . WithCreateNotification ( null ) . WithLogSetting ( new Gs2 . Gs2Realtime . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Realtime . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withServerType ( \"relay\" ) . withServerSpec ( \"realtime1.nano\" ) . withCreateNotification ( null ) . withLogSetting ( new Gs2Realtime . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . update_namespace ( realtime . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_server_type ( 'relay' ) . with_server_spec ( 'realtime1.nano' ) . with_create_notification ( None ) . with_log_setting ( realtime . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , serverType = \"relay\" , serverSpec = \"realtime1.nano\" , createNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'realtime' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , serverType = \"relay\" , serverSpec = \"realtime1.nano\" , createNotification = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 realtime . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.DeleteNamespaceRequest ; import io.gs2.realtime.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Realtime . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Realtime . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . delete_namespace ( realtime . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'realtime' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; now 현재 시각 취득 클라이언트와 서버 간의 시각 동기화를 위해 현재 서버 타임스탬프를 반환합니다. 타임스탬프는 Unix 시간(밀리초)으로 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 accessToken string ~ 128자 액세스 토큰 Result 타입 설명 timestamp long 현재 시각 Unix 시간·밀리초 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . Now ( \u0026 realtime . NowRequest { AccessToken : pointy . String ( \"userId\" ), } ) if err != nil { panic ( \"error occurred\" ) } timestamp := result . Timestamp use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\NowRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e now ( ( new NowRequest ()) -\u003e withAccessToken ( \"userId\" ) ); $timestamp = $result -\u003e getTimestamp (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.NowRequest ; import io.gs2.realtime.result.NowResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { NowResult result = client . now ( new NowRequest () . withAccessToken ( \"userId\" ) ); long timestamp = result . getTimestamp (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . NowResult \u003e asyncResult = null ; yield return client . Now ( new Gs2 . Gs2Realtime . Request . NowRequest () . WithAccessToken ( \"userId\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var timestamp = result . Timestamp ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . now ( new Gs2Realtime . NowRequest () . withAccessToken ( \"userId\" ) ); const timestamp = result . getTimestamp (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . now ( realtime . NowRequest () . with_access_token ( 'userId' ) ) timestamp = result . timestamp except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.now ({ accessToken = \"userId\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result timestamp = result.timestamp ; client = gs2 ( 'realtime' ) api_result_handler = client.now_async ({ accessToken = \"userId\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result timestamp = result.timestamp ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 realtime . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.GetServiceVersionRequest ; import io.gs2.realtime.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Realtime . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Realtime . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . get_service_version ( realtime . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'realtime' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRooms 룸 정보 목록 취득 네임스페이스 내에서 현재 활성화된 룸의 페이지네이션 목록을 취득합니다. 각 룸에는 IP 주소, 포트, 암호화 키 등의 접속 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 룸 정보 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . DescribeRooms ( \u0026 realtime . DescribeRoomsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\DescribeRoomsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e describeRooms ( ( new DescribeRoomsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.DescribeRoomsRequest ; import io.gs2.realtime.result.DescribeRoomsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { DescribeRoomsResult result = client . describeRooms ( new DescribeRoomsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Room \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . DescribeRoomsResult \u003e asyncResult = null ; yield return client . DescribeRooms ( new Gs2 . Gs2Realtime . Request . DescribeRoomsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . describeRooms ( new Gs2Realtime . DescribeRoomsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . describe_rooms ( realtime . DescribeRoomsRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.describe_rooms ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'realtime' ) api_result_handler = client.describe_rooms_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; wantRoom 룸 생성을 요청 룸 생성은 즉시 완료되지 않습니다. 룸 생성이 완료되면 서버로부터 푸시 알림을 받을 수 있습니다. 알림을 원하는 경우, 푸시 알림을 전송할 대상 사용자 ID 목록을 notificationUserIds에 지정합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. notificationUserIds List [] 0 ~ 1000 items 통지 대상 사용자 ID 목록 룸의 프로비저닝이 완료되어 접속이 가능해졌을 때 푸시 알림을 받을 사용자 ID 목록. 일반적으로 실시간 세션에 참가하는 플레이어를 포함하여 접속을 시작하도록 알립니다. 최대 1,000건. Result 타입 설명 item Room 룸 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . WantRoom ( \u0026 realtime . WantRoomRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"room-0001\" ), NotificationUserIds : [] * string { pointy . String ( \"user-0001\" ), pointy . String ( \"user-0002\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\WantRoomRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e wantRoom ( ( new WantRoomRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"room-0001\" ) -\u003e withNotificationUserIds ([ \"user-0001\" , \"user-0002\" , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.WantRoomRequest ; import io.gs2.realtime.result.WantRoomResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { WantRoomResult result = client . wantRoom ( new WantRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"room-0001\" ) . withNotificationUserIds ( Arrays . asList ( \"user-0001\" , \"user-0002\" )) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . WantRoomResult \u003e asyncResult = null ; yield return client . WantRoom ( new Gs2 . Gs2Realtime . Request . WantRoomRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"room-0001\" ) . WithNotificationUserIds ( new string [] { \"user-0001\" , \"user-0002\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . wantRoom ( new Gs2Realtime . WantRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"room-0001\" ) . withNotificationUserIds ([ \"user-0001\" , \"user-0002\" , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . want_room ( realtime . WantRoomRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'room-0001' ) . with_notification_user_ids ([ 'user-0001' , 'user-0002' , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.want_room ({ namespaceName = \"namespace-0001\" , name = \"room-0001\" , notificationUserIds = { \"user-0001\" , \"user-0002\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'realtime' ) api_result_handler = client.want_room_async ({ namespaceName = \"namespace-0001\" , name = \"room-0001\" , notificationUserIds = { \"user-0001\" , \"user-0002\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRoom 룸 정보 취득 게임 서버 접속에 필요한 IP 주소, 포트, 암호화 키를 포함한 지정된 룸의 상세 정보를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Room 룸 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . GetRoom ( \u0026 realtime . GetRoomRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\GetRoomRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e getRoom ( ( new GetRoomRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.GetRoomRequest ; import io.gs2.realtime.result.GetRoomResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { GetRoomResult result = client . getRoom ( new GetRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . GetRoomResult \u003e asyncResult = null ; yield return client . GetRoom ( new Gs2 . Gs2Realtime . Request . GetRoomRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . getRoom ( new Gs2Realtime . GetRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . get_room ( realtime . GetRoomRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.get_room ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'realtime' ) api_result_handler = client.get_room_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRoom 룸 삭제 지정된 룸을 삭제하고 관련된 게임 서버 리소스를 해제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. roomName string  ~ 128자 룸 이름 룸 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Room 룸 정보 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/realtime\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := realtime . Gs2RealtimeRestClient { Session : \u0026 session , } result , err := client . DeleteRoom ( \u0026 realtime . DeleteRoomRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RoomName : pointy . String ( \"room-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Realtime\\Gs2RealtimeRestClient ; use Gs2\\Realtime\\Request\\DeleteRoomRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2RealtimeRestClient ( $session ); try { $result = $client -\u003e deleteRoom ( ( new DeleteRoomRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRoomName ( \"room-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.realtime.rest.Gs2RealtimeRestClient ; import io.gs2.realtime.request.DeleteRoomRequest ; import io.gs2.realtime.result.DeleteRoomResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2RealtimeRestClient client = new Gs2RealtimeRestClient ( session ); try { DeleteRoomResult result = client . deleteRoom ( new DeleteRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) ); Room item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2RealtimeRestClient ( session ); AsyncResult Gs2 . Gs2Realtime . Result . DeleteRoomResult \u003e asyncResult = null ; yield return client . DeleteRoom ( new Gs2 . Gs2Realtime . Request . DeleteRoomRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRoomName ( \"room-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Realtime from '@/gs2/realtime' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Realtime . Gs2RealtimeRestClient ( session ); try { const result = await client . deleteRoom ( new Gs2Realtime . DeleteRoomRequest () . withNamespaceName ( \"namespace-0001\" ) . withRoomName ( \"room-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import realtime session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = realtime . Gs2RealtimeRestClient ( session ) try : result = client . delete_room ( realtime . DeleteRoomRequest () . with_namespace_name ( 'namespace-0001' ) . with_room_name ( 'room-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'realtime' ) api_result = client.delete_room ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'realtime' ) api_result_handler = client.delete_room_async ({ namespaceName = \"namespace-0001\" , roomName = \"room-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Realtime SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Realtime SDK API 레퍼런스","url":"/ko/api_reference/realtime/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스케줄 작업 실행 시 트랜잭션 처리 방식을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 스케줄 관련 작업 로그를 GS2-Log로 출력하기 위한 설정입니다. 설정하면 이벤트 조회, 트리거 발동, 트리거 삭제 등의 작업이 분석 및 감사를 위해 기록됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Trigger 트리거 상대 이벤트 스케줄링의 기점을 정의하여, 플레이어별 이벤트 기간을 구현합니다. 플레이어에 대해 트리거가 발동되면 발동 시각(triggeredAt)과 유효 기간(expiresAt)이 기록됩니다. “relative” 스케줄 타입으로 설정된 이벤트는 트리거를 이름으로 참조하며, 해당 플레이어의 이벤트 기간은 트리거의 발동 시각부터 유효 기간까지 이어집니다. 트리거는 갱신할 수 있으며(createdAt을 재설정하고 expiresAt을 업데이트), 유효 기간이 지나면 TTL에 의해 자동으로 정리됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerId string ※ ~ 1024자 트리거 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID triggeredAt long ※ 현재 시각 트리거 발동 일시 이 트리거가 발동된 타임스탬프입니다. 상대 이벤트 스케줄링의 기준 시작점 역할을 합니다. 명시적으로 지정하지 않으면 현재 시각이 자동으로 설정됩니다. UNIX 시간(밀리초)으로 표현됩니다. expiresAt long  유효 기간 이 트리거가 만료되어 상대 이벤트 기간이 종료되는 타임스탬프입니다. 이 시각 이후 트리거는 만료된 것으로 간주되며(IsExpire가 true를 반환), 해당 플레이어에 대한 관련 상대 이벤트는 더 이상 유효하지 않습니다. 트리거 데이터는 만료 후 DynamoDB TTL에 의해 자동으로 정리됩니다. UNIX 시간(밀리초)으로 표현됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Event 이벤트 이벤트의 기간에는 절대 기간과 상대 기간의 2가지 종류가 있습니다. 절대 기간은 예를 들어 YYYY년 MM월 DD일 00:00(UTC) ~ YYYY년 MM월 DD일 23:59(UTC)와 같은 고정된 기간이며, 상대 기간은 트리거를 당긴 시점부터 24시간과 같이 게임 플레이어마다 다른 기간을 이벤트 기간으로 하는 것입니다. 이벤트에는 개최 기간뿐만 아니라 반복도 설정할 수 있게 되어 있어 이벤트 기간 중 월요일 10:00 ~ 11:00만을 이벤트 기간으로 하는 설정도 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 eventId string ※ ~ 1024자 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scheduleType 문자열 열거형 enum {   “absolute”,   “relative” }  스케줄 타입 이벤트 기간을 정의하는 방식을 결정합니다. “absolute\"는 모든 플레이어에게 동일하게 적용되는 고정된 시작/종료 타임스탬프를 사용합니다. “relative\"는 플레이어별 트리거를 기점으로 사용하여, 개인화된 이벤트 기간을 구현합니다(예: 각 플레이어가 처음 로그인한 시점부터 24시간). 정의 설명 absolute 고정 기간 relative 플레이어별 기간 absoluteBegin long 절대 시작 일시 절대 스케줄링에서 이벤트 기간의 고정 시작 시각입니다. 모든 플레이어가 동일한 시작 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 과거부터 시작된 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. absoluteEnd long 절대 종료 일시 절대 스케줄링에서 이벤트 기간의 고정 종료 시각입니다. 모든 플레이어가 동일한 종료 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 종료되지 않는 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. relativeTriggerName string {scheduleType} == “relative” ※ ~ 128자 이벤트 시작 트리거 이름 게임 플레이어별로 이벤트 기간을 설정하는( relative ) 경우, 이벤트 시작의 기점이 되는 트리거의 이름을 지정합니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ※ scheduleType이(가) “relative” 이면 필수 repeatSetting RepeatSetting  반복 설정 이벤트 기간 내에서 반복되는 유효 시간대에 대한 설정입니다. 활성 기간을 특정 시간대, 요일, 월중 날짜, 또는 사용자 지정 활성/비활성 일 주기로 좁힐 수 있습니다. 반복 패턴 없이 이벤트 기간 전체를 활성 상태로 유지하려면 repeatType을 “always\"로 설정합니다. RepeatSetting 반복 설정 이벤트 전체 기간 내에서 반복되는 유효 시간대를 설정합니다. 5가지 반복 타입을 지원합니다: “always”(이벤트 기간 전체), “daily”(매일 특정 시간대), “weekly”(매주 특정 요일 범위+시간대), “monthly”(매월 특정 날짜 범위+시간대), “custom”(기준일로부터 활성/비활성 일수의 교대 주기). daily/weekly/monthly 타입에서 beginHour와 endHour가 같으면 종료 시각은 다음 날 같은 시각으로 처리됩니다(즉 24시간 전체 윈도우). 상세 타입 활성화 조건 필수 기본값 값 제한 설명 repeatType 문자열 열거형 enum {   “always”,   “daily”,   “weekly”,   “monthly”,   “custom” } “always” 반복 종류 이벤트 기간 내에 적용할 반복 패턴의 종류입니다. 타입에 따라 필요한 추가 필드가 다릅니다: daily/weekly/monthly는 시간 설정, weekly는 요일, monthly는 날짜, custom은 기준 타임스탬프와 일수가 필요합니다. 지정하지 않으면 기본값은 “always\"입니다. 정의 설명 always 이벤트 기간 중 상시 유효 daily 이벤트 기간 중 매일 X시 X시 weekly 이벤트 기간 중 매주 개시 요일 종료 요일 X시 X시 monthly 이벤트 기간 중 매월 개시일 종료일 X시~X시 custom 기준일부터 시작하여, 이벤트 기간 중 X일 활성, Y일 비활성을 반복 beginDayOfMonth int {repeatType} == “monthly” ※ 1 ~ 31 반복 시작일 반복 윈도우가 시작되는 월중 날짜(1~31)입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 해당 월의 마지막 날로 처리됩니다. repeatType이 “monthly\"인 경우에만 적용됩니다. ※ repeatType이(가) “monthly” 이면 필수 endDayOfMonth int {repeatType} == “monthly” ※ 1 ~ 31 반복 종료일 반복 윈도우가 종료되는 월중 날짜(1~31)입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 해당 월의 마지막 날로 처리됩니다. repeatType이 “monthly\"인 경우에만 적용됩니다. ※ repeatType이(가) “monthly” 이면 필수 beginDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {repeatType} == “weekly” ※ 반복 시작 요일 반복 윈도우가 시작되는 요일입니다. 윈도우는 주의 경계를 넘어설 수 있습니다(예: 금요일~월요일). repeatType이 “weekly\"인 경우에만 적용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ repeatType이(가) “weekly” 이면 필수 endDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {repeatType} == “weekly” ※ 반복 종료 요일 반복 윈도우가 종료되는 요일입니다. beginDayOfWeek과 조합하여 주간 활성 기간을 정의합니다. repeatType이 “weekly\"인 경우에만 적용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ repeatType이(가) “weekly” 이면 필수 beginHour int {repeatType} in [“daily”, “weekly”, “monthly”] ※ 0 ~ 23 반복 시작 시각(시) 각 주기마다 반복 윈도우가 시작되는 시각(UTC, 0~23)입니다. daily, weekly, monthly 반복 타입에서 필수입니다. beginHour와 endHour가 같으면 윈도우는 24시간(다음 날 같은 시각까지)이 됩니다. ※ repeatType이(가) “daily”,“weekly”,“monthly\"이면 필수 endHour int {repeatType} in [“daily”, “weekly”, “monthly”] ※ 0 ~ 24 반복 종료 시각(시) 각 주기마다 반복 윈도우가 종료되는 시각(UTC, 0~24)입니다. 24를 지정하면 다음 날 자정을 나타냅니다. daily, weekly, monthly 반복 타입에서 필수입니다. ※ repeatType이(가) “daily”,“weekly”,“monthly\"이면 필수 anchorTimestamp long {repeatType} == “custom” ※ 기준 타임스탬프 커스텀 활성/비활성 주기가 시작되는 기준일입니다. 시스템은 이 기준일로부터 경과한 일수를 바탕으로 현재 시각이 어느 단계(활성 또는 비활성)에 있는지 계산합니다. repeatType이 “custom\"인 경우에만 적용됩니다. UNIX 시간(밀리초)으로 표현합니다. ※ repeatType이(가) “custom” 이면 필수 activeDays int {repeatType} == “custom” ※ 1 ~ 2147483646 활성 일수 각 커스텀 주기에서 이벤트가 연속으로 활성 상태가 되는 일수입니다. 활성 일수가 지난 후, inactiveDays에서 지정한 일수만큼 이벤트가 비활성 상태가 되며, 이후 주기가 반복됩니다. repeatType이 “custom\"인 경우에만 적용됩니다. 최소 1일. ※ repeatType이(가) “custom” 이면 필수 inactiveDays int {repeatType} == “custom” ※ 0 ~ 2147483646 비활성 일수 각 커스텀 주기에서 이벤트가 연속으로 비활성 상태가 되는 일수입니다. 활성 일수 뒤에 이어집니다. 공백 없이 계속 활성 상태인 이벤트로 하려면 0을 설정합니다. repeatType이 “custom\"인 경우에만 적용됩니다. 최소 0일. ※ repeatType이(가) “custom” 이면 필수 RepeatSchedule 반복 스케줄 상태 특정 시점에서의 이벤트 반복 사이클의 현재 상태를 나타냅니다. 반복 횟수(사이클이 발생한 횟수), 현재 활성 윈도우의 시작·종료 시각, 전회 완료된 윈도우의 종료 시각, 그리고 다음 윈도우의 시작 시각을 포함합니다. 이 정보는 이벤트의 반복 설정과 현재 시각을 토대로 동적으로 계산됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 repeatCount int  0 ~ 2147483646 반복 횟수 현재 시각까지 완료된 반복 사이클의 횟수. 반복 윈도우가 종료될 때마다 증가합니다. 시즌제나 정기 이벤트의 사이클 진행 상황을 추적하는 데 사용할 수 있습니다. currentRepeatStartAt long 현재 반복 시작 일시 현재 활성 상태인 반복 윈도우의 시작 시각. 이벤트가 현재 활성 상태인 반복 윈도우에 있지 않은 경우 null 입니다. UNIX 시간(밀리초)으로 표현됩니다. currentRepeatEndAt long 현재 반복 종료 일시 현재 활성 상태인 반복 윈도우의 종료 시각. 이벤트가 현재 활성 상태인 반복 윈도우에 있지 않은 경우 null 입니다. UNIX 시간(밀리초)으로 표현됩니다. lastRepeatEndAt long 직전 반복 종료 일시 가장 최근에 완료된 반복 윈도우의 종료 시각. 아직 반복 윈도우가 종료되지 않은 경우 null 입니다. UNIX 시간(밀리초)으로 표현됩니다. nextRepeatStartAt long 다음 반복 시작 일시 다음 반복 윈도우의 시작 시각. 이벤트 기간 내에 다음 반복 윈도우가 없는 경우 null 입니다. UNIX 시간(밀리초)으로 표현됩니다. CurrentEventMaster 현재 활성화된 이벤트 마스터 데이터 현재 네임스페이스 내에서 유효한 이벤트 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여, 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Schedule 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 EventMaster 이벤트 마스터 이벤트 마스터는 게임 내에서 사용되는 이벤트의 편집·관리용 데이터로, 관리 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행하면 실제로 게임에서 참조되는 이벤트로 반영됩니다. 이벤트 기간에는 절대 기간과 상대 기간, 두 가지 종류가 있습니다. 절대 기간은 예를 들어 YYYY년 MM월 DD일 00:00(UTC) ~ YYYY년 MM월 DD일 23:59(UTC)와 같은 고정된 기간이며, 상대 기간은 트리거가 발동된 시점으로부터 24시간과 같이 게임 플레이어마다 다른 기간을 이벤트 기간으로 하는 것입니다. 이벤트에는 개최 기간뿐 아니라 반복도 설정할 수 있어 이벤트 기간 중 월요일 10:00 ~ 11:00만을 이벤트 기간으로 하는 설정도 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 eventId string ※ ~ 1024자 이벤트 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 이벤트 이름 이벤트 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scheduleType 문자열 열거형 enum {   “absolute”,   “relative” }  스케줄 타입 이벤트 기간을 정의하는 방식을 결정합니다. “absolute\"는 모든 플레이어에게 동일하게 적용되는 고정된 시작/종료 타임스탬프를 사용합니다. “relative\"는 플레이어별 트리거를 기점으로 사용하여, 개인화된 이벤트 기간을 구현합니다(예: 각 플레이어가 처음 로그인한 시점부터 24시간). 정의 설명 absolute 고정 기간 relative 플레이어별 기간 absoluteBegin long 절대 시작 일시 절대 스케줄링에서 이벤트 기간의 고정 시작 시각입니다. 모든 플레이어가 동일한 시작 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 과거부터 시작된 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. absoluteEnd long 절대 종료 일시 절대 스케줄링에서 이벤트 기간의 고정 종료 시각입니다. 모든 플레이어가 동일한 종료 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 종료되지 않는 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. relativeTriggerName string {scheduleType} == “relative” ※ ~ 128자 이벤트 시작 트리거 이름 게임 플레이어별로 이벤트 기간을 설정하는( relative ) 경우, 이벤트 시작의 기점이 되는 트리거의 이름을 지정합니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ※ scheduleType이(가) “relative” 이면 필수 repeatSetting RepeatSetting  반복 설정 이벤트 기간 내에서 반복되는 유효 시간대에 대한 설정입니다. 활성 기간을 특정 시간대, 요일, 월중 날짜, 또는 사용자 지정 활성/비활성 일 주기로 좁힐 수 있습니다. 반복 패턴 없이 이벤트 기간 전체를 활성 상태로 유지하려면 repeatType을 “always\"로 설정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 schedule . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DescribeNamespacesRequest ; import io.gs2.schedule.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Schedule . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Schedule . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . describe_namespaces ( schedule . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'schedule' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스케줄 작업 실행 시 트랜잭션 처리 방식을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 스케줄 관련 작업 로그를 GS2-Log로 출력하기 위한 설정입니다. 설정하면 이벤트 조회, 트리거 발동, 트리거 삭제 등의 작업이 분석 및 감사를 위해 기록됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 schedule . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , LogSetting : \u0026 schedule . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Schedule\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.CreateNamespaceRequest ; import io.gs2.schedule.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . schedule . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Schedule . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Schedule . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Schedule . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Schedule . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . create_namespace ( schedule . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_log_setting ( schedule . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 schedule . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetNamespaceStatusRequest ; import io.gs2.schedule.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Schedule . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Schedule . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_namespace_status ( schedule . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'schedule' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 schedule . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetNamespaceRequest ; import io.gs2.schedule.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Schedule . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Schedule . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_namespace ( schedule . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스케줄 작업 실행 시 트랜잭션 처리 방식을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 스케줄 관련 작업 로그를 GS2-Log로 출력하기 위한 설정입니다. 설정하면 이벤트 조회, 트리거 발동, 트리거 삭제 등의 작업이 분석 및 감사를 위해 기록됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 schedule . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , LogSetting : \u0026 schedule . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Schedule\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.UpdateNamespaceRequest ; import io.gs2.schedule.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . schedule . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Schedule . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Schedule . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Schedule . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Schedule . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . update_namespace ( schedule . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_log_setting ( schedule . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 schedule . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DeleteNamespaceRequest ; import io.gs2.schedule.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Schedule . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Schedule . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . delete_namespace ( schedule . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 schedule . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetServiceVersionRequest ; import io.gs2.schedule.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Schedule . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Schedule . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_service_version ( schedule . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 schedule . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DumpUserDataByUserIdRequest ; import io.gs2.schedule.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Schedule . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Schedule . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . dump_user_data_by_user_id ( schedule . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'schedule' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 schedule . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.schedule.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Schedule . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Schedule . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( schedule . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'schedule' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 schedule . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.CleanUserDataByUserIdRequest ; import io.gs2.schedule.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Schedule . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Schedule . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . clean_user_data_by_user_id ( schedule . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'schedule' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 schedule . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.schedule.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Schedule . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Schedule . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( schedule . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'schedule' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 schedule . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.schedule.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Schedule . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Schedule . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( schedule . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'schedule' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 schedule . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.ImportUserDataByUserIdRequest ; import io.gs2.schedule.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Schedule . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Schedule . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . import_user_data_by_user_id ( schedule . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'schedule' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 schedule . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.CheckImportUserDataByUserIdRequest ; import io.gs2.schedule.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Schedule . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Schedule . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( schedule . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'schedule' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeTriggers 트리거 목록 취득 요청한 사용자에 대해 당겨진 트리거의 페이지네이션 리스트를 취득합니다. 트리거는 상대 스케줄 이벤트를 활성화하기 위해 사용되며, 유효기간(TTL)을 가집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 트리거 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DescribeTriggers ( \u0026 schedule . DescribeTriggersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DescribeTriggersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e describeTriggers ( ( new DescribeTriggersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DescribeTriggersRequest ; import io.gs2.schedule.result.DescribeTriggersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DescribeTriggersResult result = client . describeTriggers ( new DescribeTriggersRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Trigger \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DescribeTriggersResult \u003e asyncResult = null ; yield return client . DescribeTriggers ( new Gs2 . Gs2Schedule . Request . DescribeTriggersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . describeTriggers ( new Gs2Schedule . DescribeTriggersRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . describe_triggers ( schedule . DescribeTriggersRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.describe_triggers ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'schedule' ) api_result_handler = client.describe_triggers_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeTriggersByUserId 사용자 ID를 지정하여 트리거 목록 취득 지정한 사용자에 대해 당겨진 트리거의 페이지네이션 리스트를 취득합니다. 트리거는 상대 스케줄 이벤트를 활성화하기 위해 사용되며, 유효기간(TTL)을 가집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 트리거 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DescribeTriggersByUserId ( \u0026 schedule . DescribeTriggersByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DescribeTriggersByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e describeTriggersByUserId ( ( new DescribeTriggersByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DescribeTriggersByUserIdRequest ; import io.gs2.schedule.result.DescribeTriggersByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DescribeTriggersByUserIdResult result = client . describeTriggersByUserId ( new DescribeTriggersByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Trigger \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DescribeTriggersByUserIdResult \u003e asyncResult = null ; yield return client . DescribeTriggersByUserId ( new Gs2 . Gs2Schedule . Request . DescribeTriggersByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . describeTriggersByUserId ( new Gs2Schedule . DescribeTriggersByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . describe_triggers_by_user_id ( schedule . DescribeTriggersByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.describe_triggers_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'schedule' ) api_result_handler = client.describe_triggers_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getTrigger 트리거 취득 이름, 작성 시각, 유효기간(TTL)을 포함한 지정된 트리거를 취득합니다. 요청한 사용자의 트리거 현재 상태를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Trigger 트리거 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetTrigger ( \u0026 schedule . GetTriggerRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TriggerName : pointy . String ( \"trigger1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetTriggerRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getTrigger ( ( new GetTriggerRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTriggerName ( \"trigger1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetTriggerRequest ; import io.gs2.schedule.result.GetTriggerResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetTriggerResult result = client . getTrigger ( new GetTriggerRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTriggerName ( \"trigger1\" ) ); Trigger item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetTriggerResult \u003e asyncResult = null ; yield return client . GetTrigger ( new Gs2 . Gs2Schedule . Request . GetTriggerRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTriggerName ( \"trigger1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getTrigger ( new Gs2Schedule . GetTriggerRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTriggerName ( \"trigger1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_trigger ( schedule . GetTriggerRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_trigger_name ( 'trigger1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_trigger ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , triggerName = \"trigger1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.get_trigger_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , triggerName = \"trigger1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getTriggerByUserId 사용자 ID를 지정하여 트리거 취득 지정한 사용자의 이름, 작성 시각, 유효기간(TTL)을 포함한 지정된 트리거를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Trigger 트리거 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetTriggerByUserId ( \u0026 schedule . GetTriggerByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TriggerName : pointy . String ( \"trigger1\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetTriggerByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getTriggerByUserId ( ( new GetTriggerByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTriggerName ( \"trigger1\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetTriggerByUserIdRequest ; import io.gs2.schedule.result.GetTriggerByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetTriggerByUserIdResult result = client . getTriggerByUserId ( new GetTriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTriggerName ( \"trigger1\" ) . withTimeOffsetToken ( null ) ); Trigger item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetTriggerByUserIdResult \u003e asyncResult = null ; yield return client . GetTriggerByUserId ( new Gs2 . Gs2Schedule . Request . GetTriggerByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTriggerName ( \"trigger1\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getTriggerByUserId ( new Gs2Schedule . GetTriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTriggerName ( \"trigger1\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_trigger_by_user_id ( schedule . GetTriggerByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_trigger_name ( 'trigger1' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_trigger_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , triggerName = \"trigger1\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.get_trigger_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , triggerName = \"trigger1\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; triggerByUserId 사용자 ID를 지정하여 트리거 실행 지정한 사용자의 트리거를 당깁니다. 트리거 전략에 따라 동작이 결정됩니다: ‘renew’는 새로운 TTL로 리셋, ’extend’는 기존 TTL을 연장, ‘drop’은 이미 당겨진 경우 무시, ‘repeatCycleEnd’/‘repeatCycleNextStart’/‘absoluteEnd’는 지정한 이벤트의 스케줄에 유효기간을 맞춥니다. 트리거를 당기면 관련된 상대 스케줄 이벤트가 활성화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID triggerStrategy 문자열 열거형 enum {   “renew”,   “extend”,   “drop”,   “repeatCycleEnd”,   “repeatCycleNextStart”,   “absoluteEnd” }  트리거 실행 정책 정의 설명 renew 이미 트리거가 당겨진 경우 새로운 기간으로 다시 당기기 extend 이미 트리거가 당겨진 경우 기간 연장 drop 이미 트리거가 당겨진 경우 무시 repeatCycleEnd 지정한 이벤트의 반복 기간 종료 일시에 유효 기간이 만료되도록 트리거 당기기 repeatCycleNextStart 지정한 이벤트의 반복에서 다음 반복 시작 일시에 유효 기간이 만료되도록 트리거 당기기 absoluteEnd 지정한 이벤트의 종료 일시에 유효 기간이 만료되도록 트리거 당기기 ttl int {triggerStrategy} in [“renew”, “extend”, “drop”] ※ 0 ~ 2147483646 트리거 유효기간(초) ※ triggerStrategy이(가) “renew”,“extend”,“drop\"이면 필수 eventId string {triggerStrategy} in [“repeatCycleEnd”, “repeatCycleNextStart”, “absoluteEnd”] ※ ~ 1024자 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ triggerStrategy이(가) “repeatCycleEnd”,“repeatCycleNextStart”,“absoluteEnd\"이면 필수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Trigger 당긴 트리거 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . TriggerByUserId ( \u0026 schedule . TriggerByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), TriggerName : pointy . String ( \"trigger1\" ), UserId : pointy . String ( \"user-0001\" ), TriggerStrategy : pointy . String ( \"renew\" ), Ttl : pointy . Int32 ( 300 ), EventId : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\TriggerByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e triggerByUserId ( ( new TriggerByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withTriggerName ( \"trigger1\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTriggerStrategy ( \"renew\" ) -\u003e withTtl ( 300 ) -\u003e withEventId ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.TriggerByUserIdRequest ; import io.gs2.schedule.result.TriggerByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { TriggerByUserIdResult result = client . triggerByUserId ( new TriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withTriggerName ( \"trigger1\" ) . withUserId ( \"user-0001\" ) . withTriggerStrategy ( \"renew\" ) . withTtl ( 300 ) . withEventId ( null ) . withTimeOffsetToken ( null ) ); Trigger item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . TriggerByUserIdResult \u003e asyncResult = null ; yield return client . TriggerByUserId ( new Gs2 . Gs2Schedule . Request . TriggerByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithTriggerName ( \"trigger1\" ) . WithUserId ( \"user-0001\" ) . WithTriggerStrategy ( \"renew\" ) . WithTtl ( 300 ) . WithEventId ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . triggerByUserId ( new Gs2Schedule . TriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withTriggerName ( \"trigger1\" ) . withUserId ( \"user-0001\" ) . withTriggerStrategy ( \"renew\" ) . withTtl ( 300 ) . withEventId ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . trigger_by_user_id ( schedule . TriggerByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_trigger_name ( 'trigger1' ) . with_user_id ( 'user-0001' ) . with_trigger_strategy ( 'renew' ) . with_ttl ( 300 ) . with_event_id ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.trigger_by_user_id ({ namespaceName = \"namespace-0001\" , triggerName = \"trigger1\" , userId = \"user-0001\" , triggerStrategy = \"renew\" , ttl = 300 , eventId = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.trigger_by_user_id_async ({ namespaceName = \"namespace-0001\" , triggerName = \"trigger1\" , userId = \"user-0001\" , triggerStrategy = \"renew\" , ttl = 300 , eventId = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; extendTriggerByUserId 사용자 ID를 지정하여 트리거 기간 연장 지정한 사용자의 기존 트리거 유효기간을 지정한 초만큼 연장합니다. 트리거가 존재하지 않는 경우, 지정한 연장 기간을 TTL로 하는 새로운 트리거가 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID extendSeconds int  0 ~ 2147483646 트리거를 연장하는 기간(초) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Trigger 당긴 트리거 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . ExtendTriggerByUserId ( \u0026 schedule . ExtendTriggerByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), TriggerName : pointy . String ( \"trigger1\" ), UserId : pointy . String ( \"user-0001\" ), ExtendSeconds : pointy . Int32 ( 300 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\ExtendTriggerByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e extendTriggerByUserId ( ( new ExtendTriggerByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withTriggerName ( \"trigger1\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withExtendSeconds ( 300 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.ExtendTriggerByUserIdRequest ; import io.gs2.schedule.result.ExtendTriggerByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { ExtendTriggerByUserIdResult result = client . extendTriggerByUserId ( new ExtendTriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withTriggerName ( \"trigger1\" ) . withUserId ( \"user-0001\" ) . withExtendSeconds ( 300 ) . withTimeOffsetToken ( null ) ); Trigger item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . ExtendTriggerByUserIdResult \u003e asyncResult = null ; yield return client . ExtendTriggerByUserId ( new Gs2 . Gs2Schedule . Request . ExtendTriggerByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithTriggerName ( \"trigger1\" ) . WithUserId ( \"user-0001\" ) . WithExtendSeconds ( 300 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . extendTriggerByUserId ( new Gs2Schedule . ExtendTriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withTriggerName ( \"trigger1\" ) . withUserId ( \"user-0001\" ) . withExtendSeconds ( 300 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . extend_trigger_by_user_id ( schedule . ExtendTriggerByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_trigger_name ( 'trigger1' ) . with_user_id ( 'user-0001' ) . with_extend_seconds ( 300 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.extend_trigger_by_user_id ({ namespaceName = \"namespace-0001\" , triggerName = \"trigger1\" , userId = \"user-0001\" , extendSeconds = 300 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.extend_trigger_by_user_id_async ({ namespaceName = \"namespace-0001\" , triggerName = \"trigger1\" , userId = \"user-0001\" , extendSeconds = 300 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteTrigger 트리거 삭제 요청한 사용자의 지정된 트리거를 삭제합니다. 트리거를 삭제하면 관련된 상대 스케줄 이벤트가 비활성화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Trigger 삭제한 트리거 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DeleteTrigger ( \u0026 schedule . DeleteTriggerRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TriggerName : pointy . String ( \"trigger1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DeleteTriggerRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e deleteTrigger ( ( new DeleteTriggerRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTriggerName ( \"trigger1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DeleteTriggerRequest ; import io.gs2.schedule.result.DeleteTriggerResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DeleteTriggerResult result = client . deleteTrigger ( new DeleteTriggerRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTriggerName ( \"trigger1\" ) ); Trigger item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DeleteTriggerResult \u003e asyncResult = null ; yield return client . DeleteTrigger ( new Gs2 . Gs2Schedule . Request . DeleteTriggerRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTriggerName ( \"trigger1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . deleteTrigger ( new Gs2Schedule . DeleteTriggerRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTriggerName ( \"trigger1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . delete_trigger ( schedule . DeleteTriggerRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_trigger_name ( 'trigger1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.delete_trigger ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , triggerName = \"trigger1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.delete_trigger_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , triggerName = \"trigger1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteTriggerByUserId 사용자 ID를 지정하여 트리거 삭제 지정한 사용자의 지정된 트리거를 삭제합니다. 트리거를 삭제하면 관련된 상대 스케줄 이벤트가 비활성화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Trigger 삭제한 트리거 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DeleteTriggerByUserId ( \u0026 schedule . DeleteTriggerByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TriggerName : pointy . String ( \"trigger1\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DeleteTriggerByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e deleteTriggerByUserId ( ( new DeleteTriggerByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTriggerName ( \"trigger1\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DeleteTriggerByUserIdRequest ; import io.gs2.schedule.result.DeleteTriggerByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DeleteTriggerByUserIdResult result = client . deleteTriggerByUserId ( new DeleteTriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTriggerName ( \"trigger1\" ) . withTimeOffsetToken ( null ) ); Trigger item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DeleteTriggerByUserIdResult \u003e asyncResult = null ; yield return client . DeleteTriggerByUserId ( new Gs2 . Gs2Schedule . Request . DeleteTriggerByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTriggerName ( \"trigger1\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . deleteTriggerByUserId ( new Gs2Schedule . DeleteTriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTriggerName ( \"trigger1\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . delete_trigger_by_user_id ( schedule . DeleteTriggerByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_trigger_name ( 'trigger1' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.delete_trigger_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , triggerName = \"trigger1\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.delete_trigger_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , triggerName = \"trigger1\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyTrigger 트리거가 당겨진 후 경과 시간 검증 트리거의 상태에 관한 조건을 검증합니다. verifyType은 다음을 설정할 수 있습니다: ’notTriggerd’는 트리거가 당겨지지 않았음을 검증, ’elapsed’는 트리거가 당겨진 후 지정한 분수가 경과했음을 검증, ’notElapsed’는 지정한 분수가 아직 경과하지 않았음을 검증합니다. 검증 조건이 충족되지 않으면 오류를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “notTriggerd”,   “elapsed”,   “notElapsed” }  검증 종류 정의 설명 notTriggerd 트리거가 당겨지지 않음 elapsed 지정한 시간이 경과함 notElapsed 지정한 시간이 경과하지 않음 elapsedMinutes int {verifyType} in [“elapsed”, “notElapsed”] ※ 0 ~ 2147483646 경과 시간(분) ※ verifyType이(가) “elapsed”,“notElapsed\"이면 필수 Result 타입 설명 item Trigger 트리거 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . VerifyTrigger ( \u0026 schedule . VerifyTriggerRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TriggerName : pointy . String ( \"trigger-0001\" ), VerifyType : pointy . String ( \"elapsed\" ), ElapsedMinutes : pointy . Int32 ( 60 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\VerifyTriggerRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e verifyTrigger ( ( new VerifyTriggerRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTriggerName ( \"trigger-0001\" ) -\u003e withVerifyType ( \"elapsed\" ) -\u003e withElapsedMinutes ( 60 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.VerifyTriggerRequest ; import io.gs2.schedule.result.VerifyTriggerResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { VerifyTriggerResult result = client . verifyTrigger ( new VerifyTriggerRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTriggerName ( \"trigger-0001\" ) . withVerifyType ( \"elapsed\" ) . withElapsedMinutes ( 60 ) ); Trigger item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . VerifyTriggerResult \u003e asyncResult = null ; yield return client . VerifyTrigger ( new Gs2 . Gs2Schedule . Request . VerifyTriggerRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTriggerName ( \"trigger-0001\" ) . WithVerifyType ( \"elapsed\" ) . WithElapsedMinutes ( 60 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . verifyTrigger ( new Gs2Schedule . VerifyTriggerRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTriggerName ( \"trigger-0001\" ) . withVerifyType ( \"elapsed\" ) . withElapsedMinutes ( 60 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . verify_trigger ( schedule . VerifyTriggerRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_trigger_name ( 'trigger-0001' ) . with_verify_type ( 'elapsed' ) . with_elapsed_minutes ( 60 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.verify_trigger ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , triggerName = \"trigger-0001\" , verifyType = \"elapsed\" , elapsedMinutes = 60 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.verify_trigger_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , triggerName = \"trigger-0001\" , verifyType = \"elapsed\" , elapsedMinutes = 60 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyTriggerByUserId 사용자 ID를 지정하여 트리거가 당겨진 후 경과 시간 검증 지정한 사용자의 트리거 상태에 관한 조건을 검증합니다. verifyType은 ’notTriggerd’, ’elapsed’, ’notElapsed’를 설정할 수 있습니다. 검증 조건이 충족되지 않으면 오류를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “notTriggerd”,   “elapsed”,   “notElapsed” }  검증 종류 정의 설명 notTriggerd 트리거가 당겨지지 않음 elapsed 지정한 시간이 경과함 notElapsed 지정한 시간이 경과하지 않음 elapsedMinutes int {verifyType} in [“elapsed”, “notElapsed”] ※ 0 ~ 2147483646 경과 시간(분) ※ verifyType이(가) “elapsed”,“notElapsed\"이면 필수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Trigger 트리거 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . VerifyTriggerByUserId ( \u0026 schedule . VerifyTriggerByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TriggerName : pointy . String ( \"trigger-0001\" ), VerifyType : pointy . String ( \"elapsed\" ), ElapsedMinutes : pointy . Int32 ( 60 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\VerifyTriggerByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e verifyTriggerByUserId ( ( new VerifyTriggerByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTriggerName ( \"trigger-0001\" ) -\u003e withVerifyType ( \"elapsed\" ) -\u003e withElapsedMinutes ( 60 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.VerifyTriggerByUserIdRequest ; import io.gs2.schedule.result.VerifyTriggerByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { VerifyTriggerByUserIdResult result = client . verifyTriggerByUserId ( new VerifyTriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTriggerName ( \"trigger-0001\" ) . withVerifyType ( \"elapsed\" ) . withElapsedMinutes ( 60 ) . withTimeOffsetToken ( null ) ); Trigger item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . VerifyTriggerByUserIdResult \u003e asyncResult = null ; yield return client . VerifyTriggerByUserId ( new Gs2 . Gs2Schedule . Request . VerifyTriggerByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTriggerName ( \"trigger-0001\" ) . WithVerifyType ( \"elapsed\" ) . WithElapsedMinutes ( 60 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . verifyTriggerByUserId ( new Gs2Schedule . VerifyTriggerByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTriggerName ( \"trigger-0001\" ) . withVerifyType ( \"elapsed\" ) . withElapsedMinutes ( 60 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . verify_trigger_by_user_id ( schedule . VerifyTriggerByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_trigger_name ( 'trigger-0001' ) . with_verify_type ( 'elapsed' ) . with_elapsed_minutes ( 60 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.verify_trigger_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , triggerName = \"trigger-0001\" , verifyType = \"elapsed\" , elapsedMinutes = 60 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.verify_trigger_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , triggerName = \"trigger-0001\" , verifyType = \"elapsed\" , elapsedMinutes = 60 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeEvents 이벤트 목록 조회 요청한 사용자의 현재 활성 상태인 이벤트 목록을 조회합니다. 스케줄이 현재 진행 중인 이벤트만 반환됩니다. 상대 스케줄 이벤트의 경우, 결과는 사용자의 트리거 상태에 따라 달라집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 items List 이벤트 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DescribeEvents ( \u0026 schedule . DescribeEventsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DescribeEventsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e describeEvents ( ( new DescribeEventsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DescribeEventsRequest ; import io.gs2.schedule.result.DescribeEventsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DescribeEventsResult result = client . describeEvents ( new DescribeEventsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List Event \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DescribeEventsResult \u003e asyncResult = null ; yield return client . DescribeEvents ( new Gs2 . Gs2Schedule . Request . DescribeEventsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . describeEvents ( new Gs2Schedule . DescribeEventsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . describe_events ( schedule . DescribeEventsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.describe_events ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'schedule' ) api_result_handler = client.describe_events_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeEventsByUserId 사용자 ID를 지정하여 이벤트 목록 조회 지정한 사용자의 현재 활성 상태인 이벤트 목록을 조회합니다. 스케줄이 현재 진행 중인 이벤트만 반환됩니다. 상대 스케줄 이벤트의 경우, 결과는 지정한 사용자의 트리거 상태에 따라 달라집니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 이벤트 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DescribeEventsByUserId ( \u0026 schedule . DescribeEventsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DescribeEventsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e describeEventsByUserId ( ( new DescribeEventsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DescribeEventsByUserIdRequest ; import io.gs2.schedule.result.DescribeEventsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DescribeEventsByUserIdResult result = client . describeEventsByUserId ( new DescribeEventsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List Event \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DescribeEventsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeEventsByUserId ( new Gs2 . Gs2Schedule . Request . DescribeEventsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . describeEventsByUserId ( new Gs2Schedule . DescribeEventsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . describe_events_by_user_id ( schedule . DescribeEventsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.describe_events_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'schedule' ) api_result_handler = client.describe_events_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeRawEvents 이벤트 목록 조회 사용자 컨텍스트나 스케줄 상태로 필터링하지 않고, 네임스페이스 내 모든 이벤트 정의의 목록을 조회합니다. 이벤트가 현재 활성 상태인지 여부와 관계없이 원본 이벤트 데이터를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 이벤트 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DescribeRawEvents ( \u0026 schedule . DescribeRawEventsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DescribeRawEventsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e describeRawEvents ( ( new DescribeRawEventsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DescribeRawEventsRequest ; import io.gs2.schedule.result.DescribeRawEventsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DescribeRawEventsResult result = client . describeRawEvents ( new DescribeRawEventsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List Event \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DescribeRawEventsResult \u003e asyncResult = null ; yield return client . DescribeRawEvents ( new Gs2 . Gs2Schedule . Request . DescribeRawEventsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . describeRawEvents ( new Gs2Schedule . DescribeRawEventsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . describe_raw_events ( schedule . DescribeRawEventsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.describe_raw_events ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'schedule' ) api_result_handler = client.describe_raw_events_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getEvent 이벤트 조회 지정된 이벤트를 스케줄 상태와 함께 조회합니다. 이벤트가 현재 개최 기간 중인지 여부, 스케줄 시작/종료 시각, 반복 스케줄 정보, 글로벌 스케줄 여부를 반환합니다. isInSchedule 이 true 로 설정되어 있고 이벤트가 현재 활성 상태가 아닌 경우, NotFound 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. eventName string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 isInSchedule bool true 현재 개최 중인 이벤트만 조회 대상으로 할지 여부 Result 타입 설명 item Event 이벤트 inSchedule bool? 현재 이벤트 기간 중인지 여부 scheduleStartAt long 이벤트 기간 시작 시각 scheduleEndAt long 이벤트 기간 종료 시각 이벤트 종류가 absolute 인 경우 EventModel 의 absoluteEnd 가 저장됩니다. 이벤트 종류가 relative 인 경우 scheduleEndAt 에는 트리거의 유효 기간 또는 EventModel 의 absoluteEnd 중 더 빨리 종료되는 쪽이 저장됩니다. repeatSchedule RepeatSchedule 반복 정보 isGlobalSchedule bool? 이벤트가 글로벌 스케줄인지 여부 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetEvent ( \u0026 schedule . GetEventRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EventName : pointy . String ( \"event-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), IsInSchedule : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item inSchedule := result . InSchedule scheduleStartAt := result . ScheduleStartAt scheduleEndAt := result . ScheduleEndAt repeatSchedule := result . RepeatSchedule isGlobalSchedule := result . IsGlobalSchedule use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetEventRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getEvent ( ( new GetEventRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEventName ( \"event-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withIsInSchedule ( null ) ); $item = $result -\u003e getItem (); $inSchedule = $result -\u003e getInSchedule (); $scheduleStartAt = $result -\u003e getScheduleStartAt (); $scheduleEndAt = $result -\u003e getScheduleEndAt (); $repeatSchedule = $result -\u003e getRepeatSchedule (); $isGlobalSchedule = $result -\u003e getIsGlobalSchedule (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetEventRequest ; import io.gs2.schedule.result.GetEventResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetEventResult result = client . getEvent ( new GetEventRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withIsInSchedule ( null ) ); Event item = result . getItem (); boolean inSchedule = result . getInSchedule (); long scheduleStartAt = result . getScheduleStartAt (); long scheduleEndAt = result . getScheduleEndAt (); RepeatSchedule repeatSchedule = result . getRepeatSchedule (); boolean isGlobalSchedule = result . getIsGlobalSchedule (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetEventResult \u003e asyncResult = null ; yield return client . GetEvent ( new Gs2 . Gs2Schedule . Request . GetEventRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEventName ( \"event-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithIsInSchedule ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var inSchedule = result . InSchedule ; var scheduleStartAt = result . ScheduleStartAt ; var scheduleEndAt = result . ScheduleEndAt ; var repeatSchedule = result . RepeatSchedule ; var isGlobalSchedule = result . IsGlobalSchedule ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getEvent ( new Gs2Schedule . GetEventRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withIsInSchedule ( null ) ); const item = result . getItem (); const inSchedule = result . getInSchedule (); const scheduleStartAt = result . getScheduleStartAt (); const scheduleEndAt = result . getScheduleEndAt (); const repeatSchedule = result . getRepeatSchedule (); const isGlobalSchedule = result . getIsGlobalSchedule (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_event ( schedule . GetEventRequest () . with_namespace_name ( 'namespace-0001' ) . with_event_name ( 'event-0001' ) . with_access_token ( 'accessToken-0001' ) . with_is_in_schedule ( None ) ) item = result . item in_schedule = result . in_schedule schedule_start_at = result . schedule_start_at schedule_end_at = result . schedule_end_at repeat_schedule = result . repeat_schedule is_global_schedule = result . is_global_schedule except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_event ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , accessToken = \"accessToken-0001\" , isInSchedule = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; inSchedule = result.inSchedule ; scheduleStartAt = result.scheduleStartAt ; scheduleEndAt = result.scheduleEndAt ; repeatSchedule = result.repeatSchedule ; isGlobalSchedule = result.isGlobalSchedule ; client = gs2 ( 'schedule' ) api_result_handler = client.get_event_async ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , accessToken = \"accessToken-0001\" , isInSchedule = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; inSchedule = result.inSchedule ; scheduleStartAt = result.scheduleStartAt ; scheduleEndAt = result.scheduleEndAt ; repeatSchedule = result.repeatSchedule ; isGlobalSchedule = result.isGlobalSchedule ; getEventByUserId 사용자 ID를 지정하여 이벤트 조회 지정한 사용자에 대한 지정된 이벤트를 스케줄 상태와 함께 조회합니다. 이벤트가 현재 개최 기간 중인지 여부, 스케줄 시작/종료 시각, 반복 스케줄 정보, 글로벌 스케줄 여부를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. eventName string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID isInSchedule bool true 현재 개최 중인 이벤트만 조회 대상으로 할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Event 이벤트 inSchedule bool? 현재 이벤트 기간 중인지 여부 scheduleStartAt long 이벤트 기간 시작 시각 scheduleEndAt long 이벤트 기간 종료 시각 이벤트 종류가 absolute 인 경우 EventModel 의 absoluteEnd 가 저장됩니다. 이벤트 종류가 relative 인 경우 scheduleEndAt 에는 트리거의 유효 기간 또는 EventModel 의 absoluteEnd 중 더 빨리 종료되는 쪽이 저장됩니다. repeatSchedule RepeatSchedule 반복 정보 isGlobalSchedule bool? 이벤트가 글로벌 스케줄인지 여부 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetEventByUserId ( \u0026 schedule . GetEventByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EventName : pointy . String ( \"event-0001\" ), UserId : pointy . String ( \"user-0001\" ), IsInSchedule : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item inSchedule := result . InSchedule scheduleStartAt := result . ScheduleStartAt scheduleEndAt := result . ScheduleEndAt repeatSchedule := result . RepeatSchedule isGlobalSchedule := result . IsGlobalSchedule use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetEventByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getEventByUserId ( ( new GetEventByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEventName ( \"event-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withIsInSchedule ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $inSchedule = $result -\u003e getInSchedule (); $scheduleStartAt = $result -\u003e getScheduleStartAt (); $scheduleEndAt = $result -\u003e getScheduleEndAt (); $repeatSchedule = $result -\u003e getRepeatSchedule (); $isGlobalSchedule = $result -\u003e getIsGlobalSchedule (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetEventByUserIdRequest ; import io.gs2.schedule.result.GetEventByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetEventByUserIdResult result = client . getEventByUserId ( new GetEventByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) . withUserId ( \"user-0001\" ) . withIsInSchedule ( null ) . withTimeOffsetToken ( null ) ); Event item = result . getItem (); boolean inSchedule = result . getInSchedule (); long scheduleStartAt = result . getScheduleStartAt (); long scheduleEndAt = result . getScheduleEndAt (); RepeatSchedule repeatSchedule = result . getRepeatSchedule (); boolean isGlobalSchedule = result . getIsGlobalSchedule (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetEventByUserIdResult \u003e asyncResult = null ; yield return client . GetEventByUserId ( new Gs2 . Gs2Schedule . Request . GetEventByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEventName ( \"event-0001\" ) . WithUserId ( \"user-0001\" ) . WithIsInSchedule ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var inSchedule = result . InSchedule ; var scheduleStartAt = result . ScheduleStartAt ; var scheduleEndAt = result . ScheduleEndAt ; var repeatSchedule = result . RepeatSchedule ; var isGlobalSchedule = result . IsGlobalSchedule ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getEventByUserId ( new Gs2Schedule . GetEventByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) . withUserId ( \"user-0001\" ) . withIsInSchedule ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const inSchedule = result . getInSchedule (); const scheduleStartAt = result . getScheduleStartAt (); const scheduleEndAt = result . getScheduleEndAt (); const repeatSchedule = result . getRepeatSchedule (); const isGlobalSchedule = result . getIsGlobalSchedule (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_event_by_user_id ( schedule . GetEventByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_event_name ( 'event-0001' ) . with_user_id ( 'user-0001' ) . with_is_in_schedule ( None ) . with_time_offset_token ( None ) ) item = result . item in_schedule = result . in_schedule schedule_start_at = result . schedule_start_at schedule_end_at = result . schedule_end_at repeat_schedule = result . repeat_schedule is_global_schedule = result . is_global_schedule except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_event_by_user_id ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , userId = \"user-0001\" , isInSchedule = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; inSchedule = result.inSchedule ; scheduleStartAt = result.scheduleStartAt ; scheduleEndAt = result.scheduleEndAt ; repeatSchedule = result.repeatSchedule ; isGlobalSchedule = result.isGlobalSchedule ; client = gs2 ( 'schedule' ) api_result_handler = client.get_event_by_user_id_async ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , userId = \"user-0001\" , isInSchedule = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; inSchedule = result.inSchedule ; scheduleStartAt = result.scheduleStartAt ; scheduleEndAt = result.scheduleEndAt ; repeatSchedule = result.repeatSchedule ; isGlobalSchedule = result.isGlobalSchedule ; getRawEvent 이벤트 조회 사용자 컨텍스트 없이 원본 이벤트 정의를 조회합니다. 특정 사용자의 트리거 상태에 대한 스케줄 상태 평가 없이 이벤트 데이터를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. eventName string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item Event 이벤트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetRawEvent ( \u0026 schedule . GetRawEventRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EventName : pointy . String ( \"event-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetRawEventRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getRawEvent ( ( new GetRawEventRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEventName ( \"event-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetRawEventRequest ; import io.gs2.schedule.result.GetRawEventResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetRawEventResult result = client . getRawEvent ( new GetRawEventRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) ); Event item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetRawEventResult \u003e asyncResult = null ; yield return client . GetRawEvent ( new Gs2 . Gs2Schedule . Request . GetRawEventRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEventName ( \"event-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getRawEvent ( new Gs2Schedule . GetRawEventRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_raw_event ( schedule . GetRawEventRequest () . with_namespace_name ( 'namespace-0001' ) . with_event_name ( 'event-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_raw_event ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.get_raw_event_async ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyEvent 이벤트 개최 기간인지 검증 지정된 이벤트가 현재 활성 스케줄 기간 내에 있는지 검증합니다. verifyType 을 ‘inSchedule’ 로 설정하면 이벤트가 활성 상태임을 검증하고, ’notInSchedule’ 로 설정하면 활성 상태가 아님을 검증합니다. 검증 조건이 충족되지 않으면 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 eventName string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “inSchedule”,   “notInSchedule” }  검증 종류 정의 설명 inSchedule 이벤트의 개최 기간임 notInSchedule 이벤트의 개최 기간이 아님 Result 타입 설명 item Event 이벤트 inSchedule bool? 현재 이벤트 기간 중인지 여부 scheduleStartAt long 이벤트 기간 시작 시각 scheduleEndAt long 이벤트 기간 종료 시각 이벤트 종류가 absolute 인 경우 EventModel 의 absoluteEnd 가 저장됩니다. 이벤트 종류가 relative 인 경우 scheduleEndAt 에는 트리거의 유효 기간 또는 EventModel 의 absoluteEnd 중 더 빨리 종료되는 쪽이 저장됩니다. repeatSchedule RepeatSchedule 반복 정보 isGlobalSchedule bool? 이벤트가 글로벌 스케줄인지 여부 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . VerifyEvent ( \u0026 schedule . VerifyEventRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), EventName : pointy . String ( \"event-0001\" ), VerifyType : pointy . String ( \"inSchedule\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item inSchedule := result . InSchedule scheduleStartAt := result . ScheduleStartAt scheduleEndAt := result . ScheduleEndAt repeatSchedule := result . RepeatSchedule isGlobalSchedule := result . IsGlobalSchedule use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\VerifyEventRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e verifyEvent ( ( new VerifyEventRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withEventName ( \"event-0001\" ) -\u003e withVerifyType ( \"inSchedule\" ) ); $item = $result -\u003e getItem (); $inSchedule = $result -\u003e getInSchedule (); $scheduleStartAt = $result -\u003e getScheduleStartAt (); $scheduleEndAt = $result -\u003e getScheduleEndAt (); $repeatSchedule = $result -\u003e getRepeatSchedule (); $isGlobalSchedule = $result -\u003e getIsGlobalSchedule (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.VerifyEventRequest ; import io.gs2.schedule.result.VerifyEventResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { VerifyEventResult result = client . verifyEvent ( new VerifyEventRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEventName ( \"event-0001\" ) . withVerifyType ( \"inSchedule\" ) ); Event item = result . getItem (); boolean inSchedule = result . getInSchedule (); long scheduleStartAt = result . getScheduleStartAt (); long scheduleEndAt = result . getScheduleEndAt (); RepeatSchedule repeatSchedule = result . getRepeatSchedule (); boolean isGlobalSchedule = result . getIsGlobalSchedule (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . VerifyEventResult \u003e asyncResult = null ; yield return client . VerifyEvent ( new Gs2 . Gs2Schedule . Request . VerifyEventRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithEventName ( \"event-0001\" ) . WithVerifyType ( \"inSchedule\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var inSchedule = result . InSchedule ; var scheduleStartAt = result . ScheduleStartAt ; var scheduleEndAt = result . ScheduleEndAt ; var repeatSchedule = result . RepeatSchedule ; var isGlobalSchedule = result . IsGlobalSchedule ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . verifyEvent ( new Gs2Schedule . VerifyEventRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withEventName ( \"event-0001\" ) . withVerifyType ( \"inSchedule\" ) ); const item = result . getItem (); const inSchedule = result . getInSchedule (); const scheduleStartAt = result . getScheduleStartAt (); const scheduleEndAt = result . getScheduleEndAt (); const repeatSchedule = result . getRepeatSchedule (); const isGlobalSchedule = result . getIsGlobalSchedule (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . verify_event ( schedule . VerifyEventRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_event_name ( 'event-0001' ) . with_verify_type ( 'inSchedule' ) ) item = result . item in_schedule = result . in_schedule schedule_start_at = result . schedule_start_at schedule_end_at = result . schedule_end_at repeat_schedule = result . repeat_schedule is_global_schedule = result . is_global_schedule except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.verify_event ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , eventName = \"event-0001\" , verifyType = \"inSchedule\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; inSchedule = result.inSchedule ; scheduleStartAt = result.scheduleStartAt ; scheduleEndAt = result.scheduleEndAt ; repeatSchedule = result.repeatSchedule ; isGlobalSchedule = result.isGlobalSchedule ; client = gs2 ( 'schedule' ) api_result_handler = client.verify_event_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , eventName = \"event-0001\" , verifyType = \"inSchedule\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; inSchedule = result.inSchedule ; scheduleStartAt = result.scheduleStartAt ; scheduleEndAt = result.scheduleEndAt ; repeatSchedule = result.repeatSchedule ; isGlobalSchedule = result.isGlobalSchedule ; verifyEventByUserId 사용자 ID를 지정하여 이벤트 개최 기간인지 검증 지정한 사용자에 대해 지정된 이벤트가 현재 활성 스케줄 기간 내에 있는지 검증합니다. verifyType 은 ‘inSchedule’ 또는 ’notInSchedule’ 을 설정할 수 있습니다. 검증 조건이 충족되지 않으면 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID eventName string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “inSchedule”,   “notInSchedule” }  검증 종류 정의 설명 inSchedule 이벤트의 개최 기간임 notInSchedule 이벤트의 개최 기간이 아님 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Event 이벤트 inSchedule bool? 현재 이벤트 기간 중인지 여부 scheduleStartAt long 이벤트 기간 시작 시각 scheduleEndAt long 이벤트 기간 종료 시각 이벤트 종류가 absolute 인 경우 EventModel 의 absoluteEnd 가 저장됩니다. 이벤트 종류가 relative 인 경우 scheduleEndAt 에는 트리거의 유효 기간 또는 EventModel 의 absoluteEnd 중 더 빨리 종료되는 쪽이 저장됩니다. repeatSchedule RepeatSchedule 반복 정보 isGlobalSchedule bool? 이벤트가 글로벌 스케줄인지 여부 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . VerifyEventByUserId ( \u0026 schedule . VerifyEventByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), EventName : pointy . String ( \"event-0001\" ), VerifyType : pointy . String ( \"inSchedule\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item inSchedule := result . InSchedule scheduleStartAt := result . ScheduleStartAt scheduleEndAt := result . ScheduleEndAt repeatSchedule := result . RepeatSchedule isGlobalSchedule := result . IsGlobalSchedule use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\VerifyEventByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e verifyEventByUserId ( ( new VerifyEventByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withEventName ( \"event-0001\" ) -\u003e withVerifyType ( \"inSchedule\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $inSchedule = $result -\u003e getInSchedule (); $scheduleStartAt = $result -\u003e getScheduleStartAt (); $scheduleEndAt = $result -\u003e getScheduleEndAt (); $repeatSchedule = $result -\u003e getRepeatSchedule (); $isGlobalSchedule = $result -\u003e getIsGlobalSchedule (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.VerifyEventByUserIdRequest ; import io.gs2.schedule.result.VerifyEventByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { VerifyEventByUserIdResult result = client . verifyEventByUserId ( new VerifyEventByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEventName ( \"event-0001\" ) . withVerifyType ( \"inSchedule\" ) . withTimeOffsetToken ( null ) ); Event item = result . getItem (); boolean inSchedule = result . getInSchedule (); long scheduleStartAt = result . getScheduleStartAt (); long scheduleEndAt = result . getScheduleEndAt (); RepeatSchedule repeatSchedule = result . getRepeatSchedule (); boolean isGlobalSchedule = result . getIsGlobalSchedule (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . VerifyEventByUserIdResult \u003e asyncResult = null ; yield return client . VerifyEventByUserId ( new Gs2 . Gs2Schedule . Request . VerifyEventByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithEventName ( \"event-0001\" ) . WithVerifyType ( \"inSchedule\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var inSchedule = result . InSchedule ; var scheduleStartAt = result . ScheduleStartAt ; var scheduleEndAt = result . ScheduleEndAt ; var repeatSchedule = result . RepeatSchedule ; var isGlobalSchedule = result . IsGlobalSchedule ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . verifyEventByUserId ( new Gs2Schedule . VerifyEventByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withEventName ( \"event-0001\" ) . withVerifyType ( \"inSchedule\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const inSchedule = result . getInSchedule (); const scheduleStartAt = result . getScheduleStartAt (); const scheduleEndAt = result . getScheduleEndAt (); const repeatSchedule = result . getRepeatSchedule (); const isGlobalSchedule = result . getIsGlobalSchedule (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . verify_event_by_user_id ( schedule . VerifyEventByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_event_name ( 'event-0001' ) . with_verify_type ( 'inSchedule' ) . with_time_offset_token ( None ) ) item = result . item in_schedule = result . in_schedule schedule_start_at = result . schedule_start_at schedule_end_at = result . schedule_end_at repeat_schedule = result . repeat_schedule is_global_schedule = result . is_global_schedule except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.verify_event_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , eventName = \"event-0001\" , verifyType = \"inSchedule\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; inSchedule = result.inSchedule ; scheduleStartAt = result.scheduleStartAt ; scheduleEndAt = result.scheduleEndAt ; repeatSchedule = result.repeatSchedule ; isGlobalSchedule = result.isGlobalSchedule ; client = gs2 ( 'schedule' ) api_result_handler = client.verify_event_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , eventName = \"event-0001\" , verifyType = \"inSchedule\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; inSchedule = result.inSchedule ; scheduleStartAt = result.scheduleStartAt ; scheduleEndAt = result.scheduleEndAt ; repeatSchedule = result.repeatSchedule ; isGlobalSchedule = result.isGlobalSchedule ; exportMaster 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 익스포트 현재 등록되어 있는 이벤트 마스터를 활성화 가능한 마스터 데이터 형식으로 익스포트합니다. 익스포트된 데이터에는 절대/상대 타이밍, 반복 설정, 트리거 설정을 포함한 모든 이벤트 스케줄 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentEventMaster 활성화 가능한 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 schedule . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.ExportMasterRequest ; import io.gs2.schedule.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentEventMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Schedule . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Schedule . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . export_master ( schedule . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentEventMaster 현재 활성화된 이벤트의 마스터 데이터를 취득 스케줄 평가에 사용되고 있는 모든 이벤트 스케줄 정의를 포함한, 현재 활성화된 이벤트 마스터 데이터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentEventMaster 현재 활성화된 이벤트의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetCurrentEventMaster ( \u0026 schedule . GetCurrentEventMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetCurrentEventMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getCurrentEventMaster ( ( new GetCurrentEventMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetCurrentEventMasterRequest ; import io.gs2.schedule.result.GetCurrentEventMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetCurrentEventMasterResult result = client . getCurrentEventMaster ( new GetCurrentEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentEventMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetCurrentEventMasterResult \u003e asyncResult = null ; yield return client . GetCurrentEventMaster ( new Gs2 . Gs2Schedule . Request . GetCurrentEventMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getCurrentEventMaster ( new Gs2Schedule . GetCurrentEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_current_event_master ( schedule . GetCurrentEventMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_current_event_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.get_current_event_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentEventMaster 현재 활성화된 이벤트의 마스터 데이터를 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 업데이트를 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. UpdateCurrentModelMaster에 업로드로 취득한 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentEventMaster ( \u0026 schedule . PreUpdateCurrentEventMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\PreUpdateCurrentEventMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentEventMaster ( ( new PreUpdateCurrentEventMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.PreUpdateCurrentEventMasterRequest ; import io.gs2.schedule.result.PreUpdateCurrentEventMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { PreUpdateCurrentEventMasterResult result = client . preUpdateCurrentEventMaster ( new PreUpdateCurrentEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . PreUpdateCurrentEventMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentEventMaster ( new Gs2 . Gs2Schedule . Request . PreUpdateCurrentEventMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . preUpdateCurrentEventMaster ( new Gs2Schedule . PreUpdateCurrentEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . pre_update_current_event_master ( schedule . PreUpdateCurrentEventMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.pre_update_current_event_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'schedule' ) api_result_handler = client.pre_update_current_event_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentEventMaster 현재 활성화된 이벤트의 마스터 데이터를 업데이트 현재 활성화된 이벤트 마스터 데이터를 업데이트합니다. 대용량 마스터 데이터에 대응하기 위해 직접 업데이트 모드와 사전 업로드 모드를 모두 지원합니다. 사전 업로드 모드에서는 PreUpdate API로 취득한 업로드 토큰을 사용하여 설정을 읽어들입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentEventMaster 업데이트된 현재 활성화된 이벤트의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentEventMaster ( \u0026 schedule . UpdateCurrentEventMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : nil , Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-03-31\\\",\\n \\\"events\\\": [\\n {\\n \\\"name\\\": \\\"event-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0001\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 10000,\\n \\\"absoluteEnd\\\": 20000,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"event-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0002\\\",\\n \\\"scheduleType\\\": \\\"relative\\\",\\n \\\"relativeTriggerName\\\": \\\"trigger-0001\\\",\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"daily-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0003\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569369600000,\\n \\\"absoluteEnd\\\": 1569456000000,\\n \\\"repeatType\\\": \\\"daily\\\",\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"daily-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0004\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569369600000,\\n \\\"absoluteEnd\\\": 1569456000000,\\n \\\"repeatType\\\": \\\"daily\\\",\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 1,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"weekly-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0005\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569888000000,\\n \\\"absoluteEnd\\\": 1570406400000,\\n \\\"repeatType\\\": \\\"weekly\\\",\\n \\\"repeatBeginDayOfWeek\\\": \\\"tuesday\\\",\\n \\\"repeatEndDayOfWeek\\\": \\\"wednesday\\\",\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"weekly-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0006\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569888000000,\\n \\\"absoluteEnd\\\": 1570406400000,\\n \\\"repeatType\\\": \\\"weekly\\\",\\n \\\"repeatBeginDayOfWeek\\\": \\\"wednesday\\\",\\n \\\"repeatEndDayOfWeek\\\": \\\"tuesday\\\",\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 1,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"monthly-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0007\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1570406400000,\\n \\\"absoluteEnd\\\": 1575158400000,\\n \\\"repeatType\\\": \\\"monthly\\\",\\n \\\"repeatBeginDayOfMonth\\\": 10,\\n \\\"repeatEndDayOfMonth\\\": 15,\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"monthly-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0008\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1570406400000,\\n \\\"absoluteEnd\\\": 1575158400000,\\n \\\"repeatType\\\": \\\"monthly\\\",\\n \\\"repeatBeginDayOfMonth\\\": 16,\\n \\\"repeatEndDayOfMonth\\\": 9,\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 0,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\UpdateCurrentEventMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e updateCurrentEventMaster ( ( new UpdateCurrentEventMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( null ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-03-31 \\\" , \\n \\\" events \\\" : [ \\n { \\n \\\" name \\\" : \\\" event-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0001 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 10000, \\n \\\" absoluteEnd \\\" : 20000, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" event-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0002 \\\" , \\n \\\" scheduleType \\\" : \\\" relative \\\" , \\n \\\" relativeTriggerName \\\" : \\\" trigger-0001 \\\" , \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" daily-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0003 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569369600000, \\n \\\" absoluteEnd \\\" : 1569456000000, \\n \\\" repeatType \\\" : \\\" daily \\\" , \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" daily-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0004 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569369600000, \\n \\\" absoluteEnd \\\" : 1569456000000, \\n \\\" repeatType \\\" : \\\" daily \\\" , \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 1, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" weekly-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0005 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569888000000, \\n \\\" absoluteEnd \\\" : 1570406400000, \\n \\\" repeatType \\\" : \\\" weekly \\\" , \\n \\\" repeatBeginDayOfWeek \\\" : \\\" tuesday \\\" , \\n \\\" repeatEndDayOfWeek \\\" : \\\" wednesday \\\" , \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" weekly-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0006 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569888000000, \\n \\\" absoluteEnd \\\" : 1570406400000, \\n \\\" repeatType \\\" : \\\" weekly \\\" , \\n \\\" repeatBeginDayOfWeek \\\" : \\\" wednesday \\\" , \\n \\\" repeatEndDayOfWeek \\\" : \\\" tuesday \\\" , \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 1, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" monthly-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0007 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1570406400000, \\n \\\" absoluteEnd \\\" : 1575158400000, \\n \\\" repeatType \\\" : \\\" monthly \\\" , \\n \\\" repeatBeginDayOfMonth \\\" : 10, \\n \\\" repeatEndDayOfMonth \\\" : 15, \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" monthly-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0008 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1570406400000, \\n \\\" absoluteEnd \\\" : 1575158400000, \\n \\\" repeatType \\\" : \\\" monthly \\\" , \\n \\\" repeatBeginDayOfMonth \\\" : 16, \\n \\\" repeatEndDayOfMonth \\\" : 9, \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 0, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.UpdateCurrentEventMasterRequest ; import io.gs2.schedule.result.UpdateCurrentEventMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { UpdateCurrentEventMasterResult result = client . updateCurrentEventMaster ( new UpdateCurrentEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( null ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-03-31\\\",\\n \\\"events\\\": [\\n {\\n \\\"name\\\": \\\"event-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0001\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 10000,\\n \\\"absoluteEnd\\\": 20000,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"event-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0002\\\",\\n \\\"scheduleType\\\": \\\"relative\\\",\\n \\\"relativeTriggerName\\\": \\\"trigger-0001\\\",\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"daily-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0003\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569369600000,\\n \\\"absoluteEnd\\\": 1569456000000,\\n \\\"repeatType\\\": \\\"daily\\\",\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"daily-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0004\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569369600000,\\n \\\"absoluteEnd\\\": 1569456000000,\\n \\\"repeatType\\\": \\\"daily\\\",\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 1,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"weekly-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0005\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569888000000,\\n \\\"absoluteEnd\\\": 1570406400000,\\n \\\"repeatType\\\": \\\"weekly\\\",\\n \\\"repeatBeginDayOfWeek\\\": \\\"tuesday\\\",\\n \\\"repeatEndDayOfWeek\\\": \\\"wednesday\\\",\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"weekly-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0006\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569888000000,\\n \\\"absoluteEnd\\\": 1570406400000,\\n \\\"repeatType\\\": \\\"weekly\\\",\\n \\\"repeatBeginDayOfWeek\\\": \\\"wednesday\\\",\\n \\\"repeatEndDayOfWeek\\\": \\\"tuesday\\\",\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 1,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"monthly-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0007\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1570406400000,\\n \\\"absoluteEnd\\\": 1575158400000,\\n \\\"repeatType\\\": \\\"monthly\\\",\\n \\\"repeatBeginDayOfMonth\\\": 10,\\n \\\"repeatEndDayOfMonth\\\": 15,\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"monthly-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0008\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1570406400000,\\n \\\"absoluteEnd\\\": 1575158400000,\\n \\\"repeatType\\\": \\\"monthly\\\",\\n \\\"repeatBeginDayOfMonth\\\": 16,\\n \\\"repeatEndDayOfMonth\\\": 9,\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 0,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentEventMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . UpdateCurrentEventMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentEventMaster ( new Gs2 . Gs2Schedule . Request . UpdateCurrentEventMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( null ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-03-31\\\",\\n \\\"events\\\": [\\n {\\n \\\"name\\\": \\\"event-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0001\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 10000,\\n \\\"absoluteEnd\\\": 20000,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"event-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0002\\\",\\n \\\"scheduleType\\\": \\\"relative\\\",\\n \\\"relativeTriggerName\\\": \\\"trigger-0001\\\",\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"daily-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0003\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569369600000,\\n \\\"absoluteEnd\\\": 1569456000000,\\n \\\"repeatType\\\": \\\"daily\\\",\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"daily-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0004\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569369600000,\\n \\\"absoluteEnd\\\": 1569456000000,\\n \\\"repeatType\\\": \\\"daily\\\",\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 1,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"weekly-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0005\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569888000000,\\n \\\"absoluteEnd\\\": 1570406400000,\\n \\\"repeatType\\\": \\\"weekly\\\",\\n \\\"repeatBeginDayOfWeek\\\": \\\"tuesday\\\",\\n \\\"repeatEndDayOfWeek\\\": \\\"wednesday\\\",\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"weekly-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0006\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569888000000,\\n \\\"absoluteEnd\\\": 1570406400000,\\n \\\"repeatType\\\": \\\"weekly\\\",\\n \\\"repeatBeginDayOfWeek\\\": \\\"wednesday\\\",\\n \\\"repeatEndDayOfWeek\\\": \\\"tuesday\\\",\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 1,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"monthly-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0007\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1570406400000,\\n \\\"absoluteEnd\\\": 1575158400000,\\n \\\"repeatType\\\": \\\"monthly\\\",\\n \\\"repeatBeginDayOfMonth\\\": 10,\\n \\\"repeatEndDayOfMonth\\\": 15,\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"monthly-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0008\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1570406400000,\\n \\\"absoluteEnd\\\": 1575158400000,\\n \\\"repeatType\\\": \\\"monthly\\\",\\n \\\"repeatBeginDayOfMonth\\\": 16,\\n \\\"repeatEndDayOfMonth\\\": 9,\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 0,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . updateCurrentEventMaster ( new Gs2Schedule . UpdateCurrentEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( null ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-03-31\\\",\\n \\\"events\\\": [\\n {\\n \\\"name\\\": \\\"event-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0001\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 10000,\\n \\\"absoluteEnd\\\": 20000,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"event-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0002\\\",\\n \\\"scheduleType\\\": \\\"relative\\\",\\n \\\"relativeTriggerName\\\": \\\"trigger-0001\\\",\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"daily-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0003\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569369600000,\\n \\\"absoluteEnd\\\": 1569456000000,\\n \\\"repeatType\\\": \\\"daily\\\",\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"daily-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0004\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569369600000,\\n \\\"absoluteEnd\\\": 1569456000000,\\n \\\"repeatType\\\": \\\"daily\\\",\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 1,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"weekly-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0005\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569888000000,\\n \\\"absoluteEnd\\\": 1570406400000,\\n \\\"repeatType\\\": \\\"weekly\\\",\\n \\\"repeatBeginDayOfWeek\\\": \\\"tuesday\\\",\\n \\\"repeatEndDayOfWeek\\\": \\\"wednesday\\\",\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"weekly-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0006\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1569888000000,\\n \\\"absoluteEnd\\\": 1570406400000,\\n \\\"repeatType\\\": \\\"weekly\\\",\\n \\\"repeatBeginDayOfWeek\\\": \\\"wednesday\\\",\\n \\\"repeatEndDayOfWeek\\\": \\\"tuesday\\\",\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 1,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"monthly-0001\\\",\\n \\\"metadata\\\": \\\"EVENT_0007\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1570406400000,\\n \\\"absoluteEnd\\\": 1575158400000,\\n \\\"repeatType\\\": \\\"monthly\\\",\\n \\\"repeatBeginDayOfMonth\\\": 10,\\n \\\"repeatEndDayOfMonth\\\": 15,\\n \\\"repeatBeginHour\\\": 1,\\n \\\"repeatEndHour\\\": 2,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n },\\n {\\n \\\"name\\\": \\\"monthly-0002\\\",\\n \\\"metadata\\\": \\\"EVENT_0008\\\",\\n \\\"scheduleType\\\": \\\"absolute\\\",\\n \\\"absoluteBegin\\\": 1570406400000,\\n \\\"absoluteEnd\\\": 1575158400000,\\n \\\"repeatType\\\": \\\"monthly\\\",\\n \\\"repeatBeginDayOfMonth\\\": 16,\\n \\\"repeatEndDayOfMonth\\\": 9,\\n \\\"repeatBeginHour\\\": 3,\\n \\\"repeatEndHour\\\": 0,\\n \\\"repeatSetting\\\": {\\n \\\"repeatType\\\": \\\"always\\\",\\n \\\"beginDayOfMonth\\\": 1,\\n \\\"endDayOfMonth\\\": 1,\\n \\\"beginHour\\\": 0,\\n \\\"endHour\\\": 0,\\n \\\"activeDays\\\": 1,\\n \\\"inactiveDays\\\": 0\\n }\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . update_current_event_master ( schedule . UpdateCurrentEventMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( None ) . with_settings ( '{ \\n \"version\": \"2019-03-31\", \\n \"events\": [ \\n { \\n \"name\": \"event-0001\", \\n \"metadata\": \"EVENT_0001\", \\n \"scheduleType\": \"absolute\", \\n \"absoluteBegin\": 10000, \\n \"absoluteEnd\": 20000, \\n \"repeatSetting\": { \\n \"repeatType\": \"always\", \\n \"beginDayOfMonth\": 1, \\n \"endDayOfMonth\": 1, \\n \"beginHour\": 0, \\n \"endHour\": 0, \\n \"activeDays\": 1, \\n \"inactiveDays\": 0 \\n } \\n }, \\n { \\n \"name\": \"event-0002\", \\n \"metadata\": \"EVENT_0002\", \\n \"scheduleType\": \"relative\", \\n \"relativeTriggerName\": \"trigger-0001\", \\n \"repeatSetting\": { \\n \"repeatType\": \"always\", \\n \"beginDayOfMonth\": 1, \\n \"endDayOfMonth\": 1, \\n \"beginHour\": 0, \\n \"endHour\": 0, \\n \"activeDays\": 1, \\n \"inactiveDays\": 0 \\n } \\n }, \\n { \\n \"name\": \"daily-0001\", \\n \"metadata\": \"EVENT_0003\", \\n \"scheduleType\": \"absolute\", \\n \"absoluteBegin\": 1569369600000, \\n \"absoluteEnd\": 1569456000000, \\n \"repeatType\": \"daily\", \\n \"repeatBeginHour\": 1, \\n \"repeatEndHour\": 2, \\n \"repeatSetting\": { \\n \"repeatType\": \"always\", \\n \"beginDayOfMonth\": 1, \\n \"endDayOfMonth\": 1, \\n \"beginHour\": 0, \\n \"endHour\": 0, \\n \"activeDays\": 1, \\n \"inactiveDays\": 0 \\n } \\n }, \\n { \\n \"name\": \"daily-0002\", \\n \"metadata\": \"EVENT_0004\", \\n \"scheduleType\": \"absolute\", \\n \"absoluteBegin\": 1569369600000, \\n \"absoluteEnd\": 1569456000000, \\n \"repeatType\": \"daily\", \\n \"repeatBeginHour\": 3, \\n \"repeatEndHour\": 1, \\n \"repeatSetting\": { \\n \"repeatType\": \"always\", \\n \"beginDayOfMonth\": 1, \\n \"endDayOfMonth\": 1, \\n \"beginHour\": 0, \\n \"endHour\": 0, \\n \"activeDays\": 1, \\n \"inactiveDays\": 0 \\n } \\n }, \\n { \\n \"name\": \"weekly-0001\", \\n \"metadata\": \"EVENT_0005\", \\n \"scheduleType\": \"absolute\", \\n \"absoluteBegin\": 1569888000000, \\n \"absoluteEnd\": 1570406400000, \\n \"repeatType\": \"weekly\", \\n \"repeatBeginDayOfWeek\": \"tuesday\", \\n \"repeatEndDayOfWeek\": \"wednesday\", \\n \"repeatBeginHour\": 1, \\n \"repeatEndHour\": 2, \\n \"repeatSetting\": { \\n \"repeatType\": \"always\", \\n \"beginDayOfMonth\": 1, \\n \"endDayOfMonth\": 1, \\n \"beginHour\": 0, \\n \"endHour\": 0, \\n \"activeDays\": 1, \\n \"inactiveDays\": 0 \\n } \\n }, \\n { \\n \"name\": \"weekly-0002\", \\n \"metadata\": \"EVENT_0006\", \\n \"scheduleType\": \"absolute\", \\n \"absoluteBegin\": 1569888000000, \\n \"absoluteEnd\": 1570406400000, \\n \"repeatType\": \"weekly\", \\n \"repeatBeginDayOfWeek\": \"wednesday\", \\n \"repeatEndDayOfWeek\": \"tuesday\", \\n \"repeatBeginHour\": 3, \\n \"repeatEndHour\": 1, \\n \"repeatSetting\": { \\n \"repeatType\": \"always\", \\n \"beginDayOfMonth\": 1, \\n \"endDayOfMonth\": 1, \\n \"beginHour\": 0, \\n \"endHour\": 0, \\n \"activeDays\": 1, \\n \"inactiveDays\": 0 \\n } \\n }, \\n { \\n \"name\": \"monthly-0001\", \\n \"metadata\": \"EVENT_0007\", \\n \"scheduleType\": \"absolute\", \\n \"absoluteBegin\": 1570406400000, \\n \"absoluteEnd\": 1575158400000, \\n \"repeatType\": \"monthly\", \\n \"repeatBeginDayOfMonth\": 10, \\n \"repeatEndDayOfMonth\": 15, \\n \"repeatBeginHour\": 1, \\n \"repeatEndHour\": 2, \\n \"repeatSetting\": { \\n \"repeatType\": \"always\", \\n \"beginDayOfMonth\": 1, \\n \"endDayOfMonth\": 1, \\n \"beginHour\": 0, \\n \"endHour\": 0, \\n \"activeDays\": 1, \\n \"inactiveDays\": 0 \\n } \\n }, \\n { \\n \"name\": \"monthly-0002\", \\n \"metadata\": \"EVENT_0008\", \\n \"scheduleType\": \"absolute\", \\n \"absoluteBegin\": 1570406400000, \\n \"absoluteEnd\": 1575158400000, \\n \"repeatType\": \"monthly\", \\n \"repeatBeginDayOfMonth\": 16, \\n \"repeatEndDayOfMonth\": 9, \\n \"repeatBeginHour\": 3, \\n \"repeatEndHour\": 0, \\n \"repeatSetting\": { \\n \"repeatType\": \"always\", \\n \"beginDayOfMonth\": 1, \\n \"endDayOfMonth\": 1, \\n \"beginHour\": 0, \\n \"endHour\": 0, \\n \"activeDays\": 1, \\n \"inactiveDays\": 0 \\n } \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.update_current_event_master ({ namespaceName = \"namespace-0001\" , mode = nil , settings = \"{ \\n \\\" version \\\" : \\\" 2019-03-31 \\\" , \\n \\\" events \\\" : [ \\n { \\n \\\" name \\\" : \\\" event-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0001 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 10000, \\n \\\" absoluteEnd \\\" : 20000, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" event-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0002 \\\" , \\n \\\" scheduleType \\\" : \\\" relative \\\" , \\n \\\" relativeTriggerName \\\" : \\\" trigger-0001 \\\" , \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" daily-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0003 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569369600000, \\n \\\" absoluteEnd \\\" : 1569456000000, \\n \\\" repeatType \\\" : \\\" daily \\\" , \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" daily-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0004 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569369600000, \\n \\\" absoluteEnd \\\" : 1569456000000, \\n \\\" repeatType \\\" : \\\" daily \\\" , \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 1, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" weekly-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0005 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569888000000, \\n \\\" absoluteEnd \\\" : 1570406400000, \\n \\\" repeatType \\\" : \\\" weekly \\\" , \\n \\\" repeatBeginDayOfWeek \\\" : \\\" tuesday \\\" , \\n \\\" repeatEndDayOfWeek \\\" : \\\" wednesday \\\" , \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" weekly-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0006 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569888000000, \\n \\\" absoluteEnd \\\" : 1570406400000, \\n \\\" repeatType \\\" : \\\" weekly \\\" , \\n \\\" repeatBeginDayOfWeek \\\" : \\\" wednesday \\\" , \\n \\\" repeatEndDayOfWeek \\\" : \\\" tuesday \\\" , \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 1, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" monthly-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0007 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1570406400000, \\n \\\" absoluteEnd \\\" : 1575158400000, \\n \\\" repeatType \\\" : \\\" monthly \\\" , \\n \\\" repeatBeginDayOfMonth \\\" : 10, \\n \\\" repeatEndDayOfMonth \\\" : 15, \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" monthly-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0008 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1570406400000, \\n \\\" absoluteEnd \\\" : 1575158400000, \\n \\\" repeatType \\\" : \\\" monthly \\\" , \\n \\\" repeatBeginDayOfMonth \\\" : 16, \\n \\\" repeatEndDayOfMonth \\\" : 9, \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 0, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.update_current_event_master_async ({ namespaceName = \"namespace-0001\" , mode = nil , settings = \"{ \\n \\\" version \\\" : \\\" 2019-03-31 \\\" , \\n \\\" events \\\" : [ \\n { \\n \\\" name \\\" : \\\" event-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0001 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 10000, \\n \\\" absoluteEnd \\\" : 20000, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" event-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0002 \\\" , \\n \\\" scheduleType \\\" : \\\" relative \\\" , \\n \\\" relativeTriggerName \\\" : \\\" trigger-0001 \\\" , \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" daily-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0003 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569369600000, \\n \\\" absoluteEnd \\\" : 1569456000000, \\n \\\" repeatType \\\" : \\\" daily \\\" , \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" daily-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0004 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569369600000, \\n \\\" absoluteEnd \\\" : 1569456000000, \\n \\\" repeatType \\\" : \\\" daily \\\" , \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 1, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" weekly-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0005 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569888000000, \\n \\\" absoluteEnd \\\" : 1570406400000, \\n \\\" repeatType \\\" : \\\" weekly \\\" , \\n \\\" repeatBeginDayOfWeek \\\" : \\\" tuesday \\\" , \\n \\\" repeatEndDayOfWeek \\\" : \\\" wednesday \\\" , \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" weekly-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0006 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1569888000000, \\n \\\" absoluteEnd \\\" : 1570406400000, \\n \\\" repeatType \\\" : \\\" weekly \\\" , \\n \\\" repeatBeginDayOfWeek \\\" : \\\" wednesday \\\" , \\n \\\" repeatEndDayOfWeek \\\" : \\\" tuesday \\\" , \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 1, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" monthly-0001 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0007 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1570406400000, \\n \\\" absoluteEnd \\\" : 1575158400000, \\n \\\" repeatType \\\" : \\\" monthly \\\" , \\n \\\" repeatBeginDayOfMonth \\\" : 10, \\n \\\" repeatEndDayOfMonth \\\" : 15, \\n \\\" repeatBeginHour \\\" : 1, \\n \\\" repeatEndHour \\\" : 2, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" monthly-0002 \\\" , \\n \\\" metadata \\\" : \\\" EVENT_0008 \\\" , \\n \\\" scheduleType \\\" : \\\" absolute \\\" , \\n \\\" absoluteBegin \\\" : 1570406400000, \\n \\\" absoluteEnd \\\" : 1575158400000, \\n \\\" repeatType \\\" : \\\" monthly \\\" , \\n \\\" repeatBeginDayOfMonth \\\" : 16, \\n \\\" repeatEndDayOfMonth \\\" : 9, \\n \\\" repeatBeginHour \\\" : 3, \\n \\\" repeatEndHour \\\" : 0, \\n \\\" repeatSetting \\\" : { \\n \\\" repeatType \\\" : \\\" always \\\" , \\n \\\" beginDayOfMonth \\\" : 1, \\n \\\" endDayOfMonth \\\" : 1, \\n \\\" beginHour \\\" : 0, \\n \\\" endHour \\\" : 0, \\n \\\" activeDays \\\" : 1, \\n \\\" inactiveDays \\\" : 0 \\n } \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentEventMasterFromGitHub 현재 활성화된 이벤트의 마스터 데이터를 GitHub에서 업데이트 지정된 체크아웃 설정을 사용하여 GitHub 리포지토리에서 마스터 데이터를 체크아웃하고, 현재 활성화된 이벤트 마스터 데이터를 업데이트합니다. GitHub와의 인증에는 키 서비스를 통해 API 키가 복호화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentEventMaster 업데이트된 현재 활성화된 이벤트의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentEventMasterFromGitHub ( \u0026 schedule . UpdateCurrentEventMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 schedule . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\UpdateCurrentEventMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e updateCurrentEventMasterFromGitHub ( ( new UpdateCurrentEventMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.UpdateCurrentEventMasterFromGitHubRequest ; import io.gs2.schedule.result.UpdateCurrentEventMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { UpdateCurrentEventMasterFromGitHubResult result = client . updateCurrentEventMasterFromGitHub ( new UpdateCurrentEventMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentEventMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . UpdateCurrentEventMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentEventMasterFromGitHub ( new Gs2 . Gs2Schedule . Request . UpdateCurrentEventMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Schedule . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . updateCurrentEventMasterFromGitHub ( new Gs2Schedule . UpdateCurrentEventMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Schedule . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . update_current_event_master_from_git_hub ( schedule . UpdateCurrentEventMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( schedule . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.update_current_event_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.update_current_event_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeEventMasters 이벤트 마스터 목록 조회 이벤트 마스터의 페이지네이션 목록을 조회합니다. 이벤트 이름의 접두사로 필터링할 수 있습니다. 이벤트 마스터는 절대/상대 타이밍, 반복 설정, 트리거 연결 등의 이벤트 스케줄을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 이벤트 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 이벤트 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DescribeEventMasters ( \u0026 schedule . DescribeEventMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DescribeEventMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e describeEventMasters ( ( new DescribeEventMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DescribeEventMastersRequest ; import io.gs2.schedule.result.DescribeEventMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DescribeEventMastersResult result = client . describeEventMasters ( new DescribeEventMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List EventMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DescribeEventMastersResult \u003e asyncResult = null ; yield return client . DescribeEventMasters ( new Gs2 . Gs2Schedule . Request . DescribeEventMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . describeEventMasters ( new Gs2Schedule . DescribeEventMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . describe_event_masters ( schedule . DescribeEventMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.describe_event_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'schedule' ) api_result_handler = client.describe_event_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createEventMaster 이벤트 마스터 신규 생성 스케줄 타입(절대 또는 상대), 시작/종료 시각, 반복 설정(일간, 주간, 월간), 상대 스케줄 이벤트용 선택적 트리거 이름을 가진 새로운 이벤트 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 이벤트 이름 이벤트 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scheduleType 문자열 열거형 enum {   “absolute”,   “relative” }  스케줄 타입 이벤트 기간을 정의하는 방식을 결정합니다. “absolute\"는 모든 플레이어에게 동일하게 적용되는 고정된 시작/종료 타임스탬프를 사용합니다. “relative\"는 플레이어별 트리거를 기점으로 사용하여, 개인화된 이벤트 기간을 구현합니다(예: 각 플레이어가 처음 로그인한 시점부터 24시간). 정의 설명 absolute 고정 기간 relative 플레이어별 기간 absoluteBegin long 절대 시작 일시 절대 스케줄링에서 이벤트 기간의 고정 시작 시각입니다. 모든 플레이어가 동일한 시작 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 과거부터 시작된 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. absoluteEnd long 절대 종료 일시 절대 스케줄링에서 이벤트 기간의 고정 종료 시각입니다. 모든 플레이어가 동일한 종료 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 종료되지 않는 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. relativeTriggerName string {scheduleType} == “relative” ※ ~ 128자 이벤트 시작 트리거 이름 게임 플레이어별로 이벤트 기간을 설정하는( relative ) 경우, 이벤트 시작의 기점이 되는 트리거의 이름을 지정합니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ※ scheduleType이(가) “relative” 이면 필수 repeatSetting RepeatSetting  반복 설정 이벤트 기간 내에서 반복되는 유효 시간대에 대한 설정입니다. 활성 기간을 특정 시간대, 요일, 월중 날짜, 또는 사용자 지정 활성/비활성 일 주기로 좁힐 수 있습니다. 반복 패턴 없이 이벤트 기간 전체를 활성 상태로 유지하려면 repeatType을 “always\"로 설정합니다. Result 타입 설명 item EventMaster 생성한 이벤트 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . CreateEventMaster ( \u0026 schedule . CreateEventMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"event-0001\" ), Description : nil , Metadata : nil , ScheduleType : pointy . String ( \"absolute\" ), AbsoluteBegin : pointy . Int64 ( 10000 ), AbsoluteEnd : pointy . Int64 ( 20000 ), RelativeTriggerName : pointy . String ( \"trigger-0001\" ), RepeatSetting : \u0026 schedule . RepeatSetting { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 2 ), BeginDayOfWeek : pointy . String ( \"monday\" ), EndDayOfWeek : pointy . String ( \"sunday\" ), BeginHour : pointy . Int32 ( 5 ), EndHour : pointy . Int32 ( 6 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\CreateEventMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e createEventMaster ( ( new CreateEventMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"event-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withScheduleType ( \"absolute\" ) -\u003e withAbsoluteBegin ( 10000 ) -\u003e withAbsoluteEnd ( 20000 ) -\u003e withRelativeTriggerName ( \"trigger-0001\" ) -\u003e withRepeatSetting (( new \\Gs2\\Schedule\\Model\\RepeatSetting ()) -\u003e withBeginDayOfMonth ( 1 ) -\u003e withEndDayOfMonth ( 2 ) -\u003e withBeginDayOfWeek ( \"monday\" ) -\u003e withEndDayOfWeek ( \"sunday\" ) -\u003e withBeginHour ( 5 ) -\u003e withEndHour ( 6 )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.CreateEventMasterRequest ; import io.gs2.schedule.result.CreateEventMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { CreateEventMasterResult result = client . createEventMaster ( new CreateEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"event-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withScheduleType ( \"absolute\" ) . withAbsoluteBegin ( 10000L ) . withAbsoluteEnd ( 20000L ) . withRelativeTriggerName ( \"trigger-0001\" ) . withRepeatSetting ( new io . gs2 . schedule . model . RepeatSetting () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 2 ) . withBeginDayOfWeek ( \"monday\" ) . withEndDayOfWeek ( \"sunday\" ) . withBeginHour ( 5 ) . withEndHour ( 6 )) ); EventMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . CreateEventMasterResult \u003e asyncResult = null ; yield return client . CreateEventMaster ( new Gs2 . Gs2Schedule . Request . CreateEventMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"event-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithScheduleType ( \"absolute\" ) . WithAbsoluteBegin ( 10000L ) . WithAbsoluteEnd ( 20000L ) . WithRelativeTriggerName ( \"trigger-0001\" ) . WithRepeatSetting ( new Gs2 . Gs2Schedule . Model . RepeatSetting () . WithBeginDayOfMonth ( 1 ) . WithEndDayOfMonth ( 2 ) . WithBeginDayOfWeek ( \"monday\" ) . WithEndDayOfWeek ( \"sunday\" ) . WithBeginHour ( 5 ) . WithEndHour ( 6 )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . createEventMaster ( new Gs2Schedule . CreateEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"event-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withScheduleType ( \"absolute\" ) . withAbsoluteBegin ( 10000 ) . withAbsoluteEnd ( 20000 ) . withRelativeTriggerName ( \"trigger-0001\" ) . withRepeatSetting ( new Gs2Schedule . model . RepeatSetting () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 2 ) . withBeginDayOfWeek ( \"monday\" ) . withEndDayOfWeek ( \"sunday\" ) . withBeginHour ( 5 ) . withEndHour ( 6 )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . create_event_master ( schedule . CreateEventMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'event-0001' ) . with_description ( None ) . with_metadata ( None ) . with_schedule_type ( 'absolute' ) . with_absolute_begin ( 10000 ) . with_absolute_end ( 20000 ) . with_relative_trigger_name ( 'trigger-0001' ) . with_repeat_setting ( schedule . RepeatSetting () . with_begin_day_of_month ( 1 ) . with_end_day_of_month ( 2 ) . with_begin_day_of_week ( 'monday' ) . with_end_day_of_week ( 'sunday' ) . with_begin_hour ( 5 ) . with_end_hour ( 6 )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.create_event_master ({ namespaceName = \"namespace-0001\" , name = \"event-0001\" , description = nil , metadata = nil , scheduleType = \"absolute\" , absoluteBegin = 10000 , absoluteEnd = 20000 , relativeTriggerName = \"trigger-0001\" , repeatSetting = { beginDayOfMonth = 1 , endDayOfMonth = 2 , beginDayOfWeek = \"monday\" , endDayOfWeek = \"sunday\" , beginHour = 5 , endHour = 6 , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.create_event_master_async ({ namespaceName = \"namespace-0001\" , name = \"event-0001\" , description = nil , metadata = nil , scheduleType = \"absolute\" , absoluteBegin = 10000 , absoluteEnd = 20000 , relativeTriggerName = \"trigger-0001\" , repeatSetting = { beginDayOfMonth = 1 , endDayOfMonth = 2 , beginDayOfWeek = \"monday\" , endDayOfWeek = \"sunday\" , beginHour = 5 , endHour = 6 , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getEventMaster 이벤트 마스터 조회 스케줄 타입, 시작/종료 시각, 반복 설정, 트리거 설정을 포함하여 지정된 이벤트 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. eventName string  ~ 128자 이벤트 이름 이벤트 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EventMaster 이벤트 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . GetEventMaster ( \u0026 schedule . GetEventMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EventName : pointy . String ( \"event-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\GetEventMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e getEventMaster ( ( new GetEventMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEventName ( \"event-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.GetEventMasterRequest ; import io.gs2.schedule.result.GetEventMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { GetEventMasterResult result = client . getEventMaster ( new GetEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) ); EventMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . GetEventMasterResult \u003e asyncResult = null ; yield return client . GetEventMaster ( new Gs2 . Gs2Schedule . Request . GetEventMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEventName ( \"event-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . getEventMaster ( new Gs2Schedule . GetEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . get_event_master ( schedule . GetEventMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_event_name ( 'event-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.get_event_master ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.get_event_master_async ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateEventMaster 이벤트 마스터 갱신 지정된 이벤트 마스터의 스케줄 타입, 시작/종료 시각, 반복 설정, 트리거 설정 등의 속성을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. eventName string  ~ 128자 이벤트 이름 이벤트 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scheduleType 문자열 열거형 enum {   “absolute”,   “relative” }  스케줄 타입 이벤트 기간을 정의하는 방식을 결정합니다. “absolute\"는 모든 플레이어에게 동일하게 적용되는 고정된 시작/종료 타임스탬프를 사용합니다. “relative\"는 플레이어별 트리거를 기점으로 사용하여, 개인화된 이벤트 기간을 구현합니다(예: 각 플레이어가 처음 로그인한 시점부터 24시간). 정의 설명 absolute 고정 기간 relative 플레이어별 기간 absoluteBegin long 절대 시작 일시 절대 스케줄링에서 이벤트 기간의 고정 시작 시각입니다. 모든 플레이어가 동일한 시작 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 과거부터 시작된 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. absoluteEnd long 절대 종료 일시 절대 스케줄링에서 이벤트 기간의 고정 종료 시각입니다. 모든 플레이어가 동일한 종료 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 종료되지 않는 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. relativeTriggerName string {scheduleType} == “relative” ※ ~ 128자 이벤트 시작 트리거 이름 게임 플레이어별로 이벤트 기간을 설정하는( relative ) 경우, 이벤트 시작의 기점이 되는 트리거의 이름을 지정합니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ※ scheduleType이(가) “relative” 이면 필수 repeatSetting RepeatSetting  반복 설정 이벤트 기간 내에서 반복되는 유효 시간대에 대한 설정입니다. 활성 기간을 특정 시간대, 요일, 월중 날짜, 또는 사용자 지정 활성/비활성 일 주기로 좁힐 수 있습니다. 반복 패턴 없이 이벤트 기간 전체를 활성 상태로 유지하려면 repeatType을 “always\"로 설정합니다. Result 타입 설명 item EventMaster 갱신한 이벤트 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . UpdateEventMaster ( \u0026 schedule . UpdateEventMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EventName : pointy . String ( \"event-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), ScheduleType : pointy . String ( \"absolute\" ), AbsoluteBegin : pointy . Int64 ( 20000 ), AbsoluteEnd : pointy . Int64 ( 30000 ), RelativeTriggerName : pointy . String ( \"trigger-0001\" ), RepeatSetting : \u0026 schedule . RepeatSetting { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 2 ), BeginDayOfWeek : pointy . String ( \"monday\" ), EndDayOfWeek : pointy . String ( \"sunday\" ), BeginHour : pointy . Int32 ( 5 ), EndHour : pointy . Int32 ( 6 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\UpdateEventMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e updateEventMaster ( ( new UpdateEventMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEventName ( \"event-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) -\u003e withScheduleType ( \"absolute\" ) -\u003e withAbsoluteBegin ( 20000 ) -\u003e withAbsoluteEnd ( 30000 ) -\u003e withRelativeTriggerName ( \"trigger-0001\" ) -\u003e withRepeatSetting (( new \\Gs2\\Schedule\\Model\\RepeatSetting ()) -\u003e withBeginDayOfMonth ( 1 ) -\u003e withEndDayOfMonth ( 2 ) -\u003e withBeginDayOfWeek ( \"monday\" ) -\u003e withEndDayOfWeek ( \"sunday\" ) -\u003e withBeginHour ( 5 ) -\u003e withEndHour ( 6 )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.UpdateEventMasterRequest ; import io.gs2.schedule.result.UpdateEventMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { UpdateEventMasterResult result = client . updateEventMaster ( new UpdateEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withScheduleType ( \"absolute\" ) . withAbsoluteBegin ( 20000L ) . withAbsoluteEnd ( 30000L ) . withRelativeTriggerName ( \"trigger-0001\" ) . withRepeatSetting ( new io . gs2 . schedule . model . RepeatSetting () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 2 ) . withBeginDayOfWeek ( \"monday\" ) . withEndDayOfWeek ( \"sunday\" ) . withBeginHour ( 5 ) . withEndHour ( 6 )) ); EventMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . UpdateEventMasterResult \u003e asyncResult = null ; yield return client . UpdateEventMaster ( new Gs2 . Gs2Schedule . Request . UpdateEventMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEventName ( \"event-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . WithScheduleType ( \"absolute\" ) . WithAbsoluteBegin ( 20000L ) . WithAbsoluteEnd ( 30000L ) . WithRelativeTriggerName ( \"trigger-0001\" ) . WithRepeatSetting ( new Gs2 . Gs2Schedule . Model . RepeatSetting () . WithBeginDayOfMonth ( 1 ) . WithEndDayOfMonth ( 2 ) . WithBeginDayOfWeek ( \"monday\" ) . WithEndDayOfWeek ( \"sunday\" ) . WithBeginHour ( 5 ) . WithEndHour ( 6 )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . updateEventMaster ( new Gs2Schedule . UpdateEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withScheduleType ( \"absolute\" ) . withAbsoluteBegin ( 20000 ) . withAbsoluteEnd ( 30000 ) . withRelativeTriggerName ( \"trigger-0001\" ) . withRepeatSetting ( new Gs2Schedule . model . RepeatSetting () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 2 ) . withBeginDayOfWeek ( \"monday\" ) . withEndDayOfWeek ( \"sunday\" ) . withBeginHour ( 5 ) . withEndHour ( 6 )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . update_event_master ( schedule . UpdateEventMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_event_name ( 'event-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"hoge\": \"fuga\"}' ) . with_schedule_type ( 'absolute' ) . with_absolute_begin ( 20000 ) . with_absolute_end ( 30000 ) . with_relative_trigger_name ( 'trigger-0001' ) . with_repeat_setting ( schedule . RepeatSetting () . with_begin_day_of_month ( 1 ) . with_end_day_of_month ( 2 ) . with_begin_day_of_week ( 'monday' ) . with_end_day_of_week ( 'sunday' ) . with_begin_hour ( 5 ) . with_end_hour ( 6 )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.update_event_master ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , scheduleType = \"absolute\" , absoluteBegin = 20000 , absoluteEnd = 30000 , relativeTriggerName = \"trigger-0001\" , repeatSetting = { beginDayOfMonth = 1 , endDayOfMonth = 2 , beginDayOfWeek = \"monday\" , endDayOfWeek = \"sunday\" , beginHour = 5 , endHour = 6 , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.update_event_master_async ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , scheduleType = \"absolute\" , absoluteBegin = 20000 , absoluteEnd = 30000 , relativeTriggerName = \"trigger-0001\" , repeatSetting = { beginDayOfMonth = 1 , endDayOfMonth = 2 , beginDayOfWeek = \"monday\" , endDayOfWeek = \"sunday\" , beginHour = 5 , endHour = 6 , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteEventMaster 이벤트 마스터 삭제 지정된 이벤트 마스터를 삭제합니다. 이는 마스터 정의만 삭제하는 것으로, 현재 활성화되어 있는 이벤트 마스터 데이터는 다음 마스터 데이터 갱신 시까지 영향을 받지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. eventName string  ~ 128자 이벤트 이름 이벤트 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item EventMaster 삭제한 이벤트 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/schedule\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := schedule . Gs2ScheduleRestClient { Session : \u0026 session , } result , err := client . DeleteEventMaster ( \u0026 schedule . DeleteEventMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), EventName : pointy . String ( \"event-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Schedule\\Gs2ScheduleRestClient ; use Gs2\\Schedule\\Request\\DeleteEventMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScheduleRestClient ( $session ); try { $result = $client -\u003e deleteEventMaster ( ( new DeleteEventMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withEventName ( \"event-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.schedule.rest.Gs2ScheduleRestClient ; import io.gs2.schedule.request.DeleteEventMasterRequest ; import io.gs2.schedule.result.DeleteEventMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScheduleRestClient client = new Gs2ScheduleRestClient ( session ); try { DeleteEventMasterResult result = client . deleteEventMaster ( new DeleteEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) ); EventMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScheduleRestClient ( session ); AsyncResult Gs2 . Gs2Schedule . Result . DeleteEventMasterResult \u003e asyncResult = null ; yield return client . DeleteEventMaster ( new Gs2 . Gs2Schedule . Request . DeleteEventMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithEventName ( \"event-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Schedule from '@/gs2/schedule' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Schedule . Gs2ScheduleRestClient ( session ); try { const result = await client . deleteEventMaster ( new Gs2Schedule . DeleteEventMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withEventName ( \"event-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import schedule session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = schedule . Gs2ScheduleRestClient ( session ) try : result = client . delete_event_master ( schedule . DeleteEventMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_event_name ( 'event-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'schedule' ) api_result = client.delete_event_master ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'schedule' ) api_result_handler = client.delete_event_master_async ({ namespaceName = \"namespace-0001\" , eventName = \"event-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Schedule SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Schedule SDK API 레퍼런스","url":"/ko/api_reference/schedule/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스크립트가 트랜잭션 액션을 반환할 때 사용되는 분산 트랜잭션 설정입니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 스크립트 호출과 그 결과의 추적에 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 스크립트를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 스크립트 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Script 스크립트 GS2에서는 표준 기능만으로 기능을 구현할 수 없을 때를 위해 스크립트로 기능을 확장할 수 있게 되어 있습니다. 스크립트는 Lua 언어로 작성할 수 있습니다. 스크립트 내에서 GS2 서비스의 데이터를 취득할 수도 있으므로, 유연한 처리를 작성할 수 있습니다. 자세한 내용은 문서를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 scriptId string ※ ~ 1024자 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스크립트 이름 스크립트 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 script string  ~ 5242880자 Lua 스크립트 실행할 Lua 스크립트의 소스 코드입니다. 스크립트에서 GS2 서비스의 데이터에 액세스하여 호출한 서비스의 동작을 변경하는 결과를 반환할 수 있습니다. disableStringNumberToNumber bool false 문자열-숫자 변환 비활성화 활성화하면 숫자로만 구성된 문자열(예: “12345”)이 자동으로 숫자로 변환되지 않고 문자열로 유지됩니다. 숫자처럼 보여도 문자열 타입으로 유지해야 하는 ID나 코드를 다룰 때 유용합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 RandomStatus 난수 상태 스크립트 실행 컨텍스트 내에서 사용 가능한 난수 상태를 관리합니다. 시드 값과 카테고리별 사용된 난수 리스트를 포함합니다. 이 상태는 Lua 스크립트에 테이블로 전달되며, 스크립트에서 읽기/변경이 가능합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 seed long  0 ~ 4294967294 난수 시드 난수 생성을 위한 시드 값입니다. 스크립트 실행 내에서 결정론적인 난수열을 생성하기 위해 사용됩니다. used List 0 ~ 1000 items 사용된 난수 리스트 목적별로 카테고리 분류된 소비된 난수의 리스트입니다. 각 카테고리는 고유한 사용 카운터를 가질 수 있습니다. RandomUsed 사용된 난수 특정 카테고리에서 소비된 난수의 수를 추적합니다. 각 카테고리는 스크립트 실행 내에서 난수 사용의 서로 다른 목적을 나타내며, 난수 소비의 독립적인 추적을 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 category long  0 ~ 4294967294 카테고리 난수 사용 카테고리의 수치 식별자입니다. 각 카테고리는 난수 소비를 독립적으로 추적하며, 스크립트가 서로 다른 목적으로 별도의 난수 시퀀스를 사용할 수 있게 합니다. used long  0 ~ 4294967294 사용 횟수 이 카테고리에서 소비된 난수의 수입니다. 이 카테고리의 시퀀스에서 난수가 추출될 때마다 증가합니다. AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Transaction 트랜잭션 스크립트에서 반환되는 분산 트랜잭션으로 실행되는 액션의 집합을 나타냅니다. 검증 액션(전제 조건 체크), 소비 액션(리소스 소비), 입수 액션(리소스 부여)을 포함하며, 입수 액션으로 실행됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string ~ 128자 트랜잭션 ID 이 트랜잭션의 선택적 고유 식별자입니다. 입수 액션 실행의 추적과 중복 제거에 사용됩니다. verifyActions List 0 ~ 100 items 검증 액션 리스트 트랜잭션의 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공한 후에 소비 액션과 입수 액션이 실행됩니다. consumeActions List [] 0 ~ 100 items 소비 액션 리스트 트랜잭션의 일부로서 리소스를 소비하는 소비 액션의 리스트입니다. 모든 검증 액션이 성공한 후에 실행됩니다. acquireActions List [] 0 ~ 100 items 입수 액션 리스트 트랜잭션의 일부로서 리소스를 부여하는 입수 액션의 리스트입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 script . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.DescribeNamespacesRequest ; import io.gs2.script.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Script . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Script . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . describe_namespaces ( script . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'script' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스크립트가 트랜잭션 액션을 반환할 때 사용되는 분산 트랜잭션 설정입니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 스크립트 호출과 그 결과의 추적에 사용됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 script . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , LogSetting : \u0026 script . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Script\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.CreateNamespaceRequest ; import io.gs2.script.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . script . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Script . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Script . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Script . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Script . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . create_namespace ( script . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_log_setting ( script . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 script . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.GetNamespaceStatusRequest ; import io.gs2.script.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Script . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Script . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . get_namespace_status ( script . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'script' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 script . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.GetNamespaceRequest ; import io.gs2.script.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Script . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Script . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . get_namespace ( script . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스크립트가 트랜잭션 액션을 반환할 때 사용되는 분산 트랜잭션 설정입니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 스크립트 호출과 그 결과의 추적에 사용됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 script . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , LogSetting : \u0026 script . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\Script\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.UpdateNamespaceRequest ; import io.gs2.script.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . script . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Script . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2Script . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Script . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2Script . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . update_namespace ( script . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_log_setting ( script . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 script . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.DeleteNamespaceRequest ; import io.gs2.script.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Script . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Script . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . delete_namespace ( script . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 script . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.GetServiceVersionRequest ; import io.gs2.script.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Script . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Script . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . get_service_version ( script . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeScripts 스크립트 목록 취득 네임스페이스에 등록된 Lua 스크립트의 페이지네이션이 적용된 리스트를 취득합니다. 스크립트 이름의 접두사로 필터링할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 스크립트 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스크립트 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . DescribeScripts ( \u0026 script . DescribeScriptsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\DescribeScriptsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e describeScripts ( ( new DescribeScriptsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.DescribeScriptsRequest ; import io.gs2.script.result.DescribeScriptsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { DescribeScriptsResult result = client . describeScripts ( new DescribeScriptsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Script \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . DescribeScriptsResult \u003e asyncResult = null ; yield return client . DescribeScripts ( new Gs2 . Gs2Script . Request . DescribeScriptsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . describeScripts ( new Gs2Script . DescribeScriptsRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . describe_scripts ( script . DescribeScriptsRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.describe_scripts ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'script' ) api_result_handler = client.describe_scripts_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createScript 스크립트 신규 생성 지정된 코드로 새로운 Lua 스크립트를 생성합니다. disableStringNumberToNumber 옵션을 통해 스크립트 실행 시 숫자로만 구성된 문자열이 자동으로 숫자로 변환되는지 여부를 제어할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 스크립트 이름 스크립트 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 script string  ~ 5242880자 Lua 스크립트 실행할 Lua 스크립트의 소스 코드입니다. 스크립트에서 GS2 서비스의 데이터에 액세스하여 호출한 서비스의 동작을 변경하는 결과를 반환할 수 있습니다. disableStringNumberToNumber bool false 문자열-숫자 변환 비활성화 활성화하면 숫자로만 구성된 문자열(예: “12345”)이 자동으로 숫자로 변환되지 않고 문자열로 유지됩니다. 숫자처럼 보여도 문자열 타입으로 유지해야 하는 ID나 코드를 다룰 때 유용합니다. Result 타입 설명 item Script 생성한 스크립트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . CreateScript ( \u0026 script . CreateScriptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"script-0001\" ), Description : nil , Script : pointy . String ( \"result = {permit=true}\" ), DisableStringNumberToNumber : pointy . Bool ( false ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\CreateScriptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e createScript ( ( new CreateScriptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"script-0001\" ) -\u003e withDescription ( null ) -\u003e withScript ( \"result = {permit=true}\" ) -\u003e withDisableStringNumberToNumber ( false ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.CreateScriptRequest ; import io.gs2.script.result.CreateScriptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { CreateScriptResult result = client . createScript ( new CreateScriptRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"script-0001\" ) . withDescription ( null ) . withScript ( \"result = {permit=true}\" ) . withDisableStringNumberToNumber ( false ) ); Script item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . CreateScriptResult \u003e asyncResult = null ; yield return client . CreateScript ( new Gs2 . Gs2Script . Request . CreateScriptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"script-0001\" ) . WithDescription ( null ) . WithScript ( \"result = {permit=true}\" ) . WithDisableStringNumberToNumber ( false ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . createScript ( new Gs2Script . CreateScriptRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"script-0001\" ) . withDescription ( null ) . withScript ( \"result = {permit=true}\" ) . withDisableStringNumberToNumber ( false ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . create_script ( script . CreateScriptRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'script-0001' ) . with_description ( None ) . with_script ( 'result = {permit=true}' ) . with_disable_string_number_to_number ( False ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.create_script ({ namespaceName = \"namespace-0001\" , name = \"script-0001\" , description = nil , script = \"result = {permit=true}\" , disableStringNumberToNumber = false , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.create_script_async ({ namespaceName = \"namespace-0001\" , name = \"script-0001\" , description = nil , script = \"result = {permit=true}\" , disableStringNumberToNumber = false , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; createScriptFromGitHub GitHub 리포지토리의 코드로 스크립트 신규 생성 지정된 GitHub 리포지토리에서 소스 파일을 체크아웃하여 새로운 스크립트를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 스크립트 이름 스크립트 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 checkoutSetting GitHubCheckoutSetting  GitHub에서 소스 코드를 체크아웃하는 설정 disableStringNumberToNumber bool false 문자열-숫자 변환 비활성화 활성화하면 숫자로만 구성된 문자열(예: “12345”)이 자동으로 숫자로 변환되지 않고 문자열로 유지됩니다. 숫자처럼 보여도 문자열 타입으로 유지해야 하는 ID나 코드를 다룰 때 유용합니다. Result 타입 설명 item Script 생성한 스크립트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . CreateScriptFromGitHub ( \u0026 script . CreateScriptFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"script-0001\" ), Description : nil , CheckoutSetting : \u0026 script . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/script-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, DisableStringNumberToNumber : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\CreateScriptFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e createScriptFromGitHub ( ( new CreateScriptFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"script-0001\" ) -\u003e withDescription ( null ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/script-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) -\u003e withDisableStringNumberToNumber ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.CreateScriptFromGitHubRequest ; import io.gs2.script.result.CreateScriptFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { CreateScriptFromGitHubResult result = client . createScriptFromGitHub ( new CreateScriptFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"script-0001\" ) . withDescription ( null ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/script-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) . withDisableStringNumberToNumber ( null ) ); Script item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . CreateScriptFromGitHubResult \u003e asyncResult = null ; yield return client . CreateScriptFromGitHub ( new Gs2 . Gs2Script . Request . CreateScriptFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"script-0001\" ) . WithDescription ( null ) . WithCheckoutSetting ( new Gs2 . Gs2Script . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/script-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ) . WithDisableStringNumberToNumber ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . createScriptFromGitHub ( new Gs2Script . CreateScriptFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"script-0001\" ) . withDescription ( null ) . withCheckoutSetting ( new Gs2Script . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/script-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) . withDisableStringNumberToNumber ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . create_script_from_git_hub ( script . CreateScriptFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'script-0001' ) . with_description ( None ) . with_checkout_setting ( script . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/script-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) . with_disable_string_number_to_number ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.create_script_from_git_hub ({ namespaceName = \"namespace-0001\" , name = \"script-0001\" , description = nil , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/script-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, disableStringNumberToNumber = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.create_script_from_git_hub_async ({ namespaceName = \"namespace-0001\" , name = \"script-0001\" , description = nil , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/script-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, disableStringNumberToNumber = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getScript 스크립트 취득 이름, 설명, 스크립트 코드, 타입 변환 설정을 포함하여 지정된 스크립트를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. scriptName string  ~ 128자 스크립트 이름 스크립트 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Script 스크립트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . GetScript ( \u0026 script . GetScriptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ScriptName : pointy . String ( \"script-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\GetScriptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e getScript ( ( new GetScriptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withScriptName ( \"script-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.GetScriptRequest ; import io.gs2.script.result.GetScriptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { GetScriptResult result = client . getScript ( new GetScriptRequest () . withNamespaceName ( \"namespace-0001\" ) . withScriptName ( \"script-0001\" ) ); Script item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . GetScriptResult \u003e asyncResult = null ; yield return client . GetScript ( new Gs2 . Gs2Script . Request . GetScriptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithScriptName ( \"script-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . getScript ( new Gs2Script . GetScriptRequest () . withNamespaceName ( \"namespace-0001\" ) . withScriptName ( \"script-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . get_script ( script . GetScriptRequest () . with_namespace_name ( 'namespace-0001' ) . with_script_name ( 'script-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.get_script ({ namespaceName = \"namespace-0001\" , scriptName = \"script-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.get_script_async ({ namespaceName = \"namespace-0001\" , scriptName = \"script-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateScript 스크립트 갱신 지정된 스크립트의 코드, 설명, 타입 변환 설정을 갱신합니다. 스크립트 코드 전체가 새로운 내용으로 대체됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. scriptName string  ~ 128자 스크립트 이름 스크립트 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 script string  ~ 5242880자 Lua 스크립트 실행할 Lua 스크립트의 소스 코드입니다. 스크립트에서 GS2 서비스의 데이터에 액세스하여 호출한 서비스의 동작을 변경하는 결과를 반환할 수 있습니다. disableStringNumberToNumber bool false 문자열-숫자 변환 비활성화 활성화하면 숫자로만 구성된 문자열(예: “12345”)이 자동으로 숫자로 변환되지 않고 문자열로 유지됩니다. 숫자처럼 보여도 문자열 타입으로 유지해야 하는 ID나 코드를 다룰 때 유용합니다. Result 타입 설명 item Script 갱신한 스크립트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . UpdateScript ( \u0026 script . UpdateScriptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ScriptName : pointy . String ( \"script-0001\" ), Description : pointy . String ( \"description1\" ), Script : pointy . String ( \"result = \\\"hogehoge\\\"\" ), DisableStringNumberToNumber : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\UpdateScriptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e updateScript ( ( new UpdateScriptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withScriptName ( \"script-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withScript ( \"result = \\\" hogehoge \\\" \" ) -\u003e withDisableStringNumberToNumber ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.UpdateScriptRequest ; import io.gs2.script.result.UpdateScriptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { UpdateScriptResult result = client . updateScript ( new UpdateScriptRequest () . withNamespaceName ( \"namespace-0001\" ) . withScriptName ( \"script-0001\" ) . withDescription ( \"description1\" ) . withScript ( \"result = \\\"hogehoge\\\"\" ) . withDisableStringNumberToNumber ( null ) ); Script item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . UpdateScriptResult \u003e asyncResult = null ; yield return client . UpdateScript ( new Gs2 . Gs2Script . Request . UpdateScriptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithScriptName ( \"script-0001\" ) . WithDescription ( \"description1\" ) . WithScript ( \"result = \\\"hogehoge\\\"\" ) . WithDisableStringNumberToNumber ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . updateScript ( new Gs2Script . UpdateScriptRequest () . withNamespaceName ( \"namespace-0001\" ) . withScriptName ( \"script-0001\" ) . withDescription ( \"description1\" ) . withScript ( \"result = \\\"hogehoge\\\"\" ) . withDisableStringNumberToNumber ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . update_script ( script . UpdateScriptRequest () . with_namespace_name ( 'namespace-0001' ) . with_script_name ( 'script-0001' ) . with_description ( 'description1' ) . with_script ( 'result = \"hogehoge\"' ) . with_disable_string_number_to_number ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.update_script ({ namespaceName = \"namespace-0001\" , scriptName = \"script-0001\" , description = \"description1\" , script = \"result = \\\" hogehoge \\\" \" , disableStringNumberToNumber = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.update_script_async ({ namespaceName = \"namespace-0001\" , scriptName = \"script-0001\" , description = \"description1\" , script = \"result = \\\" hogehoge \\\" \" , disableStringNumberToNumber = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateScriptFromGitHub GitHub를 데이터 소스로 스크립트 갱신 지정된 GitHub 리포지토리에서 최신 소스 코드를 취득하여 기존 스크립트를 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. scriptName string  ~ 128자 스크립트 이름 스크립트 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 checkoutSetting GitHubCheckoutSetting  GitHub에서 소스 코드를 체크아웃하는 설정 disableStringNumberToNumber bool false 문자열-숫자 변환 비활성화 활성화하면 숫자로만 구성된 문자열(예: “12345”)이 자동으로 숫자로 변환되지 않고 문자열로 유지됩니다. 숫자처럼 보여도 문자열 타입으로 유지해야 하는 ID나 코드를 다룰 때 유용합니다. Result 타입 설명 item Script 갱신한 스크립트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . UpdateScriptFromGitHub ( \u0026 script . UpdateScriptFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ScriptName : pointy . String ( \"script-0001\" ), Description : nil , CheckoutSetting : \u0026 script . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/script-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, DisableStringNumberToNumber : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\UpdateScriptFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e updateScriptFromGitHub ( ( new UpdateScriptFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withScriptName ( \"script-0001\" ) -\u003e withDescription ( null ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/script-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) -\u003e withDisableStringNumberToNumber ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.UpdateScriptFromGitHubRequest ; import io.gs2.script.result.UpdateScriptFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { UpdateScriptFromGitHubResult result = client . updateScriptFromGitHub ( new UpdateScriptFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withScriptName ( \"script-0001\" ) . withDescription ( null ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/script-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) . withDisableStringNumberToNumber ( null ) ); Script item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . UpdateScriptFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateScriptFromGitHub ( new Gs2 . Gs2Script . Request . UpdateScriptFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithScriptName ( \"script-0001\" ) . WithDescription ( null ) . WithCheckoutSetting ( new Gs2 . Gs2Script . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/script-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ) . WithDisableStringNumberToNumber ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . updateScriptFromGitHub ( new Gs2Script . UpdateScriptFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withScriptName ( \"script-0001\" ) . withDescription ( null ) . withCheckoutSetting ( new Gs2Script . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/script-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) . withDisableStringNumberToNumber ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . update_script_from_git_hub ( script . UpdateScriptFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_script_name ( 'script-0001' ) . with_description ( None ) . with_checkout_setting ( script . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/script-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) . with_disable_string_number_to_number ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.update_script_from_git_hub ({ namespaceName = \"namespace-0001\" , scriptName = \"script-0001\" , description = nil , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/script-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, disableStringNumberToNumber = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.update_script_from_git_hub_async ({ namespaceName = \"namespace-0001\" , scriptName = \"script-0001\" , description = nil , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/script-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, disableStringNumberToNumber = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteScript 스크립트 삭제 지정된 스크립트를 네임스페이스에서 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. scriptName string  ~ 128자 스크립트 이름 스크립트 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Script 삭제한 스크립트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . DeleteScript ( \u0026 script . DeleteScriptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ScriptName : pointy . String ( \"script-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\DeleteScriptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e deleteScript ( ( new DeleteScriptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withScriptName ( \"script-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.DeleteScriptRequest ; import io.gs2.script.result.DeleteScriptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { DeleteScriptResult result = client . deleteScript ( new DeleteScriptRequest () . withNamespaceName ( \"namespace-0001\" ) . withScriptName ( \"script-0001\" ) ); Script item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . DeleteScriptResult \u003e asyncResult = null ; yield return client . DeleteScript ( new Gs2 . Gs2Script . Request . DeleteScriptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithScriptName ( \"script-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . deleteScript ( new Gs2Script . DeleteScriptRequest () . withNamespaceName ( \"namespace-0001\" ) . withScriptName ( \"script-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . delete_script ( script . DeleteScriptRequest () . with_namespace_name ( 'namespace-0001' ) . with_script_name ( 'script-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.delete_script ({ namespaceName = \"namespace-0001\" , scriptName = \"script-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'script' ) api_result_handler = client.delete_script_async ({ namespaceName = \"namespace-0001\" , scriptName = \"script-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; invokeScript 스크립트 실행 지정된 Lua 스크립트를 제공된 JSON 인수로 동기적으로 실행합니다. 스테이터스 코드, 반환값, 트랜잭션 정보, 난수 상태, 실행 시간, 표준 출력을 포함한 실행 결과를 반환합니다. GS2 서비스 간 원자적 처리를 위한 트랜잭션 처리를 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 scriptId string  ~ 1024자 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN userId string ~ 128자 사용자ID args string “{}” ~ 5242880자 스크립트에 전달되는 인수 (JSON 형식) randomStatus RandomStatus 난수 상태 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 code int 스테이터스 코드 result string 반환값 transaction Transaction 트랜잭션 randomStatus RandomStatus 난수 상태 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transactionResult TransactionResult 트랜잭션 실행 결과 executeTime int 스크립트 실행 시간(밀리초) charged int 비용 계산 대상이 된 시간(초) output List 표준 출력 내용의 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . InvokeScript ( \u0026 script . InvokeScriptRequest { ScriptId : pointy . String ( \"script-0001\" ), UserId : nil , Args : pointy . String ( \"{}\" ), RandomStatus : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } code := result . Code result := result . Result transaction := result . Transaction randomStatus := result . RandomStatus atomicCommit := result . AtomicCommit transactionResult := result . TransactionResult executeTime := result . ExecuteTime charged := result . Charged output := result . Output use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\InvokeScriptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e invokeScript ( ( new InvokeScriptRequest ()) -\u003e withScriptId ( \"script-0001\" ) -\u003e withUserId ( null ) -\u003e withArgs ( \"{}\" ) -\u003e withRandomStatus ( null ) -\u003e withTimeOffsetToken ( null ) ); $code = $result -\u003e getCode (); $result = $result -\u003e getResult (); $transaction = $result -\u003e getTransaction (); $randomStatus = $result -\u003e getRandomStatus (); $atomicCommit = $result -\u003e getAtomicCommit (); $transactionResult = $result -\u003e getTransactionResult (); $executeTime = $result -\u003e getExecuteTime (); $charged = $result -\u003e getCharged (); $output = $result -\u003e getOutput (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.InvokeScriptRequest ; import io.gs2.script.result.InvokeScriptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { InvokeScriptResult result = client . invokeScript ( new InvokeScriptRequest () . withScriptId ( \"script-0001\" ) . withUserId ( null ) . withArgs ( \"{}\" ) . withRandomStatus ( null ) . withTimeOffsetToken ( null ) ); int code = result . getCode (); String result = result . getResult (); Transaction transaction = result . getTransaction (); RandomStatus randomStatus = result . getRandomStatus (); boolean atomicCommit = result . getAtomicCommit (); TransactionResult transactionResult = result . getTransactionResult (); int executeTime = result . getExecuteTime (); int charged = result . getCharged (); List String \u003e output = result . getOutput (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . InvokeScriptResult \u003e asyncResult = null ; yield return client . InvokeScript ( new Gs2 . Gs2Script . Request . InvokeScriptRequest () . WithScriptId ( \"script-0001\" ) . WithUserId ( null ) . WithArgs ( \"{}\" ) . WithRandomStatus ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var code = result . Code ; var result = result . Result ; var transaction = result . Transaction ; var randomStatus = result . RandomStatus ; var atomicCommit = result . AtomicCommit ; var transactionResult = result . TransactionResult ; var executeTime = result . ExecuteTime ; var charged = result . Charged ; var output = result . Output ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . invokeScript ( new Gs2Script . InvokeScriptRequest () . withScriptId ( \"script-0001\" ) . withUserId ( null ) . withArgs ( \"{}\" ) . withRandomStatus ( null ) . withTimeOffsetToken ( null ) ); const code = result . getCode (); const result = result . getResult (); const transaction = result . getTransaction (); const randomStatus = result . getRandomStatus (); const atomicCommit = result . getAtomicCommit (); const transactionResult = result . getTransactionResult (); const executeTime = result . getExecuteTime (); const charged = result . getCharged (); const output = result . getOutput (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . invoke_script ( script . InvokeScriptRequest () . with_script_id ( 'script-0001' ) . with_user_id ( None ) . with_args ( ' {} ' ) . with_random_status ( None ) . with_time_offset_token ( None ) ) code = result . code result = result . result transaction = result . transaction random_status = result . random_status atomic_commit = result . atomic_commit transaction_result = result . transaction_result execute_time = result . execute_time charged = result . charged output = result . output except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.invoke_script ({ scriptId = \"script-0001\" , userId = nil , args = \"{}\" , randomStatus = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result code = result.code ; result = result.result ; transaction = result.transaction ; randomStatus = result.randomStatus ; atomicCommit = result.atomicCommit ; transactionResult = result.transactionResult ; executeTime = result.executeTime ; charged = result.charged ; output = result.output ; client = gs2 ( 'script' ) api_result_handler = client.invoke_script_async ({ scriptId = \"script-0001\" , userId = nil , args = \"{}\" , randomStatus = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result code = result.code ; result = result.result ; transaction = result.transaction ; randomStatus = result.randomStatus ; atomicCommit = result.atomicCommit ; transactionResult = result.transactionResult ; executeTime = result.executeTime ; charged = result.charged ; output = result.output ; debugInvoke 스크립트 실행 디버그 목적으로 사전 스크립트 등록 없이 제공된 Lua 스크립트 코드를 직접 실행합니다. 스크립트의 신속한 테스트와 개발이 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 script string  ~ 5242880자 Lua 스크립트 실행할 Lua 스크립트의 소스 코드입니다. 스크립트에서 GS2 서비스의 데이터에 액세스하여 호출한 서비스의 동작을 변경하는 결과를 반환할 수 있습니다. args string “{}” ~ 5242880자 스크립트에 전달되는 인수 (JSON 형식) userId string ~ 128자 사용자ID randomStatus RandomStatus 난수 상태 disableStringNumberToNumber bool false 문자열-숫자 변환 비활성화 활성화하면 숫자로만 구성된 문자열(예: “12345”)이 자동으로 숫자로 변환되지 않고 문자열로 유지됩니다. 숫자처럼 보여도 문자열 타입으로 유지해야 하는 ID나 코드를 다룰 때 유용합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 code int 스테이터스 코드 result string 반환값 transaction Transaction 트랜잭션 randomStatus RandomStatus 난수 상태 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transactionResult TransactionResult 트랜잭션 실행 결과 executeTime int 스크립트 실행 시간(밀리초) charged int 비용 계산 대상이 된 시간(초) output List 표준 출력 내용의 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/script\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := script . Gs2ScriptRestClient { Session : \u0026 session , } result , err := client . DebugInvoke ( \u0026 script . DebugInvokeRequest { Script : pointy . String ( \"result = \\\"hello\\\"\" ), Args : pointy . String ( \"{}\" ), UserId : nil , RandomStatus : nil , DisableStringNumberToNumber : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } code := result . Code result := result . Result transaction := result . Transaction randomStatus := result . RandomStatus atomicCommit := result . AtomicCommit transactionResult := result . TransactionResult executeTime := result . ExecuteTime charged := result . Charged output := result . Output use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Script\\Gs2ScriptRestClient ; use Gs2\\Script\\Request\\DebugInvokeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ScriptRestClient ( $session ); try { $result = $client -\u003e debugInvoke ( ( new DebugInvokeRequest ()) -\u003e withScript ( \"result = \\\" hello \\\" \" ) -\u003e withArgs ( \"{}\" ) -\u003e withUserId ( null ) -\u003e withRandomStatus ( null ) -\u003e withDisableStringNumberToNumber ( null ) -\u003e withTimeOffsetToken ( null ) ); $code = $result -\u003e getCode (); $result = $result -\u003e getResult (); $transaction = $result -\u003e getTransaction (); $randomStatus = $result -\u003e getRandomStatus (); $atomicCommit = $result -\u003e getAtomicCommit (); $transactionResult = $result -\u003e getTransactionResult (); $executeTime = $result -\u003e getExecuteTime (); $charged = $result -\u003e getCharged (); $output = $result -\u003e getOutput (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.script.rest.Gs2ScriptRestClient ; import io.gs2.script.request.DebugInvokeRequest ; import io.gs2.script.result.DebugInvokeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ScriptRestClient client = new Gs2ScriptRestClient ( session ); try { DebugInvokeResult result = client . debugInvoke ( new DebugInvokeRequest () . withScript ( \"result = \\\"hello\\\"\" ) . withArgs ( \"{}\" ) . withUserId ( null ) . withRandomStatus ( null ) . withDisableStringNumberToNumber ( null ) . withTimeOffsetToken ( null ) ); int code = result . getCode (); String result = result . getResult (); Transaction transaction = result . getTransaction (); RandomStatus randomStatus = result . getRandomStatus (); boolean atomicCommit = result . getAtomicCommit (); TransactionResult transactionResult = result . getTransactionResult (); int executeTime = result . getExecuteTime (); int charged = result . getCharged (); List String \u003e output = result . getOutput (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ScriptRestClient ( session ); AsyncResult Gs2 . Gs2Script . Result . DebugInvokeResult \u003e asyncResult = null ; yield return client . DebugInvoke ( new Gs2 . Gs2Script . Request . DebugInvokeRequest () . WithScript ( \"result = \\\"hello\\\"\" ) . WithArgs ( \"{}\" ) . WithUserId ( null ) . WithRandomStatus ( null ) . WithDisableStringNumberToNumber ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var code = result . Code ; var result = result . Result ; var transaction = result . Transaction ; var randomStatus = result . RandomStatus ; var atomicCommit = result . AtomicCommit ; var transactionResult = result . TransactionResult ; var executeTime = result . ExecuteTime ; var charged = result . Charged ; var output = result . Output ; import Gs2Core from '@/gs2/core' ; import * as Gs2Script from '@/gs2/script' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Script . Gs2ScriptRestClient ( session ); try { const result = await client . debugInvoke ( new Gs2Script . DebugInvokeRequest () . withScript ( \"result = \\\"hello\\\"\" ) . withArgs ( \"{}\" ) . withUserId ( null ) . withRandomStatus ( null ) . withDisableStringNumberToNumber ( null ) . withTimeOffsetToken ( null ) ); const code = result . getCode (); const result = result . getResult (); const transaction = result . getTransaction (); const randomStatus = result . getRandomStatus (); const atomicCommit = result . getAtomicCommit (); const transactionResult = result . getTransactionResult (); const executeTime = result . getExecuteTime (); const charged = result . getCharged (); const output = result . getOutput (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import script session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = script . Gs2ScriptRestClient ( session ) try : result = client . debug_invoke ( script . DebugInvokeRequest () . with_script ( 'result = \"hello\"' ) . with_args ( ' {} ' ) . with_user_id ( None ) . with_random_status ( None ) . with_disable_string_number_to_number ( None ) . with_time_offset_token ( None ) ) code = result . code result = result . result transaction = result . transaction random_status = result . random_status atomic_commit = result . atomic_commit transaction_result = result . transaction_result execute_time = result . execute_time charged = result . charged output = result . output except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'script' ) api_result = client.debug_invoke ({ script = \"result = \\\" hello \\\" \" , args = \"{}\" , userId = nil , randomStatus = nil , disableStringNumberToNumber = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result code = result.code ; result = result.result ; transaction = result.transaction ; randomStatus = result.randomStatus ; atomicCommit = result.atomicCommit ; transactionResult = result.transactionResult ; executeTime = result.executeTime ; charged = result.charged ; output = result.output ; client = gs2 ( 'script' ) api_result_handler = client.debug_invoke_async ({ script = \"result = \\\" hello \\\" \" , args = \"{}\" , userId = nil , randomStatus = nil , disableStringNumberToNumber = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result code = result.code ; result = result.result ; transaction = result.transaction ; randomStatus = result.randomStatus ; atomicCommit = result.atomicCommit ; transactionResult = result.transactionResult ; executeTime = result.executeTime ; charged = result.charged ; output = result.output ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Script SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Script SDK API 레퍼런스","url":"/ko/api_reference/script/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 시즌 레이팅 결과 적용 시 사용되는 트랜잭션 처리 설정입니다. logSetting LogSetting 로그 출력 설정 투표용지 발행, 투표 제출, 레이팅 계산 등 시즌 레이팅 조작에 대한 로그 출력 설정입니다. 설정한 경우, 조작 로그가 지정한 GS2-Log 네임스페이스로 출력됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue에 의한 획득 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAtomicCommit bool false 트랜잭션의 실행을 원자적으로 커밋할지 여부 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 MatchSession 매치 세션 대전마다 투표 컨텍스트를 관리하는 임시 엔티티입니다. 플레이어는 MatchSession으로부터 투표용지를 획득하고 투표를 통해 결과를 확정합니다. TTL(유효 기간)을 가지며, 다수결 성립 또는 기간 만료 시 결과가 확정됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 sessionId string ※ ~ 1024자 세션 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 128자 세션 이름 세션 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 Ballot 투표용지 특정 매치 세션에 대해 각 플레이어에게 발급되는 투표권입니다. 대전 컨텍스트(시즌, 세션, 참가 인원 수)와 플레이어의 사용자 ID를 포함합니다. 투표용지는 서버에 의해 서명되어 플레이어에게 반환되며, 플레이어는 게임 결과를 기입하여 WrittenBallot으로 다시 제출합니다. 투표 집계 시, 모든 참가자의 투표용지를 다수결로 비교하여 결과 조작을 방지합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID seasonName string  ~ 128자 시즌 이름 이 대전의 레이팅 계산에 사용되는 시즌 모델의 이름. 이 대전에 적용되는 티어 구조와 포인트 변동 규칙을 정의하는 SeasonModel을 참조합니다. sessionName string  ~ 128자 세션 이름 이 투표용지가 속한 매치 세션의 이름. 동일한 세션 내의 모든 투표용지는 투표 프로세스에서 함께 집계됩니다. numberOfPlayer int  2 ~ 10 참가 인원 수 이 대전의 총 참가자 수. 투표 완료 여부 판정에 사용됩니다. 결과 확정에는 전체 투표용지의 수집(또는 과반수 성립)이 필요합니다. 유효 범위: 2~10. Vote 투표 상황 시즌 내 특정 매치 세션의 투표 상태를 집계하는 모델입니다. 모든 참가자로부터 WrittenBallot을 수집하여 다수결로 공식 대전 결과를 결정합니다. 제출된 투표용지의 수가 예정된 참가 인원 수에 도달하면 투표 완료로 판정됩니다. 과반수의 투표용지가 결과에 동의하면 결과가 확정되며, 합의에 이르지 못하면 “minority” 오류가 발생합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 voteId string ※ ~ 1024자 투표 상황 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 seasonName string  ~ 128자 시즌 이름 이 투표와 연관된 시즌 모델의 이름. 이 대전의 티어 구조와 포인트 변동 규칙을 정의하는 SeasonModel을 참조합니다. sessionName string  ~ 128자 세션 이름 이 투표가 속한 매치 세션의 이름입니다. 시즌 이름과 조합하여 네임스페이스 내에서 투표를 고유하게 식별합니다. writtenBallots List [] 0 ~ 10 items 작성된 투표용지 목록 대전 참가자로부터 제출된 투표용지 컬렉션입니다. 각 투표용지는 플레이어가 결과를 제출할 때마다 사용자 ID로 추가되거나 치환됩니다. 예정된 모든 플레이어가 제출을 완료하면(또는 세션이 기한 만료되면), 다수결에 의해 투표용지가 집계되어 공식적인 대전 결과가 결정됩니다. 최대 10엔트리(대전당 최대 참가 인원수에 대응). createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SeasonModel 시즌 모델 시즌 기간 동안 적용되는 티어 구조와 포인트 변동 규칙을 정의하는 마스터 데이터입니다. 각 티어별 포인트 변동 범위·참가료·랭크업 보너스를 설정하고, 포인트 관리에 사용할 Experience 모델을 지정합니다. 실제 포인트 및 티어의 사용자 데이터는 GS2-Experience에 의해 관리됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tiers List  1 ~ 100 items 티어 모델 목록 시즌의 랭킹 사다리를 구성하는 티어 정의의 순서가 있는 목록. 각 티어는 고유한 포인트 변동 규칙(참가료, 최소/최대 변동량, 승급 보너스)을 정의합니다. 플레이어는 GS2-Experience에서 관리되는 누적 포인트에 따라 티어를 진행합니다. 최소 1개 티어, 최대 100개 티어. experienceModelId string  ~ 1024자 경험치 모델 ID 시즌 포인트와 티어 진행 관리에 사용되는 GS2-Experience 경험치 모델의 GRN. 경험치 모델의 랭크 임계값이 티어 경계를 결정하며, 경험치 값은 플레이어의 현재 시즌 포인트를 나타냅니다. 대전 결과에 따른 포인트 변동은 이 경험치 모델에 적용됩니다. challengePeriodEventId string ~ 1024자 챌린지 기간 이벤트 ID 시즌이 대전 가능한 기간을 정의하는 GS2-Schedule 이벤트의 GRN. 설정한 경우, 참조된 이벤트가 활성 상태인 동안에만 플레이어가 대전에 참가할 수 있습니다. 설정하지 않은 경우, 시즌에 기간 제한이 없습니다. TierModel 티어 모델 티어 모델은 시즌 내 각 티어의 포인트 변동 규칙을 정의하는 모델입니다. 순위에 따른 포인트 변동 범위, 참가료, 승급 시 보너스를 설정합니다. 포인트의 실제 데이터는 GS2-Experience에 의해 관리되지만, 그 증감 로직은 TierModel의 설정에 따라 결정됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. raiseRankBonus int  0 ~ 10000 랭크 승급 보너스 플레이어가 이 티어로 승급했을 때 가산되는 보너스 포인트로, 즉각적인 강등을 방지하는 완충 역할을 합니다. 예를 들어 100으로 설정하면, 승급 기준점보다 100포인트 많은 상태로 새 티어를 시작합니다. 유효 범위: 0~10000. entryFee int  0 ~ 10000 참가료 대전 시작 전 플레이어로부터 차감되는 참가 비용으로서의 포인트. 이 참가료는 대전 결과와 관계없이 항상 차감되며, 경쟁 플레이에 리스크 요소를 만듭니다. 유효 범위: 0~10000. minimumChangePoint int  -99999999 ~ -1 최소 변동 포인트 한 번의 대전 결과로 발생할 수 있는 최소(가장 음수인) 포인트 변동량으로, 일반적으로 최악의 패배 시 값을 나타냅니다. 음수 값이어야 합니다. 패배한 플레이어의 실제 포인트 변동은 이 값과 0 사이가 됩니다. 유효 범위: -99999999~-1. maximumChangePoint int  1 ~ 99999999 최대 변동 포인트 한 번의 대전 결과로 발생할 수 있는 최대(가장 양수인) 포인트 변동량으로, 일반적으로 최고의 승리 시 값을 나타냅니다. 양수 값이어야 합니다. 승리한 플레이어의 실제 포인트 변동은 0과 이 값 사이가 됩니다. 유효 범위: 1~99999999. VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 GameResult 대전 결과 대전에서 한 플레이어의 결과를 나타내는 모델입니다. 플레이어의 사용자 ID와 순위를 보유합니다. WrittenBallot 내에서 모든 참가자의 결과를 보고하는 데 사용됩니다. 투표 집계 시, 제출된 모든 투표용지의 대전 결과를 다수결로 비교하여 공식 결과를 결정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 rank int  0 ~ 2147483646 순위 대전에서 이 플레이어의 최종 순위. 1은 1위(승자)를 나타냅니다. 순위 값은 TierModel의 설정에 따라 포인트 변동량을 결정하는 데 사용됩니다. userId string  ~ 128자 사용자ID SignedBallot 서명된 투표용지 GS2-Key를 사용하여 서버가 암호 서명한 투표용지입니다. 서명을 통해 투표용지의 내용(시즌, 세션, 플레이어, 참가 인원 수)이 변조되지 않았음을 보장합니다. 투표 제출 시, 서버 측에서 서명된 투표용지를 검증한 후 게임 결과가 수락됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 body string  ~ 1024자 서명 대상 데이터 서명 대상이 되는 투표용지 데이터의 직렬화된 JSON 표현. 투표용지의 내용(사용자 ID, 시즌 이름, 세션 이름, 참가 인원 수)을 서명과 대조할 수 있는 형식으로 포함합니다. 최대 1024자. signature string  ~ 256자 서명 투표용지 본문에 대해 GS2-Key가 생성한 암호 서명. 투표용지가 서버에 의해 발급되었으며 클라이언트에 의해 변경되지 않았음을 검증하는 데 사용됩니다. Base64 인코딩, 최대 256자. WrittenBallot 기재 완료 투표용지 대전 결과를 기입한 투표용지를 나타내는 데이터 모델입니다. 사용자 ID와 순위를 포함한 투표 내용을 보유하며, 서명이 첨부된 상태로 Vote API에 전달됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 ballot Ballot  투표용지 이 대전에서 플레이어에게 발급된 원본 투표용지. 대전 컨텍스트(시즌, 세션, 플레이어 ID, 참가 인원 수)를 포함하며, 집계 시 투표자를 식별하는 데 사용됩니다. gameResults List 0 ~ 10 items 대전 결과 목록 이 플레이어가 보고한 게임 결과로, 대전의 참가자마다 1개의 엔트리로 구성됩니다. 각 엔트리에는 사용자 ID와 순위가 포함됩니다. 목록 내 사용자 ID는 고유해야 합니다(child_unique 제약으로 강제됨). 투표 집계 시, 결과는 사용자 ID로 정렬되어 제출된 모든 투표용지 간에 비교되어 다수결을 취합니다. 최대 10개 엔트리. CurrentSeasonModelMaster 현재 활성화된 시즌 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한, 시즌 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-SeasonRating 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 SeasonModelMaster 시즌 모델 마스터 시즌 모델 마스터는 게임 내에서 사용되는 시즌 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 시즌 모델로 반영됩니다. 시즌 모델은 시즌 기간 중에 적용되는 티어 구조와 포인트 변동 규칙을 정의하는 마스터 데이터입니다. 티어별 변동 범위·참가비·랭크업 보너스를 설정하고, 포인트 관리에 사용할 Experience 모델을 지정합니다. 실제 포인트 및 티어의 사용자 데이터는 GS2-Experience에 의해 관리됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 tiers List  1 ~ 100 items 티어 모델 목록 시즌의 랭킹 사다리를 구성하는 티어 정의의 순서가 있는 목록. 각 티어는 고유한 포인트 변동 규칙(참가료, 최소/최대 변동량, 승급 보너스)을 정의합니다. 플레이어는 GS2-Experience에서 관리되는 누적 포인트에 따라 티어를 진행합니다. 최소 1개 티어, 최대 100개 티어. experienceModelId string  ~ 1024자 경험치 모델 ID 시즌 포인트와 티어 진행 관리에 사용되는 GS2-Experience 경험치 모델의 GRN. 경험치 모델의 랭크 임계값이 티어 경계를 결정하며, 경험치 값은 플레이어의 현재 시즌 포인트를 나타냅니다. 대전 결과에 따른 포인트 변동은 이 경험치 모델에 적용됩니다. challengePeriodEventId string ~ 1024자 챌린지 기간 이벤트 ID 시즌이 대전 가능한 기간을 정의하는 GS2-Schedule 이벤트의 GRN. 설정한 경우, 참조된 이벤트가 활성 상태인 동안에만 플레이어가 대전에 참가할 수 있습니다. 설정하지 않은 경우, 시즌에 기간 제한이 없습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 season_rating . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.DescribeNamespacesRequest ; import io.gs2.seasonRating.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2SeasonRating . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2SeasonRating . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . describe_namespaces ( season_rating . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'season_rating' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 시즌 레이팅 결과 적용 시 사용되는 트랜잭션 처리 설정입니다. logSetting LogSetting 로그 출력 설정 투표용지 발행, 투표 제출, 레이팅 계산 등 시즌 레이팅 조작에 대한 로그 출력 설정입니다. 설정한 경우, 조작 로그가 지정한 GS2-Log 네임스페이스로 출력됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 season_rating . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , LogSetting : \u0026 seasonRating . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\SeasonRating\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.CreateNamespaceRequest ; import io.gs2.seasonRating.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . seasonRating . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2SeasonRating . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2SeasonRating . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . createNamespace ( new Gs2SeasonRating . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2SeasonRating . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . create_namespace ( season_rating . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_log_setting ( season_rating . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 season_rating . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetNamespaceStatusRequest ; import io.gs2.seasonRating.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2SeasonRating . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2SeasonRating . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_namespace_status ( season_rating . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 season_rating . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetNamespaceRequest ; import io.gs2.seasonRating.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2SeasonRating . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getNamespace ( new Gs2SeasonRating . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_namespace ( season_rating . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 시즌 레이팅 결과 적용 시 사용되는 트랜잭션 처리 설정입니다. logSetting LogSetting 로그 출력 설정 투표용지 발행, 투표 제출, 레이팅 계산 등 시즌 레이팅 조작에 대한 로그 출력 설정입니다. 설정한 경우, 조작 로그가 지정한 GS2-Log 네임스페이스로 출력됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 season_rating . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , LogSetting : \u0026 seasonRating . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\SeasonRating\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.UpdateNamespaceRequest ; import io.gs2.seasonRating.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . seasonRating . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2SeasonRating . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2SeasonRating . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2SeasonRating . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2SeasonRating . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . update_namespace ( season_rating . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_log_setting ( season_rating . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 season_rating . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.DeleteNamespaceRequest ; import io.gs2.seasonRating.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2SeasonRating . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2SeasonRating . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . delete_namespace ( season_rating . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 season_rating . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetServiceVersionRequest ; import io.gs2.seasonRating.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2SeasonRating . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2SeasonRating . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_service_version ( season_rating . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 season_rating . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.DumpUserDataByUserIdRequest ; import io.gs2.seasonRating.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2SeasonRating . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2SeasonRating . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . dump_user_data_by_user_id ( season_rating . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'season_rating' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 season_rating . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.seasonRating.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2SeasonRating . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2SeasonRating . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( season_rating . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'season_rating' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 season_rating . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.CleanUserDataByUserIdRequest ; import io.gs2.seasonRating.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2SeasonRating . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2SeasonRating . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . clean_user_data_by_user_id ( season_rating . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'season_rating' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 season_rating . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.seasonRating.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2SeasonRating . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2SeasonRating . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( season_rating . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'season_rating' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 season_rating . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.seasonRating.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2SeasonRating . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2SeasonRating . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( season_rating . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'season_rating' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 season_rating . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.ImportUserDataByUserIdRequest ; import io.gs2.seasonRating.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2SeasonRating . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2SeasonRating . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . import_user_data_by_user_id ( season_rating . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'season_rating' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 season_rating . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.CheckImportUserDataByUserIdRequest ; import io.gs2.seasonRating.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2SeasonRating . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2SeasonRating . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( season_rating . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'season_rating' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeMatchSessions 매치 세션 목록을 가져오기 네임스페이스 내 매치 세션의 페이지네이션 목록을 가져옵니다. 매치 세션은 개별 대전을 나타내며, 레이팅 계산을 위해 플레이어를 그룹화하는 데 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 세션 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . DescribeMatchSessions ( \u0026 season_rating . DescribeMatchSessionsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\DescribeMatchSessionsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e describeMatchSessions ( ( new DescribeMatchSessionsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.DescribeMatchSessionsRequest ; import io.gs2.seasonRating.result.DescribeMatchSessionsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { DescribeMatchSessionsResult result = client . describeMatchSessions ( new DescribeMatchSessionsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List MatchSession \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . DescribeMatchSessionsResult \u003e asyncResult = null ; yield return client . DescribeMatchSessions ( new Gs2 . Gs2SeasonRating . Request . DescribeMatchSessionsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . describeMatchSessions ( new Gs2SeasonRating . DescribeMatchSessionsRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . describe_match_sessions ( season_rating . DescribeMatchSessionsRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.describe_match_sessions ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'season_rating' ) api_result_handler = client.describe_match_sessions_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createMatchSession 세션을 생성 세션을 생성하면 세션 ID가 발급됩니다. 대전 결과 보고를 전송하려면 세션 ID가 필요하며, 세션 ID를 지정하여 보고를 전송함으로써 해당 세션에 대한 보고를 전송할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. sessionName string UUID ~ 128자 세션 이름 세션 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. ttlSeconds int 60 60 ~ 7200 세션의 유효 기간(초) Result 타입 설명 item MatchSession 생성한 세션 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . CreateMatchSession ( \u0026 season_rating . CreateMatchSessionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SessionName : pointy . String ( \"matchSession-0001\" ), TtlSeconds : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\CreateMatchSessionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e createMatchSession ( ( new CreateMatchSessionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSessionName ( \"matchSession-0001\" ) -\u003e withTtlSeconds ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.CreateMatchSessionRequest ; import io.gs2.seasonRating.result.CreateMatchSessionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { CreateMatchSessionResult result = client . createMatchSession ( new CreateMatchSessionRequest () . withNamespaceName ( \"namespace-0001\" ) . withSessionName ( \"matchSession-0001\" ) . withTtlSeconds ( null ) ); MatchSession item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . CreateMatchSessionResult \u003e asyncResult = null ; yield return client . CreateMatchSession ( new Gs2 . Gs2SeasonRating . Request . CreateMatchSessionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSessionName ( \"matchSession-0001\" ) . WithTtlSeconds ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . createMatchSession ( new Gs2SeasonRating . CreateMatchSessionRequest () . withNamespaceName ( \"namespace-0001\" ) . withSessionName ( \"matchSession-0001\" ) . withTtlSeconds ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . create_match_session ( season_rating . CreateMatchSessionRequest () . with_namespace_name ( 'namespace-0001' ) . with_session_name ( 'matchSession-0001' ) . with_ttl_seconds ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.create_match_session ({ namespaceName = \"namespace-0001\" , sessionName = \"matchSession-0001\" , ttlSeconds = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.create_match_session_async ({ namespaceName = \"namespace-0001\" , sessionName = \"matchSession-0001\" , ttlSeconds = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMatchSession 세션을 가져오기 이름과 TTL 정보를 포함한, 지정된 매치 세션을 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. sessionName string  UUID ~ 128자 세션 이름 세션 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item MatchSession 세션 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetMatchSession ( \u0026 season_rating . GetMatchSessionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SessionName : pointy . String ( \"matchSession-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetMatchSessionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getMatchSession ( ( new GetMatchSessionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSessionName ( \"matchSession-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetMatchSessionRequest ; import io.gs2.seasonRating.result.GetMatchSessionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetMatchSessionResult result = client . getMatchSession ( new GetMatchSessionRequest () . withNamespaceName ( \"namespace-0001\" ) . withSessionName ( \"matchSession-0001\" ) ); MatchSession item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetMatchSessionResult \u003e asyncResult = null ; yield return client . GetMatchSession ( new Gs2 . Gs2SeasonRating . Request . GetMatchSessionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSessionName ( \"matchSession-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getMatchSession ( new Gs2SeasonRating . GetMatchSessionRequest () . withNamespaceName ( \"namespace-0001\" ) . withSessionName ( \"matchSession-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_match_session ( season_rating . GetMatchSessionRequest () . with_namespace_name ( 'namespace-0001' ) . with_session_name ( 'matchSession-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_match_session ({ namespaceName = \"namespace-0001\" , sessionName = \"matchSession-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_match_session_async ({ namespaceName = \"namespace-0001\" , sessionName = \"matchSession-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMatchSession 세션을 삭제 지정된 매치 세션을 삭제합니다. 세션과 관련된 보류 중인 투표도 함께 무효화됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. sessionName string  UUID ~ 128자 세션 이름 세션 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item MatchSession 삭제한 세션 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . DeleteMatchSession ( \u0026 season_rating . DeleteMatchSessionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SessionName : pointy . String ( \"matchSession-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\DeleteMatchSessionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e deleteMatchSession ( ( new DeleteMatchSessionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSessionName ( \"matchSession-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.DeleteMatchSessionRequest ; import io.gs2.seasonRating.result.DeleteMatchSessionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { DeleteMatchSessionResult result = client . deleteMatchSession ( new DeleteMatchSessionRequest () . withNamespaceName ( \"namespace-0001\" ) . withSessionName ( \"matchSession-0001\" ) ); MatchSession item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . DeleteMatchSessionResult \u003e asyncResult = null ; yield return client . DeleteMatchSession ( new Gs2 . Gs2SeasonRating . Request . DeleteMatchSessionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSessionName ( \"matchSession-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . deleteMatchSession ( new Gs2SeasonRating . DeleteMatchSessionRequest () . withNamespaceName ( \"namespace-0001\" ) . withSessionName ( \"matchSession-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . delete_match_session ( season_rating . DeleteMatchSessionRequest () . with_namespace_name ( 'namespace-0001' ) . with_session_name ( 'matchSession-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.delete_match_session ({ namespaceName = \"namespace-0001\" , sessionName = \"matchSession-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.delete_match_session_async ({ namespaceName = \"namespace-0001\" , sessionName = \"matchSession-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getBallot 서명과 함께 투표 용지를 작성 매치 세션의 레이팅 투표에 참가하기 위해, 요청한 사용자의 투표 용지를 발급합니다. 플레이어가 시즌의 도전 기간 내에 있는지 검증하고, 설정된 참가 비용을 플레이어의 레이팅에서 차감하며, 지정된 암호화 키를 사용하여 서명된 투표 용지를 생성합니다. 서명된 투표 용지는 vote 또는 voteMultiple 전송 시 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. sessionName string  UUID ~ 128자 세션 이름 세션 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 numberOfPlayer int  2 ~ 10 참가 인원 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Ballot 투표용지 body string 서명 대상 데이터 signature string 서명 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetBallot ( \u0026 season_rating . GetBallotRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), SessionName : pointy . String ( \"gathering-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), NumberOfPlayer : pointy . Int32 ( 4 ), KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetBallotRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getBallot ( ( new GetBallotRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSessionName ( \"gathering-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withNumberOfPlayer ( 4 ) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetBallotRequest ; import io.gs2.seasonRating.result.GetBallotResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetBallotResult result = client . getBallot ( new GetBallotRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSessionName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withNumberOfPlayer ( 4 ) . withKeyId ( \"key-0001\" ) ); Ballot item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetBallotResult \u003e asyncResult = null ; yield return client . GetBallot ( new Gs2 . Gs2SeasonRating . Request . GetBallotRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSessionName ( \"gathering-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithNumberOfPlayer ( 4 ) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getBallot ( new Gs2SeasonRating . GetBallotRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSessionName ( \"gathering-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withNumberOfPlayer ( 4 ) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_ballot ( season_rating . GetBallotRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_session_name ( 'gathering-0001' ) . with_access_token ( 'accessToken-0001' ) . with_number_of_player ( 4 ) . with_key_id ( 'key-0001' ) ) item = result . item body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_ballot ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , sessionName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , numberOfPlayer = 4 , keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_ballot_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , sessionName = \"gathering-0001\" , accessToken = \"accessToken-0001\" , numberOfPlayer = 4 , keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; getBallotByUserId 사용자 ID를 지정하여 서명과 함께 투표 용지를 작성 지정한 사용자가 매치 세션의 레이팅 투표에 참가하기 위한 투표 용지를 발급합니다. 도전 기간 검증, 참가 비용 차감, 지정된 암호화 키를 사용한 서명된 투표 용지 생성을 수행합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. sessionName string  UUID ~ 128자 세션 이름 세션 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID numberOfPlayer int  2 ~ 10 참가 인원 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Ballot 투표용지 body string 서명 대상 데이터 signature string 서명 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetBallotByUserId ( \u0026 season_rating . GetBallotByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"season-0001\" ), SessionName : pointy . String ( \"gathering-0001\" ), UserId : pointy . String ( \"user-0001\" ), NumberOfPlayer : pointy . Int32 ( 4 ), KeyId : pointy . String ( \"key-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetBallotByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getBallotByUserId ( ( new GetBallotByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"season-0001\" ) -\u003e withSessionName ( \"gathering-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withNumberOfPlayer ( 4 ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetBallotByUserIdRequest ; import io.gs2.seasonRating.result.GetBallotByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetBallotByUserIdResult result = client . getBallotByUserId ( new GetBallotByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSessionName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withNumberOfPlayer ( 4 ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); Ballot item = result . getItem (); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetBallotByUserIdResult \u003e asyncResult = null ; yield return client . GetBallotByUserId ( new Gs2 . Gs2SeasonRating . Request . GetBallotByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"season-0001\" ) . WithSessionName ( \"gathering-0001\" ) . WithUserId ( \"user-0001\" ) . WithNumberOfPlayer ( 4 ) . WithKeyId ( \"key-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getBallotByUserId ( new Gs2SeasonRating . GetBallotByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"season-0001\" ) . withSessionName ( \"gathering-0001\" ) . withUserId ( \"user-0001\" ) . withNumberOfPlayer ( 4 ) . withKeyId ( \"key-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_ballot_by_user_id ( season_rating . GetBallotByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'season-0001' ) . with_session_name ( 'gathering-0001' ) . with_user_id ( 'user-0001' ) . with_number_of_player ( 4 ) . with_key_id ( 'key-0001' ) . with_time_offset_token ( None ) ) item = result . item body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_ballot_by_user_id ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , sessionName = \"gathering-0001\" , userId = \"user-0001\" , numberOfPlayer = 4 , keyId = \"key-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_ballot_by_user_id_async ({ namespaceName = \"namespace-0001\" , seasonName = \"season-0001\" , sessionName = \"gathering-0001\" , userId = \"user-0001\" , numberOfPlayer = 4 , keyId = \"key-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; body = result.body ; signature = result.signature ; vote 대전 결과를 투표 투표는 첫 투표가 이루어진 후 5분 이내에 진행해야 합니다. 즉, 결과는 즉시 반영되지 않고 투표 시작으로부터 약 5분 후 또는 모든 플레이어가 투표를 마쳤을 때 반영됩니다. 5분 이내에 모든 투표 용지를 회수하지 못한 경우에는 그 시점까지의 투표 내용으로 다수결을 통해 결과를 결정합니다. 결과를 즉시 반영하고 싶은 경우, 승리한 쪽의 대표 플레이어가 각 플레이어로부터 투표 용지를 모아 voteMultiple 을 호출함으로써 결과를 즉시 반영할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ballotBody string  ~ 1024자 투표용지의 서명 대상 데이터 ballotSignature string  ~ 256자 투표용지의 서명 gameResults List 0 ~ 10 items 대전 결과 대전을 진행한 플레이어 그룹에 속한 사용자 ID 목록 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Ballot 투표용지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . Vote ( \u0026 season_rating . VoteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), BallotBody : pointy . String ( \"ballotBody...\" ), BallotSignature : pointy . String ( \"ballotSignature...\" ), GameResults : [] seasonRating . GameResult { seasonRating . GameResult { Rank : pointy . Int32 ( 1 ), UserId : pointy . String ( \"user-0001\" ), }, seasonRating . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0002\" ), }, seasonRating . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0003\" ), }, seasonRating . GameResult { Rank : pointy . Int32 ( 3 ), UserId : pointy . String ( \"user-0004\" ), }, }, KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\VoteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e vote ( ( new VoteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withBallotBody ( \"ballotBody...\" ) -\u003e withBallotSignature ( \"ballotSignature...\" ) -\u003e withGameResults ([ ( new GameResult ()) -\u003e withRank ( 1 ) -\u003e withUserId ( \"user-0001\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0002\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0003\" ), ( new GameResult ()) -\u003e withRank ( 3 ) -\u003e withUserId ( \"user-0004\" ), ]) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.VoteRequest ; import io.gs2.seasonRating.result.VoteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { VoteResult result = client . vote ( new VoteRequest () . withNamespaceName ( \"namespace-0001\" ) . withBallotBody ( \"ballotBody...\" ) . withBallotSignature ( \"ballotSignature...\" ) . withGameResults ( Arrays . asList ( new GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ) )) . withKeyId ( \"key-0001\" ) ); Ballot item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . VoteResult \u003e asyncResult = null ; yield return client . Vote ( new Gs2 . Gs2SeasonRating . Request . VoteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithBallotBody ( \"ballotBody...\" ) . WithBallotSignature ( \"ballotSignature...\" ) . WithGameResults ( new Gs2 . Gs2SeasonRating . Model . GameResult [] { new Gs2 . Gs2SeasonRating . Model . GameResult () . WithRank ( 1 ) . WithUserId ( \"user-0001\" ), new Gs2 . Gs2SeasonRating . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0002\" ), new Gs2 . Gs2SeasonRating . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0003\" ), new Gs2 . Gs2SeasonRating . Model . GameResult () . WithRank ( 3 ) . WithUserId ( \"user-0004\" ), }) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . vote ( new Gs2SeasonRating . VoteRequest () . withNamespaceName ( \"namespace-0001\" ) . withBallotBody ( \"ballotBody...\" ) . withBallotSignature ( \"ballotSignature...\" ) . withGameResults ([ new Gs2SeasonRating . model . GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new Gs2SeasonRating . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new Gs2SeasonRating . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new Gs2SeasonRating . model . GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ), ]) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . vote ( season_rating . VoteRequest () . with_namespace_name ( 'namespace-0001' ) . with_ballot_body ( 'ballotBody...' ) . with_ballot_signature ( 'ballotSignature...' ) . with_game_results ([ season_rating . GameResult () . with_rank ( 1 ) . with_user_id ( 'user-0001' ), season_rating . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0002' ), season_rating . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0003' ), season_rating . GameResult () . with_rank ( 3 ) . with_user_id ( 'user-0004' ), ]) . with_key_id ( 'key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.vote ({ namespaceName = \"namespace-0001\" , ballotBody = \"ballotBody...\" , ballotSignature = \"ballotSignature...\" , gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.vote_async ({ namespaceName = \"namespace-0001\" , ballotBody = \"ballotBody...\" , ballotSignature = \"ballotSignature...\" , gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; voteMultiple 대전 결과를 일괄 투표 게임에서 승리한 측이 다른 플레이어들의 투표용지를 모아 일괄로 투표할 때 사용합니다. ‘승리한 측’이라고 표현한 이유는, 패배한 측이 자신들이 이긴 것으로 보고할 유인은 있지만 그 반대는 없기 때문입니다. 패배한 측이 투표용지를 건네지 않을 가능성이 있지만, 그 경우에도 과반수의 투표용지만 있으면 결과를 통과시킬 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. signedBallots List 0 ~ 10 items 서명이 첨부된 투표용지 리스트 gameResults List 0 ~ 10 items 투표 내용. 대전을 진행한 플레이어 그룹 1에 속한 사용자 ID 리스트 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Result 타입 설명 item Ballot 투표용지 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . VoteMultiple ( \u0026 season_rating . VoteMultipleRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SignedBallots : [] seasonRating . SignedBallot { seasonRating . SignedBallot { Body : pointy . String ( \"aaa\" ), Signature : pointy . String ( \"bbb\" ), }, seasonRating . SignedBallot { Body : pointy . String ( \"aaa\" ), Signature : pointy . String ( \"bbb\" ), }, seasonRating . SignedBallot { Body : pointy . String ( \"aaa\" ), Signature : pointy . String ( \"bbb\" ), }, seasonRating . SignedBallot { Body : pointy . String ( \"aaa\" ), Signature : pointy . String ( \"bbb\" ), }, }, GameResults : [] seasonRating . GameResult { seasonRating . GameResult { Rank : pointy . Int32 ( 1 ), UserId : pointy . String ( \"user-0001\" ), }, seasonRating . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0002\" ), }, seasonRating . GameResult { Rank : pointy . Int32 ( 2 ), UserId : pointy . String ( \"user-0003\" ), }, seasonRating . GameResult { Rank : pointy . Int32 ( 3 ), UserId : pointy . String ( \"user-0004\" ), }, }, KeyId : pointy . String ( \"key-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\VoteMultipleRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e voteMultiple ( ( new VoteMultipleRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSignedBallots ([ ( new SignedBallot ()) -\u003e withBody ( \"aaa\" ) -\u003e withSignature ( \"bbb\" ), ( new SignedBallot ()) -\u003e withBody ( \"aaa\" ) -\u003e withSignature ( \"bbb\" ), ( new SignedBallot ()) -\u003e withBody ( \"aaa\" ) -\u003e withSignature ( \"bbb\" ), ( new SignedBallot ()) -\u003e withBody ( \"aaa\" ) -\u003e withSignature ( \"bbb\" ), ]) -\u003e withGameResults ([ ( new GameResult ()) -\u003e withRank ( 1 ) -\u003e withUserId ( \"user-0001\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0002\" ), ( new GameResult ()) -\u003e withRank ( 2 ) -\u003e withUserId ( \"user-0003\" ), ( new GameResult ()) -\u003e withRank ( 3 ) -\u003e withUserId ( \"user-0004\" ), ]) -\u003e withKeyId ( \"key-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.VoteMultipleRequest ; import io.gs2.seasonRating.result.VoteMultipleResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { VoteMultipleResult result = client . voteMultiple ( new VoteMultipleRequest () . withNamespaceName ( \"namespace-0001\" ) . withSignedBallots ( Arrays . asList ( new SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ) )) . withGameResults ( Arrays . asList ( new GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ) )) . withKeyId ( \"key-0001\" ) ); Ballot item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . VoteMultipleResult \u003e asyncResult = null ; yield return client . VoteMultiple ( new Gs2 . Gs2SeasonRating . Request . VoteMultipleRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSignedBallots ( new Gs2 . Gs2SeasonRating . Model . SignedBallot [] { new Gs2 . Gs2SeasonRating . Model . SignedBallot () . WithBody ( \"aaa\" ) . WithSignature ( \"bbb\" ), new Gs2 . Gs2SeasonRating . Model . SignedBallot () . WithBody ( \"aaa\" ) . WithSignature ( \"bbb\" ), new Gs2 . Gs2SeasonRating . Model . SignedBallot () . WithBody ( \"aaa\" ) . WithSignature ( \"bbb\" ), new Gs2 . Gs2SeasonRating . Model . SignedBallot () . WithBody ( \"aaa\" ) . WithSignature ( \"bbb\" ), }) . WithGameResults ( new Gs2 . Gs2SeasonRating . Model . GameResult [] { new Gs2 . Gs2SeasonRating . Model . GameResult () . WithRank ( 1 ) . WithUserId ( \"user-0001\" ), new Gs2 . Gs2SeasonRating . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0002\" ), new Gs2 . Gs2SeasonRating . Model . GameResult () . WithRank ( 2 ) . WithUserId ( \"user-0003\" ), new Gs2 . Gs2SeasonRating . Model . GameResult () . WithRank ( 3 ) . WithUserId ( \"user-0004\" ), }) . WithKeyId ( \"key-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . voteMultiple ( new Gs2SeasonRating . VoteMultipleRequest () . withNamespaceName ( \"namespace-0001\" ) . withSignedBallots ([ new Gs2SeasonRating . model . SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new Gs2SeasonRating . model . SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new Gs2SeasonRating . model . SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), new Gs2SeasonRating . model . SignedBallot () . withBody ( \"aaa\" ) . withSignature ( \"bbb\" ), ]) . withGameResults ([ new Gs2SeasonRating . model . GameResult () . withRank ( 1 ) . withUserId ( \"user-0001\" ), new Gs2SeasonRating . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0002\" ), new Gs2SeasonRating . model . GameResult () . withRank ( 2 ) . withUserId ( \"user-0003\" ), new Gs2SeasonRating . model . GameResult () . withRank ( 3 ) . withUserId ( \"user-0004\" ), ]) . withKeyId ( \"key-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . vote_multiple ( season_rating . VoteMultipleRequest () . with_namespace_name ( 'namespace-0001' ) . with_signed_ballots ([ season_rating . SignedBallot () . with_body ( 'aaa' ) . with_signature ( 'bbb' ), season_rating . SignedBallot () . with_body ( 'aaa' ) . with_signature ( 'bbb' ), season_rating . SignedBallot () . with_body ( 'aaa' ) . with_signature ( 'bbb' ), season_rating . SignedBallot () . with_body ( 'aaa' ) . with_signature ( 'bbb' ), ]) . with_game_results ([ season_rating . GameResult () . with_rank ( 1 ) . with_user_id ( 'user-0001' ), season_rating . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0002' ), season_rating . GameResult () . with_rank ( 2 ) . with_user_id ( 'user-0003' ), season_rating . GameResult () . with_rank ( 3 ) . with_user_id ( 'user-0004' ), ]) . with_key_id ( 'key-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.vote_multiple ({ namespaceName = \"namespace-0001\" , signedBallots = { { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , } }, gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, keyId = \"key-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.vote_multiple_async ({ namespaceName = \"namespace-0001\" , signedBallots = { { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , }, { body = \"aaa\" , signature = \"bbb\" , } }, gameResults = { { rank = 1 , user_id = \"user-0001\" , }, { rank = 2 , user_id = \"user-0002\" , }, { rank = 2 , user_id = \"user-0003\" , }, { rank = 3 , user_id = \"user-0004\" , } }, keyId = \"key-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; commitVote 투표 상황을 강제 확정 모든 투표가 모일 때까지 기다리지 않고, 매치 세션의 레이팅 계산을 수동으로 트리거합니다. 보류 중인 투표를 처리하고, 현재 투표 상태를 바탕으로 레이팅 변경을 계산하며, 처리 후 투표 레코드와 매치 세션을 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. sessionName string  ~ 128자 세션 이름 이 투표가 속한 매치 세션의 이름입니다. 시즌 이름과 조합하여 네임스페이스 내에서 투표를 고유하게 식별합니다. Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . CommitVote ( \u0026 season_rating . CommitVoteRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"rating-0001\" ), SessionName : pointy . String ( \"gathering-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\CommitVoteRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e commitVote ( ( new CommitVoteRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"rating-0001\" ) -\u003e withSessionName ( \"gathering-0001\" ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.CommitVoteRequest ; import io.gs2.seasonRating.result.CommitVoteResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { CommitVoteResult result = client . commitVote ( new CommitVoteRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"rating-0001\" ) . withSessionName ( \"gathering-0001\" ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . CommitVoteResult \u003e asyncResult = null ; yield return client . CommitVote ( new Gs2 . Gs2SeasonRating . Request . CommitVoteRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"rating-0001\" ) . WithSessionName ( \"gathering-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . commitVote ( new Gs2SeasonRating . CommitVoteRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"rating-0001\" ) . withSessionName ( \"gathering-0001\" ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . commit_vote ( season_rating . CommitVoteRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'rating-0001' ) . with_session_name ( 'gathering-0001' ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.commit_vote ({ namespaceName = \"namespace-0001\" , seasonName = \"rating-0001\" , sessionName = \"gathering-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'season_rating' ) api_result_handler = client.commit_vote_async ({ namespaceName = \"namespace-0001\" , seasonName = \"rating-0001\" , sessionName = \"gathering-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result describeSeasonModels 시즌 모델 목록을 가져오기 현재 활성화된 시즌 모델의 목록을 가져옵니다. 시즌 모델은 시즌 레이팅 계산을 위한 레이팅 티어, 경험치 모델 참조, 도전 기간 이벤트를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 시즌 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . DescribeSeasonModels ( \u0026 season_rating . DescribeSeasonModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\DescribeSeasonModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e describeSeasonModels ( ( new DescribeSeasonModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.DescribeSeasonModelsRequest ; import io.gs2.seasonRating.result.DescribeSeasonModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { DescribeSeasonModelsResult result = client . describeSeasonModels ( new DescribeSeasonModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List SeasonModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . DescribeSeasonModelsResult \u003e asyncResult = null ; yield return client . DescribeSeasonModels ( new Gs2 . Gs2SeasonRating . Request . DescribeSeasonModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . describeSeasonModels ( new Gs2SeasonRating . DescribeSeasonModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . describe_season_models ( season_rating . DescribeSeasonModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.describe_season_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'season_rating' ) api_result_handler = client.describe_season_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getSeasonModel 시즌 모델을 가져오기 레이팅 티어, 경험치 모델 참조, 도전 기간 이벤트 설정을 포함한, 지정된 시즌 모델을 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item SeasonModel 시즌 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetSeasonModel ( \u0026 season_rating . GetSeasonModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"mode1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetSeasonModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getSeasonModel ( ( new GetSeasonModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"mode1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetSeasonModelRequest ; import io.gs2.seasonRating.result.GetSeasonModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetSeasonModelResult result = client . getSeasonModel ( new GetSeasonModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"mode1\" ) ); SeasonModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetSeasonModelResult \u003e asyncResult = null ; yield return client . GetSeasonModel ( new Gs2 . Gs2SeasonRating . Request . GetSeasonModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"mode1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getSeasonModel ( new Gs2SeasonRating . GetSeasonModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"mode1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_season_model ( season_rating . GetSeasonModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'mode1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_season_model ({ namespaceName = \"namespace-0001\" , seasonName = \"mode1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_season_model_async ({ namespaceName = \"namespace-0001\" , seasonName = \"mode1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 등록되어 있는 시즌 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보냅니다. 내보낸 데이터에는 레이팅 티어, 경험치 모델 참조, 도전 기간 설정을 포함한 모든 시즌 레이팅 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentSeasonModelMaster 활성화 가능한 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 season_rating . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.ExportMasterRequest ; import io.gs2.seasonRating.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentSeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2SeasonRating . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . exportMaster ( new Gs2SeasonRating . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . export_master ( season_rating . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentSeasonModelMaster 현재 활성화된 시즌 모델의 마스터 데이터를 가져오기 레이팅 계산에 사용되고 있는 모든 시즌 레이팅 정의를 포함한, 현재 활성화된 시즌 모델 마스터 데이터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentSeasonModelMaster 현재 활성화된 시즌 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetCurrentSeasonModelMaster ( \u0026 season_rating . GetCurrentSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetCurrentSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getCurrentSeasonModelMaster ( ( new GetCurrentSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetCurrentSeasonModelMasterRequest ; import io.gs2.seasonRating.result.GetCurrentSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetCurrentSeasonModelMasterResult result = client . getCurrentSeasonModelMaster ( new GetCurrentSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentSeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetCurrentSeasonModelMasterResult \u003e asyncResult = null ; yield return client . GetCurrentSeasonModelMaster ( new Gs2 . Gs2SeasonRating . Request . GetCurrentSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getCurrentSeasonModelMaster ( new Gs2SeasonRating . GetCurrentSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_current_season_model_master ( season_rating . GetCurrentSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_current_season_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_current_season_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentSeasonModelMaster 현재 활성화된 시즌 모델의 마스터 데이터를 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우에는 3단계로 나누어 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 가져옵니다. 가져온 URL에 마스터 데이터를 업로드합니다. UpdateCurrentSeasonModelMaster 에 업로드로 가져온 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentSeasonModelMaster ( \u0026 season_rating . PreUpdateCurrentSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\PreUpdateCurrentSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentSeasonModelMaster ( ( new PreUpdateCurrentSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.PreUpdateCurrentSeasonModelMasterRequest ; import io.gs2.seasonRating.result.PreUpdateCurrentSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { PreUpdateCurrentSeasonModelMasterResult result = client . preUpdateCurrentSeasonModelMaster ( new PreUpdateCurrentSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . PreUpdateCurrentSeasonModelMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentSeasonModelMaster ( new Gs2 . Gs2SeasonRating . Request . PreUpdateCurrentSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . preUpdateCurrentSeasonModelMaster ( new Gs2SeasonRating . PreUpdateCurrentSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . pre_update_current_season_model_master ( season_rating . PreUpdateCurrentSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.pre_update_current_season_model_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'season_rating' ) api_result_handler = client.pre_update_current_season_model_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentSeasonModelMaster 현재 활성화된 시즌 모델의 마스터 데이터를 갱신 현재 활성화된 시즌 모델 마스터 데이터를 갱신합니다. 대용량 마스터 데이터에 대응하기 위해 직접 갱신 모드와 사전 업로드 모드를 모두 지원합니다. 사전 업로드 모드에서는 PreUpdate API로 가져온 업로드 토큰을 사용하여 설정을 읽어들입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentSeasonModelMaster 갱신된 현재 활성화된 시즌 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentSeasonModelMaster ( \u0026 season_rating . UpdateCurrentSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2024-02-23\\\", \\\"seasonModels\\\": [{\\\"name\\\": \\\"season1\\\", \\\"tiers\\\": [{\\\"raiseRankBonus\\\": 0, \\\"entryFee\\\": 0, \\\"minimumChangePoint\\\": -10, \\\"maximumChangePoint\\\": 20}, {\\\"raiseRankBonus\\\": 30, \\\"entryFee\\\": 10, \\\"minimumChangePoint\\\": -10, \\\"maximumChangePoint\\\": 30}, {\\\"raiseRankBonus\\\": 60, \\\"entryFee\\\": 20, \\\"minimumChangePoint\\\": -20, \\\"maximumChangePoint\\\": 50}, {\\\"raiseRankBonus\\\": 60, \\\"entryFee\\\": 30, \\\"minimumChangePoint\\\": -30, \\\"maximumChangePoint\\\": 60}], \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\\\", \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\"}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\UpdateCurrentSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e updateCurrentSeasonModelMaster ( ( new UpdateCurrentSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2024-02-23 \\\" , \\\" seasonModels \\\" : [{ \\\" name \\\" : \\\" season1 \\\" , \\\" tiers \\\" : [{ \\\" raiseRankBonus \\\" : 0, \\\" entryFee \\\" : 0, \\\" minimumChangePoint \\\" : -10, \\\" maximumChangePoint \\\" : 20}, { \\\" raiseRankBonus \\\" : 30, \\\" entryFee \\\" : 10, \\\" minimumChangePoint \\\" : -10, \\\" maximumChangePoint \\\" : 30}, { \\\" raiseRankBonus \\\" : 60, \\\" entryFee \\\" : 20, \\\" minimumChangePoint \\\" : -20, \\\" maximumChangePoint \\\" : 50}, { \\\" raiseRankBonus \\\" : 60, \\\" entryFee \\\" : 30, \\\" minimumChangePoint \\\" : -30, \\\" maximumChangePoint \\\" : 60}], \\\" experienceModelId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level \\\" , \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" }]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.UpdateCurrentSeasonModelMasterRequest ; import io.gs2.seasonRating.result.UpdateCurrentSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { UpdateCurrentSeasonModelMasterResult result = client . updateCurrentSeasonModelMaster ( new UpdateCurrentSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-02-23\\\", \\\"seasonModels\\\": [{\\\"name\\\": \\\"season1\\\", \\\"tiers\\\": [{\\\"raiseRankBonus\\\": 0, \\\"entryFee\\\": 0, \\\"minimumChangePoint\\\": -10, \\\"maximumChangePoint\\\": 20}, {\\\"raiseRankBonus\\\": 30, \\\"entryFee\\\": 10, \\\"minimumChangePoint\\\": -10, \\\"maximumChangePoint\\\": 30}, {\\\"raiseRankBonus\\\": 60, \\\"entryFee\\\": 20, \\\"minimumChangePoint\\\": -20, \\\"maximumChangePoint\\\": 50}, {\\\"raiseRankBonus\\\": 60, \\\"entryFee\\\": 30, \\\"minimumChangePoint\\\": -30, \\\"maximumChangePoint\\\": 60}], \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\\\", \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\"}]}\" ) . withUploadToken ( null ) ); CurrentSeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . UpdateCurrentSeasonModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentSeasonModelMaster ( new Gs2 . Gs2SeasonRating . Request . UpdateCurrentSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2024-02-23\\\", \\\"seasonModels\\\": [{\\\"name\\\": \\\"season1\\\", \\\"tiers\\\": [{\\\"raiseRankBonus\\\": 0, \\\"entryFee\\\": 0, \\\"minimumChangePoint\\\": -10, \\\"maximumChangePoint\\\": 20}, {\\\"raiseRankBonus\\\": 30, \\\"entryFee\\\": 10, \\\"minimumChangePoint\\\": -10, \\\"maximumChangePoint\\\": 30}, {\\\"raiseRankBonus\\\": 60, \\\"entryFee\\\": 20, \\\"minimumChangePoint\\\": -20, \\\"maximumChangePoint\\\": 50}, {\\\"raiseRankBonus\\\": 60, \\\"entryFee\\\": 30, \\\"minimumChangePoint\\\": -30, \\\"maximumChangePoint\\\": 60}], \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\\\", \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\"}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . updateCurrentSeasonModelMaster ( new Gs2SeasonRating . UpdateCurrentSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2024-02-23\\\", \\\"seasonModels\\\": [{\\\"name\\\": \\\"season1\\\", \\\"tiers\\\": [{\\\"raiseRankBonus\\\": 0, \\\"entryFee\\\": 0, \\\"minimumChangePoint\\\": -10, \\\"maximumChangePoint\\\": 20}, {\\\"raiseRankBonus\\\": 30, \\\"entryFee\\\": 10, \\\"minimumChangePoint\\\": -10, \\\"maximumChangePoint\\\": 30}, {\\\"raiseRankBonus\\\": 60, \\\"entryFee\\\": 20, \\\"minimumChangePoint\\\": -20, \\\"maximumChangePoint\\\": 50}, {\\\"raiseRankBonus\\\": 60, \\\"entryFee\\\": 30, \\\"minimumChangePoint\\\": -30, \\\"maximumChangePoint\\\": 60}], \\\"experienceModelId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\\\", \\\"challengePeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\\\"}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . update_current_season_model_master ( season_rating . UpdateCurrentSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2024-02-23\", \"seasonModels\": [{\"name\": \"season1\", \"tiers\": [{\"raiseRankBonus\": 0, \"entryFee\": 0, \"minimumChangePoint\": -10, \"maximumChangePoint\": 20}, {\"raiseRankBonus\": 30, \"entryFee\": 10, \"minimumChangePoint\": -10, \"maximumChangePoint\": 30}, {\"raiseRankBonus\": 60, \"entryFee\": 20, \"minimumChangePoint\": -20, \"maximumChangePoint\": 50}, {\"raiseRankBonus\": 60, \"entryFee\": 30, \"minimumChangePoint\": -30, \"maximumChangePoint\": 60}], \"experienceModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\", \"challengePeriodEventId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\"}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.update_current_season_model_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-02-23 \\\" , \\\" seasonModels \\\" : [{ \\\" name \\\" : \\\" season1 \\\" , \\\" tiers \\\" : [{ \\\" raiseRankBonus \\\" : 0, \\\" entryFee \\\" : 0, \\\" minimumChangePoint \\\" : -10, \\\" maximumChangePoint \\\" : 20}, { \\\" raiseRankBonus \\\" : 30, \\\" entryFee \\\" : 10, \\\" minimumChangePoint \\\" : -10, \\\" maximumChangePoint \\\" : 30}, { \\\" raiseRankBonus \\\" : 60, \\\" entryFee \\\" : 20, \\\" minimumChangePoint \\\" : -20, \\\" maximumChangePoint \\\" : 50}, { \\\" raiseRankBonus \\\" : 60, \\\" entryFee \\\" : 30, \\\" minimumChangePoint \\\" : -30, \\\" maximumChangePoint \\\" : 60}], \\\" experienceModelId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level \\\" , \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" }]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.update_current_season_model_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2024-02-23 \\\" , \\\" seasonModels \\\" : [{ \\\" name \\\" : \\\" season1 \\\" , \\\" tiers \\\" : [{ \\\" raiseRankBonus \\\" : 0, \\\" entryFee \\\" : 0, \\\" minimumChangePoint \\\" : -10, \\\" maximumChangePoint \\\" : 20}, { \\\" raiseRankBonus \\\" : 30, \\\" entryFee \\\" : 10, \\\" minimumChangePoint \\\" : -10, \\\" maximumChangePoint \\\" : 30}, { \\\" raiseRankBonus \\\" : 60, \\\" entryFee \\\" : 20, \\\" minimumChangePoint \\\" : -20, \\\" maximumChangePoint \\\" : 50}, { \\\" raiseRankBonus \\\" : 60, \\\" entryFee \\\" : 30, \\\" minimumChangePoint \\\" : -30, \\\" maximumChangePoint \\\" : 60}], \\\" experienceModelId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level \\\" , \\\" challengePeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001 \\\" }]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentSeasonModelMasterFromGitHub 현재 활성화된 시즌 모델의 마스터 데이터를 GitHub에서 갱신 지정된 체크아웃 설정을 사용하여 GitHub 저장소에서 마스터 데이터를 체크아웃하고, 현재 활성화된 시즌 모델 마스터 데이터를 갱신합니다. GitHub와의 인증에는 키 서비스를 통해 API 키가 복호화되어 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentSeasonModelMaster 갱신된 현재 활성화된 시즌 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentSeasonModelMasterFromGitHub ( \u0026 season_rating . UpdateCurrentSeasonModelMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 seasonRating . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\UpdateCurrentSeasonModelMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e updateCurrentSeasonModelMasterFromGitHub ( ( new UpdateCurrentSeasonModelMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.UpdateCurrentSeasonModelMasterFromGitHubRequest ; import io.gs2.seasonRating.result.UpdateCurrentSeasonModelMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { UpdateCurrentSeasonModelMasterFromGitHubResult result = client . updateCurrentSeasonModelMasterFromGitHub ( new UpdateCurrentSeasonModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentSeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . UpdateCurrentSeasonModelMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentSeasonModelMasterFromGitHub ( new Gs2 . Gs2SeasonRating . Request . UpdateCurrentSeasonModelMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2SeasonRating . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . updateCurrentSeasonModelMasterFromGitHub ( new Gs2SeasonRating . UpdateCurrentSeasonModelMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2SeasonRating . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . update_current_season_model_master_from_git_hub ( season_rating . UpdateCurrentSeasonModelMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( season_rating . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.update_current_season_model_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.update_current_season_model_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSeasonModelMasters 시즌 모델 마스터 목록을 가져오기 시즌 모델 마스터의 페이지네이션 목록을 가져옵니다. 이름의 접두사로 필터링할 수 있습니다. 시즌 모델 마스터는 시즌 레이팅을 위한 레이팅 티어, 경험치 모델 참조, 도전 기간 이벤트를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 시즌 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 시즌 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . DescribeSeasonModelMasters ( \u0026 season_rating . DescribeSeasonModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\DescribeSeasonModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e describeSeasonModelMasters ( ( new DescribeSeasonModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.DescribeSeasonModelMastersRequest ; import io.gs2.seasonRating.result.DescribeSeasonModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { DescribeSeasonModelMastersResult result = client . describeSeasonModelMasters ( new DescribeSeasonModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SeasonModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . DescribeSeasonModelMastersResult \u003e asyncResult = null ; yield return client . DescribeSeasonModelMasters ( new Gs2 . Gs2SeasonRating . Request . DescribeSeasonModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . describeSeasonModelMasters ( new Gs2SeasonRating . DescribeSeasonModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . describe_season_model_masters ( season_rating . DescribeSeasonModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.describe_season_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'season_rating' ) api_result_handler = client.describe_season_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createSeasonModelMaster 시즌 모델 마스터를 신규 작성 레이팅 티어, 레이팅 저장용 GS2-Experience 경험치 모델에 대한 참조, 그리고 플레이어의 참가를 제한하는 옵션인 도전 기간 이벤트 ID를 가진 새로운 시즌 모델 마스터를 작성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tiers List  1 ~ 100 items 티어 모델 목록 시즌의 랭킹 사다리를 구성하는 티어 정의의 순서가 있는 목록. 각 티어는 고유한 포인트 변동 규칙(참가료, 최소/최대 변동량, 승급 보너스)을 정의합니다. 플레이어는 GS2-Experience에서 관리되는 누적 포인트에 따라 티어를 진행합니다. 최소 1개 티어, 최대 100개 티어. experienceModelId string  ~ 1024자 경험치 모델 ID 시즌 포인트와 티어 진행 관리에 사용되는 GS2-Experience 경험치 모델의 GRN. 경험치 모델의 랭크 임계값이 티어 경계를 결정하며, 경험치 값은 플레이어의 현재 시즌 포인트를 나타냅니다. 대전 결과에 따른 포인트 변동은 이 경험치 모델에 적용됩니다. challengePeriodEventId string ~ 1024자 챌린지 기간 이벤트 ID 시즌이 대전 가능한 기간을 정의하는 GS2-Schedule 이벤트의 GRN. 설정한 경우, 참조된 이벤트가 활성 상태인 동안에만 플레이어가 대전에 참가할 수 있습니다. 설정하지 않은 경우, 시즌에 기간 제한이 없습니다. Result 타입 설명 item SeasonModelMaster 작성한 시즌 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . CreateSeasonModelMaster ( \u0026 season_rating . CreateSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"mode1\" ), Description : nil , Metadata : nil , Tiers : [] seasonRating . TierModel { seasonRating . TierModel { RaiseRankBonus : pointy . Int32 ( 0 ), EntryFee : pointy . Int32 ( 0 ), MinimumChangePoint : pointy . Int32 ( - 10 ), MaximumChangePoint : pointy . Int32 ( 20 ), }, seasonRating . TierModel { RaiseRankBonus : pointy . Int32 ( 30 ), EntryFee : pointy . Int32 ( 10 ), MinimumChangePoint : pointy . Int32 ( - 10 ), MaximumChangePoint : pointy . Int32 ( 30 ), }, seasonRating . TierModel { RaiseRankBonus : pointy . Int32 ( 60 ), EntryFee : pointy . Int32 ( 20 ), MinimumChangePoint : pointy . Int32 ( - 20 ), MaximumChangePoint : pointy . Int32 ( 50 ), }, seasonRating . TierModel { RaiseRankBonus : pointy . Int32 ( 60 ), EntryFee : pointy . Int32 ( 30 ), MinimumChangePoint : pointy . Int32 ( - 30 ), MaximumChangePoint : pointy . Int32 ( 60 ), }, }, ExperienceModelId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ), ChallengePeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\CreateSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e createSeasonModelMaster ( ( new CreateSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"mode1\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withTiers ([ ( new \\Gs2\\SeasonRating\\Model\\TierModel ()) -\u003e withRaiseRankBonus ( 0 ) -\u003e withEntryFee ( 0 ) -\u003e withMinimumChangePoint ( - 10 ) -\u003e withMaximumChangePoint ( 20 ), ( new \\Gs2\\SeasonRating\\Model\\TierModel ()) -\u003e withRaiseRankBonus ( 30 ) -\u003e withEntryFee ( 10 ) -\u003e withMinimumChangePoint ( - 10 ) -\u003e withMaximumChangePoint ( 30 ), ( new \\Gs2\\SeasonRating\\Model\\TierModel ()) -\u003e withRaiseRankBonus ( 60 ) -\u003e withEntryFee ( 20 ) -\u003e withMinimumChangePoint ( - 20 ) -\u003e withMaximumChangePoint ( 50 ), ( new \\Gs2\\SeasonRating\\Model\\TierModel ()) -\u003e withRaiseRankBonus ( 60 ) -\u003e withEntryFee ( 30 ) -\u003e withMinimumChangePoint ( - 30 ) -\u003e withMaximumChangePoint ( 60 ), ]) -\u003e withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ) -\u003e withChallengePeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.CreateSeasonModelMasterRequest ; import io.gs2.seasonRating.result.CreateSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { CreateSeasonModelMasterResult result = client . createSeasonModelMaster ( new CreateSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"mode1\" ) . withDescription ( null ) . withMetadata ( null ) . withTiers ( Arrays . asList ( new io . gs2 . seasonRating . model . TierModel () . withRaiseRankBonus ( 0 ) . withEntryFee ( 0 ) . withMinimumChangePoint ( - 10 ) . withMaximumChangePoint ( 20 ), new io . gs2 . seasonRating . model . TierModel () . withRaiseRankBonus ( 30 ) . withEntryFee ( 10 ) . withMinimumChangePoint ( - 10 ) . withMaximumChangePoint ( 30 ), new io . gs2 . seasonRating . model . TierModel () . withRaiseRankBonus ( 60 ) . withEntryFee ( 20 ) . withMinimumChangePoint ( - 20 ) . withMaximumChangePoint ( 50 ), new io . gs2 . seasonRating . model . TierModel () . withRaiseRankBonus ( 60 ) . withEntryFee ( 30 ) . withMinimumChangePoint ( - 30 ) . withMaximumChangePoint ( 60 ) )) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ) . withChallengePeriodEventId ( null ) ); SeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . CreateSeasonModelMasterResult \u003e asyncResult = null ; yield return client . CreateSeasonModelMaster ( new Gs2 . Gs2SeasonRating . Request . CreateSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"mode1\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithTiers ( new Gs2 . Gs2SeasonRating . Model . TierModel [] { new Gs2 . Gs2SeasonRating . Model . TierModel () . WithRaiseRankBonus ( 0 ) . WithEntryFee ( 0 ) . WithMinimumChangePoint (- 10 ) . WithMaximumChangePoint ( 20 ), new Gs2 . Gs2SeasonRating . Model . TierModel () . WithRaiseRankBonus ( 30 ) . WithEntryFee ( 10 ) . WithMinimumChangePoint (- 10 ) . WithMaximumChangePoint ( 30 ), new Gs2 . Gs2SeasonRating . Model . TierModel () . WithRaiseRankBonus ( 60 ) . WithEntryFee ( 20 ) . WithMinimumChangePoint (- 20 ) . WithMaximumChangePoint ( 50 ), new Gs2 . Gs2SeasonRating . Model . TierModel () . WithRaiseRankBonus ( 60 ) . WithEntryFee ( 30 ) . WithMinimumChangePoint (- 30 ) . WithMaximumChangePoint ( 60 ), }) . WithExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ) . WithChallengePeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . createSeasonModelMaster ( new Gs2SeasonRating . CreateSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"mode1\" ) . withDescription ( null ) . withMetadata ( null ) . withTiers ([ new Gs2SeasonRating . model . TierModel () . withRaiseRankBonus ( 0 ) . withEntryFee ( 0 ) . withMinimumChangePoint ( - 10 ) . withMaximumChangePoint ( 20 ), new Gs2SeasonRating . model . TierModel () . withRaiseRankBonus ( 30 ) . withEntryFee ( 10 ) . withMinimumChangePoint ( - 10 ) . withMaximumChangePoint ( 30 ), new Gs2SeasonRating . model . TierModel () . withRaiseRankBonus ( 60 ) . withEntryFee ( 20 ) . withMinimumChangePoint ( - 20 ) . withMaximumChangePoint ( 50 ), new Gs2SeasonRating . model . TierModel () . withRaiseRankBonus ( 60 ) . withEntryFee ( 30 ) . withMinimumChangePoint ( - 30 ) . withMaximumChangePoint ( 60 ), ]) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" ) . withChallengePeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . create_season_model_master ( season_rating . CreateSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'mode1' ) . with_description ( None ) . with_metadata ( None ) . with_tiers ([ season_rating . TierModel () . with_raise_rank_bonus ( 0 ) . with_entry_fee ( 0 ) . with_minimum_change_point ( - 10 ) . with_maximum_change_point ( 20 ), season_rating . TierModel () . with_raise_rank_bonus ( 30 ) . with_entry_fee ( 10 ) . with_minimum_change_point ( - 10 ) . with_maximum_change_point ( 30 ), season_rating . TierModel () . with_raise_rank_bonus ( 60 ) . with_entry_fee ( 20 ) . with_minimum_change_point ( - 20 ) . with_maximum_change_point ( 50 ), season_rating . TierModel () . with_raise_rank_bonus ( 60 ) . with_entry_fee ( 30 ) . with_minimum_change_point ( - 30 ) . with_maximum_change_point ( 60 ), ]) . with_experience_model_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level' ) . with_challenge_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.create_season_model_master ({ namespaceName = \"namespace-0001\" , name = \"mode1\" , description = nil , metadata = nil , tiers = { { raiseRankBonus = 0 , entryFee = 0 , minimumChangePoint =- 10 , maximumChangePoint = 20 , }, { raiseRankBonus = 30 , entryFee = 10 , minimumChangePoint =- 10 , maximumChangePoint = 30 , }, { raiseRankBonus = 60 , entryFee = 20 , minimumChangePoint =- 20 , maximumChangePoint = 50 , }, { raiseRankBonus = 60 , entryFee = 30 , minimumChangePoint =- 30 , maximumChangePoint = 60 , } }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , challengePeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.create_season_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"mode1\" , description = nil , metadata = nil , tiers = { { raiseRankBonus = 0 , entryFee = 0 , minimumChangePoint =- 10 , maximumChangePoint = 20 , }, { raiseRankBonus = 30 , entryFee = 10 , minimumChangePoint =- 10 , maximumChangePoint = 30 , }, { raiseRankBonus = 60 , entryFee = 20 , minimumChangePoint =- 20 , maximumChangePoint = 50 , }, { raiseRankBonus = 60 , entryFee = 30 , minimumChangePoint =- 30 , maximumChangePoint = 60 , } }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , challengePeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSeasonModelMaster 시즌 모델 마스터를 가져오기 레이팅 티어, 경험치 모델 참조, 도전 기간 이벤트 설정을 포함한, 지정된 시즌 모델 마스터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item SeasonModelMaster 시즌 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . GetSeasonModelMaster ( \u0026 season_rating . GetSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"mode1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\GetSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e getSeasonModelMaster ( ( new GetSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"mode1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.GetSeasonModelMasterRequest ; import io.gs2.seasonRating.result.GetSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { GetSeasonModelMasterResult result = client . getSeasonModelMaster ( new GetSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"mode1\" ) ); SeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . GetSeasonModelMasterResult \u003e asyncResult = null ; yield return client . GetSeasonModelMaster ( new Gs2 . Gs2SeasonRating . Request . GetSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"mode1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . getSeasonModelMaster ( new Gs2SeasonRating . GetSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"mode1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . get_season_model_master ( season_rating . GetSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'mode1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.get_season_model_master ({ namespaceName = \"namespace-0001\" , seasonName = \"mode1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.get_season_model_master_async ({ namespaceName = \"namespace-0001\" , seasonName = \"mode1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateSeasonModelMaster 시즌 모델 마스터를 갱신 지정된 시즌 모델 마스터의 레이팅 티어, 경험치 모델 참조, 도전 기간 이벤트, 그 외 속성을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tiers List  1 ~ 100 items 티어 모델 목록 시즌의 랭킹 사다리를 구성하는 티어 정의의 순서가 있는 목록. 각 티어는 고유한 포인트 변동 규칙(참가료, 최소/최대 변동량, 승급 보너스)을 정의합니다. 플레이어는 GS2-Experience에서 관리되는 누적 포인트에 따라 티어를 진행합니다. 최소 1개 티어, 최대 100개 티어. experienceModelId string  ~ 1024자 경험치 모델 ID 시즌 포인트와 티어 진행 관리에 사용되는 GS2-Experience 경험치 모델의 GRN. 경험치 모델의 랭크 임계값이 티어 경계를 결정하며, 경험치 값은 플레이어의 현재 시즌 포인트를 나타냅니다. 대전 결과에 따른 포인트 변동은 이 경험치 모델에 적용됩니다. challengePeriodEventId string ~ 1024자 챌린지 기간 이벤트 ID 시즌이 대전 가능한 기간을 정의하는 GS2-Schedule 이벤트의 GRN. 설정한 경우, 참조된 이벤트가 활성 상태인 동안에만 플레이어가 대전에 참가할 수 있습니다. 설정하지 않은 경우, 시즌에 기간 제한이 없습니다. Result 타입 설명 item SeasonModelMaster 갱신한 시즌 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . UpdateSeasonModelMaster ( \u0026 season_rating . UpdateSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"mode1\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , Tiers : [] seasonRating . TierModel { seasonRating . TierModel { RaiseRankBonus : pointy . Int32 ( 0 ), EntryFee : pointy . Int32 ( 0 ), MinimumChangePoint : pointy . Int32 ( - 100 ), MaximumChangePoint : pointy . Int32 ( 200 ), }, seasonRating . TierModel { RaiseRankBonus : pointy . Int32 ( 300 ), EntryFee : pointy . Int32 ( 100 ), MinimumChangePoint : pointy . Int32 ( - 100 ), MaximumChangePoint : pointy . Int32 ( 300 ), }, seasonRating . TierModel { RaiseRankBonus : pointy . Int32 ( 600 ), EntryFee : pointy . Int32 ( 200 ), MinimumChangePoint : pointy . Int32 ( - 200 ), MaximumChangePoint : pointy . Int32 ( 500 ), }, seasonRating . TierModel { RaiseRankBonus : pointy . Int32 ( 600 ), EntryFee : pointy . Int32 ( 300 ), MinimumChangePoint : pointy . Int32 ( - 300 ), MaximumChangePoint : pointy . Int32 ( 600 ), }, }, ExperienceModelId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ), ChallengePeriodEventId : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\UpdateSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e updateSeasonModelMaster ( ( new UpdateSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"mode1\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withTiers ([ ( new \\Gs2\\SeasonRating\\Model\\TierModel ()) -\u003e withRaiseRankBonus ( 0 ) -\u003e withEntryFee ( 0 ) -\u003e withMinimumChangePoint ( - 100 ) -\u003e withMaximumChangePoint ( 200 ), ( new \\Gs2\\SeasonRating\\Model\\TierModel ()) -\u003e withRaiseRankBonus ( 300 ) -\u003e withEntryFee ( 100 ) -\u003e withMinimumChangePoint ( - 100 ) -\u003e withMaximumChangePoint ( 300 ), ( new \\Gs2\\SeasonRating\\Model\\TierModel ()) -\u003e withRaiseRankBonus ( 600 ) -\u003e withEntryFee ( 200 ) -\u003e withMinimumChangePoint ( - 200 ) -\u003e withMaximumChangePoint ( 500 ), ( new \\Gs2\\SeasonRating\\Model\\TierModel ()) -\u003e withRaiseRankBonus ( 600 ) -\u003e withEntryFee ( 300 ) -\u003e withMinimumChangePoint ( - 300 ) -\u003e withMaximumChangePoint ( 600 ), ]) -\u003e withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ) -\u003e withChallengePeriodEventId ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.UpdateSeasonModelMasterRequest ; import io.gs2.seasonRating.result.UpdateSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { UpdateSeasonModelMasterResult result = client . updateSeasonModelMaster ( new UpdateSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"mode1\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withTiers ( Arrays . asList ( new io . gs2 . seasonRating . model . TierModel () . withRaiseRankBonus ( 0 ) . withEntryFee ( 0 ) . withMinimumChangePoint ( - 100 ) . withMaximumChangePoint ( 200 ), new io . gs2 . seasonRating . model . TierModel () . withRaiseRankBonus ( 300 ) . withEntryFee ( 100 ) . withMinimumChangePoint ( - 100 ) . withMaximumChangePoint ( 300 ), new io . gs2 . seasonRating . model . TierModel () . withRaiseRankBonus ( 600 ) . withEntryFee ( 200 ) . withMinimumChangePoint ( - 200 ) . withMaximumChangePoint ( 500 ), new io . gs2 . seasonRating . model . TierModel () . withRaiseRankBonus ( 600 ) . withEntryFee ( 300 ) . withMinimumChangePoint ( - 300 ) . withMaximumChangePoint ( 600 ) )) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ) . withChallengePeriodEventId ( null ) ); SeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . UpdateSeasonModelMasterResult \u003e asyncResult = null ; yield return client . UpdateSeasonModelMaster ( new Gs2 . Gs2SeasonRating . Request . UpdateSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"mode1\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithTiers ( new Gs2 . Gs2SeasonRating . Model . TierModel [] { new Gs2 . Gs2SeasonRating . Model . TierModel () . WithRaiseRankBonus ( 0 ) . WithEntryFee ( 0 ) . WithMinimumChangePoint (- 100 ) . WithMaximumChangePoint ( 200 ), new Gs2 . Gs2SeasonRating . Model . TierModel () . WithRaiseRankBonus ( 300 ) . WithEntryFee ( 100 ) . WithMinimumChangePoint (- 100 ) . WithMaximumChangePoint ( 300 ), new Gs2 . Gs2SeasonRating . Model . TierModel () . WithRaiseRankBonus ( 600 ) . WithEntryFee ( 200 ) . WithMinimumChangePoint (- 200 ) . WithMaximumChangePoint ( 500 ), new Gs2 . Gs2SeasonRating . Model . TierModel () . WithRaiseRankBonus ( 600 ) . WithEntryFee ( 300 ) . WithMinimumChangePoint (- 300 ) . WithMaximumChangePoint ( 600 ), }) . WithExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ) . WithChallengePeriodEventId ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . updateSeasonModelMaster ( new Gs2SeasonRating . UpdateSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"mode1\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withTiers ([ new Gs2SeasonRating . model . TierModel () . withRaiseRankBonus ( 0 ) . withEntryFee ( 0 ) . withMinimumChangePoint ( - 100 ) . withMaximumChangePoint ( 200 ), new Gs2SeasonRating . model . TierModel () . withRaiseRankBonus ( 300 ) . withEntryFee ( 100 ) . withMinimumChangePoint ( - 100 ) . withMaximumChangePoint ( 300 ), new Gs2SeasonRating . model . TierModel () . withRaiseRankBonus ( 600 ) . withEntryFee ( 200 ) . withMinimumChangePoint ( - 200 ) . withMaximumChangePoint ( 500 ), new Gs2SeasonRating . model . TierModel () . withRaiseRankBonus ( 600 ) . withEntryFee ( 300 ) . withMinimumChangePoint ( - 300 ) . withMaximumChangePoint ( 600 ), ]) . withExperienceModelId ( \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" ) . withChallengePeriodEventId ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . update_season_model_master ( season_rating . UpdateSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'mode1' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_tiers ([ season_rating . TierModel () . with_raise_rank_bonus ( 0 ) . with_entry_fee ( 0 ) . with_minimum_change_point ( - 100 ) . with_maximum_change_point ( 200 ), season_rating . TierModel () . with_raise_rank_bonus ( 300 ) . with_entry_fee ( 100 ) . with_minimum_change_point ( - 100 ) . with_maximum_change_point ( 300 ), season_rating . TierModel () . with_raise_rank_bonus ( 600 ) . with_entry_fee ( 200 ) . with_minimum_change_point ( - 200 ) . with_maximum_change_point ( 500 ), season_rating . TierModel () . with_raise_rank_bonus ( 600 ) . with_entry_fee ( 300 ) . with_minimum_change_point ( - 300 ) . with_maximum_change_point ( 600 ), ]) . with_experience_model_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2' ) . with_challenge_period_event_id ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.update_season_model_master ({ namespaceName = \"namespace-0001\" , seasonName = \"mode1\" , description = \"description1\" , metadata = nil , tiers = { { raiseRankBonus = 0 , entryFee = 0 , minimumChangePoint =- 100 , maximumChangePoint = 200 , }, { raiseRankBonus = 300 , entryFee = 100 , minimumChangePoint =- 100 , maximumChangePoint = 300 , }, { raiseRankBonus = 600 , entryFee = 200 , minimumChangePoint =- 200 , maximumChangePoint = 500 , }, { raiseRankBonus = 600 , entryFee = 300 , minimumChangePoint =- 300 , maximumChangePoint = 600 , } }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" , challengePeriodEventId = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.update_season_model_master_async ({ namespaceName = \"namespace-0001\" , seasonName = \"mode1\" , description = \"description1\" , metadata = nil , tiers = { { raiseRankBonus = 0 , entryFee = 0 , minimumChangePoint =- 100 , maximumChangePoint = 200 , }, { raiseRankBonus = 300 , entryFee = 100 , minimumChangePoint =- 100 , maximumChangePoint = 300 , }, { raiseRankBonus = 600 , entryFee = 200 , minimumChangePoint =- 200 , maximumChangePoint = 500 , }, { raiseRankBonus = 600 , entryFee = 300 , minimumChangePoint =- 300 , maximumChangePoint = 600 , } }, experienceModelId = \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level2\" , challengePeriodEventId = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSeasonModelMaster 시즌 모델 마스터를 삭제 지정된 시즌 모델 마스터를 삭제합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item SeasonModelMaster 삭제한 시즌 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/seasonRating\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := season_rating . Gs2SeasonRatingRestClient { Session : \u0026 session , } result , err := client . DeleteSeasonModelMaster ( \u0026 season_rating . DeleteSeasonModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SeasonName : pointy . String ( \"mode1\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SeasonRating\\Gs2SeasonRatingRestClient ; use Gs2\\SeasonRating\\Request\\DeleteSeasonModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SeasonRatingRestClient ( $session ); try { $result = $client -\u003e deleteSeasonModelMaster ( ( new DeleteSeasonModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSeasonName ( \"mode1\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.seasonRating.rest.Gs2SeasonRatingRestClient ; import io.gs2.seasonRating.request.DeleteSeasonModelMasterRequest ; import io.gs2.seasonRating.result.DeleteSeasonModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SeasonRatingRestClient client = new Gs2SeasonRatingRestClient ( session ); try { DeleteSeasonModelMasterResult result = client . deleteSeasonModelMaster ( new DeleteSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"mode1\" ) ); SeasonModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SeasonRatingRestClient ( session ); AsyncResult Gs2 . Gs2SeasonRating . Result . DeleteSeasonModelMasterResult \u003e asyncResult = null ; yield return client . DeleteSeasonModelMaster ( new Gs2 . Gs2SeasonRating . Request . DeleteSeasonModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSeasonName ( \"mode1\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SeasonRating from '@/gs2/seasonRating' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SeasonRating . Gs2SeasonRatingRestClient ( session ); try { const result = await client . deleteSeasonModelMaster ( new Gs2SeasonRating . DeleteSeasonModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSeasonName ( \"mode1\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import season_rating session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = season_rating . Gs2SeasonRatingRestClient ( session ) try : result = client . delete_season_model_master ( season_rating . DeleteSeasonModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_season_name ( 'mode1' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'season_rating' ) api_result = client.delete_season_model_master ({ namespaceName = \"namespace-0001\" , seasonName = \"mode1\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'season_rating' ) api_result_handler = client.delete_season_model_master_async ({ namespaceName = \"namespace-0001\" , seasonName = \"mode1\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-SeasonRating SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-SeasonRating SDK API 레퍼런스","url":"/ko/api_reference/season_rating/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명 transactionSetting TransactionSetting 트랜잭션 설정 시리얼 키 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 시리얼 코드의 발행·사용에 관한 API 요청·응답 로그를 출력할 GS2-Log의 네임스페이스를 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·경합 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue에 의한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그의 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log 의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청·응답 로그 데이터가 대상 GS2-Log 로 출력됩니다. GS2-Log 에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 IssueJob 시리얼 코드 발행 작업 시리얼 코드의 발행 처리를 실행하면 엔티티가 생성됩니다. 발행 수량은 1~100000 범위로 지정할 수 있으며, 발행 처리의 진행 상황도 확인할 수 있습니다. 발행 처리가 완료되면 상태가 PROCESSING에서 COMPLETE로 바뀌며, 발행된 시리얼 코드의 정보에 접근할 수 있게 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 issueJobId string ※ ~ 1024자 발행 작업 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  UUID ~ 36자 시리얼 코드 발행 작업 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. issuedCount int 0 0 ~ 1000000 시리얼 코드 발행 완료 수량 이 작업에서 지금까지 발행된 시리얼 코드의 수입니다. 코드가 배치로 생성될 때마다 원자적으로 증가합니다. 이 값이 issueRequestCount에 도달하면 작업 상태가 COMPLETE로 전환됩니다. issueRequestCount int  1 ~ 100000 발행할 시리얼 코드 수량 이 작업에서 발행을 요청받은 시리얼 코드의 총 수입니다. 작업당 1~100,000 범위로 지정할 수 있습니다. 발행 처리는 배치로 비동기 처리됩니다. status 문자열 열거형 enum {   “PROCESSING”,   “COMPLETE” } “PROCESSING” 상태 이 발행 작업의 현재 처리 상태입니다. 작업 생성 시 PROCESSING으로 시작하며, 요청된 모든 시리얼 코드의 발행이 완료되면 COMPLETE로 전환됩니다. COMPLETE가 되면 발행된 시리얼 코드를 가져올 수 있습니다. 정의 설명 PROCESSING 발행 처리 중 COMPLETE 발행 완료 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SerialKey 시리얼 코드 발급된 시리얼 코드는 한 번만 사용할 수 있습니다. 시리얼 코드는 “RPCLP-FP7N-NCDMJ-FLVA-IRI4\"와 같은 형식으로 발급되며 데이터 길이는 변경할 수 없습니다. 시리얼 코드 내에는 캠페인 종류에 대한 정보도 포함되어 있으며, 시리얼 코드를 사용할 때는 네임스페이스만 지정하면 사용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 serialKeyId string ※ ~ 1024자 시리얼 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 campaignModelName string  ~ 128자 캠페인 이름 이 시리얼 코드가 속한 캠페인 모델의 이름입니다. 캠페인 정보는 시리얼 코드 자체에 포함되어 있으므로 코드를 사용할 때는 네임스페이스만 지정하면 됩니다. code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. status 문자열 열거형 enum {   “ACTIVE”,   “USED”,   “INACTIVE” } “ACTIVE” 상태 이 시리얼 코드의 현재 사용 상태입니다. 사용자가 소비하면 ACTIVE에서 USED로 전환됩니다. 이중 사용을 방지하기 위해 낙관적 잠금(optimistic locking)으로 보호됩니다. INACTIVE 상태의 코드는 사용할 수 없습니다. 정의 설명 ACTIVE 사용 가능 USED 사용됨 INACTIVE 비활성(사용 불가) usedUserId string {status} == “USED” ※ ~ 128자 사용자ID ※ status이(가) “USED” 이면 필수 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 usedAt long 사용 일시 이 시리얼 코드가 소비된 일시입니다. 상태가 USED로 전환될 때 자동으로 설정되며, 사용이 취소되면 초기화됩니다. updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 CampaignModel 캠페인 모델 캠페인 모델은 캠페인을 정의하고 시리얼 코드와 연결하여 관리하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 campaignId string ※ ~ 1024자 캠페인 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 캠페인 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. enableCampaignCode bool false 캠페인 코드에 의한 교환을 허용할지 여부 활성화하면 개별 시리얼 코드가 아닌 공통 캠페인 코드(캠페인 이름)를 사용하여 보상을 교환할 수 있게 됩니다. 이를 통해 하나의 코드를 여러 사용자가 사용할 수 있습니다. CurrentCampaignMaster 현재 활성화된 캠페인 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 캠페인 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터의 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-SerialKey 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 CampaignModelMaster 캠페인 모델 마스터 데이터 캠페인 모델 마스터는 게임 내에서 사용되는 캠페인 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 임시로 보관됩니다. 임포트·업데이트 처리를 수행하면 실제로 게임에서 참조되는 캠페인 모델로 반영됩니다. 캠페인 모델은 캠페인을 정의하고 시리얼 코드와 연결하여 관리하는 데 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 campaignId string ※ ~ 1024자 캠페인 모델 마스터 데이터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 캠페인 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. enableCampaignCode bool false 캠페인 코드에 의한 교환을 허용할지 여부 활성화하면 개별 시리얼 코드가 아닌 공통 캠페인 코드(캠페인 이름)를 사용하여 보상을 교환할 수 있게 됩니다. 이를 통해 하나의 코드를 여러 사용자가 사용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 serial_key . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DescribeNamespacesRequest ; import io.gs2.serialKey.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2SerialKey . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2SerialKey . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . describe_namespaces ( serial_key . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'serial_key' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명 transactionSetting TransactionSetting 트랜잭션 설정 시리얼 키 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 시리얼 코드의 발행·사용에 관한 API 요청·응답 로그를 출력할 GS2-Log의 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 serial_key . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , LogSetting : \u0026 serialKey . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\SerialKey\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.CreateNamespaceRequest ; import io.gs2.serialKey.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . serialKey . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2SerialKey . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2SerialKey . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . createNamespace ( new Gs2SerialKey . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2SerialKey . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . create_namespace ( serial_key . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_log_setting ( serial_key . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 serial_key . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.GetNamespaceStatusRequest ; import io.gs2.serialKey.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2SerialKey . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2SerialKey . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . get_namespace_status ( serial_key . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'serial_key' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 serial_key . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.GetNamespaceRequest ; import io.gs2.serialKey.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2SerialKey . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . getNamespace ( new Gs2SerialKey . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . get_namespace ( serial_key . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명 transactionSetting TransactionSetting 트랜잭션 설정 시리얼 키 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 시리얼 코드의 발행·사용에 관한 API 요청·응답 로그를 출력할 GS2-Log의 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 serial_key . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , LogSetting : \u0026 serialKey . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withLogSetting (( new \\Gs2\\SerialKey\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.UpdateNamespaceRequest ; import io.gs2.serialKey.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new io . gs2 . serialKey . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2SerialKey . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithLogSetting ( new Gs2 . Gs2SerialKey . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2SerialKey . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withLogSetting ( new Gs2SerialKey . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . update_namespace ( serial_key . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_log_setting ( serial_key . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 serial_key . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DeleteNamespaceRequest ; import io.gs2.serialKey.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2SerialKey . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2SerialKey . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . delete_namespace ( serial_key . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 serial_key . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.GetServiceVersionRequest ; import io.gs2.serialKey.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2SerialKey . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2SerialKey . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . get_service_version ( serial_key . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 serial_key . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DumpUserDataByUserIdRequest ; import io.gs2.serialKey.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2SerialKey . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2SerialKey . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . dump_user_data_by_user_id ( serial_key . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'serial_key' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 serial_key . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.serialKey.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2SerialKey . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2SerialKey . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( serial_key . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'serial_key' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 serial_key . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.CleanUserDataByUserIdRequest ; import io.gs2.serialKey.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2SerialKey . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2SerialKey . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . clean_user_data_by_user_id ( serial_key . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'serial_key' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 serial_key . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.serialKey.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2SerialKey . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2SerialKey . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( serial_key . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'serial_key' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 serial_key . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.serialKey.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2SerialKey . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2SerialKey . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( serial_key . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'serial_key' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 serial_key . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.ImportUserDataByUserIdRequest ; import io.gs2.serialKey.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2SerialKey . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2SerialKey . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . import_user_data_by_user_id ( serial_key . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'serial_key' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 serial_key . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.CheckImportUserDataByUserIdRequest ; import io.gs2.serialKey.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2SerialKey . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2SerialKey . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( serial_key . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'serial_key' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeIssueJobs 시리얼 코드 발행 작업 목록 조회 지정된 캠페인의 시리얼 코드 발행 작업에 대한 페이지네이션 목록을 조회합니다. 각 작업은 배치 발행 요청을 나타내며, 완료 상태가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 시리얼 코드 발행 작업 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DescribeIssueJobs ( \u0026 serial_key . DescribeIssueJobsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DescribeIssueJobsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e describeIssueJobs ( ( new DescribeIssueJobsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DescribeIssueJobsRequest ; import io.gs2.serialKey.result.DescribeIssueJobsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DescribeIssueJobsResult result = client . describeIssueJobs ( new DescribeIssueJobsRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List IssueJob \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DescribeIssueJobsResult \u003e asyncResult = null ; yield return client . DescribeIssueJobs ( new Gs2 . Gs2SerialKey . Request . DescribeIssueJobsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . describeIssueJobs ( new Gs2SerialKey . DescribeIssueJobsRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . describe_issue_jobs ( serial_key . DescribeIssueJobsRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.describe_issue_jobs ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'serial_key' ) api_result_handler = client.describe_issue_jobs_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getIssueJob 시리얼 코드 발행 작업 조회 이름, 요청 수, 메타데이터, 완료 상태를 포함하여 지정된 시리얼 코드 발행 작업을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 issueJobName string  UUID ~ 36자 시리얼 코드 발행 작업 이름 Result 타입 설명 item IssueJob 시리얼 코드 발행 작업 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . GetIssueJob ( \u0026 serial_key . GetIssueJobRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), IssueJobName : pointy . String ( \"campaign-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\GetIssueJobRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e getIssueJob ( ( new GetIssueJobRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) -\u003e withIssueJobName ( \"campaign-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.GetIssueJobRequest ; import io.gs2.serialKey.result.GetIssueJobResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { GetIssueJobResult result = client . getIssueJob ( new GetIssueJobRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withIssueJobName ( \"campaign-0001\" ) ); IssueJob item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . GetIssueJobResult \u003e asyncResult = null ; yield return client . GetIssueJob ( new Gs2 . Gs2SerialKey . Request . GetIssueJobRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ) . WithIssueJobName ( \"campaign-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . getIssueJob ( new Gs2SerialKey . GetIssueJobRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withIssueJobName ( \"campaign-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . get_issue_job ( serial_key . GetIssueJobRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) . with_issue_job_name ( 'campaign-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.get_issue_job ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , issueJobName = \"campaign-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.get_issue_job_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , issueJobName = \"campaign-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; issue 시리얼 코드 발행 작업 생성 비동기 시리얼 코드 생성 작업을 시작합니다. 코드는 배치 단위로 생성되며, 완료 시 요약 파일이 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. issueRequestCount int  1 ~ 100000 발행할 시리얼 코드 수량 이 작업에서 발행을 요청받은 시리얼 코드의 총 수입니다. 작업당 1~100,000 범위로 지정할 수 있습니다. 발행 처리는 배치로 비동기 처리됩니다. Result 타입 설명 item IssueJob 시리얼 코드 발행 작업 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . Issue ( \u0026 serial_key . IssueRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), Metadata : nil , IssueRequestCount : pointy . Int32 ( 30 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\IssueRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e issue ( ( new IssueRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) -\u003e withMetadata ( null ) -\u003e withIssueRequestCount ( 30 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.IssueRequest ; import io.gs2.serialKey.result.IssueResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { IssueResult result = client . issue ( new IssueRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withMetadata ( null ) . withIssueRequestCount ( 30 ) ); IssueJob item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . IssueResult \u003e asyncResult = null ; yield return client . Issue ( new Gs2 . Gs2SerialKey . Request . IssueRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ) . WithMetadata ( null ) . WithIssueRequestCount ( 30 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . issue ( new Gs2SerialKey . IssueRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withMetadata ( null ) . withIssueRequestCount ( 30 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . issue ( serial_key . IssueRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) . with_metadata ( None ) . with_issue_request_count ( 30 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.issue ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , metadata = nil , issueRequestCount = 30 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.issue_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , metadata = nil , issueRequestCount = 30 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSerialKeys 시리얼 코드 목록 조회 완료된 발행 작업에 의해 생성된 시리얼 코드의 페이지네이션 목록을 조회합니다. 효율적인 조회를 위해 코드는 병렬로 로드되며, 인메모리 버퍼를 통해 페이지네이션됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 issueJobName string  UUID ~ 36자 시리얼 코드 발행 작업 이름 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 시리얼 코드 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DescribeSerialKeys ( \u0026 serial_key . DescribeSerialKeysRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), IssueJobName : pointy . String ( \"job-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DescribeSerialKeysRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e describeSerialKeys ( ( new DescribeSerialKeysRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) -\u003e withIssueJobName ( \"job-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DescribeSerialKeysRequest ; import io.gs2.serialKey.result.DescribeSerialKeysResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DescribeSerialKeysResult result = client . describeSerialKeys ( new DescribeSerialKeysRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withIssueJobName ( \"job-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List SerialKey \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DescribeSerialKeysResult \u003e asyncResult = null ; yield return client . DescribeSerialKeys ( new Gs2 . Gs2SerialKey . Request . DescribeSerialKeysRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ) . WithIssueJobName ( \"job-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . describeSerialKeys ( new Gs2SerialKey . DescribeSerialKeysRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withIssueJobName ( \"job-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . describe_serial_keys ( serial_key . DescribeSerialKeysRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) . with_issue_job_name ( 'job-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.describe_serial_keys ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , issueJobName = \"job-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'serial_key' ) api_result_handler = client.describe_serial_keys_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , issueJobName = \"job-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; downloadSerialCodes 시리얼 코드 목록을 파일 형식으로 조회 완료된 발행 작업에서 모든 시리얼 코드를 파일로 다운로드하기 위한 서명된 URL을 생성합니다. 시리얼 코드의 일괄 내보내기에 적합합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 issueJobName string  UUID ~ 36자 시리얼 코드 발행 작업 이름 Result 타입 설명 url string 파일 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DownloadSerialCodes ( \u0026 serial_key . DownloadSerialCodesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), IssueJobName : pointy . String ( \"job-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DownloadSerialCodesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e downloadSerialCodes ( ( new DownloadSerialCodesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) -\u003e withIssueJobName ( \"job-0001\" ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DownloadSerialCodesRequest ; import io.gs2.serialKey.result.DownloadSerialCodesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DownloadSerialCodesResult result = client . downloadSerialCodes ( new DownloadSerialCodesRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withIssueJobName ( \"job-0001\" ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DownloadSerialCodesResult \u003e asyncResult = null ; yield return client . DownloadSerialCodes ( new Gs2 . Gs2SerialKey . Request . DownloadSerialCodesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ) . WithIssueJobName ( \"job-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . downloadSerialCodes ( new Gs2SerialKey . DownloadSerialCodesRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withIssueJobName ( \"job-0001\" ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . download_serial_codes ( serial_key . DownloadSerialCodesRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) . with_issue_job_name ( 'job-0001' ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.download_serial_codes ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , issueJobName = \"job-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'serial_key' ) api_result_handler = client.download_serial_codes_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , issueJobName = \"job-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; issueOnce 시리얼 코드 1건 발행 시리얼 코드를 1건 즉시 발행합니다. 코드는 AES 암호화와 base32 인코딩을 사용하여 XXXXX-XXXX-XXXXX-XXXX-XXXXX 형식으로 생성됩니다. 배치 발행 작업과 달리 동기적으로 코드를 생성하여 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Result 타입 설명 item SerialKey 시리얼 코드 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . IssueOnce ( \u0026 serial_key . IssueOnceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), Metadata : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\IssueOnceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e issueOnce ( ( new IssueOnceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) -\u003e withMetadata ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.IssueOnceRequest ; import io.gs2.serialKey.result.IssueOnceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { IssueOnceResult result = client . issueOnce ( new IssueOnceRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withMetadata ( null ) ); SerialKey item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . IssueOnceResult \u003e asyncResult = null ; yield return client . IssueOnce ( new Gs2 . Gs2SerialKey . Request . IssueOnceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ) . WithMetadata ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . issueOnce ( new Gs2SerialKey . IssueOnceRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withMetadata ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . issue_once ( serial_key . IssueOnceRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) . with_metadata ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.issue_once ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , metadata = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.issue_once_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , metadata = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSerialKey 시리얼 코드 조회 관련된 캠페인 모델과 함께 지정된 시리얼 코드를 조회합니다. 코드의 사용 현황과 메타데이터를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. Result 타입 설명 item SerialKey 시리얼 코드 campaignModel CampaignModel 캠페인 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . GetSerialKey ( \u0026 serial_key . GetSerialKeyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Code : pointy . String ( \"code-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item campaignModel := result . CampaignModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\GetSerialKeyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e getSerialKey ( ( new GetSerialKeyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCode ( \"code-0001\" ) ); $item = $result -\u003e getItem (); $campaignModel = $result -\u003e getCampaignModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.GetSerialKeyRequest ; import io.gs2.serialKey.result.GetSerialKeyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { GetSerialKeyResult result = client . getSerialKey ( new GetSerialKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withCode ( \"code-0001\" ) ); SerialKey item = result . getItem (); CampaignModel campaignModel = result . getCampaignModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . GetSerialKeyResult \u003e asyncResult = null ; yield return client . GetSerialKey ( new Gs2 . Gs2SerialKey . Request . GetSerialKeyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCode ( \"code-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var campaignModel = result . CampaignModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . getSerialKey ( new Gs2SerialKey . GetSerialKeyRequest () . withNamespaceName ( \"namespace-0001\" ) . withCode ( \"code-0001\" ) ); const item = result . getItem (); const campaignModel = result . getCampaignModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . get_serial_key ( serial_key . GetSerialKeyRequest () . with_namespace_name ( 'namespace-0001' ) . with_code ( 'code-0001' ) ) item = result . item campaign_model = result . campaign_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.get_serial_key ({ namespaceName = \"namespace-0001\" , code = \"code-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; client = gs2 ( 'serial_key' ) api_result_handler = client.get_serial_key_async ({ namespaceName = \"namespace-0001\" , code = \"code-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; verifyCode 시리얼 코드의 유효성 확인 시리얼 코드를 소비하지 않고 검증합니다. 특정 캠페인 모델 이름에 대한 검증을 지원하며, 코드가 active(미사용)인지 inactive(사용 완료)인지 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. campaignModelName string ~ 128자 캠페인 이름 이 시리얼 코드가 속한 캠페인 모델의 이름입니다. 캠페인 정보는 시리얼 코드 자체에 포함되어 있으므로 코드를 사용할 때는 네임스페이스만 지정하면 됩니다. verifyType 문자열 열거형 enum {   “active”,   “inactive” }  검증 타입 정의 설명 active 유효 inactive 비활성 Result 타입 설명 item SerialKey 시리얼 코드 campaignModel CampaignModel 캠페인 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . VerifyCode ( \u0026 serial_key . VerifyCodeRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Code : pointy . String ( \"code-0001\" ), CampaignModelName : nil , VerifyType : pointy . String ( \"inactive\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item campaignModel := result . CampaignModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\VerifyCodeRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e verifyCode ( ( new VerifyCodeRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCode ( \"code-0001\" ) -\u003e withCampaignModelName ( null ) -\u003e withVerifyType ( \"inactive\" ) ); $item = $result -\u003e getItem (); $campaignModel = $result -\u003e getCampaignModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.VerifyCodeRequest ; import io.gs2.serialKey.result.VerifyCodeResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { VerifyCodeResult result = client . verifyCode ( new VerifyCodeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCode ( \"code-0001\" ) . withCampaignModelName ( null ) . withVerifyType ( \"inactive\" ) ); SerialKey item = result . getItem (); CampaignModel campaignModel = result . getCampaignModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . VerifyCodeResult \u003e asyncResult = null ; yield return client . VerifyCode ( new Gs2 . Gs2SerialKey . Request . VerifyCodeRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCode ( \"code-0001\" ) . WithCampaignModelName ( null ) . WithVerifyType ( \"inactive\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var campaignModel = result . CampaignModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . verifyCode ( new Gs2SerialKey . VerifyCodeRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCode ( \"code-0001\" ) . withCampaignModelName ( null ) . withVerifyType ( \"inactive\" ) ); const item = result . getItem (); const campaignModel = result . getCampaignModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . verify_code ( serial_key . VerifyCodeRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_code ( 'code-0001' ) . with_campaign_model_name ( None ) . with_verify_type ( 'inactive' ) ) item = result . item campaign_model = result . campaign_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.verify_code ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , code = \"code-0001\" , campaignModelName = nil , verifyType = \"inactive\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; client = gs2 ( 'serial_key' ) api_result_handler = client.verify_code_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , code = \"code-0001\" , campaignModelName = nil , verifyType = \"inactive\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; verifyCodeByUserId 사용자 ID를 지정하여 시리얼 코드의 유효성 확인 지정된 사용자의 시리얼 코드를 소비하지 않고 검증합니다. 특정 캠페인 모델 이름에 대한 검증을 지원하며, 코드가 active(미사용)인지 inactive(사용 완료)인지 확인할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. campaignModelName string ~ 128자 캠페인 이름 이 시리얼 코드가 속한 캠페인 모델의 이름입니다. 캠페인 정보는 시리얼 코드 자체에 포함되어 있으므로 코드를 사용할 때는 네임스페이스만 지정하면 됩니다. verifyType 문자열 열거형 enum {   “active”,   “inactive” }  검증 타입 정의 설명 active 유효 inactive 비활성 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SerialKey 시리얼 코드 campaignModel CampaignModel 캠페인 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . VerifyCodeByUserId ( \u0026 serial_key . VerifyCodeByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Code : pointy . String ( \"code-0001\" ), CampaignModelName : nil , VerifyType : pointy . String ( \"inactive\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item campaignModel := result . CampaignModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\VerifyCodeByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e verifyCodeByUserId ( ( new VerifyCodeByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCode ( \"code-0001\" ) -\u003e withCampaignModelName ( null ) -\u003e withVerifyType ( \"inactive\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $campaignModel = $result -\u003e getCampaignModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.VerifyCodeByUserIdRequest ; import io.gs2.serialKey.result.VerifyCodeByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { VerifyCodeByUserIdResult result = client . verifyCodeByUserId ( new VerifyCodeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCode ( \"code-0001\" ) . withCampaignModelName ( null ) . withVerifyType ( \"inactive\" ) . withTimeOffsetToken ( null ) ); SerialKey item = result . getItem (); CampaignModel campaignModel = result . getCampaignModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . VerifyCodeByUserIdResult \u003e asyncResult = null ; yield return client . VerifyCodeByUserId ( new Gs2 . Gs2SerialKey . Request . VerifyCodeByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCode ( \"code-0001\" ) . WithCampaignModelName ( null ) . WithVerifyType ( \"inactive\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var campaignModel = result . CampaignModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . verifyCodeByUserId ( new Gs2SerialKey . VerifyCodeByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCode ( \"code-0001\" ) . withCampaignModelName ( null ) . withVerifyType ( \"inactive\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const campaignModel = result . getCampaignModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . verify_code_by_user_id ( serial_key . VerifyCodeByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_code ( 'code-0001' ) . with_campaign_model_name ( None ) . with_verify_type ( 'inactive' ) . with_time_offset_token ( None ) ) item = result . item campaign_model = result . campaign_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.verify_code_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , code = \"code-0001\" , campaignModelName = nil , verifyType = \"inactive\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; client = gs2 ( 'serial_key' ) api_result_handler = client.verify_code_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , code = \"code-0001\" , campaignModelName = nil , verifyType = \"inactive\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; use 시리얼 코드 사용 처리 현재 사용자에 의해 시리얼 코드를 사용 완료로 표시합니다. 코드가 존재하고 아직 사용되지 않았음을 검증합니다. 코드를 찾을 수 없거나 이미 소비된 경우 오류를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. Result 타입 설명 item SerialKey 시리얼 코드 campaignModel CampaignModel 캠페인 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . Use ( \u0026 serial_key . UseRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Code : pointy . String ( \"code-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item campaignModel := result . CampaignModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\UseRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e use ( ( new UseRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCode ( \"code-0001\" ) ); $item = $result -\u003e getItem (); $campaignModel = $result -\u003e getCampaignModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.UseRequest ; import io.gs2.serialKey.result.UseResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { UseResult result = client . use ( new UseRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCode ( \"code-0001\" ) ); SerialKey item = result . getItem (); CampaignModel campaignModel = result . getCampaignModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . UseResult \u003e asyncResult = null ; yield return client . Use ( new Gs2 . Gs2SerialKey . Request . UseRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCode ( \"code-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var campaignModel = result . CampaignModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . use ( new Gs2SerialKey . UseRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCode ( \"code-0001\" ) ); const item = result . getItem (); const campaignModel = result . getCampaignModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . use ( serial_key . UseRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_code ( 'code-0001' ) ) item = result . item campaign_model = result . campaign_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.use ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , code = \"code-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; client = gs2 ( 'serial_key' ) api_result_handler = client.use_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , code = \"code-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; useByUserId 사용자 ID를 지정하여 시리얼 코드 사용 처리 지정된 사용자에 의해 시리얼 코드를 사용 완료로 표시합니다. 코드가 존재하고 아직 사용되지 않았음을 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SerialKey 시리얼 코드 campaignModel CampaignModel 캠페인 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . UseByUserId ( \u0026 serial_key . UseByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Code : pointy . String ( \"code-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item campaignModel := result . CampaignModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\UseByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e useByUserId ( ( new UseByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCode ( \"code-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $campaignModel = $result -\u003e getCampaignModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.UseByUserIdRequest ; import io.gs2.serialKey.result.UseByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { UseByUserIdResult result = client . useByUserId ( new UseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCode ( \"code-0001\" ) . withTimeOffsetToken ( null ) ); SerialKey item = result . getItem (); CampaignModel campaignModel = result . getCampaignModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . UseByUserIdResult \u003e asyncResult = null ; yield return client . UseByUserId ( new Gs2 . Gs2SerialKey . Request . UseByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCode ( \"code-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var campaignModel = result . CampaignModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . useByUserId ( new Gs2SerialKey . UseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCode ( \"code-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const campaignModel = result . getCampaignModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . use_by_user_id ( serial_key . UseByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_code ( 'code-0001' ) . with_time_offset_token ( None ) ) item = result . item campaign_model = result . campaign_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.use_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , code = \"code-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; client = gs2 ( 'serial_key' ) api_result_handler = client.use_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , code = \"code-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; revertUseByUserId 사용자 ID를 지정하여 시리얼 코드 미사용 처리 사용 완료된 시리얼 코드를 미사용 상태로 되돌립니다. 되돌리기 전에 코드가 현재 사용 완료 상태임을 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SerialKey 시리얼 코드 campaignModel CampaignModel 캠페인 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . RevertUseByUserId ( \u0026 serial_key . RevertUseByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Code : pointy . String ( \"code-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item campaignModel := result . CampaignModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\RevertUseByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e revertUseByUserId ( ( new RevertUseByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCode ( \"code-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $campaignModel = $result -\u003e getCampaignModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.RevertUseByUserIdRequest ; import io.gs2.serialKey.result.RevertUseByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { RevertUseByUserIdResult result = client . revertUseByUserId ( new RevertUseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCode ( \"code-0001\" ) . withTimeOffsetToken ( null ) ); SerialKey item = result . getItem (); CampaignModel campaignModel = result . getCampaignModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . RevertUseByUserIdResult \u003e asyncResult = null ; yield return client . RevertUseByUserId ( new Gs2 . Gs2SerialKey . Request . RevertUseByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithCode ( \"code-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var campaignModel = result . CampaignModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . revertUseByUserId ( new Gs2SerialKey . RevertUseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withCode ( \"code-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const campaignModel = result . getCampaignModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . revert_use_by_user_id ( serial_key . RevertUseByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_code ( 'code-0001' ) . with_time_offset_token ( None ) ) item = result . item campaign_model = result . campaign_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.revert_use_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , code = \"code-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; client = gs2 ( 'serial_key' ) api_result_handler = client.revert_use_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , code = \"code-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; campaignModel = result.campaignModel ; describeCampaignModels 캠페인 모델 목록 조회 네임스페이스 내에서 현재 활성화된 캠페인 모델의 목록을 조회합니다. 캠페인 모델은 캠페인 코드 활성화 여부를 포함한 시리얼 코드 캠페인의 설정을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 캠페인 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DescribeCampaignModels ( \u0026 serial_key . DescribeCampaignModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DescribeCampaignModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e describeCampaignModels ( ( new DescribeCampaignModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DescribeCampaignModelsRequest ; import io.gs2.serialKey.result.DescribeCampaignModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DescribeCampaignModelsResult result = client . describeCampaignModels ( new DescribeCampaignModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List CampaignModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DescribeCampaignModelsResult \u003e asyncResult = null ; yield return client . DescribeCampaignModels ( new Gs2 . Gs2SerialKey . Request . DescribeCampaignModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . describeCampaignModels ( new Gs2SerialKey . DescribeCampaignModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . describe_campaign_models ( serial_key . DescribeCampaignModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.describe_campaign_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'serial_key' ) api_result_handler = client.describe_campaign_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getCampaignModel 캠페인 모델 조회 이름, 메타데이터, 캠페인 코드 활성화 설정을 포함하여 지정된 캠페인 모델을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 Result 타입 설명 item CampaignModel 캠페인 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . GetCampaignModel ( \u0026 serial_key . GetCampaignModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\GetCampaignModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e getCampaignModel ( ( new GetCampaignModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.GetCampaignModelRequest ; import io.gs2.serialKey.result.GetCampaignModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { GetCampaignModelResult result = client . getCampaignModel ( new GetCampaignModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) ); CampaignModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . GetCampaignModelResult \u003e asyncResult = null ; yield return client . GetCampaignModel ( new Gs2 . Gs2SerialKey . Request . GetCampaignModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . getCampaignModel ( new Gs2SerialKey . GetCampaignModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . get_campaign_model ( serial_key . GetCampaignModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.get_campaign_model ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.get_campaign_model_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 캠페인 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 등록되어 있는 캠페인 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보냅니다. 내보낸 데이터에는 캠페인 코드 활성화 설정을 포함한 모든 캠페인 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentCampaignMaster 활성화 가능한 캠페인 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 serial_key . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.ExportMasterRequest ; import io.gs2.serialKey.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentCampaignMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2SerialKey . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . exportMaster ( new Gs2SerialKey . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . export_master ( serial_key . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentCampaignMaster 현재 활성화된 캠페인 모델의 마스터 데이터 조회 시리얼 코드 관리에 사용되고 있는 모든 캠페인 정의를 포함한, 현재 활성화된 캠페인 모델 마스터 데이터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentCampaignMaster 현재 활성화된 캠페인 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . GetCurrentCampaignMaster ( \u0026 serial_key . GetCurrentCampaignMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\GetCurrentCampaignMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e getCurrentCampaignMaster ( ( new GetCurrentCampaignMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.GetCurrentCampaignMasterRequest ; import io.gs2.serialKey.result.GetCurrentCampaignMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { GetCurrentCampaignMasterResult result = client . getCurrentCampaignMaster ( new GetCurrentCampaignMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentCampaignMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . GetCurrentCampaignMasterResult \u003e asyncResult = null ; yield return client . GetCurrentCampaignMaster ( new Gs2 . Gs2SerialKey . Request . GetCurrentCampaignMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . getCurrentCampaignMaster ( new Gs2SerialKey . GetCurrentCampaignMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . get_current_campaign_master ( serial_key . GetCurrentCampaignMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.get_current_campaign_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.get_current_campaign_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentCampaignMaster 현재 활성화된 캠페인 모델의 마스터 데이터 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 갱신을 진행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. 업로드로 취득한 토큰을 전달하여 UpdateCurrentCampaignMaster를 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentCampaignMaster ( \u0026 serial_key . PreUpdateCurrentCampaignMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\PreUpdateCurrentCampaignMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentCampaignMaster ( ( new PreUpdateCurrentCampaignMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.PreUpdateCurrentCampaignMasterRequest ; import io.gs2.serialKey.result.PreUpdateCurrentCampaignMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { PreUpdateCurrentCampaignMasterResult result = client . preUpdateCurrentCampaignMaster ( new PreUpdateCurrentCampaignMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . PreUpdateCurrentCampaignMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentCampaignMaster ( new Gs2 . Gs2SerialKey . Request . PreUpdateCurrentCampaignMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . preUpdateCurrentCampaignMaster ( new Gs2SerialKey . PreUpdateCurrentCampaignMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . pre_update_current_campaign_master ( serial_key . PreUpdateCurrentCampaignMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.pre_update_current_campaign_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'serial_key' ) api_result_handler = client.pre_update_current_campaign_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentCampaignMaster 현재 활성화된 캠페인 모델의 마스터 데이터 갱신 현재 활성화된 캠페인 모델 마스터 데이터를 갱신합니다. 대용량 마스터 데이터에 대응하기 위해 직접 갱신 모드와 사전 업로드 모드를 모두 지원합니다. 사전 업로드 모드에서는 PreUpdate API로 취득한 업로드 토큰을 사용하여 설정을 읽어옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 갱신 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentCampaignMaster 갱신된 현재 활성화된 캠페인 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentCampaignMaster ( \u0026 serial_key . UpdateCurrentCampaignMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2022-09-13\\\", \\\"campaignModels\\\": [{\\\"name\\\": \\\"campaign-0001\\\", \\\"metadata\\\": \\\"CAMPAIGN_0001\\\", \\\"enableCampaignCode\\\": true}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\UpdateCurrentCampaignMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e updateCurrentCampaignMaster ( ( new UpdateCurrentCampaignMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2022-09-13 \\\" , \\\" campaignModels \\\" : [{ \\\" name \\\" : \\\" campaign-0001 \\\" , \\\" metadata \\\" : \\\" CAMPAIGN_0001 \\\" , \\\" enableCampaignCode \\\" : true}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.UpdateCurrentCampaignMasterRequest ; import io.gs2.serialKey.result.UpdateCurrentCampaignMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { UpdateCurrentCampaignMasterResult result = client . updateCurrentCampaignMaster ( new UpdateCurrentCampaignMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2022-09-13\\\", \\\"campaignModels\\\": [{\\\"name\\\": \\\"campaign-0001\\\", \\\"metadata\\\": \\\"CAMPAIGN_0001\\\", \\\"enableCampaignCode\\\": true}]}\" ) . withUploadToken ( null ) ); CurrentCampaignMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . UpdateCurrentCampaignMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentCampaignMaster ( new Gs2 . Gs2SerialKey . Request . UpdateCurrentCampaignMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2022-09-13\\\", \\\"campaignModels\\\": [{\\\"name\\\": \\\"campaign-0001\\\", \\\"metadata\\\": \\\"CAMPAIGN_0001\\\", \\\"enableCampaignCode\\\": true}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . updateCurrentCampaignMaster ( new Gs2SerialKey . UpdateCurrentCampaignMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2022-09-13\\\", \\\"campaignModels\\\": [{\\\"name\\\": \\\"campaign-0001\\\", \\\"metadata\\\": \\\"CAMPAIGN_0001\\\", \\\"enableCampaignCode\\\": true}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . update_current_campaign_master ( serial_key . UpdateCurrentCampaignMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2022-09-13\", \"campaignModels\": [{\"name\": \"campaign-0001\", \"metadata\": \"CAMPAIGN_0001\", \"enableCampaignCode\": true}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.update_current_campaign_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2022-09-13 \\\" , \\\" campaignModels \\\" : [{ \\\" name \\\" : \\\" campaign-0001 \\\" , \\\" metadata \\\" : \\\" CAMPAIGN_0001 \\\" , \\\" enableCampaignCode \\\" : true}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.update_current_campaign_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2022-09-13 \\\" , \\\" campaignModels \\\" : [{ \\\" name \\\" : \\\" campaign-0001 \\\" , \\\" metadata \\\" : \\\" CAMPAIGN_0001 \\\" , \\\" enableCampaignCode \\\" : true}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentCampaignMasterFromGitHub 현재 활성화된 캠페인 모델의 마스터 데이터를 GitHub에서 갱신 지정된 체크아웃 설정을 사용하여 GitHub 리포지토리에서 마스터 데이터를 체크아웃하고, 현재 활성화된 캠페인 모델 마스터 데이터를 갱신합니다. GitHub와의 인증에는 키 서비스를 통해 API 키가 복호화되어 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentCampaignMaster 갱신된 현재 활성화된 캠페인 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentCampaignMasterFromGitHub ( \u0026 serial_key . UpdateCurrentCampaignMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 serialKey . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\UpdateCurrentCampaignMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e updateCurrentCampaignMasterFromGitHub ( ( new UpdateCurrentCampaignMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.UpdateCurrentCampaignMasterFromGitHubRequest ; import io.gs2.serialKey.result.UpdateCurrentCampaignMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { UpdateCurrentCampaignMasterFromGitHubResult result = client . updateCurrentCampaignMasterFromGitHub ( new UpdateCurrentCampaignMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentCampaignMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . UpdateCurrentCampaignMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentCampaignMasterFromGitHub ( new Gs2 . Gs2SerialKey . Request . UpdateCurrentCampaignMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2SerialKey . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . updateCurrentCampaignMasterFromGitHub ( new Gs2SerialKey . UpdateCurrentCampaignMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2SerialKey . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . update_current_campaign_master_from_git_hub ( serial_key . UpdateCurrentCampaignMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( serial_key . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.update_current_campaign_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.update_current_campaign_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeCampaignModelMasters 캠페인 모델 마스터 목록 조회 캠페인 모델 마스터의 페이지네이션 목록을 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 캠페인 모델 마스터는 캠페인 코드 활성화를 포함한 시리얼 코드 캠페인의 설정을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 캠페인 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 캠페인 모델 마스터 데이터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DescribeCampaignModelMasters ( \u0026 serial_key . DescribeCampaignModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DescribeCampaignModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e describeCampaignModelMasters ( ( new DescribeCampaignModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DescribeCampaignModelMastersRequest ; import io.gs2.serialKey.result.DescribeCampaignModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DescribeCampaignModelMastersResult result = client . describeCampaignModelMasters ( new DescribeCampaignModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List CampaignModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DescribeCampaignModelMastersResult \u003e asyncResult = null ; yield return client . DescribeCampaignModelMasters ( new Gs2 . Gs2SerialKey . Request . DescribeCampaignModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . describeCampaignModelMasters ( new Gs2SerialKey . DescribeCampaignModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . describe_campaign_model_masters ( serial_key . DescribeCampaignModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.describe_campaign_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'serial_key' ) api_result_handler = client.describe_campaign_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createCampaignModelMaster 캠페인 모델 마스터 데이터 신규 생성 이름, 설명, 메타데이터, 그리고 이 캠페인에서 캠페인 코드를 사용할 수 있는지 여부를 제어하는 enableCampaignCode 플래그를 가진 새로운 캠페인 모델 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 캠페인 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. enableCampaignCode bool false 캠페인 코드에 의한 교환을 허용할지 여부 활성화하면 개별 시리얼 코드가 아닌 공통 캠페인 코드(캠페인 이름)를 사용하여 보상을 교환할 수 있게 됩니다. 이를 통해 하나의 코드를 여러 사용자가 사용할 수 있습니다. Result 타입 설명 item CampaignModelMaster 생성한 캠페인 모델 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . CreateCampaignModelMaster ( \u0026 serial_key . CreateCampaignModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"campaign-0001\" ), Description : nil , Metadata : nil , EnableCampaignCode : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\CreateCampaignModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e createCampaignModelMaster ( ( new CreateCampaignModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"campaign-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withEnableCampaignCode ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.CreateCampaignModelMasterRequest ; import io.gs2.serialKey.result.CreateCampaignModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { CreateCampaignModelMasterResult result = client . createCampaignModelMaster ( new CreateCampaignModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"campaign-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withEnableCampaignCode ( null ) ); CampaignModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . CreateCampaignModelMasterResult \u003e asyncResult = null ; yield return client . CreateCampaignModelMaster ( new Gs2 . Gs2SerialKey . Request . CreateCampaignModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"campaign-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithEnableCampaignCode ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . createCampaignModelMaster ( new Gs2SerialKey . CreateCampaignModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"campaign-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withEnableCampaignCode ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . create_campaign_model_master ( serial_key . CreateCampaignModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'campaign-0001' ) . with_description ( None ) . with_metadata ( None ) . with_enable_campaign_code ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.create_campaign_model_master ({ namespaceName = \"namespace-0001\" , name = \"campaign-0001\" , description = nil , metadata = nil , enableCampaignCode = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.create_campaign_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"campaign-0001\" , description = nil , metadata = nil , enableCampaignCode = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCampaignModelMaster 캠페인 모델 마스터 데이터 조회 이름, 설명, 메타데이터, 캠페인 코드 활성화 설정을 포함하여 지정된 캠페인 모델 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 Result 타입 설명 item CampaignModelMaster 캠페인 모델 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . GetCampaignModelMaster ( \u0026 serial_key . GetCampaignModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\GetCampaignModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e getCampaignModelMaster ( ( new GetCampaignModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.GetCampaignModelMasterRequest ; import io.gs2.serialKey.result.GetCampaignModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { GetCampaignModelMasterResult result = client . getCampaignModelMaster ( new GetCampaignModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) ); CampaignModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . GetCampaignModelMasterResult \u003e asyncResult = null ; yield return client . GetCampaignModelMaster ( new Gs2 . Gs2SerialKey . Request . GetCampaignModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . getCampaignModelMaster ( new Gs2SerialKey . GetCampaignModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . get_campaign_model_master ( serial_key . GetCampaignModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.get_campaign_model_master ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.get_campaign_model_master_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCampaignModelMaster 캠페인 모델 마스터 갱신 지정된 캠페인 모델 마스터의 설명, 메타데이터, 캠페인 코드 활성화 설정을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. enableCampaignCode bool false 캠페인 코드에 의한 교환을 허용할지 여부 활성화하면 개별 시리얼 코드가 아닌 공통 캠페인 코드(캠페인 이름)를 사용하여 보상을 교환할 수 있게 됩니다. 이를 통해 하나의 코드를 여러 사용자가 사용할 수 있습니다. Result 타입 설명 item CampaignModelMaster 갱신한 캠페인 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . UpdateCampaignModelMaster ( \u0026 serial_key . UpdateCampaignModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), EnableCampaignCode : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\UpdateCampaignModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e updateCampaignModelMaster ( ( new UpdateCampaignModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) -\u003e withEnableCampaignCode ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.UpdateCampaignModelMasterRequest ; import io.gs2.serialKey.result.UpdateCampaignModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { UpdateCampaignModelMasterResult result = client . updateCampaignModelMaster ( new UpdateCampaignModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withEnableCampaignCode ( null ) ); CampaignModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . UpdateCampaignModelMasterResult \u003e asyncResult = null ; yield return client . UpdateCampaignModelMaster ( new Gs2 . Gs2SerialKey . Request . UpdateCampaignModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . WithEnableCampaignCode ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . updateCampaignModelMaster ( new Gs2SerialKey . UpdateCampaignModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withEnableCampaignCode ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . update_campaign_model_master ( serial_key . UpdateCampaignModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"hoge\": \"fuga\"}' ) . with_enable_campaign_code ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.update_campaign_model_master ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , enableCampaignCode = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.update_campaign_model_master_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , enableCampaignCode = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteCampaignModelMaster 캠페인 모델 마스터 삭제 지정된 캠페인 모델 마스터를 삭제합니다. 이는 마스터 정의만을 삭제하며, 현재 활성화된 캠페인 모델에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 Result 타입 설명 item CampaignModelMaster 삭제한 캠페인 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/serialKey\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := serial_key . Gs2SerialKeyRestClient { Session : \u0026 session , } result , err := client . DeleteCampaignModelMaster ( \u0026 serial_key . DeleteCampaignModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CampaignModelName : pointy . String ( \"campaign-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SerialKey\\Gs2SerialKeyRestClient ; use Gs2\\SerialKey\\Request\\DeleteCampaignModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SerialKeyRestClient ( $session ); try { $result = $client -\u003e deleteCampaignModelMaster ( ( new DeleteCampaignModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCampaignModelName ( \"campaign-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.serialKey.rest.Gs2SerialKeyRestClient ; import io.gs2.serialKey.request.DeleteCampaignModelMasterRequest ; import io.gs2.serialKey.result.DeleteCampaignModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SerialKeyRestClient client = new Gs2SerialKeyRestClient ( session ); try { DeleteCampaignModelMasterResult result = client . deleteCampaignModelMaster ( new DeleteCampaignModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) ); CampaignModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SerialKeyRestClient ( session ); AsyncResult Gs2 . Gs2SerialKey . Result . DeleteCampaignModelMasterResult \u003e asyncResult = null ; yield return client . DeleteCampaignModelMaster ( new Gs2 . Gs2SerialKey . Request . DeleteCampaignModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCampaignModelName ( \"campaign-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SerialKey from '@/gs2/serialKey' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SerialKey . Gs2SerialKeyRestClient ( session ); try { const result = await client . deleteCampaignModelMaster ( new Gs2SerialKey . DeleteCampaignModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withCampaignModelName ( \"campaign-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import serial_key session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = serial_key . Gs2SerialKeyRestClient ( session ) try : result = client . delete_campaign_model_master ( serial_key . DeleteCampaignModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_campaign_model_name ( 'campaign-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'serial_key' ) api_result = client.delete_campaign_model_master ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'serial_key' ) api_result_handler = client.delete_campaign_model_master_async ({ namespaceName = \"namespace-0001\" , campaignModelName = \"campaign-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-SerialKey SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-SerialKey SDK API 레퍼런스","url":"/ko/api_reference/serial_key/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 진열대 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. buyScript ScriptSetting 구매를 실행하려고 할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - buy logSetting LogSetting 로그 출력 설정 진열대 열람이나 상품 구매에 관한 API 요청·응답 로그를 출력하는 GS2-Log의 네임스페이스를 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Showcase 진열대 진열대 에는 진열할 상품을 정의할 수 있습니다. 또한 진열대 의 상품 판매 기간을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 showcaseId string ※ ~ 1024자 진열대 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 연관된 GS2-Schedule 이벤트 기간 중에만 진열대를 이용할 수 있습니다. 이벤트가 유효하지 않은 경우, 진열대는 비어 있는 상태로 반환됩니다. displayItems List [] 1 ~ 1000 items 진열할 상품 리스트 이 진열대에 진열되는 상품의 리스트입니다. 각 진열 상품은 단일 상품 또는 상품 그룹 중 하나입니다. 판매 기간 이벤트가 종료되었거나 유효하지 않은 상품은 진열대 조회 시 자동으로 필터링됩니다. DisplayItem 진열 상품 진열대에 표시되는 상품입니다. 단일 상품 또는 상품 그룹 중 하나를 참조할 수 있습니다. 각 진열 상품에는 진열대 전체의 판매 기간과는 독립적으로 GS2-Schedule 이벤트에 의한 개별 판매 기간을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 displayItemId string  UUID ~ 128자 진열 상품 ID 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. type 문자열 열거형 enum {   “salesItem”,   “salesItemGroup” }  종류 표시할 상품의 종류입니다. “salesItem\"은 고정된 대가와 보상을 가진 단일 상품입니다. “salesItemGroup\"은 여러 상품을 순서대로 평가하는 상품 그룹으로, 단계별 가격 인상이나 초회 한정 할인 등에 사용됩니다. 정의 설명 salesItem 상품 salesItemGroup 상품 그룹 salesItem SalesItem {type} == “salesItem” ※ 상품 ※ type이(가) “salesItem” 이면 필수 salesItemGroup SalesItemGroup {type} == “salesItemGroup” ※ 상품 그룹 ※ type이(가) “salesItemGroup” 이면 필수 salesPeriodEventId string ~ 1024자 이 진열 상품의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 개별 진열 상품의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대에 표시됩니다. 진열대 전체의 판매 기간과는 독립적으로 동작합니다. RandomShowcase 랜덤 진열대 랜덤 진열대는 지정한 주기로 교체되는, 랜덤으로 선별된 상품이 진열되는 진열대 모델입니다. 선별되는 상품은 상품 풀에 등록된 상품 중에서 지정된 수량이 상품별로 설정된 가중치에 기반하여 랜덤으로 선택됩니다. 랜덤 진열대에는 GS2-Schedule의 이벤트를 연결하여 판매 기간을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 randomShowcaseId string ※ ~ 1024자 랜덤 진열대 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumNumberOfChoice int  1 ~ 100 선택되는 상품의 최대 수 각 로테이션 기간마다 상품 풀에서 랜덤으로 추첨되는 상품의 수입니다. 가중치 기반 랜덤 선택으로 중복 없이 추첨되므로, 한 번의 로테이션에서 같은 상품이 두 번 표시되는 일은 없습니다. displayItems List [] 1 ~ 100 items 선택 대상 진열 상품 목록 상품이 랜덤으로 추첨되는 후보 아이템의 풀입니다. 각 아이템에는 선택 확률을 결정하는 가중치와, 로테이션 전체에서 표시 가능한 횟수를 제한하는 재고 수가 있습니다. baseTimestamp long  진열 상품 재추첨 기준 시간 로테이션 경계 계산에 사용되는 기준 타임스탬프입니다. 이 기준 시간으로부터 일정 간격(resetIntervalHours)마다 상품의 재추첨이 이루어집니다. 과거 시각을 지정해야 합니다. resetIntervalHours int  1 ~ 168 진열 상품을 재추첨하는 간격(시간) 각 상품 로테이션 사이의 시간 수입니다. baseTimestamp를 기준으로 간격이 경과하면 새로운 난수 시드로 진열 상품이 재추첨됩니다. 1~168시간(1주일) 범위에서 설정할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 랜덤 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대를 이용할 수 있습니다. RandomDisplayItem 랜덤 진열대에 진열된 상품 특정 사용자에게 랜덤 진열대에서 추첨·표시된 상품을 나타냅니다. 현재 로테이션 기간에서의 상품 대가, 보상 및 구매 횟수 추적 정보를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 showcaseName string  ~ 128자 랜덤 진열대 이름 name string  UUID ~ 128자 랜덤 진열 상품명 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 목록 consumeActions List [] 0 ~ 10 items 소비 액션 목록 acquireActions List [] 1 ~ 100 items 입수 액션 목록 currentPurchaseCount int  1 ~ 2147483646 현재 구매 횟수 현재 로테이션 기간 중에 이 상품이 구매된 횟수입니다. 구매할 때마다 증가하며, 로테이션 기간이 종료되면 리셋됩니다. maximumPurchaseCount int  1 ~ 2147483646 최대 구매 횟수 현재 로테이션 기간 중에 이 상품을 구매할 수 있는 최대 횟수입니다. currentPurchaseCount가 이 값에 도달하면 다음 로테이션까지 구매할 수 없게 됩니다. RandomDisplayItemModel 랜덤 진열대에 진열 가능한 상품 weight 에 상품을 선별하는 확률을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 128자 랜덤 진열 상품 ID 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 목록 이 랜덤 진열 상품을 구매하기 전에 실행되는 전제 조건 확인입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 목록 이 랜덤 진열 상품의 구매 대가로 리소스를 소비하는 액션입니다. 트랜잭션의 소비 액션으로 실행됩니다. acquireActions List [] 1 ~ 100 items 획득 액션 목록 이 랜덤 진열 상품의 구매 보상으로 리소스를 지급하는 액션입니다. 트랜잭션의 획득 액션으로 실행됩니다. stock int  1 ~ 2147483646 재고 수 모든 로테이션을 통틀어 이 상품이 추첨될 수 있는 최대 횟수입니다. 재고가 0이 되면 이후 추첨에서 제외됩니다. 로테이션 추첨 시 상품이 선택되면 재고가 소비됩니다. weight int  1 ~ 2147483646 추첨 가중치 랜덤 선택에서 이 상품의 상대적인 확률 가중치입니다. 가중치가 클수록 추첨될 확률이 높아집니다. 실제 선택 확률은 이 상품의 가중치를 대상이 되는 모든 상품의 가중치 합계로 나눈 값으로 계산됩니다. SalesItem 상품 상품을 구매하기 위해 필요한 대가와, 상품을 구매했을 때 얻을 수 있는 보상을 설정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 이름 상품 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 구매 전에 실행되는 전제 조건 체크입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 구매 자격 조건 체크에 사용할 수 있습니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 구매 대가로 리소스를 소비하는 액션입니다. 상품 그룹의 구매 횟수 제어를 위해 GS2-Limit의 CountUp 액션을 포함할 수 있습니다. acquireActions List [] 1 ~ 100 items 획득 액션 리스트 구매 보상으로 리소스를 부여하는 액션입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. SalesItemGroup 상품 그룹 상품 그룹은 진열대에 진열하기 위한 엔티티입니다. 상품 그룹에는 여러 상품을 소속시킬 수 있으며, 소속된 상품의 앞에서부터 순서대로 구매 가능한지를 판정하여 가장 먼저 구매 가능하다고 판정된 상품이 실제로 진열됩니다. 최초 1회만 할인되는 상품이나, 스텝업 가챠처럼 구매 횟수에 따라 상품 내용이 변화하는 구조에 사용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. salesItems List [] 2 ~ 10 items 상품 그룹에 포함할 상품 이 그룹 내 상품의 순서가 지정된 리스트입니다. GS2-Limit 카운터를 사용하여 앞에서부터 순서대로 구매 가능한지를 판정하고, 가장 먼저 구매 가능하다고 판정된 상품이 표시됩니다. 어느 것도 해당하지 않는 경우, 리스트의 마지막 상품이 폴백으로 사용됩니다. PurchaseCount 상품 구매 횟수 로테이션 기간 내 특정 랜덤 진열 상품의 구매 횟수를 추적합니다. 구매 시 증가하며, 구매가 취소된 경우 감소합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 구매 횟수 이름 구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다. count int  1 ~ 2147483646 구매 횟수 현재 로테이션 기간 중에 이 상품이 구매된 횟수입니다. 상품별 최대 구매 횟수 제한을 적용하는 데 사용됩니다. ConsumeAction 소비 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 트랜잭션 템플릿에서 치환되는 변수명입니다. 획득 액션 파라미터 내의 플레이스홀더에 대응합니다. value string ~ 51200자 값 트랜잭션 템플릿 내의 대응하는 변수명에 치환되는 값입니다. VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentShowcaseMaster 현재 활성화된 진열대 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 진열대 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Showcase 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 SalesItemMaster 상품 마스터 상품 마스터는 게임 내에서 사용되는 상품 마스터의 편집·관리용 데이터로, 관리 콘솔의 마스터 데이터 에디터에 임시로 저장됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 상품 마스터로 반영됩니다. 상품을 구매하는 데 필요한 대가와, 상품을 구매했을 때 얻을 수 있는 보상을 설정합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 salesItemId string ※ ~ 1024자 상품 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 상품명 상품 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List 0 ~ 10 items 검증 액션 리스트 구매 전에 실행되는 전제 조건 체크입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 구매 자격 조건 체크에 사용할 수 있습니다. consumeActions List 0 ~ 10 items 소비 액션 리스트 구매 대가로 리소스를 소비하는 액션입니다. 상품 그룹의 구매 횟수 제어를 위해 GS2-Limit의 CountUp 액션을 포함할 수 있습니다. acquireActions List  1 ~ 100 items 획득 액션 리스트 구매 보상으로 리소스를 부여하는 액션입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 SalesItemGroupMaster 상품 그룹 마스터 상품 그룹 마스터는 게임 내에서 사용되는 상품 그룹의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 임시로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 상품 그룹으로 반영됩니다. 상품 그룹은 진열대에 진열하기 위한 엔티티입니다. 상품 그룹에는 여러 상품을 소속시킬 수 있으며, 소속된 상품의 앞에서부터 순서대로 구매 가능한지를 판정하여 가장 먼저 구매 가능하다고 판정된 상품이 실제로 진열됩니다. 최초 1회만 할인되는 상품이나, 스텝업 가챠처럼 구매 횟수에 따라 상품 내용이 변화하는 구조에 사용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 salesItemGroupId string ※ ~ 1024자 상품 그룹 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. salesItemNames List  2 ~ 10 items 상품 그룹에 포함할 상품 리스트 이 그룹 내 상품 이름의 순서가 지정된 리스트입니다. GS2-Limit 카운터를 사용하여 앞에서부터 순서대로 구매 가능한지를 판정하고, 가장 먼저 구매 가능하다고 판정된 상품이 표시됩니다. 어느 것도 해당하지 않는 경우, 리스트의 마지막 상품이 폴백으로 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 ShowcaseMaster 진열대 마스터 진열대 마스터는 게임 내에서 사용되는 진열대 의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 임시로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 진열대 로 반영됩니다. 진열대 에는 판매 기간을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 showcaseId string ※ ~ 1024자 진열대 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 연관된 GS2-Schedule 이벤트 기간 중에만 진열대를 이용할 수 있습니다. 이벤트가 유효하지 않은 경우, 진열대는 비어 있는 상태로 반환됩니다. displayItems List  1 ~ 1000 items 진열할 상품 리스트 이 진열대에 진열되는 상품의 리스트입니다. 각 진열 상품은 단일 상품 또는 상품 그룹 중 하나입니다. 판매 기간 이벤트가 종료되었거나 유효하지 않은 상품은 진열대 조회 시 자동으로 필터링됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 DisplayItemMaster 진열 상품 마스터 데이터 진열대에 표시되는 상품의 마스터 데이터입니다. 이름으로 단일 상품 또는 상품 그룹 중 하나를 참조할 수 있습니다. 각 진열 상품에는 진열대 전체의 판매 기간과는 독립적으로 GS2-Schedule 이벤트에 의한 개별 판매 기간을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 displayItemId string  UUID ~ 128자 진열 상품 ID 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. type 문자열 열거형 enum {   “salesItem”,   “salesItemGroup” }  종류 표시할 상품의 종류입니다. “salesItem\"은 고정된 대가와 보상을 가진 단일 상품입니다. “salesItemGroup\"은 여러 상품을 순서대로 평가하는 상품 그룹으로, 단계별 가격 인상이나 초회 한정 할인 등에 사용됩니다. 정의 설명 salesItem 상품 salesItemGroup 상품 그룹 salesItemName string {type} == “salesItem” ※ ~ 128자 상품의 이름 표시할 상품의 이름입니다. 진열 상품의 종류가 “salesItem\"인 경우, 상품 마스터에서 정의된 특정 상품을 참조하기 위해 사용됩니다. ※ type이(가) “salesItem” 이면 필수 salesItemGroupName string {type} == “salesItemGroup” ※ ~ 128자 상품 그룹의 이름 표시할 상품 그룹의 이름입니다. 진열 상품의 종류가 “salesItemGroup\"인 경우, 구매 횟수에 기반하여 여러 상품을 평가하는 상품 그룹을 참조하기 위해 사용됩니다. ※ type이(가) “salesItemGroup” 이면 필수 salesPeriodEventId string ~ 1024자 이 진열 상품의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 개별 진열 상품의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대에 표시됩니다. 진열대 전체의 판매 기간과는 독립적으로 동작합니다. revision long 0 0 ~ 9223372036854775805 리비전 RandomShowcaseMaster 랜덤 진열대 마스터 랜덤 진열대 마스터는 게임 내에서 사용되는 랜덤 진열대의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 임시로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 랜덤 진열대로 반영됩니다. 랜덤 진열대는 지정한 주기로 교체되는, 랜덤으로 선별된 상품이 진열되는 진열대의 모델입니다. 선별되는 상품은 상품 풀에 등록된 상품 중에서 지정된 수량이 상품마다 설정된 가중치를 기반으로 랜덤으로 선택됩니다. 랜덤 진열대에는 GS2-Schedule의 이벤트를 연결함으로써 판매 기간을 설정할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 showcaseId string ※ ~ 1024자 랜덤 진열대 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumNumberOfChoice int  1 ~ 100 선택되는 상품의 최대 수 각 로테이션 기간마다 상품 풀에서 랜덤으로 추첨되는 상품의 수입니다. 가중치 기반 랜덤 선택으로 중복 없이 추첨되므로, 한 번의 로테이션에서 같은 상품이 두 번 표시되는 일은 없습니다. displayItems List  1 ~ 100 items 선정 대상 랜덤 진열 상품 리스트 상품이 랜덤으로 추첨되는 후보 아이템의 풀입니다. 각 아이템에는 선택 확률을 결정하는 가중치와, 로테이션 전체에서 표시 가능한 횟수를 제한하는 재고 수량이 있습니다. baseTimestamp long  진열할 상품을 재추첨하는 기준 시각 로테이션 경계 계산에 사용되는 기준 타임스탬프입니다. 이 기준 시각부터 일정 간격(resetIntervalHours)마다 상품의 재추첨이 이루어집니다. 과거 시각을 지정해야 합니다. resetIntervalHours int  1 ~ 168 진열 상품을 재추첨하는 간격(시간) 각 상품 로테이션 사이의 시간 수입니다. baseTimestamp를 기준으로 간격이 경과하면 새로운 난수 시드로 진열 상품이 재추첨됩니다. 1~168시간(1주일) 범위에서 설정할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 랜덤 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대를 이용할 수 있습니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 showcase . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeNamespacesRequest ; import io.gs2.showcase.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Showcase . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Showcase . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_namespaces ( showcase . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 진열대 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. buyScript ScriptSetting 구매를 실행하려고 할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - buy logSetting LogSetting 로그 출력 설정 진열대 열람이나 상품 구매에 관한 API 요청·응답 로그를 출력하는 GS2-Log의 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 showcase . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 showcase . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, BuyScript : nil , LogSetting : \u0026 showcase . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\Showcase\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withBuyScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Showcase\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CreateNamespaceRequest ; import io.gs2.showcase.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . showcase . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withBuyScript ( null ) . withLogSetting ( new io . gs2 . showcase . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Showcase . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2Showcase . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithBuyScript ( null ) . WithLogSetting ( new Gs2 . Gs2Showcase . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Showcase . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2Showcase . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withBuyScript ( null ) . withLogSetting ( new Gs2Showcase . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . create_namespace ( showcase . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( showcase . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_buy_script ( None ) . with_log_setting ( showcase . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, buyScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, buyScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 showcase . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetNamespaceStatusRequest ; import io.gs2.showcase.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Showcase . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Showcase . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_namespace_status ( showcase . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'showcase' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 showcase . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetNamespaceRequest ; import io.gs2.showcase.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Showcase . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Showcase . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_namespace ( showcase . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 진열대 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. buyScript ScriptSetting 구매를 실행하려고 할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - buy logSetting LogSetting 로그 출력 설정 진열대 열람이나 상품 구매에 관한 API 요청·응답 로그를 출력하는 GS2-Log의 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 showcase . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 showcase . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" ), }, BuyScript : nil , LogSetting : \u0026 showcase . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\Showcase\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) -\u003e withBuyScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Showcase\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.UpdateNamespaceRequest ; import io.gs2.showcase.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . showcase . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withBuyScript ( null ) . withLogSetting ( new io . gs2 . showcase . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Showcase . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2Showcase . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . WithBuyScript ( null ) . WithLogSetting ( new Gs2 . Gs2Showcase . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Showcase . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2Showcase . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" )) . withBuyScript ( null ) . withLogSetting ( new Gs2Showcase . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . update_namespace ( showcase . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( showcase . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002' )) . with_buy_script ( None ) . with_log_setting ( showcase . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, buyScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0002\" , }, buyScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 showcase . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DeleteNamespaceRequest ; import io.gs2.showcase.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Showcase . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Showcase . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . delete_namespace ( showcase . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 showcase . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetServiceVersionRequest ; import io.gs2.showcase.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Showcase . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Showcase . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_service_version ( showcase . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 showcase . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DumpUserDataByUserIdRequest ; import io.gs2.showcase.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Showcase . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Showcase . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . dump_user_data_by_user_id ( showcase . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'showcase' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 showcase . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.showcase.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Showcase . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Showcase . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( showcase . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'showcase' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 showcase . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CleanUserDataByUserIdRequest ; import io.gs2.showcase.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Showcase . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Showcase . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . clean_user_data_by_user_id ( showcase . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'showcase' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 showcase . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.showcase.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Showcase . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Showcase . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( showcase . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'showcase' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 showcase . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.showcase.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Showcase . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Showcase . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( showcase . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'showcase' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 showcase . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.ImportUserDataByUserIdRequest ; import io.gs2.showcase.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Showcase . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Showcase . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . import_user_data_by_user_id ( showcase . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'showcase' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 showcase . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CheckImportUserDataByUserIdRequest ; import io.gs2.showcase.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Showcase . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Showcase . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( showcase . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'showcase' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeShowcases 쇼케이스 목록 가져오기 현재 사용자가 이용할 수 있는 활성화된 쇼케이스 목록을 가져옵니다. 판매 기간 이벤트 설정에 따라 현재 활성화된 쇼케이스만 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 items List 쇼케이스 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeShowcases ( \u0026 showcase . DescribeShowcasesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeShowcasesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeShowcases ( ( new DescribeShowcasesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeShowcasesRequest ; import io.gs2.showcase.result.DescribeShowcasesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeShowcasesResult result = client . describeShowcases ( new DescribeShowcasesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List Showcase \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeShowcasesResult \u003e asyncResult = null ; yield return client . DescribeShowcases ( new Gs2 . Gs2Showcase . Request . DescribeShowcasesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeShowcases ( new Gs2Showcase . DescribeShowcasesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_showcases ( showcase . DescribeShowcasesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_showcases ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_showcases_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeShowcasesByUserId 사용자 ID를 지정하여 쇼케이스 목록 가져오기 지정된 사용자가 이용할 수 있는 활성화된 쇼케이스 목록을 가져옵니다. 판매 기간 이벤트 설정에 따라 현재 활성화된 쇼케이스만 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 쇼케이스 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeShowcasesByUserId ( \u0026 showcase . DescribeShowcasesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeShowcasesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeShowcasesByUserId ( ( new DescribeShowcasesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeShowcasesByUserIdRequest ; import io.gs2.showcase.result.DescribeShowcasesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeShowcasesByUserIdResult result = client . describeShowcasesByUserId ( new DescribeShowcasesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List Showcase \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeShowcasesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeShowcasesByUserId ( new Gs2 . Gs2Showcase . Request . DescribeShowcasesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeShowcasesByUserId ( new Gs2Showcase . DescribeShowcasesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_showcases_by_user_id ( showcase . DescribeShowcasesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_showcases_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_showcases_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getShowcase 쇼케이스 가져오기 현재 사용자를 대상으로 진열 상품을 포함한 지정된 쇼케이스를 가져옵니다. 판매 기간 이벤트 설정에 따라 쇼케이스가 활성화되어 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Showcase 진열대 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetShowcase ( \u0026 showcase . GetShowcaseRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetShowcaseRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getShowcase ( ( new GetShowcaseRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetShowcaseRequest ; import io.gs2.showcase.result.GetShowcaseResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetShowcaseResult result = client . getShowcase ( new GetShowcaseRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Showcase item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetShowcaseResult \u003e asyncResult = null ; yield return client . GetShowcase ( new Gs2 . Gs2Showcase . Request . GetShowcaseRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getShowcase ( new Gs2Showcase . GetShowcaseRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_showcase ( showcase . GetShowcaseRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_showcase ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_showcase_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getShowcaseByUserId 사용자 ID를 지정하여 쇼케이스 가져오기 지정된 사용자를 대상으로 진열 상품을 포함한 지정된 쇼케이스를 가져옵니다. 판매 기간 이벤트 설정에 따라 쇼케이스가 활성화되어 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Showcase 진열대 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetShowcaseByUserId ( \u0026 showcase . GetShowcaseByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetShowcaseByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getShowcaseByUserId ( ( new GetShowcaseByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetShowcaseByUserIdRequest ; import io.gs2.showcase.result.GetShowcaseByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetShowcaseByUserIdResult result = client . getShowcaseByUserId ( new GetShowcaseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Showcase item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetShowcaseByUserIdResult \u003e asyncResult = null ; yield return client . GetShowcaseByUserId ( new Gs2 . Gs2Showcase . Request . GetShowcaseByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getShowcaseByUserId ( new Gs2Showcase . GetShowcaseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_showcase_by_user_id ( showcase . GetShowcaseByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_showcase_by_user_id ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_showcase_by_user_id_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; buy 상품 구매 지정된 쇼케이스에서 진열 상품을 구매합니다. 상품에 정의된 검증, 소비, 획득 액션을 처리하는 트랜잭션이 생성됩니다. 설정값을 전달하여 트랜잭션 변수를 덮어쓸 수도 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. displayItemId string  UUID ~ 128자 진열 상품 ID 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. accessToken string  ~ 128자 액세스 토큰 quantity int 1 1 ~ 1000 구매 수량 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item SalesItem 상품 transactionId string 발행된 트랜잭션 ID stampSheet string 구매 처리를 실행하는 데 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . Buy ( \u0026 showcase . BuyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemId : pointy . String ( \"display-item-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Quantity : nil , Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\BuyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e buy ( ( new BuyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemId ( \"display-item-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withQuantity ( null ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.BuyRequest ; import io.gs2.showcase.result.BuyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { BuyResult result = client . buy ( new BuyRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemId ( \"display-item-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withQuantity ( null ) . withConfig ( null ) ); SalesItem item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . BuyResult \u003e asyncResult = null ; yield return client . Buy ( new Gs2 . Gs2Showcase . Request . BuyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemId ( \"display-item-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithQuantity ( null ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . buy ( new Gs2Showcase . BuyRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemId ( \"display-item-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withQuantity ( null ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . buy ( showcase . BuyRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_id ( 'display-item-0001' ) . with_access_token ( 'accessToken-0001' ) . with_quantity ( None ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.buy ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemId = \"display-item-0001\" , accessToken = \"accessToken-0001\" , quantity = nil , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'showcase' ) api_result_handler = client.buy_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemId = \"display-item-0001\" , accessToken = \"accessToken-0001\" , quantity = nil , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; buyByUserId 사용자 ID를 지정하여 상품 구매 지정된 사용자를 대상으로 지정된 쇼케이스에서 진열 상품을 구매합니다. 상품에 정의된 검증, 소비, 획득 액션을 처리하는 트랜잭션이 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. displayItemId string  UUID ~ 128자 진열 상품 ID 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. userId string  ~ 128자 사용자ID quantity int 1 1 ~ 1000 구매 수량 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item SalesItem 상품 transactionId string 발행된 트랜잭션 ID stampSheet string 구매 처리를 실행하는 데 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . BuyByUserId ( \u0026 showcase . BuyByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemId : pointy . String ( \"display-item-0001\" ), UserId : pointy . String ( \"user-0001\" ), Quantity : nil , Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\BuyByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e buyByUserId ( ( new BuyByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemId ( \"display-item-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withQuantity ( null ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.BuyByUserIdRequest ; import io.gs2.showcase.result.BuyByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { BuyByUserIdResult result = client . buyByUserId ( new BuyByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemId ( \"display-item-0001\" ) . withUserId ( \"user-0001\" ) . withQuantity ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); SalesItem item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . BuyByUserIdResult \u003e asyncResult = null ; yield return client . BuyByUserId ( new Gs2 . Gs2Showcase . Request . BuyByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemId ( \"display-item-0001\" ) . WithUserId ( \"user-0001\" ) . WithQuantity ( null ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . buyByUserId ( new Gs2Showcase . BuyByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemId ( \"display-item-0001\" ) . withUserId ( \"user-0001\" ) . withQuantity ( null ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . buy_by_user_id ( showcase . BuyByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_id ( 'display-item-0001' ) . with_user_id ( 'user-0001' ) . with_quantity ( None ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.buy_by_user_id ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemId = \"display-item-0001\" , userId = \"user-0001\" , quantity = nil , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'showcase' ) api_result_handler = client.buy_by_user_id_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemId = \"display-item-0001\" , userId = \"user-0001\" , quantity = nil , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; incrementPurchaseCount 구매 횟수 가산 랜덤 진열대의 특정 상품에 대한 구매 횟수를 가산합니다. 로테이션 기간별 구매 제한을 추적하는 데 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 displayItemName string  ~ 128자 상품 구매 횟수 이름 구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다. accessToken string  ~ 128자 액세스 토큰 count int  0 ~ 100 가산할 구매 횟수 Result 타입 설명 item RandomDisplayItem 구매 횟수 가산 후의 랜덤 진열 상품 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . IncrementPurchaseCount ( \u0026 showcase . IncrementPurchaseCountRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemName : pointy . String ( \"item-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Count : pointy . Int32 ( 1 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\IncrementPurchaseCountRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e incrementPurchaseCount ( ( new IncrementPurchaseCountRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemName ( \"item-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withCount ( 1 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.IncrementPurchaseCountRequest ; import io.gs2.showcase.result.IncrementPurchaseCountResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { IncrementPurchaseCountResult result = client . incrementPurchaseCount ( new IncrementPurchaseCountRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"item-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCount ( 1 ) ); RandomDisplayItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . IncrementPurchaseCountResult \u003e asyncResult = null ; yield return client . IncrementPurchaseCount ( new Gs2 . Gs2Showcase . Request . IncrementPurchaseCountRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemName ( \"item-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithCount ( 1 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . incrementPurchaseCount ( new Gs2Showcase . IncrementPurchaseCountRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"item-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withCount ( 1 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . increment_purchase_count ( showcase . IncrementPurchaseCountRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_name ( 'item-0001' ) . with_access_token ( 'accessToken-0001' ) . with_count ( 1 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.increment_purchase_count ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"item-0001\" , accessToken = \"accessToken-0001\" , count = 1 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.increment_purchase_count_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"item-0001\" , accessToken = \"accessToken-0001\" , count = 1 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; incrementPurchaseCountByUserId 사용자 ID를 지정하여 구매 횟수 가산 지정된 사용자의 랜덤 진열대에 있는 특정 상품의 구매 횟수를 가산합니다. 로테이션 기간별 구매 제한을 추적하는 데 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 displayItemName string  ~ 128자 상품 구매 횟수 이름 구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다. userId string  ~ 128자 사용자ID count int  0 ~ 100 가산할 구매 횟수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RandomDisplayItem 구매 횟수 가산 후의 랜덤 진열 상품 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . IncrementPurchaseCountByUserId ( \u0026 showcase . IncrementPurchaseCountByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemName : pointy . String ( \"item-0001\" ), UserId : pointy . String ( \"user-0001\" ), Count : pointy . Int32 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\IncrementPurchaseCountByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e incrementPurchaseCountByUserId ( ( new IncrementPurchaseCountByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemName ( \"item-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCount ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.IncrementPurchaseCountByUserIdRequest ; import io.gs2.showcase.result.IncrementPurchaseCountByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { IncrementPurchaseCountByUserIdResult result = client . incrementPurchaseCountByUserId ( new IncrementPurchaseCountByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"item-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withTimeOffsetToken ( null ) ); RandomDisplayItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . IncrementPurchaseCountByUserIdResult \u003e asyncResult = null ; yield return client . IncrementPurchaseCountByUserId ( new Gs2 . Gs2Showcase . Request . IncrementPurchaseCountByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemName ( \"item-0001\" ) . WithUserId ( \"user-0001\" ) . WithCount ( 1 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . incrementPurchaseCountByUserId ( new Gs2Showcase . IncrementPurchaseCountByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"item-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . increment_purchase_count_by_user_id ( showcase . IncrementPurchaseCountByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_name ( 'item-0001' ) . with_user_id ( 'user-0001' ) . with_count ( 1 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.increment_purchase_count_by_user_id ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"item-0001\" , userId = \"user-0001\" , count = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.increment_purchase_count_by_user_id_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"item-0001\" , userId = \"user-0001\" , count = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; decrementPurchaseCountByUserId 사용자 ID를 지정하여 구매 횟수 감산 랜덤 진열대의 특정 상품에 대한 구매 횟수를 감산합니다. 구매 취소나 구매 카운터 조정에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 displayItemName string  ~ 128자 상품 구매 횟수 이름 구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다. userId string  ~ 128자 사용자ID count int  0 ~ 100 감산할 구매 횟수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RandomDisplayItem 구매 횟수 감산 후의 랜덤 진열 상품 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DecrementPurchaseCountByUserId ( \u0026 showcase . DecrementPurchaseCountByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemName : pointy . String ( \"item-0001\" ), UserId : pointy . String ( \"user-0001\" ), Count : pointy . Int32 ( 1 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DecrementPurchaseCountByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e decrementPurchaseCountByUserId ( ( new DecrementPurchaseCountByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemName ( \"item-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withCount ( 1 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DecrementPurchaseCountByUserIdRequest ; import io.gs2.showcase.result.DecrementPurchaseCountByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DecrementPurchaseCountByUserIdResult result = client . decrementPurchaseCountByUserId ( new DecrementPurchaseCountByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"item-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withTimeOffsetToken ( null ) ); RandomDisplayItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DecrementPurchaseCountByUserIdResult \u003e asyncResult = null ; yield return client . DecrementPurchaseCountByUserId ( new Gs2 . Gs2Showcase . Request . DecrementPurchaseCountByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemName ( \"item-0001\" ) . WithUserId ( \"user-0001\" ) . WithCount ( 1 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . decrementPurchaseCountByUserId ( new Gs2Showcase . DecrementPurchaseCountByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"item-0001\" ) . withUserId ( \"user-0001\" ) . withCount ( 1 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . decrement_purchase_count_by_user_id ( showcase . DecrementPurchaseCountByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_name ( 'item-0001' ) . with_user_id ( 'user-0001' ) . with_count ( 1 ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.decrement_purchase_count_by_user_id ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"item-0001\" , userId = \"user-0001\" , count = 1 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.decrement_purchase_count_by_user_id_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"item-0001\" , userId = \"user-0001\" , count = 1 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; forceReDrawByUserId 사용자 ID를 지정하여 랜덤 진열대 내용을 재추첨 지정된 사용자의 랜덤 진열대 상품을 강제로 재추첨하여 현재 선택을 초기화하고 설정된 풀에서 새로운 랜덤 상품 선택을 트리거합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 랜덤 진열대 상품 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . ForceReDrawByUserId ( \u0026 showcase . ForceReDrawByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\ForceReDrawByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e forceReDrawByUserId ( ( new ForceReDrawByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.ForceReDrawByUserIdRequest ; import io.gs2.showcase.result.ForceReDrawByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { ForceReDrawByUserIdResult result = client . forceReDrawByUserId ( new ForceReDrawByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List RandomDisplayItem \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . ForceReDrawByUserIdResult \u003e asyncResult = null ; yield return client . ForceReDrawByUserId ( new Gs2 . Gs2Showcase . Request . ForceReDrawByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . forceReDrawByUserId ( new Gs2Showcase . ForceReDrawByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . force_re_draw_by_user_id ( showcase . ForceReDrawByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.force_re_draw_by_user_id ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'showcase' ) api_result_handler = client.force_re_draw_by_user_id_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeRandomDisplayItems 랜덤 쇼케이스의 상품 목록 가져오기 현재 사용자를 대상으로 랜덤 쇼케이스에 현재 표시되고 있는 상품 목록을 가져옵니다. 상품은 설정된 풀에서 무작위로 선택되며 리셋 간격에 따라 로테이션됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 items List 랜덤 쇼케이스의 상품 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeRandomDisplayItems ( \u0026 showcase . DescribeRandomDisplayItemsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeRandomDisplayItemsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeRandomDisplayItems ( ( new DescribeRandomDisplayItemsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeRandomDisplayItemsRequest ; import io.gs2.showcase.result.DescribeRandomDisplayItemsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeRandomDisplayItemsResult result = client . describeRandomDisplayItems ( new DescribeRandomDisplayItemsRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); List RandomDisplayItem \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeRandomDisplayItemsResult \u003e asyncResult = null ; yield return client . DescribeRandomDisplayItems ( new Gs2 . Gs2Showcase . Request . DescribeRandomDisplayItemsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeRandomDisplayItems ( new Gs2Showcase . DescribeRandomDisplayItemsRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_random_display_items ( showcase . DescribeRandomDisplayItemsRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_access_token ( 'accessToken-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_random_display_items ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_random_display_items_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; describeRandomDisplayItemsByUserId 사용자 ID를 지정하여 랜덤 쇼케이스의 상품 목록 가져오기 지정된 사용자를 대상으로 랜덤 쇼케이스에 현재 표시되고 있는 상품 목록을 가져옵니다. 상품은 설정된 풀에서 무작위로 선택되며 리셋 간격에 따라 로테이션됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 랜덤 쇼케이스의 상품 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeRandomDisplayItemsByUserId ( \u0026 showcase . DescribeRandomDisplayItemsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeRandomDisplayItemsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeRandomDisplayItemsByUserId ( ( new DescribeRandomDisplayItemsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeRandomDisplayItemsByUserIdRequest ; import io.gs2.showcase.result.DescribeRandomDisplayItemsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeRandomDisplayItemsByUserIdResult result = client . describeRandomDisplayItemsByUserId ( new DescribeRandomDisplayItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); List RandomDisplayItem \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeRandomDisplayItemsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeRandomDisplayItemsByUserId ( new Gs2 . Gs2Showcase . Request . DescribeRandomDisplayItemsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeRandomDisplayItemsByUserId ( new Gs2Showcase . DescribeRandomDisplayItemsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_random_display_items_by_user_id ( showcase . DescribeRandomDisplayItemsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_random_display_items_by_user_id ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_random_display_items_by_user_id_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getRandomDisplayItem 랜덤 쇼케이스의 상품 가져오기 현재 사용자를 대상으로 랜덤 쇼케이스에서 지정된 상품을 가져옵니다. 판매 기간 이벤트에 따라 랜덤 쇼케이스를 이용할 수 있는 상태여야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayItemName string  UUID ~ 128자 랜덤 진열 상품명 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item RandomDisplayItem 상품 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetRandomDisplayItem ( \u0026 showcase . GetRandomDisplayItemRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemName : pointy . String ( \"display-item-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetRandomDisplayItemRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getRandomDisplayItem ( ( new GetRandomDisplayItemRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemName ( \"display-item-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetRandomDisplayItemRequest ; import io.gs2.showcase.result.GetRandomDisplayItemResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetRandomDisplayItemResult result = client . getRandomDisplayItem ( new GetRandomDisplayItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"display-item-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); RandomDisplayItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetRandomDisplayItemResult \u003e asyncResult = null ; yield return client . GetRandomDisplayItem ( new Gs2 . Gs2Showcase . Request . GetRandomDisplayItemRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemName ( \"display-item-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getRandomDisplayItem ( new Gs2Showcase . GetRandomDisplayItemRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"display-item-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_random_display_item ( showcase . GetRandomDisplayItemRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_name ( 'display-item-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_random_display_item ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"display-item-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_random_display_item_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"display-item-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRandomDisplayItemByUserId 사용자 ID를 지정하여 랜덤 쇼케이스의 상품 가져오기 지정된 사용자를 대상으로 랜덤 쇼케이스에서 지정된 상품을 가져옵니다. 판매 기간 이벤트에 따라 랜덤 쇼케이스를 이용할 수 있는 상태여야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayItemName string  UUID ~ 128자 랜덤 진열 상품명 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RandomDisplayItem 상품 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetRandomDisplayItemByUserId ( \u0026 showcase . GetRandomDisplayItemByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemName : pointy . String ( \"display-item-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetRandomDisplayItemByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getRandomDisplayItemByUserId ( ( new GetRandomDisplayItemByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemName ( \"display-item-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetRandomDisplayItemByUserIdRequest ; import io.gs2.showcase.result.GetRandomDisplayItemByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetRandomDisplayItemByUserIdResult result = client . getRandomDisplayItemByUserId ( new GetRandomDisplayItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"display-item-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); RandomDisplayItem item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetRandomDisplayItemByUserIdResult \u003e asyncResult = null ; yield return client . GetRandomDisplayItemByUserId ( new Gs2 . Gs2Showcase . Request . GetRandomDisplayItemByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemName ( \"display-item-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getRandomDisplayItemByUserId ( new Gs2Showcase . GetRandomDisplayItemByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"display-item-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_random_display_item_by_user_id ( showcase . GetRandomDisplayItemByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_name ( 'display-item-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_random_display_item_by_user_id ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"display-item-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_random_display_item_by_user_id_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"display-item-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; randomShowcaseBuy 랜덤 쇼케이스의 상품 구매 랜덤 쇼케이스에서 상품을 구매합니다. 설정된 검증, 소비, 획득 액션을 처리하는 트랜잭션이 생성됩니다. 설정값을 전달하여 트랜잭션 변수를 덮어쓸 수도 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayItemName string  UUID ~ 128자 랜덤 진열 상품명 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. accessToken string  ~ 128자 액세스 토큰 quantity int 1 1 ~ 1000 구매 수량 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item RandomDisplayItem 구매한 상품 transactionId string 발행된 트랜잭션 ID stampSheet string 구매 처리를 실행하는 데 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . RandomShowcaseBuy ( \u0026 showcase . RandomShowcaseBuyRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemName : pointy . String ( \"display-item-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Quantity : pointy . Int32 ( 1 ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\RandomShowcaseBuyRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e randomShowcaseBuy ( ( new RandomShowcaseBuyRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemName ( \"display-item-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withQuantity ( 1 ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.RandomShowcaseBuyRequest ; import io.gs2.showcase.result.RandomShowcaseBuyResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { RandomShowcaseBuyResult result = client . randomShowcaseBuy ( new RandomShowcaseBuyRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"display-item-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withQuantity ( 1 ) . withConfig ( null ) ); RandomDisplayItem item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . RandomShowcaseBuyResult \u003e asyncResult = null ; yield return client . RandomShowcaseBuy ( new Gs2 . Gs2Showcase . Request . RandomShowcaseBuyRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemName ( \"display-item-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithQuantity ( 1 ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . randomShowcaseBuy ( new Gs2Showcase . RandomShowcaseBuyRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"display-item-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withQuantity ( 1 ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . random_showcase_buy ( showcase . RandomShowcaseBuyRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_name ( 'display-item-0001' ) . with_access_token ( 'accessToken-0001' ) . with_quantity ( 1 ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.random_showcase_buy ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"display-item-0001\" , accessToken = \"accessToken-0001\" , quantity = 1 , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'showcase' ) api_result_handler = client.random_showcase_buy_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"display-item-0001\" , accessToken = \"accessToken-0001\" , quantity = 1 , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; randomShowcaseBuyByUserId 사용자 ID를 지정하여 랜덤 쇼케이스의 상품 구매 지정된 사용자를 대상으로 랜덤 쇼케이스에서 상품을 구매합니다. 설정된 검증, 소비, 획득 액션을 처리하는 트랜잭션이 생성됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayItemName string  UUID ~ 128자 랜덤 진열 상품명 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. userId string  ~ 128자 사용자ID quantity int 1 1 ~ 1000 구매 수량 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item RandomDisplayItem 구매한 상품 transactionId string 발행된 트랜잭션 ID stampSheet string 구매 처리를 실행하는 데 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . RandomShowcaseBuyByUserId ( \u0026 showcase . RandomShowcaseBuyByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), DisplayItemName : pointy . String ( \"display-item-0001\" ), UserId : pointy . String ( \"user-0001\" ), Quantity : pointy . Int32 ( 1 ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\RandomShowcaseBuyByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e randomShowcaseBuyByUserId ( ( new RandomShowcaseBuyByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDisplayItemName ( \"display-item-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withQuantity ( 1 ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.RandomShowcaseBuyByUserIdRequest ; import io.gs2.showcase.result.RandomShowcaseBuyByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { RandomShowcaseBuyByUserIdResult result = client . randomShowcaseBuyByUserId ( new RandomShowcaseBuyByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"display-item-0001\" ) . withUserId ( \"user-0001\" ) . withQuantity ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); RandomDisplayItem item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . RandomShowcaseBuyByUserIdResult \u003e asyncResult = null ; yield return client . RandomShowcaseBuyByUserId ( new Gs2 . Gs2Showcase . Request . RandomShowcaseBuyByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDisplayItemName ( \"display-item-0001\" ) . WithUserId ( \"user-0001\" ) . WithQuantity ( 1 ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . randomShowcaseBuyByUserId ( new Gs2Showcase . RandomShowcaseBuyByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDisplayItemName ( \"display-item-0001\" ) . withUserId ( \"user-0001\" ) . withQuantity ( 1 ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . random_showcase_buy_by_user_id ( showcase . RandomShowcaseBuyByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_display_item_name ( 'display-item-0001' ) . with_user_id ( 'user-0001' ) . with_quantity ( 1 ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.random_showcase_buy_by_user_id ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"display-item-0001\" , userId = \"user-0001\" , quantity = 1 , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'showcase' ) api_result_handler = client.random_showcase_buy_by_user_id_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , displayItemName = \"display-item-0001\" , userId = \"user-0001\" , quantity = 1 , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; exportMaster 쇼케이스 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 등록된 쇼케이스 마스터를 활성화 가능한 마스터 데이터 형식으로 내보냅니다. 내보낸 데이터에는 쇼케이스, 상품, 상품 그룹, 랜덤 쇼케이스의 모든 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentShowcaseMaster 활성화 가능한 쇼케이스 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 showcase . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.ExportMasterRequest ; import io.gs2.showcase.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Showcase . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Showcase . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . export_master ( showcase . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentShowcaseMaster 현재 활성화된 쇼케이스 마스터 데이터 가져오기 사용 중인 모든 쇼케이스, 상품, 상품 그룹, 랜덤 쇼케이스의 정의를 포함하여 현재 활성화된 쇼케이스 마스터 데이터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentShowcaseMaster 현재 활성화된 쇼케이스 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetCurrentShowcaseMaster ( \u0026 showcase . GetCurrentShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetCurrentShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getCurrentShowcaseMaster ( ( new GetCurrentShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetCurrentShowcaseMasterRequest ; import io.gs2.showcase.result.GetCurrentShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetCurrentShowcaseMasterResult result = client . getCurrentShowcaseMaster ( new GetCurrentShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetCurrentShowcaseMasterResult \u003e asyncResult = null ; yield return client . GetCurrentShowcaseMaster ( new Gs2 . Gs2Showcase . Request . GetCurrentShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getCurrentShowcaseMaster ( new Gs2Showcase . GetCurrentShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_current_showcase_master ( showcase . GetCurrentShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_current_showcase_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_current_showcase_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentShowcaseMaster 현재 활성화된 쇼케이스 마스터 데이터 업데이트(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 업데이트를 진행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. 업로드로 취득한 토큰을 전달하여 UpdateCurrentShowcaseMaster를 실행하고 마스터 데이터에 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentShowcaseMaster ( \u0026 showcase . PreUpdateCurrentShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\PreUpdateCurrentShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentShowcaseMaster ( ( new PreUpdateCurrentShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.PreUpdateCurrentShowcaseMasterRequest ; import io.gs2.showcase.result.PreUpdateCurrentShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { PreUpdateCurrentShowcaseMasterResult result = client . preUpdateCurrentShowcaseMaster ( new PreUpdateCurrentShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . PreUpdateCurrentShowcaseMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentShowcaseMaster ( new Gs2 . Gs2Showcase . Request . PreUpdateCurrentShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . preUpdateCurrentShowcaseMaster ( new Gs2Showcase . PreUpdateCurrentShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . pre_update_current_showcase_master ( showcase . PreUpdateCurrentShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.pre_update_current_showcase_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'showcase' ) api_result_handler = client.pre_update_current_showcase_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentShowcaseMaster 현재 활성화된 쇼케이스 마스터 데이터 업데이트 현재 활성화된 쇼케이스 마스터 데이터를 업데이트합니다. 대용량 마스터 데이터에 대응하기 위해 직접 업데이트 모드와 사전 업로드 모드를 모두 지원합니다. 사전 업로드 모드에서는 PreUpdate API로 취득한 업로드 토큰을 사용하여 설정을 읽어옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentShowcaseMaster 업데이트된 현재 활성화된 쇼케이스의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentShowcaseMaster ( \u0026 showcase . UpdateCurrentShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-04-04\\\",\\n \\\"showcases\\\": [\\n {\\n \\\"name\\\": \\\"gem\\\",\\n \\\"metadata\\\": \\\"GEM\\\",\\n \\\"displayItems\\\": [\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"gem_3000\\\",\\n \\\"metadata\\\": \\\"GEM_3000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n }\\n },\\n {\\n \\\"type\\\": \\\"salesItemGroup\\\",\\n \\\"salesPeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\\\",\\n \\\"salesItemGroup\\\": {\\n \\\"name\\\": \\\"step_gem\\\",\\n \\\"metadata\\\": \\\"STEP_GEM\\\",\\n \\\"salesItems\\\": [\\n {\\n \\\"name\\\": \\\"step1_gem_1000\\\",\\n \\\"metadata\\\": \\\"STEP1_GEM_1000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Limit:CountUpByUserId\\\",\\n \\\"request\\\": \\\"Gs2Limit:CountUpByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"step2_gem_2000\\\",\\n \\\"metadata\\\": \\\"STEP1_GEM_2000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Limit:CountUpByUserId\\\",\\n \\\"request\\\": \\\"Gs2Limit:CountUpByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n }\\n ]\\n }\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"displayItems\\\": [\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"single\\\",\\n \\\"metadata\\\": \\\"SINGLE\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"moneyName\\\\\\\": \\\\\\\"money-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"{userId}\\\\\\\", \\\\\\\"slot\\\\\\\": \\\\\\\"{slot}\\\\\\\", \\\\\\\"count\\\\\\\": 100, \\\\\\\"paidOnly\\\\\\\": false}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"categoryName\\\\\\\": \\\\\\\"category-0001\\\\\\\", \\\\\\\"inventoryModelName\\\\\\\": \\\\\\\"character\\\\\\\", \\\\\\\"itemModelName\\\\\\\": \\\\\\\"ssr-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1}\\\"\\n }\\n ]\\n }\\n },\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"10times\\\",\\n \\\"metadata\\\": \\\"10TIMES\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:WithdrawByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n }\\n ]\\n }\\n }\\n ]\\n }\\n ]\\n }\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\UpdateCurrentShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e updateCurrentShowcaseMaster ( ( new UpdateCurrentShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-04-04 \\\" , \\n \\\" showcases \\\" : [ \\n { \\n \\\" name \\\" : \\\" gem \\\" , \\n \\\" metadata \\\" : \\\" GEM \\\" , \\n \\\" displayItems \\\" : [ \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" gem_3000 \\\" , \\n \\\" metadata \\\" : \\\" GEM_3000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n } \\n }, \\n { \\n \\\" type \\\" : \\\" salesItemGroup \\\" , \\n \\\" salesPeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001 \\\" , \\n \\\" salesItemGroup \\\" : { \\n \\\" name \\\" : \\\" step_gem \\\" , \\n \\\" metadata \\\" : \\\" STEP_GEM \\\" , \\n \\\" salesItems \\\" : [ \\n { \\n \\\" name \\\" : \\\" step1_gem_1000 \\\" , \\n \\\" metadata \\\" : \\\" STEP1_GEM_1000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Limit:CountUpByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Limit:CountUpByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" step2_gem_2000 \\\" , \\n \\\" metadata \\\" : \\\" STEP1_GEM_2000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Limit:CountUpByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Limit:CountUpByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n } \\n ] \\n } \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" displayItems \\\" : [ \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" single \\\" , \\n \\\" metadata \\\" : \\\" SINGLE \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" moneyName \\\\\\\" : \\\\\\\" money-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" {userId} \\\\\\\" , \\\\\\\" slot \\\\\\\" : \\\\\\\" {slot} \\\\\\\" , \\\\\\\" count \\\\\\\" : 100, \\\\\\\" paidOnly \\\\\\\" : false} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" categoryName \\\\\\\" : \\\\\\\" category-0001 \\\\\\\" , \\\\\\\" inventoryModelName \\\\\\\" : \\\\\\\" character \\\\\\\" , \\\\\\\" itemModelName \\\\\\\" : \\\\\\\" ssr-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" {userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1} \\\"\\n } \\n ] \\n } \\n }, \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" 10times \\\" , \\n \\\" metadata \\\" : \\\" 10TIMES \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:WithdrawByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n } \\n ] \\n } \\n } \\n ] \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.UpdateCurrentShowcaseMasterRequest ; import io.gs2.showcase.result.UpdateCurrentShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { UpdateCurrentShowcaseMasterResult result = client . updateCurrentShowcaseMaster ( new UpdateCurrentShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-04-04\\\",\\n \\\"showcases\\\": [\\n {\\n \\\"name\\\": \\\"gem\\\",\\n \\\"metadata\\\": \\\"GEM\\\",\\n \\\"displayItems\\\": [\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"gem_3000\\\",\\n \\\"metadata\\\": \\\"GEM_3000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n }\\n },\\n {\\n \\\"type\\\": \\\"salesItemGroup\\\",\\n \\\"salesPeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\\\",\\n \\\"salesItemGroup\\\": {\\n \\\"name\\\": \\\"step_gem\\\",\\n \\\"metadata\\\": \\\"STEP_GEM\\\",\\n \\\"salesItems\\\": [\\n {\\n \\\"name\\\": \\\"step1_gem_1000\\\",\\n \\\"metadata\\\": \\\"STEP1_GEM_1000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Limit:CountUpByUserId\\\",\\n \\\"request\\\": \\\"Gs2Limit:CountUpByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"step2_gem_2000\\\",\\n \\\"metadata\\\": \\\"STEP1_GEM_2000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Limit:CountUpByUserId\\\",\\n \\\"request\\\": \\\"Gs2Limit:CountUpByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n }\\n ]\\n }\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"displayItems\\\": [\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"single\\\",\\n \\\"metadata\\\": \\\"SINGLE\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"moneyName\\\\\\\": \\\\\\\"money-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"{userId}\\\\\\\", \\\\\\\"slot\\\\\\\": \\\\\\\"{slot}\\\\\\\", \\\\\\\"count\\\\\\\": 100, \\\\\\\"paidOnly\\\\\\\": false}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"categoryName\\\\\\\": \\\\\\\"category-0001\\\\\\\", \\\\\\\"inventoryModelName\\\\\\\": \\\\\\\"character\\\\\\\", \\\\\\\"itemModelName\\\\\\\": \\\\\\\"ssr-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1}\\\"\\n }\\n ]\\n }\\n },\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"10times\\\",\\n \\\"metadata\\\": \\\"10TIMES\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:WithdrawByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n }\\n ]\\n }\\n }\\n ]\\n }\\n ]\\n }\" ) . withUploadToken ( null ) ); CurrentShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . UpdateCurrentShowcaseMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentShowcaseMaster ( new Gs2 . Gs2Showcase . Request . UpdateCurrentShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-04-04\\\",\\n \\\"showcases\\\": [\\n {\\n \\\"name\\\": \\\"gem\\\",\\n \\\"metadata\\\": \\\"GEM\\\",\\n \\\"displayItems\\\": [\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"gem_3000\\\",\\n \\\"metadata\\\": \\\"GEM_3000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n }\\n },\\n {\\n \\\"type\\\": \\\"salesItemGroup\\\",\\n \\\"salesPeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\\\",\\n \\\"salesItemGroup\\\": {\\n \\\"name\\\": \\\"step_gem\\\",\\n \\\"metadata\\\": \\\"STEP_GEM\\\",\\n \\\"salesItems\\\": [\\n {\\n \\\"name\\\": \\\"step1_gem_1000\\\",\\n \\\"metadata\\\": \\\"STEP1_GEM_1000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Limit:CountUpByUserId\\\",\\n \\\"request\\\": \\\"Gs2Limit:CountUpByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"step2_gem_2000\\\",\\n \\\"metadata\\\": \\\"STEP1_GEM_2000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Limit:CountUpByUserId\\\",\\n \\\"request\\\": \\\"Gs2Limit:CountUpByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n }\\n ]\\n }\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"displayItems\\\": [\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"single\\\",\\n \\\"metadata\\\": \\\"SINGLE\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"moneyName\\\\\\\": \\\\\\\"money-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"{userId}\\\\\\\", \\\\\\\"slot\\\\\\\": \\\\\\\"{slot}\\\\\\\", \\\\\\\"count\\\\\\\": 100, \\\\\\\"paidOnly\\\\\\\": false}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"categoryName\\\\\\\": \\\\\\\"category-0001\\\\\\\", \\\\\\\"inventoryModelName\\\\\\\": \\\\\\\"character\\\\\\\", \\\\\\\"itemModelName\\\\\\\": \\\\\\\"ssr-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1}\\\"\\n }\\n ]\\n }\\n },\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"10times\\\",\\n \\\"metadata\\\": \\\"10TIMES\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:WithdrawByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n }\\n ]\\n }\\n }\\n ]\\n }\\n ]\\n }\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . updateCurrentShowcaseMaster ( new Gs2Showcase . UpdateCurrentShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-04-04\\\",\\n \\\"showcases\\\": [\\n {\\n \\\"name\\\": \\\"gem\\\",\\n \\\"metadata\\\": \\\"GEM\\\",\\n \\\"displayItems\\\": [\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"gem_3000\\\",\\n \\\"metadata\\\": \\\"GEM_3000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n }\\n },\\n {\\n \\\"type\\\": \\\"salesItemGroup\\\",\\n \\\"salesPeriodEventId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\\\",\\n \\\"salesItemGroup\\\": {\\n \\\"name\\\": \\\"step_gem\\\",\\n \\\"metadata\\\": \\\"STEP_GEM\\\",\\n \\\"salesItems\\\": [\\n {\\n \\\"name\\\": \\\"step1_gem_1000\\\",\\n \\\"metadata\\\": \\\"STEP1_GEM_1000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Limit:CountUpByUserId\\\",\\n \\\"request\\\": \\\"Gs2Limit:CountUpByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"step2_gem_2000\\\",\\n \\\"metadata\\\": \\\"STEP1_GEM_2000\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:RecordReceipt\\\",\\n \\\"request\\\": \\\"Gs2Money:RecordReceipt:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Limit:CountUpByUserId\\\",\\n \\\"request\\\": \\\"Gs2Limit:CountUpByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:DepositByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:DepositByUserId:request\\\"\\n }\\n ]\\n }\\n ]\\n }\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"gacha\\\",\\n \\\"metadata\\\": \\\"GACHA\\\",\\n \\\"displayItems\\\": [\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"single\\\",\\n \\\"metadata\\\": \\\"SINGLE\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"moneyName\\\\\\\": \\\\\\\"money-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"{userId}\\\\\\\", \\\\\\\"slot\\\\\\\": \\\\\\\"{slot}\\\\\\\", \\\\\\\"count\\\\\\\": 100, \\\\\\\"paidOnly\\\\\\\": false}\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"{\\\\\\\"categoryName\\\\\\\": \\\\\\\"category-0001\\\\\\\", \\\\\\\"inventoryModelName\\\\\\\": \\\\\\\"character\\\\\\\", \\\\\\\"itemModelName\\\\\\\": \\\\\\\"ssr-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"{userId}\\\\\\\", \\\\\\\"acquireCount\\\\\\\": 1}\\\"\\n }\\n ]\\n }\\n },\\n {\\n \\\"type\\\": \\\"salesItem\\\",\\n \\\"salesItem\\\": {\\n \\\"name\\\": \\\"10times\\\",\\n \\\"metadata\\\": \\\"10TIMES\\\",\\n \\\"consumeActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Money:WithdrawByUserId\\\",\\n \\\"request\\\": \\\"Gs2Money:WithdrawByUserId:request\\\"\\n }\\n ],\\n \\\"acquireActions\\\": [\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n },\\n {\\n \\\"action\\\": \\\"Gs2Inventory:AcquireItemSetByUserId\\\",\\n \\\"request\\\": \\\"Gs2Inventory:AcquireItemSetByUserId:request\\\"\\n }\\n ]\\n }\\n }\\n ]\\n }\\n ]\\n }\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . update_current_showcase_master ( showcase . UpdateCurrentShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-04-04\", \\n \"showcases\": [ \\n { \\n \"name\": \"gem\", \\n \"metadata\": \"GEM\", \\n \"displayItems\": [ \\n { \\n \"type\": \"salesItem\", \\n \"salesItem\": { \\n \"name\": \"gem_3000\", \\n \"metadata\": \"GEM_3000\", \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Money:RecordReceipt\", \\n \"request\": \"Gs2Money:RecordReceipt:request\" \\n } \\n ], \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"Gs2Money:DepositByUserId:request\" \\n } \\n ] \\n } \\n }, \\n { \\n \"type\": \"salesItemGroup\", \\n \"salesPeriodEventId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\", \\n \"salesItemGroup\": { \\n \"name\": \"step_gem\", \\n \"metadata\": \"STEP_GEM\", \\n \"salesItems\": [ \\n { \\n \"name\": \"step1_gem_1000\", \\n \"metadata\": \"STEP1_GEM_1000\", \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Money:RecordReceipt\", \\n \"request\": \"Gs2Money:RecordReceipt:request\" \\n }, \\n { \\n \"action\": \"Gs2Limit:CountUpByUserId\", \\n \"request\": \"Gs2Limit:CountUpByUserId:request\" \\n } \\n ], \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"Gs2Money:DepositByUserId:request\" \\n } \\n ] \\n }, \\n { \\n \"name\": \"step2_gem_2000\", \\n \"metadata\": \"STEP1_GEM_2000\", \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Money:RecordReceipt\", \\n \"request\": \"Gs2Money:RecordReceipt:request\" \\n }, \\n { \\n \"action\": \"Gs2Limit:CountUpByUserId\", \\n \"request\": \"Gs2Limit:CountUpByUserId:request\" \\n } \\n ], \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Money:DepositByUserId\", \\n \"request\": \"Gs2Money:DepositByUserId:request\" \\n } \\n ] \\n } \\n ] \\n } \\n } \\n ] \\n }, \\n { \\n \"name\": \"gacha\", \\n \"metadata\": \"GACHA\", \\n \"displayItems\": [ \\n { \\n \"type\": \"salesItem\", \\n \"salesItem\": { \\n \"name\": \"single\", \\n \"metadata\": \"SINGLE\", \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Money:WithdrawByUserId\", \\n \"request\": \"{ \\\\ \"moneyName \\\\ \": \\\\ \"money-0001 \\\\ \", \\\\ \"userId \\\\ \": \\\\ \" {userId} \\\\ \", \\\\ \"slot \\\\ \": \\\\ \" {slot} \\\\ \", \\\\ \"count \\\\ \": 100, \\\\ \"paidOnly \\\\ \": false}\" \\n } \\n ], \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"{ \\\\ \"categoryName \\\\ \": \\\\ \"category-0001 \\\\ \", \\\\ \"inventoryModelName \\\\ \": \\\\ \"character \\\\ \", \\\\ \"itemModelName \\\\ \": \\\\ \"ssr-0001 \\\\ \", \\\\ \"userId \\\\ \": \\\\ \" {userId} \\\\ \", \\\\ \"acquireCount \\\\ \": 1}\" \\n } \\n ] \\n } \\n }, \\n { \\n \"type\": \"salesItem\", \\n \"salesItem\": { \\n \"name\": \"10times\", \\n \"metadata\": \"10TIMES\", \\n \"consumeActions\": [ \\n { \\n \"action\": \"Gs2Money:WithdrawByUserId\", \\n \"request\": \"Gs2Money:WithdrawByUserId:request\" \\n } \\n ], \\n \"acquireActions\": [ \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n }, \\n { \\n \"action\": \"Gs2Inventory:AcquireItemSetByUserId\", \\n \"request\": \"Gs2Inventory:AcquireItemSetByUserId:request\" \\n } \\n ] \\n } \\n } \\n ] \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.update_current_showcase_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-04-04 \\\" , \\n \\\" showcases \\\" : [ \\n { \\n \\\" name \\\" : \\\" gem \\\" , \\n \\\" metadata \\\" : \\\" GEM \\\" , \\n \\\" displayItems \\\" : [ \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" gem_3000 \\\" , \\n \\\" metadata \\\" : \\\" GEM_3000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n } \\n }, \\n { \\n \\\" type \\\" : \\\" salesItemGroup \\\" , \\n \\\" salesPeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001 \\\" , \\n \\\" salesItemGroup \\\" : { \\n \\\" name \\\" : \\\" step_gem \\\" , \\n \\\" metadata \\\" : \\\" STEP_GEM \\\" , \\n \\\" salesItems \\\" : [ \\n { \\n \\\" name \\\" : \\\" step1_gem_1000 \\\" , \\n \\\" metadata \\\" : \\\" STEP1_GEM_1000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Limit:CountUpByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Limit:CountUpByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" step2_gem_2000 \\\" , \\n \\\" metadata \\\" : \\\" STEP1_GEM_2000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Limit:CountUpByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Limit:CountUpByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n } \\n ] \\n } \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" displayItems \\\" : [ \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" single \\\" , \\n \\\" metadata \\\" : \\\" SINGLE \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" moneyName \\\\\\\" : \\\\\\\" money-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" {userId} \\\\\\\" , \\\\\\\" slot \\\\\\\" : \\\\\\\" {slot} \\\\\\\" , \\\\\\\" count \\\\\\\" : 100, \\\\\\\" paidOnly \\\\\\\" : false} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" categoryName \\\\\\\" : \\\\\\\" category-0001 \\\\\\\" , \\\\\\\" inventoryModelName \\\\\\\" : \\\\\\\" character \\\\\\\" , \\\\\\\" itemModelName \\\\\\\" : \\\\\\\" ssr-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" {userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1} \\\"\\n } \\n ] \\n } \\n }, \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" 10times \\\" , \\n \\\" metadata \\\" : \\\" 10TIMES \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:WithdrawByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n } \\n ] \\n } \\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.update_current_showcase_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-04-04 \\\" , \\n \\\" showcases \\\" : [ \\n { \\n \\\" name \\\" : \\\" gem \\\" , \\n \\\" metadata \\\" : \\\" GEM \\\" , \\n \\\" displayItems \\\" : [ \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" gem_3000 \\\" , \\n \\\" metadata \\\" : \\\" GEM_3000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n } \\n }, \\n { \\n \\\" type \\\" : \\\" salesItemGroup \\\" , \\n \\\" salesPeriodEventId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001 \\\" , \\n \\\" salesItemGroup \\\" : { \\n \\\" name \\\" : \\\" step_gem \\\" , \\n \\\" metadata \\\" : \\\" STEP_GEM \\\" , \\n \\\" salesItems \\\" : [ \\n { \\n \\\" name \\\" : \\\" step1_gem_1000 \\\" , \\n \\\" metadata \\\" : \\\" STEP1_GEM_1000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Limit:CountUpByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Limit:CountUpByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" step2_gem_2000 \\\" , \\n \\\" metadata \\\" : \\\" STEP1_GEM_2000 \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:RecordReceipt \\\" , \\n \\\" request \\\" : \\\" Gs2Money:RecordReceipt:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Limit:CountUpByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Limit:CountUpByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:DepositByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:DepositByUserId:request \\\"\\n } \\n ] \\n } \\n ] \\n } \\n } \\n ] \\n }, \\n { \\n \\\" name \\\" : \\\" gacha \\\" , \\n \\\" metadata \\\" : \\\" GACHA \\\" , \\n \\\" displayItems \\\" : [ \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" single \\\" , \\n \\\" metadata \\\" : \\\" SINGLE \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" moneyName \\\\\\\" : \\\\\\\" money-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" {userId} \\\\\\\" , \\\\\\\" slot \\\\\\\" : \\\\\\\" {slot} \\\\\\\" , \\\\\\\" count \\\\\\\" : 100, \\\\\\\" paidOnly \\\\\\\" : false} \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" { \\\\\\\" categoryName \\\\\\\" : \\\\\\\" category-0001 \\\\\\\" , \\\\\\\" inventoryModelName \\\\\\\" : \\\\\\\" character \\\\\\\" , \\\\\\\" itemModelName \\\\\\\" : \\\\\\\" ssr-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" {userId} \\\\\\\" , \\\\\\\" acquireCount \\\\\\\" : 1} \\\"\\n } \\n ] \\n } \\n }, \\n { \\n \\\" type \\\" : \\\" salesItem \\\" , \\n \\\" salesItem \\\" : { \\n \\\" name \\\" : \\\" 10times \\\" , \\n \\\" metadata \\\" : \\\" 10TIMES \\\" , \\n \\\" consumeActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Money:WithdrawByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Money:WithdrawByUserId:request \\\"\\n } \\n ], \\n \\\" acquireActions \\\" : [ \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n }, \\n { \\n \\\" action \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId \\\" , \\n \\\" request \\\" : \\\" Gs2Inventory:AcquireItemSetByUserId:request \\\"\\n } \\n ] \\n } \\n } \\n ] \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentShowcaseMasterFromGitHub GitHub에서 현재 활성화된 쇼케이스 마스터 데이터 업데이트 지정된 체크아웃 설정을 사용하여 GitHub 저장소에서 마스터 데이터를 체크아웃하고, 현재 활성화된 쇼케이스 마스터 데이터를 업데이트합니다. GitHub 인증에는 키 서비스를 통해 복호화된 API 키가 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentShowcaseMaster 업데이트된 현재 활성화된 쇼케이스의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentShowcaseMasterFromGitHub ( \u0026 showcase . UpdateCurrentShowcaseMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 showcase . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\UpdateCurrentShowcaseMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e updateCurrentShowcaseMasterFromGitHub ( ( new UpdateCurrentShowcaseMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.UpdateCurrentShowcaseMasterFromGitHubRequest ; import io.gs2.showcase.result.UpdateCurrentShowcaseMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { UpdateCurrentShowcaseMasterFromGitHubResult result = client . updateCurrentShowcaseMasterFromGitHub ( new UpdateCurrentShowcaseMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . UpdateCurrentShowcaseMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentShowcaseMasterFromGitHub ( new Gs2 . Gs2Showcase . Request . UpdateCurrentShowcaseMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Showcase . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . updateCurrentShowcaseMasterFromGitHub ( new Gs2Showcase . UpdateCurrentShowcaseMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Showcase . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . update_current_showcase_master_from_git_hub ( showcase . UpdateCurrentShowcaseMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( showcase . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.update_current_showcase_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.update_current_showcase_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSalesItemMasters 상품 마스터 목록 가져오기 상품 마스터의 페이지네이션 목록을 가져옵니다. 이름의 접두사로 필터링할 수 있습니다. 상품 마스터는 상품 구매 시 실행되는 검증, 소비, 획득 액션을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 상품명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 상품 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeSalesItemMasters ( \u0026 showcase . DescribeSalesItemMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeSalesItemMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeSalesItemMasters ( ( new DescribeSalesItemMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeSalesItemMastersRequest ; import io.gs2.showcase.result.DescribeSalesItemMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeSalesItemMastersResult result = client . describeSalesItemMasters ( new DescribeSalesItemMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SalesItemMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeSalesItemMastersResult \u003e asyncResult = null ; yield return client . DescribeSalesItemMasters ( new Gs2 . Gs2Showcase . Request . DescribeSalesItemMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeSalesItemMasters ( new Gs2Showcase . DescribeSalesItemMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_sales_item_masters ( showcase . DescribeSalesItemMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_sales_item_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_sales_item_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createSalesItemMaster 상품 마스터 신규 생성 검증 액션(구매 전 유효성 검사), 소비 액션(차감할 리소스), 획득 액션(부여할 리소스)을 가진 새로운 상품 마스터를 생성하여 완전한 구매 트랜잭션을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 상품명 상품 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List 0 ~ 10 items 검증 액션 리스트 구매 전에 실행되는 전제 조건 체크입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 구매 자격 조건 체크에 사용할 수 있습니다. consumeActions List 0 ~ 10 items 소비 액션 리스트 구매 대가로 리소스를 소비하는 액션입니다. 상품 그룹의 구매 횟수 제어를 위해 GS2-Limit의 CountUp 액션을 포함할 수 있습니다. acquireActions List  1 ~ 100 items 획득 액션 리스트 구매 보상으로 리소스를 부여하는 액션입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. Result 타입 설명 item SalesItemMaster 생성된 상품 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CreateSalesItemMaster ( \u0026 showcase . CreateSalesItemMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"sales-item-0001\" ), Description : nil , Metadata : nil , VerifyActions : nil , ConsumeActions : [] showcase . ConsumeAction { showcase . ConsumeAction { Action : pointy . String ( \"Gs2Money:WithdrawByUserId\" ), Request : pointy . String ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }, }, AcquireActions : [] showcase . AcquireAction { showcase . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CreateSalesItemMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e createSalesItemMaster ( ( new CreateSalesItemMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"sales-item-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withVerifyActions ( null ) -\u003e withConsumeActions ([ ( new \\Gs2\\Showcase\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Money:WithdrawByUserId\" ) -\u003e withRequest ( \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" ), ]) -\u003e withAcquireActions ([ ( new \\Gs2\\Showcase\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CreateSalesItemMasterRequest ; import io.gs2.showcase.result.CreateSalesItemMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CreateSalesItemMasterResult result = client . createSalesItemMaster ( new CreateSalesItemMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"sales-item-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withVerifyActions ( null ) . withConsumeActions ( Arrays . asList ( new io . gs2 . showcase . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ) )) . withAcquireActions ( Arrays . asList ( new io . gs2 . showcase . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ) )) ); SalesItemMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CreateSalesItemMasterResult \u003e asyncResult = null ; yield return client . CreateSalesItemMaster ( new Gs2 . Gs2Showcase . Request . CreateSalesItemMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"sales-item-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithVerifyActions ( null ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Money:WithdrawByUserId\" ) . WithRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . createSalesItemMaster ( new Gs2Showcase . CreateSalesItemMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"sales-item-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withVerifyActions ( null ) . withConsumeActions ([ new Gs2Showcase . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), ]) . withAcquireActions ([ new Gs2Showcase . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 100, \\\"paidOnly\\\": false}\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . create_sales_item_master ( showcase . CreateSalesItemMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'sales-item-0001' ) . with_description ( None ) . with_metadata ( None ) . with_verify_actions ( None ) . with_consume_actions ([ showcase . ConsumeAction () . with_action ( 'Gs2Money:WithdrawByUserId' ) . with_request ( '{\"moneyName\": \"money-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 100, \"paidOnly\": false}' ), ]) . with_acquire_actions ([ showcase . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"moneyName\": \"money-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 100, \"paidOnly\": false}' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.create_sales_item_master ({ namespaceName = \"namespace-0001\" , name = \"sales-item-0001\" , description = nil , metadata = nil , verifyActions = nil , consumeActions = { { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.create_sales_item_master_async ({ namespaceName = \"namespace-0001\" , name = \"sales-item-0001\" , description = nil , metadata = nil , verifyActions = nil , consumeActions = { { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 100, \\\" paidOnly \\\" : false}\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSalesItemMaster 상품 마스터 가져오기 검증, 소비, 획득 액션 설정을 포함하여 지정된 상품 마스터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. salesItemName string  ~ 128자 상품명 상품 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item SalesItemMaster 상품 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetSalesItemMaster ( \u0026 showcase . GetSalesItemMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SalesItemName : pointy . String ( \"sales-item-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetSalesItemMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getSalesItemMaster ( ( new GetSalesItemMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSalesItemName ( \"sales-item-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetSalesItemMasterRequest ; import io.gs2.showcase.result.GetSalesItemMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetSalesItemMasterResult result = client . getSalesItemMaster ( new GetSalesItemMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemName ( \"sales-item-0001\" ) ); SalesItemMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetSalesItemMasterResult \u003e asyncResult = null ; yield return client . GetSalesItemMaster ( new Gs2 . Gs2Showcase . Request . GetSalesItemMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSalesItemName ( \"sales-item-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getSalesItemMaster ( new Gs2Showcase . GetSalesItemMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemName ( \"sales-item-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_sales_item_master ( showcase . GetSalesItemMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_sales_item_name ( 'sales-item-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_sales_item_master ({ namespaceName = \"namespace-0001\" , salesItemName = \"sales-item-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_sales_item_master_async ({ namespaceName = \"namespace-0001\" , salesItemName = \"sales-item-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateSalesItemMaster 상품 마스터 업데이트 지정된 상품 마스터의 설명, 메타데이터, 검증 액션, 소비 액션, 획득 액션을 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. salesItemName string  ~ 128자 상품명 상품 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List 0 ~ 10 items 검증 액션 리스트 구매 전에 실행되는 전제 조건 체크입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 구매 자격 조건 체크에 사용할 수 있습니다. consumeActions List 0 ~ 10 items 소비 액션 리스트 구매 대가로 리소스를 소비하는 액션입니다. 상품 그룹의 구매 횟수 제어를 위해 GS2-Limit의 CountUp 액션을 포함할 수 있습니다. acquireActions List  1 ~ 100 items 획득 액션 리스트 구매 보상으로 리소스를 부여하는 액션입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. Result 타입 설명 item SalesItemMaster 업데이트된 상품 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . UpdateSalesItemMaster ( \u0026 showcase . UpdateSalesItemMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SalesItemName : pointy . String ( \"sales-item-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"SALES_ITEM_0001\" ), VerifyActions : nil , ConsumeActions : [] showcase . ConsumeAction { showcase . ConsumeAction { Action : pointy . String ( \"Gs2Money:WithdrawByUserId\" ), Request : pointy . String ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }, }, AcquireActions : [] showcase . AcquireAction { showcase . AcquireAction { Action : pointy . String ( \"Gs2Stamina:RecoverStaminaByUserId\" ), Request : pointy . String ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\UpdateSalesItemMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e updateSalesItemMaster ( ( new UpdateSalesItemMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSalesItemName ( \"sales-item-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"SALES_ITEM_0001\" ) -\u003e withVerifyActions ( null ) -\u003e withConsumeActions ([ ( new \\Gs2\\Showcase\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Money:WithdrawByUserId\" ) -\u003e withRequest ( \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" ), ]) -\u003e withAcquireActions ([ ( new \\Gs2\\Showcase\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) -\u003e withRequest ( \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.UpdateSalesItemMasterRequest ; import io.gs2.showcase.result.UpdateSalesItemMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { UpdateSalesItemMasterResult result = client . updateSalesItemMaster ( new UpdateSalesItemMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemName ( \"sales-item-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"SALES_ITEM_0001\" ) . withVerifyActions ( null ) . withConsumeActions ( Arrays . asList ( new io . gs2 . showcase . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ) )) . withAcquireActions ( Arrays . asList ( new io . gs2 . showcase . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ) )) ); SalesItemMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . UpdateSalesItemMasterResult \u003e asyncResult = null ; yield return client . UpdateSalesItemMaster ( new Gs2 . Gs2Showcase . Request . UpdateSalesItemMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSalesItemName ( \"sales-item-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"SALES_ITEM_0001\" ) . WithVerifyActions ( null ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Money:WithdrawByUserId\" ) . WithRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . WithRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . updateSalesItemMaster ( new Gs2Showcase . UpdateSalesItemMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemName ( \"sales-item-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"SALES_ITEM_0001\" ) . withVerifyActions ( null ) . withConsumeActions ([ new Gs2Showcase . model . ConsumeAction () . withAction ( \"Gs2Money:WithdrawByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), ]) . withAcquireActions ([ new Gs2Showcase . model . AcquireAction () . withAction ( \"Gs2Stamina:RecoverStaminaByUserId\" ) . withRequest ( \"{\\\"moneyName\\\": \\\"money-0001\\\", \\\"userId\\\": \\\"user-0001\\\", \\\"slot\\\": 0, \\\"count\\\": 200, \\\"paidOnly\\\": false}\" ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . update_sales_item_master ( showcase . UpdateSalesItemMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_sales_item_name ( 'sales-item-0001' ) . with_description ( 'description1' ) . with_metadata ( 'SALES_ITEM_0001' ) . with_verify_actions ( None ) . with_consume_actions ([ showcase . ConsumeAction () . with_action ( 'Gs2Money:WithdrawByUserId' ) . with_request ( '{\"moneyName\": \"money-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 200, \"paidOnly\": false}' ), ]) . with_acquire_actions ([ showcase . AcquireAction () . with_action ( 'Gs2Stamina:RecoverStaminaByUserId' ) . with_request ( '{\"moneyName\": \"money-0001\", \"userId\": \"user-0001\", \"slot\": 0, \"count\": 200, \"paidOnly\": false}' ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.update_sales_item_master ({ namespaceName = \"namespace-0001\" , salesItemName = \"sales-item-0001\" , description = \"description1\" , metadata = \"SALES_ITEM_0001\" , verifyActions = nil , consumeActions = { { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.update_sales_item_master_async ({ namespaceName = \"namespace-0001\" , salesItemName = \"sales-item-0001\" , description = \"description1\" , metadata = \"SALES_ITEM_0001\" , verifyActions = nil , consumeActions = { { action = \"Gs2Money:WithdrawByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, acquireActions = { { action = \"Gs2Stamina:RecoverStaminaByUserId\" , request = \"{ \\\" moneyName \\\" : \\\" money-0001 \\\" , \\\" userId \\\" : \\\" user-0001 \\\" , \\\" slot \\\" : 0, \\\" count \\\" : 200, \\\" paidOnly \\\" : false}\" , } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSalesItemMaster 상품 마스터 삭제 지정된 상품 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며 현재 활성화된 쇼케이스에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. salesItemName string  ~ 128자 상품명 상품 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item SalesItemMaster 삭제된 상품 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DeleteSalesItemMaster ( \u0026 showcase . DeleteSalesItemMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SalesItemName : pointy . String ( \"sales-item-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DeleteSalesItemMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e deleteSalesItemMaster ( ( new DeleteSalesItemMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSalesItemName ( \"sales-item-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DeleteSalesItemMasterRequest ; import io.gs2.showcase.result.DeleteSalesItemMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DeleteSalesItemMasterResult result = client . deleteSalesItemMaster ( new DeleteSalesItemMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemName ( \"sales-item-0001\" ) ); SalesItemMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DeleteSalesItemMasterResult \u003e asyncResult = null ; yield return client . DeleteSalesItemMaster ( new Gs2 . Gs2Showcase . Request . DeleteSalesItemMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSalesItemName ( \"sales-item-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . deleteSalesItemMaster ( new Gs2Showcase . DeleteSalesItemMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemName ( \"sales-item-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . delete_sales_item_master ( showcase . DeleteSalesItemMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_sales_item_name ( 'sales-item-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.delete_sales_item_master ({ namespaceName = \"namespace-0001\" , salesItemName = \"sales-item-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.delete_sales_item_master_async ({ namespaceName = \"namespace-0001\" , salesItemName = \"sales-item-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeSalesItemGroupMasters 상품 그룹 마스터 목록 가져오기 상품 그룹 마스터의 페이지네이션 목록을 가져옵니다. 이름의 접두사로 필터링할 수 있습니다. 상품 그룹 마스터는 여러 상품을 묶어서 쇼케이스에 표시하기 위해 번들로 구성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 상품 그룹명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 상품 그룹 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeSalesItemGroupMasters ( \u0026 showcase . DescribeSalesItemGroupMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeSalesItemGroupMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeSalesItemGroupMasters ( ( new DescribeSalesItemGroupMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeSalesItemGroupMastersRequest ; import io.gs2.showcase.result.DescribeSalesItemGroupMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeSalesItemGroupMastersResult result = client . describeSalesItemGroupMasters ( new DescribeSalesItemGroupMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List SalesItemGroupMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeSalesItemGroupMastersResult \u003e asyncResult = null ; yield return client . DescribeSalesItemGroupMasters ( new Gs2 . Gs2Showcase . Request . DescribeSalesItemGroupMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeSalesItemGroupMasters ( new Gs2Showcase . DescribeSalesItemGroupMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_sales_item_group_masters ( showcase . DescribeSalesItemGroupMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_sales_item_group_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_sales_item_group_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createSalesItemGroupMaster 상품 그룹 마스터 신규 생성 이름, 메타데이터, 그룹에 속한 상품명 목록을 가진 새로운 상품 그룹 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. salesItemNames List  2 ~ 10 items 상품 그룹에 포함할 상품 리스트 이 그룹 내 상품 이름의 순서가 지정된 리스트입니다. GS2-Limit 카운터를 사용하여 앞에서부터 순서대로 구매 가능한지를 판정하고, 가장 먼저 구매 가능하다고 판정된 상품이 표시됩니다. 어느 것도 해당하지 않는 경우, 리스트의 마지막 상품이 폴백으로 사용됩니다. Result 타입 설명 item SalesItemGroupMaster 생성된 상품 그룹 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CreateSalesItemGroupMaster ( \u0026 showcase . CreateSalesItemGroupMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"sales-item-group-0001\" ), Description : nil , Metadata : nil , SalesItemNames : [] * string { pointy . String ( \"salesItem-0001\" ), pointy . String ( \"salesItem-0002\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CreateSalesItemGroupMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e createSalesItemGroupMaster ( ( new CreateSalesItemGroupMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"sales-item-group-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withSalesItemNames ([ \"salesItem-0001\" , \"salesItem-0002\" , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CreateSalesItemGroupMasterRequest ; import io.gs2.showcase.result.CreateSalesItemGroupMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CreateSalesItemGroupMasterResult result = client . createSalesItemGroupMaster ( new CreateSalesItemGroupMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"sales-item-group-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withSalesItemNames ( Arrays . asList ( \"salesItem-0001\" , \"salesItem-0002\" )) ); SalesItemGroupMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CreateSalesItemGroupMasterResult \u003e asyncResult = null ; yield return client . CreateSalesItemGroupMaster ( new Gs2 . Gs2Showcase . Request . CreateSalesItemGroupMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"sales-item-group-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithSalesItemNames ( new string [] { \"salesItem-0001\" , \"salesItem-0002\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . createSalesItemGroupMaster ( new Gs2Showcase . CreateSalesItemGroupMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"sales-item-group-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withSalesItemNames ([ \"salesItem-0001\" , \"salesItem-0002\" , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . create_sales_item_group_master ( showcase . CreateSalesItemGroupMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'sales-item-group-0001' ) . with_description ( None ) . with_metadata ( None ) . with_sales_item_names ([ 'salesItem-0001' , 'salesItem-0002' , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.create_sales_item_group_master ({ namespaceName = \"namespace-0001\" , name = \"sales-item-group-0001\" , description = nil , metadata = nil , salesItemNames = { \"salesItem-0001\" , \"salesItem-0002\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.create_sales_item_group_master_async ({ namespaceName = \"namespace-0001\" , name = \"sales-item-group-0001\" , description = nil , metadata = nil , salesItemNames = { \"salesItem-0001\" , \"salesItem-0002\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getSalesItemGroupMaster 상품 그룹 마스터 가져오기 소속된 상품명 목록을 포함하여 지정된 상품 그룹 마스터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. salesItemGroupName string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SalesItemGroupMaster 상품 그룹 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetSalesItemGroupMaster ( \u0026 showcase . GetSalesItemGroupMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SalesItemGroupName : pointy . String ( \"sales-item-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetSalesItemGroupMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getSalesItemGroupMaster ( ( new GetSalesItemGroupMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSalesItemGroupName ( \"sales-item-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetSalesItemGroupMasterRequest ; import io.gs2.showcase.result.GetSalesItemGroupMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetSalesItemGroupMasterResult result = client . getSalesItemGroupMaster ( new GetSalesItemGroupMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemGroupName ( \"sales-item-group-0001\" ) ); SalesItemGroupMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetSalesItemGroupMasterResult \u003e asyncResult = null ; yield return client . GetSalesItemGroupMaster ( new Gs2 . Gs2Showcase . Request . GetSalesItemGroupMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSalesItemGroupName ( \"sales-item-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getSalesItemGroupMaster ( new Gs2Showcase . GetSalesItemGroupMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemGroupName ( \"sales-item-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_sales_item_group_master ( showcase . GetSalesItemGroupMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_sales_item_group_name ( 'sales-item-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_sales_item_group_master ({ namespaceName = \"namespace-0001\" , salesItemGroupName = \"sales-item-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_sales_item_group_master_async ({ namespaceName = \"namespace-0001\" , salesItemGroupName = \"sales-item-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateSalesItemGroupMaster 상품 그룹 마스터 업데이트 지정된 상품 그룹 마스터의 설명, 메타데이터, 소속된 상품명 목록을 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. salesItemGroupName string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. salesItemNames List  2 ~ 10 items 상품 그룹에 포함할 상품 리스트 이 그룹 내 상품 이름의 순서가 지정된 리스트입니다. GS2-Limit 카운터를 사용하여 앞에서부터 순서대로 구매 가능한지를 판정하고, 가장 먼저 구매 가능하다고 판정된 상품이 표시됩니다. 어느 것도 해당하지 않는 경우, 리스트의 마지막 상품이 폴백으로 사용됩니다. Result 타입 설명 item SalesItemGroupMaster 업데이트된 상품 그룹 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . UpdateSalesItemGroupMaster ( \u0026 showcase . UpdateSalesItemGroupMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SalesItemGroupName : pointy . String ( \"sales-item-group-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"SALES_ITEM_GROUP_0001\" ), SalesItemNames : [] * string { pointy . String ( \"salesItem-0001\" ), pointy . String ( \"salesItem-0002\" ), pointy . String ( \"salesItem-0003\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\UpdateSalesItemGroupMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e updateSalesItemGroupMaster ( ( new UpdateSalesItemGroupMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSalesItemGroupName ( \"sales-item-group-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"SALES_ITEM_GROUP_0001\" ) -\u003e withSalesItemNames ([ \"salesItem-0001\" , \"salesItem-0002\" , \"salesItem-0003\" , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.UpdateSalesItemGroupMasterRequest ; import io.gs2.showcase.result.UpdateSalesItemGroupMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { UpdateSalesItemGroupMasterResult result = client . updateSalesItemGroupMaster ( new UpdateSalesItemGroupMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemGroupName ( \"sales-item-group-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"SALES_ITEM_GROUP_0001\" ) . withSalesItemNames ( Arrays . asList ( \"salesItem-0001\" , \"salesItem-0002\" , \"salesItem-0003\" )) ); SalesItemGroupMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . UpdateSalesItemGroupMasterResult \u003e asyncResult = null ; yield return client . UpdateSalesItemGroupMaster ( new Gs2 . Gs2Showcase . Request . UpdateSalesItemGroupMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSalesItemGroupName ( \"sales-item-group-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"SALES_ITEM_GROUP_0001\" ) . WithSalesItemNames ( new string [] { \"salesItem-0001\" , \"salesItem-0002\" , \"salesItem-0003\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . updateSalesItemGroupMaster ( new Gs2Showcase . UpdateSalesItemGroupMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemGroupName ( \"sales-item-group-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"SALES_ITEM_GROUP_0001\" ) . withSalesItemNames ([ \"salesItem-0001\" , \"salesItem-0002\" , \"salesItem-0003\" , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . update_sales_item_group_master ( showcase . UpdateSalesItemGroupMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_sales_item_group_name ( 'sales-item-group-0001' ) . with_description ( 'description1' ) . with_metadata ( 'SALES_ITEM_GROUP_0001' ) . with_sales_item_names ([ 'salesItem-0001' , 'salesItem-0002' , 'salesItem-0003' , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.update_sales_item_group_master ({ namespaceName = \"namespace-0001\" , salesItemGroupName = \"sales-item-group-0001\" , description = \"description1\" , metadata = \"SALES_ITEM_GROUP_0001\" , salesItemNames = { \"salesItem-0001\" , \"salesItem-0002\" , \"salesItem-0003\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.update_sales_item_group_master_async ({ namespaceName = \"namespace-0001\" , salesItemGroupName = \"sales-item-group-0001\" , description = \"description1\" , metadata = \"SALES_ITEM_GROUP_0001\" , salesItemNames = { \"salesItem-0001\" , \"salesItem-0002\" , \"salesItem-0003\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteSalesItemGroupMaster 상품 그룹 마스터 삭제 지정된 상품 그룹 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며 현재 활성화된 쇼케이스에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. salesItemGroupName string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item SalesItemGroupMaster 삭제된 상품 그룹 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DeleteSalesItemGroupMaster ( \u0026 showcase . DeleteSalesItemGroupMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), SalesItemGroupName : pointy . String ( \"sales-item-group-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DeleteSalesItemGroupMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e deleteSalesItemGroupMaster ( ( new DeleteSalesItemGroupMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withSalesItemGroupName ( \"sales-item-group-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DeleteSalesItemGroupMasterRequest ; import io.gs2.showcase.result.DeleteSalesItemGroupMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DeleteSalesItemGroupMasterResult result = client . deleteSalesItemGroupMaster ( new DeleteSalesItemGroupMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemGroupName ( \"sales-item-group-0001\" ) ); SalesItemGroupMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DeleteSalesItemGroupMasterResult \u003e asyncResult = null ; yield return client . DeleteSalesItemGroupMaster ( new Gs2 . Gs2Showcase . Request . DeleteSalesItemGroupMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithSalesItemGroupName ( \"sales-item-group-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . deleteSalesItemGroupMaster ( new Gs2Showcase . DeleteSalesItemGroupMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withSalesItemGroupName ( \"sales-item-group-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . delete_sales_item_group_master ( showcase . DeleteSalesItemGroupMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_sales_item_group_name ( 'sales-item-group-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.delete_sales_item_group_master ({ namespaceName = \"namespace-0001\" , salesItemGroupName = \"sales-item-group-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.delete_sales_item_group_master_async ({ namespaceName = \"namespace-0001\" , salesItemGroupName = \"sales-item-group-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeShowcaseMasters 진열대 마스터 목록 취득 진열대 마스터의 페이지네이션이 적용된 목록을 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 진열대 마스터는 각 진열대의 진열 상품과 판매 기간 이벤트를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 진열대 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 쇼케이스 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeShowcaseMasters ( \u0026 showcase . DescribeShowcaseMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeShowcaseMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeShowcaseMasters ( ( new DescribeShowcaseMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeShowcaseMastersRequest ; import io.gs2.showcase.result.DescribeShowcaseMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeShowcaseMastersResult result = client . describeShowcaseMasters ( new DescribeShowcaseMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List ShowcaseMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeShowcaseMastersResult \u003e asyncResult = null ; yield return client . DescribeShowcaseMasters ( new Gs2 . Gs2Showcase . Request . DescribeShowcaseMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeShowcaseMasters ( new Gs2Showcase . DescribeShowcaseMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_showcase_masters ( showcase . DescribeShowcaseMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_showcase_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_showcase_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createShowcaseMaster 진열대 마스터 신규 생성 이름, 진열 상품, 메타데이터, 그리고 사용자에게 진열대가 제공되는 기간을 제어하는 선택적 판매 기간 이벤트 ID를 가진 새로운 진열대 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. displayItems List  1 ~ 1000 items 진열할 상품 리스트 이 진열대에 진열되는 상품의 리스트입니다. 각 진열 상품은 단일 상품 또는 상품 그룹 중 하나입니다. 판매 기간 이벤트가 종료되었거나 유효하지 않은 상품은 진열대 조회 시 자동으로 필터링됩니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 연관된 GS2-Schedule 이벤트 기간 중에만 진열대를 이용할 수 있습니다. 이벤트가 유효하지 않은 경우, 진열대는 비어 있는 상태로 반환됩니다. Result 타입 설명 item ShowcaseMaster 생성된 쇼케이스 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CreateShowcaseMaster ( \u0026 showcase . CreateShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"showcase-0001\" ), Description : nil , Metadata : nil , DisplayItems : [] showcase . DisplayItemMaster { showcase . DisplayItemMaster { Type : pointy . String ( \"salesItem\" ), SalesItemName : pointy . String ( \"salesItem-0001\" ), }, showcase . DisplayItemMaster { Type : pointy . String ( \"salesItemGroup\" ), SalesItemGroupName : pointy . String ( \"salesItemGroup-0001\" ), SalesPeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), }, }, SalesPeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CreateShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e createShowcaseMaster ( ( new CreateShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"showcase-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withDisplayItems ([ ( new \\Gs2\\Showcase\\Model\\DisplayItemMaster ()) -\u003e withType ( \"salesItem\" ) -\u003e withSalesItemName ( \"salesItem-0001\" ), ( new \\Gs2\\Showcase\\Model\\DisplayItemMaster ()) -\u003e withType ( \"salesItemGroup\" ) -\u003e withSalesItemGroupName ( \"salesItemGroup-0001\" ) -\u003e withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), ]) -\u003e withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CreateShowcaseMasterRequest ; import io.gs2.showcase.result.CreateShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CreateShowcaseMasterResult result = client . createShowcaseMaster ( new CreateShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"showcase-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDisplayItems ( Arrays . asList ( new io . gs2 . showcase . model . DisplayItemMaster () . withType ( \"salesItem\" ) . withSalesItemName ( \"salesItem-0001\" ), new io . gs2 . showcase . model . DisplayItemMaster () . withType ( \"salesItemGroup\" ) . withSalesItemGroupName ( \"salesItemGroup-0001\" ) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) )) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) ); ShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CreateShowcaseMasterResult \u003e asyncResult = null ; yield return client . CreateShowcaseMaster ( new Gs2 . Gs2Showcase . Request . CreateShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"showcase-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithDisplayItems ( new Gs2 . Gs2Showcase . Model . DisplayItemMaster [] { new Gs2 . Gs2Showcase . Model . DisplayItemMaster () . WithType ( \"salesItem\" ) . WithSalesItemName ( \"salesItem-0001\" ), new Gs2 . Gs2Showcase . Model . DisplayItemMaster () . WithType ( \"salesItemGroup\" ) . WithSalesItemGroupName ( \"salesItemGroup-0001\" ) . WithSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), }) . WithSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . createShowcaseMaster ( new Gs2Showcase . CreateShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"showcase-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withDisplayItems ([ new Gs2Showcase . model . DisplayItemMaster () . withType ( \"salesItem\" ) . withSalesItemName ( \"salesItem-0001\" ), new Gs2Showcase . model . DisplayItemMaster () . withType ( \"salesItemGroup\" ) . withSalesItemGroupName ( \"salesItemGroup-0001\" ) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), ]) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . create_showcase_master ( showcase . CreateShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'showcase-0001' ) . with_description ( None ) . with_metadata ( None ) . with_display_items ([ showcase . DisplayItemMaster () . with_type ( 'salesItem' ) . with_sales_item_name ( 'salesItem-0001' ), showcase . DisplayItemMaster () . with_type ( 'salesItemGroup' ) . with_sales_item_group_name ( 'salesItemGroup-0001' ) . with_sales_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001' ), ]) . with_sales_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.create_showcase_master ({ namespaceName = \"namespace-0001\" , name = \"showcase-0001\" , description = nil , metadata = nil , displayItems = { { type = \"salesItem\" , salesItemName = \"salesItem-0001\" , }, { type = \"salesItemGroup\" , salesItemGroupName = \"salesItemGroup-0001\" , salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , } }, salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.create_showcase_master_async ({ namespaceName = \"namespace-0001\" , name = \"showcase-0001\" , description = nil , metadata = nil , displayItems = { { type = \"salesItem\" , salesItemName = \"salesItem-0001\" , }, { type = \"salesItemGroup\" , salesItemGroupName = \"salesItemGroup-0001\" , salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , } }, salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getShowcaseMaster 진열대 마스터 취득 진열 상품, 메타데이터, 판매 기간 이벤트 설정을 포함하여 지정된 진열대 마스터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item ShowcaseMaster 쇼케이스 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetShowcaseMaster ( \u0026 showcase . GetShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getShowcaseMaster ( ( new GetShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetShowcaseMasterRequest ; import io.gs2.showcase.result.GetShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetShowcaseMasterResult result = client . getShowcaseMaster ( new GetShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) ); ShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetShowcaseMasterResult \u003e asyncResult = null ; yield return client . GetShowcaseMaster ( new Gs2 . Gs2Showcase . Request . GetShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getShowcaseMaster ( new Gs2Showcase . GetShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_showcase_master ( showcase . GetShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_showcase_master ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_showcase_master_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateShowcaseMaster 쇼케이스 마스터 업데이트 지정된 쇼케이스 마스터의 설명, 메타데이터, 진열 상품, 판매 기간 이벤트 설정을 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. displayItems List  1 ~ 1000 items 진열할 상품 리스트 이 진열대에 진열되는 상품의 리스트입니다. 각 진열 상품은 단일 상품 또는 상품 그룹 중 하나입니다. 판매 기간 이벤트가 종료되었거나 유효하지 않은 상품은 진열대 조회 시 자동으로 필터링됩니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 연관된 GS2-Schedule 이벤트 기간 중에만 진열대를 이용할 수 있습니다. 이벤트가 유효하지 않은 경우, 진열대는 비어 있는 상태로 반환됩니다. Result 타입 설명 item ShowcaseMaster 업데이트된 쇼케이스 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . UpdateShowcaseMaster ( \u0026 showcase . UpdateShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"SHOWCASE_0001\" ), DisplayItems : [] showcase . DisplayItemMaster { showcase . DisplayItemMaster { Type : pointy . String ( \"salesItem\" ), SalesItemName : pointy . String ( \"salesItem-0003\" ), }, showcase . DisplayItemMaster { Type : pointy . String ( \"salesItemGroup\" ), SalesItemGroupName : pointy . String ( \"salesItemGroup-0001\" ), SalesPeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), }, }, SalesPeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\UpdateShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e updateShowcaseMaster ( ( new UpdateShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"SHOWCASE_0001\" ) -\u003e withDisplayItems ([ ( new \\Gs2\\Showcase\\Model\\DisplayItemMaster ()) -\u003e withType ( \"salesItem\" ) -\u003e withSalesItemName ( \"salesItem-0003\" ), ( new \\Gs2\\Showcase\\Model\\DisplayItemMaster ()) -\u003e withType ( \"salesItemGroup\" ) -\u003e withSalesItemGroupName ( \"salesItemGroup-0001\" ) -\u003e withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), ]) -\u003e withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.UpdateShowcaseMasterRequest ; import io.gs2.showcase.result.UpdateShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { UpdateShowcaseMasterResult result = client . updateShowcaseMaster ( new UpdateShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"SHOWCASE_0001\" ) . withDisplayItems ( Arrays . asList ( new io . gs2 . showcase . model . DisplayItemMaster () . withType ( \"salesItem\" ) . withSalesItemName ( \"salesItem-0003\" ), new io . gs2 . showcase . model . DisplayItemMaster () . withType ( \"salesItemGroup\" ) . withSalesItemGroupName ( \"salesItemGroup-0001\" ) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) )) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); ShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . UpdateShowcaseMasterResult \u003e asyncResult = null ; yield return client . UpdateShowcaseMaster ( new Gs2 . Gs2Showcase . Request . UpdateShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"SHOWCASE_0001\" ) . WithDisplayItems ( new Gs2 . Gs2Showcase . Model . DisplayItemMaster [] { new Gs2 . Gs2Showcase . Model . DisplayItemMaster () . WithType ( \"salesItem\" ) . WithSalesItemName ( \"salesItem-0003\" ), new Gs2 . Gs2Showcase . Model . DisplayItemMaster () . WithType ( \"salesItemGroup\" ) . WithSalesItemGroupName ( \"salesItemGroup-0001\" ) . WithSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), }) . WithSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . updateShowcaseMaster ( new Gs2Showcase . UpdateShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"SHOWCASE_0001\" ) . withDisplayItems ([ new Gs2Showcase . model . DisplayItemMaster () . withType ( \"salesItem\" ) . withSalesItemName ( \"salesItem-0003\" ), new Gs2Showcase . model . DisplayItemMaster () . withType ( \"salesItemGroup\" ) . withSalesItemGroupName ( \"salesItemGroup-0001\" ) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), ]) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . update_showcase_master ( showcase . UpdateShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_description ( 'description1' ) . with_metadata ( 'SHOWCASE_0001' ) . with_display_items ([ showcase . DisplayItemMaster () . with_type ( 'salesItem' ) . with_sales_item_name ( 'salesItem-0003' ), showcase . DisplayItemMaster () . with_type ( 'salesItemGroup' ) . with_sales_item_group_name ( 'salesItemGroup-0001' ) . with_sales_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001' ), ]) . with_sales_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.update_showcase_master ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , description = \"description1\" , metadata = \"SHOWCASE_0001\" , displayItems = { { type = \"salesItem\" , salesItemName = \"salesItem-0003\" , }, { type = \"salesItemGroup\" , salesItemGroupName = \"salesItemGroup-0001\" , salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , } }, salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.update_showcase_master_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , description = \"description1\" , metadata = \"SHOWCASE_0001\" , displayItems = { { type = \"salesItem\" , salesItemName = \"salesItem-0003\" , }, { type = \"salesItemGroup\" , salesItemGroupName = \"salesItemGroup-0001\" , salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , } }, salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteShowcaseMaster 쇼케이스 마스터 삭제 지정된 쇼케이스 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며 현재 활성화된 쇼케이스에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item ShowcaseMaster 삭제된 쇼케이스 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DeleteShowcaseMaster ( \u0026 showcase . DeleteShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DeleteShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e deleteShowcaseMaster ( ( new DeleteShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DeleteShowcaseMasterRequest ; import io.gs2.showcase.result.DeleteShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DeleteShowcaseMasterResult result = client . deleteShowcaseMaster ( new DeleteShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) ); ShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DeleteShowcaseMasterResult \u003e asyncResult = null ; yield return client . DeleteShowcaseMaster ( new Gs2 . Gs2Showcase . Request . DeleteShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . deleteShowcaseMaster ( new Gs2Showcase . DeleteShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . delete_showcase_master ( showcase . DeleteShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.delete_showcase_master ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.delete_showcase_master_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRandomShowcaseMasters 랜덤 쇼케이스 마스터 목록 가져오기 랜덤 쇼케이스 마스터의 페이지네이션 목록을 가져옵니다. 이름의 접두사로 필터링할 수 있습니다. 랜덤 쇼케이스 마스터는 상품 풀, 최대 표시 수, 로테이션 타이밍, 판매 기간 이벤트를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 랜덤 쇼케이스명 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 랜덤 쇼케이스 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DescribeRandomShowcaseMasters ( \u0026 showcase . DescribeRandomShowcaseMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DescribeRandomShowcaseMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e describeRandomShowcaseMasters ( ( new DescribeRandomShowcaseMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DescribeRandomShowcaseMastersRequest ; import io.gs2.showcase.result.DescribeRandomShowcaseMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DescribeRandomShowcaseMastersResult result = client . describeRandomShowcaseMasters ( new DescribeRandomShowcaseMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List RandomShowcaseMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DescribeRandomShowcaseMastersResult \u003e asyncResult = null ; yield return client . DescribeRandomShowcaseMasters ( new Gs2 . Gs2Showcase . Request . DescribeRandomShowcaseMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . describeRandomShowcaseMasters ( new Gs2Showcase . DescribeRandomShowcaseMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . describe_random_showcase_masters ( showcase . DescribeRandomShowcaseMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.describe_random_showcase_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'showcase' ) api_result_handler = client.describe_random_showcase_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createRandomShowcaseMaster 랜덤 쇼케이스 마스터 신규 생성 최대 표시 수, 진열 상품 풀, 기준 타임스탬프, 상품 로테이션의 리셋 간격(시간), 그리고 선택적인 판매 기간 이벤트 ID를 가진 새로운 랜덤 쇼케이스 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumNumberOfChoice int  1 ~ 100 선택되는 상품의 최대 수 각 로테이션 기간마다 상품 풀에서 랜덤으로 추첨되는 상품의 수입니다. 가중치 기반 랜덤 선택으로 중복 없이 추첨되므로, 한 번의 로테이션에서 같은 상품이 두 번 표시되는 일은 없습니다. displayItems List  1 ~ 100 items 선정 대상 랜덤 진열 상품 리스트 상품이 랜덤으로 추첨되는 후보 아이템의 풀입니다. 각 아이템에는 선택 확률을 결정하는 가중치와, 로테이션 전체에서 표시 가능한 횟수를 제한하는 재고 수량이 있습니다. baseTimestamp long  진열할 상품을 재추첨하는 기준 시각 로테이션 경계 계산에 사용되는 기준 타임스탬프입니다. 이 기준 시각부터 일정 간격(resetIntervalHours)마다 상품의 재추첨이 이루어집니다. 과거 시각을 지정해야 합니다. resetIntervalHours int  1 ~ 168 진열 상품을 재추첨하는 간격(시간) 각 상품 로테이션 사이의 시간 수입니다. baseTimestamp를 기준으로 간격이 경과하면 새로운 난수 시드로 진열 상품이 재추첨됩니다. 1~168시간(1주일) 범위에서 설정할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 랜덤 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대를 이용할 수 있습니다. Result 타입 설명 item RandomShowcaseMaster 생성된 랜덤 쇼케이스 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . CreateRandomShowcaseMaster ( \u0026 showcase . CreateRandomShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"showcase-0001\" ), Description : nil , Metadata : nil , MaximumNumberOfChoice : pointy . Int32 ( 2 ), DisplayItems : [] showcase . RandomDisplayItemModel { showcase . RandomDisplayItemModel { Name : pointy . String ( \"display-item-0001\" ), ConsumeActions : [] showcase . ConsumeAction { showcase . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, }, AcquireActions : [] showcase . AcquireAction { showcase . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }, }, Stock : pointy . Int32 ( 1 ), Weight : pointy . Int32 ( 1 ), }, showcase . RandomDisplayItemModel { Name : pointy . String ( \"display-item-0002\" ), ConsumeActions : [] showcase . ConsumeAction { showcase . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, }, AcquireActions : [] showcase . AcquireAction { showcase . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }, }, Stock : pointy . Int32 ( 2 ), Weight : pointy . Int32 ( 2 ), }, showcase . RandomDisplayItemModel { Name : pointy . String ( \"display-item-0003\" ), ConsumeActions : [] showcase . ConsumeAction { showcase . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, }, AcquireActions : [] showcase . AcquireAction { showcase . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }, }, Stock : pointy . Int32 ( 3 ), Weight : pointy . Int32 ( 3 ), }, }, BaseTimestamp : pointy . Int64 ( 1000 ), ResetIntervalHours : pointy . Int32 ( 6 ), SalesPeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\CreateRandomShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e createRandomShowcaseMaster ( ( new CreateRandomShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"showcase-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withMaximumNumberOfChoice ( 2 ) -\u003e withDisplayItems ([ ( new \\Gs2\\Showcase\\Model\\RandomDisplayItemModel ()) -\u003e withName ( \"display-item-0001\" ) -\u003e withConsumeActions ([ ( new \\Gs2\\Showcase\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" ), ]) -\u003e withAcquireActions ([ ( new \\Gs2\\Showcase\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" ), ]) -\u003e withStock ( 1 ) -\u003e withWeight ( 1 ), ( new \\Gs2\\Showcase\\Model\\RandomDisplayItemModel ()) -\u003e withName ( \"display-item-0002\" ) -\u003e withConsumeActions ([ ( new \\Gs2\\Showcase\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" ), ]) -\u003e withAcquireActions ([ ( new \\Gs2\\Showcase\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" ), ]) -\u003e withStock ( 2 ) -\u003e withWeight ( 2 ), ( new \\Gs2\\Showcase\\Model\\RandomDisplayItemModel ()) -\u003e withName ( \"display-item-0003\" ) -\u003e withConsumeActions ([ ( new \\Gs2\\Showcase\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" ), ]) -\u003e withAcquireActions ([ ( new \\Gs2\\Showcase\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" ), ]) -\u003e withStock ( 3 ) -\u003e withWeight ( 3 ), ]) -\u003e withBaseTimestamp ( 1000 ) -\u003e withResetIntervalHours ( 6 ) -\u003e withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.CreateRandomShowcaseMasterRequest ; import io.gs2.showcase.result.CreateRandomShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { CreateRandomShowcaseMasterResult result = client . createRandomShowcaseMaster ( new CreateRandomShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"showcase-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMaximumNumberOfChoice ( 2 ) . withDisplayItems ( Arrays . asList ( new io . gs2 . showcase . model . RandomDisplayItemModel () . withName ( \"display-item-0001\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ) )) . withAcquireActions ( Arrays . asList ( new io . gs2 . showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ) )) . withStock ( 1 ) . withWeight ( 1 ), new io . gs2 . showcase . model . RandomDisplayItemModel () . withName ( \"display-item-0002\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ) )) . withAcquireActions ( Arrays . asList ( new io . gs2 . showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ) )) . withStock ( 2 ) . withWeight ( 2 ), new io . gs2 . showcase . model . RandomDisplayItemModel () . withName ( \"display-item-0003\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ) )) . withAcquireActions ( Arrays . asList ( new io . gs2 . showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ) )) . withStock ( 3 ) . withWeight ( 3 ) )) . withBaseTimestamp ( 1000L ) . withResetIntervalHours ( 6 ) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) ); RandomShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . CreateRandomShowcaseMasterResult \u003e asyncResult = null ; yield return client . CreateRandomShowcaseMaster ( new Gs2 . Gs2Showcase . Request . CreateRandomShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"showcase-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithMaximumNumberOfChoice ( 2 ) . WithDisplayItems ( new Gs2 . Gs2Showcase . Model . RandomDisplayItemModel [] { new Gs2 . Gs2Showcase . Model . RandomDisplayItemModel () . WithName ( \"display-item-0001\" ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }) . WithStock ( 1 ) . WithWeight ( 1 ), new Gs2 . Gs2Showcase . Model . RandomDisplayItemModel () . WithName ( \"display-item-0002\" ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }) . WithStock ( 2 ) . WithWeight ( 2 ), new Gs2 . Gs2Showcase . Model . RandomDisplayItemModel () . WithName ( \"display-item-0003\" ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }) . WithStock ( 3 ) . WithWeight ( 3 ), }) . WithBaseTimestamp ( 1000L ) . WithResetIntervalHours ( 6 ) . WithSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . createRandomShowcaseMaster ( new Gs2Showcase . CreateRandomShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"showcase-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withMaximumNumberOfChoice ( 2 ) . withDisplayItems ([ new Gs2Showcase . model . RandomDisplayItemModel () . withName ( \"display-item-0001\" ) . withConsumeActions ([ new Gs2Showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), ]) . withAcquireActions ([ new Gs2Showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), ]) . withStock ( 1 ) . withWeight ( 1 ), new Gs2Showcase . model . RandomDisplayItemModel () . withName ( \"display-item-0002\" ) . withConsumeActions ([ new Gs2Showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), ]) . withAcquireActions ([ new Gs2Showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), ]) . withStock ( 2 ) . withWeight ( 2 ), new Gs2Showcase . model . RandomDisplayItemModel () . withName ( \"display-item-0003\" ) . withConsumeActions ([ new Gs2Showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), ]) . withAcquireActions ([ new Gs2Showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), ]) . withStock ( 3 ) . withWeight ( 3 ), ]) . withBaseTimestamp ( 1000 ) . withResetIntervalHours ( 6 ) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . create_random_showcase_master ( showcase . CreateRandomShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'showcase-0001' ) . with_description ( None ) . with_metadata ( None ) . with_maximum_number_of_choice ( 2 ) . with_display_items ([ showcase . RandomDisplayItemModel () . with_name ( 'display-item-0001' ) . with_consume_actions ([ showcase . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0001\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' ), ]) . with_acquire_actions ([ showcase . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0002\", \"userId\": \"# {userId} \", \"acquireCount\": 1}' ), ]) . with_stock ( 1 ) . with_weight ( 1 ), showcase . RandomDisplayItemModel () . with_name ( 'display-item-0002' ) . with_consume_actions ([ showcase . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0001\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' ), ]) . with_acquire_actions ([ showcase . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0002\", \"userId\": \"# {userId} \", \"acquireCount\": 1}' ), ]) . with_stock ( 2 ) . with_weight ( 2 ), showcase . RandomDisplayItemModel () . with_name ( 'display-item-0003' ) . with_consume_actions ([ showcase . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0001\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' ), ]) . with_acquire_actions ([ showcase . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0002\", \"userId\": \"# {userId} \", \"acquireCount\": 1}' ), ]) . with_stock ( 3 ) . with_weight ( 3 ), ]) . with_base_timestamp ( 1000 ) . with_reset_interval_hours ( 6 ) . with_sales_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.create_random_showcase_master ({ namespaceName = \"namespace-0001\" , name = \"showcase-0001\" , description = nil , metadata = nil , maximumNumberOfChoice = 2 , displayItems = { { name = \"display-item-0001\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 1 , weight = 1 , }, { name = \"display-item-0002\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 2 , weight = 2 , }, { name = \"display-item-0003\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 3 , weight = 3 , } }, baseTimestamp = 1000 , resetIntervalHours = 6 , salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.create_random_showcase_master_async ({ namespaceName = \"namespace-0001\" , name = \"showcase-0001\" , description = nil , metadata = nil , maximumNumberOfChoice = 2 , displayItems = { { name = \"display-item-0001\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 1 , weight = 1 , }, { name = \"display-item-0002\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 2 , weight = 2 , }, { name = \"display-item-0003\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 3 , weight = 3 , } }, baseTimestamp = 1000 , resetIntervalHours = 6 , salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRandomShowcaseMaster 랜덤 쇼케이스 마스터 가져오기 상품 풀, 최대 표시 수, 로테이션 타이밍 설정, 판매 기간 이벤트 설정을 포함하여 지정된 랜덤 쇼케이스 마스터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item RandomShowcaseMaster 랜덤 쇼케이스 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . GetRandomShowcaseMaster ( \u0026 showcase . GetRandomShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\GetRandomShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e getRandomShowcaseMaster ( ( new GetRandomShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.GetRandomShowcaseMasterRequest ; import io.gs2.showcase.result.GetRandomShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { GetRandomShowcaseMasterResult result = client . getRandomShowcaseMaster ( new GetRandomShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) ); RandomShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . GetRandomShowcaseMasterResult \u003e asyncResult = null ; yield return client . GetRandomShowcaseMaster ( new Gs2 . Gs2Showcase . Request . GetRandomShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . getRandomShowcaseMaster ( new Gs2Showcase . GetRandomShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . get_random_showcase_master ( showcase . GetRandomShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.get_random_showcase_master ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.get_random_showcase_master_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRandomShowcaseMaster 랜덤 쇼케이스 마스터 업데이트 지정된 랜덤 쇼케이스 마스터의 설명, 메타데이터, 상품 풀, 최대 표시 수, 로테이션 타이밍, 판매 기간 이벤트를 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumNumberOfChoice int  1 ~ 100 선택되는 상품의 최대 수 각 로테이션 기간마다 상품 풀에서 랜덤으로 추첨되는 상품의 수입니다. 가중치 기반 랜덤 선택으로 중복 없이 추첨되므로, 한 번의 로테이션에서 같은 상품이 두 번 표시되는 일은 없습니다. displayItems List  1 ~ 100 items 선정 대상 랜덤 진열 상품 리스트 상품이 랜덤으로 추첨되는 후보 아이템의 풀입니다. 각 아이템에는 선택 확률을 결정하는 가중치와, 로테이션 전체에서 표시 가능한 횟수를 제한하는 재고 수량이 있습니다. baseTimestamp long  진열할 상품을 재추첨하는 기준 시각 로테이션 경계 계산에 사용되는 기준 타임스탬프입니다. 이 기준 시각부터 일정 간격(resetIntervalHours)마다 상품의 재추첨이 이루어집니다. 과거 시각을 지정해야 합니다. resetIntervalHours int  1 ~ 168 진열 상품을 재추첨하는 간격(시간) 각 상품 로테이션 사이의 시간 수입니다. baseTimestamp를 기준으로 간격이 경과하면 새로운 난수 시드로 진열 상품이 재추첨됩니다. 1~168시간(1주일) 범위에서 설정할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 랜덤 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대를 이용할 수 있습니다. Result 타입 설명 item RandomShowcaseMaster 업데이트된 랜덤 쇼케이스 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . UpdateRandomShowcaseMaster ( \u0026 showcase . UpdateRandomShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"SHOWCASE_0001\" ), MaximumNumberOfChoice : pointy . Int32 ( 1 ), DisplayItems : [] showcase . RandomDisplayItemModel { showcase . RandomDisplayItemModel { Name : pointy . String ( \"display-item-1001\" ), ConsumeActions : [] showcase . ConsumeAction { showcase . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, }, AcquireActions : [] showcase . AcquireAction { showcase . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }, }, Stock : pointy . Int32 ( 5 ), Weight : pointy . Int32 ( 10 ), }, showcase . RandomDisplayItemModel { Name : pointy . String ( \"display-item-1002\" ), ConsumeActions : [] showcase . ConsumeAction { showcase . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, }, AcquireActions : [] showcase . AcquireAction { showcase . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }, }, Stock : pointy . Int32 ( 10 ), Weight : pointy . Int32 ( 20 ), }, showcase . RandomDisplayItemModel { Name : pointy . String ( \"display-item-1003\" ), ConsumeActions : [] showcase . ConsumeAction { showcase . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, }, AcquireActions : [] showcase . AcquireAction { showcase . AcquireAction { Action : pointy . String ( \"Gs2Inventory:AcquireItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }, }, Stock : pointy . Int32 ( 15 ), Weight : pointy . Int32 ( 30 ), }, }, BaseTimestamp : pointy . Int64 ( 2000 ), ResetIntervalHours : pointy . Int32 ( 12 ), SalesPeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\UpdateRandomShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e updateRandomShowcaseMaster ( ( new UpdateRandomShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"SHOWCASE_0001\" ) -\u003e withMaximumNumberOfChoice ( 1 ) -\u003e withDisplayItems ([ ( new \\Gs2\\Showcase\\Model\\RandomDisplayItemModel ()) -\u003e withName ( \"display-item-1001\" ) -\u003e withConsumeActions ([ ( new \\Gs2\\Showcase\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" ), ]) -\u003e withAcquireActions ([ ( new \\Gs2\\Showcase\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" ), ]) -\u003e withStock ( 5 ) -\u003e withWeight ( 10 ), ( new \\Gs2\\Showcase\\Model\\RandomDisplayItemModel ()) -\u003e withName ( \"display-item-1002\" ) -\u003e withConsumeActions ([ ( new \\Gs2\\Showcase\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" ), ]) -\u003e withAcquireActions ([ ( new \\Gs2\\Showcase\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" ), ]) -\u003e withStock ( 10 ) -\u003e withWeight ( 20 ), ( new \\Gs2\\Showcase\\Model\\RandomDisplayItemModel ()) -\u003e withName ( \"display-item-1003\" ) -\u003e withConsumeActions ([ ( new \\Gs2\\Showcase\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" ), ]) -\u003e withAcquireActions ([ ( new \\Gs2\\Showcase\\Model\\AcquireAction ()) -\u003e withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" ), ]) -\u003e withStock ( 15 ) -\u003e withWeight ( 30 ), ]) -\u003e withBaseTimestamp ( 2000 ) -\u003e withResetIntervalHours ( 12 ) -\u003e withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.UpdateRandomShowcaseMasterRequest ; import io.gs2.showcase.result.UpdateRandomShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { UpdateRandomShowcaseMasterResult result = client . updateRandomShowcaseMaster ( new UpdateRandomShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"SHOWCASE_0001\" ) . withMaximumNumberOfChoice ( 1 ) . withDisplayItems ( Arrays . asList ( new io . gs2 . showcase . model . RandomDisplayItemModel () . withName ( \"display-item-1001\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ) )) . withAcquireActions ( Arrays . asList ( new io . gs2 . showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ) )) . withStock ( 5 ) . withWeight ( 10 ), new io . gs2 . showcase . model . RandomDisplayItemModel () . withName ( \"display-item-1002\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ) )) . withAcquireActions ( Arrays . asList ( new io . gs2 . showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ) )) . withStock ( 10 ) . withWeight ( 20 ), new io . gs2 . showcase . model . RandomDisplayItemModel () . withName ( \"display-item-1003\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ) )) . withAcquireActions ( Arrays . asList ( new io . gs2 . showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ) )) . withStock ( 15 ) . withWeight ( 30 ) )) . withBaseTimestamp ( 2000L ) . withResetIntervalHours ( 12 ) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); RandomShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . UpdateRandomShowcaseMasterResult \u003e asyncResult = null ; yield return client . UpdateRandomShowcaseMaster ( new Gs2 . Gs2Showcase . Request . UpdateRandomShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"SHOWCASE_0001\" ) . WithMaximumNumberOfChoice ( 1 ) . WithDisplayItems ( new Gs2 . Gs2Showcase . Model . RandomDisplayItemModel [] { new Gs2 . Gs2Showcase . Model . RandomDisplayItemModel () . WithName ( \"display-item-1001\" ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }) . WithStock ( 5 ) . WithWeight ( 10 ), new Gs2 . Gs2Showcase . Model . RandomDisplayItemModel () . WithName ( \"display-item-1002\" ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }) . WithStock ( 10 ) . WithWeight ( 20 ), new Gs2 . Gs2Showcase . Model . RandomDisplayItemModel () . WithName ( \"display-item-1003\" ) . WithConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }) . WithAcquireActions ( new Gs2 . Core . Model . AcquireAction [] { new Gs2 . Core . Model . AcquireAction () . WithAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), }) . WithStock ( 15 ) . WithWeight ( 30 ), }) . WithBaseTimestamp ( 2000L ) . WithResetIntervalHours ( 12 ) . WithSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . updateRandomShowcaseMaster ( new Gs2Showcase . UpdateRandomShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"SHOWCASE_0001\" ) . withMaximumNumberOfChoice ( 1 ) . withDisplayItems ([ new Gs2Showcase . model . RandomDisplayItemModel () . withName ( \"display-item-1001\" ) . withConsumeActions ([ new Gs2Showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), ]) . withAcquireActions ([ new Gs2Showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), ]) . withStock ( 5 ) . withWeight ( 10 ), new Gs2Showcase . model . RandomDisplayItemModel () . withName ( \"display-item-1002\" ) . withConsumeActions ([ new Gs2Showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), ]) . withAcquireActions ([ new Gs2Showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), ]) . withStock ( 10 ) . withWeight ( 20 ), new Gs2Showcase . model . RandomDisplayItemModel () . withName ( \"display-item-1003\" ) . withConsumeActions ([ new Gs2Showcase . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0001\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), ]) . withAcquireActions ([ new Gs2Showcase . model . AcquireAction () . withAction ( \"Gs2Inventory:AcquireItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"item-0002\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"acquireCount\\\": 1}\" ), ]) . withStock ( 15 ) . withWeight ( 30 ), ]) . withBaseTimestamp ( 2000 ) . withResetIntervalHours ( 12 ) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . update_random_showcase_master ( showcase . UpdateRandomShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) . with_description ( 'description1' ) . with_metadata ( 'SHOWCASE_0001' ) . with_maximum_number_of_choice ( 1 ) . with_display_items ([ showcase . RandomDisplayItemModel () . with_name ( 'display-item-1001' ) . with_consume_actions ([ showcase . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0001\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' ), ]) . with_acquire_actions ([ showcase . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0002\", \"userId\": \"# {userId} \", \"acquireCount\": 1}' ), ]) . with_stock ( 5 ) . with_weight ( 10 ), showcase . RandomDisplayItemModel () . with_name ( 'display-item-1002' ) . with_consume_actions ([ showcase . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0001\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' ), ]) . with_acquire_actions ([ showcase . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0002\", \"userId\": \"# {userId} \", \"acquireCount\": 1}' ), ]) . with_stock ( 10 ) . with_weight ( 20 ), showcase . RandomDisplayItemModel () . with_name ( 'display-item-1003' ) . with_consume_actions ([ showcase . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0001\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' ), ]) . with_acquire_actions ([ showcase . AcquireAction () . with_action ( 'Gs2Inventory:AcquireItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"item-0002\", \"userId\": \"# {userId} \", \"acquireCount\": 1}' ), ]) . with_stock ( 15 ) . with_weight ( 30 ), ]) . with_base_timestamp ( 2000 ) . with_reset_interval_hours ( 12 ) . with_sales_period_event_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.update_random_showcase_master ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , description = \"description1\" , metadata = \"SHOWCASE_0001\" , maximumNumberOfChoice = 1 , displayItems = { { name = \"display-item-1001\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 5 , weight = 10 , }, { name = \"display-item-1002\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 10 , weight = 20 , }, { name = \"display-item-1003\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 15 , weight = 30 , } }, baseTimestamp = 2000 , resetIntervalHours = 12 , salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.update_random_showcase_master_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , description = \"description1\" , metadata = \"SHOWCASE_0001\" , maximumNumberOfChoice = 1 , displayItems = { { name = \"display-item-1001\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 5 , weight = 10 , }, { name = \"display-item-1002\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 10 , weight = 20 , }, { name = \"display-item-1003\" , consumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0001 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, acquireActions = { { action = \"Gs2Inventory:AcquireItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" item-0002 \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" acquireCount \\\" : 1}\" , } }, stock = 15 , weight = 30 , } }, baseTimestamp = 2000 , resetIntervalHours = 12 , salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRandomShowcaseMaster 랜덤 쇼케이스 마스터 삭제 지정된 랜덤 쇼케이스 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며 현재 활성화된 랜덤 쇼케이스에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. Result 타입 설명 item RandomShowcaseMaster 삭제된 랜덤 쇼케이스 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/showcase\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := showcase . Gs2ShowcaseRestClient { Session : \u0026 session , } result , err := client . DeleteRandomShowcaseMaster ( \u0026 showcase . DeleteRandomShowcaseMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), ShowcaseName : pointy . String ( \"showcase-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Showcase\\Gs2ShowcaseRestClient ; use Gs2\\Showcase\\Request\\DeleteRandomShowcaseMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2ShowcaseRestClient ( $session ); try { $result = $client -\u003e deleteRandomShowcaseMaster ( ( new DeleteRandomShowcaseMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withShowcaseName ( \"showcase-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.showcase.rest.Gs2ShowcaseRestClient ; import io.gs2.showcase.request.DeleteRandomShowcaseMasterRequest ; import io.gs2.showcase.result.DeleteRandomShowcaseMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2ShowcaseRestClient client = new Gs2ShowcaseRestClient ( session ); try { DeleteRandomShowcaseMasterResult result = client . deleteRandomShowcaseMaster ( new DeleteRandomShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) ); RandomShowcaseMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2ShowcaseRestClient ( session ); AsyncResult Gs2 . Gs2Showcase . Result . DeleteRandomShowcaseMasterResult \u003e asyncResult = null ; yield return client . DeleteRandomShowcaseMaster ( new Gs2 . Gs2Showcase . Request . DeleteRandomShowcaseMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithShowcaseName ( \"showcase-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Showcase from '@/gs2/showcase' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Showcase . Gs2ShowcaseRestClient ( session ); try { const result = await client . deleteRandomShowcaseMaster ( new Gs2Showcase . DeleteRandomShowcaseMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withShowcaseName ( \"showcase-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import showcase session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = showcase . Gs2ShowcaseRestClient ( session ) try : result = client . delete_random_showcase_master ( showcase . DeleteRandomShowcaseMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_showcase_name ( 'showcase-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'showcase' ) api_result = client.delete_random_showcase_master ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'showcase' ) api_result_handler = client.delete_random_showcase_master_async ({ namespaceName = \"namespace-0001\" , showcaseName = \"showcase-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Showcase SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Showcase SDK API 레퍼런스","url":"/ko/api_reference/showcase/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 노드 해방·구속 조작을 실행할 때 사용되는 트랜잭션 처리 설정입니다. 소비 액션(해방 비용)과 입수 액션(구속 시 반환)이 GS2 트랜잭션 시스템을 통해 어떻게 처리되는지를 정의합니다. releaseScript ScriptSetting 노드 해방 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - release restrainScript ScriptSetting 노드 해방 상태를 미해방 상태로 되돌릴 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - restrain logSetting LogSetting 로그 출력 설정 노드 해방·구속·초기화 등 스킬 트리 조작에 대한 로그 출력 설정입니다. 설정한 경우, 조작 로그가 지정한 GS2-Log 네임스페이스로 출력됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Status 스킬 트리 해방 상황 특정 플레이어와 프로퍼티에 대한 스킬 트리의 해방 상태를 추적하는 모델입니다. 해방(언락)된 노드명의 목록을 관리합니다. 노드는 해방(목록에 추가), 구속(목록에서 제거), 초기화(전체 삭제)할 수 있습니다. 이미 해방된 노드를 해방하려 하거나, 미해방 노드를 구속하려 하면 오류가 발생합니다. 사용자가 처음 접근했을 때 자동으로 생성됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 statusId string ※ ~ 1024자 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. releasedNodeNames List [] 0 ~ 1000 items 해제된 노드 모델명 리스트 이 스킬트리에서 플레이어가 잠금 해제한 노드 모델명 리스트입니다. 해제(추가), 구속(삭제), 리셋(전체 초기화) 작업으로 갱신됩니다. 최대 1000건. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 NodeModel 노드 모델 스킬 트리 내의 노드를 정의하는 모델로, 해방 비용·전제 조건·반환 동작을 포함합니다. 각 노드에는 검증 액션(해방 전 조건 확인), 소비 액션(지불할 비용), 먼저 해방되어야 하는 전제 노드를 설정할 수 있습니다. 노드를 구속(미해방 상태로 되돌림)하면, 소비한 리소스가 반환율에 따라 부분적으로 반환됩니다. 반환 입수 액션은 소비 액션에 반환율을 곱하여 자동으로 계산됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 nodeModelId string ※ ~ 1024자 노드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. releaseVerifyActions List [] 0 ~ 10 items 해방 검증 액션 목록 이 노드를 해방하기 전에 실행되어 조건이 충족되었는지 확인하는 검증 액션의 목록입니다. 예를 들어 플레이어가 특정 레벨에 도달했는지, 특정 아이템을 소지하고 있는지를 검증할 수 있습니다. 검증 액션 중 하나라도 실패하면 노드 해방이 거부됩니다. 최대 10개 액션. releaseConsumeActions List [] 1 ~ 10 items 해방 소비 액션 목록 이 노드를 해방할 때 실행되는 소비 액션의 목록으로, 해방 비용을 나타냅니다. 이 액션들은 반환 입수 액션 계산에도 사용됩니다. 노드를 구속할 때 각 소비 액션이 반환율에 따라 역산됩니다. 최소 1개의 소비 액션이 필요합니다. 최대 10개 액션. returnAcquireActions List 0 ~ 10 items 반환 입수 액션 목록 이 노드를 구속(취소)할 때 실행되는 입수 액션의 목록으로, 플레이어에게 반환되는 리소스를 나타냅니다. 이 필드는 해방 소비 액션에 반환율을 곱하여 자동 생성됩니다. 예를 들어 해방 비용이 골드 100이고 반환율이 0.8인 경우, 구속 시 골드 80이 반환됩니다. 최대 10개 액션. restrainReturnRate float 1.0 0.0 ~ 1.0 반환율 이 노드를 구속(미해방 상태로 되돌림)했을 때 소비된 리소스가 반환되는 비율입니다. 1.0은 전액 반환, 0.5는 절반 반환, 0.0은 반환 없음을 의미합니다. 기본값은 1.0(전액 반환)입니다. 유효 범위: 0.0~1.0. premiseNodeNames List [] 0 ~ 10 items 전제 노드명 목록 이 노드를 해방하기 전에 먼저 해방되어 있어야 하는 다른 노드 모델의 이름입니다. 스킬 트리의 의존 관계 그래프를 정의합니다. 전제 노드가 모두 해방되어 있지 않으면 이 노드는 해방할 수 없습니다. 최대 10개의 전제 노드. Config 컨피그 설정 트랜잭션의 변수에 적용하는 설정 값 상세 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 value string ~ 51200자 값 ConsumeAction 소비 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 입수 액션 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 CurrentTreeMaster 현재 활성화된 노드 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 노드 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-SkillTree 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 NodeModelMaster 노드 모델 마스터 노드 모델 마스터는 게임 내에서 사용되는 노드 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 노드 모델로 반영됩니다. 각 노드는 해방 비용(소비 액션), 해방 조건(검증 액션), 전제 노드, 반환 동작(반환율)을 정의합니다. 노드를 구속하면 소비한 리소스가 반환율에 따라 부분적으로 반환됩니다. 반환 입수 액션은 자동으로 계산됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 nodeModelId string ※ ~ 1024자 노드 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. releaseVerifyActions List [] 0 ~ 10 items 해방 검증 액션 목록 이 노드를 해방하기 전에 실행되어 조건이 충족되었는지 확인하는 검증 액션의 목록입니다. 예를 들어 플레이어가 특정 레벨에 도달했는지, 특정 아이템을 소지하고 있는지를 검증할 수 있습니다. 검증 액션 중 하나라도 실패하면 노드 해방이 거부됩니다. 최대 10개 액션. releaseConsumeActions List [] 1 ~ 10 items 해방 소비 액션 목록 이 노드를 해방할 때 실행되는 소비 액션의 목록으로, 해방 비용을 나타냅니다. 이 액션들은 반환 입수 액션 계산에도 사용됩니다. 노드를 구속할 때 각 소비 액션이 반환율에 따라 역산됩니다. 최소 1개의 소비 액션이 필요합니다. 최대 10개 액션. restrainReturnRate float 1.0 0.0 ~ 1.0 반환율 이 노드를 구속(미해방 상태로 되돌림)했을 때 소비된 리소스가 반환되는 비율입니다. 1.0은 전액 반환, 0.5는 절반 반환, 0.0은 반환 없음을 의미합니다. 기본값은 1.0(전액 반환)입니다. 유효 범위: 0.0~1.0. premiseNodeNames List [] 0 ~ 10 items 전제 노드명 목록 이 노드를 해방하기 전에 먼저 해방되어 있어야 하는 다른 노드 모델의 이름입니다. 스킬 트리의 의존 관계 그래프를 정의합니다. 전제 노드가 모두 해방되어 있지 않으면 이 노드는 해방할 수 없습니다. 최대 10개의 전제 노드. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 skill_tree . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.DescribeNamespacesRequest ; import io.gs2.skillTree.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2SkillTree . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2SkillTree . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . describe_namespaces ( skill_tree . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'skill_tree' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 노드 해방·구속 조작을 실행할 때 사용되는 트랜잭션 처리 설정입니다. 소비 액션(해방 비용)과 입수 액션(구속 시 반환)이 GS2 트랜잭션 시스템을 통해 어떻게 처리되는지를 정의합니다. releaseScript ScriptSetting 노드 해방 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - release restrainScript ScriptSetting 노드 해방 상태를 미해방 상태로 되돌릴 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - restrain logSetting LogSetting 로그 출력 설정 노드 해방·구속·초기화 등 스킬 트리 조작에 대한 로그 출력 설정입니다. 설정한 경우, 조작 로그가 지정한 GS2-Log 네임스페이스로 출력됩니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 skill_tree . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : \u0026 skillTree . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ReleaseScript : nil , RestrainScript : nil , LogSetting : \u0026 skillTree . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting (( new \\Gs2\\SkillTree\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withReleaseScript ( null ) -\u003e withRestrainScript ( null ) -\u003e withLogSetting (( new \\Gs2\\SkillTree\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.CreateNamespaceRequest ; import io.gs2.skillTree.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new io . gs2 . skillTree . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReleaseScript ( null ) . withRestrainScript ( null ) . withLogSetting ( new io . gs2 . skillTree . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2SkillTree . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( new Gs2 . Gs2SkillTree . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithReleaseScript ( null ) . WithRestrainScript ( null ) . WithLogSetting ( new Gs2 . Gs2SkillTree . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . createNamespace ( new Gs2SkillTree . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( new Gs2SkillTree . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReleaseScript ( null ) . withRestrainScript ( null ) . withLogSetting ( new Gs2SkillTree . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . create_namespace ( skill_tree . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( skill_tree . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_release_script ( None ) . with_restrain_script ( None ) . with_log_setting ( skill_tree . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, releaseScript = nil , restrainScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, releaseScript = nil , restrainScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 skill_tree . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.GetNamespaceStatusRequest ; import io.gs2.skillTree.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2SkillTree . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2SkillTree . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . get_namespace_status ( skill_tree . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'skill_tree' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 skill_tree . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.GetNamespaceRequest ; import io.gs2.skillTree.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2SkillTree . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . getNamespace ( new Gs2SkillTree . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . get_namespace ( skill_tree . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 노드 해방·구속 조작을 실행할 때 사용되는 트랜잭션 처리 설정입니다. 소비 액션(해방 비용)과 입수 액션(구속 시 반환)이 GS2 트랜잭션 시스템을 통해 어떻게 처리되는지를 정의합니다. releaseScript ScriptSetting 노드 해방 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - release restrainScript ScriptSetting 노드 해방 상태를 미해방 상태로 되돌릴 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - restrain logSetting LogSetting 로그 출력 설정 노드 해방·구속·초기화 등 스킬 트리 조작에 대한 로그 출력 설정입니다. 설정한 경우, 조작 로그가 지정한 GS2-Log 네임스페이스로 출력됩니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 skill_tree . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : \u0026 skillTree . TransactionSetting { EnableAutoRun : pointy . Bool ( false ), QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ReleaseScript : nil , RestrainScript : nil , LogSetting : \u0026 skillTree . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting (( new \\Gs2\\SkillTree\\Model\\TransactionSetting ()) -\u003e withEnableAutoRun ( false ) -\u003e withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) -\u003e withReleaseScript ( null ) -\u003e withRestrainScript ( null ) -\u003e withLogSetting (( new \\Gs2\\SkillTree\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.UpdateNamespaceRequest ; import io.gs2.skillTree.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new io . gs2 . skillTree . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReleaseScript ( null ) . withRestrainScript ( null ) . withLogSetting ( new io . gs2 . skillTree . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2SkillTree . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( new Gs2 . Gs2SkillTree . Model . TransactionSetting () . WithEnableAutoRun ( false ) . WithQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . WithReleaseScript ( null ) . WithRestrainScript ( null ) . WithLogSetting ( new Gs2 . Gs2SkillTree . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2SkillTree . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( new Gs2SkillTree . model . TransactionSetting () . withEnableAutoRun ( false ) . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" )) . withReleaseScript ( null ) . withRestrainScript ( null ) . withLogSetting ( new Gs2SkillTree . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . update_namespace ( skill_tree . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( skill_tree . TransactionSetting () . with_enable_auto_run ( False ) . with_queue_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' )) . with_release_script ( None ) . with_restrain_script ( None ) . with_log_setting ( skill_tree . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, releaseScript = nil , restrainScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = { enableAutoRun = false , queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" , }, releaseScript = nil , restrainScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 skill_tree . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.DeleteNamespaceRequest ; import io.gs2.skillTree.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2SkillTree . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2SkillTree . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . delete_namespace ( skill_tree . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 skill_tree . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.GetServiceVersionRequest ; import io.gs2.skillTree.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2SkillTree . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2SkillTree . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . get_service_version ( skill_tree . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 skill_tree . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.DumpUserDataByUserIdRequest ; import io.gs2.skillTree.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2SkillTree . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2SkillTree . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . dump_user_data_by_user_id ( skill_tree . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'skill_tree' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 skill_tree . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.skillTree.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2SkillTree . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2SkillTree . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( skill_tree . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'skill_tree' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 skill_tree . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.CleanUserDataByUserIdRequest ; import io.gs2.skillTree.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2SkillTree . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2SkillTree . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . clean_user_data_by_user_id ( skill_tree . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'skill_tree' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 skill_tree . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.skillTree.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2SkillTree . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2SkillTree . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( skill_tree . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'skill_tree' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고, importUserDataByUserId를 호출하면 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 skill_tree . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.skillTree.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2SkillTree . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2SkillTree . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( skill_tree . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'skill_tree' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 skill_tree . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.ImportUserDataByUserIdRequest ; import io.gs2.skillTree.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2SkillTree . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2SkillTree . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . import_user_data_by_user_id ( skill_tree . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'skill_tree' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 skill_tree . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.CheckImportUserDataByUserIdRequest ; import io.gs2.skillTree.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2SkillTree . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2SkillTree . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( skill_tree . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'skill_tree' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; markReleaseByUserId 사용자 ID를 지정하여 해방된 노드 기록 지정된 노드가 해방 가능한지 검증한 후(전제 노드가 이미 해방되어 있어야 합니다), 해방됨으로 마크합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . MarkReleaseByUserId ( \u0026 skill_tree . MarkReleaseByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), NodeModelNames : [] * string { pointy . String ( \"node-0001\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\MarkReleaseByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e markReleaseByUserId ( ( new MarkReleaseByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withNodeModelNames ([ \"node-0001\" , ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.MarkReleaseByUserIdRequest ; import io.gs2.skillTree.result.MarkReleaseByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { MarkReleaseByUserIdResult result = client . markReleaseByUserId ( new MarkReleaseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ( Arrays . asList ( \"node-0001\" )) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . MarkReleaseByUserIdResult \u003e asyncResult = null ; yield return client . MarkReleaseByUserId ( new Gs2 . Gs2SkillTree . Request . MarkReleaseByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithNodeModelNames ( new string [] { \"node-0001\" , }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . markReleaseByUserId ( new Gs2SkillTree . MarkReleaseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ([ \"node-0001\" , ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . mark_release_by_user_id ( skill_tree . MarkReleaseByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_node_model_names ([ 'node-0001' , ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.mark_release_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.mark_release_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; release 노드 해방 트랜잭션을 생성하여 스킬 트리의 지정 노드를 해방합니다. 트랜잭션에는 노드 모델에 정의된 해방 시 검증 액션(해방 전 검증)과 해방 시 소비 액션(리소스 차감)이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item Status 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 해방 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . Release ( \u0026 skill_tree . ReleaseRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), NodeModelNames : [] * string { pointy . String ( \"node-0001\" ), }, Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\ReleaseRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e release ( ( new ReleaseRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withNodeModelNames ([ \"node-0001\" , ]) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.ReleaseRequest ; import io.gs2.skillTree.result.ReleaseResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { ReleaseResult result = client . release ( new ReleaseRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ( Arrays . asList ( \"node-0001\" )) . withConfig ( null ) ); Status item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . ReleaseResult \u003e asyncResult = null ; yield return client . Release ( new Gs2 . Gs2SkillTree . Request . ReleaseRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithNodeModelNames ( new string [] { \"node-0001\" , }) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . release ( new Gs2SkillTree . ReleaseRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ([ \"node-0001\" , ]) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . release ( skill_tree . ReleaseRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_id ( 'property-0001' ) . with_node_model_names ([ 'node-0001' , ]) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.release ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'skill_tree' ) api_result_handler = client.release_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; releaseByUserId 사용자 ID를 지정하여 노드 해방 트랜잭션을 생성하여 스킬 트리의 지정 노드를 해방합니다. 트랜잭션에는 노드 모델에 정의된 해방 시 검증 액션(해방 전 검증)과 해방 시 소비 액션(리소스 차감)이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 해방 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . ReleaseByUserId ( \u0026 skill_tree . ReleaseByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), NodeModelNames : [] * string { pointy . String ( \"node-0001\" ), }, Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\ReleaseByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e releaseByUserId ( ( new ReleaseByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withNodeModelNames ([ \"node-0001\" , ]) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.ReleaseByUserIdRequest ; import io.gs2.skillTree.result.ReleaseByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { ReleaseByUserIdResult result = client . releaseByUserId ( new ReleaseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ( Arrays . asList ( \"node-0001\" )) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . ReleaseByUserIdResult \u003e asyncResult = null ; yield return client . ReleaseByUserId ( new Gs2 . Gs2SkillTree . Request . ReleaseByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithNodeModelNames ( new string [] { \"node-0001\" , }) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . releaseByUserId ( new Gs2SkillTree . ReleaseByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ([ \"node-0001\" , ]) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . release_by_user_id ( skill_tree . ReleaseByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_node_model_names ([ 'node-0001' , ]) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.release_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'skill_tree' ) api_result_handler = client.release_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; markRestrain 노드의 해방 상태를 미해방화 지정된 노드가 구속 가능한지 검증한 후(의존하는 노드가 해방 상태가 아니어야 합니다), 미해방으로 마크합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . MarkRestrain ( \u0026 skill_tree . MarkRestrainRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), NodeModelNames : [] * string { pointy . String ( \"node-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\MarkRestrainRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e markRestrain ( ( new MarkRestrainRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withNodeModelNames ([ \"node-0001\" , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.MarkRestrainRequest ; import io.gs2.skillTree.result.MarkRestrainResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { MarkRestrainResult result = client . markRestrain ( new MarkRestrainRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ( Arrays . asList ( \"node-0001\" )) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . MarkRestrainResult \u003e asyncResult = null ; yield return client . MarkRestrain ( new Gs2 . Gs2SkillTree . Request . MarkRestrainRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithNodeModelNames ( new string [] { \"node-0001\" , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . markRestrain ( new Gs2SkillTree . MarkRestrainRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ([ \"node-0001\" , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . mark_restrain ( skill_tree . MarkRestrainRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_id ( 'property-0001' ) . with_node_model_names ([ 'node-0001' , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.mark_restrain ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.mark_restrain_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; markRestrainByUserId 사용자 ID를 지정하여 노드의 해방 상태를 미해방화 지정된 노드가 구속 가능한지 검증한 후(의존하는 노드가 해방 상태가 아니어야 합니다), 미해방으로 마크합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . MarkRestrainByUserId ( \u0026 skill_tree . MarkRestrainByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), NodeModelNames : [] * string { pointy . String ( \"node-0001\" ), }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\MarkRestrainByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e markRestrainByUserId ( ( new MarkRestrainByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withNodeModelNames ([ \"node-0001\" , ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.MarkRestrainByUserIdRequest ; import io.gs2.skillTree.result.MarkRestrainByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { MarkRestrainByUserIdResult result = client . markRestrainByUserId ( new MarkRestrainByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ( Arrays . asList ( \"node-0001\" )) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . MarkRestrainByUserIdResult \u003e asyncResult = null ; yield return client . MarkRestrainByUserId ( new Gs2 . Gs2SkillTree . Request . MarkRestrainByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithNodeModelNames ( new string [] { \"node-0001\" , }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . markRestrainByUserId ( new Gs2SkillTree . MarkRestrainByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ([ \"node-0001\" , ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . mark_restrain_by_user_id ( skill_tree . MarkRestrainByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_node_model_names ([ 'node-0001' , ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.mark_restrain_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.mark_restrain_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; restrain 노드의 해방 상태를 미해방 상태로 되돌리기 트랜잭션을 생성하여 지정 노드를 미해방 상태로 되돌립니다. 원래 해방 시 소비된 리소스는 노드 모델에 설정된 구속 반환율에 따라 일부 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item Status 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 미해방 상태로 되돌리는 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . Restrain ( \u0026 skill_tree . RestrainRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), NodeModelNames : [] * string { pointy . String ( \"node-0001\" ), }, Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\RestrainRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e restrain ( ( new RestrainRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withNodeModelNames ([ \"node-0001\" , ]) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.RestrainRequest ; import io.gs2.skillTree.result.RestrainResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { RestrainResult result = client . restrain ( new RestrainRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ( Arrays . asList ( \"node-0001\" )) . withConfig ( null ) ); Status item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . RestrainResult \u003e asyncResult = null ; yield return client . Restrain ( new Gs2 . Gs2SkillTree . Request . RestrainRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithNodeModelNames ( new string [] { \"node-0001\" , }) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . restrain ( new Gs2SkillTree . RestrainRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ([ \"node-0001\" , ]) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . restrain ( skill_tree . RestrainRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_id ( 'property-0001' ) . with_node_model_names ([ 'node-0001' , ]) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.restrain ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'skill_tree' ) api_result_handler = client.restrain_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; restrainByUserId 사용자 ID를 지정하여 노드의 해방 상태를 미해방 상태로 되돌리기 트랜잭션을 생성하여 지정 노드를 미해방 상태로 되돌립니다. 원래 해방 시 소비된 리소스는 노드 모델에 설정된 구속 반환율에 따라 일부 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 미해방 상태로 되돌리는 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . RestrainByUserId ( \u0026 skill_tree . RestrainByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), NodeModelNames : [] * string { pointy . String ( \"node-0001\" ), }, Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\RestrainByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e restrainByUserId ( ( new RestrainByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withNodeModelNames ([ \"node-0001\" , ]) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.RestrainByUserIdRequest ; import io.gs2.skillTree.result.RestrainByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { RestrainByUserIdResult result = client . restrainByUserId ( new RestrainByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ( Arrays . asList ( \"node-0001\" )) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . RestrainByUserIdResult \u003e asyncResult = null ; yield return client . RestrainByUserId ( new Gs2 . Gs2SkillTree . Request . RestrainByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithNodeModelNames ( new string [] { \"node-0001\" , }) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . restrainByUserId ( new Gs2SkillTree . RestrainByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withNodeModelNames ([ \"node-0001\" , ]) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . restrain_by_user_id ( skill_tree . RestrainByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_node_model_names ([ 'node-0001' , ]) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.restrain_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'skill_tree' ) api_result_handler = client.restrain_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , nodeModelNames = { \"node-0001\" }, config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; describeStatuses 스테이터스 목록 조회 요청 사용자의 스킬 트리 스테이터스 페이지네이션 목록을 조회합니다. 각 스테이터스에는 특정 프로퍼티 ID에 대한 스킬 트리 내 모든 노드의 해방 상태가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 스테이터스 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . DescribeStatuses ( \u0026 skill_tree . DescribeStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\DescribeStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e describeStatuses ( ( new DescribeStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.DescribeStatusesRequest ; import io.gs2.skillTree.result.DescribeStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { DescribeStatusesResult result = client . describeStatuses ( new DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . DescribeStatusesResult \u003e asyncResult = null ; yield return client . DescribeStatuses ( new Gs2 . Gs2SkillTree . Request . DescribeStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . describeStatuses ( new Gs2SkillTree . DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . describe_statuses ( skill_tree . DescribeStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.describe_statuses ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'skill_tree' ) api_result_handler = client.describe_statuses_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeStatusesByUserId 사용자 ID를 지정하여 스테이터스 목록 조회 지정된 사용자의 스킬 트리 스테이터스 페이지네이션 목록을 조회합니다. 각 스테이터스에는 특정 프로퍼티 ID에 대한 스킬 트리 내 모든 노드의 해방 상태가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 스테이터스 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . DescribeStatusesByUserId ( \u0026 skill_tree . DescribeStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\DescribeStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e describeStatusesByUserId ( ( new DescribeStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.DescribeStatusesByUserIdRequest ; import io.gs2.skillTree.result.DescribeStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { DescribeStatusesByUserIdResult result = client . describeStatusesByUserId ( new DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . DescribeStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeStatusesByUserId ( new Gs2 . Gs2SkillTree . Request . DescribeStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . describeStatusesByUserId ( new Gs2SkillTree . DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . describe_statuses_by_user_id ( skill_tree . DescribeStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.describe_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'skill_tree' ) api_result_handler = client.describe_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getStatus 스테이터스 조회 요청 사용자와 지정된 프로퍼티 ID의 스킬 트리 스테이터스를 조회합니다. 스테이터스에는 해방된 노드 이름 목록과 현재 상태가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . GetStatus ( \u0026 skill_tree . GetStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\GetStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e getStatus ( ( new GetStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.GetStatusRequest ; import io.gs2.skillTree.result.GetStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { GetStatusResult result = client . getStatus ( new GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . GetStatusResult \u003e asyncResult = null ; yield return client . GetStatus ( new Gs2 . Gs2SkillTree . Request . GetStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyId ( \"property-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . getStatus ( new Gs2SkillTree . GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . get_status ( skill_tree . GetStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_id ( 'property-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.get_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.get_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStatusByUserId 사용자 ID를 지정하여 스테이터스 조회 지정된 사용자와 프로퍼티 ID의 스킬 트리 스테이터스를 조회합니다. 스테이터스에는 해방된 노드 이름 목록과 현재 상태가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . GetStatusByUserId ( \u0026 skill_tree . GetStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\GetStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e getStatusByUserId ( ( new GetStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.GetStatusByUserIdRequest ; import io.gs2.skillTree.result.GetStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { GetStatusByUserIdResult result = client . getStatusByUserId ( new GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . GetStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetStatusByUserId ( new Gs2 . Gs2SkillTree . Request . GetStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . getStatusByUserId ( new Gs2SkillTree . GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . get_status_by_user_id ( skill_tree . GetStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.get_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.get_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; reset 스테이터스 초기화 모든 해방된 노드를 미해방 상태로 되돌려 스킬 트리 스테이터스를 초기화합니다. 각 노드 모델에 설정된 구속 반환율에 따라 리소스를 반환하는 트랜잭션을 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 Result 타입 설명 item Status 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 초기화 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . Reset ( \u0026 skill_tree . ResetRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), Config : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\ResetRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e reset ( ( new ResetRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withConfig ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.ResetRequest ; import io.gs2.skillTree.result.ResetResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { ResetResult result = client . reset ( new ResetRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withConfig ( null ) ); Status item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . ResetResult \u003e asyncResult = null ; yield return client . Reset ( new Gs2 . Gs2SkillTree . Request . ResetRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithConfig ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . reset ( new Gs2SkillTree . ResetRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPropertyId ( \"property-0001\" ) . withConfig ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . reset ( skill_tree . ResetRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_property_id ( 'property-0001' ) . with_config ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.reset ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , config = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'skill_tree' ) api_result_handler = client.reset_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , propertyId = \"property-0001\" , config = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; resetByUserId 사용자 ID를 지정하여 스테이터스 초기화 모든 해방된 노드를 미해방 상태로 되돌려 스킬 트리 스테이터스를 초기화합니다. 각 노드 모델에 설정된 구속 반환율에 따라 리소스를 반환하는 트랜잭션을 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 상태 transactionId string 발행된 트랜잭션 ID stampSheet string 초기화 처리 실행에 사용하는 스탬프 시트 stampSheetEncryptionKeyId string 스탬프 시트의 서명 계산에 사용한 암호화 키 GRN autoRunStampSheet bool? 트랜잭션 자동 실행이 활성화되어 있는지 여부 atomicCommit bool? 트랜잭션을 원자적으로 커밋할지 여부 transaction string 발행된 트랜잭션 transactionResult TransactionResult 트랜잭션 실행 결과 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . ResetByUserId ( \u0026 skill_tree . ResetByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PropertyId : pointy . String ( \"property-0001\" ), Config : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item transactionId := result . TransactionId stampSheet := result . StampSheet stampSheetEncryptionKeyId := result . StampSheetEncryptionKeyId autoRunStampSheet := result . AutoRunStampSheet atomicCommit := result . AtomicCommit transaction := result . Transaction transactionResult := result . TransactionResult use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\ResetByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e resetByUserId ( ( new ResetByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPropertyId ( \"property-0001\" ) -\u003e withConfig ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $transactionId = $result -\u003e getTransactionId (); $stampSheet = $result -\u003e getStampSheet (); $stampSheetEncryptionKeyId = $result -\u003e getStampSheetEncryptionKeyId (); $autoRunStampSheet = $result -\u003e getAutoRunStampSheet (); $atomicCommit = $result -\u003e getAtomicCommit (); $transaction = $result -\u003e getTransaction (); $transactionResult = $result -\u003e getTransactionResult (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.ResetByUserIdRequest ; import io.gs2.skillTree.result.ResetByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { ResetByUserIdResult result = client . resetByUserId ( new ResetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); String transactionId = result . getTransactionId (); String stampSheet = result . getStampSheet (); String stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); boolean autoRunStampSheet = result . getAutoRunStampSheet (); boolean atomicCommit = result . getAtomicCommit (); String transaction = result . getTransaction (); TransactionResult transactionResult = result . getTransactionResult (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . ResetByUserIdResult \u003e asyncResult = null ; yield return client . ResetByUserId ( new Gs2 . Gs2SkillTree . Request . ResetByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPropertyId ( \"property-0001\" ) . WithConfig ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var transactionId = result . TransactionId ; var stampSheet = result . StampSheet ; var stampSheetEncryptionKeyId = result . StampSheetEncryptionKeyId ; var autoRunStampSheet = result . AutoRunStampSheet ; var atomicCommit = result . AtomicCommit ; var transaction = result . Transaction ; var transactionResult = result . TransactionResult ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . resetByUserId ( new Gs2SkillTree . ResetByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPropertyId ( \"property-0001\" ) . withConfig ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const transactionId = result . getTransactionId (); const stampSheet = result . getStampSheet (); const stampSheetEncryptionKeyId = result . getStampSheetEncryptionKeyId (); const autoRunStampSheet = result . getAutoRunStampSheet (); const atomicCommit = result . getAtomicCommit (); const transaction = result . getTransaction (); const transactionResult = result . getTransactionResult (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . reset_by_user_id ( skill_tree . ResetByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_property_id ( 'property-0001' ) . with_config ( None ) . with_time_offset_token ( None ) ) item = result . item transaction_id = result . transaction_id stamp_sheet = result . stamp_sheet stamp_sheet_encryption_key_id = result . stamp_sheet_encryption_key_id auto_run_stamp_sheet = result . auto_run_stamp_sheet atomic_commit = result . atomic_commit transaction = result . transaction transaction_result = result . transaction_result except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.reset_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , config = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; client = gs2 ( 'skill_tree' ) api_result_handler = client.reset_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , propertyId = \"property-0001\" , config = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; transactionId = result.transactionId ; stampSheet = result.stampSheet ; stampSheetEncryptionKeyId = result.stampSheetEncryptionKeyId ; autoRunStampSheet = result.autoRunStampSheet ; atomicCommit = result.atomicCommit ; transaction = result.transaction ; transactionResult = result.transactionResult ; describeNodeModels 노드 모델 목록 조회 스킬 트리의 활성 노드 모델 목록을 조회합니다. 각 노드 모델은 해방 시 검증·소비 액션, 구속 시 반환율, 전제 노드 이름을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 노드 모델 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . DescribeNodeModels ( \u0026 skill_tree . DescribeNodeModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\DescribeNodeModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e describeNodeModels ( ( new DescribeNodeModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.DescribeNodeModelsRequest ; import io.gs2.skillTree.result.DescribeNodeModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { DescribeNodeModelsResult result = client . describeNodeModels ( new DescribeNodeModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List NodeModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . DescribeNodeModelsResult \u003e asyncResult = null ; yield return client . DescribeNodeModels ( new Gs2 . Gs2SkillTree . Request . DescribeNodeModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . describeNodeModels ( new Gs2SkillTree . DescribeNodeModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . describe_node_models ( skill_tree . DescribeNodeModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.describe_node_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'skill_tree' ) api_result_handler = client.describe_node_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getNodeModel 노드 모델 조회 해방 시 검증 액션, 해방 시 소비 액션, 구속 시 반환율, 전제 노드 이름 설정을 포함하여 지정된 노드 모델을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. nodeModelName string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item NodeModel 노드 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . GetNodeModel ( \u0026 skill_tree . GetNodeModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NodeModelName : pointy . String ( \"node-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\GetNodeModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e getNodeModel ( ( new GetNodeModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNodeModelName ( \"node-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.GetNodeModelRequest ; import io.gs2.skillTree.result.GetNodeModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { GetNodeModelResult result = client . getNodeModel ( new GetNodeModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withNodeModelName ( \"node-0001\" ) ); NodeModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . GetNodeModelResult \u003e asyncResult = null ; yield return client . GetNodeModel ( new Gs2 . Gs2SkillTree . Request . GetNodeModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNodeModelName ( \"node-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . getNodeModel ( new Gs2SkillTree . GetNodeModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withNodeModelName ( \"node-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . get_node_model ( skill_tree . GetNodeModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_node_model_name ( 'node-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.get_node_model ({ namespaceName = \"namespace-0001\" , nodeModelName = \"node-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.get_node_model_async ({ namespaceName = \"namespace-0001\" , nodeModelName = \"node-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 노드 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 등록되어 있는 노드 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보냅니다. 내보낸 데이터에는 해방 액션, 구속 반환율, 전제 노드 설정을 포함한 모든 노드 모델 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentTreeMaster 활성화 가능한 노드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 skill_tree . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.ExportMasterRequest ; import io.gs2.skillTree.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentTreeMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2SkillTree . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . exportMaster ( new Gs2SkillTree . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . export_master ( skill_tree . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentTreeMaster 현재 활성화된 노드 모델의 마스터 데이터 조회 사용 중인 모든 노드 모델 정의(해방 액션, 구속 반환율, 전제 노드 설정 포함)를 포함하여 현재 활성화된 노드 모델 마스터 데이터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentTreeMaster 현재 활성화된 노드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . GetCurrentTreeMaster ( \u0026 skill_tree . GetCurrentTreeMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\GetCurrentTreeMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e getCurrentTreeMaster ( ( new GetCurrentTreeMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.GetCurrentTreeMasterRequest ; import io.gs2.skillTree.result.GetCurrentTreeMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { GetCurrentTreeMasterResult result = client . getCurrentTreeMaster ( new GetCurrentTreeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentTreeMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . GetCurrentTreeMasterResult \u003e asyncResult = null ; yield return client . GetCurrentTreeMaster ( new Gs2 . Gs2SkillTree . Request . GetCurrentTreeMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . getCurrentTreeMaster ( new Gs2SkillTree . GetCurrentTreeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . get_current_tree_master ( skill_tree . GetCurrentTreeMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.get_current_tree_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.get_current_tree_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentTreeMaster 현재 활성화된 노드 모델의 마스터 데이터 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. 업로드로 취득한 토큰을 전달하여 UpdateCurrentTreeMaster를 실행하면 마스터 데이터가 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentTreeMaster ( \u0026 skill_tree . PreUpdateCurrentTreeMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\PreUpdateCurrentTreeMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentTreeMaster ( ( new PreUpdateCurrentTreeMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.PreUpdateCurrentTreeMasterRequest ; import io.gs2.skillTree.result.PreUpdateCurrentTreeMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { PreUpdateCurrentTreeMasterResult result = client . preUpdateCurrentTreeMaster ( new PreUpdateCurrentTreeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . PreUpdateCurrentTreeMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentTreeMaster ( new Gs2 . Gs2SkillTree . Request . PreUpdateCurrentTreeMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . preUpdateCurrentTreeMaster ( new Gs2SkillTree . PreUpdateCurrentTreeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . pre_update_current_tree_master ( skill_tree . PreUpdateCurrentTreeMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.pre_update_current_tree_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'skill_tree' ) api_result_handler = client.pre_update_current_tree_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentTreeMaster 현재 활성화된 노드 모델의 마스터 데이터 갱신 현재 활성화된 노드 모델 마스터 데이터를 갱신합니다. 대용량 마스터 데이터에 대응하기 위해 직접 갱신 모드와 사전 업로드 모드를 모두 지원합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentTreeMaster 갱신된 현재 활성화된 노드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentTreeMaster ( \u0026 skill_tree . UpdateCurrentTreeMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\\"version\\\": \\\"2023-09-06\\\", \\\"nodeModels\\\": [{\\\"name\\\": \\\"node-0001\\\", \\\"metadata\\\": \\\"NODE-0001\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 10}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": []}, {\\\"name\\\": \\\"node-0002\\\", \\\"metadata\\\": \\\"NODE-0002\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 15}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": [\\\"node-0001\\\"]}, {\\\"name\\\": \\\"node-0003\\\", \\\"metadata\\\": \\\"NODE-0003\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 20}\\\"}, {\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 2}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": [\\\"node-0002\\\"]}]}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\UpdateCurrentTreeMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e updateCurrentTreeMaster ( ( new UpdateCurrentTreeMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\\" version \\\" : \\\" 2023-09-06 \\\" , \\\" nodeModels \\\" : [{ \\\" name \\\" : \\\" node-0001 \\\" , \\\" metadata \\\" : \\\" NODE-0001 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 10} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : []}, { \\\" name \\\" : \\\" node-0002 \\\" , \\\" metadata \\\" : \\\" NODE-0002 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 15} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : [ \\\" node-0001 \\\" ]}, { \\\" name \\\" : \\\" node-0003 \\\" , \\\" metadata \\\" : \\\" NODE-0003 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 20} \\\" }, { \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 2} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : [ \\\" node-0002 \\\" ]}]}\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.UpdateCurrentTreeMasterRequest ; import io.gs2.skillTree.result.UpdateCurrentTreeMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { UpdateCurrentTreeMasterResult result = client . updateCurrentTreeMaster ( new UpdateCurrentTreeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-09-06\\\", \\\"nodeModels\\\": [{\\\"name\\\": \\\"node-0001\\\", \\\"metadata\\\": \\\"NODE-0001\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 10}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": []}, {\\\"name\\\": \\\"node-0002\\\", \\\"metadata\\\": \\\"NODE-0002\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 15}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": [\\\"node-0001\\\"]}, {\\\"name\\\": \\\"node-0003\\\", \\\"metadata\\\": \\\"NODE-0003\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 20}\\\"}, {\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 2}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": [\\\"node-0002\\\"]}]}\" ) . withUploadToken ( null ) ); CurrentTreeMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . UpdateCurrentTreeMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentTreeMaster ( new Gs2 . Gs2SkillTree . Request . UpdateCurrentTreeMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\\"version\\\": \\\"2023-09-06\\\", \\\"nodeModels\\\": [{\\\"name\\\": \\\"node-0001\\\", \\\"metadata\\\": \\\"NODE-0001\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 10}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": []}, {\\\"name\\\": \\\"node-0002\\\", \\\"metadata\\\": \\\"NODE-0002\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 15}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": [\\\"node-0001\\\"]}, {\\\"name\\\": \\\"node-0003\\\", \\\"metadata\\\": \\\"NODE-0003\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 20}\\\"}, {\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 2}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": [\\\"node-0002\\\"]}]}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . updateCurrentTreeMaster ( new Gs2SkillTree . UpdateCurrentTreeMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\\"version\\\": \\\"2023-09-06\\\", \\\"nodeModels\\\": [{\\\"name\\\": \\\"node-0001\\\", \\\"metadata\\\": \\\"NODE-0001\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 10}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": []}, {\\\"name\\\": \\\"node-0002\\\", \\\"metadata\\\": \\\"NODE-0002\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 15}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": [\\\"node-0001\\\"]}, {\\\"name\\\": \\\"node-0003\\\", \\\"metadata\\\": \\\"NODE-0003\\\", \\\"releaseConsumeActions\\\": [{\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0001\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 20}\\\"}, {\\\"action\\\": \\\"Gs2Inventory:ConsumeItemSetByUserId\\\", \\\"request\\\": \\\"{\\\\\\\"namespaceName\\\\\\\": \\\\\\\"namespace-0001\\\\\\\", \\\\\\\"inventoryName\\\\\\\": \\\\\\\"item\\\\\\\", \\\\\\\"itemName\\\\\\\": \\\\\\\"item-0002\\\\\\\", \\\\\\\"userId\\\\\\\": \\\\\\\"#{userId}\\\\\\\", \\\\\\\"consumeCount\\\\\\\": 2}\\\"}], \\\"restrainReturnRate\\\": 0.5, \\\"premiseNodeNames\\\": [\\\"node-0002\\\"]}]}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . update_current_tree_master ( skill_tree . UpdateCurrentTreeMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{\"version\": \"2023-09-06\", \"nodeModels\": [{\"name\": \"node-0001\", \"metadata\": \"NODE-0001\", \"releaseConsumeActions\": [{\"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \"request\": \"{ \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" # {userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 10}\"}], \"restrainReturnRate\": 0.5, \"premiseNodeNames\": []}, {\"name\": \"node-0002\", \"metadata\": \"NODE-0002\", \"releaseConsumeActions\": [{\"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \"request\": \"{ \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" # {userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 15}\"}], \"restrainReturnRate\": 0.5, \"premiseNodeNames\": [\"node-0001\"]}, {\"name\": \"node-0003\", \"metadata\": \"NODE-0003\", \"releaseConsumeActions\": [{\"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \"request\": \"{ \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" # {userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 20}\"}, {\"action\": \"Gs2Inventory:ConsumeItemSetByUserId\", \"request\": \"{ \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" # {userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 2}\"}], \"restrainReturnRate\": 0.5, \"premiseNodeNames\": [\"node-0002\"]}]}' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.update_current_tree_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-09-06 \\\" , \\\" nodeModels \\\" : [{ \\\" name \\\" : \\\" node-0001 \\\" , \\\" metadata \\\" : \\\" NODE-0001 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 10} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : []}, { \\\" name \\\" : \\\" node-0002 \\\" , \\\" metadata \\\" : \\\" NODE-0002 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 15} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : [ \\\" node-0001 \\\" ]}, { \\\" name \\\" : \\\" node-0003 \\\" , \\\" metadata \\\" : \\\" NODE-0003 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 20} \\\" }, { \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 2} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : [ \\\" node-0002 \\\" ]}]}\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.update_current_tree_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\\" version \\\" : \\\" 2023-09-06 \\\" , \\\" nodeModels \\\" : [{ \\\" name \\\" : \\\" node-0001 \\\" , \\\" metadata \\\" : \\\" NODE-0001 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 10} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : []}, { \\\" name \\\" : \\\" node-0002 \\\" , \\\" metadata \\\" : \\\" NODE-0002 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 15} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : [ \\\" node-0001 \\\" ]}, { \\\" name \\\" : \\\" node-0003 \\\" , \\\" metadata \\\" : \\\" NODE-0003 \\\" , \\\" releaseConsumeActions \\\" : [{ \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0001 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 20} \\\" }, { \\\" action \\\" : \\\" Gs2Inventory:ConsumeItemSetByUserId \\\" , \\\" request \\\" : \\\" { \\\\\\\" namespaceName \\\\\\\" : \\\\\\\" namespace-0001 \\\\\\\" , \\\\\\\" inventoryName \\\\\\\" : \\\\\\\" item \\\\\\\" , \\\\\\\" itemName \\\\\\\" : \\\\\\\" item-0002 \\\\\\\" , \\\\\\\" userId \\\\\\\" : \\\\\\\" #{userId} \\\\\\\" , \\\\\\\" consumeCount \\\\\\\" : 2} \\\" }], \\\" restrainReturnRate \\\" : 0.5, \\\" premiseNodeNames \\\" : [ \\\" node-0002 \\\" ]}]}\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentTreeMasterFromGitHub 현재 활성화된 노드 모델의 마스터 데이터를 GitHub에서 갱신 지정된 체크아웃 설정을 사용하여 GitHub 저장소에서 마스터 데이터를 체크아웃하고, 현재 활성화된 노드 모델 마스터 데이터를 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentTreeMaster 갱신된 현재 활성화된 노드 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentTreeMasterFromGitHub ( \u0026 skill_tree . UpdateCurrentTreeMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 skillTree . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\UpdateCurrentTreeMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e updateCurrentTreeMasterFromGitHub ( ( new UpdateCurrentTreeMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.UpdateCurrentTreeMasterFromGitHubRequest ; import io.gs2.skillTree.result.UpdateCurrentTreeMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { UpdateCurrentTreeMasterFromGitHubResult result = client . updateCurrentTreeMasterFromGitHub ( new UpdateCurrentTreeMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentTreeMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . UpdateCurrentTreeMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentTreeMasterFromGitHub ( new Gs2 . Gs2SkillTree . Request . UpdateCurrentTreeMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2SkillTree . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . updateCurrentTreeMasterFromGitHub ( new Gs2SkillTree . UpdateCurrentTreeMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2SkillTree . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . update_current_tree_master_from_git_hub ( skill_tree . UpdateCurrentTreeMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( skill_tree . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.update_current_tree_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.update_current_tree_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeNodeModelMasters 노드 모델 마스터 목록 조회 노드 모델 마스터의 페이지네이션 목록을 조회합니다. 이름의 접두사로 필터링할 수 있습니다. 노드 모델 마스터는 해방 액션, 구속 반환율, 전제 노드를 포함한 스킬 트리 구조를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 노드 모델 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 노드 모델 마스터 리스트 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . DescribeNodeModelMasters ( \u0026 skill_tree . DescribeNodeModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\DescribeNodeModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e describeNodeModelMasters ( ( new DescribeNodeModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.DescribeNodeModelMastersRequest ; import io.gs2.skillTree.result.DescribeNodeModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { DescribeNodeModelMastersResult result = client . describeNodeModelMasters ( new DescribeNodeModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List NodeModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . DescribeNodeModelMastersResult \u003e asyncResult = null ; yield return client . DescribeNodeModelMasters ( new Gs2 . Gs2SkillTree . Request . DescribeNodeModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . describeNodeModelMasters ( new Gs2SkillTree . DescribeNodeModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . describe_node_model_masters ( skill_tree . DescribeNodeModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.describe_node_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'skill_tree' ) api_result_handler = client.describe_node_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNodeModelMaster 노드 모델 마스터 신규 생성 해방 시 검증 액션(해방 전 밸리데이션), 해방 시 소비 액션(해방 시 차감하는 리소스), 구속 반환율(구속 시 반환하는 리소스 비율), 전제 노드 이름을 가진 새로운 노드 모델 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. releaseVerifyActions List [] 0 ~ 10 items 해방 검증 액션 목록 이 노드를 해방하기 전에 실행되어 조건이 충족되었는지 확인하는 검증 액션의 목록입니다. 예를 들어 플레이어가 특정 레벨에 도달했는지, 특정 아이템을 소지하고 있는지를 검증할 수 있습니다. 검증 액션 중 하나라도 실패하면 노드 해방이 거부됩니다. 최대 10개 액션. releaseConsumeActions List [] 1 ~ 10 items 해방 소비 액션 목록 이 노드를 해방할 때 실행되는 소비 액션의 목록으로, 해방 비용을 나타냅니다. 이 액션들은 반환 입수 액션 계산에도 사용됩니다. 노드를 구속할 때 각 소비 액션이 반환율에 따라 역산됩니다. 최소 1개의 소비 액션이 필요합니다. 최대 10개 액션. restrainReturnRate float 1.0 0.0 ~ 1.0 반환율 이 노드를 구속(미해방 상태로 되돌림)했을 때 소비된 리소스가 반환되는 비율입니다. 1.0은 전액 반환, 0.5는 절반 반환, 0.0은 반환 없음을 의미합니다. 기본값은 1.0(전액 반환)입니다. 유효 범위: 0.0~1.0. premiseNodeNames List [] 0 ~ 10 items 전제 노드명 목록 이 노드를 해방하기 전에 먼저 해방되어 있어야 하는 다른 노드 모델의 이름입니다. 스킬 트리의 의존 관계 그래프를 정의합니다. 전제 노드가 모두 해방되어 있지 않으면 이 노드는 해방할 수 없습니다. 최대 10개의 전제 노드. Result 타입 설명 item NodeModelMaster 생성한 노드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . CreateNodeModelMaster ( \u0026 skill_tree . CreateNodeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"node-0001\" ), Description : nil , Metadata : pointy . String ( \"NODE-0001\" ), ReleaseVerifyActions : nil , ReleaseConsumeActions : [] skillTree . ConsumeAction { skillTree . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"potion\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }, }, RestrainReturnRate : pointy . Float32 ( 1.0 ), PremiseNodeNames : [] * string {}, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\CreateNodeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e createNodeModelMaster ( ( new CreateNodeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"node-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( \"NODE-0001\" ) -\u003e withReleaseVerifyActions ( null ) -\u003e withReleaseConsumeActions ([ ( new \\Gs2\\SkillTree\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" potion \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" ), ]) -\u003e withRestrainReturnRate ( 1.0 ) -\u003e withPremiseNodeNames ([]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.CreateNodeModelMasterRequest ; import io.gs2.skillTree.result.CreateNodeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { CreateNodeModelMasterResult result = client . createNodeModelMaster ( new CreateNodeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"node-0001\" ) . withDescription ( null ) . withMetadata ( \"NODE-0001\" ) . withReleaseVerifyActions ( null ) . withReleaseConsumeActions ( Arrays . asList ( new io . gs2 . skillTree . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"potion\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ) )) . withRestrainReturnRate ( 1 . 0f ) . withPremiseNodeNames ( new ArrayList String \u003e ()) ); NodeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . CreateNodeModelMasterResult \u003e asyncResult = null ; yield return client . CreateNodeModelMaster ( new Gs2 . Gs2SkillTree . Request . CreateNodeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"node-0001\" ) . WithDescription ( null ) . WithMetadata ( \"NODE-0001\" ) . WithReleaseVerifyActions ( null ) . WithReleaseConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"potion\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), }) . WithRestrainReturnRate ( 1.0f ) . WithPremiseNodeNames ( new string [] {}), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . createNodeModelMaster ( new Gs2SkillTree . CreateNodeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"node-0001\" ) . withDescription ( null ) . withMetadata ( \"NODE-0001\" ) . withReleaseVerifyActions ( null ) . withReleaseConsumeActions ([ new Gs2SkillTree . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"potion\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 10}\" ), ]) . withRestrainReturnRate ( 1.0 ) . withPremiseNodeNames ([]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . create_node_model_master ( skill_tree . CreateNodeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'node-0001' ) . with_description ( None ) . with_metadata ( 'NODE-0001' ) . with_release_verify_actions ( None ) . with_release_consume_actions ([ skill_tree . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"potion\", \"userId\": \"# {userId} \", \"consumeCount\": 10}' ), ]) . with_restrain_return_rate ( 1.0 ) . with_premise_node_names ([]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.create_node_model_master ({ namespaceName = \"namespace-0001\" , name = \"node-0001\" , description = nil , metadata = \"NODE-0001\" , releaseVerifyActions = nil , releaseConsumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" potion \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, restrainReturnRate = 1.0 , premiseNodeNames = {}, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.create_node_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"node-0001\" , description = nil , metadata = \"NODE-0001\" , releaseVerifyActions = nil , releaseConsumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" potion \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 10}\" , } }, restrainReturnRate = 1.0 , premiseNodeNames = {}, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNodeModelMaster 노드 모델 마스터 조회 해방 시 검증 액션, 해방 시 소비 액션, 구속 반환율, 전제 노드 이름 설정을 포함하여 지정된 노드 모델 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. nodeModelName string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item NodeModelMaster 노드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . GetNodeModelMaster ( \u0026 skill_tree . GetNodeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NodeModelName : pointy . String ( \"node-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\GetNodeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e getNodeModelMaster ( ( new GetNodeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNodeModelName ( \"node-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.GetNodeModelMasterRequest ; import io.gs2.skillTree.result.GetNodeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { GetNodeModelMasterResult result = client . getNodeModelMaster ( new GetNodeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withNodeModelName ( \"node-0001\" ) ); NodeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . GetNodeModelMasterResult \u003e asyncResult = null ; yield return client . GetNodeModelMaster ( new Gs2 . Gs2SkillTree . Request . GetNodeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNodeModelName ( \"node-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . getNodeModelMaster ( new Gs2SkillTree . GetNodeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withNodeModelName ( \"node-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . get_node_model_master ( skill_tree . GetNodeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_node_model_name ( 'node-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.get_node_model_master ({ namespaceName = \"namespace-0001\" , nodeModelName = \"node-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.get_node_model_master_async ({ namespaceName = \"namespace-0001\" , nodeModelName = \"node-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNodeModelMaster 노드 모델 마스터 갱신 지정된 노드 모델 마스터의 설명, 메타데이터, 해방 시 검증 액션, 해방 시 소비 액션, 구속 반환율, 전제 노드 이름을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. nodeModelName string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. releaseVerifyActions List [] 0 ~ 10 items 해방 검증 액션 목록 이 노드를 해방하기 전에 실행되어 조건이 충족되었는지 확인하는 검증 액션의 목록입니다. 예를 들어 플레이어가 특정 레벨에 도달했는지, 특정 아이템을 소지하고 있는지를 검증할 수 있습니다. 검증 액션 중 하나라도 실패하면 노드 해방이 거부됩니다. 최대 10개 액션. releaseConsumeActions List [] 1 ~ 10 items 해방 소비 액션 목록 이 노드를 해방할 때 실행되는 소비 액션의 목록으로, 해방 비용을 나타냅니다. 이 액션들은 반환 입수 액션 계산에도 사용됩니다. 노드를 구속할 때 각 소비 액션이 반환율에 따라 역산됩니다. 최소 1개의 소비 액션이 필요합니다. 최대 10개 액션. restrainReturnRate float 1.0 0.0 ~ 1.0 반환율 이 노드를 구속(미해방 상태로 되돌림)했을 때 소비된 리소스가 반환되는 비율입니다. 1.0은 전액 반환, 0.5는 절반 반환, 0.0은 반환 없음을 의미합니다. 기본값은 1.0(전액 반환)입니다. 유효 범위: 0.0~1.0. premiseNodeNames List [] 0 ~ 10 items 전제 노드명 목록 이 노드를 해방하기 전에 먼저 해방되어 있어야 하는 다른 노드 모델의 이름입니다. 스킬 트리의 의존 관계 그래프를 정의합니다. 전제 노드가 모두 해방되어 있지 않으면 이 노드는 해방할 수 없습니다. 최대 10개의 전제 노드. Result 타입 설명 item NodeModelMaster 갱신한 노드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . UpdateNodeModelMaster ( \u0026 skill_tree . UpdateNodeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NodeModelName : pointy . String ( \"node-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"NODE-0001\" ), ReleaseVerifyActions : nil , ReleaseConsumeActions : [] skillTree . ConsumeAction { skillTree . ConsumeAction { Action : pointy . String ( \"Gs2Inventory:ConsumeItemSetByUserId\" ), Request : pointy . String ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"potion\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 20}\" ), }, }, RestrainReturnRate : pointy . Float32 ( 0.9 ), PremiseNodeNames : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\UpdateNodeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e updateNodeModelMaster ( ( new UpdateNodeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNodeModelName ( \"node-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"NODE-0001\" ) -\u003e withReleaseVerifyActions ( null ) -\u003e withReleaseConsumeActions ([ ( new \\Gs2\\SkillTree\\Model\\ConsumeAction ()) -\u003e withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) -\u003e withRequest ( \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" potion \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 20}\" ), ]) -\u003e withRestrainReturnRate ( 0.9 ) -\u003e withPremiseNodeNames ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.UpdateNodeModelMasterRequest ; import io.gs2.skillTree.result.UpdateNodeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { UpdateNodeModelMasterResult result = client . updateNodeModelMaster ( new UpdateNodeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withNodeModelName ( \"node-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"NODE-0001\" ) . withReleaseVerifyActions ( null ) . withReleaseConsumeActions ( Arrays . asList ( new io . gs2 . skillTree . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"potion\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 20}\" ) )) . withRestrainReturnRate ( 0 . 9f ) . withPremiseNodeNames ( null ) ); NodeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . UpdateNodeModelMasterResult \u003e asyncResult = null ; yield return client . UpdateNodeModelMaster ( new Gs2 . Gs2SkillTree . Request . UpdateNodeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNodeModelName ( \"node-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"NODE-0001\" ) . WithReleaseVerifyActions ( null ) . WithReleaseConsumeActions ( new Gs2 . Core . Model . ConsumeAction [] { new Gs2 . Core . Model . ConsumeAction () . WithAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . WithRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"potion\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 20}\" ), }) . WithRestrainReturnRate ( 0.9f ) . WithPremiseNodeNames ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . updateNodeModelMaster ( new Gs2SkillTree . UpdateNodeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withNodeModelName ( \"node-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"NODE-0001\" ) . withReleaseVerifyActions ( null ) . withReleaseConsumeActions ([ new Gs2SkillTree . model . ConsumeAction () . withAction ( \"Gs2Inventory:ConsumeItemSetByUserId\" ) . withRequest ( \"{\\\"namespaceName\\\": \\\"namespace-0001\\\", \\\"inventoryName\\\": \\\"item\\\", \\\"itemName\\\": \\\"potion\\\", \\\"userId\\\": \\\"#{userId}\\\", \\\"consumeCount\\\": 20}\" ), ]) . withRestrainReturnRate ( 0.9 ) . withPremiseNodeNames ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . update_node_model_master ( skill_tree . UpdateNodeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_node_model_name ( 'node-0001' ) . with_description ( 'description1' ) . with_metadata ( 'NODE-0001' ) . with_release_verify_actions ( None ) . with_release_consume_actions ([ skill_tree . ConsumeAction () . with_action ( 'Gs2Inventory:ConsumeItemSetByUserId' ) . with_request ( '{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"item\", \"itemName\": \"potion\", \"userId\": \"# {userId} \", \"consumeCount\": 20}' ), ]) . with_restrain_return_rate ( 0.9 ) . with_premise_node_names ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.update_node_model_master ({ namespaceName = \"namespace-0001\" , nodeModelName = \"node-0001\" , description = \"description1\" , metadata = \"NODE-0001\" , releaseVerifyActions = nil , releaseConsumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" potion \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 20}\" , } }, restrainReturnRate = 0.9 , premiseNodeNames = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.update_node_model_master_async ({ namespaceName = \"namespace-0001\" , nodeModelName = \"node-0001\" , description = \"description1\" , metadata = \"NODE-0001\" , releaseVerifyActions = nil , releaseConsumeActions = { { action = \"Gs2Inventory:ConsumeItemSetByUserId\" , request = \"{ \\\" namespaceName \\\" : \\\" namespace-0001 \\\" , \\\" inventoryName \\\" : \\\" item \\\" , \\\" itemName \\\" : \\\" potion \\\" , \\\" userId \\\" : \\\" #{userId} \\\" , \\\" consumeCount \\\" : 20}\" , } }, restrainReturnRate = 0.9 , premiseNodeNames = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNodeModelMaster 노드 모델 마스터 삭제 지정된 노드 모델 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며, 현재 활성화된 스킬 트리에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. nodeModelName string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item NodeModelMaster 삭제한 노드 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/skillTree\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := skill_tree . Gs2SkillTreeRestClient { Session : \u0026 session , } result , err := client . DeleteNodeModelMaster ( \u0026 skill_tree . DeleteNodeModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NodeModelName : pointy . String ( \"node-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\SkillTree\\Gs2SkillTreeRestClient ; use Gs2\\SkillTree\\Request\\DeleteNodeModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2SkillTreeRestClient ( $session ); try { $result = $client -\u003e deleteNodeModelMaster ( ( new DeleteNodeModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNodeModelName ( \"node-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.skillTree.rest.Gs2SkillTreeRestClient ; import io.gs2.skillTree.request.DeleteNodeModelMasterRequest ; import io.gs2.skillTree.result.DeleteNodeModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2SkillTreeRestClient client = new Gs2SkillTreeRestClient ( session ); try { DeleteNodeModelMasterResult result = client . deleteNodeModelMaster ( new DeleteNodeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withNodeModelName ( \"node-0001\" ) ); NodeModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2SkillTreeRestClient ( session ); AsyncResult Gs2 . Gs2SkillTree . Result . DeleteNodeModelMasterResult \u003e asyncResult = null ; yield return client . DeleteNodeModelMaster ( new Gs2 . Gs2SkillTree . Request . DeleteNodeModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNodeModelName ( \"node-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2SkillTree from '@/gs2/skillTree' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2SkillTree . Gs2SkillTreeRestClient ( session ); try { const result = await client . deleteNodeModelMaster ( new Gs2SkillTree . DeleteNodeModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withNodeModelName ( \"node-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import skill_tree session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = skill_tree . Gs2SkillTreeRestClient ( session ) try : result = client . delete_node_model_master ( skill_tree . DeleteNodeModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_node_model_name ( 'node-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'skill_tree' ) api_result = client.delete_node_model_master ({ namespaceName = \"namespace-0001\" , nodeModelName = \"node-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'skill_tree' ) api_result_handler = client.delete_node_model_master_async ({ namespaceName = \"namespace-0001\" , nodeModelName = \"node-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-SkillTree SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-SkillTree SDK API 레퍼런스","url":"/ko/api_reference/skill_tree/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스태미나 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. overflowTriggerScript string ~ 1024자 오버플로우 트리거 스크립트 회복 시 스태미나가 오버플로우될 때 호출되는 GS2-Script의 GRN입니다. 시간 기반 회복으로 스태미나가 최대값을 초과하는 경우에 트리거되며, 초과분에 대한 커스텀 처리(예: 오버플로우분을 아이템으로 변환)가 가능합니다. Script 트리거 레퍼런스 - overflow logSetting LogSetting 로그 출력 설정 스태미나의 소비, 회복, 오버플로우 등의 조작을 GS2-Log에 기록하기 위한 로그 출력 설정입니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 Stamina 스태미나 스태미나란 현실 시간의 경과에 따라 회복되는 포인트입니다. 일반적으로 이 스태미나를 소비해야 게임을 플레이할 수 있도록 함으로써, 플레이어의 하루 플레이 횟수를 제한하고 게임의 진행 속도를 게임 제공사가 제어할 목적으로 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 staminaId string ※ ~ 1024자 스타미나 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID value int  0 ~ 2147483646 스태미나 값 오버플로우분을 제외한, 이 사용자의 현재 스태미나 양입니다. 회복 간격과 회복량에 기반하여 시간 경과에 따라 자동으로 증가하며, maxValue까지 회복됩니다. lastRecoveredAt로부터의 경과 시간을 사용하여 recoverSteps = elapsedMinutes / recoverIntervalMinutes 식으로 계산됩니다. maxValue int  1 ~ 2147483646 스태미나 최대값 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 MaxStaminaTable로 오버라이드되는 사용자별 스태미나 최대값입니다. 오버플로우가 비활성화된 경우 initialCapacity가 하한이 됩니다. 오버플로우가 활성화된 경우 maxCapacity가 상한이 됩니다. 자연 회복은 이 값에서 멈춥니다. recoverIntervalMinutes int 1 ~ 2147483646 스태미나 회복 간격(분) StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 RecoverIntervalTable로 오버라이드되는 사용자별 회복 간격(분)입니다. 테이블이 설정되어 있지 않은 경우, 모델의 기본값인 recoverIntervalMinutes로 대체됩니다. recoverValue int 1 ~ 2147483646 스태미나 회복량 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 RecoverValueTable로 오버라이드되는 사용자별 틱당 회복량입니다. 테이블이 설정되어 있지 않은 경우, 모델의 기본값인 recoverValue로 대체됩니다. overflowValue int  0 ~ 2147483646 오버플로우 값 통상의 최대값(maxValue)을 초과하여 저장되어 있는 스태미나량입니다. StaminaModel의 isOverflow가 활성화된 경우에만 사용됩니다. 실효 스태미나의 합계는 value + overflowValue이며, maxCapacity가 상한입니다. 스태미나 소비 시 오버플로우분이 먼저 소비됩니다. nextRecoverAt long 다음 회복 시각 다음 스태미나 회복 틱이 발생하는 Unix 타임스탬프(밀리초)입니다. lastRecoveredAt + recoverIntervalMinutes * 60 * 1000으로 계산됩니다. 스태미나가 이미 maxValue인 경우, 이 필드는 설정되지 않을 수 있습니다. lastRecoveredAt long ※ 현재 시각 마지막으로 회복한 시각 UNIX 시간·밀리초 ※서버 측에서 자동으로 설정 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 StaminaModel 스태미나 모델 스태미나의 최대값, 회복 간격, 회복량과 같은 파라미터를 정의할 수 있습니다. GS2-Experience와 연동하여 최대값이나 회복량을 제어할 수도 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 staminaModelId string ※ ~ 1024자 스타미나 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. recoverIntervalMinutes int  0 ~ 2147483646 회복 간격(분) 스태미나 회복 틱의 간격(분 단위)입니다. 이 간격이 경과할 때마다 플레이어의 스태미나가 회복량만큼 증가합니다. RecoverIntervalTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 0으로 설정하면 시간 기반 자동 회복이 비활성화됩니다. recoverValue int 1 0 ~ 2147483646 회복량 회복 틱마다 회복되는 스태미나의 양입니다. 회복 간격이 경과할 때마다 최대값에 도달할 때까지 이 값만큼 스태미나가 증가합니다. RecoverValueTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 기본값은 1입니다. initialCapacity int  0 ~ 2147483646 최대값의 초기값 모든 플레이어에 대한 기본 스태미나 최대값입니다. 오버플로우가 비활성화된 경우, 사용자별 최대값의 하한으로 작용합니다. MaxStaminaTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. isOverflow bool  오버플로우 가능 여부 아이템 사용 등의 수단으로 스태미나가 초기 최대값을 초과할 수 있는지 여부입니다. 활성화된 경우, 스태미나는 initialCapacity를 초과하여 maxCapacity까지 설정할 수 있습니다. 자연 회복은 일반적인 최대값에서 정지합니다. 비활성화된 경우, 사용자별 최대값은 initialCapacity 이상으로 제한됩니다. maxCapacity int {isOverflow} == true ※ 0 ~ 2147483646 오버플로우 시 최대값 오버플로우 활성화 시 스태미나의 절대 상한값입니다. 오버플로우 상태에서도 스태미나는 이 값을 초과할 수 없습니다. isOverflow가 true인 경우에만 표시됩니다. 예를 들어 initialCapacity가 100, maxCapacity가 200인 경우, 아이템으로 스태미나를 200까지 늘릴 수 있지만 자연 회복은 100에서 정지합니다. ※ isOverflow이(가) true 이면 필수 maxStaminaTable MaxStaminaTable 스태미나 최대값 테이블 플레이어의 GS2-Experience 랭크에 기반하여 스태미나 최대값을 동적으로 결정하는 MaxStaminaTable에 대한 참조입니다. 설정 시, 플레이어의 최대 스태미나는 현재 랭크 인덱스로 테이블에서 참조되며, initialCapacity를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 initialCapacity를 최대값으로 공유합니다. recoverIntervalTable RecoverIntervalTable 회복 간격 테이블 플레이어의 GS2-Experience 랭크에 기반하여 회복 간격을 동적으로 결정하는 RecoverIntervalTable에 대한 참조입니다. 설정 시, 플레이어의 회복 간격은 현재 랭크 인덱스로 테이블에서 참조되며, recoverIntervalMinutes를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 recoverIntervalMinutes를 공유합니다. recoverValueTable RecoverValueTable 회복량 테이블 플레이어의 GS2-Experience 랭크에 기반하여 회복량을 동적으로 결정하는 RecoverValueTable에 대한 참조입니다. 설정 시, 플레이어의 회복량은 현재 랭크 인덱스로 테이블에서 참조되며, recoverValue를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 recoverValue를 공유합니다. MaxStaminaTable 스태미나 최대값 테이블 스태미나 최대값 테이블은 GS2-Experience의 랭크별로 스태미나의 최대값을 정의하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 최대값 테이블 이름 스태미나 최대값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 스태미나 최대값이 결정됩니다. values List  1 ~ 1024 items 랭크별 스태미나 최대값 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 스태미나 최대값의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 최대 스태미나로 사용됩니다. 배열 길이는 참조하는 ExperienceModel에서 정의된 랭크 수와 일치해야 합니다. RecoverIntervalTable 회복 간격 테이블 회복 간격 테이블은 GS2-Experience의 랭크별로 스태미나의 회복 간격을 정의하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복 간격이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복 간격 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복 간격 값(분 단위)의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 회복 간격으로 사용되며, 모델의 기본값 recoverIntervalMinutes를 오버라이드합니다. RecoverValueTable 스태미나 회복량 테이블 스태미나 회복량 테이블은 GS2-Experience의 랭크별로 스태미나의 회복량을 정의하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복량이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복량 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복량 값의 배열입니다. 인덱스 i의 값은 랭크 i의 플레이어에 대한 틱당 회복량으로 사용되며, 모델의 기본 recoverValue를 오버라이드합니다. CurrentStaminaMaster 현재 활성화된 스태미나 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 스태미나 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Stamina 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 StaminaModelMaster 스태미나 모델 마스터 스태미나 모델 마스터는 게임 내에서 사용되는 스태미나 모델의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 스태미나 모델로 반영됩니다. 스태미나의 최대값, 회복 간격, 회복량과 같은 파라미터를 정의할 수 있습니다. GS2-Experience와 연동하여 최대값이나 회복량을 제어할 수도 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 staminaModelId string ※ ~ 1024자 스타미나 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 recoverIntervalMinutes int  0 ~ 2147483646 회복 간격(분) 스태미나 회복 틱의 간격(분 단위)입니다. 이 간격이 경과할 때마다 플레이어의 스태미나가 회복량만큼 증가합니다. RecoverIntervalTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 0으로 설정하면 시간 기반 자동 회복이 비활성화됩니다. recoverValue int 1 0 ~ 2147483646 회복량 회복 틱마다 회복되는 스태미나의 양입니다. 회복 간격이 경과할 때마다 최대값에 도달할 때까지 이 값만큼 스태미나가 증가합니다. RecoverValueTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 기본값은 1입니다. initialCapacity int  0 ~ 2147483646 최대값의 초기값 모든 플레이어에 대한 기본 스태미나 최대값입니다. 오버플로우가 비활성화된 경우, 사용자별 최대값의 하한으로 작용합니다. MaxStaminaTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. isOverflow bool  오버플로우 가능 여부 아이템 사용 등의 수단으로 스태미나가 초기 최대값을 초과할 수 있는지 여부입니다. 활성화된 경우, 스태미나는 initialCapacity를 초과하여 maxCapacity까지 설정할 수 있습니다. 자연 회복은 일반적인 최대값에서 정지합니다. 비활성화된 경우, 사용자별 최대값은 initialCapacity 이상으로 제한됩니다. maxCapacity int {isOverflow} == true ※ 0 ~ 2147483646 오버플로우 시 최대값 오버플로우 활성화 시 스태미나의 절대 상한값입니다. 오버플로우 상태에서도 스태미나는 이 값을 초과할 수 없습니다. isOverflow가 true인 경우에만 표시됩니다. ※ isOverflow이(가) true 이면 필수 maxStaminaTableName string ~ 128자 스태미나 최대값 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 스태미나 최대값을 동적으로 결정하는 MaxStaminaTable의 이름입니다. 설정 시, 플레이어의 최대 스태미나는 현재 랭크 인덱스로 테이블에서 참조되며, initialCapacity를 오버라이드합니다. recoverIntervalTableName string ~ 128자 회복 간격 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 회복 간격을 동적으로 결정하는 RecoverIntervalTable의 이름입니다. 설정 시, 플레이어의 회복 간격은 테이블에서 참조되며, recoverIntervalMinutes를 오버라이드합니다. recoverValueTableName string ~ 128자 회복량 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 회복량을 동적으로 결정하는 RecoverValueTable의 이름입니다. 설정 시, 플레이어의 회복량은 테이블에서 참조되며, recoverValue를 오버라이드합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 MaxStaminaTableMaster 스태미나 최대값 테이블 마스터 스태미나 최대값 테이블 마스터는 게임 내에서 사용되는 스태미나 최대값 테이블의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써, 실제로 게임에서 참조되는 스태미나 최대값 테이블로 반영됩니다. 스태미나 최대값 테이블은 GS2-Experience의 랭크별로 스태미나의 최대값을 정의하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 maxStaminaTableId string ※ ~ 1024자 스타미나 최대값 테이블 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 최대 스태미나 값 테이블 이름 최대 스태미나 값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 스태미나 최대값이 결정됩니다. values List  1 ~ 1024 items 랭크별 스태미나 최대값 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 스태미나 최대값의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 최대 스태미나로 사용됩니다. 배열 길이는 참조하는 ExperienceModel에서 정의된 랭크 수와 일치해야 합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 RecoverIntervalTableMaster 회복 간격 테이블 마스터 회복 간격 테이블 마스터는 게임 내에서 사용되는 회복 간격 테이블의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 회복 간격 테이블로 반영됩니다. 회복 간격 테이블은 GS2-Experience의 랭크별로 스태미나의 회복 간격을 정의하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 recoverIntervalTableId string ※ ~ 1024자 회복 간격 테이블 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복 간격이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복 간격 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복 간격 값(분 단위)의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 회복 간격으로 사용되며, 모델의 기본값 recoverIntervalMinutes를 오버라이드합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 RecoverValueTableMaster 스태미나 회복량 테이블 마스터 스태미나 회복량 테이블 마스터는 게임 내에서 사용되는 스태미나 회복량 테이블의 편집·관리용 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에서 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써, 실제로 게임에서 참조되는 스태미나 회복량 테이블로 반영됩니다. 스태미나 회복량 테이블은 GS2-Experience의 랭크별로 스태미나의 회복량을 정의하는 엔티티입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 recoverValueTableId string ※ ~ 1024자 스타미나 회복량 테이블 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. description string ~ 1024자 설명문 experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복량이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복량 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복량 값의 배열입니다. 인덱스 i의 값은 랭크 i의 플레이어에 대한 틱당 회복량으로 사용되며, 모델의 기본 recoverValue를 오버라이드합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 stamina . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DescribeNamespacesRequest ; import io.gs2.stamina.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Stamina . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Stamina . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . describe_namespaces ( stamina . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'stamina' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스태미나 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. overflowTriggerScript string ~ 1024자 오버플로우 트리거 스크립트 회복 시 스태미나가 오버플로우될 때 호출되는 GS2-Script의 GRN입니다. 시간 기반 회복으로 스태미나가 최대값을 초과하는 경우에 트리거되며, 초과분에 대한 커스텀 처리(예: 오버플로우분을 아이템으로 변환)가 가능합니다. Script 트리거 레퍼런스 - overflow logSetting LogSetting 로그 출력 설정 스태미나의 소비, 회복, 오버플로우 등의 조작을 GS2-Log에 기록하기 위한 로그 출력 설정입니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 stamina . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , OverflowTriggerScript : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" ), LogSetting : \u0026 stamina . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withOverflowTriggerScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" ) -\u003e withLogSetting (( new \\Gs2\\Stamina\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CreateNamespaceRequest ; import io.gs2.stamina.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withOverflowTriggerScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" ) . withLogSetting ( new io . gs2 . stamina . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Stamina . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithOverflowTriggerScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" ) . WithLogSetting ( new Gs2 . Gs2Stamina . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Stamina . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withOverflowTriggerScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" ) . withLogSetting ( new Gs2Stamina . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . create_namespace ( stamina . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_overflow_trigger_script ( 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script' ) . with_log_setting ( stamina . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , overflowTriggerScript = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , overflowTriggerScript = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 stamina . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetNamespaceStatusRequest ; import io.gs2.stamina.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Stamina . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Stamina . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_namespace_status ( stamina . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'stamina' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 stamina . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetNamespaceRequest ; import io.gs2.stamina.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Stamina . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Stamina . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_namespace ( stamina . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스태미나 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. overflowTriggerScript string ~ 1024자 오버플로우 트리거 스크립트 회복 시 스태미나가 오버플로우될 때 호출되는 GS2-Script의 GRN입니다. 시간 기반 회복으로 스태미나가 최대값을 초과하는 경우에 트리거되며, 초과분에 대한 커스텀 처리(예: 오버플로우분을 아이템으로 변환)가 가능합니다. Script 트리거 레퍼런스 - overflow logSetting LogSetting 로그 출력 설정 스태미나의 소비, 회복, 오버플로우 등의 조작을 GS2-Log에 기록하기 위한 로그 출력 설정입니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 stamina . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , OverflowTriggerScript : nil , LogSetting : \u0026 stamina . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withOverflowTriggerScript ( null ) -\u003e withLogSetting (( new \\Gs2\\Stamina\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.UpdateNamespaceRequest ; import io.gs2.stamina.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withOverflowTriggerScript ( null ) . withLogSetting ( new io . gs2 . stamina . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Stamina . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithOverflowTriggerScript ( null ) . WithLogSetting ( new Gs2 . Gs2Stamina . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Stamina . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withOverflowTriggerScript ( null ) . withLogSetting ( new Gs2Stamina . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . update_namespace ( stamina . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_overflow_trigger_script ( None ) . with_log_setting ( stamina . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , overflowTriggerScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , overflowTriggerScript = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 stamina . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DeleteNamespaceRequest ; import io.gs2.stamina.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Stamina . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Stamina . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . delete_namespace ( stamina . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 stamina . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetServiceVersionRequest ; import io.gs2.stamina.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Stamina . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Stamina . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_service_version ( stamina . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 stamina . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DumpUserDataByUserIdRequest ; import io.gs2.stamina.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Stamina . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Stamina . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . dump_user_data_by_user_id ( stamina . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'stamina' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 stamina . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.stamina.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Stamina . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Stamina . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( stamina . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'stamina' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 stamina . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CleanUserDataByUserIdRequest ; import io.gs2.stamina.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Stamina . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Stamina . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . clean_user_data_by_user_id ( stamina . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'stamina' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 stamina . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.stamina.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Stamina . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Stamina . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( stamina . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'stamina' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 stamina . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.stamina.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Stamina . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Stamina . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( stamina . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'stamina' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 stamina . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.ImportUserDataByUserIdRequest ; import io.gs2.stamina.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Stamina . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Stamina . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . import_user_data_by_user_id ( stamina . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'stamina' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 stamina . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CheckImportUserDataByUserIdRequest ; import io.gs2.stamina.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Stamina . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Stamina . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( stamina . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'stamina' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeStaminas 스타미나 목록 취득 요청 사용자의 모든 스타미나 리소스에 대한 페이지네이션 목록을 취득합니다. 각 스타미나 항목에는 현재값, 최대값, 회복 설정, 오버플로량이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스태미나 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DescribeStaminas ( \u0026 stamina . DescribeStaminasRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DescribeStaminasRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e describeStaminas ( ( new DescribeStaminasRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DescribeStaminasRequest ; import io.gs2.stamina.result.DescribeStaminasResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DescribeStaminasResult result = client . describeStaminas ( new DescribeStaminasRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List Stamina \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DescribeStaminasResult \u003e asyncResult = null ; yield return client . DescribeStaminas ( new Gs2 . Gs2Stamina . Request . DescribeStaminasRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . describeStaminas ( new Gs2Stamina . DescribeStaminasRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . describe_staminas ( stamina . DescribeStaminasRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.describe_staminas ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'stamina' ) api_result_handler = client.describe_staminas_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeStaminasByUserId 사용자 ID를 지정하여 스타미나 목록 취득 지정된 사용자의 모든 스타미나 리소스에 대한 페이지네이션 목록을 취득합니다. 각 스타미나 항목에는 현재값, 최대값, 회복 설정, 오버플로량이 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 스태미나 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DescribeStaminasByUserId ( \u0026 stamina . DescribeStaminasByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DescribeStaminasByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e describeStaminasByUserId ( ( new DescribeStaminasByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DescribeStaminasByUserIdRequest ; import io.gs2.stamina.result.DescribeStaminasByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DescribeStaminasByUserIdResult result = client . describeStaminasByUserId ( new DescribeStaminasByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Stamina \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DescribeStaminasByUserIdResult \u003e asyncResult = null ; yield return client . DescribeStaminasByUserId ( new Gs2 . Gs2Stamina . Request . DescribeStaminasByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . describeStaminasByUserId ( new Gs2Stamina . DescribeStaminasByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . describe_staminas_by_user_id ( stamina . DescribeStaminasByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.describe_staminas_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'stamina' ) api_result_handler = client.describe_staminas_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getStamina 스타미나 취득 지정된 스타미나 리소스와 해당 스타미나 모델을 취득합니다. 현재 스타미나 값, 최대값, 회복 간격, 회복량, 오버플로량을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetStamina ( \u0026 stamina . GetStaminaRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetStaminaRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getStamina ( ( new GetStaminaRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetStaminaRequest ; import io.gs2.stamina.result.GetStaminaResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetStaminaResult result = client . getStamina ( new GetStaminaRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetStaminaResult \u003e asyncResult = null ; yield return client . GetStamina ( new Gs2 . Gs2Stamina . Request . GetStaminaRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getStamina ( new Gs2Stamina . GetStaminaRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_stamina ( stamina . GetStaminaRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_stamina ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.get_stamina_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; getStaminaByUserId 사용자 ID를 지정하여 스타미나 취득 지정된 사용자의 스타미나 리소스와 해당 스타미나 모델을 취득합니다. 현재 스타미나 값, 최대값, 회복 간격, 회복량, 오버플로량을 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetStaminaByUserId ( \u0026 stamina . GetStaminaByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetStaminaByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getStaminaByUserId ( ( new GetStaminaByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetStaminaByUserIdRequest ; import io.gs2.stamina.result.GetStaminaByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetStaminaByUserIdResult result = client . getStaminaByUserId ( new GetStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetStaminaByUserIdResult \u003e asyncResult = null ; yield return client . GetStaminaByUserId ( new Gs2 . Gs2Stamina . Request . GetStaminaByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getStaminaByUserId ( new Gs2Stamina . GetStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_stamina_by_user_id ( stamina . GetStaminaByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_stamina_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.get_stamina_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; updateStaminaByUserId 사용자 ID를 지정하여 스타미나를 생성·갱신 현재값, 최대값, 회복 간격, 회복량을 포함한 모든 스타미나 속성을 한 번에 설정합니다. 이는 현재 오버플로량과 마지막 회복 타임스탬프를 유지한 채로 직접 값을 덮어쓰기 위한 관리 작업입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID value int  0 ~ 2147483646 스태미나 값 오버플로우분을 제외한, 이 사용자의 현재 스태미나 양입니다. 회복 간격과 회복량에 기반하여 시간 경과에 따라 자동으로 증가하며, maxValue까지 회복됩니다. lastRecoveredAt로부터의 경과 시간을 사용하여 recoverSteps = elapsedMinutes / recoverIntervalMinutes 식으로 계산됩니다. maxValue int  1 ~ 2147483646 스태미나 최대값 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 MaxStaminaTable로 오버라이드되는 사용자별 스태미나 최대값입니다. 오버플로우가 비활성화된 경우 initialCapacity가 하한이 됩니다. 오버플로우가 활성화된 경우 maxCapacity가 상한이 됩니다. 자연 회복은 이 값에서 멈춥니다. recoverIntervalMinutes int 1 ~ 2147483646 스태미나 회복 간격(분) StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 RecoverIntervalTable로 오버라이드되는 사용자별 회복 간격(분)입니다. 테이블이 설정되어 있지 않은 경우, 모델의 기본값인 recoverIntervalMinutes로 대체됩니다. recoverValue int 1 ~ 2147483646 스태미나 회복량 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 RecoverValueTable로 오버라이드되는 사용자별 틱당 회복량입니다. 테이블이 설정되어 있지 않은 경우, 모델의 기본값인 recoverValue로 대체됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . UpdateStaminaByUserId ( \u0026 stamina . UpdateStaminaByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), Value : pointy . Int32 ( 50 ), MaxValue : pointy . Int32 ( 100 ), RecoverIntervalMinutes : nil , RecoverValue : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\UpdateStaminaByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e updateStaminaByUserId ( ( new UpdateStaminaByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withValue ( 50 ) -\u003e withMaxValue ( 100 ) -\u003e withRecoverIntervalMinutes ( null ) -\u003e withRecoverValue ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.UpdateStaminaByUserIdRequest ; import io.gs2.stamina.result.UpdateStaminaByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { UpdateStaminaByUserIdResult result = client . updateStaminaByUserId ( new UpdateStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withValue ( 50 ) . withMaxValue ( 100 ) . withRecoverIntervalMinutes ( null ) . withRecoverValue ( null ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . UpdateStaminaByUserIdResult \u003e asyncResult = null ; yield return client . UpdateStaminaByUserId ( new Gs2 . Gs2Stamina . Request . UpdateStaminaByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithValue ( 50 ) . WithMaxValue ( 100 ) . WithRecoverIntervalMinutes ( null ) . WithRecoverValue ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . updateStaminaByUserId ( new Gs2Stamina . UpdateStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withValue ( 50 ) . withMaxValue ( 100 ) . withRecoverIntervalMinutes ( null ) . withRecoverValue ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . update_stamina_by_user_id ( stamina . UpdateStaminaByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_value ( 50 ) . with_max_value ( 100 ) . with_recover_interval_minutes ( None ) . with_recover_value ( None ) . with_time_offset_token ( None ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.update_stamina_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , value = 50 , maxValue = 100 , recoverIntervalMinutes = nil , recoverValue = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.update_stamina_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , value = 50 , maxValue = 100 , recoverIntervalMinutes = nil , recoverValue = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; consumeStamina 스타미나 소비 현재 스타미나 값에서 지정된 양을 차감합니다. 현재 스타미나 값이 소비량보다 적은 경우 Insufficient 오류를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. accessToken string  ~ 128자 액세스 토큰 consumeValue int  1 ~ 2147483646 소비할 스타미나 양 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . ConsumeStamina ( \u0026 stamina . ConsumeStaminaRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), ConsumeValue : pointy . Int32 ( 50 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\ConsumeStaminaRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e consumeStamina ( ( new ConsumeStaminaRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withConsumeValue ( 50 ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.ConsumeStaminaRequest ; import io.gs2.stamina.result.ConsumeStaminaResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { ConsumeStaminaResult result = client . consumeStamina ( new ConsumeStaminaRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConsumeValue ( 50 ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . ConsumeStaminaResult \u003e asyncResult = null ; yield return client . ConsumeStamina ( new Gs2 . Gs2Stamina . Request . ConsumeStaminaRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithConsumeValue ( 50 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . consumeStamina ( new Gs2Stamina . ConsumeStaminaRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withConsumeValue ( 50 ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . consume_stamina ( stamina . ConsumeStaminaRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_access_token ( 'accessToken-0001' ) . with_consume_value ( 50 ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.consume_stamina ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , consumeValue = 50 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.consume_stamina_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , consumeValue = 50 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; consumeStaminaByUserId 사용자 ID를 지정하여 스타미나 소비 지정된 사용자의 현재 스타미나 값에서 지정된 양을 차감합니다. 현재 스타미나 값이 소비량보다 적은 경우 Insufficient 오류를 반환합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID consumeValue int  1 ~ 2147483646 소비할 스타미나 양 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . ConsumeStaminaByUserId ( \u0026 stamina . ConsumeStaminaByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), ConsumeValue : pointy . Int32 ( 50 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\ConsumeStaminaByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e consumeStaminaByUserId ( ( new ConsumeStaminaByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withConsumeValue ( 50 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.ConsumeStaminaByUserIdRequest ; import io.gs2.stamina.result.ConsumeStaminaByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { ConsumeStaminaByUserIdResult result = client . consumeStaminaByUserId ( new ConsumeStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withConsumeValue ( 50 ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . ConsumeStaminaByUserIdResult \u003e asyncResult = null ; yield return client . ConsumeStaminaByUserId ( new Gs2 . Gs2Stamina . Request . ConsumeStaminaByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithConsumeValue ( 50 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . consumeStaminaByUserId ( new Gs2Stamina . ConsumeStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withConsumeValue ( 50 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . consume_stamina_by_user_id ( stamina . ConsumeStaminaByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_consume_value ( 50 ) . with_time_offset_token ( None ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.consume_stamina_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , consumeValue = 50 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.consume_stamina_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , consumeValue = 50 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; applyStamina 현재 스타미나의 자연 회복량을 적용 시간 경과에 기반한 자동 스타미나 회복을 계산하여 적용합니다. 회복량은 마지막 회복 이후 경과 시간, 스타미나 모델에 설정된 회복 간격과 회복량을 기반으로 계산됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. accessToken string  ~ 128자 액세스 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . ApplyStamina ( \u0026 stamina . ApplyStaminaRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\ApplyStaminaRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e applyStamina ( ( new ApplyStaminaRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.ApplyStaminaRequest ; import io.gs2.stamina.result.ApplyStaminaResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { ApplyStaminaResult result = client . applyStamina ( new ApplyStaminaRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . ApplyStaminaResult \u003e asyncResult = null ; yield return client . ApplyStamina ( new Gs2 . Gs2Stamina . Request . ApplyStaminaRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithAccessToken ( \"accessToken-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . applyStamina ( new Gs2Stamina . ApplyStaminaRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . apply_stamina ( stamina . ApplyStaminaRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_access_token ( 'accessToken-0001' ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.apply_stamina ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.apply_stamina_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; applyStaminaByUserId 사용자 ID를 지정하여 현재 스타미나의 자연 회복량을 적용 지정된 사용자의 시간 경과에 기반한 자동 스타미나 회복을 계산하여 적용합니다. 회복량은 마지막 회복 이후 경과 시간, 스타미나 모델에 설정된 회복 간격과 회복량을 기반으로 계산됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . ApplyStaminaByUserId ( \u0026 stamina . ApplyStaminaByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\ApplyStaminaByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e applyStaminaByUserId ( ( new ApplyStaminaByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.ApplyStaminaByUserIdRequest ; import io.gs2.stamina.result.ApplyStaminaByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { ApplyStaminaByUserIdResult result = client . applyStaminaByUserId ( new ApplyStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . ApplyStaminaByUserIdResult \u003e asyncResult = null ; yield return client . ApplyStaminaByUserId ( new Gs2 . Gs2Stamina . Request . ApplyStaminaByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . applyStaminaByUserId ( new Gs2Stamina . ApplyStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . apply_stamina_by_user_id ( stamina . ApplyStaminaByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.apply_stamina_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.apply_stamina_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; recoverStaminaByUserId 사용자 ID를 지정하여 스타미나 회복 지정된 양의 스타미나를 최대 용량까지 회복합니다. 회복으로 인해 값이 최대값을 초과하고 오버플로 모드가 활성화된 경우, 초과분은 오버플로 값으로 기록됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID recoverValue int  1 ~ 2147483646 스타미나의 회복량 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 overflowValue int 스태미나 값의 상한을 초과하여 받지 못하고 GS2-Inbox로 전송한 스태미나 값 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . RecoverStaminaByUserId ( \u0026 stamina . RecoverStaminaByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), RecoverValue : pointy . Int32 ( 50 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel overflowValue := result . OverflowValue use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\RecoverStaminaByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e recoverStaminaByUserId ( ( new RecoverStaminaByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRecoverValue ( 50 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); $overflowValue = $result -\u003e getOverflowValue (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.RecoverStaminaByUserIdRequest ; import io.gs2.stamina.result.RecoverStaminaByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { RecoverStaminaByUserIdResult result = client . recoverStaminaByUserId ( new RecoverStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withRecoverValue ( 50 ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); int overflowValue = result . getOverflowValue (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . RecoverStaminaByUserIdResult \u003e asyncResult = null ; yield return client . RecoverStaminaByUserId ( new Gs2 . Gs2Stamina . Request . RecoverStaminaByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithRecoverValue ( 50 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; var overflowValue = result . OverflowValue ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . recoverStaminaByUserId ( new Gs2Stamina . RecoverStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withRecoverValue ( 50 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); const overflowValue = result . getOverflowValue (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . recover_stamina_by_user_id ( stamina . RecoverStaminaByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_recover_value ( 50 ) . with_time_offset_token ( None ) ) item = result . item stamina_model = result . stamina_model overflow_value = result . overflow_value except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.recover_stamina_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , recoverValue = 50 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; overflowValue = result.overflowValue ; client = gs2 ( 'stamina' ) api_result_handler = client.recover_stamina_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , recoverValue = 50 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; overflowValue = result.overflowValue ; raiseMaxValueByUserId 사용자 ID를 지정하여 스타미나의 최대값을 가산 지정된 양만큼 스타미나의 최대 용량을 영구적으로 증가시킵니다. 레벨업 보상이나 아이템 효과 등 영구적인 스탯 상승에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID raiseValue int  0 ~ 2147483646 증가시킬 최대 스타미나 양 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . RaiseMaxValueByUserId ( \u0026 stamina . RaiseMaxValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), RaiseValue : pointy . Int32 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\RaiseMaxValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e raiseMaxValueByUserId ( ( new RaiseMaxValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRaiseValue ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.RaiseMaxValueByUserIdRequest ; import io.gs2.stamina.result.RaiseMaxValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { RaiseMaxValueByUserIdResult result = client . raiseMaxValueByUserId ( new RaiseMaxValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withRaiseValue ( 10 ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . RaiseMaxValueByUserIdResult \u003e asyncResult = null ; yield return client . RaiseMaxValueByUserId ( new Gs2 . Gs2Stamina . Request . RaiseMaxValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithRaiseValue ( 10 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . raiseMaxValueByUserId ( new Gs2Stamina . RaiseMaxValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withRaiseValue ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . raise_max_value_by_user_id ( stamina . RaiseMaxValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_raise_value ( 10 ) . with_time_offset_token ( None ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.raise_max_value_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , raiseValue = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.raise_max_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , raiseValue = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; decreaseMaxValue 스타미나 최대값 감산 지정된 양만큼 스타미나의 최대 용량을 감소시킵니다. 스타미나 용량에 대한 디버프나 페널티 적용에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. accessToken string  ~ 128자 액세스 토큰 decreaseValue int  0 ~ 2147483646 감산할 최대 스타미나 양 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DecreaseMaxValue ( \u0026 stamina . DecreaseMaxValueRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), DecreaseValue : pointy . Int32 ( 10 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DecreaseMaxValueRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e decreaseMaxValue ( ( new DecreaseMaxValueRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withDecreaseValue ( 10 ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DecreaseMaxValueRequest ; import io.gs2.stamina.result.DecreaseMaxValueResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DecreaseMaxValueResult result = client . decreaseMaxValue ( new DecreaseMaxValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDecreaseValue ( 10 ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DecreaseMaxValueResult \u003e asyncResult = null ; yield return client . DecreaseMaxValue ( new Gs2 . Gs2Stamina . Request . DecreaseMaxValueRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithDecreaseValue ( 10 ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . decreaseMaxValue ( new Gs2Stamina . DecreaseMaxValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withDecreaseValue ( 10 ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . decrease_max_value ( stamina . DecreaseMaxValueRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_access_token ( 'accessToken-0001' ) . with_decrease_value ( 10 ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.decrease_max_value ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , decreaseValue = 10 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.decrease_max_value_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , decreaseValue = 10 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; decreaseMaxValueByUserId 사용자 ID를 지정하여 스타미나 최대값 감산 지정된 사용자의 스타미나 최대 용량을 지정된 양만큼 감소시킵니다. 스타미나 용량에 대한 디버프나 페널티 적용에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID decreaseValue int  0 ~ 2147483646 감산할 최대 스타미나 양 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DecreaseMaxValueByUserId ( \u0026 stamina . DecreaseMaxValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), DecreaseValue : pointy . Int32 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DecreaseMaxValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e decreaseMaxValueByUserId ( ( new DecreaseMaxValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withDecreaseValue ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DecreaseMaxValueByUserIdRequest ; import io.gs2.stamina.result.DecreaseMaxValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DecreaseMaxValueByUserIdResult result = client . decreaseMaxValueByUserId ( new DecreaseMaxValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withDecreaseValue ( 10 ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DecreaseMaxValueByUserIdResult \u003e asyncResult = null ; yield return client . DecreaseMaxValueByUserId ( new Gs2 . Gs2Stamina . Request . DecreaseMaxValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithDecreaseValue ( 10 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . decreaseMaxValueByUserId ( new Gs2Stamina . DecreaseMaxValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withDecreaseValue ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . decrease_max_value_by_user_id ( stamina . DecreaseMaxValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_decrease_value ( 10 ) . with_time_offset_token ( None ) ) item = result . item stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.decrease_max_value_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , decreaseValue = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.decrease_max_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , decreaseValue = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; staminaModel = result.staminaModel ; setMaxValueByUserId 사용자 ID를 지정하여 스타미나의 최대값을 갱신 스타미나의 최대 용량을 지정된 값으로 설정합니다. 감사 목적으로 변경 전 스타미나 상태가 응답에 유지됩니다. 관리자에 의한 오버라이드나 특별 이벤트에서의 조정에 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID maxValue int  1 ~ 2147483646 스태미나 최대값 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 MaxStaminaTable로 오버라이드되는 사용자별 스태미나 최대값입니다. 오버플로우가 비활성화된 경우 initialCapacity가 하한이 됩니다. 오버플로우가 활성화된 경우 maxCapacity가 상한이 됩니다. 자연 회복은 이 값에서 멈춥니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 old Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . SetMaxValueByUserId ( \u0026 stamina . SetMaxValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), MaxValue : pointy . Int32 ( 100 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\SetMaxValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e setMaxValueByUserId ( ( new SetMaxValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withMaxValue ( 100 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.SetMaxValueByUserIdRequest ; import io.gs2.stamina.result.SetMaxValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { SetMaxValueByUserIdResult result = client . setMaxValueByUserId ( new SetMaxValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withMaxValue ( 100 ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); Stamina old = result . getOld (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . SetMaxValueByUserIdResult \u003e asyncResult = null ; yield return client . SetMaxValueByUserId ( new Gs2 . Gs2Stamina . Request . SetMaxValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithMaxValue ( 100 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . setMaxValueByUserId ( new Gs2Stamina . SetMaxValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withMaxValue ( 100 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . set_max_value_by_user_id ( stamina . SetMaxValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_max_value ( 100 ) . with_time_offset_token ( None ) ) item = result . item old = result . old stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.set_max_value_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , maxValue = 100 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.set_max_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , maxValue = 100 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; setRecoverIntervalByUserId 사용자 ID를 지정하여 스타미나 회복 간격(분)을 갱신 스타미나 회복 간격을 지정된 값(분)으로 설정합니다. 감사 목적으로 변경 전 스타미나 상태가 응답에 유지됩니다. 스타미나가 자동으로 회복되는 빈도를 제어합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID recoverIntervalMinutes int  1 ~ 2147483646 스타미나 회복 간격(분) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 old Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . SetRecoverIntervalByUserId ( \u0026 stamina . SetRecoverIntervalByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), RecoverIntervalMinutes : pointy . Int32 ( 10 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\SetRecoverIntervalByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e setRecoverIntervalByUserId ( ( new SetRecoverIntervalByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRecoverIntervalMinutes ( 10 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.SetRecoverIntervalByUserIdRequest ; import io.gs2.stamina.result.SetRecoverIntervalByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { SetRecoverIntervalByUserIdResult result = client . setRecoverIntervalByUserId ( new SetRecoverIntervalByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withRecoverIntervalMinutes ( 10 ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); Stamina old = result . getOld (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . SetRecoverIntervalByUserIdResult \u003e asyncResult = null ; yield return client . SetRecoverIntervalByUserId ( new Gs2 . Gs2Stamina . Request . SetRecoverIntervalByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithRecoverIntervalMinutes ( 10 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . setRecoverIntervalByUserId ( new Gs2Stamina . SetRecoverIntervalByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withRecoverIntervalMinutes ( 10 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . set_recover_interval_by_user_id ( stamina . SetRecoverIntervalByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_recover_interval_minutes ( 10 ) . with_time_offset_token ( None ) ) item = result . item old = result . old stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.set_recover_interval_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , recoverIntervalMinutes = 10 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.set_recover_interval_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , recoverIntervalMinutes = 10 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; setRecoverValueByUserId 사용자 ID를 지정하여 스타미나의 회복량을 설정 스타미나의 회복량을 지정된 값으로 설정합니다. 감사 목적으로 변경 전 스타미나 상태가 응답에 유지됩니다. 회복 간격마다 회복되는 스타미나 양을 제어합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID recoverValue int  1 ~ 2147483646 스타미나의 회복량 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 old Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . SetRecoverValueByUserId ( \u0026 stamina . SetRecoverValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), RecoverValue : pointy . Int32 ( 50 ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\SetRecoverValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e setRecoverValueByUserId ( ( new SetRecoverValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withRecoverValue ( 50 ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.SetRecoverValueByUserIdRequest ; import io.gs2.stamina.result.SetRecoverValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { SetRecoverValueByUserIdResult result = client . setRecoverValueByUserId ( new SetRecoverValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withRecoverValue ( 50 ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); Stamina old = result . getOld (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . SetRecoverValueByUserIdResult \u003e asyncResult = null ; yield return client . SetRecoverValueByUserId ( new Gs2 . Gs2Stamina . Request . SetRecoverValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithRecoverValue ( 50 ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . setRecoverValueByUserId ( new Gs2Stamina . SetRecoverValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withRecoverValue ( 50 ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); const old = result . getOld (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . set_recover_value_by_user_id ( stamina . SetRecoverValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_recover_value ( 50 ) . with_time_offset_token ( None ) ) item = result . item old = result . old stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.set_recover_value_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , recoverValue = 50 , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.set_recover_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , recoverValue = 50 , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; setMaxValueByStatus GS2-Experience의 스테이터스를 사용하여 스타미나의 최대값을 갱신 서명된 GS2-Experience 스테이터스의 랭크 값을 기반으로 스타미나의 최대 용량을 설정합니다. 서명된 스테이터스의 바디와 서명을 지정된 키로 검증한 후, 랭크 값을 사용하여 최대 스타미나 테이블에서 대응하는 최대 스타미나를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. accessToken string  ~ 128자 액세스 토큰 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN signedStatusBody string  ~ 524288자 서명 대상인 GS2-Experience 스테이터스의 바디 signedStatusSignature string  ~ 128자 GS2-Experience 스테이터스의 서명 Result 타입 설명 item Stamina 스타미나 old Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . SetMaxValueByStatus ( \u0026 stamina . SetMaxValueByStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), KeyId : pointy . String ( \"key-0001\" ), SignedStatusBody : pointy . String ( \"statusBody...\" ), SignedStatusSignature : pointy . String ( \"statusSignature...\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\SetMaxValueByStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e setMaxValueByStatus ( ( new SetMaxValueByStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withSignedStatusBody ( \"statusBody...\" ) -\u003e withSignedStatusSignature ( \"statusSignature...\" ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.SetMaxValueByStatusRequest ; import io.gs2.stamina.result.SetMaxValueByStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { SetMaxValueByStatusResult result = client . setMaxValueByStatus ( new SetMaxValueByStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withKeyId ( \"key-0001\" ) . withSignedStatusBody ( \"statusBody...\" ) . withSignedStatusSignature ( \"statusSignature...\" ) ); Stamina item = result . getItem (); Stamina old = result . getOld (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . SetMaxValueByStatusResult \u003e asyncResult = null ; yield return client . SetMaxValueByStatus ( new Gs2 . Gs2Stamina . Request . SetMaxValueByStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithKeyId ( \"key-0001\" ) . WithSignedStatusBody ( \"statusBody...\" ) . WithSignedStatusSignature ( \"statusSignature...\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . setMaxValueByStatus ( new Gs2Stamina . SetMaxValueByStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withKeyId ( \"key-0001\" ) . withSignedStatusBody ( \"statusBody...\" ) . withSignedStatusSignature ( \"statusSignature...\" ) ); const item = result . getItem (); const old = result . getOld (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . set_max_value_by_status ( stamina . SetMaxValueByStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_access_token ( 'accessToken-0001' ) . with_key_id ( 'key-0001' ) . with_signed_status_body ( 'statusBody...' ) . with_signed_status_signature ( 'statusSignature...' ) ) item = result . item old = result . old stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.set_max_value_by_status ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , keyId = \"key-0001\" , signedStatusBody = \"statusBody...\" , signedStatusSignature = \"statusSignature...\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.set_max_value_by_status_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , keyId = \"key-0001\" , signedStatusBody = \"statusBody...\" , signedStatusSignature = \"statusSignature...\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; setRecoverIntervalByStatus GS2-Experience의 스테이터스를 사용하여 스타미나의 회복 간격을 갱신 서명된 GS2-Experience 스테이터스의 랭크 값을 기반으로 스타미나의 회복 간격을 설정합니다. 서명된 스테이터스의 바디와 서명을 지정된 키로 검증한 후, 랭크 값을 사용하여 회복 간격 테이블에서 대응하는 회복 간격을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. accessToken string  ~ 128자 액세스 토큰 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN signedStatusBody string  ~ 524288자 서명 대상인 GS2-Experience 스테이터스의 바디 signedStatusSignature string  ~ 128자 GS2-Experience 스테이터스의 서명 Result 타입 설명 item Stamina 스타미나 old Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . SetRecoverIntervalByStatus ( \u0026 stamina . SetRecoverIntervalByStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), KeyId : pointy . String ( \"key-0001\" ), SignedStatusBody : pointy . String ( \"statusBody...\" ), SignedStatusSignature : pointy . String ( \"statusSignature...\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\SetRecoverIntervalByStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e setRecoverIntervalByStatus ( ( new SetRecoverIntervalByStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withSignedStatusBody ( \"statusBody...\" ) -\u003e withSignedStatusSignature ( \"statusSignature...\" ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.SetRecoverIntervalByStatusRequest ; import io.gs2.stamina.result.SetRecoverIntervalByStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { SetRecoverIntervalByStatusResult result = client . setRecoverIntervalByStatus ( new SetRecoverIntervalByStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withKeyId ( \"key-0001\" ) . withSignedStatusBody ( \"statusBody...\" ) . withSignedStatusSignature ( \"statusSignature...\" ) ); Stamina item = result . getItem (); Stamina old = result . getOld (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . SetRecoverIntervalByStatusResult \u003e asyncResult = null ; yield return client . SetRecoverIntervalByStatus ( new Gs2 . Gs2Stamina . Request . SetRecoverIntervalByStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithKeyId ( \"key-0001\" ) . WithSignedStatusBody ( \"statusBody...\" ) . WithSignedStatusSignature ( \"statusSignature...\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . setRecoverIntervalByStatus ( new Gs2Stamina . SetRecoverIntervalByStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withKeyId ( \"key-0001\" ) . withSignedStatusBody ( \"statusBody...\" ) . withSignedStatusSignature ( \"statusSignature...\" ) ); const item = result . getItem (); const old = result . getOld (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . set_recover_interval_by_status ( stamina . SetRecoverIntervalByStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_access_token ( 'accessToken-0001' ) . with_key_id ( 'key-0001' ) . with_signed_status_body ( 'statusBody...' ) . with_signed_status_signature ( 'statusSignature...' ) ) item = result . item old = result . old stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.set_recover_interval_by_status ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , keyId = \"key-0001\" , signedStatusBody = \"statusBody...\" , signedStatusSignature = \"statusSignature...\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.set_recover_interval_by_status_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , keyId = \"key-0001\" , signedStatusBody = \"statusBody...\" , signedStatusSignature = \"statusSignature...\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; setRecoverValueByStatus GS2-Experience의 스테이터스를 사용하여 스타미나의 회복량을 갱신 서명된 GS2-Experience 스테이터스의 랭크 값을 기반으로 스타미나의 회복량을 설정합니다. 서명된 스테이터스의 바디와 서명을 지정된 키로 검증한 후, 랭크 값을 사용하여 회복량 테이블에서 대응하는 회복량을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. accessToken string  ~ 128자 액세스 토큰 keyId string “grn:gs2:{region}:{ownerId}:key:default:key:default” ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN signedStatusBody string  ~ 524288자 서명 대상인 GS2-Experience 스테이터스의 바디 signedStatusSignature string  ~ 128자 GS2-Experience 스테이터스의 서명 Result 타입 설명 item Stamina 스타미나 old Stamina 스타미나 staminaModel StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . SetRecoverValueByStatus ( \u0026 stamina . SetRecoverValueByStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), KeyId : pointy . String ( \"key-0001\" ), SignedStatusBody : pointy . String ( \"statusBody...\" ), SignedStatusSignature : pointy . String ( \"statusSignature...\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item old := result . Old staminaModel := result . StaminaModel use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\SetRecoverValueByStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e setRecoverValueByStatus ( ( new SetRecoverValueByStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withKeyId ( \"key-0001\" ) -\u003e withSignedStatusBody ( \"statusBody...\" ) -\u003e withSignedStatusSignature ( \"statusSignature...\" ) ); $item = $result -\u003e getItem (); $old = $result -\u003e getOld (); $staminaModel = $result -\u003e getStaminaModel (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.SetRecoverValueByStatusRequest ; import io.gs2.stamina.result.SetRecoverValueByStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { SetRecoverValueByStatusResult result = client . setRecoverValueByStatus ( new SetRecoverValueByStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withKeyId ( \"key-0001\" ) . withSignedStatusBody ( \"statusBody...\" ) . withSignedStatusSignature ( \"statusSignature...\" ) ); Stamina item = result . getItem (); Stamina old = result . getOld (); StaminaModel staminaModel = result . getStaminaModel (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . SetRecoverValueByStatusResult \u003e asyncResult = null ; yield return client . SetRecoverValueByStatus ( new Gs2 . Gs2Stamina . Request . SetRecoverValueByStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithKeyId ( \"key-0001\" ) . WithSignedStatusBody ( \"statusBody...\" ) . WithSignedStatusSignature ( \"statusSignature...\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; var old = result . Old ; var staminaModel = result . StaminaModel ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . setRecoverValueByStatus ( new Gs2Stamina . SetRecoverValueByStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withKeyId ( \"key-0001\" ) . withSignedStatusBody ( \"statusBody...\" ) . withSignedStatusSignature ( \"statusSignature...\" ) ); const item = result . getItem (); const old = result . getOld (); const staminaModel = result . getStaminaModel (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . set_recover_value_by_status ( stamina . SetRecoverValueByStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_access_token ( 'accessToken-0001' ) . with_key_id ( 'key-0001' ) . with_signed_status_body ( 'statusBody...' ) . with_signed_status_signature ( 'statusSignature...' ) ) item = result . item old = result . old stamina_model = result . stamina_model except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.set_recover_value_by_status ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , keyId = \"key-0001\" , signedStatusBody = \"statusBody...\" , signedStatusSignature = \"statusSignature...\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; client = gs2 ( 'stamina' ) api_result_handler = client.set_recover_value_by_status_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , accessToken = \"accessToken-0001\" , keyId = \"key-0001\" , signedStatusBody = \"statusBody...\" , signedStatusSignature = \"statusSignature...\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; old = result.old ; staminaModel = result.staminaModel ; deleteStaminaByUserId 사용자 ID를 지정하여 스타미나 삭제 지정된 사용자의 스타미나 리소스를 완전히 삭제합니다. 현재값, 회복 설정, 오버플로량을 포함한 스타미나 레코드가 완전히 삭제됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 삭제한 스태미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DeleteStaminaByUserId ( \u0026 stamina . DeleteStaminaByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DeleteStaminaByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e deleteStaminaByUserId ( ( new DeleteStaminaByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DeleteStaminaByUserIdRequest ; import io.gs2.stamina.result.DeleteStaminaByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DeleteStaminaByUserIdResult result = client . deleteStaminaByUserId ( new DeleteStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DeleteStaminaByUserIdResult \u003e asyncResult = null ; yield return client . DeleteStaminaByUserId ( new Gs2 . Gs2Stamina . Request . DeleteStaminaByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . deleteStaminaByUserId ( new Gs2Stamina . DeleteStaminaByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . delete_stamina_by_user_id ( stamina . DeleteStaminaByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.delete_stamina_by_user_id ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.delete_stamina_by_user_id_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaValue 스타미나 현재값을 검증 현재 스타미나 값이 지정된 조건(미만, 이하, 초과, 이상, 일치, 불일치)을 지정된 임계값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 현재값이 지정값 미만임 lessEqual 현재값이 지정값 이하임 greater 현재값이 지정값을 초과함 greaterEqual 현재값이 지정값 이상임 equal 현재값이 지정값과 일치함 notEqual 현재값이 지정값과 일치하지 않음 value int  0 ~ 2147483646 현재값 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaValue ( \u0026 stamina . VerifyStaminaValueRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaValueRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaValue ( ( new VerifyStaminaValueRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaValueRequest ; import io.gs2.stamina.result.VerifyStaminaValueResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaValueResult result = client . verifyStaminaValue ( new VerifyStaminaValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaValueResult \u003e asyncResult = null ; yield return client . VerifyStaminaValue ( new Gs2 . Gs2Stamina . Request . VerifyStaminaValueRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaValue ( new Gs2Stamina . VerifyStaminaValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_value ( stamina . VerifyStaminaValueRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_value ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_value_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaValueByUserId 사용자 ID를 지정하여 스타미나 현재값을 검증 지정된 사용자의 현재 스타미나 값이 지정된 조건을 지정된 임계값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 현재값이 지정값 미만임 lessEqual 현재값이 지정값 이하임 greater 현재값이 지정값을 초과함 greaterEqual 현재값이 지정값 이상임 equal 현재값이 지정값과 일치함 notEqual 현재값이 지정값과 일치하지 않음 value int  0 ~ 2147483646 현재값 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaValueByUserId ( \u0026 stamina . VerifyStaminaValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaValueByUserId ( ( new VerifyStaminaValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaValueByUserIdRequest ; import io.gs2.stamina.result.VerifyStaminaValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaValueByUserIdResult result = client . verifyStaminaValueByUserId ( new VerifyStaminaValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaValueByUserIdResult \u003e asyncResult = null ; yield return client . VerifyStaminaValueByUserId ( new Gs2 . Gs2Stamina . Request . VerifyStaminaValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaValueByUserId ( new Gs2Stamina . VerifyStaminaValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_value_by_user_id ( stamina . VerifyStaminaValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_value_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaMaxValue 스태미나 최댓값 검증 스태미나의 최대 용량(버프에 의한 변경 포함)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 최댓값이 지정값 미만임 lessEqual 최댓값이 지정값 이하임 greater 최댓값이 지정값을 초과함 greaterEqual 최댓값이 지정값 이상임 equal 최댓값이 지정값과 일치함 notEqual 최댓값이 지정값과 일치하지 않음 value int  0 ~ 2147483646 최대값 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaMaxValue ( \u0026 stamina . VerifyStaminaMaxValueRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaMaxValueRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaMaxValue ( ( new VerifyStaminaMaxValueRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaMaxValueRequest ; import io.gs2.stamina.result.VerifyStaminaMaxValueResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaMaxValueResult result = client . verifyStaminaMaxValue ( new VerifyStaminaMaxValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaMaxValueResult \u003e asyncResult = null ; yield return client . VerifyStaminaMaxValue ( new Gs2 . Gs2Stamina . Request . VerifyStaminaMaxValueRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaMaxValue ( new Gs2Stamina . VerifyStaminaMaxValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_max_value ( stamina . VerifyStaminaMaxValueRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_max_value ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_max_value_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaMaxValueByUserId 사용자 ID를 지정하여 스태미나 최댓값 검증 지정된 사용자의 스태미나 최대 용량(버프에 의한 변경 포함)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 최댓값이 지정값 미만임 lessEqual 최댓값이 지정값 이하임 greater 최댓값이 지정값을 초과함 greaterEqual 최댓값이 지정값 이상임 equal 최댓값이 지정값과 일치함 notEqual 최댓값이 지정값과 일치하지 않음 value int  0 ~ 2147483646 최대값 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaMaxValueByUserId ( \u0026 stamina . VerifyStaminaMaxValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaMaxValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaMaxValueByUserId ( ( new VerifyStaminaMaxValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaMaxValueByUserIdRequest ; import io.gs2.stamina.result.VerifyStaminaMaxValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaMaxValueByUserIdResult result = client . verifyStaminaMaxValueByUserId ( new VerifyStaminaMaxValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaMaxValueByUserIdResult \u003e asyncResult = null ; yield return client . VerifyStaminaMaxValueByUserId ( new Gs2 . Gs2Stamina . Request . VerifyStaminaMaxValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaMaxValueByUserId ( new Gs2Stamina . VerifyStaminaMaxValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_max_value_by_user_id ( stamina . VerifyStaminaMaxValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_max_value_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_max_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaRecoverIntervalMinutes 스태미나 회복 간격(분) 검증 스태미나의 회복 간격(분)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 회복 속도가 지정값 미만임 lessEqual 회복 속도가 지정값 이하임 greater 회복 속도가 지정값을 초과함 greaterEqual 회복 속도가 지정값 이상임 equal 회복 속도가 지정값과 일치함 notEqual 회복 속도가 지정값과 일치하지 않음 value int  0 ~ 2147483646 회복 속도 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaRecoverIntervalMinutes ( \u0026 stamina . VerifyStaminaRecoverIntervalMinutesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaRecoverIntervalMinutesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaRecoverIntervalMinutes ( ( new VerifyStaminaRecoverIntervalMinutesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaRecoverIntervalMinutesRequest ; import io.gs2.stamina.result.VerifyStaminaRecoverIntervalMinutesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaRecoverIntervalMinutesResult result = client . verifyStaminaRecoverIntervalMinutes ( new VerifyStaminaRecoverIntervalMinutesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaRecoverIntervalMinutesResult \u003e asyncResult = null ; yield return client . VerifyStaminaRecoverIntervalMinutes ( new Gs2 . Gs2Stamina . Request . VerifyStaminaRecoverIntervalMinutesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaRecoverIntervalMinutes ( new Gs2Stamina . VerifyStaminaRecoverIntervalMinutesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_recover_interval_minutes ( stamina . VerifyStaminaRecoverIntervalMinutesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_recover_interval_minutes ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_recover_interval_minutes_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaRecoverIntervalMinutesByUserId 사용자 ID를 지정하여 스태미나 회복 간격(분) 검증 지정된 사용자의 스태미나 회복 간격(분)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 회복 속도가 지정값 미만임 lessEqual 회복 속도가 지정값 이하임 greater 회복 속도가 지정값을 초과함 greaterEqual 회복 속도가 지정값 이상임 equal 회복 속도가 지정값과 일치함 notEqual 회복 속도가 지정값과 일치하지 않음 value int  0 ~ 2147483646 회복 속도 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaRecoverIntervalMinutesByUserId ( \u0026 stamina . VerifyStaminaRecoverIntervalMinutesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaRecoverIntervalMinutesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaRecoverIntervalMinutesByUserId ( ( new VerifyStaminaRecoverIntervalMinutesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaRecoverIntervalMinutesByUserIdRequest ; import io.gs2.stamina.result.VerifyStaminaRecoverIntervalMinutesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaRecoverIntervalMinutesByUserIdResult result = client . verifyStaminaRecoverIntervalMinutesByUserId ( new VerifyStaminaRecoverIntervalMinutesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaRecoverIntervalMinutesByUserIdResult \u003e asyncResult = null ; yield return client . VerifyStaminaRecoverIntervalMinutesByUserId ( new Gs2 . Gs2Stamina . Request . VerifyStaminaRecoverIntervalMinutesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaRecoverIntervalMinutesByUserId ( new Gs2Stamina . VerifyStaminaRecoverIntervalMinutesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_recover_interval_minutes_by_user_id ( stamina . VerifyStaminaRecoverIntervalMinutesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_recover_interval_minutes_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_recover_interval_minutes_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaRecoverValue 스태미나 회복량 검증 스태미나의 회복량(버프에 의한 변경 포함)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 회복량이 지정값 미만임 lessEqual 회복량이 지정값 이하임 greater 회복량이 지정값을 초과함 greaterEqual 회복량이 지정값 이상임 equal 회복량이 지정값과 일치함 notEqual 회복량이 지정값과 일치하지 않음 value int  0 ~ 2147483646 회복량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaRecoverValue ( \u0026 stamina . VerifyStaminaRecoverValueRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaRecoverValueRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaRecoverValue ( ( new VerifyStaminaRecoverValueRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaRecoverValueRequest ; import io.gs2.stamina.result.VerifyStaminaRecoverValueResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaRecoverValueResult result = client . verifyStaminaRecoverValue ( new VerifyStaminaRecoverValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaRecoverValueResult \u003e asyncResult = null ; yield return client . VerifyStaminaRecoverValue ( new Gs2 . Gs2Stamina . Request . VerifyStaminaRecoverValueRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaRecoverValue ( new Gs2Stamina . VerifyStaminaRecoverValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_recover_value ( stamina . VerifyStaminaRecoverValueRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_recover_value ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_recover_value_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaRecoverValueByUserId 사용자 ID를 지정하여 스태미나 회복량 검증 지정된 사용자의 스태미나 회복량(버프에 의한 변경 포함)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 회복량이 지정값 미만임 lessEqual 회복량이 지정값 이하임 greater 회복량이 지정값을 초과함 greaterEqual 회복량이 지정값 이상임 equal 회복량이 지정값과 일치함 notEqual 회복량이 지정값과 일치하지 않음 value int  0 ~ 2147483646 회복량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaRecoverValueByUserId ( \u0026 stamina . VerifyStaminaRecoverValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaRecoverValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaRecoverValueByUserId ( ( new VerifyStaminaRecoverValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaRecoverValueByUserIdRequest ; import io.gs2.stamina.result.VerifyStaminaRecoverValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaRecoverValueByUserIdResult result = client . verifyStaminaRecoverValueByUserId ( new VerifyStaminaRecoverValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaRecoverValueByUserIdResult \u003e asyncResult = null ; yield return client . VerifyStaminaRecoverValueByUserId ( new Gs2 . Gs2Stamina . Request . VerifyStaminaRecoverValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaRecoverValueByUserId ( new Gs2Stamina . VerifyStaminaRecoverValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_recover_value_by_user_id ( stamina . VerifyStaminaRecoverValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_recover_value_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_recover_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaOverflowValue 스태미나 오버플로우량 검증 스태미나의 오버플로우량(최대 용량을 초과한 잉여 스태미나)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 오버플로우량이 지정값 미만임 lessEqual 오버플로우량이 지정값 이하임 greater 오버플로우량이 지정값을 초과함 greaterEqual 오버플로우량이 지정값 이상임 equal 오버플로우량이 지정값과 일치함 notEqual 오버플로우량이 지정값과 일치하지 않음 value int  0 ~ 2147483646 오버플로우량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaOverflowValue ( \u0026 stamina . VerifyStaminaOverflowValueRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaOverflowValueRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaOverflowValue ( ( new VerifyStaminaOverflowValueRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaOverflowValueRequest ; import io.gs2.stamina.result.VerifyStaminaOverflowValueResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaOverflowValueResult result = client . verifyStaminaOverflowValue ( new VerifyStaminaOverflowValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaOverflowValueResult \u003e asyncResult = null ; yield return client . VerifyStaminaOverflowValue ( new Gs2 . Gs2Stamina . Request . VerifyStaminaOverflowValueRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaOverflowValue ( new Gs2Stamina . VerifyStaminaOverflowValueRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_overflow_value ( stamina . VerifyStaminaOverflowValueRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_overflow_value ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_overflow_value_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; verifyStaminaOverflowValueByUserId 사용자 ID를 지정하여 스태미나 오버플로우량 검증 지정된 사용자의 스태미나 오버플로우량이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 오버플로우량이 지정값 미만임 lessEqual 오버플로우량이 지정값 이하임 greater 오버플로우량이 지정값을 초과함 greaterEqual 오버플로우량이 지정값 이상임 equal 오버플로우량이 지정값과 일치함 notEqual 오버플로우량이 지정값과 일치하지 않음 value int  0 ~ 2147483646 오버플로우량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Stamina 스타미나 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . VerifyStaminaOverflowValueByUserId ( \u0026 stamina . VerifyStaminaOverflowValueByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), VerifyType : pointy . String ( \"less\" ), Value : pointy . Int32 ( 10 ), MultiplyValueSpecifyingQuantity : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\VerifyStaminaOverflowValueByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e verifyStaminaOverflowValueByUserId ( ( new VerifyStaminaOverflowValueByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withVerifyType ( \"less\" ) -\u003e withValue ( 10 ) -\u003e withMultiplyValueSpecifyingQuantity ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.VerifyStaminaOverflowValueByUserIdRequest ; import io.gs2.stamina.result.VerifyStaminaOverflowValueByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { VerifyStaminaOverflowValueByUserIdResult result = client . verifyStaminaOverflowValueByUserId ( new VerifyStaminaOverflowValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); Stamina item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . VerifyStaminaOverflowValueByUserIdResult \u003e asyncResult = null ; yield return client . VerifyStaminaOverflowValueByUserId ( new Gs2 . Gs2Stamina . Request . VerifyStaminaOverflowValueByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithVerifyType ( \"less\" ) . WithValue ( 10 ) . WithMultiplyValueSpecifyingQuantity ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . verifyStaminaOverflowValueByUserId ( new Gs2Stamina . VerifyStaminaOverflowValueByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withVerifyType ( \"less\" ) . withValue ( 10 ) . withMultiplyValueSpecifyingQuantity ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . verify_stamina_overflow_value_by_user_id ( stamina . VerifyStaminaOverflowValueByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_verify_type ( 'less' ) . with_value ( 10 ) . with_multiply_value_specifying_quantity ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.verify_stamina_overflow_value_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.verify_stamina_overflow_value_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , staminaName = \"stamina-0001\" , verifyType = \"less\" , value = 10 , multiplyValueSpecifyingQuantity = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStaminaModels 스타미나 모델 목록 취득 활성화된 스타미나 모델의 목록을 취득합니다. 각 스타미나 모델은 회복 간격, 회복량, 초기 용량, 오버플로 설정, 그리고 레벨 기반 스타미나 파라미터용 옵션 조회 테이블을 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 스타미나 모델의 리스트 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DescribeStaminaModels ( \u0026 stamina . DescribeStaminaModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DescribeStaminaModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e describeStaminaModels ( ( new DescribeStaminaModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DescribeStaminaModelsRequest ; import io.gs2.stamina.result.DescribeStaminaModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DescribeStaminaModelsResult result = client . describeStaminaModels ( new DescribeStaminaModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List StaminaModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DescribeStaminaModelsResult \u003e asyncResult = null ; yield return client . DescribeStaminaModels ( new Gs2 . Gs2Stamina . Request . DescribeStaminaModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . describeStaminaModels ( new Gs2Stamina . DescribeStaminaModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . describe_stamina_models ( stamina . DescribeStaminaModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.describe_stamina_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'stamina' ) api_result_handler = client.describe_stamina_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getStaminaModel 스타미나 모델 취득 회복 간격, 회복량, 초기 용량, 오버플로 설정, 관련 조회 테이블 이름을 포함한 지정된 스타미나 모델을 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item StaminaModel 스타미나 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetStaminaModel ( \u0026 stamina . GetStaminaModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetStaminaModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getStaminaModel ( ( new GetStaminaModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetStaminaModelRequest ; import io.gs2.stamina.result.GetStaminaModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetStaminaModelResult result = client . getStaminaModel ( new GetStaminaModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) ); StaminaModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetStaminaModelResult \u003e asyncResult = null ; yield return client . GetStaminaModel ( new Gs2 . Gs2Stamina . Request . GetStaminaModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getStaminaModel ( new Gs2Stamina . GetStaminaModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_stamina_model ( stamina . GetStaminaModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_stamina_model ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.get_stamina_model_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 스태미나 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 등록되어 있는 스태미나 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보냅니다. 내보낸 데이터에는 스태미나 모델, 스태미나 최댓값 테이블, 회복 간격 테이블, 회복량 테이블의 모든 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentStaminaMaster 활성화 가능한 스태미나 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 stamina . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.ExportMasterRequest ; import io.gs2.stamina.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentStaminaMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Stamina . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Stamina . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . export_master ( stamina . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentStaminaMaster 현재 활성화된 스태미나 모델 마스터 데이터 가져오기 사용 중인 모든 스태미나 모델, 스태미나 최댓값 테이블, 회복 간격 테이블, 회복량 테이블의 정의를 포함하여, 현재 활성화된 스태미나 모델 마스터 데이터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentStaminaMaster 현재 활성화된 스태미나 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetCurrentStaminaMaster ( \u0026 stamina . GetCurrentStaminaMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetCurrentStaminaMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getCurrentStaminaMaster ( ( new GetCurrentStaminaMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetCurrentStaminaMasterRequest ; import io.gs2.stamina.result.GetCurrentStaminaMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetCurrentStaminaMasterResult result = client . getCurrentStaminaMaster ( new GetCurrentStaminaMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentStaminaMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetCurrentStaminaMasterResult \u003e asyncResult = null ; yield return client . GetCurrentStaminaMaster ( new Gs2 . Gs2Stamina . Request . GetCurrentStaminaMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getCurrentStaminaMaster ( new Gs2Stamina . GetCurrentStaminaMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_current_stamina_master ( stamina . GetCurrentStaminaMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_current_stamina_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.get_current_stamina_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentStaminaMaster 현재 활성화된 스태미나 모델 마스터 데이터 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계로 나누어 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 가져옵니다. 가져온 URL에 마스터 데이터를 업로드합니다. UpdateCurrentStaminaMaster에 업로드로 얻은 토큰을 전달하여 실행하고, 마스터 데이터를 반영합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentStaminaMaster ( \u0026 stamina . PreUpdateCurrentStaminaMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\PreUpdateCurrentStaminaMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentStaminaMaster ( ( new PreUpdateCurrentStaminaMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.PreUpdateCurrentStaminaMasterRequest ; import io.gs2.stamina.result.PreUpdateCurrentStaminaMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { PreUpdateCurrentStaminaMasterResult result = client . preUpdateCurrentStaminaMaster ( new PreUpdateCurrentStaminaMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . PreUpdateCurrentStaminaMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentStaminaMaster ( new Gs2 . Gs2Stamina . Request . PreUpdateCurrentStaminaMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . preUpdateCurrentStaminaMaster ( new Gs2Stamina . PreUpdateCurrentStaminaMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . pre_update_current_stamina_master ( stamina . PreUpdateCurrentStaminaMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.pre_update_current_stamina_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'stamina' ) api_result_handler = client.pre_update_current_stamina_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentStaminaMaster 현재 활성화된 스태미나 모델의 마스터 데이터를 업데이트 현재 활성화된 스태미나 모델 마스터 데이터를 업데이트합니다. 대용량 마스터 데이터에 대응하기 위해 직접 업데이트 모드와 사전 업로드 모드를 모두 지원합니다. 사전 업로드 모드에서는 PreUpdate API로 취득한 업로드 토큰을 사용하여 설정을 읽어들입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentStaminaMaster 업데이트된 현재 활성화된 스태미나 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentStaminaMaster ( \u0026 stamina . UpdateCurrentStaminaMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-02-14\\\",\\n \\\"staminaModels\\\": [\\n {\\n \\\"name\\\": \\\"quest\\\",\\n \\\"metadata\\\": \\\"QUEST\\\",\\n \\\"recoverIntervalMinutes\\\": 15,\\n \\\"recoverValue\\\": 1,\\n \\\"initialCapacity\\\": 50,\\n \\\"isOverflow\\\": true,\\n \\\"maxCapacity\\\": 999,\\n \\\"maxStaminaTable\\\": {\\n \\\"name\\\": \\\"playerLevel\\\",\\n \\\"metadata\\\": \\\"PLAYER_LEVEL\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109,\\n 110,\\n 111,\\n 112,\\n 113,\\n 114,\\n 115,\\n 116,\\n 117,\\n 118,\\n 119,\\n 120,\\n 121,\\n 122,\\n 123,\\n 124,\\n 125,\\n 126,\\n 127,\\n 128,\\n 129\\n ]\\n },\\n \\\"recoverIntervalTable\\\": {\\n \\\"name\\\": \\\"staminaRecoverInterval\\\",\\n \\\"metadata\\\": \\\"STAMINA_RECOVER_INTERVAL\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 41,\\n 42,\\n 43,\\n 44,\\n 45,\\n 46,\\n 47,\\n 48,\\n 49,\\n 50,\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109,\\n 110,\\n 111,\\n 112,\\n 113,\\n 114,\\n 115,\\n 116,\\n 117,\\n 118,\\n 119\\n ]\\n },\\n \\\"recoverValueTable\\\": {\\n \\\"name\\\": \\\"staminaRecoverValue\\\",\\n \\\"metadata\\\": \\\"STAMINA_RECOVER_VALUE\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 31,\\n 32,\\n 33,\\n 34,\\n 35,\\n 36,\\n 37,\\n 38,\\n 39,\\n 40,\\n 41,\\n 42,\\n 43,\\n 44,\\n 45,\\n 46,\\n 47,\\n 48,\\n 49,\\n 50,\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109\\n ]\\n }\\n },\\n {\\n \\\"name\\\": \\\"raidBattle\\\",\\n \\\"metadata\\\": \\\"RAID_BATTLE\\\",\\n \\\"recoverIntervalMinutes\\\": 60,\\n \\\"recoverValue\\\": 1,\\n \\\"initialCapacity\\\": 10,\\n \\\"isOverflow\\\": false\\n },\\n {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"recoverIntervalMinutes\\\": 30,\\n \\\"recoverValue\\\": 3,\\n \\\"initialCapacity\\\": 100,\\n \\\"isOverflow\\\": true,\\n \\\"maxCapacity\\\": 999,\\n \\\"maxStaminaTable\\\": {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"experienceModelId\\\": \\\"special\\\",\\n \\\"values\\\": [\\n 102,\\n 104,\\n 106,\\n 108,\\n 110,\\n 112,\\n 114,\\n 116,\\n 118,\\n 120,\\n 122,\\n 124,\\n 126,\\n 128,\\n 130,\\n 132,\\n 134,\\n 136,\\n 138,\\n 140,\\n 142,\\n 144,\\n 146,\\n 148,\\n 150,\\n 152,\\n 154,\\n 156,\\n 158,\\n 160,\\n 162,\\n 164,\\n 166,\\n 168,\\n 170,\\n 172,\\n 174,\\n 176,\\n 178,\\n 180,\\n 182,\\n 184,\\n 186,\\n 188,\\n 190,\\n 192,\\n 194,\\n 196,\\n 198,\\n 200,\\n 202,\\n 204,\\n 206,\\n 208,\\n 210,\\n 212,\\n 214,\\n 216,\\n 218,\\n 220,\\n 222,\\n 224,\\n 226,\\n 228,\\n 230,\\n 232,\\n 234,\\n 236,\\n 238,\\n 240,\\n 242,\\n 244,\\n 246,\\n 248,\\n 250,\\n 252,\\n 254,\\n 256,\\n 258\\n ]\\n }\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\UpdateCurrentStaminaMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e updateCurrentStaminaMaster ( ( new UpdateCurrentStaminaMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-02-14 \\\" , \\n \\\" staminaModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest \\\" , \\n \\\" metadata \\\" : \\\" QUEST \\\" , \\n \\\" recoverIntervalMinutes \\\" : 15, \\n \\\" recoverValue \\\" : 1, \\n \\\" initialCapacity \\\" : 50, \\n \\\" isOverflow \\\" : true, \\n \\\" maxCapacity \\\" : 999, \\n \\\" maxStaminaTable \\\" : { \\n \\\" name \\\" : \\\" playerLevel \\\" , \\n \\\" metadata \\\" : \\\" PLAYER_LEVEL \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109, \\n 110, \\n 111, \\n 112, \\n 113, \\n 114, \\n 115, \\n 116, \\n 117, \\n 118, \\n 119, \\n 120, \\n 121, \\n 122, \\n 123, \\n 124, \\n 125, \\n 126, \\n 127, \\n 128, \\n 129 \\n ] \\n }, \\n \\\" recoverIntervalTable \\\" : { \\n \\\" name \\\" : \\\" staminaRecoverInterval \\\" , \\n \\\" metadata \\\" : \\\" STAMINA_RECOVER_INTERVAL \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 41, \\n 42, \\n 43, \\n 44, \\n 45, \\n 46, \\n 47, \\n 48, \\n 49, \\n 50, \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109, \\n 110, \\n 111, \\n 112, \\n 113, \\n 114, \\n 115, \\n 116, \\n 117, \\n 118, \\n 119 \\n ] \\n }, \\n \\\" recoverValueTable \\\" : { \\n \\\" name \\\" : \\\" staminaRecoverValue \\\" , \\n \\\" metadata \\\" : \\\" STAMINA_RECOVER_VALUE \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 31, \\n 32, \\n 33, \\n 34, \\n 35, \\n 36, \\n 37, \\n 38, \\n 39, \\n 40, \\n 41, \\n 42, \\n 43, \\n 44, \\n 45, \\n 46, \\n 47, \\n 48, \\n 49, \\n 50, \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109 \\n ] \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" raidBattle \\\" , \\n \\\" metadata \\\" : \\\" RAID_BATTLE \\\" , \\n \\\" recoverIntervalMinutes \\\" : 60, \\n \\\" recoverValue \\\" : 1, \\n \\\" initialCapacity \\\" : 10, \\n \\\" isOverflow \\\" : false \\n }, \\n { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" recoverIntervalMinutes \\\" : 30, \\n \\\" recoverValue \\\" : 3, \\n \\\" initialCapacity \\\" : 100, \\n \\\" isOverflow \\\" : true, \\n \\\" maxCapacity \\\" : 999, \\n \\\" maxStaminaTable \\\" : { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" experienceModelId \\\" : \\\" special \\\" , \\n \\\" values \\\" : [ \\n 102, \\n 104, \\n 106, \\n 108, \\n 110, \\n 112, \\n 114, \\n 116, \\n 118, \\n 120, \\n 122, \\n 124, \\n 126, \\n 128, \\n 130, \\n 132, \\n 134, \\n 136, \\n 138, \\n 140, \\n 142, \\n 144, \\n 146, \\n 148, \\n 150, \\n 152, \\n 154, \\n 156, \\n 158, \\n 160, \\n 162, \\n 164, \\n 166, \\n 168, \\n 170, \\n 172, \\n 174, \\n 176, \\n 178, \\n 180, \\n 182, \\n 184, \\n 186, \\n 188, \\n 190, \\n 192, \\n 194, \\n 196, \\n 198, \\n 200, \\n 202, \\n 204, \\n 206, \\n 208, \\n 210, \\n 212, \\n 214, \\n 216, \\n 218, \\n 220, \\n 222, \\n 224, \\n 226, \\n 228, \\n 230, \\n 232, \\n 234, \\n 236, \\n 238, \\n 240, \\n 242, \\n 244, \\n 246, \\n 248, \\n 250, \\n 252, \\n 254, \\n 256, \\n 258 \\n ] \\n } \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.UpdateCurrentStaminaMasterRequest ; import io.gs2.stamina.result.UpdateCurrentStaminaMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { UpdateCurrentStaminaMasterResult result = client . updateCurrentStaminaMaster ( new UpdateCurrentStaminaMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-02-14\\\",\\n \\\"staminaModels\\\": [\\n {\\n \\\"name\\\": \\\"quest\\\",\\n \\\"metadata\\\": \\\"QUEST\\\",\\n \\\"recoverIntervalMinutes\\\": 15,\\n \\\"recoverValue\\\": 1,\\n \\\"initialCapacity\\\": 50,\\n \\\"isOverflow\\\": true,\\n \\\"maxCapacity\\\": 999,\\n \\\"maxStaminaTable\\\": {\\n \\\"name\\\": \\\"playerLevel\\\",\\n \\\"metadata\\\": \\\"PLAYER_LEVEL\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109,\\n 110,\\n 111,\\n 112,\\n 113,\\n 114,\\n 115,\\n 116,\\n 117,\\n 118,\\n 119,\\n 120,\\n 121,\\n 122,\\n 123,\\n 124,\\n 125,\\n 126,\\n 127,\\n 128,\\n 129\\n ]\\n },\\n \\\"recoverIntervalTable\\\": {\\n \\\"name\\\": \\\"staminaRecoverInterval\\\",\\n \\\"metadata\\\": \\\"STAMINA_RECOVER_INTERVAL\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 41,\\n 42,\\n 43,\\n 44,\\n 45,\\n 46,\\n 47,\\n 48,\\n 49,\\n 50,\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109,\\n 110,\\n 111,\\n 112,\\n 113,\\n 114,\\n 115,\\n 116,\\n 117,\\n 118,\\n 119\\n ]\\n },\\n \\\"recoverValueTable\\\": {\\n \\\"name\\\": \\\"staminaRecoverValue\\\",\\n \\\"metadata\\\": \\\"STAMINA_RECOVER_VALUE\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 31,\\n 32,\\n 33,\\n 34,\\n 35,\\n 36,\\n 37,\\n 38,\\n 39,\\n 40,\\n 41,\\n 42,\\n 43,\\n 44,\\n 45,\\n 46,\\n 47,\\n 48,\\n 49,\\n 50,\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109\\n ]\\n }\\n },\\n {\\n \\\"name\\\": \\\"raidBattle\\\",\\n \\\"metadata\\\": \\\"RAID_BATTLE\\\",\\n \\\"recoverIntervalMinutes\\\": 60,\\n \\\"recoverValue\\\": 1,\\n \\\"initialCapacity\\\": 10,\\n \\\"isOverflow\\\": false\\n },\\n {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"recoverIntervalMinutes\\\": 30,\\n \\\"recoverValue\\\": 3,\\n \\\"initialCapacity\\\": 100,\\n \\\"isOverflow\\\": true,\\n \\\"maxCapacity\\\": 999,\\n \\\"maxStaminaTable\\\": {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"experienceModelId\\\": \\\"special\\\",\\n \\\"values\\\": [\\n 102,\\n 104,\\n 106,\\n 108,\\n 110,\\n 112,\\n 114,\\n 116,\\n 118,\\n 120,\\n 122,\\n 124,\\n 126,\\n 128,\\n 130,\\n 132,\\n 134,\\n 136,\\n 138,\\n 140,\\n 142,\\n 144,\\n 146,\\n 148,\\n 150,\\n 152,\\n 154,\\n 156,\\n 158,\\n 160,\\n 162,\\n 164,\\n 166,\\n 168,\\n 170,\\n 172,\\n 174,\\n 176,\\n 178,\\n 180,\\n 182,\\n 184,\\n 186,\\n 188,\\n 190,\\n 192,\\n 194,\\n 196,\\n 198,\\n 200,\\n 202,\\n 204,\\n 206,\\n 208,\\n 210,\\n 212,\\n 214,\\n 216,\\n 218,\\n 220,\\n 222,\\n 224,\\n 226,\\n 228,\\n 230,\\n 232,\\n 234,\\n 236,\\n 238,\\n 240,\\n 242,\\n 244,\\n 246,\\n 248,\\n 250,\\n 252,\\n 254,\\n 256,\\n 258\\n ]\\n }\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentStaminaMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . UpdateCurrentStaminaMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentStaminaMaster ( new Gs2 . Gs2Stamina . Request . UpdateCurrentStaminaMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-02-14\\\",\\n \\\"staminaModels\\\": [\\n {\\n \\\"name\\\": \\\"quest\\\",\\n \\\"metadata\\\": \\\"QUEST\\\",\\n \\\"recoverIntervalMinutes\\\": 15,\\n \\\"recoverValue\\\": 1,\\n \\\"initialCapacity\\\": 50,\\n \\\"isOverflow\\\": true,\\n \\\"maxCapacity\\\": 999,\\n \\\"maxStaminaTable\\\": {\\n \\\"name\\\": \\\"playerLevel\\\",\\n \\\"metadata\\\": \\\"PLAYER_LEVEL\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109,\\n 110,\\n 111,\\n 112,\\n 113,\\n 114,\\n 115,\\n 116,\\n 117,\\n 118,\\n 119,\\n 120,\\n 121,\\n 122,\\n 123,\\n 124,\\n 125,\\n 126,\\n 127,\\n 128,\\n 129\\n ]\\n },\\n \\\"recoverIntervalTable\\\": {\\n \\\"name\\\": \\\"staminaRecoverInterval\\\",\\n \\\"metadata\\\": \\\"STAMINA_RECOVER_INTERVAL\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 41,\\n 42,\\n 43,\\n 44,\\n 45,\\n 46,\\n 47,\\n 48,\\n 49,\\n 50,\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109,\\n 110,\\n 111,\\n 112,\\n 113,\\n 114,\\n 115,\\n 116,\\n 117,\\n 118,\\n 119\\n ]\\n },\\n \\\"recoverValueTable\\\": {\\n \\\"name\\\": \\\"staminaRecoverValue\\\",\\n \\\"metadata\\\": \\\"STAMINA_RECOVER_VALUE\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 31,\\n 32,\\n 33,\\n 34,\\n 35,\\n 36,\\n 37,\\n 38,\\n 39,\\n 40,\\n 41,\\n 42,\\n 43,\\n 44,\\n 45,\\n 46,\\n 47,\\n 48,\\n 49,\\n 50,\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109\\n ]\\n }\\n },\\n {\\n \\\"name\\\": \\\"raidBattle\\\",\\n \\\"metadata\\\": \\\"RAID_BATTLE\\\",\\n \\\"recoverIntervalMinutes\\\": 60,\\n \\\"recoverValue\\\": 1,\\n \\\"initialCapacity\\\": 10,\\n \\\"isOverflow\\\": false\\n },\\n {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"recoverIntervalMinutes\\\": 30,\\n \\\"recoverValue\\\": 3,\\n \\\"initialCapacity\\\": 100,\\n \\\"isOverflow\\\": true,\\n \\\"maxCapacity\\\": 999,\\n \\\"maxStaminaTable\\\": {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"experienceModelId\\\": \\\"special\\\",\\n \\\"values\\\": [\\n 102,\\n 104,\\n 106,\\n 108,\\n 110,\\n 112,\\n 114,\\n 116,\\n 118,\\n 120,\\n 122,\\n 124,\\n 126,\\n 128,\\n 130,\\n 132,\\n 134,\\n 136,\\n 138,\\n 140,\\n 142,\\n 144,\\n 146,\\n 148,\\n 150,\\n 152,\\n 154,\\n 156,\\n 158,\\n 160,\\n 162,\\n 164,\\n 166,\\n 168,\\n 170,\\n 172,\\n 174,\\n 176,\\n 178,\\n 180,\\n 182,\\n 184,\\n 186,\\n 188,\\n 190,\\n 192,\\n 194,\\n 196,\\n 198,\\n 200,\\n 202,\\n 204,\\n 206,\\n 208,\\n 210,\\n 212,\\n 214,\\n 216,\\n 218,\\n 220,\\n 222,\\n 224,\\n 226,\\n 228,\\n 230,\\n 232,\\n 234,\\n 236,\\n 238,\\n 240,\\n 242,\\n 244,\\n 246,\\n 248,\\n 250,\\n 252,\\n 254,\\n 256,\\n 258\\n ]\\n }\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . updateCurrentStaminaMaster ( new Gs2Stamina . UpdateCurrentStaminaMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-02-14\\\",\\n \\\"staminaModels\\\": [\\n {\\n \\\"name\\\": \\\"quest\\\",\\n \\\"metadata\\\": \\\"QUEST\\\",\\n \\\"recoverIntervalMinutes\\\": 15,\\n \\\"recoverValue\\\": 1,\\n \\\"initialCapacity\\\": 50,\\n \\\"isOverflow\\\": true,\\n \\\"maxCapacity\\\": 999,\\n \\\"maxStaminaTable\\\": {\\n \\\"name\\\": \\\"playerLevel\\\",\\n \\\"metadata\\\": \\\"PLAYER_LEVEL\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109,\\n 110,\\n 111,\\n 112,\\n 113,\\n 114,\\n 115,\\n 116,\\n 117,\\n 118,\\n 119,\\n 120,\\n 121,\\n 122,\\n 123,\\n 124,\\n 125,\\n 126,\\n 127,\\n 128,\\n 129\\n ]\\n },\\n \\\"recoverIntervalTable\\\": {\\n \\\"name\\\": \\\"staminaRecoverInterval\\\",\\n \\\"metadata\\\": \\\"STAMINA_RECOVER_INTERVAL\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 41,\\n 42,\\n 43,\\n 44,\\n 45,\\n 46,\\n 47,\\n 48,\\n 49,\\n 50,\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109,\\n 110,\\n 111,\\n 112,\\n 113,\\n 114,\\n 115,\\n 116,\\n 117,\\n 118,\\n 119\\n ]\\n },\\n \\\"recoverValueTable\\\": {\\n \\\"name\\\": \\\"staminaRecoverValue\\\",\\n \\\"metadata\\\": \\\"STAMINA_RECOVER_VALUE\\\",\\n \\\"experienceModelId\\\": \\\"playerLevel\\\",\\n \\\"values\\\": [\\n 31,\\n 32,\\n 33,\\n 34,\\n 35,\\n 36,\\n 37,\\n 38,\\n 39,\\n 40,\\n 41,\\n 42,\\n 43,\\n 44,\\n 45,\\n 46,\\n 47,\\n 48,\\n 49,\\n 50,\\n 51,\\n 52,\\n 53,\\n 54,\\n 55,\\n 56,\\n 57,\\n 58,\\n 59,\\n 60,\\n 61,\\n 62,\\n 63,\\n 64,\\n 65,\\n 66,\\n 67,\\n 68,\\n 69,\\n 70,\\n 71,\\n 72,\\n 73,\\n 74,\\n 75,\\n 76,\\n 77,\\n 78,\\n 79,\\n 80,\\n 81,\\n 82,\\n 83,\\n 84,\\n 85,\\n 86,\\n 87,\\n 88,\\n 89,\\n 90,\\n 91,\\n 92,\\n 93,\\n 94,\\n 95,\\n 96,\\n 97,\\n 98,\\n 99,\\n 100,\\n 101,\\n 102,\\n 103,\\n 104,\\n 105,\\n 106,\\n 107,\\n 108,\\n 109\\n ]\\n }\\n },\\n {\\n \\\"name\\\": \\\"raidBattle\\\",\\n \\\"metadata\\\": \\\"RAID_BATTLE\\\",\\n \\\"recoverIntervalMinutes\\\": 60,\\n \\\"recoverValue\\\": 1,\\n \\\"initialCapacity\\\": 10,\\n \\\"isOverflow\\\": false\\n },\\n {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"recoverIntervalMinutes\\\": 30,\\n \\\"recoverValue\\\": 3,\\n \\\"initialCapacity\\\": 100,\\n \\\"isOverflow\\\": true,\\n \\\"maxCapacity\\\": 999,\\n \\\"maxStaminaTable\\\": {\\n \\\"name\\\": \\\"special\\\",\\n \\\"metadata\\\": \\\"SPECIAL\\\",\\n \\\"experienceModelId\\\": \\\"special\\\",\\n \\\"values\\\": [\\n 102,\\n 104,\\n 106,\\n 108,\\n 110,\\n 112,\\n 114,\\n 116,\\n 118,\\n 120,\\n 122,\\n 124,\\n 126,\\n 128,\\n 130,\\n 132,\\n 134,\\n 136,\\n 138,\\n 140,\\n 142,\\n 144,\\n 146,\\n 148,\\n 150,\\n 152,\\n 154,\\n 156,\\n 158,\\n 160,\\n 162,\\n 164,\\n 166,\\n 168,\\n 170,\\n 172,\\n 174,\\n 176,\\n 178,\\n 180,\\n 182,\\n 184,\\n 186,\\n 188,\\n 190,\\n 192,\\n 194,\\n 196,\\n 198,\\n 200,\\n 202,\\n 204,\\n 206,\\n 208,\\n 210,\\n 212,\\n 214,\\n 216,\\n 218,\\n 220,\\n 222,\\n 224,\\n 226,\\n 228,\\n 230,\\n 232,\\n 234,\\n 236,\\n 238,\\n 240,\\n 242,\\n 244,\\n 246,\\n 248,\\n 250,\\n 252,\\n 254,\\n 256,\\n 258\\n ]\\n }\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . update_current_stamina_master ( stamina . UpdateCurrentStaminaMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-02-14\", \\n \"staminaModels\": [ \\n { \\n \"name\": \"quest\", \\n \"metadata\": \"QUEST\", \\n \"recoverIntervalMinutes\": 15, \\n \"recoverValue\": 1, \\n \"initialCapacity\": 50, \\n \"isOverflow\": true, \\n \"maxCapacity\": 999, \\n \"maxStaminaTable\": { \\n \"name\": \"playerLevel\", \\n \"metadata\": \"PLAYER_LEVEL\", \\n \"experienceModelId\": \"playerLevel\", \\n \"values\": [ \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109, \\n 110, \\n 111, \\n 112, \\n 113, \\n 114, \\n 115, \\n 116, \\n 117, \\n 118, \\n 119, \\n 120, \\n 121, \\n 122, \\n 123, \\n 124, \\n 125, \\n 126, \\n 127, \\n 128, \\n 129 \\n ] \\n }, \\n \"recoverIntervalTable\": { \\n \"name\": \"staminaRecoverInterval\", \\n \"metadata\": \"STAMINA_RECOVER_INTERVAL\", \\n \"experienceModelId\": \"playerLevel\", \\n \"values\": [ \\n 41, \\n 42, \\n 43, \\n 44, \\n 45, \\n 46, \\n 47, \\n 48, \\n 49, \\n 50, \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109, \\n 110, \\n 111, \\n 112, \\n 113, \\n 114, \\n 115, \\n 116, \\n 117, \\n 118, \\n 119 \\n ] \\n }, \\n \"recoverValueTable\": { \\n \"name\": \"staminaRecoverValue\", \\n \"metadata\": \"STAMINA_RECOVER_VALUE\", \\n \"experienceModelId\": \"playerLevel\", \\n \"values\": [ \\n 31, \\n 32, \\n 33, \\n 34, \\n 35, \\n 36, \\n 37, \\n 38, \\n 39, \\n 40, \\n 41, \\n 42, \\n 43, \\n 44, \\n 45, \\n 46, \\n 47, \\n 48, \\n 49, \\n 50, \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109 \\n ] \\n } \\n }, \\n { \\n \"name\": \"raidBattle\", \\n \"metadata\": \"RAID_BATTLE\", \\n \"recoverIntervalMinutes\": 60, \\n \"recoverValue\": 1, \\n \"initialCapacity\": 10, \\n \"isOverflow\": false \\n }, \\n { \\n \"name\": \"special\", \\n \"metadata\": \"SPECIAL\", \\n \"recoverIntervalMinutes\": 30, \\n \"recoverValue\": 3, \\n \"initialCapacity\": 100, \\n \"isOverflow\": true, \\n \"maxCapacity\": 999, \\n \"maxStaminaTable\": { \\n \"name\": \"special\", \\n \"metadata\": \"SPECIAL\", \\n \"experienceModelId\": \"special\", \\n \"values\": [ \\n 102, \\n 104, \\n 106, \\n 108, \\n 110, \\n 112, \\n 114, \\n 116, \\n 118, \\n 120, \\n 122, \\n 124, \\n 126, \\n 128, \\n 130, \\n 132, \\n 134, \\n 136, \\n 138, \\n 140, \\n 142, \\n 144, \\n 146, \\n 148, \\n 150, \\n 152, \\n 154, \\n 156, \\n 158, \\n 160, \\n 162, \\n 164, \\n 166, \\n 168, \\n 170, \\n 172, \\n 174, \\n 176, \\n 178, \\n 180, \\n 182, \\n 184, \\n 186, \\n 188, \\n 190, \\n 192, \\n 194, \\n 196, \\n 198, \\n 200, \\n 202, \\n 204, \\n 206, \\n 208, \\n 210, \\n 212, \\n 214, \\n 216, \\n 218, \\n 220, \\n 222, \\n 224, \\n 226, \\n 228, \\n 230, \\n 232, \\n 234, \\n 236, \\n 238, \\n 240, \\n 242, \\n 244, \\n 246, \\n 248, \\n 250, \\n 252, \\n 254, \\n 256, \\n 258 \\n ] \\n } \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.update_current_stamina_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-02-14 \\\" , \\n \\\" staminaModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest \\\" , \\n \\\" metadata \\\" : \\\" QUEST \\\" , \\n \\\" recoverIntervalMinutes \\\" : 15, \\n \\\" recoverValue \\\" : 1, \\n \\\" initialCapacity \\\" : 50, \\n \\\" isOverflow \\\" : true, \\n \\\" maxCapacity \\\" : 999, \\n \\\" maxStaminaTable \\\" : { \\n \\\" name \\\" : \\\" playerLevel \\\" , \\n \\\" metadata \\\" : \\\" PLAYER_LEVEL \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109, \\n 110, \\n 111, \\n 112, \\n 113, \\n 114, \\n 115, \\n 116, \\n 117, \\n 118, \\n 119, \\n 120, \\n 121, \\n 122, \\n 123, \\n 124, \\n 125, \\n 126, \\n 127, \\n 128, \\n 129 \\n ] \\n }, \\n \\\" recoverIntervalTable \\\" : { \\n \\\" name \\\" : \\\" staminaRecoverInterval \\\" , \\n \\\" metadata \\\" : \\\" STAMINA_RECOVER_INTERVAL \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 41, \\n 42, \\n 43, \\n 44, \\n 45, \\n 46, \\n 47, \\n 48, \\n 49, \\n 50, \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109, \\n 110, \\n 111, \\n 112, \\n 113, \\n 114, \\n 115, \\n 116, \\n 117, \\n 118, \\n 119 \\n ] \\n }, \\n \\\" recoverValueTable \\\" : { \\n \\\" name \\\" : \\\" staminaRecoverValue \\\" , \\n \\\" metadata \\\" : \\\" STAMINA_RECOVER_VALUE \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 31, \\n 32, \\n 33, \\n 34, \\n 35, \\n 36, \\n 37, \\n 38, \\n 39, \\n 40, \\n 41, \\n 42, \\n 43, \\n 44, \\n 45, \\n 46, \\n 47, \\n 48, \\n 49, \\n 50, \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109 \\n ] \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" raidBattle \\\" , \\n \\\" metadata \\\" : \\\" RAID_BATTLE \\\" , \\n \\\" recoverIntervalMinutes \\\" : 60, \\n \\\" recoverValue \\\" : 1, \\n \\\" initialCapacity \\\" : 10, \\n \\\" isOverflow \\\" : false \\n }, \\n { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" recoverIntervalMinutes \\\" : 30, \\n \\\" recoverValue \\\" : 3, \\n \\\" initialCapacity \\\" : 100, \\n \\\" isOverflow \\\" : true, \\n \\\" maxCapacity \\\" : 999, \\n \\\" maxStaminaTable \\\" : { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" experienceModelId \\\" : \\\" special \\\" , \\n \\\" values \\\" : [ \\n 102, \\n 104, \\n 106, \\n 108, \\n 110, \\n 112, \\n 114, \\n 116, \\n 118, \\n 120, \\n 122, \\n 124, \\n 126, \\n 128, \\n 130, \\n 132, \\n 134, \\n 136, \\n 138, \\n 140, \\n 142, \\n 144, \\n 146, \\n 148, \\n 150, \\n 152, \\n 154, \\n 156, \\n 158, \\n 160, \\n 162, \\n 164, \\n 166, \\n 168, \\n 170, \\n 172, \\n 174, \\n 176, \\n 178, \\n 180, \\n 182, \\n 184, \\n 186, \\n 188, \\n 190, \\n 192, \\n 194, \\n 196, \\n 198, \\n 200, \\n 202, \\n 204, \\n 206, \\n 208, \\n 210, \\n 212, \\n 214, \\n 216, \\n 218, \\n 220, \\n 222, \\n 224, \\n 226, \\n 228, \\n 230, \\n 232, \\n 234, \\n 236, \\n 238, \\n 240, \\n 242, \\n 244, \\n 246, \\n 248, \\n 250, \\n 252, \\n 254, \\n 256, \\n 258 \\n ] \\n } \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.update_current_stamina_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-02-14 \\\" , \\n \\\" staminaModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" quest \\\" , \\n \\\" metadata \\\" : \\\" QUEST \\\" , \\n \\\" recoverIntervalMinutes \\\" : 15, \\n \\\" recoverValue \\\" : 1, \\n \\\" initialCapacity \\\" : 50, \\n \\\" isOverflow \\\" : true, \\n \\\" maxCapacity \\\" : 999, \\n \\\" maxStaminaTable \\\" : { \\n \\\" name \\\" : \\\" playerLevel \\\" , \\n \\\" metadata \\\" : \\\" PLAYER_LEVEL \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109, \\n 110, \\n 111, \\n 112, \\n 113, \\n 114, \\n 115, \\n 116, \\n 117, \\n 118, \\n 119, \\n 120, \\n 121, \\n 122, \\n 123, \\n 124, \\n 125, \\n 126, \\n 127, \\n 128, \\n 129 \\n ] \\n }, \\n \\\" recoverIntervalTable \\\" : { \\n \\\" name \\\" : \\\" staminaRecoverInterval \\\" , \\n \\\" metadata \\\" : \\\" STAMINA_RECOVER_INTERVAL \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 41, \\n 42, \\n 43, \\n 44, \\n 45, \\n 46, \\n 47, \\n 48, \\n 49, \\n 50, \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109, \\n 110, \\n 111, \\n 112, \\n 113, \\n 114, \\n 115, \\n 116, \\n 117, \\n 118, \\n 119 \\n ] \\n }, \\n \\\" recoverValueTable \\\" : { \\n \\\" name \\\" : \\\" staminaRecoverValue \\\" , \\n \\\" metadata \\\" : \\\" STAMINA_RECOVER_VALUE \\\" , \\n \\\" experienceModelId \\\" : \\\" playerLevel \\\" , \\n \\\" values \\\" : [ \\n 31, \\n 32, \\n 33, \\n 34, \\n 35, \\n 36, \\n 37, \\n 38, \\n 39, \\n 40, \\n 41, \\n 42, \\n 43, \\n 44, \\n 45, \\n 46, \\n 47, \\n 48, \\n 49, \\n 50, \\n 51, \\n 52, \\n 53, \\n 54, \\n 55, \\n 56, \\n 57, \\n 58, \\n 59, \\n 60, \\n 61, \\n 62, \\n 63, \\n 64, \\n 65, \\n 66, \\n 67, \\n 68, \\n 69, \\n 70, \\n 71, \\n 72, \\n 73, \\n 74, \\n 75, \\n 76, \\n 77, \\n 78, \\n 79, \\n 80, \\n 81, \\n 82, \\n 83, \\n 84, \\n 85, \\n 86, \\n 87, \\n 88, \\n 89, \\n 90, \\n 91, \\n 92, \\n 93, \\n 94, \\n 95, \\n 96, \\n 97, \\n 98, \\n 99, \\n 100, \\n 101, \\n 102, \\n 103, \\n 104, \\n 105, \\n 106, \\n 107, \\n 108, \\n 109 \\n ] \\n } \\n }, \\n { \\n \\\" name \\\" : \\\" raidBattle \\\" , \\n \\\" metadata \\\" : \\\" RAID_BATTLE \\\" , \\n \\\" recoverIntervalMinutes \\\" : 60, \\n \\\" recoverValue \\\" : 1, \\n \\\" initialCapacity \\\" : 10, \\n \\\" isOverflow \\\" : false \\n }, \\n { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" recoverIntervalMinutes \\\" : 30, \\n \\\" recoverValue \\\" : 3, \\n \\\" initialCapacity \\\" : 100, \\n \\\" isOverflow \\\" : true, \\n \\\" maxCapacity \\\" : 999, \\n \\\" maxStaminaTable \\\" : { \\n \\\" name \\\" : \\\" special \\\" , \\n \\\" metadata \\\" : \\\" SPECIAL \\\" , \\n \\\" experienceModelId \\\" : \\\" special \\\" , \\n \\\" values \\\" : [ \\n 102, \\n 104, \\n 106, \\n 108, \\n 110, \\n 112, \\n 114, \\n 116, \\n 118, \\n 120, \\n 122, \\n 124, \\n 126, \\n 128, \\n 130, \\n 132, \\n 134, \\n 136, \\n 138, \\n 140, \\n 142, \\n 144, \\n 146, \\n 148, \\n 150, \\n 152, \\n 154, \\n 156, \\n 158, \\n 160, \\n 162, \\n 164, \\n 166, \\n 168, \\n 170, \\n 172, \\n 174, \\n 176, \\n 178, \\n 180, \\n 182, \\n 184, \\n 186, \\n 188, \\n 190, \\n 192, \\n 194, \\n 196, \\n 198, \\n 200, \\n 202, \\n 204, \\n 206, \\n 208, \\n 210, \\n 212, \\n 214, \\n 216, \\n 218, \\n 220, \\n 222, \\n 224, \\n 226, \\n 228, \\n 230, \\n 232, \\n 234, \\n 236, \\n 238, \\n 240, \\n 242, \\n 244, \\n 246, \\n 248, \\n 250, \\n 252, \\n 254, \\n 256, \\n 258 \\n ] \\n } \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentStaminaMasterFromGitHub 현재 활성화된 스태미나 모델의 마스터 데이터를 GitHub에서 업데이트 지정된 체크아웃 설정을 사용하여 GitHub 리포지토리에서 마스터 데이터를 체크아웃하고, 현재 활성화된 스태미나 모델 마스터 데이터를 업데이트합니다. GitHub와의 인증에는 키 서비스를 통해 API 키가 복호화되어 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentStaminaMaster 업데이트된 현재 활성화된 스태미나 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentStaminaMasterFromGitHub ( \u0026 stamina . UpdateCurrentStaminaMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 stamina . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\UpdateCurrentStaminaMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e updateCurrentStaminaMasterFromGitHub ( ( new UpdateCurrentStaminaMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.UpdateCurrentStaminaMasterFromGitHubRequest ; import io.gs2.stamina.result.UpdateCurrentStaminaMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { UpdateCurrentStaminaMasterFromGitHubResult result = client . updateCurrentStaminaMasterFromGitHub ( new UpdateCurrentStaminaMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentStaminaMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . UpdateCurrentStaminaMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentStaminaMasterFromGitHub ( new Gs2 . Gs2Stamina . Request . UpdateCurrentStaminaMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Stamina . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . updateCurrentStaminaMasterFromGitHub ( new Gs2Stamina . UpdateCurrentStaminaMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Stamina . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . update_current_stamina_master_from_git_hub ( stamina . UpdateCurrentStaminaMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( stamina . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.update_current_stamina_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.update_current_stamina_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStaminaModelMasters 스태미나 모델 마스터 목록 가져오기 스태미나 모델 마스터의 페이지네이션 리스트를 가져옵니다. 이름의 접두사로 필터링할 수 있습니다. 스태미나 모델 마스터는 회복 간격, 회복량, 초기 용량, 오버플로우 설정, 선택적 조회 테이블 연관 정보를 정의합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 스태미나 모델 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스태미나 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DescribeStaminaModelMasters ( \u0026 stamina . DescribeStaminaModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DescribeStaminaModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e describeStaminaModelMasters ( ( new DescribeStaminaModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DescribeStaminaModelMastersRequest ; import io.gs2.stamina.result.DescribeStaminaModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DescribeStaminaModelMastersResult result = client . describeStaminaModelMasters ( new DescribeStaminaModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List StaminaModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DescribeStaminaModelMastersResult \u003e asyncResult = null ; yield return client . DescribeStaminaModelMasters ( new Gs2 . Gs2Stamina . Request . DescribeStaminaModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . describeStaminaModelMasters ( new Gs2Stamina . DescribeStaminaModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . describe_stamina_model_masters ( stamina . DescribeStaminaModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.describe_stamina_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'stamina' ) api_result_handler = client.describe_stamina_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createStaminaModelMaster 스태미나 모델 마스터 신규 생성 회복 간격(분), 회복량, 초기 용량, 오버플로우 모드 설정, 최대 용량, 그리고 레벨 기반 파라미터 스케일링을 위한 스태미나 최댓값 테이블, 회복 간격 테이블, 회복량 테이블에 대한 선택적 연관 정보를 가진 새로운 스태미나 모델 마스터를 생성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. recoverIntervalMinutes int  0 ~ 2147483646 회복 간격(분) 스태미나 회복 틱의 간격(분 단위)입니다. 이 간격이 경과할 때마다 플레이어의 스태미나가 회복량만큼 증가합니다. RecoverIntervalTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 0으로 설정하면 시간 기반 자동 회복이 비활성화됩니다. recoverValue int 1 0 ~ 2147483646 회복량 회복 틱마다 회복되는 스태미나의 양입니다. 회복 간격이 경과할 때마다 최대값에 도달할 때까지 이 값만큼 스태미나가 증가합니다. RecoverValueTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 기본값은 1입니다. initialCapacity int  0 ~ 2147483646 최대값의 초기값 모든 플레이어에 대한 기본 스태미나 최대값입니다. 오버플로우가 비활성화된 경우, 사용자별 최대값의 하한으로 작용합니다. MaxStaminaTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. isOverflow bool  오버플로우 가능 여부 아이템 사용 등의 수단으로 스태미나가 초기 최대값을 초과할 수 있는지 여부입니다. 활성화된 경우, 스태미나는 initialCapacity를 초과하여 maxCapacity까지 설정할 수 있습니다. 자연 회복은 일반적인 최대값에서 정지합니다. 비활성화된 경우, 사용자별 최대값은 initialCapacity 이상으로 제한됩니다. maxCapacity int {isOverflow} == true ※ 0 ~ 2147483646 오버플로우 시 최대값 오버플로우 활성화 시 스태미나의 절대 상한값입니다. 오버플로우 상태에서도 스태미나는 이 값을 초과할 수 없습니다. isOverflow가 true인 경우에만 표시됩니다. ※ isOverflow이(가) true 이면 필수 maxStaminaTableName string ~ 128자 스태미나 최대값 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 스태미나 최대값을 동적으로 결정하는 MaxStaminaTable의 이름입니다. 설정 시, 플레이어의 최대 스태미나는 현재 랭크 인덱스로 테이블에서 참조되며, initialCapacity를 오버라이드합니다. recoverIntervalTableName string ~ 128자 회복 간격 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 회복 간격을 동적으로 결정하는 RecoverIntervalTable의 이름입니다. 설정 시, 플레이어의 회복 간격은 테이블에서 참조되며, recoverIntervalMinutes를 오버라이드합니다. recoverValueTableName string ~ 128자 회복량 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 회복량을 동적으로 결정하는 RecoverValueTable의 이름입니다. 설정 시, 플레이어의 회복량은 테이블에서 참조되며, recoverValue를 오버라이드합니다. Result 타입 설명 item StaminaModelMaster 생성한 스태미나 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CreateStaminaModelMaster ( \u0026 stamina . CreateStaminaModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"stamina-0001\" ), Description : nil , Metadata : nil , RecoverIntervalMinutes : pointy . Int32 ( 15 ), RecoverValue : nil , InitialCapacity : pointy . Int32 ( 50 ), IsOverflow : pointy . Bool ( false ), MaxCapacity : nil , MaxStaminaTableName : pointy . String ( \"maxStaminaTable-0001\" ), RecoverIntervalTableName : pointy . String ( \"recoverIntervalTable-0001\" ), RecoverValueTableName : pointy . String ( \"recoverValueTable-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CreateStaminaModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e createStaminaModelMaster ( ( new CreateStaminaModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"stamina-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withRecoverIntervalMinutes ( 15 ) -\u003e withRecoverValue ( null ) -\u003e withInitialCapacity ( 50 ) -\u003e withIsOverflow ( false ) -\u003e withMaxCapacity ( null ) -\u003e withMaxStaminaTableName ( \"maxStaminaTable-0001\" ) -\u003e withRecoverIntervalTableName ( \"recoverIntervalTable-0001\" ) -\u003e withRecoverValueTableName ( \"recoverValueTable-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CreateStaminaModelMasterRequest ; import io.gs2.stamina.result.CreateStaminaModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CreateStaminaModelMasterResult result = client . createStaminaModelMaster ( new CreateStaminaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"stamina-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withRecoverIntervalMinutes ( 15 ) . withRecoverValue ( null ) . withInitialCapacity ( 50 ) . withIsOverflow ( false ) . withMaxCapacity ( null ) . withMaxStaminaTableName ( \"maxStaminaTable-0001\" ) . withRecoverIntervalTableName ( \"recoverIntervalTable-0001\" ) . withRecoverValueTableName ( \"recoverValueTable-0001\" ) ); StaminaModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CreateStaminaModelMasterResult \u003e asyncResult = null ; yield return client . CreateStaminaModelMaster ( new Gs2 . Gs2Stamina . Request . CreateStaminaModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"stamina-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithRecoverIntervalMinutes ( 15 ) . WithRecoverValue ( null ) . WithInitialCapacity ( 50 ) . WithIsOverflow ( false ) . WithMaxCapacity ( null ) . WithMaxStaminaTableName ( \"maxStaminaTable-0001\" ) . WithRecoverIntervalTableName ( \"recoverIntervalTable-0001\" ) . WithRecoverValueTableName ( \"recoverValueTable-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . createStaminaModelMaster ( new Gs2Stamina . CreateStaminaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"stamina-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withRecoverIntervalMinutes ( 15 ) . withRecoverValue ( null ) . withInitialCapacity ( 50 ) . withIsOverflow ( false ) . withMaxCapacity ( null ) . withMaxStaminaTableName ( \"maxStaminaTable-0001\" ) . withRecoverIntervalTableName ( \"recoverIntervalTable-0001\" ) . withRecoverValueTableName ( \"recoverValueTable-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . create_stamina_model_master ( stamina . CreateStaminaModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'stamina-0001' ) . with_description ( None ) . with_metadata ( None ) . with_recover_interval_minutes ( 15 ) . with_recover_value ( None ) . with_initial_capacity ( 50 ) . with_is_overflow ( False ) . with_max_capacity ( None ) . with_max_stamina_table_name ( 'maxStaminaTable-0001' ) . with_recover_interval_table_name ( 'recover_interval_table-0001' ) . with_recover_value_table_name ( 'recoverValueTable-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.create_stamina_model_master ({ namespaceName = \"namespace-0001\" , name = \"stamina-0001\" , description = nil , metadata = nil , recoverIntervalMinutes = 15 , recoverValue = nil , initialCapacity = 50 , isOverflow = false , maxCapacity = nil , maxStaminaTableName = \"maxStaminaTable-0001\" , recoverIntervalTableName = \"recoverIntervalTable-0001\" , recoverValueTableName = \"recoverValueTable-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.create_stamina_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"stamina-0001\" , description = nil , metadata = nil , recoverIntervalMinutes = 15 , recoverValue = nil , initialCapacity = 50 , isOverflow = false , maxCapacity = nil , maxStaminaTableName = \"maxStaminaTable-0001\" , recoverIntervalTableName = \"recoverIntervalTable-0001\" , recoverValueTableName = \"recoverValueTable-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStaminaModelMaster 스태미나 모델 마스터 가져오기 회복 설정, 용량 설정, 오버플로우 모드, 연관된 조회 테이블 이름을 포함하여, 지정된 스태미나 모델 마스터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item StaminaModelMaster 스태미나 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetStaminaModelMaster ( \u0026 stamina . GetStaminaModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetStaminaModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getStaminaModelMaster ( ( new GetStaminaModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetStaminaModelMasterRequest ; import io.gs2.stamina.result.GetStaminaModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetStaminaModelMasterResult result = client . getStaminaModelMaster ( new GetStaminaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) ); StaminaModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetStaminaModelMasterResult \u003e asyncResult = null ; yield return client . GetStaminaModelMaster ( new Gs2 . Gs2Stamina . Request . GetStaminaModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getStaminaModelMaster ( new Gs2Stamina . GetStaminaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_stamina_model_master ( stamina . GetStaminaModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_stamina_model_master ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.get_stamina_model_master_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateStaminaModelMaster 스태미나 모델 마스터 갱신 지정된 스태미나 모델 마스터의 설명, 메타데이터, 회복 간격, 회복량, 초기 용량, 오버플로우 설정, 최대 용량, 조회 테이블 연관 정보를 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. recoverIntervalMinutes int  0 ~ 2147483646 회복 간격(분) 스태미나 회복 틱의 간격(분 단위)입니다. 이 간격이 경과할 때마다 플레이어의 스태미나가 회복량만큼 증가합니다. RecoverIntervalTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 0으로 설정하면 시간 기반 자동 회복이 비활성화됩니다. recoverValue int 1 0 ~ 2147483646 회복량 회복 틱마다 회복되는 스태미나의 양입니다. 회복 간격이 경과할 때마다 최대값에 도달할 때까지 이 값만큼 스태미나가 증가합니다. RecoverValueTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 기본값은 1입니다. initialCapacity int  0 ~ 2147483646 최대값의 초기값 모든 플레이어에 대한 기본 스태미나 최대값입니다. 오버플로우가 비활성화된 경우, 사용자별 최대값의 하한으로 작용합니다. MaxStaminaTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. isOverflow bool  오버플로우 가능 여부 아이템 사용 등의 수단으로 스태미나가 초기 최대값을 초과할 수 있는지 여부입니다. 활성화된 경우, 스태미나는 initialCapacity를 초과하여 maxCapacity까지 설정할 수 있습니다. 자연 회복은 일반적인 최대값에서 정지합니다. 비활성화된 경우, 사용자별 최대값은 initialCapacity 이상으로 제한됩니다. maxCapacity int {isOverflow} == true ※ 0 ~ 2147483646 오버플로우 시 최대값 오버플로우 활성화 시 스태미나의 절대 상한값입니다. 오버플로우 상태에서도 스태미나는 이 값을 초과할 수 없습니다. isOverflow가 true인 경우에만 표시됩니다. ※ isOverflow이(가) true 이면 필수 maxStaminaTableName string ~ 128자 스태미나 최대값 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 스태미나 최대값을 동적으로 결정하는 MaxStaminaTable의 이름입니다. 설정 시, 플레이어의 최대 스태미나는 현재 랭크 인덱스로 테이블에서 참조되며, initialCapacity를 오버라이드합니다. recoverIntervalTableName string ~ 128자 회복 간격 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 회복 간격을 동적으로 결정하는 RecoverIntervalTable의 이름입니다. 설정 시, 플레이어의 회복 간격은 테이블에서 참조되며, recoverIntervalMinutes를 오버라이드합니다. recoverValueTableName string ~ 128자 회복량 테이블 이름 플레이어의 GS2-Experience 랭크에 기반하여 회복량을 동적으로 결정하는 RecoverValueTable의 이름입니다. 설정 시, 플레이어의 회복량은 테이블에서 참조되며, recoverValue를 오버라이드합니다. Result 타입 설명 item StaminaModelMaster 갱신한 스태미나 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . UpdateStaminaModelMaster ( \u0026 stamina . UpdateStaminaModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"STAMINA_MODEL_MASTER_0001\" ), RecoverIntervalMinutes : pointy . Int32 ( 20 ), RecoverValue : pointy . Int32 ( 2 ), InitialCapacity : pointy . Int32 ( 60 ), IsOverflow : pointy . Bool ( true ), MaxCapacity : pointy . Int32 ( 999 ), MaxStaminaTableName : pointy . String ( \"maxStaminaTable-0002\" ), RecoverIntervalTableName : pointy . String ( \"recoverIntervalTable-0002\" ), RecoverValueTableName : pointy . String ( \"recoverValueTable-0002\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\UpdateStaminaModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e updateStaminaModelMaster ( ( new UpdateStaminaModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"STAMINA_MODEL_MASTER_0001\" ) -\u003e withRecoverIntervalMinutes ( 20 ) -\u003e withRecoverValue ( 2 ) -\u003e withInitialCapacity ( 60 ) -\u003e withIsOverflow ( true ) -\u003e withMaxCapacity ( 999 ) -\u003e withMaxStaminaTableName ( \"maxStaminaTable-0002\" ) -\u003e withRecoverIntervalTableName ( \"recoverIntervalTable-0002\" ) -\u003e withRecoverValueTableName ( \"recoverValueTable-0002\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.UpdateStaminaModelMasterRequest ; import io.gs2.stamina.result.UpdateStaminaModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { UpdateStaminaModelMasterResult result = client . updateStaminaModelMaster ( new UpdateStaminaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"STAMINA_MODEL_MASTER_0001\" ) . withRecoverIntervalMinutes ( 20 ) . withRecoverValue ( 2 ) . withInitialCapacity ( 60 ) . withIsOverflow ( true ) . withMaxCapacity ( 999 ) . withMaxStaminaTableName ( \"maxStaminaTable-0002\" ) . withRecoverIntervalTableName ( \"recoverIntervalTable-0002\" ) . withRecoverValueTableName ( \"recoverValueTable-0002\" ) ); StaminaModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . UpdateStaminaModelMasterResult \u003e asyncResult = null ; yield return client . UpdateStaminaModelMaster ( new Gs2 . Gs2Stamina . Request . UpdateStaminaModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"STAMINA_MODEL_MASTER_0001\" ) . WithRecoverIntervalMinutes ( 20 ) . WithRecoverValue ( 2 ) . WithInitialCapacity ( 60 ) . WithIsOverflow ( true ) . WithMaxCapacity ( 999 ) . WithMaxStaminaTableName ( \"maxStaminaTable-0002\" ) . WithRecoverIntervalTableName ( \"recoverIntervalTable-0002\" ) . WithRecoverValueTableName ( \"recoverValueTable-0002\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . updateStaminaModelMaster ( new Gs2Stamina . UpdateStaminaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"STAMINA_MODEL_MASTER_0001\" ) . withRecoverIntervalMinutes ( 20 ) . withRecoverValue ( 2 ) . withInitialCapacity ( 60 ) . withIsOverflow ( true ) . withMaxCapacity ( 999 ) . withMaxStaminaTableName ( \"maxStaminaTable-0002\" ) . withRecoverIntervalTableName ( \"recoverIntervalTable-0002\" ) . withRecoverValueTableName ( \"recoverValueTable-0002\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . update_stamina_model_master ( stamina . UpdateStaminaModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) . with_description ( 'description1' ) . with_metadata ( 'STAMINA_MODEL_MASTER_0001' ) . with_recover_interval_minutes ( 20 ) . with_recover_value ( 2 ) . with_initial_capacity ( 60 ) . with_is_overflow ( True ) . with_max_capacity ( 999 ) . with_max_stamina_table_name ( 'maxStaminaTable-0002' ) . with_recover_interval_table_name ( 'recover_interval_table-0002' ) . with_recover_value_table_name ( 'recoverValueTable-0002' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.update_stamina_model_master ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , description = \"description1\" , metadata = \"STAMINA_MODEL_MASTER_0001\" , recoverIntervalMinutes = 20 , recoverValue = 2 , initialCapacity = 60 , isOverflow = true , maxCapacity = 999 , maxStaminaTableName = \"maxStaminaTable-0002\" , recoverIntervalTableName = \"recoverIntervalTable-0002\" , recoverValueTableName = \"recoverValueTable-0002\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.update_stamina_model_master_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , description = \"description1\" , metadata = \"STAMINA_MODEL_MASTER_0001\" , recoverIntervalMinutes = 20 , recoverValue = 2 , initialCapacity = 60 , isOverflow = true , maxCapacity = 999 , maxStaminaTableName = \"maxStaminaTable-0002\" , recoverIntervalTableName = \"recoverIntervalTable-0002\" , recoverValueTableName = \"recoverValueTable-0002\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteStaminaModelMaster 스태미나 모델 마스터 삭제 지정된 스태미나 모델 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며, 현재 활성화된 스태미나 설정에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item StaminaModelMaster 삭제한 스태미나 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DeleteStaminaModelMaster ( \u0026 stamina . DeleteStaminaModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), StaminaName : pointy . String ( \"stamina-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DeleteStaminaModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e deleteStaminaModelMaster ( ( new DeleteStaminaModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withStaminaName ( \"stamina-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DeleteStaminaModelMasterRequest ; import io.gs2.stamina.result.DeleteStaminaModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DeleteStaminaModelMasterResult result = client . deleteStaminaModelMaster ( new DeleteStaminaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) ); StaminaModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DeleteStaminaModelMasterResult \u003e asyncResult = null ; yield return client . DeleteStaminaModelMaster ( new Gs2 . Gs2Stamina . Request . DeleteStaminaModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithStaminaName ( \"stamina-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . deleteStaminaModelMaster ( new Gs2Stamina . DeleteStaminaModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withStaminaName ( \"stamina-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . delete_stamina_model_master ( stamina . DeleteStaminaModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_stamina_name ( 'stamina-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.delete_stamina_model_master ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.delete_stamina_model_master_async ({ namespaceName = \"namespace-0001\" , staminaName = \"stamina-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeMaxStaminaTableMasters 스태미나 최댓값 테이블 마스터 목록 가져오기 스태미나 최댓값 테이블 마스터의 페이지네이션 리스트를 가져옵니다. 이 테이블들은 경험치 랭크 값을 스태미나 최대 용량에 매핑하여 레벨 기반의 스태미나 스케일링을 가능하게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스태미나 최댓값 테이블 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DescribeMaxStaminaTableMasters ( \u0026 stamina . DescribeMaxStaminaTableMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DescribeMaxStaminaTableMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e describeMaxStaminaTableMasters ( ( new DescribeMaxStaminaTableMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DescribeMaxStaminaTableMastersRequest ; import io.gs2.stamina.result.DescribeMaxStaminaTableMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DescribeMaxStaminaTableMastersResult result = client . describeMaxStaminaTableMasters ( new DescribeMaxStaminaTableMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List MaxStaminaTableMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DescribeMaxStaminaTableMastersResult \u003e asyncResult = null ; yield return client . DescribeMaxStaminaTableMasters ( new Gs2 . Gs2Stamina . Request . DescribeMaxStaminaTableMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . describeMaxStaminaTableMasters ( new Gs2Stamina . DescribeMaxStaminaTableMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . describe_max_stamina_table_masters ( stamina . DescribeMaxStaminaTableMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.describe_max_stamina_table_masters ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'stamina' ) api_result_handler = client.describe_max_stamina_table_masters_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createMaxStaminaTableMaster 스태미나 최댓값 테이블 마스터 신규 생성 경험치 모델 ID와 값 배열을 가진 새로운 스태미나 최댓값 테이블 마스터를 생성합니다. 값 배열은 경험치 랭크로 인덱싱되며, 각 랭크를 해당하는 스태미나 최대 용량에 매핑합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 최대 스태미나 값 테이블 이름 최대 스태미나 값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 스태미나 최대값이 결정됩니다. values List  1 ~ 1024 items 랭크별 스태미나 최대값 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 스태미나 최대값의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 최대 스태미나로 사용됩니다. 배열 길이는 참조하는 ExperienceModel에서 정의된 랭크 수와 일치해야 합니다. Result 타입 설명 item MaxStaminaTableMaster 생성한 스태미나 최댓값 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CreateMaxStaminaTableMaster ( \u0026 stamina . CreateMaxStaminaTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"max-stamina-table-0001\" ), Description : nil , Metadata : nil , ExperienceModelId : pointy . String ( \"experienceModelId-0001\" ), Values : [] * int32 { pointy . Int32 ( 50 ), pointy . Int32 ( 150 ), pointy . Int32 ( 250 ), pointy . Int32 ( 350 ), pointy . Int32 ( 450 ), pointy . Int32 ( 550 ), pointy . Int32 ( 650 ), pointy . Int32 ( 750 ), pointy . Int32 ( 850 ), pointy . Int32 ( 950 ), pointy . Int32 ( 1050 ), pointy . Int32 ( 1150 ), pointy . Int32 ( 1250 ), pointy . Int32 ( 1350 ), pointy . Int32 ( 1450 ), pointy . Int32 ( 1550 ), pointy . Int32 ( 1650 ), pointy . Int32 ( 1750 ), pointy . Int32 ( 1850 ), pointy . Int32 ( 1950 ), pointy . Int32 ( 2050 ), pointy . Int32 ( 2150 ), pointy . Int32 ( 2250 ), pointy . Int32 ( 2350 ), pointy . Int32 ( 2450 ), pointy . Int32 ( 2550 ), pointy . Int32 ( 2650 ), pointy . Int32 ( 2750 ), pointy . Int32 ( 2850 ), pointy . Int32 ( 2950 ), pointy . Int32 ( 3050 ), pointy . Int32 ( 3150 ), pointy . Int32 ( 3250 ), pointy . Int32 ( 3350 ), pointy . Int32 ( 3450 ), pointy . Int32 ( 3550 ), pointy . Int32 ( 3650 ), pointy . Int32 ( 3750 ), pointy . Int32 ( 3850 ), pointy . Int32 ( 3950 ), pointy . Int32 ( 4050 ), pointy . Int32 ( 4150 ), pointy . Int32 ( 4250 ), pointy . Int32 ( 4350 ), pointy . Int32 ( 4450 ), pointy . Int32 ( 4550 ), pointy . Int32 ( 4650 ), pointy . Int32 ( 4750 ), pointy . Int32 ( 4850 ), pointy . Int32 ( 4950 ), pointy . Int32 ( 5050 ), pointy . Int32 ( 5150 ), pointy . Int32 ( 5250 ), pointy . Int32 ( 5350 ), pointy . Int32 ( 5450 ), pointy . Int32 ( 5550 ), pointy . Int32 ( 5650 ), pointy . Int32 ( 5750 ), pointy . Int32 ( 5850 ), pointy . Int32 ( 5950 ), pointy . Int32 ( 6050 ), pointy . Int32 ( 6150 ), pointy . Int32 ( 6250 ), pointy . Int32 ( 6350 ), pointy . Int32 ( 6450 ), pointy . Int32 ( 6550 ), pointy . Int32 ( 6650 ), pointy . Int32 ( 6750 ), pointy . Int32 ( 6850 ), pointy . Int32 ( 6950 ), pointy . Int32 ( 7050 ), pointy . Int32 ( 7150 ), pointy . Int32 ( 7250 ), pointy . Int32 ( 7350 ), pointy . Int32 ( 7450 ), pointy . Int32 ( 7550 ), pointy . Int32 ( 7650 ), pointy . Int32 ( 7750 ), pointy . Int32 ( 7850 ), pointy . Int32 ( 7950 ), pointy . Int32 ( 8050 ), pointy . Int32 ( 8150 ), pointy . Int32 ( 8250 ), pointy . Int32 ( 8350 ), pointy . Int32 ( 8450 ), pointy . Int32 ( 8550 ), pointy . Int32 ( 8650 ), pointy . Int32 ( 8750 ), pointy . Int32 ( 8850 ), pointy . Int32 ( 8950 ), pointy . Int32 ( 9050 ), pointy . Int32 ( 9150 ), pointy . Int32 ( 9250 ), pointy . Int32 ( 9350 ), pointy . Int32 ( 9450 ), pointy . Int32 ( 9550 ), pointy . Int32 ( 9650 ), pointy . Int32 ( 9750 ), pointy . Int32 ( 9850 ), pointy . Int32 ( 9950 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CreateMaxStaminaTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e createMaxStaminaTableMaster ( ( new CreateMaxStaminaTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"max-stamina-table-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withExperienceModelId ( \"experienceModelId-0001\" ) -\u003e withValues ([ 50 , 150 , 250 , 350 , 450 , 550 , 650 , 750 , 850 , 950 , 1050 , 1150 , 1250 , 1350 , 1450 , 1550 , 1650 , 1750 , 1850 , 1950 , 2050 , 2150 , 2250 , 2350 , 2450 , 2550 , 2650 , 2750 , 2850 , 2950 , 3050 , 3150 , 3250 , 3350 , 3450 , 3550 , 3650 , 3750 , 3850 , 3950 , 4050 , 4150 , 4250 , 4350 , 4450 , 4550 , 4650 , 4750 , 4850 , 4950 , 5050 , 5150 , 5250 , 5350 , 5450 , 5550 , 5650 , 5750 , 5850 , 5950 , 6050 , 6150 , 6250 , 6350 , 6450 , 6550 , 6650 , 6750 , 6850 , 6950 , 7050 , 7150 , 7250 , 7350 , 7450 , 7550 , 7650 , 7750 , 7850 , 7950 , 8050 , 8150 , 8250 , 8350 , 8450 , 8550 , 8650 , 8750 , 8850 , 8950 , 9050 , 9150 , 9250 , 9350 , 9450 , 9550 , 9650 , 9750 , 9850 , 9950 , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CreateMaxStaminaTableMasterRequest ; import io.gs2.stamina.result.CreateMaxStaminaTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CreateMaxStaminaTableMasterResult result = client . createMaxStaminaTableMaster ( new CreateMaxStaminaTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"max-stamina-table-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-0001\" ) . withValues ( Arrays . asList ( 50 , 150 , 250 , 350 , 450 , 550 , 650 , 750 , 850 , 950 , 1050 , 1150 , 1250 , 1350 , 1450 , 1550 , 1650 , 1750 , 1850 , 1950 , 2050 , 2150 , 2250 , 2350 , 2450 , 2550 , 2650 , 2750 , 2850 , 2950 , 3050 , 3150 , 3250 , 3350 , 3450 , 3550 , 3650 , 3750 , 3850 , 3950 , 4050 , 4150 , 4250 , 4350 , 4450 , 4550 , 4650 , 4750 , 4850 , 4950 , 5050 , 5150 , 5250 , 5350 , 5450 , 5550 , 5650 , 5750 , 5850 , 5950 , 6050 , 6150 , 6250 , 6350 , 6450 , 6550 , 6650 , 6750 , 6850 , 6950 , 7050 , 7150 , 7250 , 7350 , 7450 , 7550 , 7650 , 7750 , 7850 , 7950 , 8050 , 8150 , 8250 , 8350 , 8450 , 8550 , 8650 , 8750 , 8850 , 8950 , 9050 , 9150 , 9250 , 9350 , 9450 , 9550 , 9650 , 9750 , 9850 , 9950 )) ); MaxStaminaTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CreateMaxStaminaTableMasterResult \u003e asyncResult = null ; yield return client . CreateMaxStaminaTableMaster ( new Gs2 . Gs2Stamina . Request . CreateMaxStaminaTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"max-stamina-table-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithExperienceModelId ( \"experienceModelId-0001\" ) . WithValues ( new int [] { 50 , 150 , 250 , 350 , 450 , 550 , 650 , 750 , 850 , 950 , 1050 , 1150 , 1250 , 1350 , 1450 , 1550 , 1650 , 1750 , 1850 , 1950 , 2050 , 2150 , 2250 , 2350 , 2450 , 2550 , 2650 , 2750 , 2850 , 2950 , 3050 , 3150 , 3250 , 3350 , 3450 , 3550 , 3650 , 3750 , 3850 , 3950 , 4050 , 4150 , 4250 , 4350 , 4450 , 4550 , 4650 , 4750 , 4850 , 4950 , 5050 , 5150 , 5250 , 5350 , 5450 , 5550 , 5650 , 5750 , 5850 , 5950 , 6050 , 6150 , 6250 , 6350 , 6450 , 6550 , 6650 , 6750 , 6850 , 6950 , 7050 , 7150 , 7250 , 7350 , 7450 , 7550 , 7650 , 7750 , 7850 , 7950 , 8050 , 8150 , 8250 , 8350 , 8450 , 8550 , 8650 , 8750 , 8850 , 8950 , 9050 , 9150 , 9250 , 9350 , 9450 , 9550 , 9650 , 9750 , 9850 , 9950 , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . createMaxStaminaTableMaster ( new Gs2Stamina . CreateMaxStaminaTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"max-stamina-table-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-0001\" ) . withValues ([ 50 , 150 , 250 , 350 , 450 , 550 , 650 , 750 , 850 , 950 , 1050 , 1150 , 1250 , 1350 , 1450 , 1550 , 1650 , 1750 , 1850 , 1950 , 2050 , 2150 , 2250 , 2350 , 2450 , 2550 , 2650 , 2750 , 2850 , 2950 , 3050 , 3150 , 3250 , 3350 , 3450 , 3550 , 3650 , 3750 , 3850 , 3950 , 4050 , 4150 , 4250 , 4350 , 4450 , 4550 , 4650 , 4750 , 4850 , 4950 , 5050 , 5150 , 5250 , 5350 , 5450 , 5550 , 5650 , 5750 , 5850 , 5950 , 6050 , 6150 , 6250 , 6350 , 6450 , 6550 , 6650 , 6750 , 6850 , 6950 , 7050 , 7150 , 7250 , 7350 , 7450 , 7550 , 7650 , 7750 , 7850 , 7950 , 8050 , 8150 , 8250 , 8350 , 8450 , 8550 , 8650 , 8750 , 8850 , 8950 , 9050 , 9150 , 9250 , 9350 , 9450 , 9550 , 9650 , 9750 , 9850 , 9950 , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . create_max_stamina_table_master ( stamina . CreateMaxStaminaTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'max-stamina-table-0001' ) . with_description ( None ) . with_metadata ( None ) . with_experience_model_id ( 'experienceModelId-0001' ) . with_values ([ 50 , 150 , 250 , 350 , 450 , 550 , 650 , 750 , 850 , 950 , 1050 , 1150 , 1250 , 1350 , 1450 , 1550 , 1650 , 1750 , 1850 , 1950 , 2050 , 2150 , 2250 , 2350 , 2450 , 2550 , 2650 , 2750 , 2850 , 2950 , 3050 , 3150 , 3250 , 3350 , 3450 , 3550 , 3650 , 3750 , 3850 , 3950 , 4050 , 4150 , 4250 , 4350 , 4450 , 4550 , 4650 , 4750 , 4850 , 4950 , 5050 , 5150 , 5250 , 5350 , 5450 , 5550 , 5650 , 5750 , 5850 , 5950 , 6050 , 6150 , 6250 , 6350 , 6450 , 6550 , 6650 , 6750 , 6850 , 6950 , 7050 , 7150 , 7250 , 7350 , 7450 , 7550 , 7650 , 7750 , 7850 , 7950 , 8050 , 8150 , 8250 , 8350 , 8450 , 8550 , 8650 , 8750 , 8850 , 8950 , 9050 , 9150 , 9250 , 9350 , 9450 , 9550 , 9650 , 9750 , 9850 , 9950 , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.create_max_stamina_table_master ({ namespaceName = \"namespace-0001\" , name = \"max-stamina-table-0001\" , description = nil , metadata = nil , experienceModelId = \"experienceModelId-0001\" , values = { 50 , 150 , 250 , 350 , 450 , 550 , 650 , 750 , 850 , 950 , 1050 , 1150 , 1250 , 1350 , 1450 , 1550 , 1650 , 1750 , 1850 , 1950 , 2050 , 2150 , 2250 , 2350 , 2450 , 2550 , 2650 , 2750 , 2850 , 2950 , 3050 , 3150 , 3250 , 3350 , 3450 , 3550 , 3650 , 3750 , 3850 , 3950 , 4050 , 4150 , 4250 , 4350 , 4450 , 4550 , 4650 , 4750 , 4850 , 4950 , 5050 , 5150 , 5250 , 5350 , 5450 , 5550 , 5650 , 5750 , 5850 , 5950 , 6050 , 6150 , 6250 , 6350 , 6450 , 6550 , 6650 , 6750 , 6850 , 6950 , 7050 , 7150 , 7250 , 7350 , 7450 , 7550 , 7650 , 7750 , 7850 , 7950 , 8050 , 8150 , 8250 , 8350 , 8450 , 8550 , 8650 , 8750 , 8850 , 8950 , 9050 , 9150 , 9250 , 9350 , 9450 , 9550 , 9650 , 9750 , 9850 , 9950 }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.create_max_stamina_table_master_async ({ namespaceName = \"namespace-0001\" , name = \"max-stamina-table-0001\" , description = nil , metadata = nil , experienceModelId = \"experienceModelId-0001\" , values = { 50 , 150 , 250 , 350 , 450 , 550 , 650 , 750 , 850 , 950 , 1050 , 1150 , 1250 , 1350 , 1450 , 1550 , 1650 , 1750 , 1850 , 1950 , 2050 , 2150 , 2250 , 2350 , 2450 , 2550 , 2650 , 2750 , 2850 , 2950 , 3050 , 3150 , 3250 , 3350 , 3450 , 3550 , 3650 , 3750 , 3850 , 3950 , 4050 , 4150 , 4250 , 4350 , 4450 , 4550 , 4650 , 4750 , 4850 , 4950 , 5050 , 5150 , 5250 , 5350 , 5450 , 5550 , 5650 , 5750 , 5850 , 5950 , 6050 , 6150 , 6250 , 6350 , 6450 , 6550 , 6650 , 6750 , 6850 , 6950 , 7050 , 7150 , 7250 , 7350 , 7450 , 7550 , 7650 , 7750 , 7850 , 7950 , 8050 , 8150 , 8250 , 8350 , 8450 , 8550 , 8650 , 8750 , 8850 , 8950 , 9050 , 9150 , 9250 , 9350 , 9450 , 9550 , 9650 , 9750 , 9850 , 9950 }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getMaxStaminaTableMaster 스태미나 최댓값 테이블 마스터 가져오기 경험치 모델 연관 정보와 랭크에서 용량으로의 값 매핑을 포함하여, 지정된 스태미나 최댓값 테이블 마스터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. maxStaminaTableName string  ~ 128자 최대 스태미나 값 테이블 이름 최대 스태미나 값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item MaxStaminaTableMaster 스태미나 최댓값 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetMaxStaminaTableMaster ( \u0026 stamina . GetMaxStaminaTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MaxStaminaTableName : pointy . String ( \"max-stamina-table-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetMaxStaminaTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getMaxStaminaTableMaster ( ( new GetMaxStaminaTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMaxStaminaTableName ( \"max-stamina-table-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetMaxStaminaTableMasterRequest ; import io.gs2.stamina.result.GetMaxStaminaTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetMaxStaminaTableMasterResult result = client . getMaxStaminaTableMaster ( new GetMaxStaminaTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMaxStaminaTableName ( \"max-stamina-table-0001\" ) ); MaxStaminaTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetMaxStaminaTableMasterResult \u003e asyncResult = null ; yield return client . GetMaxStaminaTableMaster ( new Gs2 . Gs2Stamina . Request . GetMaxStaminaTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMaxStaminaTableName ( \"max-stamina-table-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getMaxStaminaTableMaster ( new Gs2Stamina . GetMaxStaminaTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMaxStaminaTableName ( \"max-stamina-table-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_max_stamina_table_master ( stamina . GetMaxStaminaTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_max_stamina_table_name ( 'max-stamina-table-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_max_stamina_table_master ({ namespaceName = \"namespace-0001\" , maxStaminaTableName = \"max-stamina-table-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.get_max_stamina_table_master_async ({ namespaceName = \"namespace-0001\" , maxStaminaTableName = \"max-stamina-table-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateMaxStaminaTableMaster 스태미나 최댓값 테이블 마스터 갱신 지정된 스태미나 최댓값 테이블 마스터의 설명, 메타데이터, 경험치 모델 연관 정보, 랭크에서 용량으로의 값 매핑을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. maxStaminaTableName string  ~ 128자 최대 스태미나 값 테이블 이름 최대 스태미나 값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 스태미나 최대값이 결정됩니다. values List  1 ~ 1024 items 랭크별 스태미나 최대값 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 스태미나 최대값의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 최대 스태미나로 사용됩니다. 배열 길이는 참조하는 ExperienceModel에서 정의된 랭크 수와 일치해야 합니다. Result 타입 설명 item MaxStaminaTableMaster 갱신한 스태미나 최댓값 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . UpdateMaxStaminaTableMaster ( \u0026 stamina . UpdateMaxStaminaTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MaxStaminaTableName : pointy . String ( \"max-stamina-table-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , ExperienceModelId : pointy . String ( \"experienceModelId-1001\" ), Values : [] * int32 { pointy . Int32 ( 50 ), pointy . Int32 ( 200 ), pointy . Int32 ( 350 ), pointy . Int32 ( 500 ), pointy . Int32 ( 650 ), pointy . Int32 ( 800 ), pointy . Int32 ( 950 ), pointy . Int32 ( 1100 ), pointy . Int32 ( 1250 ), pointy . Int32 ( 1400 ), pointy . Int32 ( 1550 ), pointy . Int32 ( 1700 ), pointy . Int32 ( 1850 ), pointy . Int32 ( 2000 ), pointy . Int32 ( 2150 ), pointy . Int32 ( 2300 ), pointy . Int32 ( 2450 ), pointy . Int32 ( 2600 ), pointy . Int32 ( 2750 ), pointy . Int32 ( 2900 ), pointy . Int32 ( 3050 ), pointy . Int32 ( 3200 ), pointy . Int32 ( 3350 ), pointy . Int32 ( 3500 ), pointy . Int32 ( 3650 ), pointy . Int32 ( 3800 ), pointy . Int32 ( 3950 ), pointy . Int32 ( 4100 ), pointy . Int32 ( 4250 ), pointy . Int32 ( 4400 ), pointy . Int32 ( 4550 ), pointy . Int32 ( 4700 ), pointy . Int32 ( 4850 ), pointy . Int32 ( 5000 ), pointy . Int32 ( 5150 ), pointy . Int32 ( 5300 ), pointy . Int32 ( 5450 ), pointy . Int32 ( 5600 ), pointy . Int32 ( 5750 ), pointy . Int32 ( 5900 ), pointy . Int32 ( 6050 ), pointy . Int32 ( 6200 ), pointy . Int32 ( 6350 ), pointy . Int32 ( 6500 ), pointy . Int32 ( 6650 ), pointy . Int32 ( 6800 ), pointy . Int32 ( 6950 ), pointy . Int32 ( 7100 ), pointy . Int32 ( 7250 ), pointy . Int32 ( 7400 ), pointy . Int32 ( 7550 ), pointy . Int32 ( 7700 ), pointy . Int32 ( 7850 ), pointy . Int32 ( 8000 ), pointy . Int32 ( 8150 ), pointy . Int32 ( 8300 ), pointy . Int32 ( 8450 ), pointy . Int32 ( 8600 ), pointy . Int32 ( 8750 ), pointy . Int32 ( 8900 ), pointy . Int32 ( 9050 ), pointy . Int32 ( 9200 ), pointy . Int32 ( 9350 ), pointy . Int32 ( 9500 ), pointy . Int32 ( 9650 ), pointy . Int32 ( 9800 ), pointy . Int32 ( 9950 ), pointy . Int32 ( 10100 ), pointy . Int32 ( 10250 ), pointy . Int32 ( 10400 ), pointy . Int32 ( 10550 ), pointy . Int32 ( 10700 ), pointy . Int32 ( 10850 ), pointy . Int32 ( 11000 ), pointy . Int32 ( 11150 ), pointy . Int32 ( 11300 ), pointy . Int32 ( 11450 ), pointy . Int32 ( 11600 ), pointy . Int32 ( 11750 ), pointy . Int32 ( 11900 ), pointy . Int32 ( 12050 ), pointy . Int32 ( 12200 ), pointy . Int32 ( 12350 ), pointy . Int32 ( 12500 ), pointy . Int32 ( 12650 ), pointy . Int32 ( 12800 ), pointy . Int32 ( 12950 ), pointy . Int32 ( 13100 ), pointy . Int32 ( 13250 ), pointy . Int32 ( 13400 ), pointy . Int32 ( 13550 ), pointy . Int32 ( 13700 ), pointy . Int32 ( 13850 ), pointy . Int32 ( 14000 ), pointy . Int32 ( 14150 ), pointy . Int32 ( 14300 ), pointy . Int32 ( 14450 ), pointy . Int32 ( 14600 ), pointy . Int32 ( 14750 ), pointy . Int32 ( 14900 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\UpdateMaxStaminaTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e updateMaxStaminaTableMaster ( ( new UpdateMaxStaminaTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMaxStaminaTableName ( \"max-stamina-table-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withExperienceModelId ( \"experienceModelId-1001\" ) -\u003e withValues ([ 50 , 200 , 350 , 500 , 650 , 800 , 950 , 1100 , 1250 , 1400 , 1550 , 1700 , 1850 , 2000 , 2150 , 2300 , 2450 , 2600 , 2750 , 2900 , 3050 , 3200 , 3350 , 3500 , 3650 , 3800 , 3950 , 4100 , 4250 , 4400 , 4550 , 4700 , 4850 , 5000 , 5150 , 5300 , 5450 , 5600 , 5750 , 5900 , 6050 , 6200 , 6350 , 6500 , 6650 , 6800 , 6950 , 7100 , 7250 , 7400 , 7550 , 7700 , 7850 , 8000 , 8150 , 8300 , 8450 , 8600 , 8750 , 8900 , 9050 , 9200 , 9350 , 9500 , 9650 , 9800 , 9950 , 10100 , 10250 , 10400 , 10550 , 10700 , 10850 , 11000 , 11150 , 11300 , 11450 , 11600 , 11750 , 11900 , 12050 , 12200 , 12350 , 12500 , 12650 , 12800 , 12950 , 13100 , 13250 , 13400 , 13550 , 13700 , 13850 , 14000 , 14150 , 14300 , 14450 , 14600 , 14750 , 14900 , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.UpdateMaxStaminaTableMasterRequest ; import io.gs2.stamina.result.UpdateMaxStaminaTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { UpdateMaxStaminaTableMasterResult result = client . updateMaxStaminaTableMaster ( new UpdateMaxStaminaTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMaxStaminaTableName ( \"max-stamina-table-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-1001\" ) . withValues ( Arrays . asList ( 50 , 200 , 350 , 500 , 650 , 800 , 950 , 1100 , 1250 , 1400 , 1550 , 1700 , 1850 , 2000 , 2150 , 2300 , 2450 , 2600 , 2750 , 2900 , 3050 , 3200 , 3350 , 3500 , 3650 , 3800 , 3950 , 4100 , 4250 , 4400 , 4550 , 4700 , 4850 , 5000 , 5150 , 5300 , 5450 , 5600 , 5750 , 5900 , 6050 , 6200 , 6350 , 6500 , 6650 , 6800 , 6950 , 7100 , 7250 , 7400 , 7550 , 7700 , 7850 , 8000 , 8150 , 8300 , 8450 , 8600 , 8750 , 8900 , 9050 , 9200 , 9350 , 9500 , 9650 , 9800 , 9950 , 10100 , 10250 , 10400 , 10550 , 10700 , 10850 , 11000 , 11150 , 11300 , 11450 , 11600 , 11750 , 11900 , 12050 , 12200 , 12350 , 12500 , 12650 , 12800 , 12950 , 13100 , 13250 , 13400 , 13550 , 13700 , 13850 , 14000 , 14150 , 14300 , 14450 , 14600 , 14750 , 14900 )) ); MaxStaminaTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . UpdateMaxStaminaTableMasterResult \u003e asyncResult = null ; yield return client . UpdateMaxStaminaTableMaster ( new Gs2 . Gs2Stamina . Request . UpdateMaxStaminaTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMaxStaminaTableName ( \"max-stamina-table-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithExperienceModelId ( \"experienceModelId-1001\" ) . WithValues ( new int [] { 50 , 200 , 350 , 500 , 650 , 800 , 950 , 1100 , 1250 , 1400 , 1550 , 1700 , 1850 , 2000 , 2150 , 2300 , 2450 , 2600 , 2750 , 2900 , 3050 , 3200 , 3350 , 3500 , 3650 , 3800 , 3950 , 4100 , 4250 , 4400 , 4550 , 4700 , 4850 , 5000 , 5150 , 5300 , 5450 , 5600 , 5750 , 5900 , 6050 , 6200 , 6350 , 6500 , 6650 , 6800 , 6950 , 7100 , 7250 , 7400 , 7550 , 7700 , 7850 , 8000 , 8150 , 8300 , 8450 , 8600 , 8750 , 8900 , 9050 , 9200 , 9350 , 9500 , 9650 , 9800 , 9950 , 10100 , 10250 , 10400 , 10550 , 10700 , 10850 , 11000 , 11150 , 11300 , 11450 , 11600 , 11750 , 11900 , 12050 , 12200 , 12350 , 12500 , 12650 , 12800 , 12950 , 13100 , 13250 , 13400 , 13550 , 13700 , 13850 , 14000 , 14150 , 14300 , 14450 , 14600 , 14750 , 14900 , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . updateMaxStaminaTableMaster ( new Gs2Stamina . UpdateMaxStaminaTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMaxStaminaTableName ( \"max-stamina-table-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-1001\" ) . withValues ([ 50 , 200 , 350 , 500 , 650 , 800 , 950 , 1100 , 1250 , 1400 , 1550 , 1700 , 1850 , 2000 , 2150 , 2300 , 2450 , 2600 , 2750 , 2900 , 3050 , 3200 , 3350 , 3500 , 3650 , 3800 , 3950 , 4100 , 4250 , 4400 , 4550 , 4700 , 4850 , 5000 , 5150 , 5300 , 5450 , 5600 , 5750 , 5900 , 6050 , 6200 , 6350 , 6500 , 6650 , 6800 , 6950 , 7100 , 7250 , 7400 , 7550 , 7700 , 7850 , 8000 , 8150 , 8300 , 8450 , 8600 , 8750 , 8900 , 9050 , 9200 , 9350 , 9500 , 9650 , 9800 , 9950 , 10100 , 10250 , 10400 , 10550 , 10700 , 10850 , 11000 , 11150 , 11300 , 11450 , 11600 , 11750 , 11900 , 12050 , 12200 , 12350 , 12500 , 12650 , 12800 , 12950 , 13100 , 13250 , 13400 , 13550 , 13700 , 13850 , 14000 , 14150 , 14300 , 14450 , 14600 , 14750 , 14900 , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . update_max_stamina_table_master ( stamina . UpdateMaxStaminaTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_max_stamina_table_name ( 'max-stamina-table-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_experience_model_id ( 'experienceModelId-1001' ) . with_values ([ 50 , 200 , 350 , 500 , 650 , 800 , 950 , 1100 , 1250 , 1400 , 1550 , 1700 , 1850 , 2000 , 2150 , 2300 , 2450 , 2600 , 2750 , 2900 , 3050 , 3200 , 3350 , 3500 , 3650 , 3800 , 3950 , 4100 , 4250 , 4400 , 4550 , 4700 , 4850 , 5000 , 5150 , 5300 , 5450 , 5600 , 5750 , 5900 , 6050 , 6200 , 6350 , 6500 , 6650 , 6800 , 6950 , 7100 , 7250 , 7400 , 7550 , 7700 , 7850 , 8000 , 8150 , 8300 , 8450 , 8600 , 8750 , 8900 , 9050 , 9200 , 9350 , 9500 , 9650 , 9800 , 9950 , 10100 , 10250 , 10400 , 10550 , 10700 , 10850 , 11000 , 11150 , 11300 , 11450 , 11600 , 11750 , 11900 , 12050 , 12200 , 12350 , 12500 , 12650 , 12800 , 12950 , 13100 , 13250 , 13400 , 13550 , 13700 , 13850 , 14000 , 14150 , 14300 , 14450 , 14600 , 14750 , 14900 , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.update_max_stamina_table_master ({ namespaceName = \"namespace-0001\" , maxStaminaTableName = \"max-stamina-table-0001\" , description = \"description1\" , metadata = nil , experienceModelId = \"experienceModelId-1001\" , values = { 50 , 200 , 350 , 500 , 650 , 800 , 950 , 1100 , 1250 , 1400 , 1550 , 1700 , 1850 , 2000 , 2150 , 2300 , 2450 , 2600 , 2750 , 2900 , 3050 , 3200 , 3350 , 3500 , 3650 , 3800 , 3950 , 4100 , 4250 , 4400 , 4550 , 4700 , 4850 , 5000 , 5150 , 5300 , 5450 , 5600 , 5750 , 5900 , 6050 , 6200 , 6350 , 6500 , 6650 , 6800 , 6950 , 7100 , 7250 , 7400 , 7550 , 7700 , 7850 , 8000 , 8150 , 8300 , 8450 , 8600 , 8750 , 8900 , 9050 , 9200 , 9350 , 9500 , 9650 , 9800 , 9950 , 10100 , 10250 , 10400 , 10550 , 10700 , 10850 , 11000 , 11150 , 11300 , 11450 , 11600 , 11750 , 11900 , 12050 , 12200 , 12350 , 12500 , 12650 , 12800 , 12950 , 13100 , 13250 , 13400 , 13550 , 13700 , 13850 , 14000 , 14150 , 14300 , 14450 , 14600 , 14750 , 14900 }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.update_max_stamina_table_master_async ({ namespaceName = \"namespace-0001\" , maxStaminaTableName = \"max-stamina-table-0001\" , description = \"description1\" , metadata = nil , experienceModelId = \"experienceModelId-1001\" , values = { 50 , 200 , 350 , 500 , 650 , 800 , 950 , 1100 , 1250 , 1400 , 1550 , 1700 , 1850 , 2000 , 2150 , 2300 , 2450 , 2600 , 2750 , 2900 , 3050 , 3200 , 3350 , 3500 , 3650 , 3800 , 3950 , 4100 , 4250 , 4400 , 4550 , 4700 , 4850 , 5000 , 5150 , 5300 , 5450 , 5600 , 5750 , 5900 , 6050 , 6200 , 6350 , 6500 , 6650 , 6800 , 6950 , 7100 , 7250 , 7400 , 7550 , 7700 , 7850 , 8000 , 8150 , 8300 , 8450 , 8600 , 8750 , 8900 , 9050 , 9200 , 9350 , 9500 , 9650 , 9800 , 9950 , 10100 , 10250 , 10400 , 10550 , 10700 , 10850 , 11000 , 11150 , 11300 , 11450 , 11600 , 11750 , 11900 , 12050 , 12200 , 12350 , 12500 , 12650 , 12800 , 12950 , 13100 , 13250 , 13400 , 13550 , 13700 , 13850 , 14000 , 14150 , 14300 , 14450 , 14600 , 14750 , 14900 }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteMaxStaminaTableMaster 스태미나 최댓값 테이블 마스터 삭제 지정된 스태미나 최댓값 테이블 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며, 현재 활성화된 스태미나 설정에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. maxStaminaTableName string  ~ 128자 최대 스태미나 값 테이블 이름 최대 스태미나 값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item MaxStaminaTableMaster 삭제한 스태미나 최댓값 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DeleteMaxStaminaTableMaster ( \u0026 stamina . DeleteMaxStaminaTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MaxStaminaTableName : pointy . String ( \"max-stamina-table-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DeleteMaxStaminaTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e deleteMaxStaminaTableMaster ( ( new DeleteMaxStaminaTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMaxStaminaTableName ( \"max-stamina-table-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DeleteMaxStaminaTableMasterRequest ; import io.gs2.stamina.result.DeleteMaxStaminaTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DeleteMaxStaminaTableMasterResult result = client . deleteMaxStaminaTableMaster ( new DeleteMaxStaminaTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMaxStaminaTableName ( \"max-stamina-table-0001\" ) ); MaxStaminaTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DeleteMaxStaminaTableMasterResult \u003e asyncResult = null ; yield return client . DeleteMaxStaminaTableMaster ( new Gs2 . Gs2Stamina . Request . DeleteMaxStaminaTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMaxStaminaTableName ( \"max-stamina-table-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . deleteMaxStaminaTableMaster ( new Gs2Stamina . DeleteMaxStaminaTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMaxStaminaTableName ( \"max-stamina-table-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . delete_max_stamina_table_master ( stamina . DeleteMaxStaminaTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_max_stamina_table_name ( 'max-stamina-table-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.delete_max_stamina_table_master ({ namespaceName = \"namespace-0001\" , maxStaminaTableName = \"max-stamina-table-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.delete_max_stamina_table_master_async ({ namespaceName = \"namespace-0001\" , maxStaminaTableName = \"max-stamina-table-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRecoverIntervalTableMasters 회복 간격 테이블 마스터 목록 취득 회복 간격 테이블 마스터의 페이지네이션된 목록을 취득합니다. 이름의 접두사로 필터링할 수 있습니다. 이 테이블은 경험치 랭크 값을 스태미나 회복 간격(분)에 매핑하여, 레벨 기반의 회복 속도 스케일링을 가능하게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 회복 간격 테이블 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 회복 간격 테이블 마스터의 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DescribeRecoverIntervalTableMasters ( \u0026 stamina . DescribeRecoverIntervalTableMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DescribeRecoverIntervalTableMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e describeRecoverIntervalTableMasters ( ( new DescribeRecoverIntervalTableMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DescribeRecoverIntervalTableMastersRequest ; import io.gs2.stamina.result.DescribeRecoverIntervalTableMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DescribeRecoverIntervalTableMastersResult result = client . describeRecoverIntervalTableMasters ( new DescribeRecoverIntervalTableMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List RecoverIntervalTableMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DescribeRecoverIntervalTableMastersResult \u003e asyncResult = null ; yield return client . DescribeRecoverIntervalTableMasters ( new Gs2 . Gs2Stamina . Request . DescribeRecoverIntervalTableMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . describeRecoverIntervalTableMasters ( new Gs2Stamina . DescribeRecoverIntervalTableMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . describe_recover_interval_table_masters ( stamina . DescribeRecoverIntervalTableMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.describe_recover_interval_table_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'stamina' ) api_result_handler = client.describe_recover_interval_table_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createRecoverIntervalTableMaster 회복 간격 테이블 마스터를 신규 작성 경험치 모델 ID와 값 배열을 가진 새로운 회복 간격 테이블 마스터를 작성합니다. 값 배열은 경험치 랭크로 인덱싱되며, 각 랭크를 대응하는 회복 간격(분)에 매핑합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복 간격이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복 간격 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복 간격 값(분 단위)의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 회복 간격으로 사용되며, 모델의 기본값 recoverIntervalMinutes를 오버라이드합니다. Result 타입 설명 item RecoverIntervalTableMaster 작성한 회복 간격 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CreateRecoverIntervalTableMaster ( \u0026 stamina . CreateRecoverIntervalTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"recover-interval-table-0001\" ), Description : nil , Metadata : nil , ExperienceModelId : pointy . String ( \"experienceModelId-0001\" ), Values : [] * int32 { pointy . Int32 ( 40 ), pointy . Int32 ( 140 ), pointy . Int32 ( 240 ), pointy . Int32 ( 340 ), pointy . Int32 ( 440 ), pointy . Int32 ( 540 ), pointy . Int32 ( 640 ), pointy . Int32 ( 740 ), pointy . Int32 ( 840 ), pointy . Int32 ( 940 ), pointy . Int32 ( 1040 ), pointy . Int32 ( 1140 ), pointy . Int32 ( 1240 ), pointy . Int32 ( 1340 ), pointy . Int32 ( 1440 ), pointy . Int32 ( 1540 ), pointy . Int32 ( 1640 ), pointy . Int32 ( 1740 ), pointy . Int32 ( 1840 ), pointy . Int32 ( 1940 ), pointy . Int32 ( 2040 ), pointy . Int32 ( 2140 ), pointy . Int32 ( 2240 ), pointy . Int32 ( 2340 ), pointy . Int32 ( 2440 ), pointy . Int32 ( 2540 ), pointy . Int32 ( 2640 ), pointy . Int32 ( 2740 ), pointy . Int32 ( 2840 ), pointy . Int32 ( 2940 ), pointy . Int32 ( 3040 ), pointy . Int32 ( 3140 ), pointy . Int32 ( 3240 ), pointy . Int32 ( 3340 ), pointy . Int32 ( 3440 ), pointy . Int32 ( 3540 ), pointy . Int32 ( 3640 ), pointy . Int32 ( 3740 ), pointy . Int32 ( 3840 ), pointy . Int32 ( 3940 ), pointy . Int32 ( 4040 ), pointy . Int32 ( 4140 ), pointy . Int32 ( 4240 ), pointy . Int32 ( 4340 ), pointy . Int32 ( 4440 ), pointy . Int32 ( 4540 ), pointy . Int32 ( 4640 ), pointy . Int32 ( 4740 ), pointy . Int32 ( 4840 ), pointy . Int32 ( 4940 ), pointy . Int32 ( 5040 ), pointy . Int32 ( 5140 ), pointy . Int32 ( 5240 ), pointy . Int32 ( 5340 ), pointy . Int32 ( 5440 ), pointy . Int32 ( 5540 ), pointy . Int32 ( 5640 ), pointy . Int32 ( 5740 ), pointy . Int32 ( 5840 ), pointy . Int32 ( 5940 ), pointy . Int32 ( 6040 ), pointy . Int32 ( 6140 ), pointy . Int32 ( 6240 ), pointy . Int32 ( 6340 ), pointy . Int32 ( 6440 ), pointy . Int32 ( 6540 ), pointy . Int32 ( 6640 ), pointy . Int32 ( 6740 ), pointy . Int32 ( 6840 ), pointy . Int32 ( 6940 ), pointy . Int32 ( 7040 ), pointy . Int32 ( 7140 ), pointy . Int32 ( 7240 ), pointy . Int32 ( 7340 ), pointy . Int32 ( 7440 ), pointy . Int32 ( 7540 ), pointy . Int32 ( 7640 ), pointy . Int32 ( 7740 ), pointy . Int32 ( 7840 ), pointy . Int32 ( 7940 ), pointy . Int32 ( 8040 ), pointy . Int32 ( 8140 ), pointy . Int32 ( 8240 ), pointy . Int32 ( 8340 ), pointy . Int32 ( 8440 ), pointy . Int32 ( 8540 ), pointy . Int32 ( 8640 ), pointy . Int32 ( 8740 ), pointy . Int32 ( 8840 ), pointy . Int32 ( 8940 ), pointy . Int32 ( 9040 ), pointy . Int32 ( 9140 ), pointy . Int32 ( 9240 ), pointy . Int32 ( 9340 ), pointy . Int32 ( 9440 ), pointy . Int32 ( 9540 ), pointy . Int32 ( 9640 ), pointy . Int32 ( 9740 ), pointy . Int32 ( 9840 ), pointy . Int32 ( 9940 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CreateRecoverIntervalTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e createRecoverIntervalTableMaster ( ( new CreateRecoverIntervalTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"recover-interval-table-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withExperienceModelId ( \"experienceModelId-0001\" ) -\u003e withValues ([ 40 , 140 , 240 , 340 , 440 , 540 , 640 , 740 , 840 , 940 , 1040 , 1140 , 1240 , 1340 , 1440 , 1540 , 1640 , 1740 , 1840 , 1940 , 2040 , 2140 , 2240 , 2340 , 2440 , 2540 , 2640 , 2740 , 2840 , 2940 , 3040 , 3140 , 3240 , 3340 , 3440 , 3540 , 3640 , 3740 , 3840 , 3940 , 4040 , 4140 , 4240 , 4340 , 4440 , 4540 , 4640 , 4740 , 4840 , 4940 , 5040 , 5140 , 5240 , 5340 , 5440 , 5540 , 5640 , 5740 , 5840 , 5940 , 6040 , 6140 , 6240 , 6340 , 6440 , 6540 , 6640 , 6740 , 6840 , 6940 , 7040 , 7140 , 7240 , 7340 , 7440 , 7540 , 7640 , 7740 , 7840 , 7940 , 8040 , 8140 , 8240 , 8340 , 8440 , 8540 , 8640 , 8740 , 8840 , 8940 , 9040 , 9140 , 9240 , 9340 , 9440 , 9540 , 9640 , 9740 , 9840 , 9940 , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CreateRecoverIntervalTableMasterRequest ; import io.gs2.stamina.result.CreateRecoverIntervalTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CreateRecoverIntervalTableMasterResult result = client . createRecoverIntervalTableMaster ( new CreateRecoverIntervalTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"recover-interval-table-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-0001\" ) . withValues ( Arrays . asList ( 40 , 140 , 240 , 340 , 440 , 540 , 640 , 740 , 840 , 940 , 1040 , 1140 , 1240 , 1340 , 1440 , 1540 , 1640 , 1740 , 1840 , 1940 , 2040 , 2140 , 2240 , 2340 , 2440 , 2540 , 2640 , 2740 , 2840 , 2940 , 3040 , 3140 , 3240 , 3340 , 3440 , 3540 , 3640 , 3740 , 3840 , 3940 , 4040 , 4140 , 4240 , 4340 , 4440 , 4540 , 4640 , 4740 , 4840 , 4940 , 5040 , 5140 , 5240 , 5340 , 5440 , 5540 , 5640 , 5740 , 5840 , 5940 , 6040 , 6140 , 6240 , 6340 , 6440 , 6540 , 6640 , 6740 , 6840 , 6940 , 7040 , 7140 , 7240 , 7340 , 7440 , 7540 , 7640 , 7740 , 7840 , 7940 , 8040 , 8140 , 8240 , 8340 , 8440 , 8540 , 8640 , 8740 , 8840 , 8940 , 9040 , 9140 , 9240 , 9340 , 9440 , 9540 , 9640 , 9740 , 9840 , 9940 )) ); RecoverIntervalTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CreateRecoverIntervalTableMasterResult \u003e asyncResult = null ; yield return client . CreateRecoverIntervalTableMaster ( new Gs2 . Gs2Stamina . Request . CreateRecoverIntervalTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"recover-interval-table-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithExperienceModelId ( \"experienceModelId-0001\" ) . WithValues ( new int [] { 40 , 140 , 240 , 340 , 440 , 540 , 640 , 740 , 840 , 940 , 1040 , 1140 , 1240 , 1340 , 1440 , 1540 , 1640 , 1740 , 1840 , 1940 , 2040 , 2140 , 2240 , 2340 , 2440 , 2540 , 2640 , 2740 , 2840 , 2940 , 3040 , 3140 , 3240 , 3340 , 3440 , 3540 , 3640 , 3740 , 3840 , 3940 , 4040 , 4140 , 4240 , 4340 , 4440 , 4540 , 4640 , 4740 , 4840 , 4940 , 5040 , 5140 , 5240 , 5340 , 5440 , 5540 , 5640 , 5740 , 5840 , 5940 , 6040 , 6140 , 6240 , 6340 , 6440 , 6540 , 6640 , 6740 , 6840 , 6940 , 7040 , 7140 , 7240 , 7340 , 7440 , 7540 , 7640 , 7740 , 7840 , 7940 , 8040 , 8140 , 8240 , 8340 , 8440 , 8540 , 8640 , 8740 , 8840 , 8940 , 9040 , 9140 , 9240 , 9340 , 9440 , 9540 , 9640 , 9740 , 9840 , 9940 , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . createRecoverIntervalTableMaster ( new Gs2Stamina . CreateRecoverIntervalTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"recover-interval-table-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-0001\" ) . withValues ([ 40 , 140 , 240 , 340 , 440 , 540 , 640 , 740 , 840 , 940 , 1040 , 1140 , 1240 , 1340 , 1440 , 1540 , 1640 , 1740 , 1840 , 1940 , 2040 , 2140 , 2240 , 2340 , 2440 , 2540 , 2640 , 2740 , 2840 , 2940 , 3040 , 3140 , 3240 , 3340 , 3440 , 3540 , 3640 , 3740 , 3840 , 3940 , 4040 , 4140 , 4240 , 4340 , 4440 , 4540 , 4640 , 4740 , 4840 , 4940 , 5040 , 5140 , 5240 , 5340 , 5440 , 5540 , 5640 , 5740 , 5840 , 5940 , 6040 , 6140 , 6240 , 6340 , 6440 , 6540 , 6640 , 6740 , 6840 , 6940 , 7040 , 7140 , 7240 , 7340 , 7440 , 7540 , 7640 , 7740 , 7840 , 7940 , 8040 , 8140 , 8240 , 8340 , 8440 , 8540 , 8640 , 8740 , 8840 , 8940 , 9040 , 9140 , 9240 , 9340 , 9440 , 9540 , 9640 , 9740 , 9840 , 9940 , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . create_recover_interval_table_master ( stamina . CreateRecoverIntervalTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'recover-interval-table-0001' ) . with_description ( None ) . with_metadata ( None ) . with_experience_model_id ( 'experienceModelId-0001' ) . with_values ([ 40 , 140 , 240 , 340 , 440 , 540 , 640 , 740 , 840 , 940 , 1040 , 1140 , 1240 , 1340 , 1440 , 1540 , 1640 , 1740 , 1840 , 1940 , 2040 , 2140 , 2240 , 2340 , 2440 , 2540 , 2640 , 2740 , 2840 , 2940 , 3040 , 3140 , 3240 , 3340 , 3440 , 3540 , 3640 , 3740 , 3840 , 3940 , 4040 , 4140 , 4240 , 4340 , 4440 , 4540 , 4640 , 4740 , 4840 , 4940 , 5040 , 5140 , 5240 , 5340 , 5440 , 5540 , 5640 , 5740 , 5840 , 5940 , 6040 , 6140 , 6240 , 6340 , 6440 , 6540 , 6640 , 6740 , 6840 , 6940 , 7040 , 7140 , 7240 , 7340 , 7440 , 7540 , 7640 , 7740 , 7840 , 7940 , 8040 , 8140 , 8240 , 8340 , 8440 , 8540 , 8640 , 8740 , 8840 , 8940 , 9040 , 9140 , 9240 , 9340 , 9440 , 9540 , 9640 , 9740 , 9840 , 9940 , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.create_recover_interval_table_master ({ namespaceName = \"namespace-0001\" , name = \"recover-interval-table-0001\" , description = nil , metadata = nil , experienceModelId = \"experienceModelId-0001\" , values = { 40 , 140 , 240 , 340 , 440 , 540 , 640 , 740 , 840 , 940 , 1040 , 1140 , 1240 , 1340 , 1440 , 1540 , 1640 , 1740 , 1840 , 1940 , 2040 , 2140 , 2240 , 2340 , 2440 , 2540 , 2640 , 2740 , 2840 , 2940 , 3040 , 3140 , 3240 , 3340 , 3440 , 3540 , 3640 , 3740 , 3840 , 3940 , 4040 , 4140 , 4240 , 4340 , 4440 , 4540 , 4640 , 4740 , 4840 , 4940 , 5040 , 5140 , 5240 , 5340 , 5440 , 5540 , 5640 , 5740 , 5840 , 5940 , 6040 , 6140 , 6240 , 6340 , 6440 , 6540 , 6640 , 6740 , 6840 , 6940 , 7040 , 7140 , 7240 , 7340 , 7440 , 7540 , 7640 , 7740 , 7840 , 7940 , 8040 , 8140 , 8240 , 8340 , 8440 , 8540 , 8640 , 8740 , 8840 , 8940 , 9040 , 9140 , 9240 , 9340 , 9440 , 9540 , 9640 , 9740 , 9840 , 9940 }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.create_recover_interval_table_master_async ({ namespaceName = \"namespace-0001\" , name = \"recover-interval-table-0001\" , description = nil , metadata = nil , experienceModelId = \"experienceModelId-0001\" , values = { 40 , 140 , 240 , 340 , 440 , 540 , 640 , 740 , 840 , 940 , 1040 , 1140 , 1240 , 1340 , 1440 , 1540 , 1640 , 1740 , 1840 , 1940 , 2040 , 2140 , 2240 , 2340 , 2440 , 2540 , 2640 , 2740 , 2840 , 2940 , 3040 , 3140 , 3240 , 3340 , 3440 , 3540 , 3640 , 3740 , 3840 , 3940 , 4040 , 4140 , 4240 , 4340 , 4440 , 4540 , 4640 , 4740 , 4840 , 4940 , 5040 , 5140 , 5240 , 5340 , 5440 , 5540 , 5640 , 5740 , 5840 , 5940 , 6040 , 6140 , 6240 , 6340 , 6440 , 6540 , 6640 , 6740 , 6840 , 6940 , 7040 , 7140 , 7240 , 7340 , 7440 , 7540 , 7640 , 7740 , 7840 , 7940 , 8040 , 8140 , 8240 , 8340 , 8440 , 8540 , 8640 , 8740 , 8840 , 8940 , 9040 , 9140 , 9240 , 9340 , 9440 , 9540 , 9640 , 9740 , 9840 , 9940 }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRecoverIntervalTableMaster 회복 간격 테이블 마스터를 취득 경험치 모델 연관과 랭크에서 회복 간격으로의 값 매핑을 포함하여, 지정된 회복 간격 테이블 마스터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. recoverIntervalTableName string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item RecoverIntervalTableMaster 회복 간격 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetRecoverIntervalTableMaster ( \u0026 stamina . GetRecoverIntervalTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RecoverIntervalTableName : pointy . String ( \"recover-interval-table-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetRecoverIntervalTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getRecoverIntervalTableMaster ( ( new GetRecoverIntervalTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetRecoverIntervalTableMasterRequest ; import io.gs2.stamina.result.GetRecoverIntervalTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetRecoverIntervalTableMasterResult result = client . getRecoverIntervalTableMaster ( new GetRecoverIntervalTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) ); RecoverIntervalTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetRecoverIntervalTableMasterResult \u003e asyncResult = null ; yield return client . GetRecoverIntervalTableMaster ( new Gs2 . Gs2Stamina . Request . GetRecoverIntervalTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRecoverIntervalTableName ( \"recover-interval-table-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getRecoverIntervalTableMaster ( new Gs2Stamina . GetRecoverIntervalTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_recover_interval_table_master ( stamina . GetRecoverIntervalTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_recover_interval_table_name ( 'recover-interval-table-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_recover_interval_table_master ({ namespaceName = \"namespace-0001\" , recoverIntervalTableName = \"recover-interval-table-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.get_recover_interval_table_master_async ({ namespaceName = \"namespace-0001\" , recoverIntervalTableName = \"recover-interval-table-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRecoverIntervalTableMaster 회복 간격 테이블 마스터를 업데이트 지정된 회복 간격 테이블 마스터의 설명, 메타데이터, 경험치 모델 연관, 랭크에서 회복 간격으로의 값 매핑을 업데이트합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. recoverIntervalTableName string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복 간격이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복 간격 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복 간격 값(분 단위)의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 회복 간격으로 사용되며, 모델의 기본값 recoverIntervalMinutes를 오버라이드합니다. Result 타입 설명 item RecoverIntervalTableMaster 업데이트한 회복 간격 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . UpdateRecoverIntervalTableMaster ( \u0026 stamina . UpdateRecoverIntervalTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RecoverIntervalTableName : pointy . String ( \"recover-interval-table-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , ExperienceModelId : pointy . String ( \"experienceModelId-1001\" ), Values : [] * int32 { pointy . Int32 ( 40 ), pointy . Int32 ( 190 ), pointy . Int32 ( 340 ), pointy . Int32 ( 490 ), pointy . Int32 ( 640 ), pointy . Int32 ( 790 ), pointy . Int32 ( 940 ), pointy . Int32 ( 1090 ), pointy . Int32 ( 1240 ), pointy . Int32 ( 1390 ), pointy . Int32 ( 1540 ), pointy . Int32 ( 1690 ), pointy . Int32 ( 1840 ), pointy . Int32 ( 1990 ), pointy . Int32 ( 2140 ), pointy . Int32 ( 2290 ), pointy . Int32 ( 2440 ), pointy . Int32 ( 2590 ), pointy . Int32 ( 2740 ), pointy . Int32 ( 2890 ), pointy . Int32 ( 3040 ), pointy . Int32 ( 3190 ), pointy . Int32 ( 3340 ), pointy . Int32 ( 3490 ), pointy . Int32 ( 3640 ), pointy . Int32 ( 3790 ), pointy . Int32 ( 3940 ), pointy . Int32 ( 4090 ), pointy . Int32 ( 4240 ), pointy . Int32 ( 4390 ), pointy . Int32 ( 4540 ), pointy . Int32 ( 4690 ), pointy . Int32 ( 4840 ), pointy . Int32 ( 4990 ), pointy . Int32 ( 5140 ), pointy . Int32 ( 5290 ), pointy . Int32 ( 5440 ), pointy . Int32 ( 5590 ), pointy . Int32 ( 5740 ), pointy . Int32 ( 5890 ), pointy . Int32 ( 6040 ), pointy . Int32 ( 6190 ), pointy . Int32 ( 6340 ), pointy . Int32 ( 6490 ), pointy . Int32 ( 6640 ), pointy . Int32 ( 6790 ), pointy . Int32 ( 6940 ), pointy . Int32 ( 7090 ), pointy . Int32 ( 7240 ), pointy . Int32 ( 7390 ), pointy . Int32 ( 7540 ), pointy . Int32 ( 7690 ), pointy . Int32 ( 7840 ), pointy . Int32 ( 7990 ), pointy . Int32 ( 8140 ), pointy . Int32 ( 8290 ), pointy . Int32 ( 8440 ), pointy . Int32 ( 8590 ), pointy . Int32 ( 8740 ), pointy . Int32 ( 8890 ), pointy . Int32 ( 9040 ), pointy . Int32 ( 9190 ), pointy . Int32 ( 9340 ), pointy . Int32 ( 9490 ), pointy . Int32 ( 9640 ), pointy . Int32 ( 9790 ), pointy . Int32 ( 9940 ), pointy . Int32 ( 10090 ), pointy . Int32 ( 10240 ), pointy . Int32 ( 10390 ), pointy . Int32 ( 10540 ), pointy . Int32 ( 10690 ), pointy . Int32 ( 10840 ), pointy . Int32 ( 10990 ), pointy . Int32 ( 11140 ), pointy . Int32 ( 11290 ), pointy . Int32 ( 11440 ), pointy . Int32 ( 11590 ), pointy . Int32 ( 11740 ), pointy . Int32 ( 11890 ), pointy . Int32 ( 12040 ), pointy . Int32 ( 12190 ), pointy . Int32 ( 12340 ), pointy . Int32 ( 12490 ), pointy . Int32 ( 12640 ), pointy . Int32 ( 12790 ), pointy . Int32 ( 12940 ), pointy . Int32 ( 13090 ), pointy . Int32 ( 13240 ), pointy . Int32 ( 13390 ), pointy . Int32 ( 13540 ), pointy . Int32 ( 13690 ), pointy . Int32 ( 13840 ), pointy . Int32 ( 13990 ), pointy . Int32 ( 14140 ), pointy . Int32 ( 14290 ), pointy . Int32 ( 14440 ), pointy . Int32 ( 14590 ), pointy . Int32 ( 14740 ), pointy . Int32 ( 14890 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\UpdateRecoverIntervalTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e updateRecoverIntervalTableMaster ( ( new UpdateRecoverIntervalTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withExperienceModelId ( \"experienceModelId-1001\" ) -\u003e withValues ([ 40 , 190 , 340 , 490 , 640 , 790 , 940 , 1090 , 1240 , 1390 , 1540 , 1690 , 1840 , 1990 , 2140 , 2290 , 2440 , 2590 , 2740 , 2890 , 3040 , 3190 , 3340 , 3490 , 3640 , 3790 , 3940 , 4090 , 4240 , 4390 , 4540 , 4690 , 4840 , 4990 , 5140 , 5290 , 5440 , 5590 , 5740 , 5890 , 6040 , 6190 , 6340 , 6490 , 6640 , 6790 , 6940 , 7090 , 7240 , 7390 , 7540 , 7690 , 7840 , 7990 , 8140 , 8290 , 8440 , 8590 , 8740 , 8890 , 9040 , 9190 , 9340 , 9490 , 9640 , 9790 , 9940 , 10090 , 10240 , 10390 , 10540 , 10690 , 10840 , 10990 , 11140 , 11290 , 11440 , 11590 , 11740 , 11890 , 12040 , 12190 , 12340 , 12490 , 12640 , 12790 , 12940 , 13090 , 13240 , 13390 , 13540 , 13690 , 13840 , 13990 , 14140 , 14290 , 14440 , 14590 , 14740 , 14890 , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.UpdateRecoverIntervalTableMasterRequest ; import io.gs2.stamina.result.UpdateRecoverIntervalTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { UpdateRecoverIntervalTableMasterResult result = client . updateRecoverIntervalTableMaster ( new UpdateRecoverIntervalTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-1001\" ) . withValues ( Arrays . asList ( 40 , 190 , 340 , 490 , 640 , 790 , 940 , 1090 , 1240 , 1390 , 1540 , 1690 , 1840 , 1990 , 2140 , 2290 , 2440 , 2590 , 2740 , 2890 , 3040 , 3190 , 3340 , 3490 , 3640 , 3790 , 3940 , 4090 , 4240 , 4390 , 4540 , 4690 , 4840 , 4990 , 5140 , 5290 , 5440 , 5590 , 5740 , 5890 , 6040 , 6190 , 6340 , 6490 , 6640 , 6790 , 6940 , 7090 , 7240 , 7390 , 7540 , 7690 , 7840 , 7990 , 8140 , 8290 , 8440 , 8590 , 8740 , 8890 , 9040 , 9190 , 9340 , 9490 , 9640 , 9790 , 9940 , 10090 , 10240 , 10390 , 10540 , 10690 , 10840 , 10990 , 11140 , 11290 , 11440 , 11590 , 11740 , 11890 , 12040 , 12190 , 12340 , 12490 , 12640 , 12790 , 12940 , 13090 , 13240 , 13390 , 13540 , 13690 , 13840 , 13990 , 14140 , 14290 , 14440 , 14590 , 14740 , 14890 )) ); RecoverIntervalTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . UpdateRecoverIntervalTableMasterResult \u003e asyncResult = null ; yield return client . UpdateRecoverIntervalTableMaster ( new Gs2 . Gs2Stamina . Request . UpdateRecoverIntervalTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRecoverIntervalTableName ( \"recover-interval-table-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithExperienceModelId ( \"experienceModelId-1001\" ) . WithValues ( new int [] { 40 , 190 , 340 , 490 , 640 , 790 , 940 , 1090 , 1240 , 1390 , 1540 , 1690 , 1840 , 1990 , 2140 , 2290 , 2440 , 2590 , 2740 , 2890 , 3040 , 3190 , 3340 , 3490 , 3640 , 3790 , 3940 , 4090 , 4240 , 4390 , 4540 , 4690 , 4840 , 4990 , 5140 , 5290 , 5440 , 5590 , 5740 , 5890 , 6040 , 6190 , 6340 , 6490 , 6640 , 6790 , 6940 , 7090 , 7240 , 7390 , 7540 , 7690 , 7840 , 7990 , 8140 , 8290 , 8440 , 8590 , 8740 , 8890 , 9040 , 9190 , 9340 , 9490 , 9640 , 9790 , 9940 , 10090 , 10240 , 10390 , 10540 , 10690 , 10840 , 10990 , 11140 , 11290 , 11440 , 11590 , 11740 , 11890 , 12040 , 12190 , 12340 , 12490 , 12640 , 12790 , 12940 , 13090 , 13240 , 13390 , 13540 , 13690 , 13840 , 13990 , 14140 , 14290 , 14440 , 14590 , 14740 , 14890 , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . updateRecoverIntervalTableMaster ( new Gs2Stamina . UpdateRecoverIntervalTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-1001\" ) . withValues ([ 40 , 190 , 340 , 490 , 640 , 790 , 940 , 1090 , 1240 , 1390 , 1540 , 1690 , 1840 , 1990 , 2140 , 2290 , 2440 , 2590 , 2740 , 2890 , 3040 , 3190 , 3340 , 3490 , 3640 , 3790 , 3940 , 4090 , 4240 , 4390 , 4540 , 4690 , 4840 , 4990 , 5140 , 5290 , 5440 , 5590 , 5740 , 5890 , 6040 , 6190 , 6340 , 6490 , 6640 , 6790 , 6940 , 7090 , 7240 , 7390 , 7540 , 7690 , 7840 , 7990 , 8140 , 8290 , 8440 , 8590 , 8740 , 8890 , 9040 , 9190 , 9340 , 9490 , 9640 , 9790 , 9940 , 10090 , 10240 , 10390 , 10540 , 10690 , 10840 , 10990 , 11140 , 11290 , 11440 , 11590 , 11740 , 11890 , 12040 , 12190 , 12340 , 12490 , 12640 , 12790 , 12940 , 13090 , 13240 , 13390 , 13540 , 13690 , 13840 , 13990 , 14140 , 14290 , 14440 , 14590 , 14740 , 14890 , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . update_recover_interval_table_master ( stamina . UpdateRecoverIntervalTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_recover_interval_table_name ( 'recover-interval-table-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_experience_model_id ( 'experienceModelId-1001' ) . with_values ([ 40 , 190 , 340 , 490 , 640 , 790 , 940 , 1090 , 1240 , 1390 , 1540 , 1690 , 1840 , 1990 , 2140 , 2290 , 2440 , 2590 , 2740 , 2890 , 3040 , 3190 , 3340 , 3490 , 3640 , 3790 , 3940 , 4090 , 4240 , 4390 , 4540 , 4690 , 4840 , 4990 , 5140 , 5290 , 5440 , 5590 , 5740 , 5890 , 6040 , 6190 , 6340 , 6490 , 6640 , 6790 , 6940 , 7090 , 7240 , 7390 , 7540 , 7690 , 7840 , 7990 , 8140 , 8290 , 8440 , 8590 , 8740 , 8890 , 9040 , 9190 , 9340 , 9490 , 9640 , 9790 , 9940 , 10090 , 10240 , 10390 , 10540 , 10690 , 10840 , 10990 , 11140 , 11290 , 11440 , 11590 , 11740 , 11890 , 12040 , 12190 , 12340 , 12490 , 12640 , 12790 , 12940 , 13090 , 13240 , 13390 , 13540 , 13690 , 13840 , 13990 , 14140 , 14290 , 14440 , 14590 , 14740 , 14890 , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.update_recover_interval_table_master ({ namespaceName = \"namespace-0001\" , recoverIntervalTableName = \"recover-interval-table-0001\" , description = \"description1\" , metadata = nil , experienceModelId = \"experienceModelId-1001\" , values = { 40 , 190 , 340 , 490 , 640 , 790 , 940 , 1090 , 1240 , 1390 , 1540 , 1690 , 1840 , 1990 , 2140 , 2290 , 2440 , 2590 , 2740 , 2890 , 3040 , 3190 , 3340 , 3490 , 3640 , 3790 , 3940 , 4090 , 4240 , 4390 , 4540 , 4690 , 4840 , 4990 , 5140 , 5290 , 5440 , 5590 , 5740 , 5890 , 6040 , 6190 , 6340 , 6490 , 6640 , 6790 , 6940 , 7090 , 7240 , 7390 , 7540 , 7690 , 7840 , 7990 , 8140 , 8290 , 8440 , 8590 , 8740 , 8890 , 9040 , 9190 , 9340 , 9490 , 9640 , 9790 , 9940 , 10090 , 10240 , 10390 , 10540 , 10690 , 10840 , 10990 , 11140 , 11290 , 11440 , 11590 , 11740 , 11890 , 12040 , 12190 , 12340 , 12490 , 12640 , 12790 , 12940 , 13090 , 13240 , 13390 , 13540 , 13690 , 13840 , 13990 , 14140 , 14290 , 14440 , 14590 , 14740 , 14890 }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.update_recover_interval_table_master_async ({ namespaceName = \"namespace-0001\" , recoverIntervalTableName = \"recover-interval-table-0001\" , description = \"description1\" , metadata = nil , experienceModelId = \"experienceModelId-1001\" , values = { 40 , 190 , 340 , 490 , 640 , 790 , 940 , 1090 , 1240 , 1390 , 1540 , 1690 , 1840 , 1990 , 2140 , 2290 , 2440 , 2590 , 2740 , 2890 , 3040 , 3190 , 3340 , 3490 , 3640 , 3790 , 3940 , 4090 , 4240 , 4390 , 4540 , 4690 , 4840 , 4990 , 5140 , 5290 , 5440 , 5590 , 5740 , 5890 , 6040 , 6190 , 6340 , 6490 , 6640 , 6790 , 6940 , 7090 , 7240 , 7390 , 7540 , 7690 , 7840 , 7990 , 8140 , 8290 , 8440 , 8590 , 8740 , 8890 , 9040 , 9190 , 9340 , 9490 , 9640 , 9790 , 9940 , 10090 , 10240 , 10390 , 10540 , 10690 , 10840 , 10990 , 11140 , 11290 , 11440 , 11590 , 11740 , 11890 , 12040 , 12190 , 12340 , 12490 , 12640 , 12790 , 12940 , 13090 , 13240 , 13390 , 13540 , 13690 , 13840 , 13990 , 14140 , 14290 , 14440 , 14590 , 14740 , 14890 }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRecoverIntervalTableMaster 회복 간격 테이블 마스터를 삭제 지정된 회복 간격 테이블 마스터를 삭제합니다. 이는 마스터 정의만을 삭제하며, 현재 활성화된 스태미나 설정에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. recoverIntervalTableName string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. Result 타입 설명 item RecoverIntervalTableMaster 삭제한 회복 간격 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DeleteRecoverIntervalTableMaster ( \u0026 stamina . DeleteRecoverIntervalTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RecoverIntervalTableName : pointy . String ( \"recover-interval-table-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DeleteRecoverIntervalTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e deleteRecoverIntervalTableMaster ( ( new DeleteRecoverIntervalTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DeleteRecoverIntervalTableMasterRequest ; import io.gs2.stamina.result.DeleteRecoverIntervalTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DeleteRecoverIntervalTableMasterResult result = client . deleteRecoverIntervalTableMaster ( new DeleteRecoverIntervalTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) ); RecoverIntervalTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DeleteRecoverIntervalTableMasterResult \u003e asyncResult = null ; yield return client . DeleteRecoverIntervalTableMaster ( new Gs2 . Gs2Stamina . Request . DeleteRecoverIntervalTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRecoverIntervalTableName ( \"recover-interval-table-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . deleteRecoverIntervalTableMaster ( new Gs2Stamina . DeleteRecoverIntervalTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverIntervalTableName ( \"recover-interval-table-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . delete_recover_interval_table_master ( stamina . DeleteRecoverIntervalTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_recover_interval_table_name ( 'recover-interval-table-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.delete_recover_interval_table_master ({ namespaceName = \"namespace-0001\" , recoverIntervalTableName = \"recover-interval-table-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.delete_recover_interval_table_master_async ({ namespaceName = \"namespace-0001\" , recoverIntervalTableName = \"recover-interval-table-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeRecoverValueTableMasters 스태미나 회복량 테이블 마스터 목록 가져오기 스태미나 회복량 테이블 마스터의 페이지네이션 리스트를 가져옵니다. 이름의 접두사로 필터링할 수 있습니다. 이 테이블들은 경험치 랭크 값을 간격별 스태미나 회복량에 매핑하여 레벨 기반의 회복량 스케일링을 가능하게 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 스태미나 회복량 테이블 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 스태미나 회복량 테이블 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DescribeRecoverValueTableMasters ( \u0026 stamina . DescribeRecoverValueTableMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DescribeRecoverValueTableMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e describeRecoverValueTableMasters ( ( new DescribeRecoverValueTableMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DescribeRecoverValueTableMastersRequest ; import io.gs2.stamina.result.DescribeRecoverValueTableMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DescribeRecoverValueTableMastersResult result = client . describeRecoverValueTableMasters ( new DescribeRecoverValueTableMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List RecoverValueTableMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DescribeRecoverValueTableMastersResult \u003e asyncResult = null ; yield return client . DescribeRecoverValueTableMasters ( new Gs2 . Gs2Stamina . Request . DescribeRecoverValueTableMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . describeRecoverValueTableMasters ( new Gs2Stamina . DescribeRecoverValueTableMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . describe_recover_value_table_masters ( stamina . DescribeRecoverValueTableMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.describe_recover_value_table_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'stamina' ) api_result_handler = client.describe_recover_value_table_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createRecoverValueTableMaster 스태미나 회복량 테이블 마스터 신규 생성 경험치 모델 ID와 값 배열을 가진 새로운 스태미나 회복량 테이블 마스터를 생성합니다. 값 배열은 경험치 랭크로 인덱싱되며, 각 랭크를 해당하는 간격별 회복량에 매핑합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복량이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복량 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복량 값의 배열입니다. 인덱스 i의 값은 랭크 i의 플레이어에 대한 틱당 회복량으로 사용되며, 모델의 기본 recoverValue를 오버라이드합니다. Result 타입 설명 item RecoverValueTableMaster 생성한 스태미나 회복량 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . CreateRecoverValueTableMaster ( \u0026 stamina . CreateRecoverValueTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"recover-value-table-0001\" ), Description : nil , Metadata : nil , ExperienceModelId : pointy . String ( \"experienceModelId-0001\" ), Values : [] * int32 { pointy . Int32 ( 30 ), pointy . Int32 ( 130 ), pointy . Int32 ( 230 ), pointy . Int32 ( 330 ), pointy . Int32 ( 430 ), pointy . Int32 ( 530 ), pointy . Int32 ( 630 ), pointy . Int32 ( 730 ), pointy . Int32 ( 830 ), pointy . Int32 ( 930 ), pointy . Int32 ( 1030 ), pointy . Int32 ( 1130 ), pointy . Int32 ( 1230 ), pointy . Int32 ( 1330 ), pointy . Int32 ( 1430 ), pointy . Int32 ( 1530 ), pointy . Int32 ( 1630 ), pointy . Int32 ( 1730 ), pointy . Int32 ( 1830 ), pointy . Int32 ( 1930 ), pointy . Int32 ( 2030 ), pointy . Int32 ( 2130 ), pointy . Int32 ( 2230 ), pointy . Int32 ( 2330 ), pointy . Int32 ( 2430 ), pointy . Int32 ( 2530 ), pointy . Int32 ( 2630 ), pointy . Int32 ( 2730 ), pointy . Int32 ( 2830 ), pointy . Int32 ( 2930 ), pointy . Int32 ( 3030 ), pointy . Int32 ( 3130 ), pointy . Int32 ( 3230 ), pointy . Int32 ( 3330 ), pointy . Int32 ( 3430 ), pointy . Int32 ( 3530 ), pointy . Int32 ( 3630 ), pointy . Int32 ( 3730 ), pointy . Int32 ( 3830 ), pointy . Int32 ( 3930 ), pointy . Int32 ( 4030 ), pointy . Int32 ( 4130 ), pointy . Int32 ( 4230 ), pointy . Int32 ( 4330 ), pointy . Int32 ( 4430 ), pointy . Int32 ( 4530 ), pointy . Int32 ( 4630 ), pointy . Int32 ( 4730 ), pointy . Int32 ( 4830 ), pointy . Int32 ( 4930 ), pointy . Int32 ( 5030 ), pointy . Int32 ( 5130 ), pointy . Int32 ( 5230 ), pointy . Int32 ( 5330 ), pointy . Int32 ( 5430 ), pointy . Int32 ( 5530 ), pointy . Int32 ( 5630 ), pointy . Int32 ( 5730 ), pointy . Int32 ( 5830 ), pointy . Int32 ( 5930 ), pointy . Int32 ( 6030 ), pointy . Int32 ( 6130 ), pointy . Int32 ( 6230 ), pointy . Int32 ( 6330 ), pointy . Int32 ( 6430 ), pointy . Int32 ( 6530 ), pointy . Int32 ( 6630 ), pointy . Int32 ( 6730 ), pointy . Int32 ( 6830 ), pointy . Int32 ( 6930 ), pointy . Int32 ( 7030 ), pointy . Int32 ( 7130 ), pointy . Int32 ( 7230 ), pointy . Int32 ( 7330 ), pointy . Int32 ( 7430 ), pointy . Int32 ( 7530 ), pointy . Int32 ( 7630 ), pointy . Int32 ( 7730 ), pointy . Int32 ( 7830 ), pointy . Int32 ( 7930 ), pointy . Int32 ( 8030 ), pointy . Int32 ( 8130 ), pointy . Int32 ( 8230 ), pointy . Int32 ( 8330 ), pointy . Int32 ( 8430 ), pointy . Int32 ( 8530 ), pointy . Int32 ( 8630 ), pointy . Int32 ( 8730 ), pointy . Int32 ( 8830 ), pointy . Int32 ( 8930 ), pointy . Int32 ( 9030 ), pointy . Int32 ( 9130 ), pointy . Int32 ( 9230 ), pointy . Int32 ( 9330 ), pointy . Int32 ( 9430 ), pointy . Int32 ( 9530 ), pointy . Int32 ( 9630 ), pointy . Int32 ( 9730 ), pointy . Int32 ( 9830 ), pointy . Int32 ( 9930 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\CreateRecoverValueTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e createRecoverValueTableMaster ( ( new CreateRecoverValueTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"recover-value-table-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withExperienceModelId ( \"experienceModelId-0001\" ) -\u003e withValues ([ 30 , 130 , 230 , 330 , 430 , 530 , 630 , 730 , 830 , 930 , 1030 , 1130 , 1230 , 1330 , 1430 , 1530 , 1630 , 1730 , 1830 , 1930 , 2030 , 2130 , 2230 , 2330 , 2430 , 2530 , 2630 , 2730 , 2830 , 2930 , 3030 , 3130 , 3230 , 3330 , 3430 , 3530 , 3630 , 3730 , 3830 , 3930 , 4030 , 4130 , 4230 , 4330 , 4430 , 4530 , 4630 , 4730 , 4830 , 4930 , 5030 , 5130 , 5230 , 5330 , 5430 , 5530 , 5630 , 5730 , 5830 , 5930 , 6030 , 6130 , 6230 , 6330 , 6430 , 6530 , 6630 , 6730 , 6830 , 6930 , 7030 , 7130 , 7230 , 7330 , 7430 , 7530 , 7630 , 7730 , 7830 , 7930 , 8030 , 8130 , 8230 , 8330 , 8430 , 8530 , 8630 , 8730 , 8830 , 8930 , 9030 , 9130 , 9230 , 9330 , 9430 , 9530 , 9630 , 9730 , 9830 , 9930 , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.CreateRecoverValueTableMasterRequest ; import io.gs2.stamina.result.CreateRecoverValueTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { CreateRecoverValueTableMasterResult result = client . createRecoverValueTableMaster ( new CreateRecoverValueTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"recover-value-table-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-0001\" ) . withValues ( Arrays . asList ( 30 , 130 , 230 , 330 , 430 , 530 , 630 , 730 , 830 , 930 , 1030 , 1130 , 1230 , 1330 , 1430 , 1530 , 1630 , 1730 , 1830 , 1930 , 2030 , 2130 , 2230 , 2330 , 2430 , 2530 , 2630 , 2730 , 2830 , 2930 , 3030 , 3130 , 3230 , 3330 , 3430 , 3530 , 3630 , 3730 , 3830 , 3930 , 4030 , 4130 , 4230 , 4330 , 4430 , 4530 , 4630 , 4730 , 4830 , 4930 , 5030 , 5130 , 5230 , 5330 , 5430 , 5530 , 5630 , 5730 , 5830 , 5930 , 6030 , 6130 , 6230 , 6330 , 6430 , 6530 , 6630 , 6730 , 6830 , 6930 , 7030 , 7130 , 7230 , 7330 , 7430 , 7530 , 7630 , 7730 , 7830 , 7930 , 8030 , 8130 , 8230 , 8330 , 8430 , 8530 , 8630 , 8730 , 8830 , 8930 , 9030 , 9130 , 9230 , 9330 , 9430 , 9530 , 9630 , 9730 , 9830 , 9930 )) ); RecoverValueTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . CreateRecoverValueTableMasterResult \u003e asyncResult = null ; yield return client . CreateRecoverValueTableMaster ( new Gs2 . Gs2Stamina . Request . CreateRecoverValueTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"recover-value-table-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithExperienceModelId ( \"experienceModelId-0001\" ) . WithValues ( new int [] { 30 , 130 , 230 , 330 , 430 , 530 , 630 , 730 , 830 , 930 , 1030 , 1130 , 1230 , 1330 , 1430 , 1530 , 1630 , 1730 , 1830 , 1930 , 2030 , 2130 , 2230 , 2330 , 2430 , 2530 , 2630 , 2730 , 2830 , 2930 , 3030 , 3130 , 3230 , 3330 , 3430 , 3530 , 3630 , 3730 , 3830 , 3930 , 4030 , 4130 , 4230 , 4330 , 4430 , 4530 , 4630 , 4730 , 4830 , 4930 , 5030 , 5130 , 5230 , 5330 , 5430 , 5530 , 5630 , 5730 , 5830 , 5930 , 6030 , 6130 , 6230 , 6330 , 6430 , 6530 , 6630 , 6730 , 6830 , 6930 , 7030 , 7130 , 7230 , 7330 , 7430 , 7530 , 7630 , 7730 , 7830 , 7930 , 8030 , 8130 , 8230 , 8330 , 8430 , 8530 , 8630 , 8730 , 8830 , 8930 , 9030 , 9130 , 9230 , 9330 , 9430 , 9530 , 9630 , 9730 , 9830 , 9930 , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . createRecoverValueTableMaster ( new Gs2Stamina . CreateRecoverValueTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"recover-value-table-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-0001\" ) . withValues ([ 30 , 130 , 230 , 330 , 430 , 530 , 630 , 730 , 830 , 930 , 1030 , 1130 , 1230 , 1330 , 1430 , 1530 , 1630 , 1730 , 1830 , 1930 , 2030 , 2130 , 2230 , 2330 , 2430 , 2530 , 2630 , 2730 , 2830 , 2930 , 3030 , 3130 , 3230 , 3330 , 3430 , 3530 , 3630 , 3730 , 3830 , 3930 , 4030 , 4130 , 4230 , 4330 , 4430 , 4530 , 4630 , 4730 , 4830 , 4930 , 5030 , 5130 , 5230 , 5330 , 5430 , 5530 , 5630 , 5730 , 5830 , 5930 , 6030 , 6130 , 6230 , 6330 , 6430 , 6530 , 6630 , 6730 , 6830 , 6930 , 7030 , 7130 , 7230 , 7330 , 7430 , 7530 , 7630 , 7730 , 7830 , 7930 , 8030 , 8130 , 8230 , 8330 , 8430 , 8530 , 8630 , 8730 , 8830 , 8930 , 9030 , 9130 , 9230 , 9330 , 9430 , 9530 , 9630 , 9730 , 9830 , 9930 , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . create_recover_value_table_master ( stamina . CreateRecoverValueTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'recover-value-table-0001' ) . with_description ( None ) . with_metadata ( None ) . with_experience_model_id ( 'experienceModelId-0001' ) . with_values ([ 30 , 130 , 230 , 330 , 430 , 530 , 630 , 730 , 830 , 930 , 1030 , 1130 , 1230 , 1330 , 1430 , 1530 , 1630 , 1730 , 1830 , 1930 , 2030 , 2130 , 2230 , 2330 , 2430 , 2530 , 2630 , 2730 , 2830 , 2930 , 3030 , 3130 , 3230 , 3330 , 3430 , 3530 , 3630 , 3730 , 3830 , 3930 , 4030 , 4130 , 4230 , 4330 , 4430 , 4530 , 4630 , 4730 , 4830 , 4930 , 5030 , 5130 , 5230 , 5330 , 5430 , 5530 , 5630 , 5730 , 5830 , 5930 , 6030 , 6130 , 6230 , 6330 , 6430 , 6530 , 6630 , 6730 , 6830 , 6930 , 7030 , 7130 , 7230 , 7330 , 7430 , 7530 , 7630 , 7730 , 7830 , 7930 , 8030 , 8130 , 8230 , 8330 , 8430 , 8530 , 8630 , 8730 , 8830 , 8930 , 9030 , 9130 , 9230 , 9330 , 9430 , 9530 , 9630 , 9730 , 9830 , 9930 , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.create_recover_value_table_master ({ namespaceName = \"namespace-0001\" , name = \"recover-value-table-0001\" , description = nil , metadata = nil , experienceModelId = \"experienceModelId-0001\" , values = { 30 , 130 , 230 , 330 , 430 , 530 , 630 , 730 , 830 , 930 , 1030 , 1130 , 1230 , 1330 , 1430 , 1530 , 1630 , 1730 , 1830 , 1930 , 2030 , 2130 , 2230 , 2330 , 2430 , 2530 , 2630 , 2730 , 2830 , 2930 , 3030 , 3130 , 3230 , 3330 , 3430 , 3530 , 3630 , 3730 , 3830 , 3930 , 4030 , 4130 , 4230 , 4330 , 4430 , 4530 , 4630 , 4730 , 4830 , 4930 , 5030 , 5130 , 5230 , 5330 , 5430 , 5530 , 5630 , 5730 , 5830 , 5930 , 6030 , 6130 , 6230 , 6330 , 6430 , 6530 , 6630 , 6730 , 6830 , 6930 , 7030 , 7130 , 7230 , 7330 , 7430 , 7530 , 7630 , 7730 , 7830 , 7930 , 8030 , 8130 , 8230 , 8330 , 8430 , 8530 , 8630 , 8730 , 8830 , 8930 , 9030 , 9130 , 9230 , 9330 , 9430 , 9530 , 9630 , 9730 , 9830 , 9930 }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.create_recover_value_table_master_async ({ namespaceName = \"namespace-0001\" , name = \"recover-value-table-0001\" , description = nil , metadata = nil , experienceModelId = \"experienceModelId-0001\" , values = { 30 , 130 , 230 , 330 , 430 , 530 , 630 , 730 , 830 , 930 , 1030 , 1130 , 1230 , 1330 , 1430 , 1530 , 1630 , 1730 , 1830 , 1930 , 2030 , 2130 , 2230 , 2330 , 2430 , 2530 , 2630 , 2730 , 2830 , 2930 , 3030 , 3130 , 3230 , 3330 , 3430 , 3530 , 3630 , 3730 , 3830 , 3930 , 4030 , 4130 , 4230 , 4330 , 4430 , 4530 , 4630 , 4730 , 4830 , 4930 , 5030 , 5130 , 5230 , 5330 , 5430 , 5530 , 5630 , 5730 , 5830 , 5930 , 6030 , 6130 , 6230 , 6330 , 6430 , 6530 , 6630 , 6730 , 6830 , 6930 , 7030 , 7130 , 7230 , 7330 , 7430 , 7530 , 7630 , 7730 , 7830 , 7930 , 8030 , 8130 , 8230 , 8330 , 8430 , 8530 , 8630 , 8730 , 8830 , 8930 , 9030 , 9130 , 9230 , 9330 , 9430 , 9530 , 9630 , 9730 , 9830 , 9930 }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getRecoverValueTableMaster 스태미나 회복량 테이블 마스터 가져오기 경험치 모델 연관 정보와 랭크에서 회복량으로의 값 매핑을 포함하여, 지정된 스태미나 회복량 테이블 마스터를 가져옵니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. recoverValueTableName string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item RecoverValueTableMaster 스태미나 회복량 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . GetRecoverValueTableMaster ( \u0026 stamina . GetRecoverValueTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RecoverValueTableName : pointy . String ( \"recover-value-table-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\GetRecoverValueTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e getRecoverValueTableMaster ( ( new GetRecoverValueTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRecoverValueTableName ( \"recover-value-table-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.GetRecoverValueTableMasterRequest ; import io.gs2.stamina.result.GetRecoverValueTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { GetRecoverValueTableMasterResult result = client . getRecoverValueTableMaster ( new GetRecoverValueTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverValueTableName ( \"recover-value-table-0001\" ) ); RecoverValueTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . GetRecoverValueTableMasterResult \u003e asyncResult = null ; yield return client . GetRecoverValueTableMaster ( new Gs2 . Gs2Stamina . Request . GetRecoverValueTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRecoverValueTableName ( \"recover-value-table-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . getRecoverValueTableMaster ( new Gs2Stamina . GetRecoverValueTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverValueTableName ( \"recover-value-table-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . get_recover_value_table_master ( stamina . GetRecoverValueTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_recover_value_table_name ( 'recover-value-table-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.get_recover_value_table_master ({ namespaceName = \"namespace-0001\" , recoverValueTableName = \"recover-value-table-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.get_recover_value_table_master_async ({ namespaceName = \"namespace-0001\" , recoverValueTableName = \"recover-value-table-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateRecoverValueTableMaster 스태미나 회복량 테이블 마스터 갱신 지정된 스태미나 회복량 테이블 마스터의 설명, 메타데이터, 경험치 모델 연관 정보, 랭크에서 회복량으로의 값 매핑을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. recoverValueTableName string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복량이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복량 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복량 값의 배열입니다. 인덱스 i의 값은 랭크 i의 플레이어에 대한 틱당 회복량으로 사용되며, 모델의 기본 recoverValue를 오버라이드합니다. Result 타입 설명 item RecoverValueTableMaster 갱신한 스태미나 회복량 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . UpdateRecoverValueTableMaster ( \u0026 stamina . UpdateRecoverValueTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RecoverValueTableName : pointy . String ( \"recover-value-table-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : nil , ExperienceModelId : pointy . String ( \"experienceModelId-1001\" ), Values : [] * int32 { pointy . Int32 ( 30 ), pointy . Int32 ( 180 ), pointy . Int32 ( 330 ), pointy . Int32 ( 480 ), pointy . Int32 ( 630 ), pointy . Int32 ( 780 ), pointy . Int32 ( 930 ), pointy . Int32 ( 1080 ), pointy . Int32 ( 1230 ), pointy . Int32 ( 1380 ), pointy . Int32 ( 1530 ), pointy . Int32 ( 1680 ), pointy . Int32 ( 1830 ), pointy . Int32 ( 1980 ), pointy . Int32 ( 2130 ), pointy . Int32 ( 2280 ), pointy . Int32 ( 2430 ), pointy . Int32 ( 2580 ), pointy . Int32 ( 2730 ), pointy . Int32 ( 2880 ), pointy . Int32 ( 3030 ), pointy . Int32 ( 3180 ), pointy . Int32 ( 3330 ), pointy . Int32 ( 3480 ), pointy . Int32 ( 3630 ), pointy . Int32 ( 3780 ), pointy . Int32 ( 3930 ), pointy . Int32 ( 4080 ), pointy . Int32 ( 4230 ), pointy . Int32 ( 4380 ), pointy . Int32 ( 4530 ), pointy . Int32 ( 4680 ), pointy . Int32 ( 4830 ), pointy . Int32 ( 4980 ), pointy . Int32 ( 5130 ), pointy . Int32 ( 5280 ), pointy . Int32 ( 5430 ), pointy . Int32 ( 5580 ), pointy . Int32 ( 5730 ), pointy . Int32 ( 5880 ), pointy . Int32 ( 6030 ), pointy . Int32 ( 6180 ), pointy . Int32 ( 6330 ), pointy . Int32 ( 6480 ), pointy . Int32 ( 6630 ), pointy . Int32 ( 6780 ), pointy . Int32 ( 6930 ), pointy . Int32 ( 7080 ), pointy . Int32 ( 7230 ), pointy . Int32 ( 7380 ), pointy . Int32 ( 7530 ), pointy . Int32 ( 7680 ), pointy . Int32 ( 7830 ), pointy . Int32 ( 7980 ), pointy . Int32 ( 8130 ), pointy . Int32 ( 8280 ), pointy . Int32 ( 8430 ), pointy . Int32 ( 8580 ), pointy . Int32 ( 8730 ), pointy . Int32 ( 8880 ), pointy . Int32 ( 9030 ), pointy . Int32 ( 9180 ), pointy . Int32 ( 9330 ), pointy . Int32 ( 9480 ), pointy . Int32 ( 9630 ), pointy . Int32 ( 9780 ), pointy . Int32 ( 9930 ), pointy . Int32 ( 10080 ), pointy . Int32 ( 10230 ), pointy . Int32 ( 10380 ), pointy . Int32 ( 10530 ), pointy . Int32 ( 10680 ), pointy . Int32 ( 10830 ), pointy . Int32 ( 10980 ), pointy . Int32 ( 11130 ), pointy . Int32 ( 11280 ), pointy . Int32 ( 11430 ), pointy . Int32 ( 11580 ), pointy . Int32 ( 11730 ), pointy . Int32 ( 11880 ), pointy . Int32 ( 12030 ), pointy . Int32 ( 12180 ), pointy . Int32 ( 12330 ), pointy . Int32 ( 12480 ), pointy . Int32 ( 12630 ), pointy . Int32 ( 12780 ), pointy . Int32 ( 12930 ), pointy . Int32 ( 13080 ), pointy . Int32 ( 13230 ), pointy . Int32 ( 13380 ), pointy . Int32 ( 13530 ), pointy . Int32 ( 13680 ), pointy . Int32 ( 13830 ), pointy . Int32 ( 13980 ), pointy . Int32 ( 14130 ), pointy . Int32 ( 14280 ), pointy . Int32 ( 14430 ), pointy . Int32 ( 14580 ), pointy . Int32 ( 14730 ), pointy . Int32 ( 14880 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\UpdateRecoverValueTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e updateRecoverValueTableMaster ( ( new UpdateRecoverValueTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRecoverValueTableName ( \"recover-value-table-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( null ) -\u003e withExperienceModelId ( \"experienceModelId-1001\" ) -\u003e withValues ([ 30 , 180 , 330 , 480 , 630 , 780 , 930 , 1080 , 1230 , 1380 , 1530 , 1680 , 1830 , 1980 , 2130 , 2280 , 2430 , 2580 , 2730 , 2880 , 3030 , 3180 , 3330 , 3480 , 3630 , 3780 , 3930 , 4080 , 4230 , 4380 , 4530 , 4680 , 4830 , 4980 , 5130 , 5280 , 5430 , 5580 , 5730 , 5880 , 6030 , 6180 , 6330 , 6480 , 6630 , 6780 , 6930 , 7080 , 7230 , 7380 , 7530 , 7680 , 7830 , 7980 , 8130 , 8280 , 8430 , 8580 , 8730 , 8880 , 9030 , 9180 , 9330 , 9480 , 9630 , 9780 , 9930 , 10080 , 10230 , 10380 , 10530 , 10680 , 10830 , 10980 , 11130 , 11280 , 11430 , 11580 , 11730 , 11880 , 12030 , 12180 , 12330 , 12480 , 12630 , 12780 , 12930 , 13080 , 13230 , 13380 , 13530 , 13680 , 13830 , 13980 , 14130 , 14280 , 14430 , 14580 , 14730 , 14880 , ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.UpdateRecoverValueTableMasterRequest ; import io.gs2.stamina.result.UpdateRecoverValueTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { UpdateRecoverValueTableMasterResult result = client . updateRecoverValueTableMaster ( new UpdateRecoverValueTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverValueTableName ( \"recover-value-table-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-1001\" ) . withValues ( Arrays . asList ( 30 , 180 , 330 , 480 , 630 , 780 , 930 , 1080 , 1230 , 1380 , 1530 , 1680 , 1830 , 1980 , 2130 , 2280 , 2430 , 2580 , 2730 , 2880 , 3030 , 3180 , 3330 , 3480 , 3630 , 3780 , 3930 , 4080 , 4230 , 4380 , 4530 , 4680 , 4830 , 4980 , 5130 , 5280 , 5430 , 5580 , 5730 , 5880 , 6030 , 6180 , 6330 , 6480 , 6630 , 6780 , 6930 , 7080 , 7230 , 7380 , 7530 , 7680 , 7830 , 7980 , 8130 , 8280 , 8430 , 8580 , 8730 , 8880 , 9030 , 9180 , 9330 , 9480 , 9630 , 9780 , 9930 , 10080 , 10230 , 10380 , 10530 , 10680 , 10830 , 10980 , 11130 , 11280 , 11430 , 11580 , 11730 , 11880 , 12030 , 12180 , 12330 , 12480 , 12630 , 12780 , 12930 , 13080 , 13230 , 13380 , 13530 , 13680 , 13830 , 13980 , 14130 , 14280 , 14430 , 14580 , 14730 , 14880 )) ); RecoverValueTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . UpdateRecoverValueTableMasterResult \u003e asyncResult = null ; yield return client . UpdateRecoverValueTableMaster ( new Gs2 . Gs2Stamina . Request . UpdateRecoverValueTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRecoverValueTableName ( \"recover-value-table-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( null ) . WithExperienceModelId ( \"experienceModelId-1001\" ) . WithValues ( new int [] { 30 , 180 , 330 , 480 , 630 , 780 , 930 , 1080 , 1230 , 1380 , 1530 , 1680 , 1830 , 1980 , 2130 , 2280 , 2430 , 2580 , 2730 , 2880 , 3030 , 3180 , 3330 , 3480 , 3630 , 3780 , 3930 , 4080 , 4230 , 4380 , 4530 , 4680 , 4830 , 4980 , 5130 , 5280 , 5430 , 5580 , 5730 , 5880 , 6030 , 6180 , 6330 , 6480 , 6630 , 6780 , 6930 , 7080 , 7230 , 7380 , 7530 , 7680 , 7830 , 7980 , 8130 , 8280 , 8430 , 8580 , 8730 , 8880 , 9030 , 9180 , 9330 , 9480 , 9630 , 9780 , 9930 , 10080 , 10230 , 10380 , 10530 , 10680 , 10830 , 10980 , 11130 , 11280 , 11430 , 11580 , 11730 , 11880 , 12030 , 12180 , 12330 , 12480 , 12630 , 12780 , 12930 , 13080 , 13230 , 13380 , 13530 , 13680 , 13830 , 13980 , 14130 , 14280 , 14430 , 14580 , 14730 , 14880 , }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . updateRecoverValueTableMaster ( new Gs2Stamina . UpdateRecoverValueTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverValueTableName ( \"recover-value-table-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( null ) . withExperienceModelId ( \"experienceModelId-1001\" ) . withValues ([ 30 , 180 , 330 , 480 , 630 , 780 , 930 , 1080 , 1230 , 1380 , 1530 , 1680 , 1830 , 1980 , 2130 , 2280 , 2430 , 2580 , 2730 , 2880 , 3030 , 3180 , 3330 , 3480 , 3630 , 3780 , 3930 , 4080 , 4230 , 4380 , 4530 , 4680 , 4830 , 4980 , 5130 , 5280 , 5430 , 5580 , 5730 , 5880 , 6030 , 6180 , 6330 , 6480 , 6630 , 6780 , 6930 , 7080 , 7230 , 7380 , 7530 , 7680 , 7830 , 7980 , 8130 , 8280 , 8430 , 8580 , 8730 , 8880 , 9030 , 9180 , 9330 , 9480 , 9630 , 9780 , 9930 , 10080 , 10230 , 10380 , 10530 , 10680 , 10830 , 10980 , 11130 , 11280 , 11430 , 11580 , 11730 , 11880 , 12030 , 12180 , 12330 , 12480 , 12630 , 12780 , 12930 , 13080 , 13230 , 13380 , 13530 , 13680 , 13830 , 13980 , 14130 , 14280 , 14430 , 14580 , 14730 , 14880 , ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . update_recover_value_table_master ( stamina . UpdateRecoverValueTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_recover_value_table_name ( 'recover-value-table-0001' ) . with_description ( 'description1' ) . with_metadata ( None ) . with_experience_model_id ( 'experienceModelId-1001' ) . with_values ([ 30 , 180 , 330 , 480 , 630 , 780 , 930 , 1080 , 1230 , 1380 , 1530 , 1680 , 1830 , 1980 , 2130 , 2280 , 2430 , 2580 , 2730 , 2880 , 3030 , 3180 , 3330 , 3480 , 3630 , 3780 , 3930 , 4080 , 4230 , 4380 , 4530 , 4680 , 4830 , 4980 , 5130 , 5280 , 5430 , 5580 , 5730 , 5880 , 6030 , 6180 , 6330 , 6480 , 6630 , 6780 , 6930 , 7080 , 7230 , 7380 , 7530 , 7680 , 7830 , 7980 , 8130 , 8280 , 8430 , 8580 , 8730 , 8880 , 9030 , 9180 , 9330 , 9480 , 9630 , 9780 , 9930 , 10080 , 10230 , 10380 , 10530 , 10680 , 10830 , 10980 , 11130 , 11280 , 11430 , 11580 , 11730 , 11880 , 12030 , 12180 , 12330 , 12480 , 12630 , 12780 , 12930 , 13080 , 13230 , 13380 , 13530 , 13680 , 13830 , 13980 , 14130 , 14280 , 14430 , 14580 , 14730 , 14880 , ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.update_recover_value_table_master ({ namespaceName = \"namespace-0001\" , recoverValueTableName = \"recover-value-table-0001\" , description = \"description1\" , metadata = nil , experienceModelId = \"experienceModelId-1001\" , values = { 30 , 180 , 330 , 480 , 630 , 780 , 930 , 1080 , 1230 , 1380 , 1530 , 1680 , 1830 , 1980 , 2130 , 2280 , 2430 , 2580 , 2730 , 2880 , 3030 , 3180 , 3330 , 3480 , 3630 , 3780 , 3930 , 4080 , 4230 , 4380 , 4530 , 4680 , 4830 , 4980 , 5130 , 5280 , 5430 , 5580 , 5730 , 5880 , 6030 , 6180 , 6330 , 6480 , 6630 , 6780 , 6930 , 7080 , 7230 , 7380 , 7530 , 7680 , 7830 , 7980 , 8130 , 8280 , 8430 , 8580 , 8730 , 8880 , 9030 , 9180 , 9330 , 9480 , 9630 , 9780 , 9930 , 10080 , 10230 , 10380 , 10530 , 10680 , 10830 , 10980 , 11130 , 11280 , 11430 , 11580 , 11730 , 11880 , 12030 , 12180 , 12330 , 12480 , 12630 , 12780 , 12930 , 13080 , 13230 , 13380 , 13530 , 13680 , 13830 , 13980 , 14130 , 14280 , 14430 , 14580 , 14730 , 14880 }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.update_recover_value_table_master_async ({ namespaceName = \"namespace-0001\" , recoverValueTableName = \"recover-value-table-0001\" , description = \"description1\" , metadata = nil , experienceModelId = \"experienceModelId-1001\" , values = { 30 , 180 , 330 , 480 , 630 , 780 , 930 , 1080 , 1230 , 1380 , 1530 , 1680 , 1830 , 1980 , 2130 , 2280 , 2430 , 2580 , 2730 , 2880 , 3030 , 3180 , 3330 , 3480 , 3630 , 3780 , 3930 , 4080 , 4230 , 4380 , 4530 , 4680 , 4830 , 4980 , 5130 , 5280 , 5430 , 5580 , 5730 , 5880 , 6030 , 6180 , 6330 , 6480 , 6630 , 6780 , 6930 , 7080 , 7230 , 7380 , 7530 , 7680 , 7830 , 7980 , 8130 , 8280 , 8430 , 8580 , 8730 , 8880 , 9030 , 9180 , 9330 , 9480 , 9630 , 9780 , 9930 , 10080 , 10230 , 10380 , 10530 , 10680 , 10830 , 10980 , 11130 , 11280 , 11430 , 11580 , 11730 , 11880 , 12030 , 12180 , 12330 , 12480 , 12630 , 12780 , 12930 , 13080 , 13230 , 13380 , 13530 , 13680 , 13830 , 13980 , 14130 , 14280 , 14430 , 14580 , 14730 , 14880 }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteRecoverValueTableMaster 스태미나 회복량 테이블 마스터 삭제 지정된 스태미나 회복량 테이블 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며, 현재 활성화된 스태미나 설정에는 영향을 주지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. recoverValueTableName string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item RecoverValueTableMaster 삭제한 스태미나 회복량 테이블 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stamina\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := stamina . Gs2StaminaRestClient { Session : \u0026 session , } result , err := client . DeleteRecoverValueTableMaster ( \u0026 stamina . DeleteRecoverValueTableMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), RecoverValueTableName : pointy . String ( \"recover-value-table-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Stamina\\Gs2StaminaRestClient ; use Gs2\\Stamina\\Request\\DeleteRecoverValueTableMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StaminaRestClient ( $session ); try { $result = $client -\u003e deleteRecoverValueTableMaster ( ( new DeleteRecoverValueTableMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withRecoverValueTableName ( \"recover-value-table-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stamina.rest.Gs2StaminaRestClient ; import io.gs2.stamina.request.DeleteRecoverValueTableMasterRequest ; import io.gs2.stamina.result.DeleteRecoverValueTableMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StaminaRestClient client = new Gs2StaminaRestClient ( session ); try { DeleteRecoverValueTableMasterResult result = client . deleteRecoverValueTableMaster ( new DeleteRecoverValueTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverValueTableName ( \"recover-value-table-0001\" ) ); RecoverValueTableMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StaminaRestClient ( session ); AsyncResult Gs2 . Gs2Stamina . Result . DeleteRecoverValueTableMasterResult \u003e asyncResult = null ; yield return client . DeleteRecoverValueTableMaster ( new Gs2 . Gs2Stamina . Request . DeleteRecoverValueTableMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithRecoverValueTableName ( \"recover-value-table-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Stamina from '@/gs2/stamina' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Stamina . Gs2StaminaRestClient ( session ); try { const result = await client . deleteRecoverValueTableMaster ( new Gs2Stamina . DeleteRecoverValueTableMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withRecoverValueTableName ( \"recover-value-table-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import stamina session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = stamina . Gs2StaminaRestClient ( session ) try : result = client . delete_recover_value_table_master ( stamina . DeleteRecoverValueTableMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_recover_value_table_name ( 'recover-value-table-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'stamina' ) api_result = client.delete_recover_value_table_master ({ namespaceName = \"namespace-0001\" , recoverValueTableName = \"recover-value-table-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'stamina' ) api_result_handler = client.delete_recover_value_table_master_async ({ namespaceName = \"namespace-0001\" , recoverValueTableName = \"recover-value-table-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Stamina SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Stamina SDK API 레퍼런스","url":"/ko/api_reference/stamina/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 supportSpeculativeExecution 문자열 열거형 enum {   “enable”,   “disable” } “disable” 투기적 실행을 지원할지 여부 활성화하면 스테이트 머신 정의와 난수 상태가 Status 엔티티에 포함되어, 클라이언트가 서버 확인 전에 로컬에서 상태 전이를 시뮬레이션할 수 있게 됩니다. transactionSetting 설정이 필요합니다. 정의 설명 enable 활성화 disable 비활성화 transactionSetting TransactionSetting {supportSpeculativeExecution} == “enable” 트랜잭션 설정 스테이트 머신의 emit 액션 실행 시 트랜잭션 처리 방식을 제어하는 설정입니다. 투기적 실행을 활성화하는 경우 필요합니다. ※ supportSpeculativeExecution이(가) “enable” 이면 활성화 startScript ScriptSetting 스테이트 머신을 시작했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - start passScript ScriptSetting 스테이트 머신이 정상 종료되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - pass errorScript ScriptSetting 스테이트 머신이 이상 종료되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - error lowestStateMachineVersion long 스테이트 머신의 최저 버전 실행 가능한 스테이트 머신의 최저 버전입니다. 이 값보다 오래된 버전의 스테이트 머신으로 생성된 Status 인스턴스는 거부되며, 모든 실행 중인 인스턴스가 최신 정의를 사용하도록 보장됩니다. logSetting LogSetting 로그 출력 설정 스테이트 머신의 실행, 상태 전이, emit 이벤트에 관한 API 요청·응답 로그를 출력할 GS2-Log의 네임스페이스를 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 완료 시 실행할 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 완료 시 스크립트를 실행할 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 완료 스크립트의 완료 여부를 알고 싶을 때 사용합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Status 스테이트 머신의 상태 특정 사용자에 대한 스테이트 머신의 실행 인스턴스를 나타냅니다. 변수, 서브 스테이트 머신용 콜 스택, 전이 횟수, 난수 상태를 포함한 현재 실행 상태를 추적합니다. 스테이터스는 Running, Wait, Pass(성공), Error 상태를 전이합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 statusId string ※ ~ 1024자 스테이트 머신 상태 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 userId string  ~ 128자 사용자ID name string  UUID ~ 36자 스테이터스 이름 스테이트 머신 상태의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 스테이트 머신의 상태를 식별하는 데 사용됩니다. stateMachineVersion long  0 ~ 32503680000000 버전 이 스테이트 머신 정의의 버전 식별자입니다. 작성 시 자동으로 할당됩니다. 네임스페이스의 lowestStateMachineVersion과 조합하여, 실행 중인 인스턴스의 버전 호환성을 강제하는 데 사용됩니다. enableSpeculativeExecution 문자열 열거형 enum {   “enable”,   “disable” } “disable” 투기적 실행을 활성화할지 여부 활성화하면 스테이트 머신 정의와 난수 상태가 이 Status 엔티티에 포함됩니다. 이를 통해 클라이언트가 서버 확인 전에 로컬에서 전이를 시뮬레이션할 수 있어 체감 지연을 줄일 수 있습니다. 정의 설명 enable 활성화 disable 비활성화 stateMachineDefinition string {enableSpeculativeExecution} == “enable” ~ 16777216자 스테이트 머신 정의 투기적 실행을 위해 이 스테이터스에 포함된 GSL 정의입니다. enableSpeculativeExecution이 활성화된 경우에만 존재합니다. 일반적인 API 응답에서는 필터링되며, 클라이언트 측 시뮬레이션에 필요한 경우에만 포함됩니다. ※ enableSpeculativeExecution이(가) “enable” 이면 활성화 randomStatus RandomStatus {enableSpeculativeExecution} == “enable” 난수 상태 이 실행 인스턴스의 난수 생성 상태입니다. 투기적 실행 시 클라이언트와 서버에서 결정론적인 난수 동작을 보장하기 위해 사용됩니다. enableSpeculativeExecution이 활성화된 경우에만 존재합니다. ※ enableSpeculativeExecution이(가) “enable” 이면 활성화 stacks List [] 0 ~ 1024 items 스택 서브 스테이트 머신 호출의 콜 스택입니다. 스테이트 머신이 서브 스테이트 머신을 호출하면 호출한 쪽의 스테이트 머신 이름과 반환 태스크가 푸시됩니다. 서브 스테이트 머신이 완료되면 엔트리가 팝되고 반환 태스크에서 실행이 재개됩니다. variables List [] 0 ~ 1000 items 스테이트 머신별 상태 변수 콜 계층 내 각 스테이트 머신의 현재 변수 값입니다. 각 엔트리는 스테이트 머신 이름과, int, float, string, bool, array, map 타입을 지원하는 JSON 직렬화된 값을 보유합니다. 변수는 동일한 실행 인스턴스 내 상태 전이를 거쳐 유지됩니다. status 문자열 열거형 enum {   “Running”,   “Wait”,   “Pass”,   “Error” } “Running” 스테이터스 이 스테이트 머신 인스턴스의 현재 실행 상태입니다. “Running\"은 머신이 전이를 처리 중임을 의미합니다. “Wait\"는 머신이 외부 이벤트(emit)를 대기 중임을 의미합니다. “Pass\"는 정상적으로 완료되었음을 의미합니다. “Error\"는 에러로 종료되었음을 의미합니다. 정의 설명 Running 실행 중 Wait 대기 중 Pass 정상 종료 Error 이상 종료 lastError string ~ 1024자 마지막 에러 마지막으로 발생한 에러의 메시지입니다. 스테이터스가 “Error\"로 전이되었을 때 설정됩니다. 스테이트 머신이 이상 종료된 원인의 상세 내용을 포함합니다. transitionCount int 0 0 ~ 2147483645 전이 횟수 이 실행 인스턴스에서 수행된 상태 전이의 총 횟수입니다. 전이할 때마다 증가합니다. 이 값이 1000을 초과하면 무한 루프를 방지하기 위해 스테이트 머신은 에러로 종료됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 StackEntry 스택 엔트리 서브 스테이트 머신의 콜 스택 내 하나의 엔트리를 나타냅니다. 스테이트 머신이 서브 스테이트 머신을 호출하면 호출한 쪽의 이름과 반환 태스크가 스택에 푸시됩니다. 서브 스테이트 머신이 완료되면 팝된 엔트리의 반환 태스크에서 실행이 재개됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 stateMachineName string  ~ 128자 스테이트 머신 이름 이 스택 엔트리를 푸시한 호출 측 스테이트 머신의 이름입니다. 서브 스테이트 머신에서 돌아올 때 어떤 스테이트 머신의 컨텍스트를 복원할지 식별하는 데 사용됩니다. taskName string  ~ 128자 태스크 이름 서브 스테이트 머신이 완료되었을 때 돌아갈 태스크(상태)의 이름입니다. 호출 측 스테이트 머신의 이 태스크에서 실행이 재개됩니다. Variable 스테이트 머신별 상태 변수 호출 계층 내 특정 스테이트 머신의 현재 변수 상태를 보유합니다. 값은 int, float, string, bool, array, map 데이터 타입을 지원하는 JSON 직렬화 표현입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 stateMachineName string  ~ 128자 스테이트 머신 이름 이들 변수를 소유하는 스테이트 머신의 이름입니다. 중첩된 호출 계층에서는 각 스테이트 머신이 이 이름으로 식별되는 독립적인 변수 스코프를 가집니다. value string  ~ 1048576자 값 이 스테이트 머신의 JSON 직렬화된 변수 값입니다. int, float, string, bool, array, map 데이터 타입을 지원합니다. 스테이트 머신이 전이나 액션을 처리할 때 갱신됩니다. Event 이벤트 스테이트 머신 실행 중에 발생한 이벤트를 나타냅니다. 상태 변경 이벤트(상태 전이를 기록)이거나 emit 이벤트(외부 액션을 트리거하기 위한 메시지 전송) 중 하나입니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 eventType 문자열 열거형 enum {   “change_state”,   “emit” }  이벤트 종류 이벤트의 종류입니다. “change_state\"는 스테이트 머신 내의 상태 전이를 기록합니다. “emit\"은 보상 지급이나 리소스 소비 등의 외부 액션을 트리거하기 위한 메시지 전송을 나타냅니다. 정의 설명 change_state 상태 변경 emit 메시지 전송 changeStateEvent ChangeStateEvent {eventType} == “change_state” ※ 상태 변경 ※ eventType이(가) “change_state” 이면 필수 emitEvent EmitEvent {eventType} == “emit” ※ 메시지 전송 ※ eventType이(가) “emit” 이면 필수 ChangeStateEvent 상태 변경 이벤트 스테이트 머신 내에서 발생한 상태 전이를 기록합니다. 전이 대상 태스크 이름, 무결성 검증용 해시, 전이가 발생한 타임스탬프를 포함합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 taskName string  ~ 128자 태스크 이름 스테이트 머신이 전이한 대상 태스크(상태)의 이름입니다. hash string  ~ 64자 해시 상태 전이의 무결성을 검증하기 위한 해시 값입니다. 전이가 올바르게 수행되었고 상태가 일관되어 있음을 검증하는 데 사용됩니다. timestamp long  타임스탬프 EmitEvent 메시지 전송 이벤트 외부 액션을 트리거하기 위해 스테이트 머신이 전송하는 메시지를 나타냅니다. 이벤트 이름은 액션의 종류를 식별하고, 파라미터는 액션별 데이터를 제공합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 event string  ~ 128자 이벤트 이름 전송된 이벤트의 종류를 식별하는 이름입니다. 보상 지급이나 리소스 소비 등, 어떤 외부 액션을 호출할지 판단하는 데 사용됩니다. parameters string  ~ 1024자 파라미터 전송된 이벤트와 함께 전달되는 파라미터입니다. 이 이벤트에 의해 트리거되는 외부 액션을 설정하는 데 사용되는, 액션별 데이터를 직렬화된 형식으로 포함합니다. timestamp long  타임스탬프 RandomStatus 난수 상태 스테이트 머신 실행 인스턴스의 난수 생성 상태를 관리합니다. 시드 값과 카테고리별 사용 현황 추적을 포함합니다. 추측 실행 시 클라이언트와 서버 간에 결정론적인 난수 동작을 보장하기 위해 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 seed long  0 ~ 4294967294 난수 시드 스테이트 머신 실행 내에서 결정론적인 난수 생성을 위한 시드 값입니다. used List 0 ~ 1000 items 사용된 난수 목록 카테고리별로 소비된 난수를 추적합니다. 각 카테고리는 난수 사용의 서로 다른 목적을 나타내며, 추측 재실행 시 일관성을 유지하기 위한 독립적인 추적을 가능하게 합니다. RandomUsed 사용한 난수 스테이트 머신 실행 내 특정 카테고리에서 소비된 난수의 수를 추적합니다. 각 카테고리는 서로 다른 목적을 위한 독립적인 난수 추적을 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 category long  0 ~ 4294967294 카테고리 난수 사용 카테고리의 숫자 식별자입니다. 각 카테고리는 난수 소비를 독립적으로 추적하여, 스테이트 머신이 서로 다른 목적에 별도의 난수 시퀀스를 사용할 수 있도록 합니다. used long  0 ~ 4294967294 사용 횟수 이 카테고리에서 소비된 난수의 수입니다. 이 카테고리의 시퀀스에서 난수가 뽑힐 때마다 증가합니다. VerifyActionResult 검증 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 verifyRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 verifyResult string ~ 1048576자 결과 내용 ConsumeActionResult 소비 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 consumeRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 consumeResult string ~ 1048576자 결과 내용 AcquireActionResult 획득 액션 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 acquireRequest string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 statusCode int 0 ~ 999 상태 코드 acquireResult string ~ 1048576자 결과 내용 TransactionResult 트랜잭션 실행 결과 서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과 상세 타입 활성화 조건 필수 기본값 값 제한 설명 transactionId string  36 ~ 36자 트랜잭션 ID verifyResults List 0 ~ 10 items 검증 액션의 실행 결과 목록 consumeResults List [] 0 ~ 10 items 소비 액션의 실행 결과 목록 acquireResults List [] 0 ~ 100 items 획득 액션 실행 결과 리스트 hasError bool false 트랜잭션 실행 중 오류가 발생했는지 여부 StateMachineMaster 스테이트 머신 정의 GSL로 작성된 스테이트 머신을 관리합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 stateMachineId string ※ ~ 1024자 스테이트 머신 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 mainStateMachineName string  ~ 128자 메인 스테이트 머신 이름 GSL 정의 내에서 진입점이 되는 스테이트 머신의 이름입니다. 이 스테이트 머신부터 실행이 시작되며, 스택 메커니즘을 통해 서브 스테이트 머신을 호출할 수 있습니다. payload string  ~ 5242880자 스테이트 머신 정의 스테이트 머신의 상태, 전이, 액션을 정의하는 GSL(GS2 State Language) 소스 코드입니다. 효율적인 취득을 위해 메타데이터와는 별도로 저장됩니다. version long  0 ~ 32503680000000 버전 이 스테이트 머신 정의의 버전 식별자입니다. 작성 시 자동으로 할당됩니다. 네임스페이스의 lowestStateMachineVersion과 조합하여, 실행 중인 인스턴스의 버전 호환성을 강제하는 데 사용됩니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 state_machine . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.DescribeNamespacesRequest ; import io.gs2.stateMachine.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2StateMachine . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2StateMachine . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . describe_namespaces ( state_machine . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'state_machine' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 supportSpeculativeExecution 문자열 열거형 enum {   “enable”,   “disable” } “disable” 투기적 실행을 지원할지 여부 활성화하면 스테이트 머신 정의와 난수 상태가 Status 엔티티에 포함되어, 클라이언트가 서버 확인 전에 로컬에서 상태 전이를 시뮬레이션할 수 있게 됩니다. transactionSetting 설정이 필요합니다. 정의 설명 enable 활성화 disable 비활성화 transactionSetting TransactionSetting {supportSpeculativeExecution} == “enable” 트랜잭션 설정 스테이트 머신의 emit 액션 실행 시 트랜잭션 처리 방식을 제어하는 설정입니다. 투기적 실행을 활성화하는 경우 필요합니다. ※ supportSpeculativeExecution이(가) “enable” 이면 활성화 startScript ScriptSetting 스테이트 머신을 시작했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - start passScript ScriptSetting 스테이트 머신이 정상 종료되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - pass errorScript ScriptSetting 스테이트 머신이 이상 종료되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - error lowestStateMachineVersion long 스테이트 머신의 최저 버전 실행 가능한 스테이트 머신의 최저 버전입니다. 이 값보다 오래된 버전의 스테이트 머신으로 생성된 Status 인스턴스는 거부되며, 모든 실행 중인 인스턴스가 최신 정의를 사용하도록 보장됩니다. logSetting LogSetting 로그 출력 설정 스테이트 머신의 실행, 상태 전이, emit 이벤트에 관한 API 요청·응답 로그를 출력할 GS2-Log의 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 state_machine . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , SupportSpeculativeExecution : nil , TransactionSetting : nil , StartScript : nil , PassScript : nil , ErrorScript : nil , LowestStateMachineVersion : nil , LogSetting : \u0026 stateMachine . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withSupportSpeculativeExecution ( null ) -\u003e withTransactionSetting ( null ) -\u003e withStartScript ( null ) -\u003e withPassScript ( null ) -\u003e withErrorScript ( null ) -\u003e withLowestStateMachineVersion ( null ) -\u003e withLogSetting (( new \\Gs2\\StateMachine\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.CreateNamespaceRequest ; import io.gs2.stateMachine.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withSupportSpeculativeExecution ( null ) . withTransactionSetting ( null ) . withStartScript ( null ) . withPassScript ( null ) . withErrorScript ( null ) . withLowestStateMachineVersion ( null ) . withLogSetting ( new io . gs2 . stateMachine . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2StateMachine . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithSupportSpeculativeExecution ( null ) . WithTransactionSetting ( null ) . WithStartScript ( null ) . WithPassScript ( null ) . WithErrorScript ( null ) . WithLowestStateMachineVersion ( null ) . WithLogSetting ( new Gs2 . Gs2StateMachine . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . createNamespace ( new Gs2StateMachine . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withSupportSpeculativeExecution ( null ) . withTransactionSetting ( null ) . withStartScript ( null ) . withPassScript ( null ) . withErrorScript ( null ) . withLowestStateMachineVersion ( null ) . withLogSetting ( new Gs2StateMachine . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . create_namespace ( state_machine . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_support_speculative_execution ( None ) . with_transaction_setting ( None ) . with_start_script ( None ) . with_pass_script ( None ) . with_error_script ( None ) . with_lowest_state_machine_version ( None ) . with_log_setting ( state_machine . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , supportSpeculativeExecution = nil , transactionSetting = nil , startScript = nil , passScript = nil , errorScript = nil , lowestStateMachineVersion = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , supportSpeculativeExecution = nil , transactionSetting = nil , startScript = nil , passScript = nil , errorScript = nil , lowestStateMachineVersion = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 state_machine . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.GetNamespaceStatusRequest ; import io.gs2.stateMachine.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2StateMachine . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2StateMachine . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . get_namespace_status ( state_machine . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'state_machine' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 state_machine . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.GetNamespaceRequest ; import io.gs2.stateMachine.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2StateMachine . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . getNamespace ( new Gs2StateMachine . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . get_namespace ( state_machine . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 supportSpeculativeExecution 문자열 열거형 enum {   “enable”,   “disable” } “disable” 투기적 실행을 지원할지 여부 활성화하면 스테이트 머신 정의와 난수 상태가 Status 엔티티에 포함되어, 클라이언트가 서버 확인 전에 로컬에서 상태 전이를 시뮬레이션할 수 있게 됩니다. transactionSetting 설정이 필요합니다. 정의 설명 enable 활성화 disable 비활성화 transactionSetting TransactionSetting {supportSpeculativeExecution} == “enable” 트랜잭션 설정 스테이트 머신의 emit 액션 실행 시 트랜잭션 처리 방식을 제어하는 설정입니다. 투기적 실행을 활성화하는 경우 필요합니다. ※ supportSpeculativeExecution이(가) “enable” 이면 활성화 startScript ScriptSetting 스테이트 머신을 시작했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - start passScript ScriptSetting 스테이트 머신이 정상 종료되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - pass errorScript ScriptSetting 스테이트 머신이 이상 종료되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - error lowestStateMachineVersion long 스테이트 머신의 최저 버전 실행 가능한 스테이트 머신의 최저 버전입니다. 이 값보다 오래된 버전의 스테이트 머신으로 생성된 Status 인스턴스는 거부되며, 모든 실행 중인 인스턴스가 최신 정의를 사용하도록 보장됩니다. logSetting LogSetting 로그 출력 설정 스테이트 머신의 실행, 상태 전이, emit 이벤트에 관한 API 요청·응답 로그를 출력할 GS2-Log의 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 state_machine . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), SupportSpeculativeExecution : nil , TransactionSetting : nil , StartScript : nil , PassScript : nil , ErrorScript : nil , LowestStateMachineVersion : nil , LogSetting : \u0026 stateMachine . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withSupportSpeculativeExecution ( null ) -\u003e withTransactionSetting ( null ) -\u003e withStartScript ( null ) -\u003e withPassScript ( null ) -\u003e withErrorScript ( null ) -\u003e withLowestStateMachineVersion ( null ) -\u003e withLogSetting (( new \\Gs2\\StateMachine\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.UpdateNamespaceRequest ; import io.gs2.stateMachine.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withSupportSpeculativeExecution ( null ) . withTransactionSetting ( null ) . withStartScript ( null ) . withPassScript ( null ) . withErrorScript ( null ) . withLowestStateMachineVersion ( null ) . withLogSetting ( new io . gs2 . stateMachine . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2StateMachine . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithSupportSpeculativeExecution ( null ) . WithTransactionSetting ( null ) . WithStartScript ( null ) . WithPassScript ( null ) . WithErrorScript ( null ) . WithLowestStateMachineVersion ( null ) . WithLogSetting ( new Gs2 . Gs2StateMachine . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2StateMachine . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withSupportSpeculativeExecution ( null ) . withTransactionSetting ( null ) . withStartScript ( null ) . withPassScript ( null ) . withErrorScript ( null ) . withLowestStateMachineVersion ( null ) . withLogSetting ( new Gs2StateMachine . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . update_namespace ( state_machine . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_support_speculative_execution ( None ) . with_transaction_setting ( None ) . with_start_script ( None ) . with_pass_script ( None ) . with_error_script ( None ) . with_lowest_state_machine_version ( None ) . with_log_setting ( state_machine . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , supportSpeculativeExecution = nil , transactionSetting = nil , startScript = nil , passScript = nil , errorScript = nil , lowestStateMachineVersion = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , supportSpeculativeExecution = nil , transactionSetting = nil , startScript = nil , passScript = nil , errorScript = nil , lowestStateMachineVersion = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 state_machine . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.DeleteNamespaceRequest ; import io.gs2.stateMachine.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2StateMachine . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2StateMachine . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . delete_namespace ( state_machine . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 state_machine . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.GetServiceVersionRequest ; import io.gs2.stateMachine.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2StateMachine . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2StateMachine . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . get_service_version ( state_machine . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 state_machine . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.DumpUserDataByUserIdRequest ; import io.gs2.stateMachine.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2StateMachine . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2StateMachine . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . dump_user_data_by_user_id ( state_machine . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'state_machine' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 state_machine . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.stateMachine.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2StateMachine . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2StateMachine . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( state_machine . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'state_machine' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터의 클리닝을 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 state_machine . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.CleanUserDataByUserIdRequest ; import io.gs2.stateMachine.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2StateMachine . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2StateMachine . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . clean_user_data_by_user_id ( state_machine . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'state_machine' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 state_machine . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.stateMachine.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2StateMachine . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2StateMachine . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( state_machine . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'state_machine' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 state_machine . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.stateMachine.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2StateMachine . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2StateMachine . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( state_machine . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'state_machine' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 state_machine . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.ImportUserDataByUserIdRequest ; import io.gs2.stateMachine.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2StateMachine . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2StateMachine . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . import_user_data_by_user_id ( state_machine . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'state_machine' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 state_machine . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.CheckImportUserDataByUserIdRequest ; import io.gs2.stateMachine.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2StateMachine . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2StateMachine . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( state_machine . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'state_machine' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeStatuses 스테이트 머신 상태 목록 취득 요청한 사용자의 스테이트 머신 상태의 페이지네이션 목록을 취득합니다. 상태(Running, Pass, Error)로 필터링하여 특정 상태의 스테이트 머신만 취득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 status 문자열 열거형 enum {   “Running”,   “Wait”,   “Pass”,   “Error” } 스테이터스 이 스테이트 머신 인스턴스의 현재 실행 상태입니다. “Running\"은 머신이 전이를 처리 중임을 의미합니다. “Wait\"는 머신이 외부 이벤트(emit)를 대기 중임을 의미합니다. “Pass\"는 정상적으로 완료되었음을 의미합니다. “Error\"는 에러로 종료되었음을 의미합니다. 정의 설명 Running 실행 중 Wait 대기 중 Pass 정상 종료 Error 이상 종료 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 스테이트 머신 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . DescribeStatuses ( \u0026 state_machine . DescribeStatusesRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Status : pointy . String ( \"Running\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\DescribeStatusesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e describeStatuses ( ( new DescribeStatusesRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStatus ( \"Running\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.DescribeStatusesRequest ; import io.gs2.stateMachine.result.DescribeStatusesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { DescribeStatusesResult result = client . describeStatuses ( new DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatus ( \"Running\" ) . withPageToken ( null ) . withLimit ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . DescribeStatusesResult \u003e asyncResult = null ; yield return client . DescribeStatuses ( new Gs2 . Gs2StateMachine . Request . DescribeStatusesRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStatus ( \"Running\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . describeStatuses ( new Gs2StateMachine . DescribeStatusesRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatus ( \"Running\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . describe_statuses ( state_machine . DescribeStatusesRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_status ( 'Running' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.describe_statuses ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , status = \"Running\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'state_machine' ) api_result_handler = client.describe_statuses_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , status = \"Running\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeStatusesByUserId 사용자 ID를 지정하여 스테이트 머신 상태 목록 취득 지정한 사용자의 스테이트 머신 상태의 페이지네이션 목록을 취득합니다. 상태(Running, Pass, Error)로 필터링하여 특정 상태의 스테이트 머신만 취득할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID status 문자열 열거형 enum {   “Running”,   “Wait”,   “Pass”,   “Error” } 스테이터스 이 스테이트 머신 인스턴스의 현재 실행 상태입니다. “Running\"은 머신이 전이를 처리 중임을 의미합니다. “Wait\"는 머신이 외부 이벤트(emit)를 대기 중임을 의미합니다. “Pass\"는 정상적으로 완료되었음을 의미합니다. “Error\"는 에러로 종료되었음을 의미합니다. 정의 설명 Running 실행 중 Wait 대기 중 Pass 정상 종료 Error 이상 종료 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 스테이트 머신 상태 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . DescribeStatusesByUserId ( \u0026 state_machine . DescribeStatusesByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Status : nil , PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\DescribeStatusesByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e describeStatusesByUserId ( ( new DescribeStatusesByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStatus ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.DescribeStatusesByUserIdRequest ; import io.gs2.stateMachine.result.DescribeStatusesByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { DescribeStatusesByUserIdResult result = client . describeStatusesByUserId ( new DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatus ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List Status \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . DescribeStatusesByUserIdResult \u003e asyncResult = null ; yield return client . DescribeStatusesByUserId ( new Gs2 . Gs2StateMachine . Request . DescribeStatusesByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStatus ( null ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . describeStatusesByUserId ( new Gs2StateMachine . DescribeStatusesByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatus ( null ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . describe_statuses_by_user_id ( state_machine . DescribeStatusesByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_status ( None ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.describe_statuses_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , status = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'state_machine' ) api_result_handler = client.describe_statuses_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , status = nil , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; getStatus 스테이트 머신 상태 취득 현재 상태, 변수, 스택 트레이스, 오류 정보를 포함한 요청한 사용자의 스테이트 머신 상태를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 statusName string  ~ 36자 상태 이름 Result 타입 설명 item Status 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . GetStatus ( \u0026 state_machine . GetStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StatusName : pointy . String ( \"status-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\GetStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e getStatus ( ( new GetStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStatusName ( \"status-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.GetStatusRequest ; import io.gs2.stateMachine.result.GetStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { GetStatusResult result = client . getStatus ( new GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatusName ( \"status-0001\" ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . GetStatusResult \u003e asyncResult = null ; yield return client . GetStatus ( new Gs2 . Gs2StateMachine . Request . GetStatusRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStatusName ( \"status-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . getStatus ( new Gs2StateMachine . GetStatusRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatusName ( \"status-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . get_status ( state_machine . GetStatusRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_status_name ( 'status-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.get_status ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , statusName = \"status-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.get_status_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , statusName = \"status-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStatusByUserId 사용자 ID를 지정하여 스테이트 머신 상태 취득 현재 상태, 변수, 스택 트레이스, 오류 정보를 포함한 지정한 사용자의 스테이트 머신 상태를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID statusName string  ~ 36자 상태 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . GetStatusByUserId ( \u0026 state_machine . GetStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StatusName : pointy . String ( \"status-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\GetStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e getStatusByUserId ( ( new GetStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStatusName ( \"status-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.GetStatusByUserIdRequest ; import io.gs2.stateMachine.result.GetStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { GetStatusByUserIdResult result = client . getStatusByUserId ( new GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . GetStatusByUserIdResult \u003e asyncResult = null ; yield return client . GetStatusByUserId ( new Gs2 . Gs2StateMachine . Request . GetStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStatusName ( \"status-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . getStatusByUserId ( new Gs2StateMachine . GetStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . get_status_by_user_id ( state_machine . GetStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_status_name ( 'status-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.get_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.get_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; startStateMachineByUserId 사용자 ID를 지정하여 스테이트 머신 시작 최신 마스터 버전을 사용하여 지정한 사용자의 새로운 스테이트 머신 인스턴스를 시작합니다. 인자는 JSON으로 전달되어 스테이트 머신 변수로 파싱됩니다. 선택적으로 TTL(분 단위)을 설정할 수 있으며, 생략한 경우 스테이트 머신은 약 10년간 유효합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID args string “{}” ~ 4096자 스테이트 머신에 전달할 인자 ttl int 1 ~ 525600 유효 기간(분) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 시작된 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . StartStateMachineByUserId ( \u0026 state_machine . StartStateMachineByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), Args : nil , Ttl : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\StartStateMachineByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e startStateMachineByUserId ( ( new StartStateMachineByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withArgs ( null ) -\u003e withTtl ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.StartStateMachineByUserIdRequest ; import io.gs2.stateMachine.result.StartStateMachineByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { StartStateMachineByUserIdResult result = client . startStateMachineByUserId ( new StartStateMachineByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withArgs ( null ) . withTtl ( null ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . StartStateMachineByUserIdResult \u003e asyncResult = null ; yield return client . StartStateMachineByUserId ( new Gs2 . Gs2StateMachine . Request . StartStateMachineByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithArgs ( null ) . WithTtl ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . startStateMachineByUserId ( new Gs2StateMachine . StartStateMachineByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withArgs ( null ) . withTtl ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . start_state_machine_by_user_id ( state_machine . StartStateMachineByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_args ( None ) . with_ttl ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.start_state_machine_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , args = nil , ttl = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.start_state_machine_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , args = nil , ttl = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; emit 스테이트 머신에 이벤트 전송 이름이 지정된 이벤트와 JSON 인자를 스테이트 머신에 전송하여 상태 전이를 트리거합니다. 스테이트 머신의 버전이 네임스페이스의 lowestStateMachineVersion보다 낮은 경우, 상태가 자동으로 삭제되고 NotFound 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 statusName string  ~ 36자 상태 이름 eventName string  ~ 36자 이벤트 이름 args string “{}” ~ 4096자 스테이트 머신에 전달할 인자 Result 타입 설명 item Status 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . Emit ( \u0026 state_machine . EmitRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StatusName : pointy . String ( \"status-0001\" ), EventName : pointy . String ( \"event-0001\" ), Args : pointy . String ( \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\EmitRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e emit ( ( new EmitRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStatusName ( \"status-0001\" ) -\u003e withEventName ( \"event-0001\" ) -\u003e withArgs ( \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.EmitRequest ; import io.gs2.stateMachine.result.EmitResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { EmitResult result = client . emit ( new EmitRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatusName ( \"status-0001\" ) . withEventName ( \"event-0001\" ) . withArgs ( \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . EmitResult \u003e asyncResult = null ; yield return client . Emit ( new Gs2 . Gs2StateMachine . Request . EmitRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStatusName ( \"status-0001\" ) . WithEventName ( \"event-0001\" ) . WithArgs ( \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . emit ( new Gs2StateMachine . EmitRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatusName ( \"status-0001\" ) . withEventName ( \"event-0001\" ) . withArgs ( \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . emit ( state_machine . EmitRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_status_name ( 'status-0001' ) . with_event_name ( 'event-0001' ) . with_args ( '{\"value1\": \"value1\", \"value2\": 2.0, \"value3\": 3}' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.emit ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , statusName = \"status-0001\" , eventName = \"event-0001\" , args = \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.emit_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , statusName = \"status-0001\" , eventName = \"event-0001\" , args = \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; emitByUserId 사용자 ID를 지정하여 스테이트 머신에 이벤트 전송 지정한 사용자의 스테이트 머신에 이름이 지정된 이벤트와 JSON 인자를 전송하여 상태 전이를 트리거합니다. 스테이트 머신의 버전이 네임스페이스의 lowestStateMachineVersion보다 낮은 경우, 상태가 자동으로 삭제되고 NotFound 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID statusName string  ~ 36자 상태 이름 eventName string  ~ 36자 이벤트 이름 args string “{}” ~ 4096자 스테이트 머신에 전달할 인자 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . EmitByUserId ( \u0026 state_machine . EmitByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StatusName : pointy . String ( \"status-0001\" ), EventName : pointy . String ( \"event-0001\" ), Args : pointy . String ( \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\EmitByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e emitByUserId ( ( new EmitByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStatusName ( \"status-0001\" ) -\u003e withEventName ( \"event-0001\" ) -\u003e withArgs ( \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.EmitByUserIdRequest ; import io.gs2.stateMachine.result.EmitByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { EmitByUserIdResult result = client . emitByUserId ( new EmitByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withEventName ( \"event-0001\" ) . withArgs ( \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . EmitByUserIdResult \u003e asyncResult = null ; yield return client . EmitByUserId ( new Gs2 . Gs2StateMachine . Request . EmitByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStatusName ( \"status-0001\" ) . WithEventName ( \"event-0001\" ) . WithArgs ( \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . emitByUserId ( new Gs2StateMachine . EmitByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withEventName ( \"event-0001\" ) . withArgs ( \"{\\\"value1\\\": \\\"value1\\\", \\\"value2\\\": 2.0, \\\"value3\\\": 3}\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . emit_by_user_id ( state_machine . EmitByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_status_name ( 'status-0001' ) . with_event_name ( 'event-0001' ) . with_args ( '{\"value1\": \"value1\", \"value2\": 2.0, \"value3\": 3}' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.emit_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , eventName = \"event-0001\" , args = \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.emit_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , eventName = \"event-0001\" , args = \"{ \\\" value1 \\\" : \\\" value1 \\\" , \\\" value2 \\\" : 2.0, \\\" value3 \\\" : 3}\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; report 스테이트 머신에 복수 이벤트 보고 투기적 실행을 사용하여 클라이언트 측에서 처리된 이벤트의 배치를 보고합니다. 서버는 이벤트를 리플레이하여 상태 전이를 검증합니다. 결과 상태가 클라이언트가 보고한 상태와 일치하지 않는 경우, StateMismatch 오류가 반환됩니다. 네임스페이스에서 투기적 실행이 활성화되어 있어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 statusName string  ~ 36자 상태 이름 events List 0 ~ 1000 items 이벤트 목록 Result 타입 설명 item Status 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . Report ( \u0026 state_machine . ReportRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StatusName : pointy . String ( \"status-0001\" ), Events : [] stateMachine . Event { stateMachine . Event { EventType : pointy . String ( \"emit\" ), EmitEvent : \u0026 stateMachine . EmitEvent { Event : pointy . String ( \"message\" ), Parameters : pointy . String ( \"{\\\"payload\\\": \\\"Hello World\\\"}\" ), Timestamp : pointy . Int64 ( 1000 ), }, }, }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\ReportRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e report ( ( new ReportRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStatusName ( \"status-0001\" ) -\u003e withEvents ([ ( new Event ()) -\u003e withEventType ( \"emit\" ) -\u003e withEmitEvent ( ( new EmitEvent ()) -\u003e withEvent ( \"message\" ) -\u003e withParameters ( \"{ \\\" payload \\\" : \\\" Hello World \\\" }\" ) -\u003e withTimestamp ( 1000 ) ), ]) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.ReportRequest ; import io.gs2.stateMachine.result.ReportResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { ReportResult result = client . report ( new ReportRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatusName ( \"status-0001\" ) . withEvents ( Arrays . asList ( new Event () . withEventType ( \"emit\" ) . withEmitEvent ( new EmitEvent () . withEvent ( \"message\" ) . withParameters ( \"{\\\"payload\\\": \\\"Hello World\\\"}\" ) . withTimestamp ( 1000L ) ) )) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . ReportResult \u003e asyncResult = null ; yield return client . Report ( new Gs2 . Gs2StateMachine . Request . ReportRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStatusName ( \"status-0001\" ) . WithEvents ( new Gs2 . Gs2StateMachine . Model . Event [] { new Gs2 . Gs2StateMachine . Model . Event () . WithEventType ( \"emit\" ) . WithEmitEvent ( new Gs2 . Gs2StateMachine . Model . EmitEvent () . WithEvent ( \"message\" ) . WithParameters ( \"{\\\"payload\\\": \\\"Hello World\\\"}\" ) . WithTimestamp ( 1000L ) ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . report ( new Gs2StateMachine . ReportRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatusName ( \"status-0001\" ) . withEvents ([ new Gs2StateMachine . model . Event () . withEventType ( \"emit\" ) . withEmitEvent ( new Gs2StateMachine . model . EmitEvent () . withEvent ( \"message\" ) . withParameters ( \"{\\\"payload\\\": \\\"Hello World\\\"}\" ) . withTimestamp ( 1000 ) ), ]) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . report ( state_machine . ReportRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_status_name ( 'status-0001' ) . with_events ([ state_machine . Event () . with_event_type ( 'emit' ) . with_emit_event ( state_machine . EmitEvent () . with_event ( 'message' ) . with_parameters ( '{\"payload\": \"Hello World\"}' ) . with_timestamp ( 1000 ) ), ]) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.report ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , statusName = \"status-0001\" , events = { { event_type = \"emit\" , emit_event = { event = \"message\" , parameters = \"{ \\\" payload \\\" : \\\" Hello World \\\" }\" , timestamp = 1000 , }, } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.report_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , statusName = \"status-0001\" , events = { { event_type = \"emit\" , emit_event = { event = \"message\" , parameters = \"{ \\\" payload \\\" : \\\" Hello World \\\" }\" , timestamp = 1000 , }, } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; reportByUserId 사용자 ID를 지정하여 스테이트 머신에 복수 이벤트 보고 지정한 사용자에 대해 투기적 실행을 사용하여 클라이언트 측에서 처리된 이벤트의 배치를 보고합니다. 서버는 이벤트를 리플레이하여 상태 전이를 검증합니다. 결과 상태가 클라이언트가 보고한 상태와 일치하지 않는 경우, StateMismatch 오류가 반환됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID statusName string  ~ 36자 상태 이름 events List 0 ~ 1000 items 이벤트 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . ReportByUserId ( \u0026 state_machine . ReportByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StatusName : pointy . String ( \"status-0001\" ), Events : [] stateMachine . Event { stateMachine . Event { EventType : pointy . String ( \"emit\" ), EmitEvent : \u0026 stateMachine . EmitEvent { Event : pointy . String ( \"message\" ), Parameters : pointy . String ( \"{\\\"payload\\\": \\\"Hello World\\\"}\" ), Timestamp : pointy . Int64 ( 1000 ), }, }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\ReportByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e reportByUserId ( ( new ReportByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStatusName ( \"status-0001\" ) -\u003e withEvents ([ ( new Event ()) -\u003e withEventType ( \"emit\" ) -\u003e withEmitEvent ( ( new EmitEvent ()) -\u003e withEvent ( \"message\" ) -\u003e withParameters ( \"{ \\\" payload \\\" : \\\" Hello World \\\" }\" ) -\u003e withTimestamp ( 1000 ) ), ]) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.ReportByUserIdRequest ; import io.gs2.stateMachine.result.ReportByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { ReportByUserIdResult result = client . reportByUserId ( new ReportByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withEvents ( Arrays . asList ( new Event () . withEventType ( \"emit\" ) . withEmitEvent ( new EmitEvent () . withEvent ( \"message\" ) . withParameters ( \"{\\\"payload\\\": \\\"Hello World\\\"}\" ) . withTimestamp ( 1000L ) ) )) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . ReportByUserIdResult \u003e asyncResult = null ; yield return client . ReportByUserId ( new Gs2 . Gs2StateMachine . Request . ReportByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStatusName ( \"status-0001\" ) . WithEvents ( new Gs2 . Gs2StateMachine . Model . Event [] { new Gs2 . Gs2StateMachine . Model . Event () . WithEventType ( \"emit\" ) . WithEmitEvent ( new Gs2 . Gs2StateMachine . Model . EmitEvent () . WithEvent ( \"message\" ) . WithParameters ( \"{\\\"payload\\\": \\\"Hello World\\\"}\" ) . WithTimestamp ( 1000L ) ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . reportByUserId ( new Gs2StateMachine . ReportByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withEvents ([ new Gs2StateMachine . model . Event () . withEventType ( \"emit\" ) . withEmitEvent ( new Gs2StateMachine . model . EmitEvent () . withEvent ( \"message\" ) . withParameters ( \"{\\\"payload\\\": \\\"Hello World\\\"}\" ) . withTimestamp ( 1000 ) ), ]) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . report_by_user_id ( state_machine . ReportByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_status_name ( 'status-0001' ) . with_events ([ state_machine . Event () . with_event_type ( 'emit' ) . with_emit_event ( state_machine . EmitEvent () . with_event ( 'message' ) . with_parameters ( '{\"payload\": \"Hello World\"}' ) . with_timestamp ( 1000 ) ), ]) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.report_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , events = { { event_type = \"emit\" , emit_event = { event = \"message\" , parameters = \"{ \\\" payload \\\" : \\\" Hello World \\\" }\" , timestamp = 1000 , }, } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.report_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , events = { { event_type = \"emit\" , emit_event = { event = \"message\" , parameters = \"{ \\\" payload \\\" : \\\" Hello World \\\" }\" , timestamp = 1000 , }, } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteStatusByUserId 사용자 ID를 지정하여 스테이트 머신 상태 삭제 현재 상태(Running, Pass, Error)에 관계없이 스테이트 머신의 상태를 강제로 삭제합니다. Exit와 달리, 스테이트 머신이 종료 상태에 도달해 있을 필요는 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID statusName string  ~ 36자 상태 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 삭제된 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . DeleteStatusByUserId ( \u0026 state_machine . DeleteStatusByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StatusName : pointy . String ( \"status-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\DeleteStatusByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e deleteStatusByUserId ( ( new DeleteStatusByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStatusName ( \"status-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.DeleteStatusByUserIdRequest ; import io.gs2.stateMachine.result.DeleteStatusByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { DeleteStatusByUserIdResult result = client . deleteStatusByUserId ( new DeleteStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . DeleteStatusByUserIdResult \u003e asyncResult = null ; yield return client . DeleteStatusByUserId ( new Gs2 . Gs2StateMachine . Request . DeleteStatusByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStatusName ( \"status-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . deleteStatusByUserId ( new Gs2StateMachine . DeleteStatusByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . delete_status_by_user_id ( state_machine . DeleteStatusByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_status_name ( 'status-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.delete_status_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.delete_status_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exitStateMachine 스테이트 머신을 종료하고 삭제 스테이트 머신의 상태가 “Pass” 또는 “Error\"일 때만 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 statusName string  ~ 36자 상태 이름 Result 타입 설명 item Status 종료된 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . ExitStateMachine ( \u0026 state_machine . ExitStateMachineRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), StatusName : pointy . String ( \"status-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\ExitStateMachineRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e exitStateMachine ( ( new ExitStateMachineRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withStatusName ( \"status-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.ExitStateMachineRequest ; import io.gs2.stateMachine.result.ExitStateMachineResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { ExitStateMachineResult result = client . exitStateMachine ( new ExitStateMachineRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatusName ( \"status-0001\" ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . ExitStateMachineResult \u003e asyncResult = null ; yield return client . ExitStateMachine ( new Gs2 . Gs2StateMachine . Request . ExitStateMachineRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithStatusName ( \"status-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . exitStateMachine ( new Gs2StateMachine . ExitStateMachineRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withStatusName ( \"status-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . exit_state_machine ( state_machine . ExitStateMachineRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_status_name ( 'status-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.exit_state_machine ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , statusName = \"status-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.exit_state_machine_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , statusName = \"status-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exitStateMachineByUserId 사용자 ID를 지정하여 스테이트 머신을 종료하고 삭제 스테이트 머신의 상태가 “Pass” 또는 “Error\"일 때만 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID statusName string  ~ 36자 상태 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item Status 종료된 스테이트 머신 상태 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . ExitStateMachineByUserId ( \u0026 state_machine . ExitStateMachineByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), StatusName : pointy . String ( \"status-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\ExitStateMachineByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e exitStateMachineByUserId ( ( new ExitStateMachineByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withStatusName ( \"status-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.ExitStateMachineByUserIdRequest ; import io.gs2.stateMachine.result.ExitStateMachineByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { ExitStateMachineByUserIdResult result = client . exitStateMachineByUserId ( new ExitStateMachineByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withTimeOffsetToken ( null ) ); Status item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . ExitStateMachineByUserIdResult \u003e asyncResult = null ; yield return client . ExitStateMachineByUserId ( new Gs2 . Gs2StateMachine . Request . ExitStateMachineByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithStatusName ( \"status-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . exitStateMachineByUserId ( new Gs2StateMachine . ExitStateMachineByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withStatusName ( \"status-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . exit_state_machine_by_user_id ( state_machine . ExitStateMachineByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_status_name ( 'status-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.exit_state_machine_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.exit_state_machine_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , statusName = \"status-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeStateMachineMasters 스테이트 머신 마스터의 일람을 취득 스테이트 머신 마스터의 버전 목록을 페이지네이션과 함께 취득합니다. 각 버전에는 메인 스테이트 머신 이름과 스테이트 머신 로직을 정의하는 GS2 Script 페이로드가 포함됩니다. 타임스탬프 기반의 버전 번호로 식별되는 여러 버전이 동시에 존재할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 조회한 데이터 건수 Result 타입 설명 items List 스테이트 머신 마스터의 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . DescribeStateMachineMasters ( \u0026 state_machine . DescribeStateMachineMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\DescribeStateMachineMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e describeStateMachineMasters ( ( new DescribeStateMachineMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.DescribeStateMachineMastersRequest ; import io.gs2.stateMachine.result.DescribeStateMachineMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { DescribeStateMachineMastersResult result = client . describeStateMachineMasters ( new DescribeStateMachineMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List StateMachineMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . DescribeStateMachineMastersResult \u003e asyncResult = null ; yield return client . DescribeStateMachineMasters ( new Gs2 . Gs2StateMachine . Request . DescribeStateMachineMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . describeStateMachineMasters ( new Gs2StateMachine . DescribeStateMachineMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . describe_state_machine_masters ( state_machine . DescribeStateMachineMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.describe_state_machine_masters ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'state_machine' ) api_result_handler = client.describe_state_machine_masters_async ({ namespaceName = \"namespace-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; updateStateMachineMaster 새로운 스테이트 머신 마스터를 작성 또는 갱신 스테이트 머신 마스터의 새로운 버전을 작성합니다. GS2 Script 스테이트 머신 정의를 포함한 페이로드는 저장 전에 파싱을 통해 검증됩니다. 이 API를 호출할 때마다 타임스탬프 기반의 버전 번호로 새로운 버전이 작성되며, 이전 버전은 그대로 유지됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mainStateMachineName string  ~ 128자 메인 스테이트 머신 이름 GSL 정의 내에서 진입점이 되는 스테이트 머신의 이름입니다. 이 스테이트 머신부터 실행이 시작되며, 스택 메커니즘을 통해 서브 스테이트 머신을 호출할 수 있습니다. payload string  ~ 5242880자 스테이트 머신 정의 스테이트 머신의 상태, 전이, 액션을 정의하는 GSL(GS2 State Language) 소스 코드입니다. 효율적인 취득을 위해 메타데이터와는 별도로 저장됩니다. Result 타입 설명 item StateMachineMaster 작성한 스테이트 머신 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . UpdateStateMachineMaster ( \u0026 state_machine . UpdateStateMachineMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), MainStateMachineName : pointy . String ( \"MainStateMachine\" ), Payload : pointy . String ( \"\\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n \" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\UpdateStateMachineMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e updateStateMachineMaster ( ( new UpdateStateMachineMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMainStateMachineName ( \"MainStateMachine\" ) -\u003e withPayload ( \" \\n StateMachine MainStateMachine { \\n EntryPoint Task1; \\n\\n Task Task1(int initCounter) { \\n Event Pass(); \\n Event Error(string Reason); \\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1 \\n } \\n\\n PassTask Pass; \\n\\n ErrorTask Error(string reason); \\n\\n Transition Task1 handling Pass -\u003e Pass; \\n Transition Task1 handling Error -\u003e Error; \\n } \\n \" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.UpdateStateMachineMasterRequest ; import io.gs2.stateMachine.result.UpdateStateMachineMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { UpdateStateMachineMasterResult result = client . updateStateMachineMaster ( new UpdateStateMachineMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMainStateMachineName ( \"MainStateMachine\" ) . withPayload ( \"\\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n \" ) ); StateMachineMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . UpdateStateMachineMasterResult \u003e asyncResult = null ; yield return client . UpdateStateMachineMaster ( new Gs2 . Gs2StateMachine . Request . UpdateStateMachineMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMainStateMachineName ( \"MainStateMachine\" ) . WithPayload ( \"\\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n \" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . updateStateMachineMaster ( new Gs2StateMachine . UpdateStateMachineMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMainStateMachineName ( \"MainStateMachine\" ) . withPayload ( \"\\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n \" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . update_state_machine_master ( state_machine . UpdateStateMachineMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_main_state_machine_name ( 'MainStateMachine' ) . with_payload ( ' \\n StateMachine MainStateMachine { \\n EntryPoint Task1; \\n\\n Task Task1(int initCounter) { \\n Event Pass(); \\n Event Error(string Reason); \\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1 \\n } \\n\\n PassTask Pass; \\n\\n ErrorTask Error(string reason); \\n\\n Transition Task1 handling Pass -\u003e Pass; \\n Transition Task1 handling Error -\u003e Error; \\n } \\n ' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.update_state_machine_master ({ namespaceName = \"namespace-0001\" , mainStateMachineName = \"MainStateMachine\" , payload = \" \\n StateMachine MainStateMachine { \\n EntryPoint Task1; \\n\\n Task Task1(int initCounter) { \\n Event Pass(); \\n Event Error(string Reason); \\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1 \\n } \\n\\n PassTask Pass; \\n\\n ErrorTask Error(string reason); \\n\\n Transition Task1 handling Pass -\u003e Pass; \\n Transition Task1 handling Error -\u003e Error; \\n } \\n \" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.update_state_machine_master_async ({ namespaceName = \"namespace-0001\" , mainStateMachineName = \"MainStateMachine\" , payload = \" \\n StateMachine MainStateMachine { \\n EntryPoint Task1; \\n\\n Task Task1(int initCounter) { \\n Event Pass(); \\n Event Error(string Reason); \\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1 \\n } \\n\\n PassTask Pass; \\n\\n ErrorTask Error(string reason); \\n\\n Transition Task1 handling Pass -\u003e Pass; \\n Transition Task1 handling Error -\u003e Error; \\n } \\n \" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getStateMachineMaster 스테이트 머신 마스터를 취득 스테이트 머신 로직을 정의하는 메인 스테이트 머신 이름과 GS2 Script 페이로드를 포함하여, 지정된 버전의 스테이트 머신 마스터를 취득합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. version long  0 ~ 32503680000000 버전 이 스테이트 머신 정의의 버전 식별자입니다. 작성 시 자동으로 할당됩니다. 네임스페이스의 lowestStateMachineVersion과 조합하여, 실행 중인 인스턴스의 버전 호환성을 강제하는 데 사용됩니다. Result 타입 설명 item StateMachineMaster 스테이트 머신 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . GetStateMachineMaster ( \u0026 state_machine . GetStateMachineMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Version : pointy . Int64 ( 1000 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\GetStateMachineMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e getStateMachineMaster ( ( new GetStateMachineMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersion ( 1000 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.GetStateMachineMasterRequest ; import io.gs2.stateMachine.result.GetStateMachineMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { GetStateMachineMasterResult result = client . getStateMachineMaster ( new GetStateMachineMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersion ( 1000L ) ); StateMachineMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . GetStateMachineMasterResult \u003e asyncResult = null ; yield return client . GetStateMachineMaster ( new Gs2 . Gs2StateMachine . Request . GetStateMachineMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersion ( 1000L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . getStateMachineMaster ( new Gs2StateMachine . GetStateMachineMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersion ( 1000 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . get_state_machine_master ( state_machine . GetStateMachineMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_version ( 1000 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.get_state_machine_master ({ namespaceName = \"namespace-0001\" , version = 1000 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.get_state_machine_master_async ({ namespaceName = \"namespace-0001\" , version = 1000 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteStateMachineMaster 스테이트 머신 마스터를 삭제 지정된 버전의 스테이트 머신 마스터를 삭제합니다. 이 버전으로 이미 시작된 실행 중인 스테이트 머신은 계속 동작하지만, 삭제된 버전으로 새로운 스테이트 머신을 시작할 수는 없습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. version long  0 ~ 32503680000000 버전 이 스테이트 머신 정의의 버전 식별자입니다. 작성 시 자동으로 할당됩니다. 네임스페이스의 lowestStateMachineVersion과 조합하여, 실행 중인 인스턴스의 버전 호환성을 강제하는 데 사용됩니다. Result 타입 설명 item StateMachineMaster 삭제한 스테이트 머신 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/stateMachine\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := state_machine . Gs2StateMachineRestClient { Session : \u0026 session , } result , err := client . DeleteStateMachineMaster ( \u0026 state_machine . DeleteStateMachineMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Version : pointy . Int64 ( 1000 ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\StateMachine\\Gs2StateMachineRestClient ; use Gs2\\StateMachine\\Request\\DeleteStateMachineMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2StateMachineRestClient ( $session ); try { $result = $client -\u003e deleteStateMachineMaster ( ( new DeleteStateMachineMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersion ( 1000 ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.stateMachine.rest.Gs2StateMachineRestClient ; import io.gs2.stateMachine.request.DeleteStateMachineMasterRequest ; import io.gs2.stateMachine.result.DeleteStateMachineMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2StateMachineRestClient client = new Gs2StateMachineRestClient ( session ); try { DeleteStateMachineMasterResult result = client . deleteStateMachineMaster ( new DeleteStateMachineMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersion ( 1000L ) ); StateMachineMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2StateMachineRestClient ( session ); AsyncResult Gs2 . Gs2StateMachine . Result . DeleteStateMachineMasterResult \u003e asyncResult = null ; yield return client . DeleteStateMachineMaster ( new Gs2 . Gs2StateMachine . Request . DeleteStateMachineMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersion ( 1000L ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2StateMachine from '@/gs2/stateMachine' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2StateMachine . Gs2StateMachineRestClient ( session ); try { const result = await client . deleteStateMachineMaster ( new Gs2StateMachine . DeleteStateMachineMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersion ( 1000 ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import state_machine session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = state_machine . Gs2StateMachineRestClient ( session ) try : result = client . delete_state_machine_master ( state_machine . DeleteStateMachineMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_version ( 1000 ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'state_machine' ) api_result = client.delete_state_machine_master ({ namespaceName = \"namespace-0001\" , version = 1000 , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'state_machine' ) api_result_handler = client.delete_state_machine_master_async ({ namespaceName = \"namespace-0001\" , version = 1000 , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-StateMachine SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-StateMachine SDK API 레퍼런스","url":"/ko/api_reference/state_machine/sdk/"},{"content":"모델 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 버전 체크 작업 시 트랜잭션 처리 방법을 제어하는 설정입니다. assumeUserId string  ~ 1024자 버전 체크를 통과한 경우 승격되는 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 버전 체크가 통과했을 때 권한을 이어받는 GS2-Identifier 사용자입니다. 버전 검증이 성공한 후, 시스템이 사용자를 대신하여 인가된 작업(액세스 부여 등)을 수행할 수 있도록 합니다. acceptVersionScript ScriptSetting 버전을 승인했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acceptVersion checkVersionTriggerScriptId string ~ 1024자 버전 체크 처리를 실행하는 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - checkVersion logSetting LogSetting 로그 출력 설정 버전 체크 및 버전 승인 작업에 관한 API 요청·응답 로그를 출력할 GS2-Log 네임스페이스를 지정합니다. createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. GitHubCheckoutSetting GitHub에서 마스터 데이터를 체크아웃하는 설정 상세 타입 활성화 조건 필수 기본값 값 제한 설명 apiKeyId string  ~ 1024자 GitHub API 키의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN repositoryName string  ~ 1024자 리포지토리 이름 sourcePath string  ~ 1024자 마스터 데이터(JSON) 파일 경로 referenceType 문자열 열거형 enum {   “commit_hash”,   “branch”,   “tag” }  코드 출처 정의 설명 commit_hash 커밋 해시 branch 브랜치 tag 태그 commitHash string {referenceType} == “commit_hash” ※ ~ 1024자 커밋 해시 ※ referenceType이(가) “commit_hash” 이면 필수 branchName string {referenceType} == “branch” ※ ~ 1024자 브랜치 이름 ※ referenceType이(가) “branch” 이면 필수 tagName string {referenceType} == “tag” ※ ~ 1024자 태그 이름 ※ referenceType이(가) “tag” 이면 필수 AcceptVersion 승인한 버전 앱 버전이나 에셋 버전처럼 데이터에 연결된 버전이 아니라 동의한 이용약관의 버전처럼 사용자별로 버전 관리가 필요한 엔티티에서 사용합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 acceptVersionId string ※ ~ 1024자 승인한 버전 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. userId string  ~ 128자 사용자ID version Version  버전 사용자가 승인 또는 거부한 버전 번호입니다. “active” 스코프의 버전 모델에서 사용되는 경우, 버전 체크 시 모델의 현재 버전과 비교됩니다. status 문자열 열거형 enum {   “accept”,   “reject” } “accept” 상태 이 버전에 대한 사용자의 승인 판단입니다. “accept\"는 사용자가 버전을 승인했음(예: 이용약관 동의)을 의미하고, “reject\"는 사용자가 명시적으로 거부했음을 의미합니다. 정의 설명 accept 승인됨 reject 거부됨 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 VersionModel 버전 모델 버전 모델에는 로그인은 허용하지만 버전 업그레이드가 가능함을 알리는 경고 버전과, 로그인을 허용하지 않는 에러 버전을 설정할 수 있습니다. 현재 버전을 클라이언트에 신고하도록 할 때, 서명 유무를 지정할 수 있습니다. 서명 있음을 선택한 경우, 클라이언트는 허위 버전을 신고할 수 없게 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 versionModelId string ※ ~ 1024자 버전 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scope 문자열 열거형 enum {   “passive”,   “active” }  판정에 사용할 버전 값의 종류 버전 체크에 사용할 버전 값을 얻는 방법을 결정합니다. “passive\"는 체크 시점에 클라이언트가 현재 버전을 신고하는 방식이며, “active\"는 사용자가 과거에 명시적으로 승인한 버전(이용약관 동의 등)을 사용하는 방식입니다. 정의 설명 passive 클라이언트에서 전송 active 과거 명시적으로 승인한 버전 type 문자열 열거형 enum {   “simple”,   “schedule” } “simple” 버전 체크 모드 버전 체크 방식을 선택합니다. “simple\"은 고정된 경고·에러 버전 임계값을 사용하며, “schedule\"은 GS2-Schedule의 이벤트를 이용하여 시기에 따라 다른 버전 임계값을 적용합니다. 정의 설명 simple 심플 schedule 시계열 전환 currentVersion Version {type} == “simple” and {scope} == “active” ※ 현재 버전 이 버전 모델의 최신 버전입니다. “simple” 모드의 “active” 스코프에서만 사용되며, 사용자가 버전 업데이트를 승인·확인할 때 현재 버전을 알립니다. ※ type이(가) “simple\"이고 scope이(가) “active” 이면 필수 warningVersion Version {type} == “simple” ※ 버전 업그레이드를 촉구하는 버전 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮은 경우에도 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 errorVersion Version {type} == “simple” ※ 버전 체크에서 에러로 판정되는 버전 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 scheduleVersions List {type} == “schedule” 0 ~ 10 items 시계열로 전환되는 버전 체크 내용 목록 GS2-Schedule의 이벤트를 기준으로 서로 다른 시점에 유효해지는 버전 체크 설정 목록입니다. 업데이트를 필수로 만들기 전에 경고를 표시하는 등 단계적인 버전 강제가 가능해집니다. ※ type이(가) “schedule” 이면 활성화 needSignature bool {scope} == “passive” ※ 판정할 버전 값에 서명 검증이 필요한지 여부 활성화하면 클라이언트는 버전 신고와 함께 암호 서명을 제공해야 합니다. 이를 통해 클라이언트가 버전 체크를 회피하기 위해 허위 버전을 신고하는 것을 방지합니다. 스코프가 “passive\"인 경우에만 적용됩니다. ※ scope이(가) “passive” 이면 필수 signatureKeyId string {needSignature} ※ ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ needSignature이(가) “true” 이면 필수 approveRequirement 문자열 열거형 enum {   “required”,   “optional” } {scope} == “active” “required” 승인 필요 여부 이 버전 모델에 대한 사용자 승인이 필수인지 임의인지를 제어합니다. “required\"인 경우, 사용자가 현재 버전을 승인하지 않으면 버전 체크가 실패합니다. “optional\"인 경우, 승인 상태와 관계없이 버전 체크가 통과합니다. 스코프가 “active\"인 경우에만 적용됩니다. 정의 설명 required 승인 필요 optional 임의 승인 ※ scope이(가) “active” 이면 활성화 Status 버전 상태 버전 검증 결과를 나타냅니다. 체크에 사용된 버전 모델과, 클라이언트로부터 신고되었거나 사용자 승인으로부터 기록된 현재 버전을 포함합니다. 버전 체크 결과의 일부로 반환되어, 버전이 최신인지, 업그레이드 경고가 필요한지, 차단되는지를 클라이언트에 통지합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 versionModel VersionModel  버전 모델 이 버전 체크에 사용된 버전 모델 정의입니다. 체크 결과를 결정한 경고·오류 버전 임계값, 스코프, 기타 설정을 포함합니다. currentVersion Version 현재 버전 버전 체크 시 평가된 버전입니다. “passive” 스코프의 경우 클라이언트가 신고한 버전이고, “active” 스코프의 경우 사용자가 과거에 승인한 버전입니다. 버전 정보를 사용할 수 없는 경우 존재하지 않을 수 있습니다. TargetVersion 검증할 버전 버전 체크를 위해 클라이언트가 전송하는 버전 신고를 나타냅니다. 서명 없음 모드에서는 버전을 직접 지정합니다. 서명 있음 모드에서는 변조 방지를 위해 암호 서명과 함께 버전이 바디에 포함됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. body string ~ 1048576자 바디 버전 정보를 포함하는 서명된 페이로드입니다. 서명 검증이 활성화된 경우(needSignature가 true)에 사용됩니다. 바디에는 서명과 대조하여 검증할 수 있는 형식으로 버전 데이터가 포함됩니다. signature string ~ 256자 서명 바디 내용을 검증하기 위한 암호 서명입니다. 제공된 경우, 서버는 버전 모델에 설정된 GS2-Key 암호화 키를 사용하여 서명을 검증한 후 신고된 버전을 받아들입니다. version Version {signature} == \"” ※ 버전 검증 대상 버전 번호입니다. 서명 검증이 필요하지 않은 경우(서명이 제공되지 않은 경우)에 사용됩니다. 서명이 제공된 경우, 버전은 서명된 바디에서 추출됩니다. ※ signature이(가) \"” 이면 필수 SignTargetVersion 서명 대상 버전 버전 신고의 서명 대상으로 사용되는 데이터 구조입니다. 리전, 오너, 네임스페이스, 버전 모델 이름, 버전 번호를 포함합니다. 이 데이터를 GS2-Key 암호화 키로 서명함으로써, 클라이언트가 버전 체크를 위해 전송하는 변조 방지된 버전 신고를 생성합니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 region string  ~ 128자 리전 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. version Version  버전 서명된 페이로드에 포함되는 버전 번호입니다. 이 버전은 네임스페이스 및 버전 모델 컨텍스트와 함께 암호 서명되는 데이터를 구성합니다. Version 버전 3단계 계층(메이저, 마이너, 마이크로)으로 구성된 버전 번호를 나타냅니다. 버전 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. 버전 체크의 경고·에러 임계값 정의에 사용됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 major int  0 ~ 2147483646 메이저 버전 버전 비교에서 가장 우선순위가 높은 구성 요소입니다. 메이저 버전의 차이는 마이너 버전 및 마이크로 버전보다 우선합니다. minor int  0 ~ 2147483646 마이너 버전 버전 비교에서 두 번째로 우선순위가 높은 구성 요소입니다. 메이저 버전이 동일한 경우에만 비교됩니다. micro int  0 ~ 2147483646 마이크로 버전 버전 비교에서 가장 우선순위가 낮은 구성 요소입니다. 메이저 버전과 마이너 버전이 모두 동일한 경우에만 비교됩니다. ScheduleVersion 시계열로 전환되는 버전 GS2-Schedule의 이벤트로 제어되는 특정 기간 동안 유효해지는 버전 임계값(현재, 경고, 에러) 세트를 정의합니다. 여러 개의 스케줄 버전을 설정함으로써, 오래된 클라이언트를 차단하기 전에 사용자에게 경고하는 등 단계적인 버전 강제를 구현할 수 있습니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 currentVersion Version  현재 버전 이 스케줄 기간 동안 사용 가능한 최신 버전입니다. “active” 스코프에서 사용자가 업데이트를 승인할 때 현재 버전을 알리는 데 사용됩니다. warningVersion Version  버전 업그레이드를 촉구하는 버전 이 스케줄 기간 동안 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. errorVersion Version  버전 체크에서 에러로 판정되는 버전 이 스케줄 기간 동안 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. scheduleEventId string ~ 1024자 버전 체크를 활성화하는 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버전 임계값 세트가 유효해지는 기간을 제어하는 GS2-Schedule의 이벤트를 지정합니다. 여기서 정의된 버전 체크 설정은 지정한 이벤트가 활성화되어 있는 기간에만 적용됩니다. CurrentVersionMaster 현재 활성화된 버전 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 버전 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 툴을 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Version 마스터 데이터 레퍼런스 를 참조해 주세요. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceId string ※ ~ 1024자 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 settings string  ~ 5242880 바이트 (5MB) 마스터 데이터 VersionModelMaster 버전 모델 마스터 버전 모델 마스터는 게임 내에서 사용되는 버전 모델을 편집·관리하기 위한 데이터로, 매니지먼트 콘솔의 마스터 데이터 에디터에 일시적으로 보관됩니다. 임포트·업데이트 처리를 수행함으로써 실제로 게임에서 참조되는 버전 모델로 반영됩니다. 버전 모델에서는 로그인은 허용하지만 업그레이드가 가능하다는 것을 알리는 경고 버전과, 로그인을 허용하지 않는 오류 버전을 설정할 수 있습니다. 현재 버전을 클라이언트에 신고하도록 하는 방식에 서명 유무를 지정할 수 있습니다. 서명 있음을 선택한 경우, 클라이언트는 거짓 버전 신고를 할 수 없게 됩니다. 상세 타입 활성화 조건 필수 기본값 값 제한 설명 versionModelId string ※ ~ 1024자 버전 모델 마스터 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scope 문자열 열거형 enum {   “passive”,   “active” }  판정에 사용할 버전 값의 종류 버전 체크에 사용할 버전 값을 얻는 방법을 결정합니다. “passive\"는 체크 시점에 클라이언트가 현재 버전을 신고하는 방식이며, “active\"는 사용자가 과거에 명시적으로 승인한 버전(이용약관 동의 등)을 사용하는 방식입니다. 정의 설명 passive 클라이언트에서 전송 active 과거 명시적으로 승인한 버전 type 문자열 열거형 enum {   “simple”,   “schedule” } “simple” 버전 체크 모드 버전 체크 방식을 선택합니다. “simple\"은 고정된 경고·에러 버전 임계값을 사용하며, “schedule\"은 GS2-Schedule의 이벤트를 이용하여 시기에 따라 다른 버전 임계값을 적용합니다. 정의 설명 simple 심플 schedule 시계열 전환 currentVersion Version {type} == “simple” and {scope} == “active” ※ 현재 버전 이 버전 모델의 최신 버전입니다. “simple” 모드의 “active” 스코프에서만 사용되며, 사용자가 버전 업데이트를 승인·확인할 때 현재 버전을 알립니다. ※ type이(가) “simple\"이고 scope이(가) “active” 이면 필수 warningVersion Version {type} == “simple” ※ 버전 업그레이드를 촉구하는 버전 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮은 경우에도 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 errorVersion Version {type} == “simple” ※ 버전 체크에서 에러로 판정되는 버전 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 scheduleVersions List {type} == “schedule” 0 ~ 10 items 시계열로 전환되는 버전 체크 내용 목록 GS2-Schedule의 이벤트를 기준으로 서로 다른 시점에 유효해지는 버전 체크 설정 목록입니다. 업데이트를 필수로 만들기 전에 경고를 표시하는 등 단계적인 버전 강제가 가능해집니다. ※ type이(가) “schedule” 이면 활성화 needSignature bool {scope} == “passive” ※ 판정할 버전 값에 서명 검증이 필요한지 여부 활성화하면 클라이언트는 버전 신고와 함께 암호 서명을 제공해야 합니다. 이를 통해 클라이언트가 버전 체크를 회피하기 위해 허위 버전을 신고하는 것을 방지합니다. 스코프가 “passive\"인 경우에만 적용됩니다. ※ scope이(가) “passive” 이면 필수 signatureKeyId string {needSignature} ※ ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ needSignature이(가) “true” 이면 필수 approveRequirement 문자열 열거형 enum {   “required”,   “optional” } {scope} == “active” “required” 승인 필요 여부 이 버전 모델에 대한 사용자 승인이 필수인지 임의인지를 제어합니다. “required\"인 경우, 사용자가 현재 버전을 승인하지 않으면 버전 체크가 실패합니다. “optional\"인 경우, 승인 상태와 관계없이 버전 체크가 통과합니다. 스코프가 “active\"인 경우에만 적용됩니다. 정의 설명 required 승인 필요 optional 임의 승인 ※ scope이(가) “active” 이면 활성화 createdAt long ※ 현재 시각 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 updatedAt long ※ 현재 시각 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 revision long 0 0 ~ 9223372036854775805 리비전 메서드 describeNamespaces 네임스페이스 목록 조회 프로젝트 내에서 서비스 단위로 생성된 네임스페이스의 목록을 조회합니다. 옵션인 페이지 토큰을 사용하여 목록의 특정 위치부터 데이터 조회를 시작할 수 있습니다. 또한 조회할 네임스페이스의 수를 제한하는 것도 가능합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namePrefix string ~ 64자 네임스페이스 이름의 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 네임스페이스 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DescribeNamespaces ( \u0026 version . DescribeNamespacesRequest { NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DescribeNamespacesRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e describeNamespaces ( ( new DescribeNamespacesRequest ()) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DescribeNamespacesRequest ; import io.gs2.version.result.DescribeNamespacesResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DescribeNamespacesResult result = client . describeNamespaces ( new DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List Namespace \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DescribeNamespacesResult \u003e asyncResult = null ; yield return client . DescribeNamespaces ( new Gs2 . Gs2Version . Request . DescribeNamespacesRequest () . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . describeNamespaces ( new Gs2Version . DescribeNamespacesRequest () . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . describe_namespaces ( version . DescribeNamespacesRequest () . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.describe_namespaces ({ namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'version' ) api_result_handler = client.describe_namespaces_async ({ namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createNamespace 네임스페이스 신규 생성 네임스페이스의 이름, 설명 및 각종 설정을 포함한 상세 정보를 지정해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 버전 체크 작업 시 트랜잭션 처리 방법을 제어하는 설정입니다. assumeUserId string  ~ 1024자 버전 체크를 통과한 경우 승격되는 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 버전 체크가 통과했을 때 권한을 이어받는 GS2-Identifier 사용자입니다. 버전 검증이 성공한 후, 시스템이 사용자를 대신하여 인가된 작업(액세스 부여 등)을 수행할 수 있도록 합니다. acceptVersionScript ScriptSetting 버전을 승인했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acceptVersion checkVersionTriggerScriptId string ~ 1024자 버전 체크 처리를 실행하는 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - checkVersion logSetting LogSetting 로그 출력 설정 버전 체크 및 버전 승인 작업에 관한 API 요청·응답 로그를 출력할 GS2-Log 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 생성한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CreateNamespace ( \u0026 version . CreateNamespaceRequest { Name : pointy . String ( \"namespace-0001\" ), Description : nil , TransactionSetting : nil , AssumeUserId : pointy . String ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ), AcceptVersionScript : nil , CheckVersionTriggerScriptId : nil , LogSetting : \u0026 version . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CreateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e createNamespace ( ( new CreateNamespaceRequest ()) -\u003e withName ( \"namespace-0001\" ) -\u003e withDescription ( null ) -\u003e withTransactionSetting ( null ) -\u003e withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) -\u003e withAcceptVersionScript ( null ) -\u003e withCheckVersionTriggerScriptId ( null ) -\u003e withLogSetting (( new \\Gs2\\Version\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CreateNamespaceRequest ; import io.gs2.version.result.CreateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CreateNamespaceResult result = client . createNamespace ( new CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . withAcceptVersionScript ( null ) . withCheckVersionTriggerScriptId ( null ) . withLogSetting ( new io . gs2 . version . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CreateNamespaceResult \u003e asyncResult = null ; yield return client . CreateNamespace ( new Gs2 . Gs2Version . Request . CreateNamespaceRequest () . WithName ( \"namespace-0001\" ) . WithDescription ( null ) . WithTransactionSetting ( null ) . WithAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . WithAcceptVersionScript ( null ) . WithCheckVersionTriggerScriptId ( null ) . WithLogSetting ( new Gs2 . Gs2Version . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . createNamespace ( new Gs2Version . CreateNamespaceRequest () . withName ( \"namespace-0001\" ) . withDescription ( null ) . withTransactionSetting ( null ) . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . withAcceptVersionScript ( null ) . withCheckVersionTriggerScriptId ( null ) . withLogSetting ( new Gs2Version . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . create_namespace ( version . CreateNamespaceRequest () . with_name ( 'namespace-0001' ) . with_description ( None ) . with_transaction_setting ( None ) . with_assume_user_id ( 'grn:gs2::YourOwnerId:identifier:user:user-0001' ) . with_accept_version_script ( None ) . with_check_version_trigger_script_id ( None ) . with_log_setting ( version . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.create_namespace ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , acceptVersionScript = nil , checkVersionTriggerScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.create_namespace_async ({ name = \"namespace-0001\" , description = nil , transactionSetting = nil , assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , acceptVersionScript = nil , checkVersionTriggerScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getNamespaceStatus 네임스페이스의 상태 조회 지정된 네임스페이스의 현재 상태를 조회합니다. 상태에는 네임스페이스가 활성 상태인지, 삭제되었는지가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 status string 네임스페이스의 상태 정의 설명 ACTIVE 유효 DELETED 삭제됨 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . GetNamespaceStatus ( \u0026 version . GetNamespaceStatusRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } status := result . Status use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\GetNamespaceStatusRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e getNamespaceStatus ( ( new GetNamespaceStatusRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $status = $result -\u003e getStatus (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.GetNamespaceStatusRequest ; import io.gs2.version.result.GetNamespaceStatusResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { GetNamespaceStatusResult result = client . getNamespaceStatus ( new GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); String status = result . getStatus (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . GetNamespaceStatusResult \u003e asyncResult = null ; yield return client . GetNamespaceStatus ( new Gs2 . Gs2Version . Request . GetNamespaceStatusRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var status = result . Status ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . getNamespaceStatus ( new Gs2Version . GetNamespaceStatusRequest () . withNamespaceName ( \"namespace-0001\" ) ); const status = result . getStatus (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . get_namespace_status ( version . GetNamespaceStatusRequest () . with_namespace_name ( 'namespace-0001' ) ) status = result . status except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.get_namespace_status ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; client = gs2 ( 'version' ) api_result_handler = client.get_namespace_status_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result status = result.status ; getNamespace 네임스페이스 조회 지정된 네임스페이스의 상세 정보를 조회합니다. 여기에는 네임스페이스의 이름, 설명 및 기타 설정 정보가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . GetNamespace ( \u0026 version . GetNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\GetNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e getNamespace ( ( new GetNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.GetNamespaceRequest ; import io.gs2.version.result.GetNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { GetNamespaceResult result = client . getNamespace ( new GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . GetNamespaceResult \u003e asyncResult = null ; yield return client . GetNamespace ( new Gs2 . Gs2Version . Request . GetNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . getNamespace ( new Gs2Version . GetNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . get_namespace ( version . GetNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.get_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.get_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateNamespace 네임스페이스 갱신 지정된 네임스페이스의 설정을 갱신합니다. 네임스페이스의 설명이나 특정 설정을 변경할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 버전 체크 작업 시 트랜잭션 처리 방법을 제어하는 설정입니다. assumeUserId string  ~ 1024자 버전 체크를 통과한 경우 승격되는 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 버전 체크가 통과했을 때 권한을 이어받는 GS2-Identifier 사용자입니다. 버전 검증이 성공한 후, 시스템이 사용자를 대신하여 인가된 작업(액세스 부여 등)을 수행할 수 있도록 합니다. acceptVersionScript ScriptSetting 버전을 승인했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acceptVersion checkVersionTriggerScriptId string ~ 1024자 버전 체크 처리를 실행하는 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - checkVersion logSetting LogSetting 로그 출력 설정 버전 체크 및 버전 승인 작업에 관한 API 요청·응답 로그를 출력할 GS2-Log 네임스페이스를 지정합니다. Result 타입 설명 item Namespace 갱신한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . UpdateNamespace ( \u0026 version . UpdateNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Description : pointy . String ( \"description1\" ), TransactionSetting : nil , AssumeUserId : pointy . String ( \"grn:gs2::YourOwnerId:identifier:user:user-0002\" ), AcceptVersionScript : nil , CheckVersionTriggerScriptId : nil , LogSetting : \u0026 version . LogSetting { LoggingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\UpdateNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e updateNamespace ( ( new UpdateNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withTransactionSetting ( null ) -\u003e withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0002\" ) -\u003e withAcceptVersionScript ( null ) -\u003e withCheckVersionTriggerScriptId ( null ) -\u003e withLogSetting (( new \\Gs2\\Version\\Model\\LogSetting ()) -\u003e withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.UpdateNamespaceRequest ; import io.gs2.version.result.UpdateNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { UpdateNamespaceResult result = client . updateNamespace ( new UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0002\" ) . withAcceptVersionScript ( null ) . withCheckVersionTriggerScriptId ( null ) . withLogSetting ( new io . gs2 . version . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . UpdateNamespaceResult \u003e asyncResult = null ; yield return client . UpdateNamespace ( new Gs2 . Gs2Version . Request . UpdateNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithDescription ( \"description1\" ) . WithTransactionSetting ( null ) . WithAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0002\" ) . WithAcceptVersionScript ( null ) . WithCheckVersionTriggerScriptId ( null ) . WithLogSetting ( new Gs2 . Gs2Version . Model . LogSetting () . WithLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . updateNamespace ( new Gs2Version . UpdateNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) . withDescription ( \"description1\" ) . withTransactionSetting ( null ) . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0002\" ) . withAcceptVersionScript ( null ) . withCheckVersionTriggerScriptId ( null ) . withLogSetting ( new Gs2Version . model . LogSetting () . withLoggingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . update_namespace ( version . UpdateNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) . with_description ( 'description1' ) . with_transaction_setting ( None ) . with_assume_user_id ( 'grn:gs2::YourOwnerId:identifier:user:user-0002' ) . with_accept_version_script ( None ) . with_check_version_trigger_script_id ( None ) . with_log_setting ( version . LogSetting () . with_logging_namespace_id ( 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.update_namespace ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0002\" , acceptVersionScript = nil , checkVersionTriggerScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.update_namespace_async ({ namespaceName = \"namespace-0001\" , description = \"description1\" , transactionSetting = nil , assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0002\" , acceptVersionScript = nil , checkVersionTriggerScriptId = nil , logSetting = { loggingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteNamespace 네임스페이스 삭제 지정된 네임스페이스를 삭제합니다. 이 작업은 되돌릴 수 없으며, 삭제된 네임스페이스와 관련된 모든 데이터는 복구할 수 없게 됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item Namespace 삭제한 네임스페이스 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DeleteNamespace ( \u0026 version . DeleteNamespaceRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DeleteNamespaceRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e deleteNamespace ( ( new DeleteNamespaceRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DeleteNamespaceRequest ; import io.gs2.version.result.DeleteNamespaceResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DeleteNamespaceResult result = client . deleteNamespace ( new DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); Namespace item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DeleteNamespaceResult \u003e asyncResult = null ; yield return client . DeleteNamespace ( new Gs2 . Gs2Version . Request . DeleteNamespaceRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . deleteNamespace ( new Gs2Version . DeleteNamespaceRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . delete_namespace ( version . DeleteNamespaceRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.delete_namespace ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.delete_namespace_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getServiceVersion 마이크로서비스 버전 조회 상세 Request 요청 파라미터: 없음 Result 타입 설명 item string 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . GetServiceVersion ( \u0026 version . GetServiceVersionRequest { } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\GetServiceVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e getServiceVersion ( ( new GetServiceVersionRequest ()) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.GetServiceVersionRequest ; import io.gs2.version.result.GetServiceVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { GetServiceVersionResult result = client . getServiceVersion ( new GetServiceVersionRequest () ); String item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . GetServiceVersionResult \u003e asyncResult = null ; yield return client . GetServiceVersion ( new Gs2 . Gs2Version . Request . GetServiceVersionRequest (), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . getServiceVersion ( new Gs2Version . GetServiceVersionRequest () ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . get_service_version ( version . GetServiceVersionRequest () ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.get_service_version ({ }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.get_service_version_async ({ }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; dumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프 취득 개인정보 보호에 관한 법적 요건을 충족시키기 위해 사용하거나, 데이터의 백업 및 이관에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DumpUserDataByUserId ( \u0026 version . DumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e dumpUserDataByUserId ( ( new DumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DumpUserDataByUserIdRequest ; import io.gs2.version.result.DumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DumpUserDataByUserIdResult result = client . dumpUserDataByUserId ( new DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . DumpUserDataByUserId ( new Gs2 . Gs2Version . Request . DumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . dumpUserDataByUserId ( new Gs2Version . DumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . dump_user_data_by_user_id ( version . DumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'version' ) api_result_handler = client.dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkDumpUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 덤프가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 데이터의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CheckDumpUserDataByUserId ( \u0026 version . CheckDumpUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CheckDumpUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e checkDumpUserDataByUserId ( ( new CheckDumpUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CheckDumpUserDataByUserIdRequest ; import io.gs2.version.result.CheckDumpUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CheckDumpUserDataByUserIdResult result = client . checkDumpUserDataByUserId ( new CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CheckDumpUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckDumpUserDataByUserId ( new Gs2 . Gs2Version . Request . CheckDumpUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . checkDumpUserDataByUserId ( new Gs2Version . CheckDumpUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . check_dump_user_data_by_user_id ( version . CheckDumpUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.check_dump_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'version' ) api_result_handler = client.check_dump_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; cleanUserDataByUserId 사용자 데이터 완전 삭제 지정된 사용자 ID에 연결된 데이터 삭제를 실행합니다. 이를 통해 특정 사용자 데이터를 프로젝트에서 안전하게 삭제할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CleanUserDataByUserId ( \u0026 version . CleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e cleanUserDataByUserId ( ( new CleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CleanUserDataByUserIdRequest ; import io.gs2.version.result.CleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CleanUserDataByUserIdResult result = client . cleanUserDataByUserId ( new CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CleanUserDataByUserId ( new Gs2 . Gs2Version . Request . CleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . cleanUserDataByUserId ( new Gs2Version . CleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . clean_user_data_by_user_id ( version . CleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'version' ) api_result_handler = client.clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkCleanUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 삭제가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CheckCleanUserDataByUserId ( \u0026 version . CheckCleanUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CheckCleanUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e checkCleanUserDataByUserId ( ( new CheckCleanUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CheckCleanUserDataByUserIdRequest ; import io.gs2.version.result.CheckCleanUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CheckCleanUserDataByUserIdResult result = client . checkCleanUserDataByUserId ( new CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CheckCleanUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckCleanUserDataByUserId ( new Gs2 . Gs2Version . Request . CheckCleanUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . checkCleanUserDataByUserId ( new Gs2Version . CheckCleanUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . check_clean_user_data_by_user_id ( version . CheckCleanUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.check_clean_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'version' ) api_result_handler = client.check_clean_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result prepareImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 준비 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API의 반환값으로 응답된 URL에 익스포트한 zip 파일을 업로드하고 importUserDataByUserId 를 호출함으로써 실제 임포트 처리를 시작할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 사용자 데이터 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . PrepareImportUserDataByUserId ( \u0026 version . PrepareImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\PrepareImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e prepareImportUserDataByUserId ( ( new PrepareImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.PrepareImportUserDataByUserIdRequest ; import io.gs2.version.result.PrepareImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { PrepareImportUserDataByUserIdResult result = client . prepareImportUserDataByUserId ( new PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . PrepareImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . PrepareImportUserDataByUserId ( new Gs2 . Gs2Version . Request . PrepareImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . prepareImportUserDataByUserId ( new Gs2Version . PrepareImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withTimeOffsetToken ( null ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . prepare_import_user_data_by_user_id ( version . PrepareImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_time_offset_token ( None ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.prepare_import_user_data_by_user_id ({ userId = \"user-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'version' ) api_result_handler = client.prepare_import_user_data_by_user_id_async ({ userId = \"user-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; importUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트 실행 임포트에 사용할 수 있는 데이터는 GS2 를 통해 익스포트하여 취득한 데이터로 한정되며, 오래된 데이터는 임포트에 실패할 수 있습니다. 익스포트한 사용자 ID와 다른 사용자 ID로 임포트할 수 있지만, 사용자 데이터의 페이로드 내에 사용자 ID가 포함되어 있는 경우에는 그렇지 않을 수 있습니다. 이 API를 호출하기 전에 prepareImportUserDataByUserId 를 호출하여 업로드 준비를 완료해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 반환값: 없음 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . ImportUserDataByUserId ( \u0026 version . ImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\ImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e importUserDataByUserId ( ( new ImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.ImportUserDataByUserIdRequest ; import io.gs2.version.result.ImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { ImportUserDataByUserIdResult result = client . importUserDataByUserId ( new ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . ImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . ImportUserDataByUserId ( new Gs2 . Gs2Version . Request . ImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . importUserDataByUserId ( new Gs2Version . ImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . import_user_data_by_user_id ( version . ImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result client = gs2 ( 'version' ) api_result_handler = client.import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result checkImportUserDataByUserId 지정한 사용자 ID에 연결된 데이터의 임포트가 완료되었는지 확인 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 userId string  ~ 128자 사용자ID uploadToken string  ~ 1024자 업로드 준비 시 수신한 토큰 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 url string 출력 로그의 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CheckImportUserDataByUserId ( \u0026 version . CheckImportUserDataByUserIdRequest { UserId : pointy . String ( \"user-0001\" ), UploadToken : pointy . String ( \"upload-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } url := result . Url use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CheckImportUserDataByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e checkImportUserDataByUserId ( ( new CheckImportUserDataByUserIdRequest ()) -\u003e withUserId ( \"user-0001\" ) -\u003e withUploadToken ( \"upload-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $url = $result -\u003e getUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CheckImportUserDataByUserIdRequest ; import io.gs2.version.result.CheckImportUserDataByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CheckImportUserDataByUserIdResult result = client . checkImportUserDataByUserId ( new CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); String url = result . getUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CheckImportUserDataByUserIdResult \u003e asyncResult = null ; yield return client . CheckImportUserDataByUserId ( new Gs2 . Gs2Version . Request . CheckImportUserDataByUserIdRequest () . WithUserId ( \"user-0001\" ) . WithUploadToken ( \"upload-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var url = result . Url ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . checkImportUserDataByUserId ( new Gs2Version . CheckImportUserDataByUserIdRequest () . withUserId ( \"user-0001\" ) . withUploadToken ( \"upload-0001\" ) . withTimeOffsetToken ( null ) ); const url = result . getUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . check_import_user_data_by_user_id ( version . CheckImportUserDataByUserIdRequest () . with_user_id ( 'user-0001' ) . with_upload_token ( 'upload-0001' ) . with_time_offset_token ( None ) ) url = result . url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.check_import_user_data_by_user_id ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; client = gs2 ( 'version' ) api_result_handler = client.check_import_user_data_by_user_id_async ({ userId = \"user-0001\" , uploadToken = \"upload-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result url = result.url ; describeAcceptVersions 승인한 버전 목록 조회 요청한 사용자가 승인 또는 거부한 버전의 페이지네이션 목록을 조회합니다. 각 레코드에는 버전 모델 이름과 승인/거부된 버전 번호가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 승인한 버전 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DescribeAcceptVersions ( \u0026 version . DescribeAcceptVersionsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DescribeAcceptVersionsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e describeAcceptVersions ( ( new DescribeAcceptVersionsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DescribeAcceptVersionsRequest ; import io.gs2.version.result.DescribeAcceptVersionsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DescribeAcceptVersionsResult result = client . describeAcceptVersions ( new DescribeAcceptVersionsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); List AcceptVersion \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DescribeAcceptVersionsResult \u003e asyncResult = null ; yield return client . DescribeAcceptVersions ( new Gs2 . Gs2Version . Request . DescribeAcceptVersionsRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . describeAcceptVersions ( new Gs2Version . DescribeAcceptVersionsRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . describe_accept_versions ( version . DescribeAcceptVersionsRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.describe_accept_versions ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'version' ) api_result_handler = client.describe_accept_versions_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; describeAcceptVersionsByUserId 사용자 ID를 지정하여 승인한 버전 목록 조회 지정한 사용자가 승인 또는 거부한 버전의 페이지네이션 목록을 조회합니다. 각 레코드에는 버전 모델 이름과 승인/거부된 버전 번호가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 items List 승인한 버전 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DescribeAcceptVersionsByUserId ( \u0026 version . DescribeAcceptVersionsByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), PageToken : nil , Limit : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DescribeAcceptVersionsByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e describeAcceptVersionsByUserId ( ( new DescribeAcceptVersionsByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) -\u003e withTimeOffsetToken ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DescribeAcceptVersionsByUserIdRequest ; import io.gs2.version.result.DescribeAcceptVersionsByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DescribeAcceptVersionsByUserIdResult result = client . describeAcceptVersionsByUserId ( new DescribeAcceptVersionsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); List AcceptVersion \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DescribeAcceptVersionsByUserIdResult \u003e asyncResult = null ; yield return client . DescribeAcceptVersionsByUserId ( new Gs2 . Gs2Version . Request . DescribeAcceptVersionsByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithPageToken ( null ) . WithLimit ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . describeAcceptVersionsByUserId ( new Gs2Version . DescribeAcceptVersionsByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withPageToken ( null ) . withLimit ( null ) . withTimeOffsetToken ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . describe_accept_versions_by_user_id ( version . DescribeAcceptVersionsByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_page_token ( None ) . with_limit ( None ) . with_time_offset_token ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.describe_accept_versions_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'version' ) api_result_handler = client.describe_accept_versions_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , pageToken = nil , limit = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; accept 현재 버전을 승인 이용약관 등에서 이 기능을 사용하는 경우, 사용자가 이용약관을 확인하는 동안 서버의 현재 버전이 갱신되면 오류가 발생하므로 version 인수에 동의하려는 버전을 지정해 주세요. 버전을 지정하지 않으면 최신 버전으로 승인이 이루어진 것으로 간주되며, 인수로 버전을 지정한 경우 해당 버전이 오류 버전 조건을 만족하면 오류가 발생합니다. 오류 버전 이외의 조건을 만족하더라도 API는 성공하며, 클라이언트가 지정한 버전으로 승인한 것으로 처리됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. accessToken string  ~ 128자 액세스 토큰 version Version 승인한 버전 Result 타입 설명 item AcceptVersion 승인한 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . Accept ( \u0026 version . AcceptRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"eula\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Version : \u0026 version . Version { Major : pointy . Int32 ( 2 ), Minor : pointy . Int32 ( 2 ), Micro : pointy . Int32 ( 2 ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\AcceptRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e accept ( ( new AcceptRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"eula\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withVersion (( new \\Gs2\\Version\\Model\\Version ()) -\u003e withMajor ( 2 ) -\u003e withMinor ( 2 ) -\u003e withMicro ( 2 )) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.AcceptRequest ; import io.gs2.version.result.AcceptResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { AcceptResult result = client . accept ( new AcceptRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"eula\" ) . withAccessToken ( \"accessToken-0001\" ) . withVersion ( new io . gs2 . version . model . Version () . withMajor ( 2 ) . withMinor ( 2 ) . withMicro ( 2 )) ); AcceptVersion item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . AcceptResult \u003e asyncResult = null ; yield return client . Accept ( new Gs2 . Gs2Version . Request . AcceptRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"eula\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 2 ) . WithMinor ( 2 ) . WithMicro ( 2 )), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . accept ( new Gs2Version . AcceptRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"eula\" ) . withAccessToken ( \"accessToken-0001\" ) . withVersion ( new Gs2Version . model . Version () . withMajor ( 2 ) . withMinor ( 2 ) . withMicro ( 2 )) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . accept ( version . AcceptRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'eula' ) . with_access_token ( 'accessToken-0001' ) . with_version ( version . Version () . with_major ( 2 ) . with_minor ( 2 ) . with_micro ( 2 )) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.accept ({ namespaceName = \"namespace-0001\" , versionName = \"eula\" , accessToken = \"accessToken-0001\" , version = { major = 2 , minor = 2 , micro = 2 , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.accept_async ({ namespaceName = \"namespace-0001\" , versionName = \"eula\" , accessToken = \"accessToken-0001\" , version = { major = 2 , minor = 2 , micro = 2 , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; acceptByUserId 사용자 ID를 지정하여 현재 버전을 승인 이용약관 등에서 이 기능을 사용하는 경우, 사용자가 이용약관을 확인하는 동안 서버의 현재 버전이 갱신되면 오류가 발생하므로 version 인수에 동의하려는 버전을 지정해 주세요. 버전을 지정하지 않으면 최신 버전으로 승인이 이루어진 것으로 간주되며, 인수로 버전을 지정한 경우 해당 버전이 오류 버전 조건을 만족하면 오류가 발생합니다. 오류 버전 이외의 조건을 만족하더라도 API는 성공하며, 클라이언트가 지정한 버전으로 승인한 것으로 처리됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. userId string  ~ 128자 사용자ID version Version 승인한 버전 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item AcceptVersion 승인한 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . AcceptByUserId ( \u0026 version . AcceptByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"version-0001\" ), UserId : pointy . String ( \"user-0001\" ), Version : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\AcceptByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e acceptByUserId ( ( new AcceptByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"version-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withVersion ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.AcceptByUserIdRequest ; import io.gs2.version.result.AcceptByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { AcceptByUserIdResult result = client . acceptByUserId ( new AcceptByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withUserId ( \"user-0001\" ) . withVersion ( null ) . withTimeOffsetToken ( null ) ); AcceptVersion item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . AcceptByUserIdResult \u003e asyncResult = null ; yield return client . AcceptByUserId ( new Gs2 . Gs2Version . Request . AcceptByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"version-0001\" ) . WithUserId ( \"user-0001\" ) . WithVersion ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . acceptByUserId ( new Gs2Version . AcceptByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withUserId ( \"user-0001\" ) . withVersion ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . accept_by_user_id ( version . AcceptByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'version-0001' ) . with_user_id ( 'user-0001' ) . with_version ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.accept_by_user_id ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , userId = \"user-0001\" , version = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.accept_by_user_id_async ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , userId = \"user-0001\" , version = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; reject 현재 버전을 거부 승인이 필수가 아닌 약관에서 거부되었음을 기록하기 위해 사용합니다. 이 API를 호출하려면 VersionModel의 approveRequirement가 optional이어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. accessToken string  ~ 128자 액세스 토큰 version Version 거부한 버전 Result 타입 설명 item AcceptVersion 거부한 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . Reject ( \u0026 version . RejectRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"version-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), Version : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\RejectRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e reject ( ( new RejectRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"version-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withVersion ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.RejectRequest ; import io.gs2.version.result.RejectResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { RejectResult result = client . reject ( new RejectRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVersion ( null ) ); AcceptVersion item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . RejectResult \u003e asyncResult = null ; yield return client . Reject ( new Gs2 . Gs2Version . Request . RejectRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"version-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithVersion ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . reject ( new Gs2Version . RejectRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVersion ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . reject ( version . RejectRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'version-0001' ) . with_access_token ( 'accessToken-0001' ) . with_version ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.reject ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , accessToken = \"accessToken-0001\" , version = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.reject_async ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , accessToken = \"accessToken-0001\" , version = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; rejectByUserId 사용자 ID를 지정하여 현재 버전을 거부 승인이 필수가 아닌 약관에서 거부되었음을 기록하기 위해 사용합니다. 이 API를 호출하려면 VersionModel의 approveRequirement가 optional이어야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. userId string  ~ 128자 사용자ID version Version 거부한 버전 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item AcceptVersion 거부한 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . RejectByUserId ( \u0026 version . RejectByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"version-0001\" ), UserId : pointy . String ( \"user-0001\" ), Version : nil , TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\RejectByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e rejectByUserId ( ( new RejectByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"version-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withVersion ( null ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.RejectByUserIdRequest ; import io.gs2.version.result.RejectByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { RejectByUserIdResult result = client . rejectByUserId ( new RejectByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withUserId ( \"user-0001\" ) . withVersion ( null ) . withTimeOffsetToken ( null ) ); AcceptVersion item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . RejectByUserIdResult \u003e asyncResult = null ; yield return client . RejectByUserId ( new Gs2 . Gs2Version . Request . RejectByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"version-0001\" ) . WithUserId ( \"user-0001\" ) . WithVersion ( null ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . rejectByUserId ( new Gs2Version . RejectByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withUserId ( \"user-0001\" ) . withVersion ( null ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . reject_by_user_id ( version . RejectByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'version-0001' ) . with_user_id ( 'user-0001' ) . with_version ( None ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.reject_by_user_id ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , userId = \"user-0001\" , version = nil , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.reject_by_user_id_async ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , userId = \"user-0001\" , version = nil , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getAcceptVersion 승인한 버전 조회 요청한 사용자와 지정된 버전 모델의 버전 승인 레코드를 조회합니다. 승인 또는 거부된 버전 번호가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. Result 타입 설명 item AcceptVersion 승인한 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . GetAcceptVersion ( \u0026 version . GetAcceptVersionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), VersionName : pointy . String ( \"eula\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\GetAcceptVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e getAcceptVersion ( ( new GetAcceptVersionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withVersionName ( \"eula\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.GetAcceptVersionRequest ; import io.gs2.version.result.GetAcceptVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { GetAcceptVersionResult result = client . getAcceptVersion ( new GetAcceptVersionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVersionName ( \"eula\" ) ); AcceptVersion item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . GetAcceptVersionResult \u003e asyncResult = null ; yield return client . GetAcceptVersion ( new Gs2 . Gs2Version . Request . GetAcceptVersionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithVersionName ( \"eula\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . getAcceptVersion ( new Gs2Version . GetAcceptVersionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVersionName ( \"eula\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . get_accept_version ( version . GetAcceptVersionRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_version_name ( 'eula' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.get_accept_version ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , versionName = \"eula\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.get_accept_version_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , versionName = \"eula\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getAcceptVersionByUserId 사용자 ID를 지정하여 승인한 버전 조회 지정한 사용자와 버전 모델의 버전 승인 레코드를 조회합니다. 승인 또는 거부된 버전 번호가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item AcceptVersion 승인한 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . GetAcceptVersionByUserId ( \u0026 version . GetAcceptVersionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), VersionName : pointy . String ( \"version-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\GetAcceptVersionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e getAcceptVersionByUserId ( ( new GetAcceptVersionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withVersionName ( \"version-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.GetAcceptVersionByUserIdRequest ; import io.gs2.version.result.GetAcceptVersionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { GetAcceptVersionByUserIdResult result = client . getAcceptVersionByUserId ( new GetAcceptVersionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withVersionName ( \"version-0001\" ) . withTimeOffsetToken ( null ) ); AcceptVersion item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . GetAcceptVersionByUserIdResult \u003e asyncResult = null ; yield return client . GetAcceptVersionByUserId ( new Gs2 . Gs2Version . Request . GetAcceptVersionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithVersionName ( \"version-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . getAcceptVersionByUserId ( new Gs2Version . GetAcceptVersionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withVersionName ( \"version-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . get_accept_version_by_user_id ( version . GetAcceptVersionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_version_name ( 'version-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.get_accept_version_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , versionName = \"version-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.get_accept_version_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , versionName = \"version-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteAcceptVersion 승인한 버전 삭제 요청한 사용자의 버전 승인 레코드를 삭제합니다. 삭제 후 버전 모델이 active 스코프를 사용하는 경우, 다음 버전 체크 시 사용자는 버전을 다시 승인해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. Result 타입 설명 item AcceptVersion 삭제한 승인 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DeleteAcceptVersion ( \u0026 version . DeleteAcceptVersionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), VersionName : pointy . String ( \"eula\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DeleteAcceptVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e deleteAcceptVersion ( ( new DeleteAcceptVersionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withVersionName ( \"eula\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DeleteAcceptVersionRequest ; import io.gs2.version.result.DeleteAcceptVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DeleteAcceptVersionResult result = client . deleteAcceptVersion ( new DeleteAcceptVersionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVersionName ( \"eula\" ) ); AcceptVersion item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DeleteAcceptVersionResult \u003e asyncResult = null ; yield return client . DeleteAcceptVersion ( new Gs2 . Gs2Version . Request . DeleteAcceptVersionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithVersionName ( \"eula\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . deleteAcceptVersion ( new Gs2Version . DeleteAcceptVersionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withVersionName ( \"eula\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . delete_accept_version ( version . DeleteAcceptVersionRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_version_name ( 'eula' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.delete_accept_version ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , versionName = \"eula\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.delete_accept_version_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , versionName = \"eula\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteAcceptVersionByUserId 사용자 ID를 지정하여 승인한 버전 삭제 지정한 사용자의 버전 승인 레코드를 삭제합니다. 삭제 후 버전 모델이 active 스코프를 사용하는 경우, 다음 버전 체크 시 사용자는 버전을 다시 승인해야 합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID versionName string  ~ 128자 버전 이름 이 승인 레코드가 연결되어 있는 버전 모델의 이름입니다. 사용자의 승인을 특정 버전 모델 정의에 연결합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 item AcceptVersion 삭제한 승인 버전 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DeleteAcceptVersionByUserId ( \u0026 version . DeleteAcceptVersionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), VersionName : pointy . String ( \"version-0001\" ), TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DeleteAcceptVersionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e deleteAcceptVersionByUserId ( ( new DeleteAcceptVersionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withVersionName ( \"version-0001\" ) -\u003e withTimeOffsetToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DeleteAcceptVersionByUserIdRequest ; import io.gs2.version.result.DeleteAcceptVersionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DeleteAcceptVersionByUserIdResult result = client . deleteAcceptVersionByUserId ( new DeleteAcceptVersionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withVersionName ( \"version-0001\" ) . withTimeOffsetToken ( null ) ); AcceptVersion item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DeleteAcceptVersionByUserIdResult \u003e asyncResult = null ; yield return client . DeleteAcceptVersionByUserId ( new Gs2 . Gs2Version . Request . DeleteAcceptVersionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithVersionName ( \"version-0001\" ) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . deleteAcceptVersionByUserId ( new Gs2Version . DeleteAcceptVersionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withVersionName ( \"version-0001\" ) . withTimeOffsetToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . delete_accept_version_by_user_id ( version . DeleteAcceptVersionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_version_name ( 'version-0001' ) . with_time_offset_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.delete_accept_version_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , versionName = \"version-0001\" , timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.delete_accept_version_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , versionName = \"version-0001\" , timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; checkVersion 버전 체크 네임스페이스 내의 모든 버전 모델에 대해 클라이언트의 버전을 체크합니다. passive 스코프 모델에서는 targetVersions로 전달된 클라이언트 보고 버전이 사용됩니다(옵션으로 키 서비스를 통한 서명 검증 가능). active 스코프 모델에서는 사용자가 이전에 승인한 버전을 참조합니다. 버전 임계값을 기준으로 경고와 오류의 개별 목록을 반환합니다. 모든 체크가 오류 없이 통과되면, 네임스페이스에 설정된 사용자 ID를 사용하여 프로젝트 토큰이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. accessToken string  ~ 128자 액세스 토큰 targetVersions List [] 0 ~ 1000 items 검증할 버전 목록 Result 타입 설명 projectToken string 로그인한 프로젝트 토큰 warnings List 버전 검증 결과 경고 목록 errors List 버전 검증 결과 오류 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CheckVersion ( \u0026 version . CheckVersionRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), AccessToken : pointy . String ( \"accessToken-0001\" ), TargetVersions : [] version . TargetVersion { version . TargetVersion { VersionName : pointy . String ( \"app\" ), Version : \u0026 version . Version { Major : pointy . Int32 ( 1 ), Minor : pointy . Int32 ( 2 ), Micro : pointy . Int32 ( 3 ), }, }, version . TargetVersion { VersionName : pointy . String ( \"asset\" ), Version : \u0026 version . Version { Major : pointy . Int32 ( 1 ), Minor : pointy . Int32 ( 2 ), Micro : pointy . Int32 ( 3 ), }, }, }, } ) if err != nil { panic ( \"error occurred\" ) } projectToken := result . ProjectToken warnings := result . Warnings errors := result . Errors use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CheckVersionRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e checkVersion ( ( new CheckVersionRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withAccessToken ( \"accessToken-0001\" ) -\u003e withTargetVersions ([ ( new TargetVersion ()) -\u003e withVersionName ( \"app\" ) -\u003e withVersion ( ( new Version ()) -\u003e withMajor ( 1 ) -\u003e withMinor ( 2 ) -\u003e withMicro ( 3 ) ), ( new TargetVersion ()) -\u003e withVersionName ( \"asset\" ) -\u003e withVersion ( ( new Version ()) -\u003e withMajor ( 1 ) -\u003e withMinor ( 2 ) -\u003e withMicro ( 3 ) ), ]) ); $projectToken = $result -\u003e getProjectToken (); $warnings = $result -\u003e getWarnings (); $errors = $result -\u003e getErrors (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CheckVersionRequest ; import io.gs2.version.result.CheckVersionResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CheckVersionResult result = client . checkVersion ( new CheckVersionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetVersions ( Arrays . asList ( new TargetVersion () . withVersionName ( \"app\" ) . withVersion ( new Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ), new TargetVersion () . withVersionName ( \"asset\" ) . withVersion ( new Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ) )) ); String projectToken = result . getProjectToken (); List Status \u003e warnings = result . getWarnings (); List Status \u003e errors = result . getErrors (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CheckVersionResult \u003e asyncResult = null ; yield return client . CheckVersion ( new Gs2 . Gs2Version . Request . CheckVersionRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithAccessToken ( \"accessToken-0001\" ) . WithTargetVersions ( new Gs2 . Gs2Version . Model . TargetVersion [] { new Gs2 . Gs2Version . Model . TargetVersion () . WithVersionName ( \"app\" ) . WithVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 1 ) . WithMinor ( 2 ) . WithMicro ( 3 ) ), new Gs2 . Gs2Version . Model . TargetVersion () . WithVersionName ( \"asset\" ) . WithVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 1 ) . WithMinor ( 2 ) . WithMicro ( 3 ) ), }), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var projectToken = result . ProjectToken ; var warnings = result . Warnings ; var errors = result . Errors ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . checkVersion ( new Gs2Version . CheckVersionRequest () . withNamespaceName ( \"namespace-0001\" ) . withAccessToken ( \"accessToken-0001\" ) . withTargetVersions ([ new Gs2Version . model . TargetVersion () . withVersionName ( \"app\" ) . withVersion ( new Gs2Version . model . Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ), new Gs2Version . model . TargetVersion () . withVersionName ( \"asset\" ) . withVersion ( new Gs2Version . model . Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ), ]) ); const projectToken = result . getProjectToken (); const warnings = result . getWarnings (); const errors = result . getErrors (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . check_version ( version . CheckVersionRequest () . with_namespace_name ( 'namespace-0001' ) . with_access_token ( 'accessToken-0001' ) . with_target_versions ([ version . TargetVersion () . with_version_name ( 'app' ) . with_version ( version . Version () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ), version . TargetVersion () . with_version_name ( 'asset' ) . with_version ( version . Version () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ), ]) ) project_token = result . project_token warnings = result . warnings errors = result . errors except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.check_version ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetVersions = { { version_name = \"app\" , version = { major = 1 , minor = 2 , micro = 3 , }, }, { version_name = \"asset\" , version = { major = 1 , minor = 2 , micro = 3 , }, } }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result projectToken = result.projectToken ; warnings = result.warnings ; errors = result.errors ; client = gs2 ( 'version' ) api_result_handler = client.check_version_async ({ namespaceName = \"namespace-0001\" , accessToken = \"accessToken-0001\" , targetVersions = { { version_name = \"app\" , version = { major = 1 , minor = 2 , micro = 3 , }, }, { version_name = \"asset\" , version = { major = 1 , minor = 2 , micro = 3 , }, } }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result projectToken = result.projectToken ; warnings = result.warnings ; errors = result.errors ; checkVersionByUserId 사용자 ID를 지정하여 버전 체크 네임스페이스 내의 모든 버전 모델에 대해 지정한 사용자의 버전을 체크합니다. passive 스코프 모델에서는 targetVersions로 전달된 클라이언트 보고 버전이 사용됩니다(옵션으로 서명 검증 가능). active 스코프 모델에서는 사용자가 이전에 승인한 버전을 참조합니다. 버전 임계값을 기준으로 경고와 오류의 개별 목록을 반환합니다. 모든 체크가 오류 없이 통과되면, 프로젝트 토큰이 발행됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID targetVersions List [] 0 ~ 1000 items 검증할 버전 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Result 타입 설명 projectToken string 로그인한 프로젝트 토큰 warnings List 버전 검증 결과 경고 목록 errors List 버전 검증 결과 오류 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CheckVersionByUserId ( \u0026 version . CheckVersionByUserIdRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), UserId : pointy . String ( \"user-0001\" ), TargetVersions : [] version . TargetVersion { version . TargetVersion { VersionName : pointy . String ( \"app\" ), Version : \u0026 version . Version { Major : pointy . Int32 ( 1 ), Minor : pointy . Int32 ( 2 ), Micro : pointy . Int32 ( 3 ), }, }, version . TargetVersion { VersionName : pointy . String ( \"asset\" ), Version : \u0026 version . Version { Major : pointy . Int32 ( 1 ), Minor : pointy . Int32 ( 2 ), Micro : pointy . Int32 ( 3 ), }, }, }, TimeOffsetToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } projectToken := result . ProjectToken warnings := result . Warnings errors := result . Errors use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CheckVersionByUserIdRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e checkVersionByUserId ( ( new CheckVersionByUserIdRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withUserId ( \"user-0001\" ) -\u003e withTargetVersions ([ ( new TargetVersion ()) -\u003e withVersionName ( \"app\" ) -\u003e withVersion ( ( new Version ()) -\u003e withMajor ( 1 ) -\u003e withMinor ( 2 ) -\u003e withMicro ( 3 ) ), ( new TargetVersion ()) -\u003e withVersionName ( \"asset\" ) -\u003e withVersion ( ( new Version ()) -\u003e withMajor ( 1 ) -\u003e withMinor ( 2 ) -\u003e withMicro ( 3 ) ), ]) -\u003e withTimeOffsetToken ( null ) ); $projectToken = $result -\u003e getProjectToken (); $warnings = $result -\u003e getWarnings (); $errors = $result -\u003e getErrors (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CheckVersionByUserIdRequest ; import io.gs2.version.result.CheckVersionByUserIdResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CheckVersionByUserIdResult result = client . checkVersionByUserId ( new CheckVersionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetVersions ( Arrays . asList ( new TargetVersion () . withVersionName ( \"app\" ) . withVersion ( new Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ), new TargetVersion () . withVersionName ( \"asset\" ) . withVersion ( new Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ) )) . withTimeOffsetToken ( null ) ); String projectToken = result . getProjectToken (); List Status \u003e warnings = result . getWarnings (); List Status \u003e errors = result . getErrors (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CheckVersionByUserIdResult \u003e asyncResult = null ; yield return client . CheckVersionByUserId ( new Gs2 . Gs2Version . Request . CheckVersionByUserIdRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithUserId ( \"user-0001\" ) . WithTargetVersions ( new Gs2 . Gs2Version . Model . TargetVersion [] { new Gs2 . Gs2Version . Model . TargetVersion () . WithVersionName ( \"app\" ) . WithVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 1 ) . WithMinor ( 2 ) . WithMicro ( 3 ) ), new Gs2 . Gs2Version . Model . TargetVersion () . WithVersionName ( \"asset\" ) . WithVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 1 ) . WithMinor ( 2 ) . WithMicro ( 3 ) ), }) . WithTimeOffsetToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var projectToken = result . ProjectToken ; var warnings = result . Warnings ; var errors = result . Errors ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . checkVersionByUserId ( new Gs2Version . CheckVersionByUserIdRequest () . withNamespaceName ( \"namespace-0001\" ) . withUserId ( \"user-0001\" ) . withTargetVersions ([ new Gs2Version . model . TargetVersion () . withVersionName ( \"app\" ) . withVersion ( new Gs2Version . model . Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ), new Gs2Version . model . TargetVersion () . withVersionName ( \"asset\" ) . withVersion ( new Gs2Version . model . Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ), ]) . withTimeOffsetToken ( null ) ); const projectToken = result . getProjectToken (); const warnings = result . getWarnings (); const errors = result . getErrors (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . check_version_by_user_id ( version . CheckVersionByUserIdRequest () . with_namespace_name ( 'namespace-0001' ) . with_user_id ( 'user-0001' ) . with_target_versions ([ version . TargetVersion () . with_version_name ( 'app' ) . with_version ( version . Version () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ), version . TargetVersion () . with_version_name ( 'asset' ) . with_version ( version . Version () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ), ]) . with_time_offset_token ( None ) ) project_token = result . project_token warnings = result . warnings errors = result . errors except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.check_version_by_user_id ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetVersions = { { version_name = \"app\" , version = { major = 1 , minor = 2 , micro = 3 , }, }, { version_name = \"asset\" , version = { major = 1 , minor = 2 , micro = 3 , }, } }, timeOffsetToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result projectToken = result.projectToken ; warnings = result.warnings ; errors = result.errors ; client = gs2 ( 'version' ) api_result_handler = client.check_version_by_user_id_async ({ namespaceName = \"namespace-0001\" , userId = \"user-0001\" , targetVersions = { { version_name = \"app\" , version = { major = 1 , minor = 2 , micro = 3 , }, }, { version_name = \"asset\" , version = { major = 1 , minor = 2 , micro = 3 , }, } }, timeOffsetToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result projectToken = result.projectToken ; warnings = result.warnings ; errors = result.errors ; calculateSignature 버전 서명 계산 키 서비스를 사용하여 지정된 버전의 암호 서명을 계산합니다. 리전, 오너, 네임스페이스 컨텍스트와 함께 버전 정보가 본문(body)으로 직렬화되고, 버전 모델에 설정된 서명 키로 서명됩니다. 결과로 생성된 본문과 서명은 passive 스코프 모델에서 서명 검증이 포함된 버전 체크에 사용할 수 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. version Version 버전 Result 타입 설명 body string 본문 signature string 서명 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CalculateSignature ( \u0026 version . CalculateSignatureRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"version-0001\" ), Version : \u0026 version . Version { Major : pointy . Int32 ( 1 ), Minor : pointy . Int32 ( 2 ), Micro : pointy . Int32 ( 3 ), }, } ) if err != nil { panic ( \"error occurred\" ) } body := result . Body signature := result . Signature use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CalculateSignatureRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e calculateSignature ( ( new CalculateSignatureRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"version-0001\" ) -\u003e withVersion (( new Version ()) -\u003e withMajor ( 1 ) -\u003e withMinor ( 2 ) -\u003e withMicro ( 3 ) ) ); $body = $result -\u003e getBody (); $signature = $result -\u003e getSignature (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CalculateSignatureRequest ; import io.gs2.version.result.CalculateSignatureResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CalculateSignatureResult result = client . calculateSignature ( new CalculateSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withVersion ( new Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ) ); String body = result . getBody (); String signature = result . getSignature (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CalculateSignatureResult \u003e asyncResult = null ; yield return client . CalculateSignature ( new Gs2 . Gs2Version . Request . CalculateSignatureRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"version-0001\" ) . WithVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 1 ) . WithMinor ( 2 ) . WithMicro ( 3 ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var body = result . Body ; var signature = result . Signature ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . calculateSignature ( new Gs2Version . CalculateSignatureRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withVersion ( new Gs2Version . model . Version () . withMajor ( 1 ) . withMinor ( 2 ) . withMicro ( 3 ) ) ); const body = result . getBody (); const signature = result . getSignature (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . calculate_signature ( version . CalculateSignatureRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'version-0001' ) . with_version ( version . Version () . with_major ( 1 ) . with_minor ( 2 ) . with_micro ( 3 ) ) ) body = result . body signature = result . signature except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.calculate_signature ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , version = { major = 1 , minor = 2 , micro = 3 , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result body = result.body ; signature = result.signature ; client = gs2 ( 'version' ) api_result_handler = client.calculate_signature_async ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , version = { major = 1 , minor = 2 , micro = 3 , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result body = result.body ; signature = result.signature ; describeVersionModels 버전 모델 목록 조회 현재 활성화된 버전 모델의 목록을 조회합니다. 각 모델에는 스코프(passive/active), 경고/오류 버전 임계값, 일정 기반 버전 제어, 서명 검증 설정을 포함한 버전 체크 규칙이 정의되어 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 items List 버전 모델 목록 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DescribeVersionModels ( \u0026 version . DescribeVersionModelsRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DescribeVersionModelsRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e describeVersionModels ( ( new DescribeVersionModelsRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $items = $result -\u003e getItems (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DescribeVersionModelsRequest ; import io.gs2.version.result.DescribeVersionModelsResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DescribeVersionModelsResult result = client . describeVersionModels ( new DescribeVersionModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); List VersionModel \u003e items = result . getItems (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DescribeVersionModelsResult \u003e asyncResult = null ; yield return client . DescribeVersionModels ( new Gs2 . Gs2Version . Request . DescribeVersionModelsRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . describeVersionModels ( new Gs2Version . DescribeVersionModelsRequest () . withNamespaceName ( \"namespace-0001\" ) ); const items = result . getItems (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . describe_version_models ( version . DescribeVersionModelsRequest () . with_namespace_name ( 'namespace-0001' ) ) items = result . items except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.describe_version_models ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; client = gs2 ( 'version' ) api_result_handler = client.describe_version_models_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; getVersionModel 버전 모델 조회 스코프, 경고/오류 버전 임계값, 일정 기반 버전 규칙, 서명 요건, 승인 설정을 포함한 지정된 버전 모델을 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item VersionModel 버전 모델 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . GetVersionModel ( \u0026 version . GetVersionModelRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"version-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\GetVersionModelRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e getVersionModel ( ( new GetVersionModelRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"version-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.GetVersionModelRequest ; import io.gs2.version.result.GetVersionModelResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { GetVersionModelResult result = client . getVersionModel ( new GetVersionModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) ); VersionModel item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . GetVersionModelResult \u003e asyncResult = null ; yield return client . GetVersionModel ( new Gs2 . Gs2Version . Request . GetVersionModelRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"version-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . getVersionModel ( new Gs2Version . GetVersionModelRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . get_version_model ( version . GetVersionModelRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'version-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.get_version_model ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.get_version_model_async ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; exportMaster 버전 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보내기 현재 등록되어 있는 버전 모델 마스터를 활성화 가능한 마스터 데이터 형식으로 내보냅니다. 내보낸 데이터에는 범위, 버전 임계값, 스케줄 규칙, 서명 설정, 승인 요건을 포함한 모든 버전 모델 정의가 포함됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentVersionMaster 활성화 가능한 버전 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . ExportMaster ( \u0026 version . ExportMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\ExportMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e exportMaster ( ( new ExportMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.ExportMasterRequest ; import io.gs2.version.result.ExportMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { ExportMasterResult result = client . exportMaster ( new ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentVersionMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . ExportMasterResult \u003e asyncResult = null ; yield return client . ExportMaster ( new Gs2 . Gs2Version . Request . ExportMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . exportMaster ( new Gs2Version . ExportMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . export_master ( version . ExportMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.export_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.export_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getCurrentVersionMaster 현재 활성화된 버전 모델의 마스터 데이터 조회 버전 체크에 사용되고 있는, 모든 버전 모델 정의를 포함한 현재 활성화된 버전 모델 마스터 데이터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 item CurrentVersionMaster 현재 활성화된 버전 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . GetCurrentVersionMaster ( \u0026 version . GetCurrentVersionMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\GetCurrentVersionMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e getCurrentVersionMaster ( ( new GetCurrentVersionMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.GetCurrentVersionMasterRequest ; import io.gs2.version.result.GetCurrentVersionMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { GetCurrentVersionMasterResult result = client . getCurrentVersionMaster ( new GetCurrentVersionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); CurrentVersionMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . GetCurrentVersionMasterResult \u003e asyncResult = null ; yield return client . GetCurrentVersionMaster ( new Gs2 . Gs2Version . Request . GetCurrentVersionMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . getCurrentVersionMaster ( new Gs2Version . GetCurrentVersionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . get_current_version_master ( version . GetCurrentVersionMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.get_current_version_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.get_current_version_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; preUpdateCurrentVersionMaster 현재 활성화된 버전 모델의 마스터 데이터 갱신(3단계 버전) 1MB를 초과하는 마스터 데이터를 업로드하는 경우, 3단계에 걸쳐 갱신을 수행합니다. 이 API를 실행하여 업로드용 토큰과 URL을 취득합니다. 취득한 URL에 마스터 데이터를 업로드합니다. 업로드로 취득한 토큰을 전달하여 UpdateCurrentVersionMaster를 실행하면 마스터 데이터가 반영됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. Result 타입 설명 uploadToken string 업로드 후 결과를 반영할 때 사용하는 토큰 uploadUrl string 업로드 처리 실행에 사용하는 URL 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . PreUpdateCurrentVersionMaster ( \u0026 version . PreUpdateCurrentVersionMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } uploadToken := result . UploadToken uploadUrl := result . UploadUrl use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\PreUpdateCurrentVersionMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e preUpdateCurrentVersionMaster ( ( new PreUpdateCurrentVersionMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) ); $uploadToken = $result -\u003e getUploadToken (); $uploadUrl = $result -\u003e getUploadUrl (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.PreUpdateCurrentVersionMasterRequest ; import io.gs2.version.result.PreUpdateCurrentVersionMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { PreUpdateCurrentVersionMasterResult result = client . preUpdateCurrentVersionMaster ( new PreUpdateCurrentVersionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); String uploadToken = result . getUploadToken (); String uploadUrl = result . getUploadUrl (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . PreUpdateCurrentVersionMasterResult \u003e asyncResult = null ; yield return client . PreUpdateCurrentVersionMaster ( new Gs2 . Gs2Version . Request . PreUpdateCurrentVersionMasterRequest () . WithNamespaceName ( \"namespace-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var uploadToken = result . UploadToken ; var uploadUrl = result . UploadUrl ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . preUpdateCurrentVersionMaster ( new Gs2Version . PreUpdateCurrentVersionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) ); const uploadToken = result . getUploadToken (); const uploadUrl = result . getUploadUrl (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . pre_update_current_version_master ( version . PreUpdateCurrentVersionMasterRequest () . with_namespace_name ( 'namespace-0001' ) ) upload_token = result . upload_token upload_url = result . upload_url except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.pre_update_current_version_master ({ namespaceName = \"namespace-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; client = gs2 ( 'version' ) api_result_handler = client.pre_update_current_version_master_async ({ namespaceName = \"namespace-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result uploadToken = result.uploadToken ; uploadUrl = result.uploadUrl ; updateCurrentVersionMaster 현재 활성화된 버전 모델의 마스터 데이터를 갱신 현재 활성화된 버전 모델 마스터 데이터를 갱신합니다. 대용량 마스터 데이터에 대응하기 위해 직접 갱신 모드와 사전 업로드 모드를 모두 지원합니다. 사전 업로드 모드에서는 PreUpdate API로 취득한 업로드 토큰을 사용하여 설정을 읽어들입니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 Result 타입 설명 item CurrentVersionMaster 갱신된 현재 활성화된 버전 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentVersionMaster ( \u0026 version . UpdateCurrentVersionMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Mode : pointy . String ( \"direct\" ), Settings : pointy . String ( \"{\\n \\\"version\\\": \\\"2019-10-09\\\",\\n \\\"versionModels\\\": [\\n {\\n \\\"name\\\": \\\"app\\\",\\n \\\"metadata\\\": \\\"APP\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 1,\\n \\\"minor\\\": 1,\\n \\\"micro\\\": 1\\n },\\n \\\"scope\\\": \\\"passive\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"needSignature\\\": false\\n },\\n {\\n \\\"name\\\": \\\"asset\\\",\\n \\\"metadata\\\": \\\"ASSET\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 3,\\n \\\"minor\\\": 3,\\n \\\"micro\\\": 3\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n },\\n \\\"scope\\\": \\\"passive\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"needSignature\\\": true,\\n \\\"signatureKeyId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"eula\\\",\\n \\\"metadata\\\": \\\"EULA\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 4,\\n \\\"minor\\\": 4,\\n \\\"micro\\\": 4\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 3,\\n \\\"minor\\\": 3,\\n \\\"micro\\\": 3\\n },\\n \\\"scope\\\": \\\"active\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"currentVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n }\\n }\\n ]\\n}\" ), UploadToken : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\UpdateCurrentVersionMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e updateCurrentVersionMaster ( ( new UpdateCurrentVersionMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withMode ( \"direct\" ) -\u003e withSettings ( \"{ \\n \\\" version \\\" : \\\" 2019-10-09 \\\" , \\n \\\" versionModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" app \\\" , \\n \\\" metadata \\\" : \\\" APP \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 1, \\n \\\" minor \\\" : 1, \\n \\\" micro \\\" : 1 \\n }, \\n \\\" scope \\\" : \\\" passive \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" needSignature \\\" : false \\n }, \\n { \\n \\\" name \\\" : \\\" asset \\\" , \\n \\\" metadata \\\" : \\\" ASSET \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 3, \\n \\\" minor \\\" : 3, \\n \\\" micro \\\" : 3 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n }, \\n \\\" scope \\\" : \\\" passive \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" needSignature \\\" : true, \\n \\\" signatureKeyId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" eula \\\" , \\n \\\" metadata \\\" : \\\" EULA \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 4, \\n \\\" minor \\\" : 4, \\n \\\" micro \\\" : 4 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 3, \\n \\\" minor \\\" : 3, \\n \\\" micro \\\" : 3 \\n }, \\n \\\" scope \\\" : \\\" active \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" currentVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n } \\n } \\n ] \\n }\" ) -\u003e withUploadToken ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.UpdateCurrentVersionMasterRequest ; import io.gs2.version.result.UpdateCurrentVersionMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { UpdateCurrentVersionMasterResult result = client . updateCurrentVersionMaster ( new UpdateCurrentVersionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-10-09\\\",\\n \\\"versionModels\\\": [\\n {\\n \\\"name\\\": \\\"app\\\",\\n \\\"metadata\\\": \\\"APP\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 1,\\n \\\"minor\\\": 1,\\n \\\"micro\\\": 1\\n },\\n \\\"scope\\\": \\\"passive\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"needSignature\\\": false\\n },\\n {\\n \\\"name\\\": \\\"asset\\\",\\n \\\"metadata\\\": \\\"ASSET\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 3,\\n \\\"minor\\\": 3,\\n \\\"micro\\\": 3\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n },\\n \\\"scope\\\": \\\"passive\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"needSignature\\\": true,\\n \\\"signatureKeyId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"eula\\\",\\n \\\"metadata\\\": \\\"EULA\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 4,\\n \\\"minor\\\": 4,\\n \\\"micro\\\": 4\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 3,\\n \\\"minor\\\": 3,\\n \\\"micro\\\": 3\\n },\\n \\\"scope\\\": \\\"active\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"currentVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n }\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); CurrentVersionMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . UpdateCurrentVersionMasterResult \u003e asyncResult = null ; yield return client . UpdateCurrentVersionMaster ( new Gs2 . Gs2Version . Request . UpdateCurrentVersionMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithMode ( \"direct\" ) . WithSettings ( \"{\\n \\\"version\\\": \\\"2019-10-09\\\",\\n \\\"versionModels\\\": [\\n {\\n \\\"name\\\": \\\"app\\\",\\n \\\"metadata\\\": \\\"APP\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 1,\\n \\\"minor\\\": 1,\\n \\\"micro\\\": 1\\n },\\n \\\"scope\\\": \\\"passive\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"needSignature\\\": false\\n },\\n {\\n \\\"name\\\": \\\"asset\\\",\\n \\\"metadata\\\": \\\"ASSET\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 3,\\n \\\"minor\\\": 3,\\n \\\"micro\\\": 3\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n },\\n \\\"scope\\\": \\\"passive\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"needSignature\\\": true,\\n \\\"signatureKeyId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"eula\\\",\\n \\\"metadata\\\": \\\"EULA\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 4,\\n \\\"minor\\\": 4,\\n \\\"micro\\\": 4\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 3,\\n \\\"minor\\\": 3,\\n \\\"micro\\\": 3\\n },\\n \\\"scope\\\": \\\"active\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"currentVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n }\\n }\\n ]\\n}\" ) . WithUploadToken ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . updateCurrentVersionMaster ( new Gs2Version . UpdateCurrentVersionMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withMode ( \"direct\" ) . withSettings ( \"{\\n \\\"version\\\": \\\"2019-10-09\\\",\\n \\\"versionModels\\\": [\\n {\\n \\\"name\\\": \\\"app\\\",\\n \\\"metadata\\\": \\\"APP\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 1,\\n \\\"minor\\\": 1,\\n \\\"micro\\\": 1\\n },\\n \\\"scope\\\": \\\"passive\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"needSignature\\\": false\\n },\\n {\\n \\\"name\\\": \\\"asset\\\",\\n \\\"metadata\\\": \\\"ASSET\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 3,\\n \\\"minor\\\": 3,\\n \\\"micro\\\": 3\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n },\\n \\\"scope\\\": \\\"passive\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"needSignature\\\": true,\\n \\\"signatureKeyId\\\": \\\"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\\\"\\n },\\n {\\n \\\"name\\\": \\\"eula\\\",\\n \\\"metadata\\\": \\\"EULA\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"warningVersion\\\": {\\n \\\"major\\\": 4,\\n \\\"minor\\\": 4,\\n \\\"micro\\\": 4\\n },\\n \\\"errorVersion\\\": {\\n \\\"major\\\": 3,\\n \\\"minor\\\": 3,\\n \\\"micro\\\": 3\\n },\\n \\\"scope\\\": \\\"active\\\",\\n \\\"type\\\": \\\"simple\\\",\\n \\\"currentVersion\\\": {\\n \\\"major\\\": 2,\\n \\\"minor\\\": 2,\\n \\\"micro\\\": 2\\n }\\n }\\n ]\\n}\" ) . withUploadToken ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . update_current_version_master ( version . UpdateCurrentVersionMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_mode ( 'direct' ) . with_settings ( '{ \\n \"version\": \"2019-10-09\", \\n \"versionModels\": [ \\n { \\n \"name\": \"app\", \\n \"metadata\": \"APP\", \\n \"warningVersion\": { \\n \"major\": 2, \\n \"minor\": 2, \\n \"micro\": 2 \\n }, \\n \"errorVersion\": { \\n \"major\": 1, \\n \"minor\": 1, \\n \"micro\": 1 \\n }, \\n \"scope\": \"passive\", \\n \"type\": \"simple\", \\n \"needSignature\": false \\n }, \\n { \\n \"name\": \"asset\", \\n \"metadata\": \"ASSET\", \\n \"warningVersion\": { \\n \"major\": 3, \\n \"minor\": 3, \\n \"micro\": 3 \\n }, \\n \"errorVersion\": { \\n \"major\": 2, \\n \"minor\": 2, \\n \"micro\": 2 \\n }, \\n \"scope\": \"passive\", \\n \"type\": \"simple\", \\n \"needSignature\": true, \\n \"signatureKeyId\": \"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\" \\n }, \\n { \\n \"name\": \"eula\", \\n \"metadata\": \"EULA\", \\n \"type\": \"simple\", \\n \"warningVersion\": { \\n \"major\": 4, \\n \"minor\": 4, \\n \"micro\": 4 \\n }, \\n \"errorVersion\": { \\n \"major\": 3, \\n \"minor\": 3, \\n \"micro\": 3 \\n }, \\n \"scope\": \"active\", \\n \"type\": \"simple\", \\n \"currentVersion\": { \\n \"major\": 2, \\n \"minor\": 2, \\n \"micro\": 2 \\n } \\n } \\n ] \\n }' ) . with_upload_token ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.update_current_version_master ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-10-09 \\\" , \\n \\\" versionModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" app \\\" , \\n \\\" metadata \\\" : \\\" APP \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 1, \\n \\\" minor \\\" : 1, \\n \\\" micro \\\" : 1 \\n }, \\n \\\" scope \\\" : \\\" passive \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" needSignature \\\" : false \\n }, \\n { \\n \\\" name \\\" : \\\" asset \\\" , \\n \\\" metadata \\\" : \\\" ASSET \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 3, \\n \\\" minor \\\" : 3, \\n \\\" micro \\\" : 3 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n }, \\n \\\" scope \\\" : \\\" passive \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" needSignature \\\" : true, \\n \\\" signatureKeyId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" eula \\\" , \\n \\\" metadata \\\" : \\\" EULA \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 4, \\n \\\" minor \\\" : 4, \\n \\\" micro \\\" : 4 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 3, \\n \\\" minor \\\" : 3, \\n \\\" micro \\\" : 3 \\n }, \\n \\\" scope \\\" : \\\" active \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" currentVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n } \\n } \\n ] \\n }\" , uploadToken = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.update_current_version_master_async ({ namespaceName = \"namespace-0001\" , mode = \"direct\" , settings = \"{ \\n \\\" version \\\" : \\\" 2019-10-09 \\\" , \\n \\\" versionModels \\\" : [ \\n { \\n \\\" name \\\" : \\\" app \\\" , \\n \\\" metadata \\\" : \\\" APP \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 1, \\n \\\" minor \\\" : 1, \\n \\\" micro \\\" : 1 \\n }, \\n \\\" scope \\\" : \\\" passive \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" needSignature \\\" : false \\n }, \\n { \\n \\\" name \\\" : \\\" asset \\\" , \\n \\\" metadata \\\" : \\\" ASSET \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 3, \\n \\\" minor \\\" : 3, \\n \\\" micro \\\" : 3 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n }, \\n \\\" scope \\\" : \\\" passive \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" needSignature \\\" : true, \\n \\\" signatureKeyId \\\" : \\\" grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001 \\\"\\n }, \\n { \\n \\\" name \\\" : \\\" eula \\\" , \\n \\\" metadata \\\" : \\\" EULA \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" warningVersion \\\" : { \\n \\\" major \\\" : 4, \\n \\\" minor \\\" : 4, \\n \\\" micro \\\" : 4 \\n }, \\n \\\" errorVersion \\\" : { \\n \\\" major \\\" : 3, \\n \\\" minor \\\" : 3, \\n \\\" micro \\\" : 3 \\n }, \\n \\\" scope \\\" : \\\" active \\\" , \\n \\\" type \\\" : \\\" simple \\\" , \\n \\\" currentVersion \\\" : { \\n \\\" major \\\" : 2, \\n \\\" minor \\\" : 2, \\n \\\" micro \\\" : 2 \\n } \\n } \\n ] \\n }\" , uploadToken = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateCurrentVersionMasterFromGitHub 현재 활성화된 버전 모델의 마스터 데이터를 GitHub에서 갱신 지정된 체크아웃 설정을 사용하여 GitHub 저장소에서 마스터 데이터를 체크아웃하고, 현재 활성화된 버전 모델 마스터 데이터를 갱신합니다. GitHub와의 인증에는 키 서비스를 통해 API 키가 복호화되어 사용됩니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. checkoutSetting GitHubCheckoutSetting  GitHub에서 마스터 데이터를 체크아웃하는 설정 Result 타입 설명 item CurrentVersionMaster 갱신된 현재 활성화된 버전 모델의 마스터 데이터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . UpdateCurrentVersionMasterFromGitHub ( \u0026 version . UpdateCurrentVersionMasterFromGitHubRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), CheckoutSetting : \u0026 version . GitHubCheckoutSetting { ApiKeyId : pointy . String ( \"apiKeyId-0001\" ), RepositoryName : pointy . String ( \"gs2io/master-data\" ), SourcePath : pointy . String ( \"path/to/file.json\" ), ReferenceType : pointy . String ( \"branch\" ), BranchName : pointy . String ( \"develop\" ), }, } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\UpdateCurrentVersionMasterFromGitHubRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e updateCurrentVersionMasterFromGitHub ( ( new UpdateCurrentVersionMasterFromGitHubRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withCheckoutSetting (( new GitHubCheckoutSetting ()) -\u003e withApiKeyId ( \"apiKeyId-0001\" ) -\u003e withRepositoryName ( \"gs2io/master-data\" ) -\u003e withSourcePath ( \"path/to/file.json\" ) -\u003e withReferenceType ( \"branch\" ) -\u003e withBranchName ( \"develop\" ) ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.UpdateCurrentVersionMasterFromGitHubRequest ; import io.gs2.version.result.UpdateCurrentVersionMasterFromGitHubResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { UpdateCurrentVersionMasterFromGitHubResult result = client . updateCurrentVersionMasterFromGitHub ( new UpdateCurrentVersionMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); CurrentVersionMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . UpdateCurrentVersionMasterFromGitHubResult \u003e asyncResult = null ; yield return client . UpdateCurrentVersionMasterFromGitHub ( new Gs2 . Gs2Version . Request . UpdateCurrentVersionMasterFromGitHubRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithCheckoutSetting ( new Gs2 . Gs2Version . Model . GitHubCheckoutSetting () . WithApiKeyId ( \"apiKeyId-0001\" ) . WithRepositoryName ( \"gs2io/master-data\" ) . WithSourcePath ( \"path/to/file.json\" ) . WithReferenceType ( \"branch\" ) . WithBranchName ( \"develop\" ) ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . updateCurrentVersionMasterFromGitHub ( new Gs2Version . UpdateCurrentVersionMasterFromGitHubRequest () . withNamespaceName ( \"namespace-0001\" ) . withCheckoutSetting ( new Gs2Version . model . GitHubCheckoutSetting () . withApiKeyId ( \"apiKeyId-0001\" ) . withRepositoryName ( \"gs2io/master-data\" ) . withSourcePath ( \"path/to/file.json\" ) . withReferenceType ( \"branch\" ) . withBranchName ( \"develop\" ) ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . update_current_version_master_from_git_hub ( version . UpdateCurrentVersionMasterFromGitHubRequest () . with_namespace_name ( 'namespace-0001' ) . with_checkout_setting ( version . GitHubCheckoutSetting () . with_api_key_id ( 'apiKeyId-0001' ) . with_repository_name ( 'gs2io/master-data' ) . with_source_path ( 'path/to/file.json' ) . with_reference_type ( 'branch' ) . with_branch_name ( 'develop' ) ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.update_current_version_master_from_git_hub ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.update_current_version_master_from_git_hub_async ({ namespaceName = \"namespace-0001\" , checkoutSetting = { api_key_id = \"apiKeyId-0001\" , repository_name = \"gs2io/master-data\" , source_path = \"path/to/file.json\" , reference_type = \"branch\" , branch_name = \"develop\" , }, }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; describeVersionModelMasters 버전 모델 마스터 목록 조회 버전 모델 마스터의 페이지네이션 목록을 조회합니다. 이름 접두사로 필터링할 수 있습니다. 각 마스터에는 스코프(passive/active), 경고/오류 버전 임계값, 일정 기반 버전 제어, 서명 검증 설정, 승인 요건을 포함한 버전 체크 규칙이 정의되어 있습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. namePrefix string ~ 64자 버전 이름 필터 접두사 pageToken string ~ 1024자 데이터 취득을 시작할 위치를 지정하는 토큰 limit int 30 1 ~ 1000 취득할 데이터 건수 Result 타입 설명 items List 버전 모델 마스터 목록 nextPageToken string 목록의 나머지를 취득하기 위한 페이지 토큰 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DescribeVersionModelMasters ( \u0026 version . DescribeVersionModelMastersRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), NamePrefix : nil , PageToken : nil , Limit : nil , } ) if err != nil { panic ( \"error occurred\" ) } items := result . Items nextPageToken := result . NextPageToken use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DescribeVersionModelMastersRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e describeVersionModelMasters ( ( new DescribeVersionModelMastersRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withNamePrefix ( null ) -\u003e withPageToken ( null ) -\u003e withLimit ( null ) ); $items = $result -\u003e getItems (); $nextPageToken = $result -\u003e getNextPageToken (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DescribeVersionModelMastersRequest ; import io.gs2.version.result.DescribeVersionModelMastersResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DescribeVersionModelMastersResult result = client . describeVersionModelMasters ( new DescribeVersionModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); List VersionModelMaster \u003e items = result . getItems (); String nextPageToken = result . getNextPageToken (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DescribeVersionModelMastersResult \u003e asyncResult = null ; yield return client . DescribeVersionModelMasters ( new Gs2 . Gs2Version . Request . DescribeVersionModelMastersRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithNamePrefix ( null ) . WithPageToken ( null ) . WithLimit ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var items = result . Items ; var nextPageToken = result . NextPageToken ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . describeVersionModelMasters ( new Gs2Version . DescribeVersionModelMastersRequest () . withNamespaceName ( \"namespace-0001\" ) . withNamePrefix ( null ) . withPageToken ( null ) . withLimit ( null ) ); const items = result . getItems (); const nextPageToken = result . getNextPageToken (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . describe_version_model_masters ( version . DescribeVersionModelMastersRequest () . with_namespace_name ( 'namespace-0001' ) . with_name_prefix ( None ) . with_page_token ( None ) . with_limit ( None ) ) items = result . items next_page_token = result . next_page_token except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.describe_version_model_masters ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; client = gs2 ( 'version' ) api_result_handler = client.describe_version_model_masters_async ({ namespaceName = \"namespace-0001\" , namePrefix = nil , pageToken = nil , limit = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result items = result.items ; nextPageToken = result.nextPageToken ; createVersionModelMaster 버전 모델 마스터 신규 작성 스코프(passive: 클라이언트 보고 버전, active: 서버 관리 승인), 현재/경고/오류 버전 임계값, 옵션인 일정 기반 버전 규칙, 서명 검증 설정, 승인 요건(required/optional)을 가진 새로운 버전 모델 마스터를 작성합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scope 문자열 열거형 enum {   “passive”,   “active” }  판정에 사용할 버전 값의 종류 버전 체크에 사용할 버전 값을 얻는 방법을 결정합니다. “passive\"는 체크 시점에 클라이언트가 현재 버전을 신고하는 방식이며, “active\"는 사용자가 과거에 명시적으로 승인한 버전(이용약관 동의 등)을 사용하는 방식입니다. 정의 설명 passive 클라이언트에서 전송 active 과거 명시적으로 승인한 버전 type 문자열 열거형 enum {   “simple”,   “schedule” } “simple” 버전 체크 모드 버전 체크 방식을 선택합니다. “simple\"은 고정된 경고·에러 버전 임계값을 사용하며, “schedule\"은 GS2-Schedule의 이벤트를 이용하여 시기에 따라 다른 버전 임계값을 적용합니다. 정의 설명 simple 심플 schedule 시계열 전환 currentVersion Version {type} == “simple” and {scope} == “active” ※ 현재 버전 이 버전 모델의 최신 버전입니다. “simple” 모드의 “active” 스코프에서만 사용되며, 사용자가 버전 업데이트를 승인·확인할 때 현재 버전을 알립니다. ※ type이(가) “simple\"이고 scope이(가) “active” 이면 필수 warningVersion Version {type} == “simple” ※ 버전 업그레이드를 촉구하는 버전 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮은 경우에도 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 errorVersion Version {type} == “simple” ※ 버전 체크에서 에러로 판정되는 버전 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 scheduleVersions List {type} == “schedule” 0 ~ 10 items 시계열로 전환되는 버전 체크 내용 목록 GS2-Schedule의 이벤트를 기준으로 서로 다른 시점에 유효해지는 버전 체크 설정 목록입니다. 업데이트를 필수로 만들기 전에 경고를 표시하는 등 단계적인 버전 강제가 가능해집니다. ※ type이(가) “schedule” 이면 활성화 needSignature bool {scope} == “passive” ※ 판정할 버전 값에 서명 검증이 필요한지 여부 활성화하면 클라이언트는 버전 신고와 함께 암호 서명을 제공해야 합니다. 이를 통해 클라이언트가 버전 체크를 회피하기 위해 허위 버전을 신고하는 것을 방지합니다. 스코프가 “passive\"인 경우에만 적용됩니다. ※ scope이(가) “passive” 이면 필수 signatureKeyId string {needSignature} ※ ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ needSignature이(가) “true” 이면 필수 approveRequirement 문자열 열거형 enum {   “required”,   “optional” } {scope} == “active” “required” 승인 필요 여부 이 버전 모델에 대한 사용자 승인이 필수인지 임의인지를 제어합니다. “required\"인 경우, 사용자가 현재 버전을 승인하지 않으면 버전 체크가 실패합니다. “optional\"인 경우, 승인 상태와 관계없이 버전 체크가 통과합니다. 스코프가 “active\"인 경우에만 적용됩니다. 정의 설명 required 승인 필요 optional 임의 승인 ※ scope이(가) “active” 이면 필수 Result 타입 설명 item VersionModelMaster 작성한 버전 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . CreateVersionModelMaster ( \u0026 version . CreateVersionModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), Name : pointy . String ( \"version-0001\" ), Description : nil , Metadata : nil , Scope : pointy . String ( \"passive\" ), Type : nil , CurrentVersion : \u0026 version . Version { Major : pointy . Int32 ( 1 ), Minor : pointy . Int32 ( 1 ), Micro : pointy . Int32 ( 1 ), }, WarningVersion : \u0026 version . Version { Major : pointy . Int32 ( 2 ), Minor : pointy . Int32 ( 2 ), Micro : pointy . Int32 ( 2 ), }, ErrorVersion : \u0026 version . Version { Major : pointy . Int32 ( 1 ), Minor : pointy . Int32 ( 1 ), Micro : pointy . Int32 ( 1 ), }, ScheduleVersions : nil , NeedSignature : pointy . Bool ( false ), SignatureKeyId : nil , ApproveRequirement : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\CreateVersionModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e createVersionModelMaster ( ( new CreateVersionModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withName ( \"version-0001\" ) -\u003e withDescription ( null ) -\u003e withMetadata ( null ) -\u003e withScope ( \"passive\" ) -\u003e withType ( null ) -\u003e withCurrentVersion (( new \\Gs2\\Version\\Model\\Version ()) -\u003e withMajor ( 1 ) -\u003e withMinor ( 1 ) -\u003e withMicro ( 1 )) -\u003e withWarningVersion (( new \\Gs2\\Version\\Model\\Version ()) -\u003e withMajor ( 2 ) -\u003e withMinor ( 2 ) -\u003e withMicro ( 2 )) -\u003e withErrorVersion (( new \\Gs2\\Version\\Model\\Version ()) -\u003e withMajor ( 1 ) -\u003e withMinor ( 1 ) -\u003e withMicro ( 1 )) -\u003e withScheduleVersions ( null ) -\u003e withNeedSignature ( false ) -\u003e withSignatureKeyId ( null ) -\u003e withApproveRequirement ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.CreateVersionModelMasterRequest ; import io.gs2.version.result.CreateVersionModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { CreateVersionModelMasterResult result = client . createVersionModelMaster ( new CreateVersionModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"version-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withScope ( \"passive\" ) . withType ( null ) . withCurrentVersion ( new io . gs2 . version . model . Version () . withMajor ( 1 ) . withMinor ( 1 ) . withMicro ( 1 )) . withWarningVersion ( new io . gs2 . version . model . Version () . withMajor ( 2 ) . withMinor ( 2 ) . withMicro ( 2 )) . withErrorVersion ( new io . gs2 . version . model . Version () . withMajor ( 1 ) . withMinor ( 1 ) . withMicro ( 1 )) . withScheduleVersions ( null ) . withNeedSignature ( false ) . withSignatureKeyId ( null ) . withApproveRequirement ( null ) ); VersionModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . CreateVersionModelMasterResult \u003e asyncResult = null ; yield return client . CreateVersionModelMaster ( new Gs2 . Gs2Version . Request . CreateVersionModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithName ( \"version-0001\" ) . WithDescription ( null ) . WithMetadata ( null ) . WithScope ( \"passive\" ) . WithType ( null ) . WithCurrentVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 1 ) . WithMinor ( 1 ) . WithMicro ( 1 )) . WithWarningVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 2 ) . WithMinor ( 2 ) . WithMicro ( 2 )) . WithErrorVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 1 ) . WithMinor ( 1 ) . WithMicro ( 1 )) . WithScheduleVersions ( null ) . WithNeedSignature ( false ) . WithSignatureKeyId ( null ) . WithApproveRequirement ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . createVersionModelMaster ( new Gs2Version . CreateVersionModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withName ( \"version-0001\" ) . withDescription ( null ) . withMetadata ( null ) . withScope ( \"passive\" ) . withType ( null ) . withCurrentVersion ( new Gs2Version . model . Version () . withMajor ( 1 ) . withMinor ( 1 ) . withMicro ( 1 )) . withWarningVersion ( new Gs2Version . model . Version () . withMajor ( 2 ) . withMinor ( 2 ) . withMicro ( 2 )) . withErrorVersion ( new Gs2Version . model . Version () . withMajor ( 1 ) . withMinor ( 1 ) . withMicro ( 1 )) . withScheduleVersions ( null ) . withNeedSignature ( false ) . withSignatureKeyId ( null ) . withApproveRequirement ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . create_version_model_master ( version . CreateVersionModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_name ( 'version-0001' ) . with_description ( None ) . with_metadata ( None ) . with_scope ( 'passive' ) . with_type ( None ) . with_current_version ( version . Version () . with_major ( 1 ) . with_minor ( 1 ) . with_micro ( 1 )) . with_warning_version ( version . Version () . with_major ( 2 ) . with_minor ( 2 ) . with_micro ( 2 )) . with_error_version ( version . Version () . with_major ( 1 ) . with_minor ( 1 ) . with_micro ( 1 )) . with_schedule_versions ( None ) . with_need_signature ( False ) . with_signature_key_id ( None ) . with_approve_requirement ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.create_version_model_master ({ namespaceName = \"namespace-0001\" , name = \"version-0001\" , description = nil , metadata = nil , scope = \"passive\" , type = nil , currentVersion = { major = 1 , minor = 1 , micro = 1 , }, warningVersion = { major = 2 , minor = 2 , micro = 2 , }, errorVersion = { major = 1 , minor = 1 , micro = 1 , }, scheduleVersions = nil , needSignature = false , signatureKeyId = nil , approveRequirement = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.create_version_model_master_async ({ namespaceName = \"namespace-0001\" , name = \"version-0001\" , description = nil , metadata = nil , scope = \"passive\" , type = nil , currentVersion = { major = 1 , minor = 1 , micro = 1 , }, warningVersion = { major = 2 , minor = 2 , micro = 2 , }, errorVersion = { major = 1 , minor = 1 , micro = 1 , }, scheduleVersions = nil , needSignature = false , signatureKeyId = nil , approveRequirement = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; getVersionModelMaster 버전 모델 마스터 조회 스코프, 버전 임계값, 일정 기반 규칙, 서명 설정, 승인 요건을 포함한 지정된 버전 모델 마스터를 조회합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. Result 타입 설명 item VersionModelMaster 버전 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . GetVersionModelMaster ( \u0026 version . GetVersionModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"version-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\GetVersionModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e getVersionModelMaster ( ( new GetVersionModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"version-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.GetVersionModelMasterRequest ; import io.gs2.version.result.GetVersionModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { GetVersionModelMasterResult result = client . getVersionModelMaster ( new GetVersionModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) ); VersionModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . GetVersionModelMasterResult \u003e asyncResult = null ; yield return client . GetVersionModelMaster ( new Gs2 . Gs2Version . Request . GetVersionModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"version-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . getVersionModelMaster ( new Gs2Version . GetVersionModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . get_version_model_master ( version . GetVersionModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'version-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.get_version_model_master ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.get_version_model_master_async ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; updateVersionModelMaster 버전 모델 마스터 갱신 지정된 버전 모델 마스터의 스코프, 버전 임계값, 일정 기반 규칙, 서명 설정, 승인 요건을 갱신합니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scope 문자열 열거형 enum {   “passive”,   “active” }  판정에 사용할 버전 값의 종류 버전 체크에 사용할 버전 값을 얻는 방법을 결정합니다. “passive\"는 체크 시점에 클라이언트가 현재 버전을 신고하는 방식이며, “active\"는 사용자가 과거에 명시적으로 승인한 버전(이용약관 동의 등)을 사용하는 방식입니다. 정의 설명 passive 클라이언트에서 전송 active 과거 명시적으로 승인한 버전 type 문자열 열거형 enum {   “simple”,   “schedule” } “simple” 버전 체크 모드 버전 체크 방식을 선택합니다. “simple\"은 고정된 경고·에러 버전 임계값을 사용하며, “schedule\"은 GS2-Schedule의 이벤트를 이용하여 시기에 따라 다른 버전 임계값을 적용합니다. 정의 설명 simple 심플 schedule 시계열 전환 currentVersion Version {type} == “simple” and {scope} == “active” ※ 현재 버전 이 버전 모델의 최신 버전입니다. “simple” 모드의 “active” 스코프에서만 사용되며, 사용자가 버전 업데이트를 승인·확인할 때 현재 버전을 알립니다. ※ type이(가) “simple\"이고 scope이(가) “active” 이면 필수 warningVersion Version {type} == “simple” ※ 버전 업그레이드를 촉구하는 버전 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮은 경우에도 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 errorVersion Version {type} == “simple” ※ 버전 체크에서 에러로 판정되는 버전 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 scheduleVersions List {type} == “schedule” 0 ~ 10 items 시계열로 전환되는 버전 체크 내용 목록 GS2-Schedule의 이벤트를 기준으로 서로 다른 시점에 유효해지는 버전 체크 설정 목록입니다. 업데이트를 필수로 만들기 전에 경고를 표시하는 등 단계적인 버전 강제가 가능해집니다. ※ type이(가) “schedule” 이면 활성화 needSignature bool {scope} == “passive” ※ 판정할 버전 값에 서명 검증이 필요한지 여부 활성화하면 클라이언트는 버전 신고와 함께 암호 서명을 제공해야 합니다. 이를 통해 클라이언트가 버전 체크를 회피하기 위해 허위 버전을 신고하는 것을 방지합니다. 스코프가 “passive\"인 경우에만 적용됩니다. ※ scope이(가) “passive” 이면 필수 signatureKeyId string {needSignature} ※ ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ needSignature이(가) “true” 이면 필수 approveRequirement 문자열 열거형 enum {   “required”,   “optional” } {scope} == “active” “required” 승인 필요 여부 이 버전 모델에 대한 사용자 승인이 필수인지 임의인지를 제어합니다. “required\"인 경우, 사용자가 현재 버전을 승인하지 않으면 버전 체크가 실패합니다. “optional\"인 경우, 승인 상태와 관계없이 버전 체크가 통과합니다. 스코프가 “active\"인 경우에만 적용됩니다. 정의 설명 required 승인 필요 optional 임의 승인 ※ scope이(가) “active” 이면 필수 Result 타입 설명 item VersionModelMaster 갱신한 버전 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . UpdateVersionModelMaster ( \u0026 version . UpdateVersionModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"version-0001\" ), Description : pointy . String ( \"description1\" ), Metadata : pointy . String ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ), Scope : pointy . String ( \"active\" ), Type : nil , CurrentVersion : \u0026 version . Version { Major : pointy . Int32 ( 3 ), Minor : pointy . Int32 ( 0 ), Micro : pointy . Int32 ( 0 ), }, WarningVersion : \u0026 version . Version { Major : pointy . Int32 ( 3 ), Minor : pointy . Int32 ( 3 ), Micro : pointy . Int32 ( 3 ), }, ErrorVersion : \u0026 version . Version { Major : pointy . Int32 ( 2 ), Minor : pointy . Int32 ( 2 ), Micro : pointy . Int32 ( 2 ), }, ScheduleVersions : nil , NeedSignature : pointy . Bool ( false ), SignatureKeyId : nil , ApproveRequirement : nil , } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\UpdateVersionModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e updateVersionModelMaster ( ( new UpdateVersionModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"version-0001\" ) -\u003e withDescription ( \"description1\" ) -\u003e withMetadata ( \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" ) -\u003e withScope ( \"active\" ) -\u003e withType ( null ) -\u003e withCurrentVersion (( new \\Gs2\\Version\\Model\\Version ()) -\u003e withMajor ( 3 ) -\u003e withMinor ( 0 ) -\u003e withMicro ( 0 )) -\u003e withWarningVersion (( new \\Gs2\\Version\\Model\\Version ()) -\u003e withMajor ( 3 ) -\u003e withMinor ( 3 ) -\u003e withMicro ( 3 )) -\u003e withErrorVersion (( new \\Gs2\\Version\\Model\\Version ()) -\u003e withMajor ( 2 ) -\u003e withMinor ( 2 ) -\u003e withMicro ( 2 )) -\u003e withScheduleVersions ( null ) -\u003e withNeedSignature ( false ) -\u003e withSignatureKeyId ( null ) -\u003e withApproveRequirement ( null ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.UpdateVersionModelMasterRequest ; import io.gs2.version.result.UpdateVersionModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { UpdateVersionModelMasterResult result = client . updateVersionModelMaster ( new UpdateVersionModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withScope ( \"active\" ) . withType ( null ) . withCurrentVersion ( new io . gs2 . version . model . Version () . withMajor ( 3 ) . withMinor ( 0 ) . withMicro ( 0 )) . withWarningVersion ( new io . gs2 . version . model . Version () . withMajor ( 3 ) . withMinor ( 3 ) . withMicro ( 3 )) . withErrorVersion ( new io . gs2 . version . model . Version () . withMajor ( 2 ) . withMinor ( 2 ) . withMicro ( 2 )) . withScheduleVersions ( null ) . withNeedSignature ( false ) . withSignatureKeyId ( null ) . withApproveRequirement ( null ) ); VersionModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . UpdateVersionModelMasterResult \u003e asyncResult = null ; yield return client . UpdateVersionModelMaster ( new Gs2 . Gs2Version . Request . UpdateVersionModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"version-0001\" ) . WithDescription ( \"description1\" ) . WithMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . WithScope ( \"active\" ) . WithType ( null ) . WithCurrentVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 3 ) . WithMinor ( 0 ) . WithMicro ( 0 )) . WithWarningVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 3 ) . WithMinor ( 3 ) . WithMicro ( 3 )) . WithErrorVersion ( new Gs2 . Gs2Version . Model . Version_ () . WithMajor ( 2 ) . WithMinor ( 2 ) . WithMicro ( 2 )) . WithScheduleVersions ( null ) . WithNeedSignature ( false ) . WithSignatureKeyId ( null ) . WithApproveRequirement ( null ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . updateVersionModelMaster ( new Gs2Version . UpdateVersionModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) . withDescription ( \"description1\" ) . withMetadata ( \"{\\\"hoge\\\": \\\"fuga\\\"}\" ) . withScope ( \"active\" ) . withType ( null ) . withCurrentVersion ( new Gs2Version . model . Version () . withMajor ( 3 ) . withMinor ( 0 ) . withMicro ( 0 )) . withWarningVersion ( new Gs2Version . model . Version () . withMajor ( 3 ) . withMinor ( 3 ) . withMicro ( 3 )) . withErrorVersion ( new Gs2Version . model . Version () . withMajor ( 2 ) . withMinor ( 2 ) . withMicro ( 2 )) . withScheduleVersions ( null ) . withNeedSignature ( false ) . withSignatureKeyId ( null ) . withApproveRequirement ( null ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . update_version_model_master ( version . UpdateVersionModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'version-0001' ) . with_description ( 'description1' ) . with_metadata ( '{\"hoge\": \"fuga\"}' ) . with_scope ( 'active' ) . with_type ( None ) . with_current_version ( version . Version () . with_major ( 3 ) . with_minor ( 0 ) . with_micro ( 0 )) . with_warning_version ( version . Version () . with_major ( 3 ) . with_minor ( 3 ) . with_micro ( 3 )) . with_error_version ( version . Version () . with_major ( 2 ) . with_minor ( 2 ) . with_micro ( 2 )) . with_schedule_versions ( None ) . with_need_signature ( False ) . with_signature_key_id ( None ) . with_approve_requirement ( None ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.update_version_model_master ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , scope = \"active\" , type = nil , currentVersion = { major = 3 , minor = 0 , micro = 0 , }, warningVersion = { major = 3 , minor = 3 , micro = 3 , }, errorVersion = { major = 2 , minor = 2 , micro = 2 , }, scheduleVersions = nil , needSignature = false , signatureKeyId = nil , approveRequirement = nil , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.update_version_model_master_async ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , description = \"description1\" , metadata = \"{ \\\" hoge \\\" : \\\" fuga \\\" }\" , scope = \"active\" , type = nil , currentVersion = { major = 3 , minor = 0 , micro = 0 , }, warningVersion = { major = 3 , minor = 3 , micro = 3 , }, errorVersion = { major = 2 , minor = 2 , micro = 2 , }, scheduleVersions = nil , needSignature = false , signatureKeyId = nil , approveRequirement = nil , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; deleteVersionModelMaster 버전 모델 마스터 삭제 지정된 버전 모델 마스터를 삭제합니다. 이는 마스터 정의만 삭제하며, 현재 활성화된 버전 설정에는 영향을 미치지 않습니다. 상세 Request 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. versionName string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. Result 타입 설명 item VersionModelMaster 삭제한 버전 모델 마스터 구현 예제 Language: Go PHP Java C# TypeScript Python GS2-Script GS2-Script(Async) import \"github.com/gs2io/gs2-golang-sdk/core\" import \"github.com/gs2io/gs2-golang-sdk/version\" import \"github.com/openlyinc/pointy\" session := core . Gs2RestSession { Credential : \u0026 core . BasicGs2Credential { ClientId : \"your client id\" , ClientSecret : \"your client secret\" , }, Region : core . ApNortheast1 , } if err := session . Connect (); err != nil { panic ( \"error occurred\" ) } client := version . Gs2VersionRestClient { Session : \u0026 session , } result , err := client . DeleteVersionModelMaster ( \u0026 version . DeleteVersionModelMasterRequest { NamespaceName : pointy . String ( \"namespace-0001\" ), VersionName : pointy . String ( \"version-0001\" ), } ) if err != nil { panic ( \"error occurred\" ) } item := result . Item use Gs2\\Core\\Model\\BasicGs2Credential ; use Gs2\\Core\\Model\\Region ; use Gs2\\Core\\Net\\Gs2RestSession ; use Gs2\\Core\\Exception\\Gs2Exception ; use Gs2\\Version\\Gs2VersionRestClient ; use Gs2\\Version\\Request\\DeleteVersionModelMasterRequest ; $session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region :: AP_NORTHEAST_1 ); $session -\u003e open (); $client = new Gs2VersionRestClient ( $session ); try { $result = $client -\u003e deleteVersionModelMaster ( ( new DeleteVersionModelMasterRequest ()) -\u003e withNamespaceName ( \"namespace-0001\" ) -\u003e withVersionName ( \"version-0001\" ) ); $item = $result -\u003e getItem (); } catch ( Gs2Exception $e ) { exit ( \"error occurred\" ) } import io.gs2.core.model.Region ; import io.gs2.core.model.BasicGs2Credential ; import io.gs2.core.rest.Gs2RestSession ; import io.gs2.core.exception.Gs2Exception ; import io.gs2.version.rest.Gs2VersionRestClient ; import io.gs2.version.request.DeleteVersionModelMasterRequest ; import io.gs2.version.result.DeleteVersionModelMasterResult ; Gs2RestSession session = new Gs2RestSession ( Region . AP_NORTHEAST_1 , new BasicGs2Credential ( \"your client id\" , \"your client secret\" ) ); session . connect (); Gs2VersionRestClient client = new Gs2VersionRestClient ( session ); try { DeleteVersionModelMasterResult result = client . deleteVersionModelMaster ( new DeleteVersionModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) ); VersionModelMaster item = result . getItem (); } catch ( Gs2Exception e ) { System . exit ( 1 ); } using Gs2.Core ; using Gs2.Core.Model ; using Gs2.Core.Net ; using Gs2.Core.Exception ; var session = new Gs2RestSession ( new BasicGs2Credential ( \"your client id\" , \"your client secret\" ), Region . ApNortheast1 ); yield return session . OpenAsync ( r =\u003e { }); var client = new Gs2VersionRestClient ( session ); AsyncResult Gs2 . Gs2Version . Result . DeleteVersionModelMasterResult \u003e asyncResult = null ; yield return client . DeleteVersionModelMaster ( new Gs2 . Gs2Version . Request . DeleteVersionModelMasterRequest () . WithNamespaceName ( \"namespace-0001\" ) . WithVersionName ( \"version-0001\" ), r =\u003e asyncResult = r ); if ( asyncResult . Error != null ) { throw asyncResult . Error ; } var result = asyncResult . Result ; var item = result . Item ; import Gs2Core from '@/gs2/core' ; import * as Gs2Version from '@/gs2/version' ; const session = new Gs2Core . Gs2RestSession ( \"ap-northeast-1\" , new Gs2Core . BasicGs2Credential ( 'your client id' , 'your client secret' ) ); await session . connect (); const client = new Gs2Version . Gs2VersionRestClient ( session ); try { const result = await client . deleteVersionModelMaster ( new Gs2Version . DeleteVersionModelMasterRequest () . withNamespaceName ( \"namespace-0001\" ) . withVersionName ( \"version-0001\" ) ); const item = result . getItem (); } catch ( e ) { process . exit ( 1 ); } from gs2 import core from gs2 import version session = core . Gs2RestSession ( core . BasicGs2Credential ( 'your client id' , 'your client secret' ), \"ap-northeast-1\" , ) session . connect () client = version . Gs2VersionRestClient ( session ) try : result = client . delete_version_model_master ( version . DeleteVersionModelMasterRequest () . with_namespace_name ( 'namespace-0001' ) . with_version_name ( 'version-0001' ) ) item = result . item except core . Gs2Exception as e : exit ( 1 ) client = gs2 ( 'version' ) api_result = client.delete_version_model_master ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , }) if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ; client = gs2 ( 'version' ) api_result_handler = client.delete_version_model_master_async ({ namespaceName = \"namespace-0001\" , versionName = \"version-0001\" , }) api_result = api_result_handler () -- Call the handler to get the result if ( api_result.isError ) then -- When error occurs fail ( api_result [ 'statusCode' ], api_result [ 'errorMessage' ]) end result = api_result.result item = result.item ;","lang":"ko","section":"api_reference","summary":"각종 프로그래밍 언어용 GS2-Version SDK의 모델 사양과 API 레퍼런스\n","title":"GS2-Version SDK API 레퍼런스","url":"/ko/api_reference/version/sdk/"},{"content":"UI 구성 먼저 씬의 전체 모습을 보여드리겠습니다. 화면 상단에 인벤토리의 용량 사용 현황을 표시하고, 중앙에 보유 아이템 목록, 하단에 아이템을 입수하는 버튼을 배치했습니다. 컨텍스트 Context 배치에 대해 설명합니다. A는 GS2-Inventory의 인벤토리 컨텍스트입니다. B는 GS2-Inventory의 아이템 리스트 컨텍스트입니다. C는 GS2-Inventory의 아이템 컨텍스트입니다. D는 GS2-Exchange에서 무상으로 Potion을 입수하는 교환 레이트 컨텍스트입니다. E는 GS2-Exchange에서 무상으로 Ether를 입수하는 교환 레이트 컨텍스트입니다. 구현 해설 인벤토리의 소비 용량 표시 InventoryWindow 노드에는 GS2-Inventory의 인벤토리를 지정한 컨텍스트와, Inventory의 정보를 취득하는 Fetcher가 지정되어 있습니다. Text에는 Gs2InventoryInventoryLabel이 설정되어 있으며, 현재 소비 용량 / 최대 용량 이라는 문자열을 텍스트 컴포넌트의 값에 반영하고 있습니다. 아이템 목록 취득 Gs2InventoryOwnItemSetFetcher로 인벤토리에 포함된 아이템 목록을 취득하고 있습니다. Gs2InventoryOwnItemSetList에서 100개의 Item 노드를 복제하고, 각 Item 노드가 가진 Gs2InventoryOwnItemSetContext에 보유 중인 아이템의 정보를 컨텍스트 정보로 설정하고 있습니다. 아이템 표시 Item 노드는 Gs2InventoryOwnItemSetContext를 가지고 있지만, 여기에 ScriptableObject는 설정하지 않았습니다. 왜냐하면 Gs2InventoryItemSetList에 의해 값이 설정되기 때문입니다. Fetcher에서 아이템 모델과 보유 정보를 각각 취득하고 있습니다. Name에서는 Gs2InventoryItemModelLabel을 사용하여, 취득한 아이템 이름을 텍스트 컴포넌트에 반영하고 있습니다. Count에서는 Gs2InventoryOwnItemSetLabel을 사용하여, 취득한 아이템의 보유 수량을 텍스트 컴포넌트에 반영하고 있습니다. Use 노드 아래에는 Gs2InventoryItemSetConsumeAction 프리팹이 배치되어 있으며, 소비 수량을 1로 지정해 두었습니다. 소비되는 아이템의 종류는 컨텍스트에 의해 결정되며, 상위 계층에 존재하는 Item 노드에 지정된 아이템이 소비됩니다. 그리고 소비 처리가 성공한 경우, 자기 자신을 비활성화하도록 설정되어 있습니다. Use 노드에는 버튼이 배치되어 있으며, 클릭 시 Gs2InventoryItemSetConsumeAction 프리팹을 활성화하도록 설정되어 있습니다. 이를 통해 버튼을 클릭하면 아이템이 1개 소비되는 동작이 됩니다. 아이템 입수 아이템을 입수하는 API는 게임 내에서 호출할 수 없으므로, 이번에는 GS2-Exchange에 각 아이템을 무상으로 입수할 수 있는 교환 레이트를 준비하고, 교환을 실행함으로써 아이템을 입수할 수 있도록 설정했습니다. Acquire Potion 노드 아래에는 Gs2ExchangeExchangeExchangeAction 프리팹이 배치되어 있으며, 교환 수량을 1로 지정해 두었습니다. 그리고 교환 처리가 성공한 경우, 자기 자신을 비활성화하도록 설정되어 있습니다. Acquire Potion 노드에는 교환 레이트 컨텍스트가 설정되어 있으며, 교환을 실행할 레이트를 지정하고 있습니다. 버튼 컴포넌트도 배치되어 있으며, 버튼을 클릭하면 Gs2ExchangeExchangeExchangeAction 프리팹을 활성화합니다. Acquire Ether 노드도 유사한 설정이 되어 있으며, 설정된 교환 레이트가 Potion이 아니라 Ether를 얻을 수 있는 교환 레이트로 되어 있습니다. 동작 확인 기동하면 처음에는 아무 아이템도 보유하고 있지 않으므로 빈 목록과, 인벤토리의 소비 용량이 0/10 이라는 표시가 나타납니다. Acquire Potion을 클릭해 봅니다. 1회 교환으로 포션을 10개 입수할 수 있는 교환 레이트이므로, 아이템 목록에 Potion이 10개 표시되었습니다. 다음으로 Acquire Ether를 클릭해 봅니다. 2번째 행이 추가되고, Ether가 늘어났습니다. Potion을 다시 10회 교환해 봅니다. Potion은 99개까지 스택할 수 있도록 설정되어 있어, 99개 스택과 11개 스택으로 나뉘었습니다. 99개 스택의 Use 버튼을 클릭하여 Potion을 소비해 봅니다. 98개가 됩니다. 다음으로 11개 스택의 Use 버튼을 클릭하여 Potion을 소비해 봅니다. 10개가 되었습니다. 마치며 노코드로 여기까지 할 수 있다는 것이 조금 놀랍지 않으셨나요? UI Kit에 대한 해설은 아직 계속됩니다. 부디 이어지는 내용도 확인해 보시기 바랍니다.","lang":"ko","section":"get_start","summary":"조금 더 고급 튜토리얼에도 도전해 봅시다","title":"UI Kit을 사용하여 아이템 인벤토리 구현","url":"/ko/get_start/uikit/inventory/"},{"content":"","lang":"ko","section":"articles","summary":"각종 개발 자료\n","title":"개발 자료","url":"/ko/articles/"},{"content":"Basic Support 무료로 이용하실 수 있습니다. 포럼 을 통해 질문하실 수 있습니다. GS2 스태프가 답변하는 경우도 있지만, 기본적으로 사용자 간의 상호 협력을 전제로 합니다. 지원은 최대한 제공해 드리지만, 개별 프로젝트의 사정에 관한 문의에는 답변드릴 수 없는 경우가 있습니다. 코드 결함에 관한 문의 시에는 재현 가능한 프로그램 코드를 준비해 주십시오. Business Support 월 30만 엔으로 이용하실 수 있습니다. 동일 기업에서 여러 프로젝트에 GS2 도입을 검토하시는 경우, 프로젝트별로 지원 계약이 필요합니다. 고객님이 지정하신 메신저를 사용한 비공개 커뮤니케이션이 가능합니다. 프로젝트의 기획 내용을 바탕으로, GS2를 이용할 때의 설계 방침을 제공합니다. 지원 범위에는, GS2에 관한 문제에 대한 답변 버그 보고 및 수정 기획 내용을 바탕으로 GS2의 각 마이크로서비스를 어떻게 활용할지에 대한 제안 등이 포함됩니다. 월 최대 15시간까지 지원을 제공합니다. 지원 시간을 초과하는 경우, 추가 요금이 발생할 수 있습니다. Professional Service 시간당 2만 엔으로 이용하실 수 있습니다. Business Support 계약이 필요합니다. Business Support 에 포함되지 않는, 보다 고도화된 지원 내용에 대해 제공합니다. 예를 들어 특정 기능의 구현 지원, 보안 설정에 대한 조언, 코드 리뷰, 로그 조사 등이 포함됩니다. 1회 지원 시간은 1시간부터이며, 여러 번 이용하실 수 있습니다. 다만, 1회 지원 시간이 장시간이 되는 경우에는 사전 상담이 필요합니다. Professional Service 를 이용하시려면 1회당 최소 이용 시간이 1시간 이상 필요합니다. 또한 이용 시 GS2 API 이용에 대한 기초 지식을 갖춘 개발자가 필요합니다. 자세한 내용은 채팅을 통해 문의해 주십시오. Prototyping 게임 개발 초기 단계의 시제품 제작 단계에 한해, “Business Support” + “GS2 이용 요금\"을 월 10만 엔으로 이용하실 수 있습니다. Prototyping 에는 다음과 같은 지원 내용이 포함됩니다. Business Support 에 상당하는 지원 GS2 이용 요금 Prototyping 은 최대 3개월간 이용 가능합니다. 자세한 내용은 채팅을 통해 문의해 주십시오.","lang":"ko","section":"pricing","summary":"Game Server Services 를 활용하기 위한 지원 메뉴\n","title":"지원 메뉴","url":"/ko/pricing/support/"},{"content":"GS2의 API를 호출하려면 인증 정보(크리덴셜)가 필요합니다. 크리덴셜을 생성하는 방법에는 두 가지가 있습니다. 처음이신 분은 절차가 직관적으로 알기 쉬운 관리 콘솔 을 사용하는 방법을 추천합니다. 관리 콘솔을 사용하여 생성하기 GS2-Deploy를 사용하여 생성하기","lang":"ko","section":"get_start","summary":"GS2를 이용하기 위한 크리덴셜(API 키)을 생성합니다\n","title":"크리덴셜(API 키) 생성","url":"/ko/get_start/tutorial/setup_credential/"},{"content":"트리거 createAccount 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 account Account 게임 플레이어 계정 Result 타입 필수 기본값 값 제한 설명 permit bool  계정 생성을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 account Account 게임 플레이어 계정 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } authentication 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 Result 타입 필수 기본값 값 제한 설명 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account local elapsedHours = args.elapsedHours -- Business logic: local permit = true local force = false -- Result result = { permit = permit , force = force } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account local elapsedHours = args.elapsedHours -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } ban 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 Result 타입 필수 기본값 값 제한 설명 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account local addBanStatus = args.addBanStatus -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account local addBanStatus = args.addBanStatus -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } unBan 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 Result 타입 필수 기본값 값 제한 설명 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } createTakeOver 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 Result 타입 필수 기본값 값 제한 설명 구현 예제 Lua -- Request local namespace = args.namespace local takeOver = args.takeOver local account = args.account -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 구현 예제 Lua -- Request local namespace = args.namespace local takeOver = args.takeOver local account = args.account -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } doTakeOver 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 Result 타입 필수 기본값 값 제한 설명 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account local takeOver = args.takeOver -- Business logic: local permit = true local force = false -- Result result = { permit = permit , force = force } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 구현 예제 Lua -- Request local namespace = args.namespace local account = args.account local takeOver = args.takeOver -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } authentication - 게임 플레이어 계정을 인증 | namespace | Namespace | 네임스페이스 | | account | Account | 게임 플레이어 계정 | | elapsedHours | int | 마지막 로그인으로부터 경과 시간 | | permit | bool |  | | | 계정 인증을 허용할지 여부 | | force | bool | | false | | 비밀번호 인증에 실패해도 인증을 통과시킬지 여부 | | namespace | Namespace | 네임스페이스 | | account | Account | 게임 플레이어 계정 | | elapsedHours | int | 마지막 로그인으로부터 경과 시간 | addBan - 게임 플레이어 계정에 계정 BAN 상태를 추가 | namespace | Namespace | 네임스페이스 | | account | Account | 게임 플레이어 계정 | | addBanStatus | BanStatus | 추가할 계정 BAN 상태 | | permit | bool |  | | | 계정 BAN 등록을 허용할지 여부 | | namespace | Namespace | 네임스페이스 | | account | Account | 게임 플레이어 계정 | | addBanStatus | BanStatus | 추가할 계정 BAN 상태 | updateBanned - 게임 플레이어 계정의 계정 BAN 상태를 갱신 removeBan - 게임 플레이어 계정의 계정 BAN 상태를 삭제 authentication - 게임 플레이어 계정을 인증 | namespace | Namespace | 네임스페이스 | | account | Account | 게임 플레이어 계정 | | permit | bool |  | | | 계정 BAN 해제를 허용할지 여부 | | namespace | Namespace | 네임스페이스 | | account | Account | 게임 플레이어 계정 | createTakeOver - 인계 정보를 신규 작성 | namespace | Namespace | 네임스페이스 | | takeOver | TakeOver | 인계 정보 | | account | Account | 게임 플레이어 계정 | | permit | bool |  | | | 인계 정보 등록을 허용할지 여부 | | namespace | Namespace | 네임스페이스 | | takeOver | TakeOver | 인계 정보 | | account | Account | 게임 플레이어 계정 | doTakeOver - 인계를 실행 | namespace | Namespace | 네임스페이스 | | account | Account | 게임 플레이어 계정 | | takeOver | TakeOver | 인계 정보 | | permit | bool |  | | | 인계 실행을 허용할지 여부 | | force | bool | | false | | 비밀번호 인증에 실패해도 인증을 통과시킬지 여부 | | namespace | Namespace | 네임스페이스 | | account | Account | 게임 플레이어 계정 | | takeOver | TakeOver | 인계 정보 |","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Account 스크립트 트리거 레퍼런스","url":"/ko/api_reference/account/script/"},{"content":"트리거 acquirePoint 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 point Point 획득 처리 전 포인트 acquirePointValue long 획득 포인트 양 Result 타입 필수 기본값 값 제한 설명 permit bool  포인트 획득을 허용할지 여부 overridePointValue long 0 ~ 2147483645 덮어쓸 획득 포인트 양 구현 예제 Lua -- Request local namespace = args.namespace local point = args.point local acquirePointValue = args.acquirePointValue -- Business logic: local permit = true local overridePointValue = 0 -- Result result = { permit = permit , overridePointValue = overridePointValue } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 point Point 획득 처리 전 포인트 afterPoint Point 획득 후 포인트 acquirePointValue long 획득 포인트 양 구현 예제 Lua -- Request local namespace = args.namespace local point = args.point local afterPoint = args.afterPoint local acquirePointValue = args.acquirePointValue -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } consumePoint 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 point Point 소비 처리 전 포인트 consumePointValue long 소비 포인트 양 Result 타입 필수 기본값 값 제한 설명 permit bool  포인트 소비를 허용할지 여부 overridePointValue long 0 ~ 2147483645 덮어쓸 소비 포인트 양 구현 예제 Lua -- Request local namespace = args.namespace local point = args.point local consumePointValue = args.consumePointValue -- Business logic: local permit = true local overridePointValue = 0 -- Result result = { permit = permit , overridePointValue = overridePointValue } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 point Point 소비 처리 전 포인트 afterPoint Point 소비 후 포인트 consumePointValue long 소비 포인트 양 구현 예제 Lua -- Request local namespace = args.namespace local point = args.point local afterPoint = args.afterPoint local consumePointValue = args.consumePointValue -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-AdReward 스크립트 트리거 레퍼런스","url":"/ko/api_reference/ad_reward/script/"},{"content":"트리거 apply 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 buffEntryModel BuffEntryModel 버프 엔트리 모델 userId string 사용자ID Result 타입 필수 기본값 값 제한 설명 permit bool  버프 적용을 허용할지 여부 overrideBuffRate float  0 ~ 100 버프에 적용할 오버라이드 레이트 (배율) 구현 예제 Lua -- Request local namespace = args.namespace local buffEntryModel = args.buffEntryModel local userId = args.userId -- Business logic: local permit = true local overrideBuffRate = 0 -- Result result = { permit = permit , overrideBuffRate = overrideBuffRate } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 buffEntryModel BuffEntryModel 버프 엔트리 모델 userId string 사용자ID 구현 예제 Lua -- Request local namespace = args.namespace local buffEntryModel = args.buffEntryModel local userId = args.userId -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Buff 스크립트 트리거 레퍼런스","url":"/ko/api_reference/buff/script/"},{"content":"트리거 createRoom 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 Result 타입 필수 기본값 값 제한 설명 permit bool  룸 생성을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } deleteRoom 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 Result 타입 필수 기본값 값 제한 설명 permit bool  룸 삭제를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } postMessage 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 message Message 메시지 Result 타입 필수 기본값 값 제한 설명 permit bool  메시지 게시를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room local message = args.message -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 message Message 메시지 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room local message = args.message -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } subscribeRoom 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 subscribe Subscribe 구독 Result 타입 필수 기본값 값 제한 설명 permit bool  룸 구독을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room local subscribe = args.subscribe -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 subscribe Subscribe 구독 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room local subscribe = args.subscribe -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } unsubscribeRoom 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 subscribe Subscribe 구독 Result 타입 필수 기본값 값 제한 설명 permit bool  룸 구독 해제를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room local subscribe = args.subscribe -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 room Room 룸 subscribe Subscribe 구독 구현 예제 Lua -- Request local namespace = args.namespace local room = args.room local subscribe = args.subscribe -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Chat 스크립트 트리거 레퍼런스","url":"/ko/api_reference/chat/script/"},{"content":"트리거 doneUpload 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 dataObject DataObject 데이터 오브젝트 objectUrl string 업로드한 오브젝트의 URL Result 타입 필수 기본값 값 제한 설명 permit bool  데이터 오브젝트 업로드 완료 보고를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local dataObject = args.dataObject local objectUrl = args.objectUrl -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 dataObject DataObject 데이터 오브젝트 구현 예제 Lua -- Request local namespace = args.namespace local dataObject = args.dataObject -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Datastore 스크립트 트리거 레퍼런스","url":"/ko/api_reference/datastore/script/"},{"content":"트리거 entry 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 entryModels EntryModel[] 엔트리 모델 목록 userId string 사용자ID Result 타입 필수 기본값 값 제한 설명 permit bool  엔트리 등록을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local entryModels = args.entryModels local userId = args.userId -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 entryModels EntryModel[] 엔트리 모델 목록 userId string 사용자ID 구현 예제 Lua -- Request local namespace = args.namespace local entryModels = args.entryModels local userId = args.userId -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } duplicateEntry 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 entryModel EntryModel 엔트리 모델 userId string 사용자ID 구현 예제 Lua -- Request local namespace = args.namespace local entryModel = args.entryModel local userId = args.userId -- Business logic: -- Result result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Dictionary 스크립트 트리거 레퍼런스","url":"/ko/api_reference/dictionary/script/"},{"content":"트리거 enhance 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 rateModel RateModel 강화 레이트 모델 targetItemSetId string 강화 대상 아이템 세트의 GRN bonusRate float 경험치 보너스 배율(1.0=보너스 없음) experienceValue long 획득 경험치량 Result 타입 필수 기본값 값 제한 설명 permit bool  강화 실행을 허용할지 여부 overrideExperienceValue long 0 ~ 2147483645 덮어쓸 획득 경험치량 구현 예제 Lua -- Request local namespace = args.namespace local rateModel = args.rateModel local targetItemSetId = args.targetItemSetId local bonusRate = args.bonusRate local experienceValue = args.experienceValue -- Business logic: local permit = true local overrideExperienceValue = 0 -- Result result = { permit = permit , overrideExperienceValue = overrideExperienceValue } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 rateModel RateModel 강화 레이트 모델 targetItemSetId string 강화 대상 아이템 세트의 GRN bonusRate float 경험치 보너스 배율(1.0=보너스 없음) experienceValue long 획득 경험치량 구현 예제 Lua -- Request local namespace = args.namespace local rateModel = args.rateModel local targetItemSetId = args.targetItemSetId local bonusRate = args.bonusRate local experienceValue = args.experienceValue -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Enhance 스크립트 트리거 레퍼런스","url":"/ko/api_reference/enhance/script/"},{"content":"트리거 exchange 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 rateModel RateModel 교환 레이트 모델 userId string 교환을 실행하는 사용자 ID count int 교환량 config Config[] 트랜잭션 변수에 적용할 설정값 Result 타입 필수 기본값 값 제한 설명 permit bool  교환을 허용할지 여부 rateMode string  “float” 배율 모드 rate float 1.0 0 ~ 1000 획득량 배율 logRate LogRate 로그를 사용한 획득량 보정 구현 예제 Lua -- Request local namespace = args.namespace local rateModel = args.rateModel local userId = args.userId local count = args.count local config = args.config -- Business logic: local permit = true local rateMode = \"\" local rate = 1.0 local logRate = nil -- Result result = { permit = permit , rateMode = rateMode , rate = rate , logRate = logRate } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 rateModel RateModel 교환 레이트 모델 userId string 교환을 실행하는 사용자 ID count int 교환량 config Config[] 트랜잭션 변수에 적용할 설정값 구현 예제 Lua -- Request local namespace = args.namespace local rateModel = args.rateModel local userId = args.userId local count = args.count local config = args.config -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } incrementalExchange 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 rateModel IncrementalRateModel 교환 레이트 모델 userId string 교환을 실행하는 사용자 ID count int 교환량 config Config[] 트랜잭션 변수에 적용할 설정값 Result 타입 필수 기본값 값 제한 설명 permit bool  교환을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local rateModel = args.rateModel local userId = args.userId local count = args.count local config = args.config -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 rateModel IncrementalRateModel 교환 레이트 모델 userId string 교환을 실행하는 사용자 ID count int 교환량 config Config[] 트랜잭션 변수에 적용할 설정값 구현 예제 Lua -- Request local namespace = args.namespace local rateModel = args.rateModel local userId = args.userId local count = args.count local config = args.config -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } calculateCost 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 incrementalRateModel IncrementalRateModel 코스트 상승형 교환 모델 userId string 사용자ID currentExchangeCount int 현재 교환 횟수 quantity int 교환 수량 Result 타입 필수 기본값 값 제한 설명 costMode string  “num” 코스트 계산 방법 cost long 0 ~ 9223372036854775805 코스트 logCost LogCost 로그를 사용한 코스트 계산 결과 구현 예제 Lua -- Request local namespace = args.namespace local incrementalRateModel = args.incrementalRateModel local userId = args.userId local currentExchangeCount = args.currentExchangeCount local quantity = args.quantity -- Business logic: local costMode = \"\" local cost = 0 local logCost = nil -- Result result = { costMode = costMode , cost = cost , logCost = logCost } acquireAwait 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 rateModel RateModel 교환 레이트 모델 awaitModel Await 교환 대기 Result 타입 필수 기본값 값 제한 설명 permit bool  교환 대기를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local rateModel = args.rateModel local awaitModel = args.awaitModel -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 rateModel RateModel 교환 레이트 모델 awaitModel Await 교환 대기 구현 예제 Lua -- Request local namespace = args.namespace local rateModel = args.rateModel local awaitModel = args.awaitModel -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Exchange 스크립트 트리거 레퍼런스","url":"/ko/api_reference/exchange/script/"},{"content":"트리거 rankCapScript 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 experienceModel ExperienceModel 경험치 모델 userId string 사용자ID propertyId string 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. Result 타입 필수 기본값 값 제한 설명 rankCap long  0 ~ 2147483645 랭크 캡 구현 예제 Lua -- Request local namespace = args.namespace local experienceModel = args.experienceModel local userId = args.userId local propertyId = args.propertyId -- Business logic: local rankCap = 0 -- Result result = { rankCap = rankCap } changeExperience 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 experienceModel ExperienceModel 경험치 모델 status Status 변화 전 상태 afterStatus Status 변화 후 상태 Result 타입 필수 기본값 값 제한 설명 permit bool  경험치 변화를 허용할지 여부 overrideExperienceValue long  0 ~ 2147483645 덮어쓸 경험치 구현 예제 Lua -- Request local namespace = args.namespace local experienceModel = args.experienceModel local status = args.status local afterStatus = args.afterStatus -- Business logic: local permit = true local overrideExperienceValue = 0 -- Result result = { permit = permit , overrideExperienceValue = overrideExperienceValue } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 experienceModel ExperienceModel 경험치 모델 oldStatus Status 변화 전 상태 status Status 상태 구현 예제 Lua -- Request local namespace = args.namespace local experienceModel = args.experienceModel local oldStatus = args.oldStatus local status = args.status -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } changeRank 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 experienceModel ExperienceModel 경험치 모델 status Status 변화 전 상태 afterStatus Status 변화 후 상태 Result 타입 필수 기본값 값 제한 설명 permit bool  랭크 변화를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local experienceModel = args.experienceModel local status = args.status local afterStatus = args.afterStatus -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 experienceModel ExperienceModel 경험치 모델 oldStatus Status 변화 전 상태 status Status 상태 구현 예제 Lua -- Request local namespace = args.namespace local experienceModel = args.experienceModel local oldStatus = args.oldStatus local status = args.status -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } changeRankCap 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 experienceModel ExperienceModel 경험치 모델 status Status 변화 전 상태 afterStatus Status 변화 후 상태 Result 타입 필수 기본값 값 제한 설명 permit bool  랭크 캡 변화를 허용할지 여부 overrideRankCapValue long  0 ~ 2147483645 새로운 랭크 캡 구현 예제 Lua -- Request local namespace = args.namespace local experienceModel = args.experienceModel local status = args.status local afterStatus = args.afterStatus -- Business logic: local permit = true local overrideRankCapValue = 0 -- Result result = { permit = permit , overrideRankCapValue = overrideRankCapValue } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 experienceModel ExperienceModel 경험치 모델 status Status 상태 구현 예제 Lua -- Request local namespace = args.namespace local experienceModel = args.experienceModel local status = args.status -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } overflowExperience 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 experienceModel ExperienceModel 경험치 모델 status Status 상태 overflowExperienceValue long 경험치 오버플로우 값 Result 타입 필수 기본값 값 제한 설명 permit bool  경험치 오버플로우를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local experienceModel = args.experienceModel local status = args.status local overflowExperienceValue = args.overflowExperienceValue -- Business logic: local permit = true -- Result result = { permit = permit }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Experience 스크립트 트리거 레퍼런스","url":"/ko/api_reference/experience/script/"},{"content":"트리거 updateMold 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 mold Mold 갱신 전 폼 저장 영역 afterMold Mold 갱신 후 폼 저장 영역 Result 타입 필수 기본값 값 제한 설명 permit bool  폼 저장 영역의 용량 갱신을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local mold = args.mold local afterMold = args.afterMold -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 mold Mold 폼 저장 영역 구현 예제 Lua -- Request local namespace = args.namespace local mold = args.mold -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } updateForm 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 mold Mold 폼 저장 영역 form Form 갱신 전 폼 afterForm Form 갱신 후 폼 Result 타입 필수 기본값 값 제한 설명 permit bool  폼 갱신을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local mold = args.mold local form = args.form local afterForm = args.afterForm -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 mold Mold 폼 저장 영역 form Form 폼 구현 예제 Lua -- Request local namespace = args.namespace local mold = args.mold local form = args.form -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } updatePropertyForm 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 propertyForm PropertyForm 갱신 전 프로퍼티 폼 afterPropertyForm PropertyForm 갱신 후 프로퍼티 폼 Result 타입 필수 기본값 값 제한 설명 permit bool  프로퍼티 폼 갱신을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local propertyForm = args.propertyForm local afterPropertyForm = args.afterPropertyForm -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 propertyForm PropertyForm 프로퍼티 폼 구현 예제 Lua -- Request local namespace = args.namespace local propertyForm = args.propertyForm -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Formation 스크립트 트리거 레퍼런스","url":"/ko/api_reference/formation/script/"},{"content":"트리거 updateProfile 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 profile Profile 프로필 oldProfile Profile 갱신 전 프로필 publicProfile string 새롭게 공개되는 프로필 followerProfile string 새롭게 팔로워에게 공개되는 프로필 friendProfile string 새롭게 친구에게 공개되는 프로필 Result 타입 필수 기본값 값 제한 설명 permit bool  프로필 갱신을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local profile = args.profile local oldProfile = args.oldProfile local publicProfile = args.publicProfile local followerProfile = args.followerProfile local friendProfile = args.friendProfile -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldProfile Profile 갱신 전 프로필 profile Profile 갱신 후 프로필 구현 예제 Lua -- Request local namespace = args.namespace local oldProfile = args.oldProfile local profile = args.profile -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } follow 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 followUser FollowUser 팔로우 정보 Result 타입 필수 기본값 값 제한 설명 permit bool  팔로우를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local followUser = args.followUser -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 followUser FollowUser 팔로우 정보 구현 예제 Lua -- Request local namespace = args.namespace local followUser = args.followUser -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } unfollow 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 followUser FollowUser 팔로우 정보 Result 타입 필수 기본값 값 제한 설명 permit bool  언팔로우를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local followUser = args.followUser -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 followUser FollowUser 팔로우 정보 구현 예제 Lua -- Request local namespace = args.namespace local followUser = args.followUser -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } deleteFriend 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 userId string 사용자ID friendUser FriendUser 친구 Result 타입 필수 기본값 값 제한 설명 permit bool  친구 삭제를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local userId = args.userId local friendUser = args.friendUser -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 userId string 사용자ID friendUser FriendUser 친구 구현 예제 Lua -- Request local namespace = args.namespace local userId = args.userId local friendUser = args.friendUser -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } sendRequest 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 friendRequest FriendRequest 친구 요청 Result 타입 필수 기본값 값 제한 설명 permit bool  친구 요청 발행을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local friendRequest = args.friendRequest -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 friendRequest FriendRequest 친구 요청 구현 예제 Lua -- Request local namespace = args.namespace local friendRequest = args.friendRequest -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } cancelRequest 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 friendRequest FriendRequest 친구 요청 Result 타입 필수 기본값 값 제한 설명 permit bool  친구 요청 취소를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local friendRequest = args.friendRequest -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 friendRequest FriendRequest 친구 요청 구현 예제 Lua -- Request local namespace = args.namespace local friendRequest = args.friendRequest -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } acceptRequest 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 friendRequest FriendRequest 친구 요청 Result 타입 필수 기본값 값 제한 설명 permit bool  친구 요청 승낙을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local friendRequest = args.friendRequest -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 friendRequest FriendRequest 친구 요청 구현 예제 Lua -- Request local namespace = args.namespace local friendRequest = args.friendRequest -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } rejectRequest 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 friendRequest FriendRequest 친구 요청 Result 타입 필수 기본값 값 제한 설명 permit bool  친구 요청 거절을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local friendRequest = args.friendRequest -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 friendRequest FriendRequest 친구 요청 구현 예제 Lua -- Request local namespace = args.namespace local friendRequest = args.friendRequest -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Friend 스크립트 트리거 레퍼런스","url":"/ko/api_reference/friend/script/"},{"content":"트리거 changeGrade 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 gradeModel GradeModel 그레이드 모델 status Status 변화 전 상태 afterStatus Status 변화 후 상태 Result 타입 필수 기본값 값 제한 설명 permit bool  그레이드 변화를 허용할지 여부 overrideGradeValue long  0 ~ 2147483645 덮어쓸 그레이드 값 구현 예제 Lua -- Request local namespace = args.namespace local gradeModel = args.gradeModel local status = args.status local afterStatus = args.afterStatus -- Business logic: local permit = true local overrideGradeValue = 0 -- Result result = { permit = permit , overrideGradeValue = overrideGradeValue } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 gradeModel GradeModel 그레이드 모델 status Status 상태 afterStatus Status 변화 후 상태 구현 예제 Lua -- Request local namespace = args.namespace local gradeModel = args.gradeModel local status = args.status local afterStatus = args.afterStatus -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Grade 스크립트 트리거 레퍼런스","url":"/ko/api_reference/grade/script/"},{"content":"트리거 createGuild 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 Result 타입 필수 기본값 값 제한 설명 permit bool  길드 작성을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } updateGuild 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 oldGuild Guild 갱신 전 길드 newGuild Guild 갱신 후 길드 Result 타입 필수 기본값 값 제한 설명 permit bool  길드 갱신을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local oldGuild = args.oldGuild local newGuild = args.newGuild -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 oldGuild Guild 갱신 전 길드 newGuild Guild 갱신 후 길드 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local oldGuild = args.oldGuild local newGuild = args.newGuild -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } joinGuild 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 userId string 사용자 ID Result 타입 필수 기본값 값 제한 설명 permit bool  길드 참가를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild local userId = args.userId -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 userId string 사용자 ID 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild local userId = args.userId -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } leaveGuild 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 userId string 사용자 ID self bool 스스로 탈퇴했는지 / 길드 마스터에 의해 탈퇴당했는지, 길드가 해산되었을 때 false가 됩니다 Result 타입 필수 기본값 값 제한 설명 permit bool  길드 탈퇴를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild local userId = args.userId local self = args.self -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 userId string 사용자 ID self bool 스스로 탈퇴했는지 / 길드 마스터에 의해 탈퇴당했는지, 길드가 해산되었을 때 false가 됩니다 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild local userId = args.userId local self = args.self -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } changeRole 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 oldMembers Member[] 갱신 전 멤버 정보 newMembers Member[] 갱신 후 멤버 정보 Result 타입 필수 기본값 값 제한 설명 permit bool  역할 변경을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild local oldMembers = args.oldMembers local newMembers = args.newMembers -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 oldMembers Member[] 갱신 전 멤버 정보 newMembers Member[] 갱신 후 멤버 정보 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild local oldMembers = args.oldMembers local newMembers = args.newMembers -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } deleteGuild 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 Result 타입 필수 기본값 값 제한 설명 permit bool  길드 삭제를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } receiveJoinRequest 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 receiveMemberRequest ReceiveMemberRequest 참가 요청 Result 타입 필수 기본값 값 제한 설명 permit bool  길드 참가 요청 수신을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild local receiveMemberRequest = args.receiveMemberRequest -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 guildModel GuildModel 길드 모델 guild Guild 길드 receiveMemberRequest ReceiveMemberRequest 참가 요청 구현 예제 Lua -- Request local namespace = args.namespace local guildModel = args.guildModel local guild = args.guild local receiveMemberRequest = args.receiveMemberRequest -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Guild 스크립트 트리거 레퍼런스","url":"/ko/api_reference/guild/script/"},{"content":"트리거 receive 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 category CategoryModel 카테고리 모델 userId string 보상 수령을 실행하는 사용자 ID status Status 상태 acquireActions AcquireAction[] 보상 config Config[] 트랜잭션 변수에 적용할 설정값 Result 타입 필수 기본값 값 제한 설명 permit bool  보상 수령을 허용할지 여부 rate float 1.0 0 ~ 1000 획득량 배율 구현 예제 Lua -- Request local namespace = args.namespace local category = args.category local userId = args.userId local status = args.status local acquireActions = args.acquireActions local config = args.config -- Business logic: local permit = true local rate = 1.0 -- Result result = { permit = permit , rate = rate } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 category CategoryModel 카테고리 모델 userId string 보상 수령을 실행하는 사용자 ID oldStatus Status 보상 수령 전 스테이터스 newStatus Status 보상 수령 후 스테이터스 acquireActions AcquireAction[] 보상 config Config[] 트랜잭션 변수에 적용할 설정값 구현 예제 Lua -- Request local namespace = args.namespace local category = args.category local userId = args.userId local oldStatus = args.oldStatus local newStatus = args.newStatus local acquireActions = args.acquireActions local config = args.config -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } overrideAcquireActions 동기 실행 스크립트 을(를) 동기 실행한 후, 입수 액션이 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 categoryModel CategoryModel 카테고리 모델 userId string 사용자 ID Result 타입 필수 기본값 값 제한 설명 acquireActions AcquireActionList[]  1 ~ 100 items 대기 시간마다 얻을 수 있는 입수 액션 리스트 대기 시간을 “X분\"이라고 가정하면 “X / rewardIntervalMinutes\"가 보상을 받을 수 있는 횟수가 되지만, 여기서 지정한 배열의 요소를 반복함으로써 대기 시간마다 다른 보상을 부여할 수 있습니다. 구현 예제 Lua -- Request local namespace = args.namespace local categoryModel = args.categoryModel local userId = args.userId -- Business logic: local acquireActions = {} -- Result result = { acquireActions = acquireActions }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Idle 스크립트 트리거 레퍼런스","url":"/ko/api_reference/idle/script/"},{"content":"트리거 receiveMessage 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 message Message 메시지 Result 타입 필수 기본값 값 제한 설명 permit bool  메시지 수신을 허용할지 여부 overrideMetadata string 0 ~ 4096자 덮어쓸 메타데이터 구현 예제 Lua -- Request local namespace = args.namespace local message = args.message -- Business logic: local permit = true local overrideMetadata = \"\" -- Result result = { permit = permit , overrideMetadata = overrideMetadata } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 message Message 메시지 구현 예제 Lua -- Request local namespace = args.namespace local message = args.message -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } readMessage 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 message Message 메시지 Result 타입 필수 기본값 값 제한 설명 permit bool  메시지 개봉을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local message = args.message -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 message Message 메시지 구현 예제 Lua -- Request local namespace = args.namespace local message = args.message -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } deleteMessage 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 message Message 메시지 Result 타입 필수 기본값 값 제한 설명 permit bool  메시지 삭제를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local message = args.message -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 message Message 메시지 구현 예제 Lua -- Request local namespace = args.namespace local message = args.message -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Inbox 스크립트 트리거 레퍼런스","url":"/ko/api_reference/inbox/script/"},{"content":"트리거 acquire 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventory Inventory 인벤토리 itemSets ItemSet[] 아이템 세트 리스트 acquireItemName string 입수한 아이템 모델 이름 userId string 사용자ID acquireCount long 입수 수량 expiresAt long 유효기간 UNIX 시간·밀리초 Result 타입 필수 기본값 값 제한 설명 permit bool  아이템 입수를 허용할지 여부 overrideAcquireCount int 0 ~ 2147483645 실제로 적용할 입수량 구현 예제 Lua -- Request local namespace = args.namespace local inventory = args.inventory local itemSets = args.itemSets local acquireItemName = args.acquireItemName local userId = args.userId local acquireCount = args.acquireCount local expiresAt = args.expiresAt -- Business logic: local permit = true local overrideAcquireCount = 0 -- Result result = { permit = permit , overrideAcquireCount = overrideAcquireCount } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldInventory Inventory 갱신 전 인벤토리 oldItemSets ItemSet[] 갱신 전 아이템 세트 리스트 newInventory Inventory 갱신 후 인벤토리 newItemSets ItemSet[] 갱신 후 아이템 세트 리스트 acquireItemName string 입수한 아이템 모델 이름 userId string 사용자ID acquireCount long 입수 수량 overflowValue long 넘친 양 expiresAt long 유효기간 UNIX 시간·밀리초 구현 예제 Lua -- Request local namespace = args.namespace local oldInventory = args.oldInventory local oldItemSets = args.oldItemSets local newInventory = args.newInventory local newItemSets = args.newItemSets local acquireItemName = args.acquireItemName local userId = args.userId local acquireCount = args.acquireCount local overflowValue = args.overflowValue local expiresAt = args.expiresAt -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } overflowDone 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventory Inventory 인벤토리 itemModel ItemModel 아이템 모델 userId string 사용자ID overflowValue long 넘친 양 구현 예제 Lua -- Request local namespace = args.namespace local inventory = args.inventory local itemModel = args.itemModel local userId = args.userId local overflowValue = args.overflowValue -- Business logic: -- Result result = { } consume 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventory Inventory 인벤토리 itemSets ItemSet[] 아이템 세트 리스트 consumeItemName string 소비한 아이템 모델 이름 userId string 사용자ID consumeCount long 소비 수량 Result 타입 필수 기본값 값 제한 설명 permit bool  아이템 소비를 허용할지 여부 overrideConsumeCount int 0 ~ 2147483645 실제로 적용할 소비량 구현 예제 Lua -- Request local namespace = args.namespace local inventory = args.inventory local itemSets = args.itemSets local consumeItemName = args.consumeItemName local userId = args.userId local consumeCount = args.consumeCount -- Business logic: local permit = true local overrideConsumeCount = 0 -- Result result = { permit = permit , overrideConsumeCount = overrideConsumeCount } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldInventory Inventory 소비 전 인벤토리 oldItemSets ItemSet[] 소비 전 아이템 세트 리스트 newInventory Inventory 소비 후 인벤토리 newItemSets ItemSet[] 소비 후 아이템 세트 리스트 consumeItemName string 소비한 아이템 모델 이름 userId string 사용자ID consumeCount long 소비 수량 구현 예제 Lua -- Request local namespace = args.namespace local oldInventory = args.oldInventory local oldItemSets = args.oldItemSets local newInventory = args.newInventory local newItemSets = args.newItemSets local consumeItemName = args.consumeItemName local userId = args.userId local consumeCount = args.consumeCount -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } simpleItemAcquire 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventoryName string 심플 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 심플 인벤토리 모델의 이름입니다. 사용자의 심플 인벤토리 인스턴스를 모델 정의에 연결합니다. simpleItems SimpleItem[] 심플 아이템 리스트 userId string 사용자ID acquireCounts AcquireCount[] 심플 아이템의 입수 수량 리스트 Result 타입 필수 기본값 값 제한 설명 permit bool  심플 아이템 입수를 허용할지 여부 overrideAcquireCounts AcquireCount[] 0 ~ 100 items 심플 아이템의 입수 수량 리스트 구현 예제 Lua -- Request local namespace = args.namespace local inventoryName = args.inventoryName local simpleItems = args.simpleItems local userId = args.userId local acquireCounts = args.acquireCounts -- Business logic: local permit = true local overrideAcquireCounts = {} -- Result result = { permit = permit , overrideAcquireCounts = overrideAcquireCounts } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventoryName string 심플 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 심플 인벤토리 모델의 이름입니다. 사용자의 심플 인벤토리 인스턴스를 모델 정의에 연결합니다. oldSimpleItems SimpleItem[] 갱신 전 심플 아이템 리스트 newSimpleItems SimpleItem[] 갱신 후 심플 아이템 리스트 userId string 사용자ID acquireCounts AcquireCount[] 심플 아이템 리스트 구현 예제 Lua -- Request local namespace = args.namespace local inventoryName = args.inventoryName local oldSimpleItems = args.oldSimpleItems local newSimpleItems = args.newSimpleItems local userId = args.userId local acquireCounts = args.acquireCounts -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } simpleItemConsume 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventoryName string 심플 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 심플 인벤토리 모델의 이름입니다. 사용자의 심플 인벤토리 인스턴스를 모델 정의에 연결합니다. simpleItems SimpleItem[] 심플 아이템 리스트 userId string 사용자ID consumeCounts ConsumeCount[] 심플 아이템의 소비 수량 리스트 Result 타입 필수 기본값 값 제한 설명 permit bool  심플 아이템 소비를 허용할지 여부 overrideConsumeCounts ConsumeCount[] 0 ~ 100 items 심플 아이템 리스트 구현 예제 Lua -- Request local namespace = args.namespace local inventoryName = args.inventoryName local simpleItems = args.simpleItems local userId = args.userId local consumeCounts = args.consumeCounts -- Business logic: local permit = true local overrideConsumeCounts = {} -- Result result = { permit = permit , overrideConsumeCounts = overrideConsumeCounts } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventoryName string 심플 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 심플 인벤토리 모델의 이름입니다. 사용자의 심플 인벤토리 인스턴스를 모델 정의에 연결합니다. oldSimpleItems SimpleItem[] 갱신 전 심플 아이템 리스트 newSimpleItems SimpleItem[] 갱신 후 심플 아이템 리스트 userId string 사용자ID consumeCounts ConsumeCount[] 심플 아이템의 소비 수량 리스트 구현 예제 Lua -- Request local namespace = args.namespace local inventoryName = args.inventoryName local oldSimpleItems = args.oldSimpleItems local newSimpleItems = args.newSimpleItems local userId = args.userId local consumeCounts = args.consumeCounts -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } bigItemAcquire 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventoryName string 거대 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 거대 인벤토리 모델의 이름입니다. 사용자의 거대 인벤토리 인스턴스를 모델 정의에 연결합니다. itemName string 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. item BigItem 거대 아이템 userId string 사용자ID acquireCount string 거대 아이템의 입수 수량 최대 1024자리까지의 정수값 문자열 Result 타입 필수 기본값 값 제한 설명 permit bool  거대 아이템 입수를 허용할지 여부 rate float 1.0 0 ~ 1000 획득량 배율 구현 예제 Lua -- Request local namespace = args.namespace local inventoryName = args.inventoryName local itemName = args.itemName local item = args.item local userId = args.userId local acquireCount = args.acquireCount -- Business logic: local permit = true local rate = 1.0 -- Result result = { permit = permit , rate = rate } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventoryName string 거대 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 거대 인벤토리 모델의 이름입니다. 사용자의 거대 인벤토리 인스턴스를 모델 정의에 연결합니다. itemName string 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. oldItem BigItem 갱신 전 거대 아이템 newItem BigItem 갱신 후 거대 아이템 userId string 사용자ID acquireCount string 거대 아이템의 입수 수량 최대 1024자리까지의 정수값 문자열 구현 예제 Lua -- Request local namespace = args.namespace local inventoryName = args.inventoryName local itemName = args.itemName local oldItem = args.oldItem local newItem = args.newItem local userId = args.userId local acquireCount = args.acquireCount -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } bigItemConsume 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventoryName string 거대 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 거대 인벤토리 모델의 이름입니다. 사용자의 거대 인벤토리 인스턴스를 모델 정의에 연결합니다. itemName string 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. item BigItem 거대 아이템 userId string 사용자ID consumeCount string 거대 아이템의 소비 수량 최대 1024자리까지의 정수값 문자열 Result 타입 필수 기본값 값 제한 설명 permit bool  거대 아이템 소비를 허용할지 여부 rate float 1.0 0 ~ 1000 소비량 배율 구현 예제 Lua -- Request local namespace = args.namespace local inventoryName = args.inventoryName local itemName = args.itemName local item = args.item local userId = args.userId local consumeCount = args.consumeCount -- Business logic: local permit = true local rate = 1.0 -- Result result = { permit = permit , rate = rate } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 inventoryName string 거대 인벤토리 모델명 이 인벤토리의 아이템 종류를 정의하는 거대 인벤토리 모델의 이름입니다. 사용자의 거대 인벤토리 인스턴스를 모델 정의에 연결합니다. itemName string 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. oldItem BigItem 갱신 전 거대 아이템 newItem BigItem 갱신 후 거대 아이템 userId string 사용자ID consumeCount string 거대 아이템의 소비 수량 최대 1024자리까지의 정수값 문자열 구현 예제 Lua -- Request local namespace = args.namespace local inventoryName = args.inventoryName local itemName = args.itemName local oldItem = args.oldItem local newItem = args.newItem local userId = args.userId local consumeCount = args.consumeCount -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Inventory 스크립트 트리거 레퍼런스","url":"/ko/api_reference/inventory/script/"},{"content":"트리거 countUp 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 limitModel LimitModel 횟수 제한 모델 counter Counter 카운터 userId string 사용자ID countUpValue int 카운트업할 양 maxValue int 카운트업을 허용하는 최댓값 Result 타입 필수 기본값 값 제한 설명 permit bool  카운트업을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local limitModel = args.limitModel local counter = args.counter local userId = args.userId local countUpValue = args.countUpValue local maxValue = args.maxValue -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 limitModel LimitModel 횟수 제한 모델 oldCounter Counter 업데이트 전 카운터 newCounter Counter 업데이트 후 카운터 userId string 사용자ID countUpValue int 카운트업할 양 maxValue int 카운트업을 허용하는 최댓값 구현 예제 Lua -- Request local namespace = args.namespace local limitModel = args.limitModel local oldCounter = args.oldCounter local newCounter = args.newCounter local userId = args.userId local countUpValue = args.countUpValue local maxValue = args.maxValue -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Limit 스크립트 트리거 레퍼런스","url":"/ko/api_reference/limit/script/"},{"content":"트리거 receive 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 bonusModel BonusModel 로그인 보너스 모델 userId string 수령을 실행하는 사용자 ID receiveStep int 수령한 스텝 config Config[] 트랜잭션 변수에 적용할 설정값 Result 타입 필수 기본값 값 제한 설명 permit bool  보상 수령을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local bonusModel = args.bonusModel local userId = args.userId local receiveStep = args.receiveStep local config = args.config -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 bonusModel BonusModel 로그인 보너스 모델 userId string 수령을 실행하는 사용자 ID receiveStep int 수령한 스텝 config Config[] 트랜잭션 변수에 적용할 설정값 구현 예제 Lua -- Request local namespace = args.namespace local bonusModel = args.bonusModel local userId = args.userId local receiveStep = args.receiveStep local config = args.config -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-LoginReward 스크립트 트리거 레퍼런스","url":"/ko/api_reference/login_reward/script/"},{"content":"트리거 lottery 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 lotteryModel LotteryModel 추첨 모델 drawnPrizes DrawnPrize[] 추첨 결과 경품 리스트 boxItems BoxItems 박스 상태(경품과 잔여 수량·초기 수량 정보) Result 타입 필수 기본값 값 제한 설명 permit bool  추첨을 허용할지 여부 overrideDrawnPrizes DrawnPrize[] 0 ~ 1000 items 결과를 덮어쓸 추첨 결과 경품 리스트 구현 예제 Lua -- Request local namespace = args.namespace local lotteryModel = args.lotteryModel local drawnPrizes = args.drawnPrizes local boxItems = args.boxItems -- Business logic: local permit = true local overrideDrawnPrizes = {} -- Result result = { permit = permit , overrideDrawnPrizes = overrideDrawnPrizes } choicePrizeTable 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 lotteryModel LotteryModel 배출 확률 테이블을 동적으로 선택할 대상 추첨 모델 userId string 사용자ID count int 추첨 횟수 Result 타입 필수 기본값 값 제한 설명 prizeTableNames string[]  1 ~ 1000 items 추첨에 사용할 배출 확률 테이블 이름 리스트 응답값이 10개이고 추첨 횟수가 10회 미만인 경우, 앞에서부터 순서대로 사용됩니다. 추첨 횟수가 10회이고 10개 미만의 배출 확률 테이블을 응답한 경우, 응답한 배출 확률 테이블을 순서대로 사용하고 나머지는 마지막에 응답한 배출 확률 테이블로 추첨합니다. 예를 들어 3개의 배출 확률 테이블을 응답한 경우, 1회차는 1번째 배출 확률 테이블, 2회차는 2번째 배출 확률 테이블, 3회차 이후는 3번째 배출 확률 테이블로 추첨합니다. 구현 예제 Lua -- Request local namespace = args.namespace local lotteryModel = args.lotteryModel local userId = args.userId local count = args.count -- Business logic: local prizeTableNames = {} -- Result result = { prizeTableNames = prizeTableNames }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Lottery 스크립트 트리거 레퍼런스","url":"/ko/api_reference/lottery/script/"},{"content":"트리거 createGathering 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 gathering Gathering 개더링 구현 예제 Lua -- Request local namespace = args.namespace local gathering = args.gathering -- Business logic: -- Result result = { } completeMatchmaking 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 gathering Gathering 개더링 구현 예제 Lua -- Request local namespace = args.namespace local gathering = args.gathering -- Business logic: -- Result result = { } changeRating 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldRating Rating 갱신 전 레이팅 newRating Rating 갱신 후 레이팅 Result 타입 필수 기본값 값 제한 설명 permit bool  레이팅 값 변화를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local oldRating = args.oldRating local newRating = args.newRating -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldRating Rating 갱신 전 레이팅 newRating Rating 갱신 전 레이팅 구현 예제 Lua -- Request local namespace = args.namespace local oldRating = args.oldRating local newRating = args.newRating -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Matchmaking 스크립트 트리거 레퍼런스","url":"/ko/api_reference/matchmaking/script/"},{"content":"트리거 missionComplete 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 missionGroupModel MissionGroupModel 미션 그룹 oldComplete Complete 달성 전 달성 상황 newComplete Complete 달성 후 달성 상황 completeTaskNames [] 달성한 태스크 이름 리스트 Result 타입 필수 기본값 값 제한 설명 permit bool  미션 달성을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local missionGroupModel = args.missionGroupModel local oldComplete = args.oldComplete local newComplete = args.newComplete local completeTaskNames = args.completeTaskNames -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 missionGroupModel MissionGroupModel 미션 그룹 complete Complete 달성 상황 completeTaskNames [] 달성한 태스크 이름 리스트 구현 예제 Lua -- Request local namespace = args.namespace local missionGroupModel = args.missionGroupModel local complete = args.complete local completeTaskNames = args.completeTaskNames -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } counterIncrement 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 counterModel CounterModel 카운터 모델 oldCounter Counter 갱신 전 카운터 newCounter Counter 갱신 후 카운터 Result 타입 필수 기본값 값 제한 설명 permit bool  카운터 상승을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local counterModel = args.counterModel local oldCounter = args.oldCounter local newCounter = args.newCounter -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 counterModel CounterModel 카운터 모델 counter Counter 카운터 구현 예제 Lua -- Request local namespace = args.namespace local counterModel = args.counterModel local counter = args.counter -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } receiveRewards 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 missionGroupModel MissionGroupModel 미션 그룹 oldComplete Complete 갱신 전 달성 상황 newComplete Complete 갱신 후 달성 상황 receiveRewardTaskNames [] 보상을 수취할 태스크 이름 리스트 Result 타입 필수 기본값 값 제한 설명 permit bool  보상 수취를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local missionGroupModel = args.missionGroupModel local oldComplete = args.oldComplete local newComplete = args.newComplete local receiveRewardTaskNames = args.receiveRewardTaskNames -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 missionGroupModel MissionGroupModel 미션 그룹 complete Complete 달성 상황 receiveRewardTaskNames [] 보상을 수취할 태스크 이름 리스트 구현 예제 Lua -- Request local namespace = args.namespace local missionGroupModel = args.missionGroupModel local complete = args.complete local receiveRewardTaskNames = args.receiveRewardTaskNames -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Mission 스크립트 트리거 레퍼런스","url":"/ko/api_reference/mission/script/"},{"content":"트리거 createWallet 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 wallet Wallet 지갑 Result 타입 필수 기본값 값 제한 설명 permit bool  지갑 생성을 허용할지 여부 initialAmount int  0 ~ 2147483645 지갑의 초기 잔액 - 무료 지급으로 가산됩니다 구현 예제 Lua -- Request local namespace = args.namespace local wallet = args.wallet -- Business logic: local permit = true local initialAmount = 0 -- Result result = { permit = permit , initialAmount = initialAmount } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 wallet Wallet 지갑 구현 예제 Lua -- Request local namespace = args.namespace local wallet = args.wallet -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } deposit 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldWallet Wallet 가산 전 지갑 newWallet Wallet 가산 후 지갑 price float 구매 가격 depositCount int 지급할 유료 통화 수량 Result 타입 필수 기본값 값 제한 설명 permit bool  지갑 잔액 가산을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local oldWallet = args.oldWallet local newWallet = args.newWallet local price = args.price local depositCount = args.depositCount -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldWallet Wallet 가산 전 지갑 newWallet Wallet 가산 후 지갑 price float 구매 가격 depositCount int 지급할 유료 통화 수량 구현 예제 Lua -- Request local namespace = args.namespace local oldWallet = args.oldWallet local newWallet = args.newWallet local price = args.price local depositCount = args.depositCount -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } withdraw 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldWallet Wallet 소비 전 지갑 newWallet Wallet 소비 후 지갑 withdrawCount int 소비할 유료 통화 수량 paidOnly bool 유료 통화만을 대상으로 할지 여부 Result 타입 필수 기본값 값 제한 설명 permit bool  지갑 잔액 소비를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local oldWallet = args.oldWallet local newWallet = args.newWallet local withdrawCount = args.withdrawCount local paidOnly = args.paidOnly -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldWallet Wallet 소비 전 지갑 newWallet Wallet 소비 후 지갑 withdrawCount int 소비할 유료 통화 수량 paidOnly bool 유료 통화만을 대상으로 할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local oldWallet = args.oldWallet local newWallet = args.newWallet local withdrawCount = args.withdrawCount local paidOnly = args.paidOnly -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Money 스크립트 트리거 레퍼런스","url":"/ko/api_reference/money/script/"},{"content":"트리거 deposit 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldWallet Wallet 가산 전 지갑 newWallet Wallet 가산 후 지갑 transactions DepositTransaction[] 발생한 트랜잭션 리스트 count int 잔액 가산량 Result 타입 필수 기본값 값 제한 설명 permit bool  지갑 잔액 가산을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local oldWallet = args.oldWallet local newWallet = args.newWallet local transactions = args.transactions local count = args.count -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldWallet Wallet 가산 전 지갑 newWallet Wallet 가산 후 지갑 transactions DepositTransaction[] 발생한 트랜잭션 리스트 count int 잔액 가산량 구현 예제 Lua -- Request local namespace = args.namespace local oldWallet = args.oldWallet local newWallet = args.newWallet local transactions = args.transactions local count = args.count -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } withdraw 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldWallet Wallet 소비 전 지갑 newWallet Wallet 소비 후 지갑 transactions DepositTransaction[] 발생한 트랜잭션 리스트 count int 잔액 소비량 Result 타입 필수 기본값 값 제한 설명 permit bool  지갑 잔액 소비를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local oldWallet = args.oldWallet local newWallet = args.newWallet local transactions = args.transactions local count = args.count -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldWallet Wallet 소비 전 지갑 newWallet Wallet 소비 후 지갑 transactions DepositTransaction[] 발생한 트랜잭션 리스트 count int 잔액 소비량 구현 예제 Lua -- Request local namespace = args.namespace local oldWallet = args.oldWallet local newWallet = args.newWallet local transactions = args.transactions local count = args.count -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } subscribe 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 contentModel StoreSubscriptionContentModel 구독 스토어 콘텐츠 모델 transaction SubscribeTransaction 구독 상태 userId string 사용자ID ttlAt long GS2-Schedule 트리거에 반영할 유효 기간 구현 예제 Lua -- Request local namespace = args.namespace local contentModel = args.contentModel local transaction = args.transaction local userId = args.userId local ttlAt = args.ttlAt -- Business logic: -- Result result = { } renew 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 contentModel StoreSubscriptionContentModel 구독 스토어 콘텐츠 모델 transaction SubscribeTransaction 구독 상태 userId string 사용자ID ttlAt long GS2-Schedule 트리거에 반영할 유효 기간 구현 예제 Lua -- Request local namespace = args.namespace local contentModel = args.contentModel local transaction = args.transaction local userId = args.userId local ttlAt = args.ttlAt -- Business logic: -- Result result = { } unsubscribe 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 contentModel StoreSubscriptionContentModel 구독 스토어 콘텐츠 모델 transaction SubscribeTransaction 구독 상태 userId string 사용자ID 구현 예제 Lua -- Request local namespace = args.namespace local contentModel = args.contentModel local transaction = args.transaction local userId = args.userId -- Business logic: -- Result result = { } takeOver 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 contentModel StoreSubscriptionContentModel 구독 스토어 콘텐츠 모델 transaction SubscribeTransaction 구독 상태 fromUserId string 사용자ID toUserId string 사용자ID elapsedHours int 마지막 할당 사용자 변경 이후 경과 시간(시간) Result 타입 필수 기본값 값 제한 설명 permit bool  할당 사용자 변경을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local contentModel = args.contentModel local transaction = args.transaction local fromUserId = args.fromUserId local toUserId = args.toUserId local elapsedHours = args.elapsedHours -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 contentModel StoreSubscriptionContentModel 구독 스토어 콘텐츠 모델 transaction SubscribeTransaction 구독 상태 fromUserId string 사용자ID toUserId string 사용자ID elapsedHours int 마지막 할당 사용자 변경 이후 경과 시간(시간) 구현 예제 Lua -- Request local namespace = args.namespace local contentModel = args.contentModel local transaction = args.transaction local fromUserId = args.fromUserId local toUserId = args.toUserId local elapsedHours = args.elapsedHours -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } verifyReceipt 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 storeContentModel StoreContentModel 스토어 콘텐츠 모델 receipt Receipt 영수증 userId string 사용자ID Result 타입 필수 기본값 값 제한 설명 permit bool  영수증 검증을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local storeContentModel = args.storeContentModel local receipt = args.receipt local userId = args.userId -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 storeContentModel StoreContentModel 스토어 콘텐츠 모델 receipt Receipt 영수증 userId string 사용자ID 구현 예제 Lua -- Request local namespace = args.namespace local storeContentModel = args.storeContentModel local receipt = args.receipt local userId = args.userId -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Money2 스크립트 트리거 레퍼런스","url":"/ko/api_reference/money2/script/"},{"content":"트리거 startQuest 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 questGroupModel QuestGroupModel 퀘스트 그룹 모델 questModel QuestModel 퀘스트 모델 randomSeed long 난수 시드 rewards Reward[] 퀘스트로 얻을 수 있는 보상 리스트 userId string 사용자ID config Config[] 트랜잭션 변수에 적용할 설정값 Result 타입 필수 기본값 값 제한 설명 permit bool  퀘스트 시작을 허용할지 여부 overrideRandomSeed long 0 ~ 9223372036854775805 난수 시드 overrideRewards Reward[] 0 ~ 1000 items 퀘스트로 얻을 수 있는 보상 리스트 구현 예제 Lua -- Request local namespace = args.namespace local questGroupModel = args.questGroupModel local questModel = args.questModel local randomSeed = args.randomSeed local rewards = args.rewards local userId = args.userId local config = args.config -- Business logic: local permit = true local overrideRandomSeed = 0 local overrideRewards = {} -- Result result = { permit = permit , overrideRandomSeed = overrideRandomSeed , overrideRewards = overrideRewards } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 questGroupModel QuestGroupModel 퀘스트 그룹 모델 questModel QuestModel 퀘스트 모델 progress Progress 퀘스트 진행 상황 config Config[] 트랜잭션 변수에 적용할 설정값 구현 예제 Lua -- Request local namespace = args.namespace local questGroupModel = args.questGroupModel local questModel = args.questModel local progress = args.progress local config = args.config -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } completeQuest 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 questGroupModel QuestGroupModel 퀘스트 그룹 모델 questModel QuestModel 퀘스트 모델 rewards Reward[] 퀘스트로 얻은 보상 리스트 progress Progress 퀘스트 진행 상황 config Config[] 트랜잭션 변수에 적용할 설정값 Result 타입 필수 기본값 값 제한 설명 permit bool  퀘스트 클리어를 허용할지 여부 overrideRewards Reward[] 0 ~ 1000 items 퀘스트로 얻을 수 있는 보상 리스트 구현 예제 Lua -- Request local namespace = args.namespace local questGroupModel = args.questGroupModel local questModel = args.questModel local rewards = args.rewards local progress = args.progress local config = args.config -- Business logic: local permit = true local overrideRewards = {} -- Result result = { permit = permit , overrideRewards = overrideRewards } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 questGroupModel QuestGroupModel 퀘스트 그룹 모델 questModel QuestModel 퀘스트 모델 rewards Reward[] 퀘스트로 얻은 보상 리스트 progress Progress 퀘스트 진행 상황 config Config[] 트랜잭션 변수에 적용할 설정값 구현 예제 Lua -- Request local namespace = args.namespace local questGroupModel = args.questGroupModel local questModel = args.questModel local rewards = args.rewards local progress = args.progress local config = args.config -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } failedQuest 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 questGroupModel QuestGroupModel 퀘스트 그룹 모델 questModel QuestModel 퀘스트 모델 rewards Reward[] 퀘스트로 얻은 보상 리스트 progress Progress 퀘스트 진행 상황 config Config[] 트랜잭션 변수에 적용할 설정값 Result 타입 필수 기본값 값 제한 설명 permit bool  퀘스트 실패를 허용할지 여부 overrideRewards Reward[] 0 ~ 1000 items 퀘스트로 얻을 수 있는 보상 리스트 구현 예제 Lua -- Request local namespace = args.namespace local questGroupModel = args.questGroupModel local questModel = args.questModel local rewards = args.rewards local progress = args.progress local config = args.config -- Business logic: local permit = true local overrideRewards = {} -- Result result = { permit = permit , overrideRewards = overrideRewards } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 questGroupModel QuestGroupModel 퀘스트 그룹 모델 questModel QuestModel 퀘스트 모델 rewards Reward[] 퀘스트로 얻은 보상 리스트 progress Progress 퀘스트 진행 상황 config Config[] 트랜잭션 변수에 적용할 설정값 구현 예제 Lua -- Request local namespace = args.namespace local questGroupModel = args.questGroupModel local questModel = args.questModel local rewards = args.rewards local progress = args.progress local config = args.config -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Quest 스크립트 트리거 레퍼런스","url":"/ko/api_reference/quest/script/"},{"content":"트리거 buy 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 showcase Showcase 진열대 모델 displayItem DisplayItem 진열 상품 모델 userId string 구매를 실행하는 사용자 ID quantity int 구매 수량 config Config[] 트랜잭션 변수에 적용할 설정값 Result 타입 필수 기본값 값 제한 설명 permit bool  구매를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local showcase = args.showcase local displayItem = args.displayItem local userId = args.userId local quantity = args.quantity local config = args.config -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 showcase Showcase 진열대 모델 displayItem DisplayItem 진열 상품 모델 userId string 구매를 실행하는 사용자 ID quantity int 구매 수량 config Config[] 트랜잭션 변수에 적용할 설정값 구현 예제 Lua -- Request local namespace = args.namespace local showcase = args.showcase local displayItem = args.displayItem local userId = args.userId local quantity = args.quantity local config = args.config -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Showcase 스크립트 트리거 레퍼런스","url":"/ko/api_reference/showcase/script/"},{"content":"트리거 release 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldStatus Status 갱신 전 상태 newStatus Status 갱신 후 상태 userId string 사용자ID nodeModelNames [] 노드 모델 이름 목록 Result 타입 필수 기본값 값 제한 설명 permit bool  노드 해방을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local oldStatus = args.oldStatus local newStatus = args.newStatus local userId = args.userId local nodeModelNames = args.nodeModelNames -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 oldStatus Status 갱신 전 상태 newStatus Status 갱신 후 상태 userId string 사용자ID nodeModelNames [] 노드 모델 이름 목록 구현 예제 Lua -- Request local namespace = args.namespace local oldStatus = args.oldStatus local newStatus = args.newStatus local userId = args.userId local nodeModelNames = args.nodeModelNames -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } restrain 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 userId string 사용자ID oldStatus Status 갱신 전 상태 newStatus Status 갱신 후 상태 nodeModelNames [] 노드 모델 이름 목록 Result 타입 필수 기본값 값 제한 설명 permit bool  노드 해방 되돌리기를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local userId = args.userId local oldStatus = args.oldStatus local newStatus = args.newStatus local nodeModelNames = args.nodeModelNames -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 userId string 사용자ID oldStatus Status 갱신 전 상태 newStatus Status 갱신 후 상태 nodeModelNames [] 노드 모델 이름 목록 구현 예제 Lua -- Request local namespace = args.namespace local userId = args.userId local oldStatus = args.oldStatus local newStatus = args.newStatus local nodeModelNames = args.nodeModelNames -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-SkillTree 스크립트 트리거 레퍼런스","url":"/ko/api_reference/skill_tree/script/"},{"content":"트리거 overflow 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 staminaModel StaminaModel 스타미나 모델 stamina Stamina 스타미나 overflowValue long 넘친 양 구현 예제 Lua -- Request local namespace = args.namespace local staminaModel = args.staminaModel local stamina = args.stamina local overflowValue = args.overflowValue -- Business logic: -- Result result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Stamina 스크립트 트리거 레퍼런스","url":"/ko/api_reference/stamina/script/"},{"content":"트리거 start 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 stateMachineMaster StateMachineMaster 스테이트 머신 마스터 데이터 status Status 상태 userId string 사용자 ID parameters string 스테이트 머신에 전달할 인자 Result 타입 필수 기본값 값 제한 설명 permit bool  시작을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local stateMachineMaster = args.stateMachineMaster local status = args.status local userId = args.userId local parameters = args.parameters -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 stateMachineMaster StateMachineMaster 스테이트 머신 마스터 데이터 status Status 상태 userId string 사용자 ID parameters string 스테이트 머신에 전달할 인자 구현 예제 Lua -- Request local namespace = args.namespace local stateMachineMaster = args.stateMachineMaster local status = args.status local userId = args.userId local parameters = args.parameters -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } pass 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 stateMachineMaster StateMachineMaster 스테이트 머신 마스터 데이터 status Status 상태 userId string 사용자 ID Result 타입 필수 기본값 값 제한 설명 permit bool  스테이트 머신의 정상 종료를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local stateMachineMaster = args.stateMachineMaster local status = args.status local userId = args.userId -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 stateMachineMaster StateMachineMaster 스테이트 머신 마스터 데이터 status Status 상태 userId string 사용자 ID 구현 예제 Lua -- Request local namespace = args.namespace local stateMachineMaster = args.stateMachineMaster local status = args.status local userId = args.userId -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } error 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 stateMachineMaster StateMachineMaster 스테이트 머신 마스터 데이터 status Status 상태 userId string 사용자 ID Result 타입 필수 기본값 값 제한 설명 permit bool  스테이트 머신의 비정상 종료를 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local stateMachineMaster = args.stateMachineMaster local status = args.status local userId = args.userId -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 stateMachineMaster StateMachineMaster 스테이트 머신 마스터 데이터 status Status 상태 userId string 사용자 ID 구현 예제 Lua -- Request local namespace = args.namespace local stateMachineMaster = args.stateMachineMaster local status = args.status local userId = args.userId -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-StateMachine 스크립트 트리거 레퍼런스","url":"/ko/api_reference/state_machine/script/"},{"content":"트리거 acceptVersion 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 versionModel VersionModel 버전 모델 acceptVersion AcceptVersion 승인한 버전 currentAcceptVersion AcceptVersion 현재 승인한 버전 Result 타입 필수 기본값 값 제한 설명 permit bool  버전 승인을 허용할지 여부 구현 예제 Lua -- Request local namespace = args.namespace local versionModel = args.versionModel local acceptVersion = args.acceptVersion local currentAcceptVersion = args.currentAcceptVersion -- Business logic: local permit = true -- Result result = { permit = permit } 비동기 실행 스크립트 처리 후에, 스크립트가 비동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 versionModel VersionModel 버전 모델 acceptVersion AcceptVersion 승인한 버전 구현 예제 Lua -- Request local namespace = args.namespace local versionModel = args.versionModel local acceptVersion = args.acceptVersion -- 비동기 스크립트는 일반적으로 API 응답에 영향을 주지 않습니다. -- 로그 출력이나 분석, 외부 알림 등에 사용됩니다. result = { } checkVersion 동기 실행 스크립트 처리 전에, 스크립트가 동기 실행됩니다. Request 타입 설명 namespace Namespace 네임스페이스 versionModel VersionModel 버전 모델 currentVersion Version 현재 버전 userId string 사용자ID warning Status 일반 버전 체크 결과가 경고인 경우 error Status 일반 버전 체크 결과가 오류인 경우 Result 타입 필수 기본값 값 제한 설명 overrideWarning Status 덮어쓸 버전 체크 결과 - 경고 overrideError Status 덮어쓸 버전 체크 결과 - 오류 구현 예제 Lua -- Request local namespace = args.namespace local versionModel = args.versionModel local currentVersion = args.currentVersion local userId = args.userId local warning = args.warning local error = args.error -- Business logic: local overrideWarning = nil local overrideError = nil -- Result result = { overrideWarning = overrideWarning , overrideError = overrideError }","lang":"ko","section":"api_reference","summary":"확장 스크립트를 호출하는 이벤트 트리거의 레퍼런스\n","title":"GS2-Version 스크립트 트리거 레퍼런스","url":"/ko/api_reference/version/script/"},{"content":"GS2-SDK는 게임 엔진에 특화된 SDK가 제공됩니다. Unity, Unreal Engine 5, Godot을 이용하는 개발자는 이 SDK를 통해 다양한 기능을 이용할 수 있습니다. Unity Unity에서 이용할 수 있는 SDK로 “GS2-SDK for Unity\"를 제공하고 있습니다. Unity Package Manager(UPM)와 완전히 통합되어 있어, SDK 갱신도 UPM에서 수행할 수 있습니다. 의존하고 있는 라이브러리는 LitJSON (Public Domain) / websocket-sharp (MIT) / Protocol Buffers (BSD)뿐입니다. GS2-SDK for Unity는 Apache License 2.0으로 제공되며, 다음 GitHub 저장소에서 모든 소스 코드가 공개되어 있습니다. https://github.com/gs2io/gs2-csharp-sdk https://github.com/gs2io/gs2-sdk-for-unity https://github.com/gs2io/gs2-uikit-for-unity GS2-SDK for Unity는 서버에서 취득한 데이터의 상태 관리 기능을 갖고 있습니다. API를 통해 취득한 데이터는 SDK 레이어에서 캐시되며, 서버의 값이 갱신되면 캐시도 자동으로 갱신됩니다. 따라서 개발자는 데이터 로딩에 관해서는 특별히 신경 쓰지 않고 Update 함수에서 GS2-SDK의 API를 호출하여 최신 값에 접근할 수 있습니다. 구현 예제 var result = await gs2.Account.Namespace( namespaceName: \"namespace-0001\" ).CreateAsync(); var item = await result.ModelAsync(); var userId = item.UserId; var password = item.Password; GS2-UIKit for Unity 보다 Unity에 특화된 SDK입니다. Unity Editor에서 GameObject에 컴포넌트를 부여하는 것만으로, 텍스트에 아이템 소지 수량을 반영하거나 횟수 제한 상한에 도달했는지 여부에 따라 GameObject를 활성화·비활성화하는 설정을 할 수 있습니다. 서버에서 데이터를 취득하여 UI에 반영하는 단순한 구현이라면 UI Kit을 사용함으로써 노코드로 실현할 수 있습니다. Unreal Engine 5 Unreal Engine 5에서 이용할 수 있는 SDK로 “GS2-SDK for Unreal Engine\"을 제공하고 있습니다. Unreal Engine의 플러그인으로 제공되며, 코드를 배치하는 것만으로 프로젝트에 포함시킬 수 있습니다. 의존하는 외부 라이브러리는 없으며, 모두 Unreal Engine 5의 표준 기능으로 구현되어 있습니다. GS2-SDK for Unreal Engine은 Apache License 2.0으로 제공되며, 다음 GitHub 저장소에서 모든 소스 코드가 공개되어 있습니다. https://github.com/gs2io/gs2-sdk-for-ue5 구현 예제 const auto Domain = Gs2-\u003eAccount-\u003eNamespace( \"namespace-0001\" // namespaceName ); const auto Future = Domain-\u003eCreate( ); Future-\u003eStartSynchronousTask(); if (Future-\u003eGetTask().IsError()) return false; // obtain changed values / result values const auto Future2 = Future-\u003eGetTask().Result()-\u003eModel(); Future2-\u003eStartSynchronousTask(); if (Future2-\u003eGetTask().IsError()) return false; const auto Result = Future2-\u003eGetTask().Result(); Blueprint SDK 보다 Unreal Engine 5에 특화된 SDK입니다. Unreal Editor에서 개발할 수 있는 노드 기반 프로그래밍 환경인 Blueprint에 대응하는 SDK입니다. Blueprint SDK를 사용하면 C++을 사용하지 않고도 GS2의 기능에 접근할 수 있습니다. Godot Godot 4(GDScript)에서 이용할 수 있는 SDK로 “GS2 SDK for Godot\"을 제공하고 있습니다. SDK는 addons/gs2 폴더로 제공되며, Godot 프로젝트에 복사하여 이용할 수 있습니다. GS2 SDK for Godot은 게임 내에서 사용하기 쉬운 Ez 레이어와 저수준 API 클라이언트를 함께 제공합니다. Gs2EzDomain 을 생성하면 Unity의 gs2.Account 등과 마찬가지로 ez.account , ez.inventory 같은 서비스 프로퍼티를 통해 각 기능에 접근할 수 있습니다. Apache License 2.0으로 제공되며, 다음 GitHub 저장소에서 모든 소스 코드가 공개되어 있습니다. https://github.com/gs2io/gs2-sdk-for-godot 구현 예제 var credential = Gs2BasicCredential.new(\"client-id\", \"client-secret\") var connection = Gs2Connection.new(credential, Gs2Region.AP_NORTHEAST_1) var ez = Gs2EzDomain.new(connection) var create_result = await ez.account.namespace_( \"namespace-0001\" ).create() if create_result.error != null: push_error(str(create_result.error)) return var model_result = await create_result.result.model() if model_result.error != null: push_error(str(model_result.error)) return var account = model_result.result print(\"UserId: \", account.user_id) print(\"Password: \", account.password)","lang":"ko","section":"overview","summary":"GS2를 활용한 게임 개발에 대하여\n","title":"구현","url":"/ko/overview/workflow/coding/"},{"content":"GS2-Account 서비스 이용을 시작하기 위해서는 네임스페이스를 추가해야 합니다. 네임스페이스(이름 공간)는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 여러 용도로 이용할 수 있도록 하기 위한 구조입니다. 서로 다른 네임스페이스 내에서는 동일한 서비스라도 완전히 별개의 데이터 공간으로 취급됩니다. 그럼, 샘플 템플릿을 사용해 GS2-Account 의 네임스페이스 이름에 game-0001을 추가하고, 계정 인증에 사용할 암호화 키를 발행하여 계정을 새로 생성할 수 있는 상태로 만들어 보겠습니다. GS2-Deploy 로 리소스를 생성한다 GS2-Deploy 는 템플릿 파일(YAML 형식)을 바탕으로 여러 서비스의 리소스를 한 번에 생성·관리하기 위한 서비스입니다. 관리 콘솔 에 로그인합니다. 왼쪽 메뉴에서 Deploy 를 선택하고 Stacks 를 클릭합니다. 스택 신규 생성 을 클릭합니다. 스택 이름 에 initialize-account 등 임의의 이름을 입력합니다. 템플릿 데이터 입력란에 아래 템플릿의 내용을 복사하여 붙여넣습니다. 생성 버튼을 클릭합니다. 생성이 완료될 때까지 몇 초에서 몇십 초 정도 걸립니다. 상태가 CREATE_COMPLETE 가 되면 완료입니다. YAML GS2TemplateFormatVersion : \"2019-05-01\" Description : GS2-Account initialize template Version 2010-06-26 Globals : Alias : AccountNamespaceName : game-0001 KeyNamespaceAccountAuthentication : account-encryption-key-namespace KeyAccountAuthentication : account-encryption-key Resources : KeyNamespaceAccountAuthentication : Type : GS2::Key::Namespace Properties : Name : ${KeyNamespaceAccountAuthentication} KeyAccountAuthentication : Type : GS2::Key::Key Properties : NamespaceName : ${KeyNamespaceAccountAuthentication} Name : ${KeyAccountAuthentication} DependsOn : - KeyNamespaceAccountAuthentication AccountNamespace : Type : GS2::Account::Namespace Properties : Name : ${AccountNamespaceName} Outputs : AccountNamespaceName : ! GetAttr AccountNamespace.Item.Name KeyAccountAuthenticationKeyId : ! GetAttr KeyAccountAuthentication.Item.KeyId 샘플 템플릿 다운로드","lang":"ko","section":"get_start","summary":"익명 계정을 발급~로그인까지 가능한 리소스를 준비해봅시다\n","title":"로그인 처리에 필요한 리소스 준비","url":"/ko/get_start/tutorial/setup_account/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 changePasswordIfTakeOver bool false 계정 인계 시 비밀번호를 변경할지 여부 계정 인계 시 비밀번호를 변경할지 여부를 지정합니다. 이 설정을 통해 계정 인계를 실행한 후 인계 이전 디바이스로부터의 로그인을 제한할 수 있습니다. differentUserIdForLoginAndDataRetention bool false 로그인에 사용하는 사용자 ID와 데이터의 보유에 사용하는 사용자 ID를 다르게 함 로그인용 사용자 ID와 데이터 보유용 사용자 ID를 분리할지 여부를 지정합니다. 이 설정을 통해 플랫폼 제공업체가 규정하는 개인정보 보호 요건을 적은 작업량으로 충족할 수 있습니다. ※이 파라미터는 네임스페이스 생성 시에만 설정할 수 있습니다. createAccountScript ScriptSetting 계정을 신규 생성했을 때 실행할 스크립트의 설정 계정 생성의 커스텀 로직을 구현하는 데 사용됩니다. Script 트리거 레퍼런스 - createAccount authenticationScript ScriptSetting 인증했을 때 실행할 스크립트의 설정 인증 프로세스를 커스터마이즈하는 데 도움이 됩니다. Script 트리거 레퍼런스 - authentication createTakeOverScript ScriptSetting 인계 정보를 등록했을 때 실행할 스크립트의 설정 인계 정보를 처음 등록했을 때 보상을 지급하기 위해 GS2-Mission의 카운터를 증가시키는 등의 커스텀 로직을 추가하는 데 사용됩니다. Script 트리거 레퍼런스 - createTakeOver doTakeOverScript ScriptSetting 인계를 실행했을 때 실행할 스크립트의 설정 인계 처리의 추가 로직을 구현하는 데 도움이 됩니다. Script 트리거 레퍼런스 - doTakeOver banScript ScriptSetting 계정 BAN 상태를 추가했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - ban unBanScript ScriptSetting 계정 BAN 상태를 해제했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - unBan logSetting LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스 정보를 보유합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Account::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null ChangePasswordIfTakeOver : false DifferentUserIdForLoginAndDataRetention : null CreateAccountScript : null AuthenticationScript : null CreateTakeOverScript : null DoTakeOverScript : null BanScript : null UnBanScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/account\" ) SampleStack := core . NewStack () account . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , account . NamespaceOptions { ChangePasswordIfTakeOver : false , LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Account\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Account\\Model\\Options\\NamespaceOptions ( changePasswordIfTakeOver : false , logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . account . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . account . model . options . NamespaceOptions () . withChangePasswordIfTakeOver ( false ) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Account . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Account . Model . Options . NamespaceOptions { changePasswordIfTakeOver = false , logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import account from \"@/gs2cdk/account\" ; class SampleStack extends core . Stack { public constructor () { super (); new account . model . Namespace ( this , \"namespace-0001\" , { changePasswordIfTakeOver : false , logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , account class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () account . Namespace ( stack = self , name = 'namespace-0001' , options = account . NamespaceOptions ( change_password_if_take_over = False , log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 타입 활성화 조건 필수 기본값 값 제한 설명 ScriptSetting 타입 활성화 조건 필수 기본값 값 제한 설명 LogSetting 타입 활성화 조건 필수 기본값 값 제한 설명 CurrentModelMaster Note JSON 파일 형식에 대해서는 GS2-Account 마스터 데이터 레퍼런스 를 참조해 주세요. Request 타입 활성화 조건 필수 기본값 값 제한 설명 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Account::CurrentModelMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2024-07-30\" , \"takeOverTypeModels\": [ { \"type\": 0 , \"openIdConnectSetting\" : { \"configurationPath\": \"https://accounts.google.com/.well-known/openid-configuration\" , \"clientId\": \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" , \"clientSecret\": \"secret\" } , \"metadata\": \"Google\" } , { \"type\": 1 , \"openIdConnectSetting\" : { \"configurationPath\": \"https://appleid.apple.com/.well-known/openid-configuration\" , \"clientId\": \"io.gs2.sample.auth\" , \"appleTeamId\": \"9LX9LA85H8\" , \"appleKeyId\": \"P937MLY6Z7\" , \"applePrivateKeyPem\": \"-----BEGIN PRIVATE KEY-----\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\n-----END PRIVATE KEY-----\" } , \"metadata\": \"Apple\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/account\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () account . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , account . NamespaceOptions {}, ). MasterData ( [] account . TakeOverTypeModel { account . NewTakeOverTypeModel ( 0 , account . NewOpenIdConnectSetting ( \"https://accounts.google.com/.well-known/openid-configuration\" , \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" , account . OpenIdConnectSettingOptions { ClientSecret : pointy . String ( \"secret\" ), }, ), account . TakeOverTypeModelOptions { Metadata : pointy . String ( \"Google\" ), }, ), account . NewTakeOverTypeModel ( 1 , account . NewOpenIdConnectSetting ( \"https://appleid.apple.com/.well-known/openid-configuration\" , \"io.gs2.sample.auth\" , account . OpenIdConnectSettingOptions { AppleTeamId : pointy . String ( \"9LX9LA85H8\" ), AppleKeyId : pointy . String ( \"P937MLY6Z7\" ), ApplePrivateKeyPem : pointy . String ( \"-----BEGIN PRIVATE KEY-----\\\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\n-----END PRIVATE KEY-----\" ), }, ), account . TakeOverTypeModelOptions { Metadata : pointy . String ( \"Apple\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Account\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Account\\Model\\TakeOverTypeModel ( type : 0 , openIdConnectSetting : new \\Gs2Cdk\\Account\\Model\\OpenIdConnectSetting ( configurationPath : \"https://accounts.google.com/.well-known/openid-configuration\" , clientId : \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" , options : new \\Gs2Cdk\\Account\\Model\\Options\\OpenIdConnectSettingOptions ( clientSecret : \"secret\" , ), ), options : new \\Gs2Cdk\\Account\\Model\\Options\\TakeOverTypeModelOptions ( metadata : \"Google\" ) ), new \\Gs2Cdk\\Account\\Model\\TakeOverTypeModel ( type : 1 , openIdConnectSetting : new \\Gs2Cdk\\Account\\Model\\OpenIdConnectSetting ( configurationPath : \"https://appleid.apple.com/.well-known/openid-configuration\" , clientId : \"io.gs2.sample.auth\" , options : new \\Gs2Cdk\\Account\\Model\\Options\\OpenIdConnectSettingOptions ( appleTeamId : \"9LX9LA85H8\" , appleKeyId : \"P937MLY6Z7\" , applePrivateKeyPem : \"-----BEGIN PRIVATE KEY----- \\\\ nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \\\\ n-----END PRIVATE KEY-----\" , ), ), options : new \\Gs2Cdk\\Account\\Model\\Options\\TakeOverTypeModelOptions ( metadata : \"Apple\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . account . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . account . model . TakeOverTypeModel ( 0 , new io . gs2 . cdk . account . model . OpenIdConnectSetting ( \"https://accounts.google.com/.well-known/openid-configuration\" , \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" , new io . gs2 . cdk . account . model . options . OpenIdConnectSettingOptions () . withClientSecret ( \"secret\" ) ), new io . gs2 . cdk . account . model . options . TakeOverTypeModelOptions () . withMetadata ( \"Google\" ) ), new io . gs2 . cdk . account . model . TakeOverTypeModel ( 1 , new io . gs2 . cdk . account . model . OpenIdConnectSetting ( \"https://appleid.apple.com/.well-known/openid-configuration\" , \"io.gs2.sample.auth\" , new io . gs2 . cdk . account . model . options . OpenIdConnectSettingOptions () . withAppleTeamId ( \"9LX9LA85H8\" ) . withAppleKeyId ( \"P937MLY6Z7\" ) . withApplePrivateKeyPem ( \"-----BEGIN PRIVATE KEY-----\\\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\n-----END PRIVATE KEY-----\" ) ), new io . gs2 . cdk . account . model . options . TakeOverTypeModelOptions () . withMetadata ( \"Apple\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Account . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Account . Model . TakeOverTypeModel [] { new Gs2Cdk . Gs2Account . Model . TakeOverTypeModel ( type : 0 , openIdConnectSetting : new Gs2Cdk . Gs2Account . Model . OpenIdConnectSetting ( configurationPath : \"https://accounts.google.com/.well-known/openid-configuration\" , clientId : \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" , options : new Gs2Cdk . Gs2Account . Model . Options . OpenIdConnectSettingOptions { clientSecret = \"secret\" } ), options : new Gs2Cdk . Gs2Account . Model . Options . TakeOverTypeModelOptions { metadata = \"Google\" } ), new Gs2Cdk . Gs2Account . Model . TakeOverTypeModel ( type : 1 , openIdConnectSetting : new Gs2Cdk . Gs2Account . Model . OpenIdConnectSetting ( configurationPath : \"https://appleid.apple.com/.well-known/openid-configuration\" , clientId : \"io.gs2.sample.auth\" , options : new Gs2Cdk . Gs2Account . Model . Options . OpenIdConnectSettingOptions { appleTeamId = \"9LX9LA85H8\" , appleKeyId = \"P937MLY6Z7\" , applePrivateKeyPem = \"-----BEGIN PRIVATE KEY-----\\\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\n-----END PRIVATE KEY-----\" } ), options : new Gs2Cdk . Gs2Account . Model . Options . TakeOverTypeModelOptions { metadata = \"Apple\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import account from \"@/gs2cdk/account\" ; class SampleStack extends core . Stack { public constructor () { super (); new account . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new account . model . TakeOverTypeModel ( 0 , new account . model . OpenIdConnectSetting ( \"https://accounts.google.com/.well-known/openid-configuration\" , \"695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com\" , { clientSecret : \"secret\" } ), { metadata : \"Google\" } ), new account . model . TakeOverTypeModel ( 1 , new account . model . OpenIdConnectSetting ( \"https://appleid.apple.com/.well-known/openid-configuration\" , \"io.gs2.sample.auth\" , { appleTeamId : \"9LX9LA85H8\" , appleKeyId : \"P937MLY6Z7\" , applePrivateKeyPem : \"-----BEGIN PRIVATE KEY-----\\\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\n-----END PRIVATE KEY-----\" } ), { metadata : \"Apple\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , account class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () account . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( take_over_type_models = [ account . TakeOverTypeModel ( type = 0 , open_id_connect_setting = account . OpenIdConnectSetting ( configuration_path = 'https://accounts.google.com/.well-known/openid-configuration' , client_id = '695893071400-qelt0dsu8tkotl13psnq5d1ko7kki4sl.apps.googleusercontent.com' , options = account . OpenIdConnectSettingOptions ( client_secret = 'secret' , ), ), options = account . TakeOverTypeModelOptions ( metadata = 'Google' ), ), account . TakeOverTypeModel ( type = 1 , open_id_connect_setting = account . OpenIdConnectSetting ( configuration_path = 'https://appleid.apple.com/.well-known/openid-configuration' , client_id = 'io.gs2.sample.auth' , options = account . OpenIdConnectSettingOptions ( apple_team_id = '9LX9LA85H8' , apple_key_id = 'P937MLY6Z7' , apple_private_key_pem = '-----BEGIN PRIVATE KEY----- \\\\ nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \\\\ n-----END PRIVATE KEY-----' , ), ), options = account . TakeOverTypeModelOptions ( metadata = 'Apple' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template TakeOverTypeModel 타입 활성화 조건 필수 기본값 값 제한 설명 OpenIdConnectSetting 타입 활성화 조건 필수 기본값 값 제한 설명 ScopeValue 타입 활성화 조건 필수 기본값 값 제한 설명 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. | enableAutoRun | bool | | | false | | 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 | | enableAtomicCommit | bool | {enableAutoRun} == true | | false | | 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 | | transactionUseDistributor | bool | {enableAtomicCommit} == true | | false | | 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 | | commitScriptResultInUseDistributor | bool | {transactionUseDistributor} == true | | false | | 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 | | acquireActionUseJobQueue | bool | {enableAtomicCommit} == true | | false | | 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 | | distributorNamespaceId | string | | | “grn:gs2:{region}:{ownerId}:distributor:default” | ~ 1024자 | 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN | | queueNamespaceId | string | | | “grn:gs2:{region}:{ownerId}:queue:default” | ~ 1024자 | 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN | 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. | triggerScriptId | string | | | | ~ 1024자 | API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. | | doneTriggerTargetType | 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } | | | “none” | | 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge | | doneTriggerScriptId | string | {doneTriggerTargetType} == “gs2_script” | | | ~ 1024자 | 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 | | doneTriggerQueueNamespaceId | string | {doneTriggerTargetType} == “gs2_script” | | | ~ 1024자 | 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 | 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. | loggingNamespaceId | string | |  | | ~ 1024자 | 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. | 현재 활성화된 인계 정보 타입 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 인계 정보 타입 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. 리소스 생성·갱신 요청 | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | mode | 문자열 열거형 enum {   “direct”,   “preUpload” } | | | “direct” | | 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 | | settings | string | {mode} == “direct” | ※ | | ~ 5242880 바이트 (5MB) | 마스터 데이터 ※ mode이(가) “direct” 이면 필수 | | uploadToken | string | {mode} == “preUpload” | ※ | | ~ 1024자 | 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 | | Item | CurrentModelMaster | 갱신된 현재 활성화된 인계 정보 타입 모델의 마스터 데이터 인계 정보 타입 모델 인계 정보를 정의하는 모델입니다. 인계 정보란 디바이스 기종 변경이나 플랫폼 간 계정 이동·공유 시에 사용하는 정보입니다. 개인을 식별하는 고유한 문자열과 비밀번호로 구성되며, 그 올바른 조합을 입력함으로써 Account(익명 계정)를 취득할 수 있습니다. 하나의 Account에 대해 여러 개의 인계 정보를 설정할 수 있습니다. 여러 개의 인계 정보를 설정하려면 각각 다른 슬롯을 지정해야 합니다. 슬롯은 0~1024를 지정할 수 있으므로 최대 1,025종류의 인계 정보를 설정할 수 있습니다. 구체적인 예로는 0에는 Sign in with Apple의 계정 정보를, 1에는 Google 계정 정보를 저장하는 등의 방식이 상정되어 있습니다. 어디까지나 이 인계 정보는 데이터 홀더이며, 소셜 계정과의 인증 메커니즘은 별도로 준비해야 합니다. | takeOverTypeModelId | string | | ※ | | ~ 1024자 | 인계 정보 타입 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 | | type | int | |  | | 0 ~ 1024 | 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. | | metadata | string | | | | ~ 2048자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. | | openIdConnectSetting | OpenIdConnectSetting | |  | | | OpenID Connect 설정 OpenID Connect 준수 Identity Provider(IdP)와 연동하기 위한 설정입니다. 디스커버리 URL, 클라이언트 인증 정보, Apple Sign In 파라미터 등 플랫폼별 설정이 포함됩니다. | OpenID Connect 설정 OpenID Connect 준수 IdP의 설정을 등록함으로써 계정의 인계 정보로 IdP 연동을 이용할 수 있게 됩니다. | configurationPath | string | |  | | ~ 1024자 | OpenID Connect 설정 URL OpenID Connect 제공자의 디스커버리 엔드포인트 URL입니다. well-known 형식(예: https://example.com/.well-known/openid-configuration)을 따라야 합니다. | | clientId | string | |  | | ~ 1024자 | 클라이언트 ID IdP에 등록된 애플리케이션의 클라이언트 ID입니다. | | clientSecret | string | {configurationPath} != “https://appleid.apple.com/.well-known/openid-configuration” | ※ | | ~ 1024자 | 클라이언트 시크릿 ※ configurationPath가 “https://appleid.apple.com/.well-known/openid-configuration” 이외의 다른 IdP 연동인 경우 필수 | | appleTeamId | string | {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” | ※ | | ~ 1024자 | Apple Developer 팀 ID Apple Developer 계정의 팀 ID입니다. Sign in with Apple 인증에 필요합니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 | | appleKeyId | string | {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” | ※ | | ~ 1024자 | Apple에 등록된 키 ID Sign in with Apple용으로 Apple Developer 계정에 등록된 키 ID입니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 | | applePrivateKeyPem | string | {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” | ※ | | ~ 10240자 | Apple로부터 받은 비밀 키 Apple Developer 포털에서 다운로드한 PEM 형식의 비밀 키입니다. Sign in with Apple 인증에 필요합니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 | | doneEndpointUrl | string | | | | ~ 1024자 | 인증 완료 시 이동하는 URL 지정하지 않으면 /authorization/done으로 이동합니다. 쿼리 스트링에 id_token이 부여됩니다. | | additionalScopeValues | List | | | [] | 0 ~ 10 items | OpenID Connect에서 획득하는 추가 스코프 기본 OpenID Connect 스코프 외에 IdP에 요청하는 추가 OAuth 스코프입니다. 인증 시 추가 사용자 정보를 취득할 수 있습니다. | | additionalReturnValues | List | | | [] | 0 ~ 10 items | OpenID Connect에서 획득하는 추가 반환값 ID 토큰 또는 UserInfo 응답에서 반환값에 포함할 추가 클레임 이름입니다. 지정된 클레임이 추출되어 표준 인증 결과와 함께 반환됩니다. | 스코프 값 OpenID Connect 인증 시 취득되는 추가 OAuth 스코프 값을 나타내는 키-값 쌍입니다. 표준 OpenID Connect 클레임 외에 IdP로부터 취득한 추가 데이터를 저장하는 데 사용됩니다. | key | string | |  | | ~ 64자 | 이름 인증 시 IdP에 요청한 스코프 이름입니다. | | value | string | | | | ~ 51200자 | 값 해당 스코프에 대해 IdP로부터 반환된 값입니다. |","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Account Deploy/CDK 레퍼런스","url":"/ko/api_reference/account/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 광고 시청 보상 부여 시 실행되는 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 아토믹 커밋, 비동기 처리 등의 옵션이 포함됩니다. admob AdMob AdMob 설정 AdMob에 관련된 광고 설정 및 파라미터를 관리합니다. unityAd UnityAd Unity Ads 설정 Unity Ads에 관련된 광고 설정 및 파라미터를 관리합니다. appLovinMaxes List 0 ~ 10 items AppLovin MAX 설정 AppLovin MAX에 관련된 광고 설정 및 파라미터를 관리합니다. acquirePointScript ScriptSetting 포인트 획득 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquirePoint consumePointScript ScriptSetting 포인트 소비 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - consumePoint changePointNotification NotificationSetting  광고 시청으로 포인트가 변동되었을 때의 푸시 알림 광고 시청에 의한 포인트 변동 시의 푸시 알림 설정입니다. 포인트가 변동되었을 때 게임 클라이언트에 알리기 위한 설정을 보유합니다. 이 설정을 하지 않으면, 획득한 포인트가 즉시 게임에 반영되지 않습니다. logSetting LogSetting 로그 출력 설정 로그 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 GS2-Log의 네임스페이스 정보를 보유합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::AdReward::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null Admob : AllowAdUnitIds : - 1 - 2 - 3 UnityAd : Keys : - key-0001 - key-0002 AppLovinMaxes : [] AcquirePointScript : null ConsumePointScript : null ChangePointNotification : GatewayNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001 LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/adReward\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () adReward . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , adReward . NamespaceOptions { Admob : \u0026 adReward . AdMob { AllowAdUnitIds : [] string { \"1\" , \"2\" , \"3\" , }, }, UnityAd : \u0026 adReward . UnityAd { Keys : [] string { \"key-0001\" , \"key-0002\" , }, }, ChangePointNotification : core . NewNotificationSetting ( core . NotificationSettingOptions { GatewayNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\AdReward\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\AdReward\\Model\\Options\\NamespaceOptions ( admob : new \\Gs2Cdk\\AdReward\\Model\\AdMob ( allowAdUnitIds : [ \"1\" , \"2\" , \"3\" , ] ), unityAd : new \\Gs2Cdk\\AdReward\\Model\\UnityAd ( options : new \\Gs2Cdk\\AdReward\\Model\\Options\\UnityAdOptions ( keys : [ \"key-0001\" , \"key-0002\" , ] ) ), changePointNotification : new \\Gs2Cdk\\Core\\Model\\NotificationSetting ( new \\Gs2Cdk\\Core\\Model\\NotificationSettingOptions ( gatewayNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . adReward . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . adReward . model . options . NamespaceOptions () . withAdmob ( new io . gs2 . cdk . adReward . model . AdMob ( Arrays . asList ( \"1\" , \"2\" , \"3\" ) )) . withUnityAd ( new io . gs2 . cdk . adReward . model . UnityAd ( new io . gs2 . cdk . adReward . model . options . UnityAdOptions () . withKeys ( Arrays . asList ( \"key-0001\" , \"key-0002\" ) ) )) . withChangePointNotification ( new io . gs2 . cdk . core . model . NotificationSetting ( new io . gs2 . cdk . core . model . options . NotificationSettingOptions () . withGatewayNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2AdReward . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2AdReward . Model . Options . NamespaceOptions { admob = new Gs2Cdk . Gs2AdReward . Model . AdMob ( allowAdUnitIds : new string [] { \"1\" , \"2\" , \"3\" } ), unityAd = new Gs2Cdk . Gs2AdReward . Model . UnityAd ( options : new Gs2Cdk . Gs2AdReward . Model . Options . UnityAdOptions { keys = new string [] { \"key-0001\" , \"key-0002\" } } ), changePointNotification = new Gs2Cdk . Core . Model . NotificationSetting ( options : new Gs2Cdk . Core . Model . NotificationSettingOptions { gatewayNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import adReward from \"@/gs2cdk/adReward\" ; class SampleStack extends core . Stack { public constructor () { super (); new adReward . model . Namespace ( this , \"namespace-0001\" , { admob : new adReward . model . AdMob ( [ \"1\" , \"2\" , \"3\" , ] ), unityAd : new adReward . model . UnityAd ( { keys : [ \"key-0001\" , \"key-0002\" , ] } ), changePointNotification : new core . NotificationSetting ( { gatewayNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , ad_reward class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () ad_reward . Namespace ( stack = self , name = 'namespace-0001' , options = ad_reward . NamespaceOptions ( admob = ad_reward . AdMob ( allow_ad_unit_ids = [ '1' , '2' , '3' , ], ), unity_ad = ad_reward . UnityAd ( options = ad_reward . UnityAdOptions ( keys = [ 'key-0001' , 'key-0002' , ], ) ), change_point_notification = core . NotificationSetting ( options = core . NotificationSettingOptions ( gateway_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:gateway:namespace-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. AdMob AdMob 광고 플랫폼에 관련된 설정 허용된 광고 유닛 ID 목록을 보유하며, 이를 기반으로 AdMob으로부터의 시청 완료 Webhook을 검증합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 allowAdUnitIds List  1 ~ 10 items 허용할 광고 유닛 ID 목록 AdMob으로부터의 광고 시청 완료 콜백에 포함된 광고 유닛 ID를 검증하기 위해 사용됩니다. 목록에 포함된 광고 유닛 ID는 애플리케이션 또는 게임 내에서 광고 시청이 적절하게 완료되었음을 확인하기 위한 것입니다. AdMob 플랫폼에서 전송되는 광고 시청 완료 알림에 포함된 광고 유닛 ID가 이 목록에 있는지 확인함으로써, 정당한 광고 시청 이벤트만을 수용하고 부정한 요청과 스팸을 방지할 수 있습니다. UnityAd Unity Ads 광고 플랫폼에 관련된 설정 애플리케이션이나 게임에서 사용되는 Unity Ads 관련 암호 키를 보유하기 위해 사용됩니다. 암호 키는 Unity Ads에서 발급되며, 광고 시청 완료를 검증할 때 사용합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 keys List 0 ~ 10 items 암호 키 목록 Unity Ads에서 발급된 암호 키 목록을 보유합니다. 이 키들은 Unity Ads 광고 플랫폼과의 통신 및 광고 이벤트 검증에 사용됩니다. 암호 키는 Unity Dashboard에서 취득할 수 있습니다. 목록에 포함된 각 키는 광고 시청 완료를 검증하기 위해 필요합니다. AppLovinMax AppLovin MAX 광고 플랫폼에 관련된 설정 허용된 광고 유닛 ID를 보유하며, 이를 기반으로 AppLovin MAX로부터의 시청 완료 Webhook을 검증합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 allowAdUnitId string  ~ 16자 허용할 광고 유닛 ID AppLovin MAX에서 전송되는 광고 시청 완료 콜백에 포함된 ad_unit_id를 검증하기 위해 사용됩니다. 이 설정에 등록된 광고 유닛 ID와 콜백에 포함된 ad_unit_id가 일치하는 경우에만 광고 시청이 정상적으로 완료된 것으로 간주하여 승인합니다. 이를 통해 허용되지 않은 광고 유닛으로부터의 알림이나 부정한 요청을 거부하고, 부정한 광고 보상 지급이나 스팸을 방지할 수 있습니다. eventKey string  ~ 128자 AppLovin Event Key AppLovin MAX로부터의 광고 시청 완료 콜백이 적절한 접근 경로에서 전송되었는지 검증할 때 사용합니다","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-AdReward Deploy/CDK 레퍼런스","url":"/ko/api_reference/ad_reward/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 버프 적용 결과에 기반하여 실행되는 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션이 포함됩니다. applyBuffScript ScriptSetting 버프를 적용할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - apply logSetting LogSetting 로그 출력 설정 버프 조작 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. API 요청·응답 로그를 수집하는 GS2-Log의 네임스페이스를 지정합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Buff::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null ApplyBuffScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/buff\" ) SampleStack := core . NewStack () buff . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , buff . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Buff\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Buff\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . buff . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . buff . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Buff . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Buff . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import buff from \"@/gs2cdk/buff\" ; class SampleStack extends core . Stack { public constructor () { super (); new buff . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , buff class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () buff . Namespace ( stack = self , name = 'namespace-0001' , options = buff . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentBuffMaster 현재 활성화된 버프 엔트리 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 버프 엔트리 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여, 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Buff 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentBuffMaster 갱신된 현재 활성화된 버프 엔트리 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Buff::CurrentBuffMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2024-04-15\" , \"buffEntryModels\": [ { \"name\": \"buff-0001\" , \"expression\": \"rate_add\" , \"targetType\": \"model\" , \"priority\": 1 , \"metadata\": \"BUFF_0001\" , \"targetModel\" : { \"targetModelName\": \"Gs2Experience:Status\" , \"targetFieldName\": \"rankCapValue\" , \"conditionGrns\": [ { \"targetModelName\": \"Gs2Experience:ExperienceModel\" , \"targetGrn\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" } , { \"targetModelName\": \"Gs2Experience:ExperienceModel\" , \"targetGrn\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\" } ], \"rate\": 1.0 } } , { \"name\": \"buff-0002\" , \"expression\": \"mul\" , \"targetType\": \"action\" , \"priority\": 2 , \"metadata\": \"BUFF_0002\" , \"targetAction\" : { \"targetActionName\": \"Gs2Experience:AddExperienceByUserId\" , \"targetFieldName\": \"experienceValue\" , \"conditionGrns\": [ { \"targetModelName\": \"Gs2Experience:ExperienceModel\" , \"targetGrn\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" } ], \"rate\": 2.0 } } , { \"name\": \"buff-0003\" , \"expression\": \"mul\" , \"targetType\": \"model\" , \"priority\": 3 , \"metadata\": \"BUFF_0003\" , \"targetModel\" : { \"targetModelName\": \"Gs2Experience:Status\" , \"targetFieldName\": \"rankCapValue\" , \"conditionGrns\": [ { \"targetModelName\": \"Gs2Experience:ExperienceModel\" , \"targetGrn\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" } ], \"rate\": 3.0 } } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/buff\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () buff . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , buff . NamespaceOptions {}, ). MasterData ( [] buff . BuffEntryModel { buff . NewBuffEntryModel ( \"buff-0001\" , buff . BuffEntryModelExpressionRateAdd , buff . BuffEntryModelTargetTypeModel , 1 , buff . BuffEntryModelOptions { Metadata : pointy . String ( \"BUFF_0001\" ), TargetModel : \u0026 buff . BuffTargetModel { TargetModelName : buff . BuffTargetModelTargetModelNameGs2ExperienceStatus , TargetFieldName : \"rankCapValue\" , ConditionGrns : [] buff . BuffTargetGrn { buff . NewBuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , buff . BuffTargetGrnOptions {}, ), buff . NewBuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\" , buff . BuffTargetGrnOptions {}, ), }, Rate : 1.0 , }, }, ), buff . NewBuffEntryModel ( \"buff-0002\" , buff . BuffEntryModelExpressionMul , buff . BuffEntryModelTargetTypeAction , 2 , buff . BuffEntryModelOptions { Metadata : pointy . String ( \"BUFF_0002\" ), TargetAction : \u0026 buff . BuffTargetAction { TargetActionName : buff . BuffTargetActionTargetActionNameGs2ExperienceAddExperienceByUserId , TargetFieldName : \"experienceValue\" , ConditionGrns : [] buff . BuffTargetGrn { buff . NewBuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , buff . BuffTargetGrnOptions {}, ), }, Rate : 2.0 , }, }, ), buff . NewBuffEntryModel ( \"buff-0003\" , buff . BuffEntryModelExpressionMul , buff . BuffEntryModelTargetTypeModel , 3 , buff . BuffEntryModelOptions { Metadata : pointy . String ( \"BUFF_0003\" ), TargetModel : \u0026 buff . BuffTargetModel { TargetModelName : buff . BuffTargetModelTargetModelNameGs2ExperienceStatus , TargetFieldName : \"rankCapValue\" , ConditionGrns : [] buff . BuffTargetGrn { buff . NewBuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , buff . BuffTargetGrnOptions {}, ), }, Rate : 3.0 , }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Buff\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Buff\\Model\\BuffEntryModel ( name : \"buff-0001\" , expression : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffEntryModelExpression :: RATE_ADD , targetType : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffEntryModelTargetType :: MODEL , priority : 1 , options : new \\Gs2Cdk\\Buff\\Model\\Options\\BuffEntryModelOptions ( metadata : \"BUFF_0001\" , targetModel : new \\Gs2Cdk\\Buff\\Model\\BuffTargetModel ( targetModelName : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffTargetModelTargetModelName :: GS2_EXPERIENCE_STATUS , targetFieldName : \"rankCapValue\" , conditionGrns : [ new \\Gs2Cdk\\Buff\\Model\\BuffTargetGrn ( targetModelName : \"Gs2Experience:ExperienceModel\" , targetGrn : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , ), new \\Gs2Cdk\\Buff\\Model\\BuffTargetGrn ( targetModelName : \"Gs2Experience:ExperienceModel\" , targetGrn : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\" , ), ], rate : 1.0 , ) ) ), new \\Gs2Cdk\\Buff\\Model\\BuffEntryModel ( name : \"buff-0002\" , expression : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffEntryModelExpression :: MUL , targetType : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffEntryModelTargetType :: ACTION , priority : 2 , options : new \\Gs2Cdk\\Buff\\Model\\Options\\BuffEntryModelOptions ( metadata : \"BUFF_0002\" , targetAction : new \\Gs2Cdk\\Buff\\Model\\BuffTargetAction ( targetActionName : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffTargetActionTargetActionName :: GS2_EXPERIENCE_ADD_EXPERIENCE_BY_USER_ID , targetFieldName : \"experienceValue\" , conditionGrns : [ new \\Gs2Cdk\\Buff\\Model\\BuffTargetGrn ( targetModelName : \"Gs2Experience:ExperienceModel\" , targetGrn : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , ), ], rate : 2.0 , ) ) ), new \\Gs2Cdk\\Buff\\Model\\BuffEntryModel ( name : \"buff-0003\" , expression : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffEntryModelExpression :: MUL , targetType : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffEntryModelTargetType :: MODEL , priority : 3 , options : new \\Gs2Cdk\\Buff\\Model\\Options\\BuffEntryModelOptions ( metadata : \"BUFF_0003\" , targetModel : new \\Gs2Cdk\\Buff\\Model\\BuffTargetModel ( targetModelName : \\Gs2Cdk\\Buff\\Model\\Enums\\BuffTargetModelTargetModelName :: GS2_EXPERIENCE_STATUS , targetFieldName : \"rankCapValue\" , conditionGrns : [ new \\Gs2Cdk\\Buff\\Model\\BuffTargetGrn ( targetModelName : \"Gs2Experience:ExperienceModel\" , targetGrn : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , ), ], rate : 3.0 , ) ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . buff . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . buff . model . BuffEntryModel ( \"buff-0001\" , io . gs2 . cdk . buff . model . enums . BuffEntryModelExpression . RATE_ADD , io . gs2 . cdk . buff . model . enums . BuffEntryModelTargetType . MODEL , 1 , new io . gs2 . cdk . buff . model . options . BuffEntryModelOptions () . withMetadata ( \"BUFF_0001\" ) . withTargetModel ( new io . gs2 . cdk . buff . model . BuffTargetModel ( io . gs2 . cdk . buff . model . enums . BuffTargetModelTargetModelName . GS2_EXPERIENCE_STATUS , \"rankCapValue\" , Arrays . asList ( new io . gs2 . cdk . buff . model . BuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ), new io . gs2 . cdk . buff . model . BuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\" ) ), 1 . 0f )) ), new io . gs2 . cdk . buff . model . BuffEntryModel ( \"buff-0002\" , io . gs2 . cdk . buff . model . enums . BuffEntryModelExpression . MUL , io . gs2 . cdk . buff . model . enums . BuffEntryModelTargetType . ACTION , 2 , new io . gs2 . cdk . buff . model . options . BuffEntryModelOptions () . withMetadata ( \"BUFF_0002\" ) . withTargetAction ( new io . gs2 . cdk . buff . model . BuffTargetAction ( io . gs2 . cdk . buff . model . enums . BuffTargetActionTargetActionName . GS2_EXPERIENCE_ADD_EXPERIENCE_BY_USER_ID , \"experienceValue\" , Arrays . asList ( new io . gs2 . cdk . buff . model . BuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) ), 2 . 0f )) ), new io . gs2 . cdk . buff . model . BuffEntryModel ( \"buff-0003\" , io . gs2 . cdk . buff . model . enums . BuffEntryModelExpression . MUL , io . gs2 . cdk . buff . model . enums . BuffEntryModelTargetType . MODEL , 3 , new io . gs2 . cdk . buff . model . options . BuffEntryModelOptions () . withMetadata ( \"BUFF_0003\" ) . withTargetModel ( new io . gs2 . cdk . buff . model . BuffTargetModel ( io . gs2 . cdk . buff . model . enums . BuffTargetModelTargetModelName . GS2_EXPERIENCE_STATUS , \"rankCapValue\" , Arrays . asList ( new io . gs2 . cdk . buff . model . BuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) ), 3 . 0f )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Buff . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Buff . Model . BuffEntryModel [] { new Gs2Cdk . Gs2Buff . Model . BuffEntryModel ( name : \"buff-0001\" , expression : Gs2Cdk . Gs2Buff . Model . Enums . BuffEntryModelExpression . RateAdd , targetType : Gs2Cdk . Gs2Buff . Model . Enums . BuffEntryModelTargetType . Model , priority : 1 , options : new Gs2Cdk . Gs2Buff . Model . Options . BuffEntryModelOptions { metadata = \"BUFF_0001\" , targetModel = new Gs2Cdk . Gs2Buff . Model . BuffTargetModel ( targetModelName : Gs2Cdk . Gs2Buff . Model . Enums . BuffTargetModelTargetModelName . Gs2ExperienceStatus , targetFieldName : \"rankCapValue\" , conditionGrns : new Gs2Cdk . Gs2Buff . Model . BuffTargetGrn [] { new Gs2Cdk . Gs2Buff . Model . BuffTargetGrn ( targetModelName : \"Gs2Experience:ExperienceModel\" , targetGrn : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ), new Gs2Cdk . Gs2Buff . Model . BuffTargetGrn ( targetModelName : \"Gs2Experience:ExperienceModel\" , targetGrn : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\" ) }, rate : 1.0f ) } ), new Gs2Cdk . Gs2Buff . Model . BuffEntryModel ( name : \"buff-0002\" , expression : Gs2Cdk . Gs2Buff . Model . Enums . BuffEntryModelExpression . Mul , targetType : Gs2Cdk . Gs2Buff . Model . Enums . BuffEntryModelTargetType . Action , priority : 2 , options : new Gs2Cdk . Gs2Buff . Model . Options . BuffEntryModelOptions { metadata = \"BUFF_0002\" , targetAction = new Gs2Cdk . Gs2Buff . Model . BuffTargetAction ( targetActionName : Gs2Cdk . Gs2Buff . Model . Enums . BuffTargetActionTargetActionName . Gs2ExperienceAddExperienceByUserId , targetFieldName : \"experienceValue\" , conditionGrns : new Gs2Cdk . Gs2Buff . Model . BuffTargetGrn [] { new Gs2Cdk . Gs2Buff . Model . BuffTargetGrn ( targetModelName : \"Gs2Experience:ExperienceModel\" , targetGrn : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) }, rate : 2.0f ) } ), new Gs2Cdk . Gs2Buff . Model . BuffEntryModel ( name : \"buff-0003\" , expression : Gs2Cdk . Gs2Buff . Model . Enums . BuffEntryModelExpression . Mul , targetType : Gs2Cdk . Gs2Buff . Model . Enums . BuffEntryModelTargetType . Model , priority : 3 , options : new Gs2Cdk . Gs2Buff . Model . Options . BuffEntryModelOptions { metadata = \"BUFF_0003\" , targetModel = new Gs2Cdk . Gs2Buff . Model . BuffTargetModel ( targetModelName : Gs2Cdk . Gs2Buff . Model . Enums . BuffTargetModelTargetModelName . Gs2ExperienceStatus , targetFieldName : \"rankCapValue\" , conditionGrns : new Gs2Cdk . Gs2Buff . Model . BuffTargetGrn [] { new Gs2Cdk . Gs2Buff . Model . BuffTargetGrn ( targetModelName : \"Gs2Experience:ExperienceModel\" , targetGrn : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ) }, rate : 3.0f ) } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import buff from \"@/gs2cdk/buff\" ; class SampleStack extends core . Stack { public constructor () { super (); new buff . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new buff . model . BuffEntryModel ( \"buff-0001\" , buff . model . BuffEntryModelExpression . RATE_ADD , buff . model . BuffEntryModelTargetType . MODEL , 1 , { metadata : \"BUFF_0001\" , targetModel : new buff . model . BuffTargetModel ( buff . model . BuffTargetModelTargetModelName . GS2_EXPERIENCE_STATUS , \"rankCapValue\" , [ new buff . model . BuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ), new buff . model . BuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002\" ), ], 1.0 ) } ), new buff . model . BuffEntryModel ( \"buff-0002\" , buff . model . BuffEntryModelExpression . MUL , buff . model . BuffEntryModelTargetType . ACTION , 2 , { metadata : \"BUFF_0002\" , targetAction : new buff . model . BuffTargetAction ( buff . model . BuffTargetActionTargetActionName . GS2_EXPERIENCE_ADD_EXPERIENCE_BY_USER_ID , \"experienceValue\" , [ new buff . model . BuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ), ], 2.0 ) } ), new buff . model . BuffEntryModel ( \"buff-0003\" , buff . model . BuffEntryModelExpression . MUL , buff . model . BuffEntryModelTargetType . MODEL , 3 , { metadata : \"BUFF_0003\" , targetModel : new buff . model . BuffTargetModel ( buff . model . BuffTargetModelTargetModelName . GS2_EXPERIENCE_STATUS , \"rankCapValue\" , [ new buff . model . BuffTargetGrn ( \"Gs2Experience:ExperienceModel\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" ), ], 3.0 ) } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , buff class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () buff . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( buff_entry_models = [ buff . BuffEntryModel ( name = 'buff-0001' , expression = buff . BuffEntryModelExpression . RATE_ADD , target_type = buff . BuffEntryModelTargetType . MODEL , priority = 1 , options = buff . BuffEntryModelOptions ( metadata = 'BUFF_0001' , target_model = buff . BuffTargetModel ( target_model_name = buff . BuffTargetModelTargetModelName . GS2_EXPERIENCE_STATUS , target_field_name = 'rankCapValue' , condition_grns = [ buff . BuffTargetGrn ( target_model_name = 'Gs2Experience:ExperienceModel' , target_grn = 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001' , ), buff . BuffTargetGrn ( target_model_name = 'Gs2Experience:ExperienceModel' , target_grn = 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0002' , ), ], rate = 1.0 , ) ), ), buff . BuffEntryModel ( name = 'buff-0002' , expression = buff . BuffEntryModelExpression . MUL , target_type = buff . BuffEntryModelTargetType . ACTION , priority = 2 , options = buff . BuffEntryModelOptions ( metadata = 'BUFF_0002' , target_action = buff . BuffTargetAction ( target_action_name = buff . BuffTargetActionTargetActionName . GS2_EXPERIENCE_ADD_EXPERIENCE_BY_USER_ID , target_field_name = 'experienceValue' , condition_grns = [ buff . BuffTargetGrn ( target_model_name = 'Gs2Experience:ExperienceModel' , target_grn = 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001' , ), ], rate = 2.0 , ) ), ), buff . BuffEntryModel ( name = 'buff-0003' , expression = buff . BuffEntryModelExpression . MUL , target_type = buff . BuffEntryModelTargetType . MODEL , priority = 3 , options = buff . BuffEntryModelOptions ( metadata = 'BUFF_0003' , target_model = buff . BuffTargetModel ( target_model_name = buff . BuffTargetModelTargetModelName . GS2_EXPERIENCE_STATUS , target_field_name = 'rankCapValue' , condition_grns = [ buff . BuffTargetGrn ( target_model_name = 'Gs2Experience:ExperienceModel' , target_grn = 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001' , ), ], rate = 3.0 , ) ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template BuffEntryModel 버프 엔트리 모델 버프의 적용량은 버프 엔트리 모델로 관리하며, 동일한 대상에 대해 여러 버프 엔트리 모델을 연결할 수 있습니다. 버프 엔트리 모델의 적용 순서는 버프 엔트리 모델의 priority 로 관리하며, priority 값이 작을수록 우선순위가 높아집니다. 버프의 적용 방식은 3종류가 있으며 “Rate Add”, “Mul”, “Value Add\"가 있습니다. Rate Add 는 버프의 적용 레이트에 가산하는 명령이며, Mul 은 버프의 적용 레이트에 곱하는 명령입니다. Value Add 는 버프 보정 계산 후의 값에 가산을 수행하는 명령입니다. 예를 들어 기본 레이트가 1.0 이고 Rate Add 0.2 를 설정하면 버프 적용 레이트는 1.2 가 됩니다. Mul 0.5 를 설정하면 버프 적용 레이트는 현재 레이트의 0.5배가 됩니다. 버프 엔트리 모델에는 GS2-Schedule 의 이벤트를 연결할 수 있으며, 이벤트 개최 기간 중에만 버프를 적용하도록 설정하는 것도 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 buffEntryModelId string ※ ~ 1024자 버프 엔트리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. expression 문자열 열거형 enum {   “rate_add”,   “mul”,   “value_add” }  버프의 적용 타입 버프 값을 대상에 어떻게 적용할지를 지정합니다. “Rate Add\"는 보정 레이트에 가산(예: 1.0 + 0.2 = 1.2), “Mul\"은 보정 레이트에 곱함(예: 레이트 * 0.5), “Value Add\"는 레이트 기반 보정 계산 후의 값에 직접 가산합니다. 정의 설명 rate_add 보정 레이트에 가산 mul 보정 레이트에 곱함 value_add 값을 직접 가산(모델이나 액션의 숫자 값만) targetType 문자열 열거형 enum {   “model”,   “action” }  버프를 적용할 대상의 종류 버프를 모델의 필드 값에 적용할지, 액션의 파라미터에 적용할지를 지정합니다. “Model\"은 GS2 리소스 모델의 필드를 대상으로 하며, “Action\"은 GS2 액션(예: 획득량이나 소비량)의 파라미터를 대상으로 합니다. 정의 설명 model 모델 action 액션 targetModel BuffTargetModel {targetType} == “model” ※ 버프를 적용할 대상 모델 버프를 적용할 GS2 리소스 모델과 필드를 지정합니다. 모델 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “model” 이면 필수 targetAction BuffTargetAction {targetType} == “action” ※ 버프를 적용할 대상 액션 버프를 적용할 GS2 액션과 파라미터를 지정합니다. 액션 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “action” 이면 필수 priority int  0 ~ 2147483646 버프의 적용 우선순위 버프 엔트리 모델이 평가되는 순서를 결정합니다. 값이 작을수록 먼저 평가됩니다. 동일한 필드를 대상으로 하는 여러 버프가 있는 경우, Rate Add 와 Mul 연산의 상호작용으로 인해 적용 순서가 최종 결과에 영향을 미칩니다. applyPeriodScheduleEventId string ~ 1024자 버프를 적용할 이벤트의 개최 기간 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버프의 유효 기간을 제어하는 GS2-Schedule 이벤트의 GRN입니다. 지정한 경우, 이벤트 개최 기간 중에만 버프가 적용됩니다. 지정하지 않은 경우, 버프는 항상 유효합니다. BuffTargetModel 버프 적용 대상 모델 버프 적용의 대상이 되는 GS2 리소스 모델과 필드를 정의합니다. 어떤 모델의 어떤 필드 값을 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetModelName 문자열 열거형 enum { }  버프를 적용할 모델의 종류 targetFieldName string  ~ 64자 버프 적용 대상 필드명 버프에 의해 값이 변경되는 대상 모델 상의 수치 필드명입니다. 예를 들어 경험치나 공격력 등의 수치 속성을 나타내는 필드가 대상이 됩니다. conditionGrns List  1 ~ 10 items 버프 적용 조건 GRN 목록 버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다. rate float  0 ~ 1000000 보정 레이트 적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add\"의 경우 기본 레이트에 가산, “Mul\"의 경우 현재 레이트에 곱셈, “Value Add\"의 경우 레이트 계산 후의 필드 값에 직접 가산됩니다. BuffTargetAction 버프 적용 대상 액션 버프 적용의 대상이 되는 GS2 액션과 파라미터를 정의합니다. 어떤 액션의 어떤 파라미터를 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetActionName 문자열 열거형 enum { \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SubExperience\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:ConsumeItemSet\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeSimpleItems\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:ConsumeBigItem\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2Limit:CountUp\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:Withdraw\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Money2:Withdraw\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Stamina:ConsumeStamina\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , }  버프를 적용할 액션의 종류 targetFieldName string  ~ 64자 버프 적용 대상 필드명 버프에 의해 값이 변경되는 대상 액션 상의 수치 파라미터명입니다. 예를 들어 입수 수량, 소비량, 보상 수량 등을 나타내는 파라미터가 대상이 됩니다. conditionGrns List  1 ~ 10 items 버프 적용 조건 GRN 목록 버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다. rate float  0 ~ 1000000 보정 레이트 적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add\"의 경우 기본 레이트에 가산, “Mul\"의 경우 현재 레이트에 곱셈, “Value Add\"의 경우 레이트 계산 후의 파라미터 값에 직접 가산됩니다. BuffTargetGrn 버프 적용 조건이 되는 리소스의 GRN 패턴 버프가 유효해지는 리소스 인스턴스를 좁히기 위한 조건 GRN 패턴입니다. targetModelName 으로 GS2 서비스 모델의 종류를 특정하며, targetGrn 에는 런타임에 해결되는 컨텍스트 변수({region}, {ownerId})를 포함할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetModelName string  ~ 64자 버프 적용 조건의 모델 이름 조건 GRN을 해결하기 위해 사용되는 GS2 서비스 모델의 이름입니다. GRN 패턴이 어느 서비스의 리소스 모델을 참조하는지를 특정합니다. targetGrn string  ~ 1024자 버프의 적용 조건 GRN 런타임에 해결되는 컨텍스트 플레이스홀더(예: {region}, {ownerId})를 포함한 GRN 템플릿입니다. 버프의 대상이 되는 특정 리소스 인스턴스를 특정하기 위해 사용됩니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Buff Deploy/CDK 레퍼런스","url":"/ko/api_reference/buff/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 채팅 서비스 내에서 트랜잭션 처리 방법을 제어하기 위한 설정입니다. allowCreateRoom bool true 게임 플레이어에 의한 룸 생성을 허용할지 여부 게임 운영 측이 미리 룸을 생성해 두고 게임 플레이어는 그 룸을 구독하는 형식인 경우에는 “false\"를 지정합니다. 반대로, 게임 플레이어가 자유롭게 룸을 생성하여 다른 플레이어를 초대해 플레이하는 형식인 경우에는 “true\"를 지정합니다. messageLifeTimeDays int 1 1 ~ 30 메시지 보관 기간(일수) 룸 내의 메시지를 보관하는 일수입니다. postMessageScript ScriptSetting 메시지를 게시했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - postMessage createRoomScript ScriptSetting 룸을 생성했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - createRoom deleteRoomScript ScriptSetting 룸을 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteRoom subscribeRoomScript ScriptSetting 룸을 구독했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - subscribeRoom unsubscribeRoomScript ScriptSetting 룸 구독을 해제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - unsubscribeRoom postNotification NotificationSetting  구독 중인 룸에 새 게시물이 등록되었을 때의 푸시 알림 구독 중인 룸에 새로운 메시지가 게시되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 이 설정이 없으면, 클라이언트는 새로운 메시지를 감지하기 위해 룸을 폴링해야 합니다. logSetting LogSetting 로그 출력 설정 로그 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 GS2-Log의 네임스페이스 정보를 보유합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Chat::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null AllowCreateRoom : null MessageLifeTimeDays : null PostMessageScript : null CreateRoomScript : null DeleteRoomScript : null SubscribeRoomScript : null UnsubscribeRoomScript : null PostNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/chat\" ) SampleStack := core . NewStack () chat . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , chat . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Chat\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Chat\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . chat . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . chat . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Chat . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Chat . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import chat from \"@/gs2cdk/chat\" ; class SampleStack extends core . Stack { public constructor () { super (); new chat . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , chat class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () chat . Namespace ( stack = self , name = 'namespace-0001' , options = chat . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentModelMaster 현재 활성화된 메시지 카테고리 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 메시지 카테고리 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한, 게임 운영에 더 적합한 도구를 제작하여 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Chat 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentModelMaster 갱신된 현재 활성화된 메시지 카테고리 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Chat::CurrentModelMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2020-04-30\" , \"categoryModels\": [ { \"category\": 0 , \"rejectAccessTokenPost\": \"Disabled\" } , { \"category\": 1 , \"rejectAccessTokenPost\": \"Disabled\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/chat\" ) SampleStack := core . NewStack () chat . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , chat . NamespaceOptions {}, ). MasterData ( [] chat . CategoryModel { chat . NewCategoryModel ( 0 , chat . CategoryModelOptions { RejectAccessTokenPost : chat . CategoryModelRejectAccessTokenPostDisabled . Pointer (), }, ), chat . NewCategoryModel ( 1 , chat . CategoryModelOptions { RejectAccessTokenPost : chat . CategoryModelRejectAccessTokenPostDisabled . Pointer (), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Chat\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Chat\\Model\\CategoryModel ( category : 0 , options : new \\Gs2Cdk\\Chat\\Model\\Options\\CategoryModelOptions ( rejectAccessTokenPost : \\Gs2Cdk\\Chat\\Model\\Enums\\CategoryModelRejectAccessTokenPost :: DISABLED ) ), new \\Gs2Cdk\\Chat\\Model\\CategoryModel ( category : 1 , options : new \\Gs2Cdk\\Chat\\Model\\Options\\CategoryModelOptions ( rejectAccessTokenPost : \\Gs2Cdk\\Chat\\Model\\Enums\\CategoryModelRejectAccessTokenPost :: DISABLED ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . chat . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . chat . model . CategoryModel ( 0 , new io . gs2 . cdk . chat . model . options . CategoryModelOptions () . withRejectAccessTokenPost ( io . gs2 . cdk . chat . model . enums . CategoryModelRejectAccessTokenPost . DISABLED ) ), new io . gs2 . cdk . chat . model . CategoryModel ( 1 , new io . gs2 . cdk . chat . model . options . CategoryModelOptions () . withRejectAccessTokenPost ( io . gs2 . cdk . chat . model . enums . CategoryModelRejectAccessTokenPost . DISABLED ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Chat . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Chat . Model . CategoryModel [] { new Gs2Cdk . Gs2Chat . Model . CategoryModel ( category : 0 , options : new Gs2Cdk . Gs2Chat . Model . Options . CategoryModelOptions { rejectAccessTokenPost = Gs2Cdk . Gs2Chat . Model . Enums . CategoryModelRejectAccessTokenPost . Disabled } ), new Gs2Cdk . Gs2Chat . Model . CategoryModel ( category : 1 , options : new Gs2Cdk . Gs2Chat . Model . Options . CategoryModelOptions { rejectAccessTokenPost = Gs2Cdk . Gs2Chat . Model . Enums . CategoryModelRejectAccessTokenPost . Disabled } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import chat from \"@/gs2cdk/chat\" ; class SampleStack extends core . Stack { public constructor () { super (); new chat . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new chat . model . CategoryModel ( 0 , { rejectAccessTokenPost : chat.model.CategoryModelRejectAccessTokenPost.DISABLED } ), new chat . model . CategoryModel ( 1 , { rejectAccessTokenPost : chat.model.CategoryModelRejectAccessTokenPost.DISABLED } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , chat class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () chat . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( category_models = [ chat . CategoryModel ( category = 0 , options = chat . CategoryModelOptions ( reject_access_token_post = chat . CategoryModelRejectAccessTokenPost . DISABLED ), ), chat . CategoryModel ( category = 1 , options = chat . CategoryModelOptions ( reject_access_token_post = chat . CategoryModelRejectAccessTokenPost . DISABLED ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template CategoryModel 메시지 카테고리 모델 메시지 카테고리 모델은 채팅 룸에 게시되는 메시지를 분류하기 위한 카테고리를 정의합니다. 각 카테고리는 숫자로 식별되며, 카테고리별로 플레이어의 액세스 토큰을 사용한 게시를 허용할지 거부할지 설정할 수 있습니다. 이를 통해 서버만 게시할 수 있는 시스템 안내 카테고리 등의 사용 사례를 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 메시지 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. rejectAccessTokenPost 문자열 열거형 enum {   “Enabled”,   “Disabled” } 플레이어의 액세스 토큰을 이용한 게시를 거부한다 활성화하면, 이 카테고리에서는 서버 사이드 API 호출(사용자 ID 지정)만으로 메시지를 게시할 수 있습니다. 플레이어가 직접 게시해서는 안 되는 시스템 안내나 서버 생성 메시지에 유용합니다. 정의 설명 Enabled 액세스 토큰을 이용한 게시를 거부한다 Disabled 액세스 토큰을 이용한 게시를 허용한다","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Chat Deploy/CDK 레퍼런스","url":"/ko/api_reference/chat/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 데이터스토어 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. logSetting LogSetting 로그의 출력 설정 데이터스토어 조작의 로그 데이터를 GS2-Log 로 출력하기 위한 설정입니다. GS2-Log 의 네임스페이스를 지정하면 데이터 오브젝트의 업로드·다운로드·접근 권한 변경 등의 API 요청·응답 로그를 수집할 수 있습니다. doneUploadScript ScriptSetting 업로드 완료 보고 시 실행할 스크립트의 설정 Script 트리거 레퍼런스 - doneUpload GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Datastore::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 DoneUploadScript : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/datastore\" ) SampleStack := core . NewStack () datastore . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , datastore . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Datastore\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Datastore\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . datastore . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . datastore . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Datastore . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Datastore . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import datastore from \"@/gs2cdk/datastore\" ; class SampleStack extends core . Stack { public constructor () { super (); new datastore . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , datastore class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () datastore . Namespace ( stack = self , name = 'namespace-0001' , options = datastore . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그의 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log 의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청·응답 로그 데이터가 대상 GS2-Log 로 출력됩니다. GS2-Log 에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Datastore Deploy/CDK 레퍼런스","url":"/ko/api_reference/datastore/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 도감 엔트리 등록 처리 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. entryScript ScriptSetting 엔트리 등록 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - entry duplicateEntryScript string ~ 1024자 이미 등록된 엔트리를 다시 등록하려고 할 때 실행할 스크립트 GRN Script 트리거 레퍼런스 - duplicateEntry logSetting LogSetting 로그 출력 설정 도감 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 엔트리 등록, 즐겨찾기 조작 등 도감 관련 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Dictionary::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null EntryScript : null DuplicateEntryScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/dictionary\" ) SampleStack := core . NewStack () dictionary . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , dictionary . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Dictionary\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Dictionary\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . dictionary . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . dictionary . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Dictionary . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Dictionary . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import dictionary from \"@/gs2cdk/dictionary\" ; class SampleStack extends core . Stack { public constructor () { super (); new dictionary . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , dictionary class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () dictionary . Namespace ( stack = self , name = 'namespace-0001' , options = dictionary . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·경합 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue에 의한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그의 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log 의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청·응답 로그 데이터가 대상 GS2-Log 로 출력됩니다. GS2-Log 에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentEntryMaster 현재 활성화된 엔트리 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 엔트리 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한, 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Dictionary 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentEntryMaster 업데이트된 현재 활성화된 엔트리 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Dictionary::CurrentEntryMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2020-04-30\" , \"entryModels\": [ { \"name\": \"monster-0001\" , \"metadata\": \"MONSTER-0001\" } , { \"name\": \"monster-0002\" , \"metadata\": \"MONSTER-0002\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/dictionary\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () dictionary . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , dictionary . NamespaceOptions {}, ). MasterData ( [] dictionary . EntryModel { dictionary . NewEntryModel ( \"monster-0001\" , dictionary . EntryModelOptions { Metadata : pointy . String ( \"MONSTER-0001\" ), }, ), dictionary . NewEntryModel ( \"monster-0002\" , dictionary . EntryModelOptions { Metadata : pointy . String ( \"MONSTER-0002\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Dictionary\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Dictionary\\Model\\EntryModel ( name : \"monster-0001\" , options : new \\Gs2Cdk\\Dictionary\\Model\\Options\\EntryModelOptions ( metadata : \"MONSTER-0001\" ) ), new \\Gs2Cdk\\Dictionary\\Model\\EntryModel ( name : \"monster-0002\" , options : new \\Gs2Cdk\\Dictionary\\Model\\Options\\EntryModelOptions ( metadata : \"MONSTER-0002\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . dictionary . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . dictionary . model . EntryModel ( \"monster-0001\" , new io . gs2 . cdk . dictionary . model . options . EntryModelOptions () . withMetadata ( \"MONSTER-0001\" ) ), new io . gs2 . cdk . dictionary . model . EntryModel ( \"monster-0002\" , new io . gs2 . cdk . dictionary . model . options . EntryModelOptions () . withMetadata ( \"MONSTER-0002\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Dictionary . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Dictionary . Model . EntryModel [] { new Gs2Cdk . Gs2Dictionary . Model . EntryModel ( name : \"monster-0001\" , options : new Gs2Cdk . Gs2Dictionary . Model . Options . EntryModelOptions { metadata = \"MONSTER-0001\" } ), new Gs2Cdk . Gs2Dictionary . Model . EntryModel ( name : \"monster-0002\" , options : new Gs2Cdk . Gs2Dictionary . Model . Options . EntryModelOptions { metadata = \"MONSTER-0002\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import dictionary from \"@/gs2cdk/dictionary\" ; class SampleStack extends core . Stack { public constructor () { super (); new dictionary . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new dictionary . model . EntryModel ( \"monster-0001\" , { metadata : \"MONSTER-0001\" } ), new dictionary . model . EntryModel ( \"monster-0002\" , { metadata : \"MONSTER-0002\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , dictionary class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () dictionary . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( entry_models = [ dictionary . EntryModel ( name = 'monster-0001' , options = dictionary . EntryModelOptions ( metadata = 'MONSTER-0001' ), ), dictionary . EntryModel ( name = 'monster-0002' , options = dictionary . EntryModelOptions ( metadata = 'MONSTER-0002' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template EntryModel 엔트리 모델 엔트리 모델은 GS2-Dictionary에서 도감에 기록 가능한 대상을 정의하는 마스터 데이터입니다. 각 엔트리 모델은 몬스터, 아이템, 아바타 파츠 등 도감에 기록되는 엔티티의 종류를 나타냅니다. 엔트리의 보유 상태는 ‘기록됨 / 미기록’의 2가지 값으로 관리되며, 동일한 엔트리 모델에 대해 수량이나 스택의 개념은 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 entryModelId string ※ ~ 1024자 엔트리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 엔트리 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Dictionary Deploy/CDK 레퍼런스","url":"/ko/api_reference/dictionary/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 리소스 배포 처리 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. assumeUserId string ~ 1024자 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN autoRunStampSheetNotification NotificationSetting  트랜잭션 자동 실행이 완료되었을 때의 푸시 알림(구 사양) 트랜잭션이 서버사이드에서 자동 실행 완료되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 이는 구 사양이며, 신 사양에서는 autoRunTransactionNotification을 사용하세요. autoRunTransactionNotification NotificationSetting  트랜잭션 자동 실행이 완료되었을 때의 푸시 알림 분산 트랜잭션이 서버사이드에서 자동 실행 완료되었을 때 GS2-Gateway를 통해 푸시 알림을 전송하기 위한 설정입니다. 트랜잭션 결과를 클라이언트에 통지하여 로컬 상태를 적절히 갱신할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 디스트리뷰터 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 리소스 배포·입수 액션 실행·트랜잭션 처리의 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Distributor::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null AssumeUserId : grn:gs2::YourOwnerId:identifier:user:user-0001 AutoRunStampSheetNotification : null AutoRunTransactionNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/distributor\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () distributor . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , distributor . NamespaceOptions { AssumeUserId : pointy . String ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Distributor\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Distributor\\Model\\Options\\NamespaceOptions ( assumeUserId : \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . distributor . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . distributor . model . options . NamespaceOptions () . withAssumeUserId ( \"grn:gs2::YourOwnerId:identifier:user:user-0001\" ) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Distributor . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Distributor . Model . Options . NamespaceOptions { assumeUserId = \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import distributor from \"@/gs2cdk/distributor\" ; class SampleStack extends core . Stack { public constructor () { super (); new distributor . model . Namespace ( this , \"namespace-0001\" , { assumeUserId : \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , distributor class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () distributor . Namespace ( stack = self , name = 'namespace-0001' , options = distributor . NamespaceOptions ( assume_user_id = 'grn:gs2::YourOwnerId:identifier:user:user-0001' , log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그의 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log 의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청·응답 로그 데이터가 대상 GS2-Log 로 출력됩니다. GS2-Log 에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentDistributorMaster 현재 활성화된 배포 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 배포 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 작성함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Distributor 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentDistributorMaster 업데이트된 현재 활성화된 배포 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Distributor::CurrentDistributorMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-03-01\" , \"distributorModels\": [ { \"name\": \"basic\" , \"metadata\": \"BASIC\" , \"inboxNamespaceId\": \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" } , { \"name\": \"special\" , \"metadata\": \"SPECIAL\" , \"inboxNamespaceId\": \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" , \"whiteListTargetIds\": [ \"test\" ] } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/distributor\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () distributor . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , distributor . NamespaceOptions {}, ). MasterData ( [] distributor . DistributorModel { distributor . NewDistributorModel ( \"basic\" , distributor . DistributorModelOptions { Metadata : pointy . String ( \"BASIC\" ), InboxNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" ), }, ), distributor . NewDistributorModel ( \"special\" , distributor . DistributorModelOptions { Metadata : pointy . String ( \"SPECIAL\" ), InboxNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" ), WhiteListTargetIds : [] string { \"test\" , }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Distributor\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Distributor\\Model\\DistributorModel ( name : \"basic\" , options : new \\Gs2Cdk\\Distributor\\Model\\Options\\DistributorModelOptions ( metadata : \"BASIC\" , inboxNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" ) ), new \\Gs2Cdk\\Distributor\\Model\\DistributorModel ( name : \"special\" , options : new \\Gs2Cdk\\Distributor\\Model\\Options\\DistributorModelOptions ( metadata : \"SPECIAL\" , inboxNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" , whiteListTargetIds : [ \"test\" , ] ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . distributor . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . distributor . model . DistributorModel ( \"basic\" , new io . gs2 . cdk . distributor . model . options . DistributorModelOptions () . withMetadata ( \"BASIC\" ) . withInboxNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" ) ), new io . gs2 . cdk . distributor . model . DistributorModel ( \"special\" , new io . gs2 . cdk . distributor . model . options . DistributorModelOptions () . withMetadata ( \"SPECIAL\" ) . withInboxNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" ) . withWhiteListTargetIds ( Arrays . asList ( \"test\" )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Distributor . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Distributor . Model . DistributorModel [] { new Gs2Cdk . Gs2Distributor . Model . DistributorModel ( name : \"basic\" , options : new Gs2Cdk . Gs2Distributor . Model . Options . DistributorModelOptions { metadata = \"BASIC\" , inboxNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" } ), new Gs2Cdk . Gs2Distributor . Model . DistributorModel ( name : \"special\" , options : new Gs2Cdk . Gs2Distributor . Model . Options . DistributorModelOptions { metadata = \"SPECIAL\" , inboxNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" , whiteListTargetIds = new string [] { \"test\" } } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import distributor from \"@/gs2cdk/distributor\" ; class SampleStack extends core . Stack { public constructor () { super (); new distributor . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new distributor . model . DistributorModel ( \"basic\" , { metadata : \"BASIC\" , inboxNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" } ), new distributor . model . DistributorModel ( \"special\" , { metadata : \"SPECIAL\" , inboxNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001\" , whiteListTargetIds : [ \"test\" , ] } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , distributor class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () distributor . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( distributor_models = [ distributor . DistributorModel ( name = 'basic' , options = distributor . DistributorModelOptions ( metadata = 'BASIC' , inbox_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001' ), ), distributor . DistributorModel ( name = 'special' , options = distributor . DistributorModelOptions ( metadata = 'SPECIAL' , inbox_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:inbox:inbox-0001' , white_list_target_ids = [ 'test' , ] ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template DistributorModel 배포 모델 배포 모델이란 리소스 입수 시 소지 한도를 초과하여 입수했을 때의 정책을 설정하는 엔티티입니다. GS2-Distributor를 통해 입수 처리를 수행함으로써, 넘친 리소스를 GS2-Inbox의 메시지로 전송할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 distributorModelId string ※ ~ 1024자 배포 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. inboxNamespaceId string ~ 1024자 넘친 리소스를 전송할 GS2-Inbox 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 리소스 입수가 플레이어의 소지 한도를 초과한 경우, 넘친 리소스는 지정된 GS2-Inbox 네임스페이스에 메시지로 전송됩니다. 플레이어는 이후 수신함에서 리소스를 수령할 수 있습니다. whiteListTargetIds List [] 0 ~ 1000 items GS2-Distributor를 통해 처리할 수 있는 대상 리소스 GRN의 화이트리스트 이 배포 모델을 사용하여 입수 처리를 수행할 수 있는 대상 리소스의 GRN 프리픽스를 지정합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Distributor Deploy/CDK 레퍼런스","url":"/ko/api_reference/distributor/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 인챈트 파라미터 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 인챈트 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 밸런스 파라미터 및 레어리티 파라미터 조작의 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Enchant::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/enchant\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () enchant . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , enchant . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Enchant\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . enchant . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . enchant . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Enchant . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import enchant from \"@/gs2cdk/enchant\" ; class SampleStack extends core . Stack { public constructor () { super (); new enchant . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , enchant class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () enchant . Namespace ( stack = self , name = 'namespace-0001' , options = enchant . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentParameterMaster 현재 활성화된 파라미터 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 파라미터 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한, 게임 운영에 더 적합한 도구를 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Enchant 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentParameterMaster 업데이트된 현재 유효한 파라미터 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Enchant::CurrentParameterMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2023-07-18\" , \"balanceParameterModels\": [ { \"name\": \"balance-0001\" , \"totalValue\": 100 , \"initialValueStrategy\": \"average\" , \"parameters\": [ { \"name\": \"parameter-0001\" , \"metadata\": \"PARAMETER_0001\" } , { \"name\": \"parameter-0002\" , \"metadata\": \"PARAMETER_0002\" } , { \"name\": \"parameter-0003\" , \"metadata\": \"PARAMETER_0003\" } ], \"metadata\": \"BALANCE_0001\" } , { \"name\": \"balance-0002\" , \"totalValue\": 200 , \"initialValueStrategy\": \"lottery\" , \"parameters\": [ { \"name\": \"parameter-0001\" , \"metadata\": \"PARAMETER_0001\" } , { \"name\": \"parameter-0002\" , \"metadata\": \"PARAMETER_0002\" } , { \"name\": \"parameter-0003\" , \"metadata\": \"PARAMETER_0003\" } , { \"name\": \"parameter-0004\" , \"metadata\": \"PARAMETER_0004\" } ], \"metadata\": \"BALANCE_0002\" } , { \"name\": \"balance-0003\" , \"totalValue\": 500 , \"initialValueStrategy\": \"average\" , \"parameters\": [ { \"name\": \"parameter-0001\" , \"metadata\": \"PARAMETER_0001\" } , { \"name\": \"parameter-0002\" , \"metadata\": \"PARAMETER_0002\" } ], \"metadata\": \"BALANCE_0003\" } ], \"rarityParameterModels\": [ { \"name\": \"rarity-0001\" , \"maximumParameterCount\": 5 , \"parameterCounts\": [ { \"count\": 0 , \"weight\": 1 } , { \"count\": 1 , \"weight\": 2 } , { \"count\": 2 , \"weight\": 3 } ], \"parameters\": [ { \"name\": \"parameter-0001\" , \"metadata\": \"PARAMETER_0001\" , \"resourceName\": \"resource-0001\" , \"resourceValue\": 10 , \"weight\": 1 } , { \"name\": \"parameter-0002\" , \"metadata\": \"PARAMETER_0002\" , \"resourceName\": \"resource-0002\" , \"resourceValue\": 20 , \"weight\": 2 } , { \"name\": \"parameter-0003\" , \"metadata\": \"PARAMETER_0003\" , \"resourceName\": \"resource-0003\" , \"resourceValue\": 30 , \"weight\": 3 } ], \"metadata\": \"RARITY_0001\" } , { \"name\": \"rarity-0002\" , \"maximumParameterCount\": 10 , \"parameterCounts\": [ { \"count\": 1 , \"weight\": 10 } , { \"count\": 2 , \"weight\": 20 } , { \"count\": 3 , \"weight\": 30 } ], \"parameters\": [ { \"name\": \"parameter-1001\" , \"metadata\": \"PARAMETER_1001\" , \"resourceName\": \"resource-1001\" , \"resourceValue\": 100 , \"weight\": 10 } , { \"name\": \"parameter-1002\" , \"metadata\": \"PARAMETER_1002\" , \"resourceName\": \"resource-1002\" , \"resourceValue\": 200 , \"weight\": 20 } , { \"name\": \"parameter-1003\" , \"metadata\": \"PARAMETER_1003\" , \"resourceName\": \"resource-1003\" , \"resourceValue\": 300 , \"weight\": 30 } ], \"metadata\": \"RARITY_0002\" } , { \"name\": \"rarity-0003\" , \"maximumParameterCount\": 3 , \"parameterCounts\": [ { \"count\": 2 , \"weight\": 5 } , { \"count\": 3 , \"weight\": 10 } , { \"count\": 4 , \"weight\": 15 } ], \"parameters\": [ { \"name\": \"parameter-2001\" , \"metadata\": \"PARAMETER_2001\" , \"resourceName\": \"resource-2001\" , \"resourceValue\": 1000 , \"weight\": 2 } , { \"name\": \"parameter-2002\" , \"metadata\": \"PARAMETER_2002\" , \"resourceName\": \"resource-2002\" , \"resourceValue\": 2000 , \"weight\": 4 } , { \"name\": \"parameter-2003\" , \"metadata\": \"PARAMETER_2003\" , \"resourceName\": \"resource-2003\" , \"resourceValue\": 3000 , \"weight\": 6 } , { \"name\": \"parameter-0004\" , \"metadata\": \"PARAMETER_0004\" , \"resourceName\": \"resource-2004\" , \"resourceValue\": 4000 , \"weight\": 8 } ], \"metadata\": \"RARITY_0003\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/enchant\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () enchant . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , enchant . NamespaceOptions {}, ). MasterData ( [] enchant . BalanceParameterModel { enchant . NewBalanceParameterModel ( \"balance-0001\" , 100 , enchant . BalanceParameterModelInitialValueStrategyAverage , [] enchant . BalanceParameterValueModel { enchant . NewBalanceParameterValueModel ( \"parameter-0001\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0001\" ), }, ), enchant . NewBalanceParameterValueModel ( \"parameter-0002\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0002\" ), }, ), enchant . NewBalanceParameterValueModel ( \"parameter-0003\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0003\" ), }, ), }, enchant . BalanceParameterModelOptions { Metadata : pointy . String ( \"BALANCE_0001\" ), }, ), enchant . NewBalanceParameterModel ( \"balance-0002\" , 200 , enchant . BalanceParameterModelInitialValueStrategyLottery , [] enchant . BalanceParameterValueModel { enchant . NewBalanceParameterValueModel ( \"parameter-0001\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0001\" ), }, ), enchant . NewBalanceParameterValueModel ( \"parameter-0002\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0002\" ), }, ), enchant . NewBalanceParameterValueModel ( \"parameter-0003\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0003\" ), }, ), enchant . NewBalanceParameterValueModel ( \"parameter-0004\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0004\" ), }, ), }, enchant . BalanceParameterModelOptions { Metadata : pointy . String ( \"BALANCE_0002\" ), }, ), enchant . NewBalanceParameterModel ( \"balance-0003\" , 500 , enchant . BalanceParameterModelInitialValueStrategyAverage , [] enchant . BalanceParameterValueModel { enchant . NewBalanceParameterValueModel ( \"parameter-0001\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0001\" ), }, ), enchant . NewBalanceParameterValueModel ( \"parameter-0002\" , enchant . BalanceParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0002\" ), }, ), }, enchant . BalanceParameterModelOptions { Metadata : pointy . String ( \"BALANCE_0003\" ), }, ), }, [] enchant . RarityParameterModel { enchant . NewRarityParameterModel ( \"rarity-0001\" , 5 , [] enchant . RarityParameterCountModel { enchant . NewRarityParameterCountModel ( 0 , 1 , enchant . RarityParameterCountModelOptions {}, ), enchant . NewRarityParameterCountModel ( 1 , 2 , enchant . RarityParameterCountModelOptions {}, ), enchant . NewRarityParameterCountModel ( 2 , 3 , enchant . RarityParameterCountModelOptions {}, ), }, [] enchant . RarityParameterValueModel { enchant . NewRarityParameterValueModel ( \"parameter-0001\" , \"resource-0001\" , 10 , 1 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0001\" ), }, ), enchant . NewRarityParameterValueModel ( \"parameter-0002\" , \"resource-0002\" , 20 , 2 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0002\" ), }, ), enchant . NewRarityParameterValueModel ( \"parameter-0003\" , \"resource-0003\" , 30 , 3 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0003\" ), }, ), }, enchant . RarityParameterModelOptions { Metadata : pointy . String ( \"RARITY_0001\" ), }, ), enchant . NewRarityParameterModel ( \"rarity-0002\" , 10 , [] enchant . RarityParameterCountModel { enchant . NewRarityParameterCountModel ( 1 , 10 , enchant . RarityParameterCountModelOptions {}, ), enchant . NewRarityParameterCountModel ( 2 , 20 , enchant . RarityParameterCountModelOptions {}, ), enchant . NewRarityParameterCountModel ( 3 , 30 , enchant . RarityParameterCountModelOptions {}, ), }, [] enchant . RarityParameterValueModel { enchant . NewRarityParameterValueModel ( \"parameter-1001\" , \"resource-1001\" , 100 , 10 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_1001\" ), }, ), enchant . NewRarityParameterValueModel ( \"parameter-1002\" , \"resource-1002\" , 200 , 20 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_1002\" ), }, ), enchant . NewRarityParameterValueModel ( \"parameter-1003\" , \"resource-1003\" , 300 , 30 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_1003\" ), }, ), }, enchant . RarityParameterModelOptions { Metadata : pointy . String ( \"RARITY_0002\" ), }, ), enchant . NewRarityParameterModel ( \"rarity-0003\" , 3 , [] enchant . RarityParameterCountModel { enchant . NewRarityParameterCountModel ( 2 , 5 , enchant . RarityParameterCountModelOptions {}, ), enchant . NewRarityParameterCountModel ( 3 , 10 , enchant . RarityParameterCountModelOptions {}, ), enchant . NewRarityParameterCountModel ( 4 , 15 , enchant . RarityParameterCountModelOptions {}, ), }, [] enchant . RarityParameterValueModel { enchant . NewRarityParameterValueModel ( \"parameter-2001\" , \"resource-2001\" , 1000 , 2 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_2001\" ), }, ), enchant . NewRarityParameterValueModel ( \"parameter-2002\" , \"resource-2002\" , 2000 , 4 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_2002\" ), }, ), enchant . NewRarityParameterValueModel ( \"parameter-2003\" , \"resource-2003\" , 3000 , 6 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_2003\" ), }, ), enchant . NewRarityParameterValueModel ( \"parameter-0004\" , \"resource-2004\" , 4000 , 8 , enchant . RarityParameterValueModelOptions { Metadata : pointy . String ( \"PARAMETER_0004\" ), }, ), }, enchant . RarityParameterModelOptions { Metadata : pointy . String ( \"RARITY_0003\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Enchant\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterModel ( name : \"balance-0001\" , totalValue : 100 , initialValueStrategy : \\Gs2Cdk\\Enchant\\Model\\Enums\\BalanceParameterModelInitialValueStrategy :: AVERAGE , parameters : [ new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0001\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0001\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0002\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0002\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0003\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0003\" , ), ), ], options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterModelOptions ( metadata : \"BALANCE_0001\" ) ), new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterModel ( name : \"balance-0002\" , totalValue : 200 , initialValueStrategy : \\Gs2Cdk\\Enchant\\Model\\Enums\\BalanceParameterModelInitialValueStrategy :: LOTTERY , parameters : [ new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0001\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0001\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0002\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0002\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0003\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0003\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0004\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0004\" , ), ), ], options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterModelOptions ( metadata : \"BALANCE_0002\" ) ), new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterModel ( name : \"balance-0003\" , totalValue : 500 , initialValueStrategy : \\Gs2Cdk\\Enchant\\Model\\Enums\\BalanceParameterModelInitialValueStrategy :: AVERAGE , parameters : [ new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0001\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0001\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\BalanceParameterValueModel ( name : \"parameter-0002\" , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterValueModelOptions ( metadata : \"PARAMETER_0002\" , ), ), ], options : new \\Gs2Cdk\\Enchant\\Model\\Options\\BalanceParameterModelOptions ( metadata : \"BALANCE_0003\" ) ) ], [ new \\Gs2Cdk\\Enchant\\Model\\RarityParameterModel ( name : \"rarity-0001\" , maximumParameterCount : 5 , parameterCounts : [ new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 0 , weight : 1 , ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 1 , weight : 2 , ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 2 , weight : 3 , ), ], parameters : [ new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-0001\" , resourceName : \"resource-0001\" , resourceValue : 10 , weight : 1 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_0001\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-0002\" , resourceName : \"resource-0002\" , resourceValue : 20 , weight : 2 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_0002\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-0003\" , resourceName : \"resource-0003\" , resourceValue : 30 , weight : 3 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_0003\" , ), ), ], options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterModelOptions ( metadata : \"RARITY_0001\" ) ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterModel ( name : \"rarity-0002\" , maximumParameterCount : 10 , parameterCounts : [ new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 1 , weight : 10 , ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 2 , weight : 20 , ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 3 , weight : 30 , ), ], parameters : [ new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-1001\" , resourceName : \"resource-1001\" , resourceValue : 100 , weight : 10 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_1001\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-1002\" , resourceName : \"resource-1002\" , resourceValue : 200 , weight : 20 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_1002\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-1003\" , resourceName : \"resource-1003\" , resourceValue : 300 , weight : 30 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_1003\" , ), ), ], options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterModelOptions ( metadata : \"RARITY_0002\" ) ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterModel ( name : \"rarity-0003\" , maximumParameterCount : 3 , parameterCounts : [ new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 2 , weight : 5 , ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 3 , weight : 10 , ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterCountModel ( count : 4 , weight : 15 , ), ], parameters : [ new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-2001\" , resourceName : \"resource-2001\" , resourceValue : 1000 , weight : 2 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_2001\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-2002\" , resourceName : \"resource-2002\" , resourceValue : 2000 , weight : 4 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_2002\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-2003\" , resourceName : \"resource-2003\" , resourceValue : 3000 , weight : 6 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_2003\" , ), ), new \\Gs2Cdk\\Enchant\\Model\\RarityParameterValueModel ( name : \"parameter-0004\" , resourceName : \"resource-2004\" , resourceValue : 4000 , weight : 8 , options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterValueModelOptions ( metadata : \"PARAMETER_0004\" , ), ), ], options : new \\Gs2Cdk\\Enchant\\Model\\Options\\RarityParameterModelOptions ( metadata : \"RARITY_0003\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . enchant . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . enchant . model . BalanceParameterModel ( \"balance-0001\" , 100L , io . gs2 . cdk . enchant . model . enums . BalanceParameterModelInitialValueStrategy . AVERAGE , Arrays . asList ( new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0001\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0001\" ) ), new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0002\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0002\" ) ), new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0003\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0003\" ) ) ), new io . gs2 . cdk . enchant . model . options . BalanceParameterModelOptions () . withMetadata ( \"BALANCE_0001\" ) ), new io . gs2 . cdk . enchant . model . BalanceParameterModel ( \"balance-0002\" , 200L , io . gs2 . cdk . enchant . model . enums . BalanceParameterModelInitialValueStrategy . LOTTERY , Arrays . asList ( new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0001\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0001\" ) ), new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0002\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0002\" ) ), new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0003\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0003\" ) ), new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0004\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0004\" ) ) ), new io . gs2 . cdk . enchant . model . options . BalanceParameterModelOptions () . withMetadata ( \"BALANCE_0002\" ) ), new io . gs2 . cdk . enchant . model . BalanceParameterModel ( \"balance-0003\" , 500L , io . gs2 . cdk . enchant . model . enums . BalanceParameterModelInitialValueStrategy . AVERAGE , Arrays . asList ( new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0001\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0001\" ) ), new io . gs2 . cdk . enchant . model . BalanceParameterValueModel ( \"parameter-0002\" , new io . gs2 . cdk . enchant . model . options . BalanceParameterValueModelOptions () . withMetadata ( \"PARAMETER_0002\" ) ) ), new io . gs2 . cdk . enchant . model . options . BalanceParameterModelOptions () . withMetadata ( \"BALANCE_0003\" ) ) ), Arrays . asList ( new io . gs2 . cdk . enchant . model . RarityParameterModel ( \"rarity-0001\" , 5 , Arrays . asList ( new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 0 , 1 ), new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 1 , 2 ), new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 2 , 3 ) ), Arrays . asList ( new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-0001\" , \"resource-0001\" , 10L , 1 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_0001\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-0002\" , \"resource-0002\" , 20L , 2 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_0002\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-0003\" , \"resource-0003\" , 30L , 3 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_0003\" ) ) ), new io . gs2 . cdk . enchant . model . options . RarityParameterModelOptions () . withMetadata ( \"RARITY_0001\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterModel ( \"rarity-0002\" , 10 , Arrays . asList ( new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 1 , 10 ), new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 2 , 20 ), new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 3 , 30 ) ), Arrays . asList ( new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-1001\" , \"resource-1001\" , 100L , 10 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_1001\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-1002\" , \"resource-1002\" , 200L , 20 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_1002\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-1003\" , \"resource-1003\" , 300L , 30 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_1003\" ) ) ), new io . gs2 . cdk . enchant . model . options . RarityParameterModelOptions () . withMetadata ( \"RARITY_0002\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterModel ( \"rarity-0003\" , 3 , Arrays . asList ( new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 2 , 5 ), new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 3 , 10 ), new io . gs2 . cdk . enchant . model . RarityParameterCountModel ( 4 , 15 ) ), Arrays . asList ( new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-2001\" , \"resource-2001\" , 1000L , 2 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_2001\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-2002\" , \"resource-2002\" , 2000L , 4 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_2002\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-2003\" , \"resource-2003\" , 3000L , 6 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_2003\" ) ), new io . gs2 . cdk . enchant . model . RarityParameterValueModel ( \"parameter-0004\" , \"resource-2004\" , 4000L , 8 , new io . gs2 . cdk . enchant . model . options . RarityParameterValueModelOptions () . withMetadata ( \"PARAMETER_0004\" ) ) ), new io . gs2 . cdk . enchant . model . options . RarityParameterModelOptions () . withMetadata ( \"RARITY_0003\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Enchant . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Enchant . Model . BalanceParameterModel [] { new Gs2Cdk . Gs2Enchant . Model . BalanceParameterModel ( name : \"balance-0001\" , totalValue : 100L , initialValueStrategy : Gs2Cdk . Gs2Enchant . Model . Enums . BalanceParameterModelInitialValueStrategy . Average , parameters : new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel [] { new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0001\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0001\" } ), new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0002\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0002\" } ), new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0003\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0003\" } ) }, options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterModelOptions { metadata = \"BALANCE_0001\" } ), new Gs2Cdk . Gs2Enchant . Model . BalanceParameterModel ( name : \"balance-0002\" , totalValue : 200L , initialValueStrategy : Gs2Cdk . Gs2Enchant . Model . Enums . BalanceParameterModelInitialValueStrategy . Lottery , parameters : new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel [] { new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0001\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0001\" } ), new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0002\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0002\" } ), new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0003\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0003\" } ), new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0004\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0004\" } ) }, options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterModelOptions { metadata = \"BALANCE_0002\" } ), new Gs2Cdk . Gs2Enchant . Model . BalanceParameterModel ( name : \"balance-0003\" , totalValue : 500L , initialValueStrategy : Gs2Cdk . Gs2Enchant . Model . Enums . BalanceParameterModelInitialValueStrategy . Average , parameters : new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel [] { new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0001\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0001\" } ), new Gs2Cdk . Gs2Enchant . Model . BalanceParameterValueModel ( name : \"parameter-0002\" , options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterValueModelOptions { metadata = \"PARAMETER_0002\" } ) }, options : new Gs2Cdk . Gs2Enchant . Model . Options . BalanceParameterModelOptions { metadata = \"BALANCE_0003\" } ) }, new Gs2Cdk . Gs2Enchant . Model . RarityParameterModel [] { new Gs2Cdk . Gs2Enchant . Model . RarityParameterModel ( name : \"rarity-0001\" , maximumParameterCount : 5 , parameterCounts : new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel [] { new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 0 , weight : 1 ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 1 , weight : 2 ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 2 , weight : 3 ) }, parameters : new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel [] { new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-0001\" , resourceName : \"resource-0001\" , resourceValue : 10L , weight : 1 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_0001\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-0002\" , resourceName : \"resource-0002\" , resourceValue : 20L , weight : 2 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_0002\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-0003\" , resourceName : \"resource-0003\" , resourceValue : 30L , weight : 3 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_0003\" } ) }, options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterModelOptions { metadata = \"RARITY_0001\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterModel ( name : \"rarity-0002\" , maximumParameterCount : 10 , parameterCounts : new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel [] { new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 1 , weight : 10 ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 2 , weight : 20 ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 3 , weight : 30 ) }, parameters : new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel [] { new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-1001\" , resourceName : \"resource-1001\" , resourceValue : 100L , weight : 10 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_1001\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-1002\" , resourceName : \"resource-1002\" , resourceValue : 200L , weight : 20 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_1002\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-1003\" , resourceName : \"resource-1003\" , resourceValue : 300L , weight : 30 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_1003\" } ) }, options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterModelOptions { metadata = \"RARITY_0002\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterModel ( name : \"rarity-0003\" , maximumParameterCount : 3 , parameterCounts : new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel [] { new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 2 , weight : 5 ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 3 , weight : 10 ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterCountModel ( count : 4 , weight : 15 ) }, parameters : new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel [] { new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-2001\" , resourceName : \"resource-2001\" , resourceValue : 1000L , weight : 2 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_2001\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-2002\" , resourceName : \"resource-2002\" , resourceValue : 2000L , weight : 4 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_2002\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-2003\" , resourceName : \"resource-2003\" , resourceValue : 3000L , weight : 6 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_2003\" } ), new Gs2Cdk . Gs2Enchant . Model . RarityParameterValueModel ( name : \"parameter-0004\" , resourceName : \"resource-2004\" , resourceValue : 4000L , weight : 8 , options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterValueModelOptions { metadata = \"PARAMETER_0004\" } ) }, options : new Gs2Cdk . Gs2Enchant . Model . Options . RarityParameterModelOptions { metadata = \"RARITY_0003\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import enchant from \"@/gs2cdk/enchant\" ; class SampleStack extends core . Stack { public constructor () { super (); new enchant . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new enchant . model . BalanceParameterModel ( \"balance-0001\" , 100 , enchant . model . BalanceParameterModelInitialValueStrategy . AVERAGE , [ new enchant . model . BalanceParameterValueModel ( \"parameter-0001\" , { metadata : \"PARAMETER_0001\" } ), new enchant . model . BalanceParameterValueModel ( \"parameter-0002\" , { metadata : \"PARAMETER_0002\" } ), new enchant . model . BalanceParameterValueModel ( \"parameter-0003\" , { metadata : \"PARAMETER_0003\" } ), ], { metadata : \"BALANCE_0001\" } ), new enchant . model . BalanceParameterModel ( \"balance-0002\" , 200 , enchant . model . BalanceParameterModelInitialValueStrategy . LOTTERY , [ new enchant . model . BalanceParameterValueModel ( \"parameter-0001\" , { metadata : \"PARAMETER_0001\" } ), new enchant . model . BalanceParameterValueModel ( \"parameter-0002\" , { metadata : \"PARAMETER_0002\" } ), new enchant . model . BalanceParameterValueModel ( \"parameter-0003\" , { metadata : \"PARAMETER_0003\" } ), new enchant . model . BalanceParameterValueModel ( \"parameter-0004\" , { metadata : \"PARAMETER_0004\" } ), ], { metadata : \"BALANCE_0002\" } ), new enchant . model . BalanceParameterModel ( \"balance-0003\" , 500 , enchant . model . BalanceParameterModelInitialValueStrategy . AVERAGE , [ new enchant . model . BalanceParameterValueModel ( \"parameter-0001\" , { metadata : \"PARAMETER_0001\" } ), new enchant . model . BalanceParameterValueModel ( \"parameter-0002\" , { metadata : \"PARAMETER_0002\" } ), ], { metadata : \"BALANCE_0003\" } ) ], [ new enchant . model . RarityParameterModel ( \"rarity-0001\" , 5 , [ new enchant . model . RarityParameterCountModel ( 0 , 1 ), new enchant . model . RarityParameterCountModel ( 1 , 2 ), new enchant . model . RarityParameterCountModel ( 2 , 3 ), ], [ new enchant . model . RarityParameterValueModel ( \"parameter-0001\" , \"resource-0001\" , 10 , 1 , { metadata : \"PARAMETER_0001\" } ), new enchant . model . RarityParameterValueModel ( \"parameter-0002\" , \"resource-0002\" , 20 , 2 , { metadata : \"PARAMETER_0002\" } ), new enchant . model . RarityParameterValueModel ( \"parameter-0003\" , \"resource-0003\" , 30 , 3 , { metadata : \"PARAMETER_0003\" } ), ], { metadata : \"RARITY_0001\" } ), new enchant . model . RarityParameterModel ( \"rarity-0002\" , 10 , [ new enchant . model . RarityParameterCountModel ( 1 , 10 ), new enchant . model . RarityParameterCountModel ( 2 , 20 ), new enchant . model . RarityParameterCountModel ( 3 , 30 ), ], [ new enchant . model . RarityParameterValueModel ( \"parameter-1001\" , \"resource-1001\" , 100 , 10 , { metadata : \"PARAMETER_1001\" } ), new enchant . model . RarityParameterValueModel ( \"parameter-1002\" , \"resource-1002\" , 200 , 20 , { metadata : \"PARAMETER_1002\" } ), new enchant . model . RarityParameterValueModel ( \"parameter-1003\" , \"resource-1003\" , 300 , 30 , { metadata : \"PARAMETER_1003\" } ), ], { metadata : \"RARITY_0002\" } ), new enchant . model . RarityParameterModel ( \"rarity-0003\" , 3 , [ new enchant . model . RarityParameterCountModel ( 2 , 5 ), new enchant . model . RarityParameterCountModel ( 3 , 10 ), new enchant . model . RarityParameterCountModel ( 4 , 15 ), ], [ new enchant . model . RarityParameterValueModel ( \"parameter-2001\" , \"resource-2001\" , 1000 , 2 , { metadata : \"PARAMETER_2001\" } ), new enchant . model . RarityParameterValueModel ( \"parameter-2002\" , \"resource-2002\" , 2000 , 4 , { metadata : \"PARAMETER_2002\" } ), new enchant . model . RarityParameterValueModel ( \"parameter-2003\" , \"resource-2003\" , 3000 , 6 , { metadata : \"PARAMETER_2003\" } ), new enchant . model . RarityParameterValueModel ( \"parameter-0004\" , \"resource-2004\" , 4000 , 8 , { metadata : \"PARAMETER_0004\" } ), ], { metadata : \"RARITY_0003\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , enchant class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () enchant . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( balance_parameter_models = [ enchant . BalanceParameterModel ( name = 'balance-0001' , total_value = 100 , initial_value_strategy = enchant . BalanceParameterModelInitialValueStrategy . AVERAGE , parameters = [ enchant . BalanceParameterValueModel ( name = 'parameter-0001' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0001' , ), ), enchant . BalanceParameterValueModel ( name = 'parameter-0002' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0002' , ), ), enchant . BalanceParameterValueModel ( name = 'parameter-0003' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0003' , ), ), ], options = enchant . BalanceParameterModelOptions ( metadata = 'BALANCE_0001' ), ), enchant . BalanceParameterModel ( name = 'balance-0002' , total_value = 200 , initial_value_strategy = enchant . BalanceParameterModelInitialValueStrategy . LOTTERY , parameters = [ enchant . BalanceParameterValueModel ( name = 'parameter-0001' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0001' , ), ), enchant . BalanceParameterValueModel ( name = 'parameter-0002' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0002' , ), ), enchant . BalanceParameterValueModel ( name = 'parameter-0003' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0003' , ), ), enchant . BalanceParameterValueModel ( name = 'parameter-0004' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0004' , ), ), ], options = enchant . BalanceParameterModelOptions ( metadata = 'BALANCE_0002' ), ), enchant . BalanceParameterModel ( name = 'balance-0003' , total_value = 500 , initial_value_strategy = enchant . BalanceParameterModelInitialValueStrategy . AVERAGE , parameters = [ enchant . BalanceParameterValueModel ( name = 'parameter-0001' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0001' , ), ), enchant . BalanceParameterValueModel ( name = 'parameter-0002' , options = enchant . BalanceParameterValueModelOptions ( metadata = 'PARAMETER_0002' , ), ), ], options = enchant . BalanceParameterModelOptions ( metadata = 'BALANCE_0003' ), ), ], rarity_parameter_models = [ enchant . RarityParameterModel ( name = 'rarity-0001' , maximum_parameter_count = 5 , parameter_counts = [ enchant . RarityParameterCountModel ( count = 0 , weight = 1 , ), enchant . RarityParameterCountModel ( count = 1 , weight = 2 , ), enchant . RarityParameterCountModel ( count = 2 , weight = 3 , ), ], parameters = [ enchant . RarityParameterValueModel ( name = 'parameter-0001' , resource_name = 'resource-0001' , resource_value = 10 , weight = 1 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_0001' , ), ), enchant . RarityParameterValueModel ( name = 'parameter-0002' , resource_name = 'resource-0002' , resource_value = 20 , weight = 2 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_0002' , ), ), enchant . RarityParameterValueModel ( name = 'parameter-0003' , resource_name = 'resource-0003' , resource_value = 30 , weight = 3 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_0003' , ), ), ], options = enchant . RarityParameterModelOptions ( metadata = 'RARITY_0001' ), ), enchant . RarityParameterModel ( name = 'rarity-0002' , maximum_parameter_count = 10 , parameter_counts = [ enchant . RarityParameterCountModel ( count = 1 , weight = 10 , ), enchant . RarityParameterCountModel ( count = 2 , weight = 20 , ), enchant . RarityParameterCountModel ( count = 3 , weight = 30 , ), ], parameters = [ enchant . RarityParameterValueModel ( name = 'parameter-1001' , resource_name = 'resource-1001' , resource_value = 100 , weight = 10 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_1001' , ), ), enchant . RarityParameterValueModel ( name = 'parameter-1002' , resource_name = 'resource-1002' , resource_value = 200 , weight = 20 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_1002' , ), ), enchant . RarityParameterValueModel ( name = 'parameter-1003' , resource_name = 'resource-1003' , resource_value = 300 , weight = 30 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_1003' , ), ), ], options = enchant . RarityParameterModelOptions ( metadata = 'RARITY_0002' ), ), enchant . RarityParameterModel ( name = 'rarity-0003' , maximum_parameter_count = 3 , parameter_counts = [ enchant . RarityParameterCountModel ( count = 2 , weight = 5 , ), enchant . RarityParameterCountModel ( count = 3 , weight = 10 , ), enchant . RarityParameterCountModel ( count = 4 , weight = 15 , ), ], parameters = [ enchant . RarityParameterValueModel ( name = 'parameter-2001' , resource_name = 'resource-2001' , resource_value = 1000 , weight = 2 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_2001' , ), ), enchant . RarityParameterValueModel ( name = 'parameter-2002' , resource_name = 'resource-2002' , resource_value = 2000 , weight = 4 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_2002' , ), ), enchant . RarityParameterValueModel ( name = 'parameter-2003' , resource_name = 'resource-2003' , resource_value = 3000 , weight = 6 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_2003' , ), ), enchant . RarityParameterValueModel ( name = 'parameter-0004' , resource_name = 'resource-2004' , resource_value = 4000 , weight = 8 , options = enchant . RarityParameterValueModelOptions ( metadata = 'PARAMETER_0004' , ), ), ], options = enchant . RarityParameterModelOptions ( metadata = 'RARITY_0003' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template BalanceParameterModel 밸런스 파라미터 모델 밸런스 파라미터의 추첨 조건을 정의합니다. 밸런스 파라미터는 고정된 합계 값을 여러 파라미터 슬롯에 분배합니다. 예를 들어 합계 파워가 100인 무기에 대해 ATK=60, DEF=30, SPD=10과 같이 배분됩니다. 초기값 설정 방침에 따라 값의 할당 방법이 결정됩니다: average 는 균등하게 분배하고, lottery 는 합계 값을 무작위로 배분합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 balanceParameterModelId string ※ ~ 1024자 밸런스 파라미터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 밸런스 파라미터 모델 이름 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. totalValue long  0 ~ 9223372036854775805 합계값 모든 파라미터 슬롯에 분배되는 고정된 합계값입니다. 파라미터가 추첨될 때, 사용되는 배분 방식과 관계없이 개별 값의 합계는 항상 이 합계값이 됩니다. initialValueStrategy 문자열 열거형 enum {   “average”,   “lottery” } “average” 초기값 설정 방침 최초 할당 시 합계값을 파라미터 슬롯에 어떻게 분배할지를 결정합니다. average 는 합계값을 모든 파라미터에 균등하게 분배하고, lottery 는 합계값을 무작위로 분배하여 다양한 파라미터 조합을 만듭니다. 정의 설명 average 평균값 lottery 추첨 parameters List  1 ~ 10 items 밸런스 파라미터 값 모델 목록 이 밸런스 파라미터에서 사용 가능한 파라미터 슬롯을 정의합니다. 각 엔트리는 이름이 지정된 파라미터 슬롯(예: ATK, DEF, SPD)을 선택적 메타데이터와 함께 지정합니다. 합계값은 이 슬롯들에 분배됩니다. BalanceParameterValueModel 밸런스 파라미터 값 모델 밸런스 파라미터 내에서 사용 가능한 단일 파라미터 슬롯을 정의합니다. 각 엔트리는 추첨 처리 중 합계값의 일부를 받는 이름이 지정된 슬롯(예: ATK, DEF, SPD)을 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 이 파라미터 슬롯의 식별자(예: ATK, DEF, SPD)입니다. 밸런스 파라미터 모델 내에서 고유해야 합니다. 추첨된 파라미터 값을 저장·취득할 때 키로 사용됩니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. RarityParameterModel 레어리티 파라미터 모델 레어리티 파라미터의 추첨 조건을 정의합니다. 레어리티 파라미터는 가중 추첨 시스템을 사용하여 부여되는 파라미터의 수와 할당되는 구체적인 값을 모두 결정합니다. 먼저, 부여 수 모델 목록에서 가중 추첨을 통해 채울 파라미터 슬롯 수가 결정됩니다. 그런 다음, 각 슬롯의 값이 파라미터 값 모델 목록에서 가중 추첨으로 선택되어, 제어된 확률 분포에 따른 무작위 장비 속성을 제공합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rarityParameterModelId string ※ ~ 1024자 레어리티 파라미터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레어리티 파라미터 모델명 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParameterCount int  1 ~ 10 부여할 파라미터의 최대 수 리소스에 부여할 수 있는 파라미터 슬롯 수의 상한입니다. 실제로 부여되는 수는 부여 수 모델 목록에서의 가중 추첨으로 결정되지만, 이 값을 초과하지 않습니다. parameterCounts List  1 ~ 10 items 레어리티 파라미터의 부여 수 모델 목록 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨 엔트리를 정의합니다. 각 엔트리는 부여 수와 추첨 가중치를 지정합니다. 가중치가 클수록 해당 부여 수가 선택될 확률이 높아집니다. parameters List  1 ~ 1000 items 레어리티 파라미터 값 모델 목록 추첨 가능한 파라미터 값의 풀을 정의합니다. 각 엔트리는 파라미터 이름, 리소스 상세 정보, 추첨 가중치를 지정합니다. 파라미터 슬롯을 채울 때, 이 풀에서 중복 없이 가중 추첨으로 값이 선택됩니다. RarityParameterCountModel 레어리티 파라미터의 부여 수 모델 리소스에 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨의 단일 엔트리를 정의합니다. 각 엔트리는 파라미터 수와 추첨 가중치를 짝지어, 파라미터 수량의 확률 분포를 세밀하게 제어할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 count int  0 ~ 10 부여 수 이 엔트리가 추첨되었을 때 부여되는 파라미터 슬롯 수입니다. 예를 들어 부여 수가 3인 경우, 리소스는 값 모델 풀에서 선택된 3개의 파라미터 값을 받게 됩니다. weight int  1 ~ 2147483646 추첨 가중치 파라미터 부여 수를 결정하는 가중치 추첨에서 사용되는 상대적인 가중치입니다. 값이 클수록 이 부여 수가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 부여 수 모델 리스트 내 모든 가중치의 합으로 나눈 값입니다. RarityParameterValueModel 레어리티 파라미터 값 모델 레어리티 파라미터 값의 가중 추첨 풀 내 단일 엔트리를 정의합니다. 각 엔트리는 파라미터 이름, 게임에서 정의한 리소스 상세 정보, 그리고 풀 내 다른 엔트리에 대한 선택 확률을 결정하는 추첨 가중치를 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 이 추첨 엔트리의 식별자입니다. 레어리티 파라미터 모델의 값 풀 내에서 고유해야 합니다. 추첨되었을 때, 이 이름이 결과 레어리티 파라미터 값에 저장됩니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resourceName string  ~ 64자 게임에서 사용하는 파라미터 리소스 종류를 나타내는 이름(GS2의 동작에는 사용되지 않음) 이 파라미터 값에 연결된 게임에서 정의한 리소스 종류 이름(예: “fire_attack”, “ice_resist”)입니다. GS2는 자체 동작에 이 값을 사용하지 않으며, 추첨 결과에 그대로 전달되어 게임 로직에서 사용됩니다. resourceValue long  0 ~ 9223372036854775805 게임에서 사용하는 파라미터 리소스 값(GS2의 동작에는 사용되지 않음) 이 파라미터의 게임에서 정의한 수치(예: 공격력+50인 경우 50)입니다. GS2는 자체 동작에 이 값을 사용하지 않으며, 추첨 결과에 그대로 전달되어 게임 로직에서 사용됩니다. weight int  1 ~ 2147483646 추첨 가중치 파라미터 값을 선택하는 가중 추첨에서 사용되는 상대적 가중치입니다. 값이 클수록 이 엔트리가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 풀 내 모든 가중치의 합으로 나눈 값이 됩니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Enchant Deploy/CDK 레퍼런스","url":"/ko/api_reference/enchant/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 강화 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. enhanceScript ScriptSetting 강화 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - enhance logSetting LogSetting 로그 출력 설정 강화 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 강화 및 한계 돌파 조작의 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Enhance::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 EnhanceScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/enhance\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () enhance . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , enhance . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Enhance\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Enhance\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . enhance . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . enhance . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Enhance . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Enhance . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import enhance from \"@/gs2cdk/enhance\" ; class SampleStack extends core . Stack { public constructor () { super (); new enhance . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , enhance class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () enhance . Namespace ( stack = self , name = 'namespace-0001' , options = enhance . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 레이트 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Enhance 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentRateMaster 갱신된 현재 활성화된 레이트 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Enhance::CurrentRateMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2020-08-22\" , \"rateModels\": [ { \"name\": \"character-friendly\" , \"targetInventoryModelId\": \"grn:inventory:character\" , \"acquireExperienceSuffix\": \":friendly\" , \"materialInventoryModelId\": \"grn:inventory:sweet\" , \"experienceModelId\": \"grn:experience:friendly\" , \"metadata\": \"CHARACTER_FRIENDLY\" , \"acquireExperienceHierarchy\": [ \"taste\" ], \"bonusRates\": [ { \"rate\": 1 , \"weight\": 90 } ] } , { \"name\": \"character-level\" , \"targetInventoryModelId\": \"grn:inventory:character\" , \"acquireExperienceSuffix\": \":level\" , \"materialInventoryModelId\": \"grn:inventory:material\" , \"experienceModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , \"metadata\": \"CHARACTER_LEVEL\" , \"acquireExperienceHierarchy\": [ \"experience\" ], \"bonusRates\": [ { \"rate\": 1 , \"weight\": 90 } , { \"rate\": 1.5 , \"weight\": 9 } , { \"rate\": 2 , \"weight\": 1 } ] } ], \"unleashRateModels\": [ ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/enhance\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () enhance . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , enhance . NamespaceOptions {}, ). MasterData ( [] enhance . RateModel { enhance . NewRateModel ( \"character-friendly\" , \"grn:inventory:character\" , \":friendly\" , \"grn:inventory:sweet\" , \"grn:experience:friendly\" , enhance . RateModelOptions { Metadata : pointy . String ( \"CHARACTER_FRIENDLY\" ), AcquireExperienceHierarchy : [] string { \"taste\" , }, BonusRates : [] enhance . BonusRate { enhance . NewBonusRate ( 1 , 90 , enhance . BonusRateOptions {}, ), }, }, ), enhance . NewRateModel ( \"character-level\" , \"grn:inventory:character\" , \":level\" , \"grn:inventory:material\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , enhance . RateModelOptions { Metadata : pointy . String ( \"CHARACTER_LEVEL\" ), AcquireExperienceHierarchy : [] string { \"experience\" , }, BonusRates : [] enhance . BonusRate { enhance . NewBonusRate ( 1 , 90 , enhance . BonusRateOptions {}, ), enhance . NewBonusRate ( 1.5 , 9 , enhance . BonusRateOptions {}, ), enhance . NewBonusRate ( 2 , 1 , enhance . BonusRateOptions {}, ), }, }, ), }, [] enhance . UnleashRateModel { }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Enhance\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Enhance\\Model\\RateModel ( name : \"character-friendly\" , targetInventoryModelId : \"grn:inventory:character\" , acquireExperienceSuffix : \":friendly\" , materialInventoryModelId : \"grn:inventory:sweet\" , experienceModelId : \"grn:experience:friendly\" , options : new \\Gs2Cdk\\Enhance\\Model\\Options\\RateModelOptions ( metadata : \"CHARACTER_FRIENDLY\" , acquireExperienceHierarchy : [ \"taste\" , ], bonusRates : [ new \\Gs2Cdk\\Enhance\\Model\\BonusRate ( rate : 1 , weight : 90 , ), ] ) ), new \\Gs2Cdk\\Enhance\\Model\\RateModel ( name : \"character-level\" , targetInventoryModelId : \"grn:inventory:character\" , acquireExperienceSuffix : \":level\" , materialInventoryModelId : \"grn:inventory:material\" , experienceModelId : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , options : new \\Gs2Cdk\\Enhance\\Model\\Options\\RateModelOptions ( metadata : \"CHARACTER_LEVEL\" , acquireExperienceHierarchy : [ \"experience\" , ], bonusRates : [ new \\Gs2Cdk\\Enhance\\Model\\BonusRate ( rate : 1 , weight : 90 , ), new \\Gs2Cdk\\Enhance\\Model\\BonusRate ( rate : 1.5 , weight : 9 , ), new \\Gs2Cdk\\Enhance\\Model\\BonusRate ( rate : 2 , weight : 1 , ), ] ) ) ], [ ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . enhance . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . enhance . model . RateModel ( \"character-friendly\" , \"grn:inventory:character\" , \":friendly\" , \"grn:inventory:sweet\" , \"grn:experience:friendly\" , new io . gs2 . cdk . enhance . model . options . RateModelOptions () . withMetadata ( \"CHARACTER_FRIENDLY\" ) . withAcquireExperienceHierarchy ( Arrays . asList ( \"taste\" )) . withBonusRates ( Arrays . asList ( new io . gs2 . cdk . enhance . model . BonusRate ( 1f , 90 ) )) ), new io . gs2 . cdk . enhance . model . RateModel ( \"character-level\" , \"grn:inventory:character\" , \":level\" , \"grn:inventory:material\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , new io . gs2 . cdk . enhance . model . options . RateModelOptions () . withMetadata ( \"CHARACTER_LEVEL\" ) . withAcquireExperienceHierarchy ( Arrays . asList ( \"experience\" )) . withBonusRates ( Arrays . asList ( new io . gs2 . cdk . enhance . model . BonusRate ( 1f , 90 ), new io . gs2 . cdk . enhance . model . BonusRate ( 1 . 5f , 9 ), new io . gs2 . cdk . enhance . model . BonusRate ( 2f , 1 ) )) ) ), Arrays . asList ( ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Enhance . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Enhance . Model . RateModel [] { new Gs2Cdk . Gs2Enhance . Model . RateModel ( name : \"character-friendly\" , targetInventoryModelId : \"grn:inventory:character\" , acquireExperienceSuffix : \":friendly\" , materialInventoryModelId : \"grn:inventory:sweet\" , experienceModelId : \"grn:experience:friendly\" , options : new Gs2Cdk . Gs2Enhance . Model . Options . RateModelOptions { metadata = \"CHARACTER_FRIENDLY\" , acquireExperienceHierarchy = new string [] { \"taste\" }, bonusRates = new Gs2Cdk . Gs2Enhance . Model . BonusRate [] { new Gs2Cdk . Gs2Enhance . Model . BonusRate ( rate : 1f , weight : 90 ) } } ), new Gs2Cdk . Gs2Enhance . Model . RateModel ( name : \"character-level\" , targetInventoryModelId : \"grn:inventory:character\" , acquireExperienceSuffix : \":level\" , materialInventoryModelId : \"grn:inventory:material\" , experienceModelId : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , options : new Gs2Cdk . Gs2Enhance . Model . Options . RateModelOptions { metadata = \"CHARACTER_LEVEL\" , acquireExperienceHierarchy = new string [] { \"experience\" }, bonusRates = new Gs2Cdk . Gs2Enhance . Model . BonusRate [] { new Gs2Cdk . Gs2Enhance . Model . BonusRate ( rate : 1f , weight : 90 ), new Gs2Cdk . Gs2Enhance . Model . BonusRate ( rate : 1.5f , weight : 9 ), new Gs2Cdk . Gs2Enhance . Model . BonusRate ( rate : 2f , weight : 1 ) } } ) }, new Gs2Cdk . Gs2Enhance . Model . UnleashRateModel [] { } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import enhance from \"@/gs2cdk/enhance\" ; class SampleStack extends core . Stack { public constructor () { super (); new enhance . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new enhance . model . RateModel ( \"character-friendly\" , \"grn:inventory:character\" , \":friendly\" , \"grn:inventory:sweet\" , \"grn:experience:friendly\" , { metadata : \"CHARACTER_FRIENDLY\" , acquireExperienceHierarchy : [ \"taste\" , ], bonusRates : [ new enhance . model . BonusRate ( 1 , 90 ), ] } ), new enhance . model . RateModel ( \"character-level\" , \"grn:inventory:character\" , \":level\" , \"grn:inventory:material\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , { metadata : \"CHARACTER_LEVEL\" , acquireExperienceHierarchy : [ \"experience\" , ], bonusRates : [ new enhance . model . BonusRate ( 1 , 90 ), new enhance . model . BonusRate ( 1.5 , 9 ), new enhance . model . BonusRate ( 2 , 1 ), ] } ) ], [ ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , enhance class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () enhance . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( rate_models = [ enhance . RateModel ( name = 'character-friendly' , target_inventory_model_id = 'grn:inventory:character' , acquire_experience_suffix = ':friendly' , material_inventory_model_id = 'grn:inventory:sweet' , experience_model_id = 'grn:experience:friendly' , options = enhance . RateModelOptions ( metadata = 'CHARACTER_FRIENDLY' , acquire_experience_hierarchy = [ 'taste' , ], bonus_rates = [ enhance . BonusRate ( rate = 1 , weight = 90 , ), ] ), ), enhance . RateModel ( name = 'character-level' , target_inventory_model_id = 'grn:inventory:character' , acquire_experience_suffix = ':level' , material_inventory_model_id = 'grn:inventory:material' , experience_model_id = 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level' , options = enhance . RateModelOptions ( metadata = 'CHARACTER_LEVEL' , acquire_experience_hierarchy = [ 'experience' , ], bonus_rates = [ enhance . BonusRate ( rate = 1 , weight = 90 , ), enhance . BonusRate ( rate = 1.5 , weight = 9 , ), enhance . BonusRate ( rate = 2 , weight = 1 , ), ] ), ), ], unleash_rate_models = [ ], ) print ( SampleStack () . yaml ()) # Generate Template RateModel 강화 레이트 모델 강화 레이트는 강화에 사용하는 소재와 강화 대상을 정의한 데이터입니다. 소재 데이터와 강화 대상 데이터는 모두 GS2-Inventory에서 관리되고 있어야 합니다. 강화로 얻는 경험치는 GS2-Inventory의 메타데이터에 JSON 형식으로 기록됩니다. 여기서는 메타데이터의 어느 계층에 경험치 값이 저장되어 있는지를 기재해야 합니다. 강화 시 일정 확률로 대성공 과 같은 형태로 입수할 수 있는 경험치량에 보정값을 적용할 수 있습니다. 그 추첨 확률도 이 엔티티에서 정의합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rateModelId string ※ ~ 1024자 강화 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 강화 대상으로 사용할 수 있는 GS2-Inventory 인벤토리 모델의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 강화되는 아이템은 이 인벤토리 모델에 속해 있어야 합니다. acquireExperienceSuffix string  ~ 1024자 GS2-Experience에서 획득한 경험치를 저장하는 프로퍼티 ID에 부여하는 서픽스 아이템의 프로퍼티 ID 끝에 추가되어, 경험치가 저장되는 GS2-Experience의 프로퍼티 ID를 구성하는 문자열입니다. 같은 아이템에 여러 경험치 종류를 부여할 수 있습니다(예: 캐릭터 레벨의 “level”, 호감도의 “like”). materialInventoryModelId string  ~ 1024자 강화 소재로 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 사용할 수 있는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 각 소재가 제공하는 경험치는 acquireExperienceHierarchy로 지정된 JSON 계층을 사용하여 아이템 모델의 메타데이터에 정의됩니다. acquireExperienceHierarchy List 0 ~ 10 items ItemModel의 메타데이터에 저장할, 획득 경험치를 정의하는 JSON 데이터의 계층 구조 정의 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 기능이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 예를 들어, { “aaa”: { “bbb”: { “experienceValue”: 100 } } }와 같은 구조의 데이터 정의로 메타데이터에 설정하고 싶은 경우에는 [ “aaa”, “bbb”, “experienceValue” ]와 같이 지정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. experienceModelId string  ~ 1024자 강화 결과로 얻는 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화로 얻은 경험치가 기록되는 GS2-Experience의 경험치 모델을 지정합니다. 경험치는 대상 아이템의 프로퍼티 ID와 acquireExperienceSuffix를 조합하여 식별되는 프로퍼티에 가산됩니다. bonusRates List 0 ~ 1000 items 경험치 획득량 보너스 강화 시 보너스 경험치 배율의 가중치 추첨을 정의합니다. 각 항목은 배율(예: 1.5로 150%)과 추첨 가중치를 지정합니다. 강화 실행 시 가중치 추첨으로 하나의 항목이 선택되어, 획득 경험치에 “대성공” 보너스가 적용되는지 여부가 결정됩니다. BonusRate 경험치 획득량 보너스 강화 시 경험치 보너스 배율을 결정하는 가중치 추첨의 단일 항목을 정의합니다. 서로 다른 배율과 가중치를 가진 여러 항목을 설정함으로써, 제어된 확률에 따른 “대성공\"이나 “초성공” 같은 시스템을 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rate float 1.0 0 ~ 10000 경험치 보너스 배율 (1.0 = 보너스 없음) 이 항목이 추첨되었을 때 기본 경험치에 적용되는 배율입니다. 1.0은 보너스 없는 일반 강화, 1.5는 경험치 150%(대성공), 2.0은 경험치 200%(초성공) 등을 의미합니다. weight int 1 0 ~ 2147483645 추첨 가중치 보너스 레이트를 선택하는 가중치 추첨에서 사용되는 상대적인 가중치입니다. 값이 클수록 이 보너스 레이트가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 보너스 레이트 목록 내 모든 가중치의 합계로 나눈 값이 됩니다. UnleashRateModel 한계돌파 레이트 모델 아이템의 한계돌파(해방) 조건을 정의합니다. GS2-Inventory에서 관리되는 아이템과 GS2-Grade의 그레이드 모델을 연결하여 그레이드 진행을 가능하게 합니다. 각 그레이드 레벨에서 소비하는 동일 종류 아이템의 수를 개별적으로 설정할 수 있어, 각 한계돌파 단계의 비용을 세밀하게 제어할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 unleashRateModelId string ※ ~ 1024자 한계돌파 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 한계돌파 대상에 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 한계돌파 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 한계돌파하는 아이템과 소재로 소비되는 동일 종류 아이템 모두 이 인벤토리 모델에 속해 있어야 합니다. gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 대상 아이템의 한계돌파 레벨을 추적하는 GS2-Grade의 그레이드 모델을 지정합니다. 한계돌파가 성공하면, 이 그레이드 모델 내에서 아이템의 그레이드가 가산됩니다. gradeEntries List  1 ~ 1000 items 그레이드 엔트리 목록 한계돌파의 각 그레이드 레벨에 대한 소재 비용을 정의합니다. 각 엔트리는 그레이드 값과, 해당 그레이드에 도달하기 위해 소비해야 하는 동일 종류 아이템 수를 매핑합니다. 예를 들어, 그레이드 1은 복제품 1개, 그레이드 2는 복제품 3개와 같이 설정할 수 있습니다. UnleashRateEntryModel 한계돌파 레이트 엔트리 모델 한계돌파 진행에서 단일 그레이드 레벨의 소재 비용을 정의합니다. 각 엔트리는 대상이 되는 그레이드 값과, 해당 그레이드를 달성하기 위해 소비해야 하는 동일 종류 아이템의 수를 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gradeValue long  1 ~ 1000 대상 그레이드 이 엔트리가 비용을 정의하는 그레이드 값입니다. 이 그레이드 레벨로의 한계돌파를 실행할 때, needCount로 지정된 수의 아이템이 소비됩니다. needCount int  1 ~ 1000 동일 종류의 아이템을 몇 개 소비할지 대상 그레이드로의 한계돌파를 실행하기 위해 소비해야 하는 동일 종류 아이템의 수입니다. 이 아이템들은 한계돌파되는 아이템과 동일한 아이템 모델의 것입니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Enhance Deploy/CDK 레퍼런스","url":"/ko/api_reference/enhance/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 enableAwaitExchange bool false 교환 결과 수령에 대기 시간이 발생하는 교환 기능을 사용할지 여부 활성화하면 await 타이밍 타입의 교환 레이트 모델을 사용할 수 있습니다. 이러한 교환은 보상을 받기 전에 실시간 경과가 필요하며, 플레이어가 결과를 기다려야 하는 제작이나 생산 계열의 메커니즘을 구현할 수 있습니다. enableDirectExchange bool true 직접 교환 API 호출 허용 활성화하면 클라이언트가 교환 API를 직접 호출하여 리소스 교환을 실행할 수 있습니다. 비활성화하면 트랜잭션 액션을 통해서만 교환이 트리거되어, 교환 발생에 대한 서버 측 제어가 더욱 엄격해집니다. transactionSetting TransactionSetting  트랜잭션 설정 교환 조작 시 분산 트랜잭션의 실행 방식을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. exchangeScript ScriptSetting 교환을 실행하려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - exchange incrementalExchangeScript ScriptSetting 코스트 상승형 교환을 실행하려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - incrementalExchange acquireAwaitScript ScriptSetting 대기 방식 교환 처리에서 대기가 완료되어 보상을 받으려고 할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquireAwait logSetting LogSetting 로그 출력 설정 교환 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 교환, 코스트 상승형 교환, 대기 조작의 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Exchange::Namespace Properties : Name : namespace-0001 Description : null EnableAwaitExchange : null EnableDirectExchange : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 ExchangeScript : null IncrementalExchangeScript : null AcquireAwaitScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/exchange\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () exchange . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , exchange . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Exchange\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Exchange\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . exchange . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . exchange . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Exchange . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Exchange . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import exchange from \"@/gs2cdk/exchange\" ; class SampleStack extends core . Stack { public constructor () { super (); new exchange . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , exchange class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () exchange . Namespace ( stack = self , name = 'namespace-0001' , options = exchange . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentRateMaster 현재 활성화된 레이트 모델의 마스터 데이터 이 마스터 데이터는 현재 네임스페이스 내에서 유효한 레이트 모델의 정의를 기술한 것입니다. GS2에서는 마스터 데이터의 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Exchange 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentRateMaster 갱신된 현재 활성화된 레이트 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Exchange::CurrentRateMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-08-19\" , \"rateModels\": [ { \"name\": \"material_n_to_r\" , \"timingType\": \"await\" , \"metadata\": \"N2R\" , \"consumeActions\": [ { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"consumeCount\": 1 , \"itemSetName\": \"#{itemSetName}\" , \"userId\": \"#{userId}\" } } ], \"lockTime\": 50 , \"acquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ] } , { \"name\": \"material_r_to_n\" , \"timingType\": \"await\" , \"metadata\": \"N2R\" , \"consumeActions\": [ { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"consumeCount\": 1 , \"itemSetName\": \"#{itemSetName}\" , \"userId\": \"#{userId}\" } } ], \"lockTime\": 50 , \"acquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ] } ], \"incrementalRateModels\": [] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/exchange\" \"github.com/gs2io/gs2-golang-cdk/inventory\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () exchange . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , exchange . NamespaceOptions {}, ). MasterData ( [] exchange . RateModel { exchange . NewRateModel ( \"material_n_to_r\" , exchange . RateModelTimingTypeAwait , exchange . RateModelOptions { Metadata : pointy . String ( \"N2R\" ), ConsumeActions : [] core . ConsumeAction { inventory . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . String ( \"#{itemSetName}\" ), ), }, LockTime : pointy . Int32 ( 50 ), AcquireActions : [] core . AcquireAction { inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, }, ), exchange . NewRateModel ( \"material_r_to_n\" , exchange . RateModelTimingTypeAwait , exchange . RateModelOptions { Metadata : pointy . String ( \"N2R\" ), ConsumeActions : [] core . ConsumeAction { inventory . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . String ( \"#{itemSetName}\" ), ), }, LockTime : pointy . Int32 ( 50 ), AcquireActions : [] core . AcquireAction { inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, }, ), }, [] exchange . IncrementalRateModel { }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Exchange\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Exchange\\Model\\RateModel ( name : \"material_n_to_r\" , timingType : \\Gs2Cdk\\Exchange\\Model\\Enums\\RateModelTimingType :: AWAIT , options : new \\Gs2Cdk\\Exchange\\Model\\Options\\RateModelOptions ( metadata : \"N2R\" , consumeActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ), ], lockTime : 50 , acquireActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ] ) ), new \\Gs2Cdk\\Exchange\\Model\\RateModel ( name : \"material_r_to_n\" , timingType : \\Gs2Cdk\\Exchange\\Model\\Enums\\RateModelTimingType :: AWAIT , options : new \\Gs2Cdk\\Exchange\\Model\\Options\\RateModelOptions ( metadata : \"N2R\" , consumeActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ), ], lockTime : 50 , acquireActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ] ) ) ], [ ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . exchange . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . exchange . model . RateModel ( \"material_n_to_r\" , io . gs2 . cdk . exchange . model . enums . RateModelTimingType . AWAIT , new io . gs2 . cdk . exchange . model . options . RateModelOptions () . withMetadata ( \"N2R\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , \"#{itemSetName}\" , \"#{userId}\" ) )) . withLockTime ( 50 ) . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) )) ), new io . gs2 . cdk . exchange . model . RateModel ( \"material_r_to_n\" , io . gs2 . cdk . exchange . model . enums . RateModelTimingType . AWAIT , new io . gs2 . cdk . exchange . model . options . RateModelOptions () . withMetadata ( \"N2R\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , \"#{itemSetName}\" , \"#{userId}\" ) )) . withLockTime ( 50 ) . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) )) ) ), Arrays . asList ( ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Exchange . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Exchange . Model . RateModel [] { new Gs2Cdk . Gs2Exchange . Model . RateModel ( name : \"material_n_to_r\" , timingType : Gs2Cdk . Gs2Exchange . Model . Enums . RateModelTimingType . Await , options : new Gs2Cdk . Gs2Exchange . Model . Options . RateModelOptions { metadata = \"N2R\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ) }, lockTime = 50 , acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Exchange . Model . RateModel ( name : \"material_r_to_n\" , timingType : Gs2Cdk . Gs2Exchange . Model . Enums . RateModelTimingType . Await , options : new Gs2Cdk . Gs2Exchange . Model . Options . RateModelOptions { metadata = \"N2R\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ) }, lockTime = 50 , acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ) } } ) }, new Gs2Cdk . Gs2Exchange . Model . IncrementalRateModel [] { } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import exchange from \"@/gs2cdk/exchange\" ; import inventory from \"@/gs2cdk/inventory\" ; class SampleStack extends core . Stack { public constructor () { super (); new exchange . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new exchange . model . RateModel ( \"material_n_to_r\" , exchange . model . RateModelTimingType . AWAIT , { metadata : \"N2R\" , consumeActions : [ new inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , \"#{itemSetName}\" , null , \"#{userId}\" ), ], lockTime : 50 , acquireActions : [ new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ] } ), new exchange . model . RateModel ( \"material_r_to_n\" , exchange . model . RateModelTimingType . AWAIT , { metadata : \"N2R\" , consumeActions : [ new inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , \"#{itemSetName}\" , null , \"#{userId}\" ), ], lockTime : 50 , acquireActions : [ new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ] } ) ], [ ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , exchange , inventory class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () exchange . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( rate_models = [ exchange . RateModel ( name = 'material_n_to_r' , timing_type = exchange . RateModelTimingType . AWAIT , options = exchange . RateModelOptions ( metadata = 'N2R' , consume_actions = [ inventory . ConsumeItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , consume_count = 1 , item_set_name = '# {itemSetName} ' , user_id = '# {userId} ' ), ], lock_time = 50 , acquire_actions = [ inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ] ), ), exchange . RateModel ( name = 'material_r_to_n' , timing_type = exchange . RateModelTimingType . AWAIT , options = exchange . RateModelOptions ( metadata = 'N2R' , consume_actions = [ inventory . ConsumeItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , consume_count = 1 , item_set_name = '# {itemSetName} ' , user_id = '# {userId} ' ), ], lock_time = 50 , acquire_actions = [ inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ] ), ), ], incremental_rate_models = [ ], ) print ( SampleStack () . yaml ()) # Generate Template RateModel 교환 레이트 모델 교환 레이트 모델은 리소스와 리소스를 교환할 때 사용하는 레이트를 정의하는 엔티티입니다. 즉시 교환할 수 있는 레이트뿐만 아니라, 현실 시간으로 일정 시간이 경과한 후에 교환할 수 있는 레이트도 설정할 수 있습니다. 현실 시간의 경과가 필요한 교환 레이트에는 즉시 교환을 실행하는 데 필요한 리소스를 추가로 정의할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rateModelId string ※ ~ 1024자 교환 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 교환이 실행되기 전에 모두 통과해야 하는 사전 조건 체크입니다. 검증 액션 중 하나라도 실패하면, 리소스를 소비하지 않고 교환이 중단됩니다. 레벨 요건이나 인벤토리 용량 등의 조건을 강제하기 위해 사용됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 교환을 실행하기 위해 플레이어가 지불해야 하는 리소스(코스트)를 정의합니다. 여러 개의 소비 액션을 지정할 수 있어, 골드와 아이템을 모두 필요로 하는 것과 같은 복잡한 교환 코스트를 구현할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 소비 액션으로 실행됩니다. timingType 문자열 열거형 enum {   “immediate”,   “await” } “immediate” 교환 종류 교환 실행 후 보상이 언제 전달되는지를 결정합니다. immediate 는 교환 실행 시 즉시 보상을 전달합니다. await 는 보상을 받기 전에 실시간의 경과가 필요하며, 대기 기간(예: 제작 시간)을 둡니다. 정의 설명 immediate 즉시 await 현실 시간의 경과 대기 lockTime int {timingType} == “await” ※ 0 ~ 538214400 교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분) timingType이 await 인 경우에만 적용됩니다. 교환이 시작된 후 플레이어가 보상을 받을 수 있게 되기까지 경과해야 하는 실시간 분수를 지정합니다. 대기 시간은 스킵 기능을 사용하여 단축할 수 있습니다. ※ timingType이(가) “await” 이면 필수 acquireActions List [] 0 ~ 100 items 획득 액션 리스트 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 여러 개의 획득 액션을 지정하여 다양한 리소스 타입을 동시에 지급할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 획득 액션으로 실행됩니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 IncrementalRateModel 코스트 상승형 교환 레이트 모델 일반적인 교환 레이트는 항상 일정한 레이트로 교환을 제공합니다. 상승형 교환 레이트에서는 교환 횟수에 따라 코스트가 상승하는 레이트를 정의할 수 있습니다. 예를 들어, 첫 번째 교환에서는 1:1로 교환할 수 있지만, 두 번째 교환에서는 2:1로 교환하게 되는 것과 같은 레이트를 정의할 수 있습니다. 이러한 레이트를 정의함으로써 플레이어가 게임을 진행함에 따라 얻을 수 있는 리소스의 가치를 높일 수 있습니다. 교환 횟수는 현실 시간의 경과에 따라 리셋할 수 있습니다. 이 기능을 이용하면 매일 또는 매주 교환에 필요한 코스트를 리셋할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 incrementalRateModelId string ※ ~ 1024자 코스트 상승형 교환 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. consumeAction ConsumeAction  소비 액션 (수량/값은 자동으로 덮어써집니다) 교환 비용으로 소비되는 리소스의 종류를 정의합니다. 실제 수량은 교환 횟수와 계산 방식(선형, 거듭제곱, 스크립트)에 기반하여 동적으로 계산됩니다. 액션 종류와 대상 리소스만 지정하면 되며, 수량 필드는 자동으로 덮어써집니다. calculateType 문자열 열거형 enum {   “linear”,   “power”,   “gs2_script” }  코스트 상승량 계산 방식 교환 횟수에 따라 코스트가 어떻게 상승하는지를 결정합니다. linear 는 코스트를 baseValue +（coefficientValue × 교환 횟수）로 계산합니다. power 는 코스트를 coefficientValue ×（교환 횟수 + 1）^2로 계산합니다. gs2_script 는 임의의 로직을 위해 커스텀 GS2-Script에 계산을 위임합니다. 정의 설명 linear 베이스 값 + (계수 * 교환 횟수) power 계수 * (교환 횟수 + 1) ^ 2 gs2_script GS2-Script에 의한 임의의 로직 baseValue long {calculateType} == “linear” ※ 0 ~ 9223372036854775805 베이스 값 linear 계산 방식을 사용하는 경우 첫 교환 시의 기본 코스트입니다. 합계 코스트는 baseValue +（coefficientValue × 교환 횟수）로 계산됩니다. ※ calculateType이(가) “linear” 이면 필수 coefficientValue long {calculateType} in [“linear”, “power”] ※ 0 ~ 9223372036854775805 계수 교환 횟수에 따라 코스트가 얼마나 빠르게 상승하는지를 제어하는 승수입니다. linear 모드에서는 각 교환마다 이 값이 코스트에 더해집니다. power 모드에서는 코스트가 coefficientValue ×（교환 횟수 + 1）^2로 계산됩니다. ※ calculateType이(가) “linear”,“power\"이면 필수 calculateScriptId string {calculateType} == “gs2_script” ※ ~ 1024자 코스트 계산 스크립트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - calculateCost ※ calculateType이(가) “gs2_script” 이면 필수 exchangeCountId string  ~ 1024자 교환 실행 횟수를 관리하는 GS2-Limit의 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 각 사용자가 이 코스트 상승형 교환을 몇 번 실행했는지 추적하는 GS2-Limit의 횟수 제한 모델을 참조합니다. 카운트는 상승하는 코스트 계산에 사용되며, GS2-Limit의 리셋 타이밍을 사용하여 정기적으로(예: 매일 또는 매주) 리셋할 수 있습니다. maximumExchangeCount int 2147483646 0 ~ 2147483646 교환 횟수 상한 사용자가 이 코스트 상승형 교환을 실행할 수 있는 최대 횟수입니다. 교환 횟수가 이 상한에 도달하면, GS2-Limit에 의한 카운트 리셋까지 이후의 교환이 거부됩니다. acquireActions List [] 0 ~ 100 items 획득 액션 리스트 코스트 상승형 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 보상은 교환 횟수와 관계없이 일정하며, 코스트만 교환마다 증가합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Exchange Deploy/CDK 레퍼런스","url":"/ko/api_reference/exchange/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 경험치 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. rankCapScriptId string ~ 1024자 랭크 캡을 동적으로 결정하는 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - rankCapScript changeExperienceScript ScriptSetting 경험치가 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeExperience changeRankScript ScriptSetting 랭크가 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeRank changeRankCapScript ScriptSetting 랭크 캡이 변화했을 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - changeRankCap overflowExperienceScript string ~ 1024자 경험치 초과 시 실행하는 스크립트의 GRN Script 트리거 레퍼런스 - overflowExperience logSetting LogSetting 로그 출력 설정 경험치 조작의 로그 데이터를 GS2-Log로 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 경험치 변동, 랭크업, 랭크 캡 변경의 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Experience::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null RankCapScriptId : null ChangeExperienceScript : null ChangeRankScript : null ChangeRankCapScript : null OverflowExperienceScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/experience\" ) SampleStack := core . NewStack () experience . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , experience . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Experience\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Experience\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . experience . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . experience . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Experience . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Experience . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import experience from \"@/gs2cdk/experience\" ; class SampleStack extends core . Stack { public constructor () { super (); new experience . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , experience class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () experience . Namespace ( stack = self , name = 'namespace-0001' , options = experience . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·경합 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue에 의한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentExperienceMaster 현재 활성화된 경험치 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 경험치 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 툴을 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Experience 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentExperienceMaster 업데이트된 현재 활성화된 경험치 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Experience::CurrentExperienceMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-01-11\" , \"experienceModels\": [ { \"name\": \"character_ssr\" , \"defaultExperience\": 0 , \"defaultRankCap\": 50 , \"maxRankCap\": 80 , \"rankThreshold\" : { \"metadata\": \"CHARACTER\" , \"values\": [ 100 , 200 , 300 , 400 , 500 ] } , \"metadata\": \"SSR\" } , { \"name\": \"character_sr\" , \"defaultExperience\": 0 , \"defaultRankCap\": 40 , \"maxRankCap\": 70 , \"rankThreshold\" : { \"metadata\": \"CHARACTER\" , \"values\": [ 100 , 200 , 300 , 400 , 500 ] } , \"metadata\": \"SR\" } , { \"name\": \"character_r\" , \"defaultExperience\": 0 , \"defaultRankCap\": 30 , \"maxRankCap\": 60 , \"rankThreshold\" : { \"metadata\": \"CHARACTER\" , \"values\": [ 100 , 200 , 300 , 400 , 500 ] } , \"metadata\": \"R\" } , { \"name\": \"equipment\" , \"defaultExperience\": 0 , \"defaultRankCap\": 30 , \"maxRankCap\": 50 , \"rankThreshold\" : { \"metadata\": \"EQUIPMENT\" , \"values\": [ 200 , 400 , 600 , 800 , 1000 ] } , \"metadata\": \"EQUIPMENT\" , \"acquireActionRates\": [ { \"name\": \"rate-0001\" , \"mode\": \"big\" , \"bigRates\": [ \"1\" , \"10\" , \"100\" , \"1000\" , \"10000\" ] } ] } , { \"name\": \"skill\" , \"defaultExperience\": 0 , \"defaultRankCap\": 10 , \"maxRankCap\": 20 , \"rankThreshold\" : { \"metadata\": \"SKILL\" , \"values\": [ 300 , 600 , 900 , 1200 , 1500 ] } , \"metadata\": \"SKILL\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/experience\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () experience . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , experience . NamespaceOptions {}, ). MasterData ( [] experience . ExperienceModel { experience . NewExperienceModel ( \"character_ssr\" , 0 , 50 , 80 , experience . NewThreshold ( [] int64 { 100 , 200 , 300 , 400 , 500 , }, experience . ThresholdOptions { Metadata : pointy . String ( \"CHARACTER\" ), }, ), experience . ExperienceModelOptions { Metadata : pointy . String ( \"SSR\" ), }, ), experience . NewExperienceModel ( \"character_sr\" , 0 , 40 , 70 , experience . NewThreshold ( [] int64 { 100 , 200 , 300 , 400 , 500 , }, experience . ThresholdOptions { Metadata : pointy . String ( \"CHARACTER\" ), }, ), experience . ExperienceModelOptions { Metadata : pointy . String ( \"SR\" ), }, ), experience . NewExperienceModel ( \"character_r\" , 0 , 30 , 60 , experience . NewThreshold ( [] int64 { 100 , 200 , 300 , 400 , 500 , }, experience . ThresholdOptions { Metadata : pointy . String ( \"CHARACTER\" ), }, ), experience . ExperienceModelOptions { Metadata : pointy . String ( \"R\" ), }, ), experience . NewExperienceModel ( \"equipment\" , 0 , 30 , 50 , experience . NewThreshold ( [] int64 { 200 , 400 , 600 , 800 , 1000 , }, experience . ThresholdOptions { Metadata : pointy . String ( \"EQUIPMENT\" ), }, ), experience . ExperienceModelOptions { Metadata : pointy . String ( \"EQUIPMENT\" ), AcquireActionRates : [] experience . AcquireActionRate { experience . NewAcquireActionRate ( \"rate-0001\" , experience . AcquireActionRateModeBig , experience . AcquireActionRateOptions { BigRates : [] string { \"1\" , \"10\" , \"100\" , \"1000\" , \"10000\" , }, }, ), }, }, ), experience . NewExperienceModel ( \"skill\" , 0 , 10 , 20 , experience . NewThreshold ( [] int64 { 300 , 600 , 900 , 1200 , 1500 , }, experience . ThresholdOptions { Metadata : pointy . String ( \"SKILL\" ), }, ), experience . ExperienceModelOptions { Metadata : pointy . String ( \"SKILL\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Experience\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Experience\\Model\\ExperienceModel ( name : \"character_ssr\" , defaultExperience : 0 , defaultRankCap : 50 , maxRankCap : 80 , rankThreshold : new \\Gs2Cdk\\Experience\\Model\\Threshold ( values : [ 100 , 200 , 300 , 400 , 500 , ], options : new \\Gs2Cdk\\Experience\\Model\\Options\\ThresholdOptions ( metadata : \"CHARACTER\" , ), ), options : new \\Gs2Cdk\\Experience\\Model\\Options\\ExperienceModelOptions ( metadata : \"SSR\" ) ), new \\Gs2Cdk\\Experience\\Model\\ExperienceModel ( name : \"character_sr\" , defaultExperience : 0 , defaultRankCap : 40 , maxRankCap : 70 , rankThreshold : new \\Gs2Cdk\\Experience\\Model\\Threshold ( values : [ 100 , 200 , 300 , 400 , 500 , ], options : new \\Gs2Cdk\\Experience\\Model\\Options\\ThresholdOptions ( metadata : \"CHARACTER\" , ), ), options : new \\Gs2Cdk\\Experience\\Model\\Options\\ExperienceModelOptions ( metadata : \"SR\" ) ), new \\Gs2Cdk\\Experience\\Model\\ExperienceModel ( name : \"character_r\" , defaultExperience : 0 , defaultRankCap : 30 , maxRankCap : 60 , rankThreshold : new \\Gs2Cdk\\Experience\\Model\\Threshold ( values : [ 100 , 200 , 300 , 400 , 500 , ], options : new \\Gs2Cdk\\Experience\\Model\\Options\\ThresholdOptions ( metadata : \"CHARACTER\" , ), ), options : new \\Gs2Cdk\\Experience\\Model\\Options\\ExperienceModelOptions ( metadata : \"R\" ) ), new \\Gs2Cdk\\Experience\\Model\\ExperienceModel ( name : \"equipment\" , defaultExperience : 0 , defaultRankCap : 30 , maxRankCap : 50 , rankThreshold : new \\Gs2Cdk\\Experience\\Model\\Threshold ( values : [ 200 , 400 , 600 , 800 , 1000 , ], options : new \\Gs2Cdk\\Experience\\Model\\Options\\ThresholdOptions ( metadata : \"EQUIPMENT\" , ), ), options : new \\Gs2Cdk\\Experience\\Model\\Options\\ExperienceModelOptions ( metadata : \"EQUIPMENT\" , acquireActionRates : [ new \\Gs2Cdk\\Experience\\Model\\AcquireActionRate ( name : \"rate-0001\" , mode : \\Gs2Cdk\\Experience\\Model\\Enums\\AcquireActionRateMode :: BIG , options : new \\Gs2Cdk\\Experience\\Model\\Options\\AcquireActionRateOptions ( bigRates : [ \"1\" , \"10\" , \"100\" , \"1000\" , \"10000\" , ], ), ), ] ) ), new \\Gs2Cdk\\Experience\\Model\\ExperienceModel ( name : \"skill\" , defaultExperience : 0 , defaultRankCap : 10 , maxRankCap : 20 , rankThreshold : new \\Gs2Cdk\\Experience\\Model\\Threshold ( values : [ 300 , 600 , 900 , 1200 , 1500 , ], options : new \\Gs2Cdk\\Experience\\Model\\Options\\ThresholdOptions ( metadata : \"SKILL\" , ), ), options : new \\Gs2Cdk\\Experience\\Model\\Options\\ExperienceModelOptions ( metadata : \"SKILL\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . experience . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . experience . model . ExperienceModel ( \"character_ssr\" , 0L , 50L , 80L , new io . gs2 . cdk . experience . model . Threshold ( Arrays . asList ( 100L , 200L , 300L , 400L , 500L ), new io . gs2 . cdk . experience . model . options . ThresholdOptions () . withMetadata ( \"CHARACTER\" ) ), new io . gs2 . cdk . experience . model . options . ExperienceModelOptions () . withMetadata ( \"SSR\" ) ), new io . gs2 . cdk . experience . model . ExperienceModel ( \"character_sr\" , 0L , 40L , 70L , new io . gs2 . cdk . experience . model . Threshold ( Arrays . asList ( 100L , 200L , 300L , 400L , 500L ), new io . gs2 . cdk . experience . model . options . ThresholdOptions () . withMetadata ( \"CHARACTER\" ) ), new io . gs2 . cdk . experience . model . options . ExperienceModelOptions () . withMetadata ( \"SR\" ) ), new io . gs2 . cdk . experience . model . ExperienceModel ( \"character_r\" , 0L , 30L , 60L , new io . gs2 . cdk . experience . model . Threshold ( Arrays . asList ( 100L , 200L , 300L , 400L , 500L ), new io . gs2 . cdk . experience . model . options . ThresholdOptions () . withMetadata ( \"CHARACTER\" ) ), new io . gs2 . cdk . experience . model . options . ExperienceModelOptions () . withMetadata ( \"R\" ) ), new io . gs2 . cdk . experience . model . ExperienceModel ( \"equipment\" , 0L , 30L , 50L , new io . gs2 . cdk . experience . model . Threshold ( Arrays . asList ( 200L , 400L , 600L , 800L , 1000L ), new io . gs2 . cdk . experience . model . options . ThresholdOptions () . withMetadata ( \"EQUIPMENT\" ) ), new io . gs2 . cdk . experience . model . options . ExperienceModelOptions () . withMetadata ( \"EQUIPMENT\" ) . withAcquireActionRates ( Arrays . asList ( new io . gs2 . cdk . experience . model . AcquireActionRate ( \"rate-0001\" , io . gs2 . cdk . experience . model . enums . AcquireActionRateMode . BIG , new io . gs2 . cdk . experience . model . options . AcquireActionRateOptions () . withBigRates ( Arrays . asList ( \"1\" , \"10\" , \"100\" , \"1000\" , \"10000\" )) ) )) ), new io . gs2 . cdk . experience . model . ExperienceModel ( \"skill\" , 0L , 10L , 20L , new io . gs2 . cdk . experience . model . Threshold ( Arrays . asList ( 300L , 600L , 900L , 1200L , 1500L ), new io . gs2 . cdk . experience . model . options . ThresholdOptions () . withMetadata ( \"SKILL\" ) ), new io . gs2 . cdk . experience . model . options . ExperienceModelOptions () . withMetadata ( \"SKILL\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Experience . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Experience . Model . ExperienceModel [] { new Gs2Cdk . Gs2Experience . Model . ExperienceModel ( name : \"character_ssr\" , defaultExperience : 0L , defaultRankCap : 50L , maxRankCap : 80L , rankThreshold : new Gs2Cdk . Gs2Experience . Model . Threshold ( values : new long [] { 100L , 200L , 300L , 400L , 500L , }, options : new Gs2Cdk . Gs2Experience . Model . Options . ThresholdOptions { metadata = \"CHARACTER\" } ), options : new Gs2Cdk . Gs2Experience . Model . Options . ExperienceModelOptions { metadata = \"SSR\" } ), new Gs2Cdk . Gs2Experience . Model . ExperienceModel ( name : \"character_sr\" , defaultExperience : 0L , defaultRankCap : 40L , maxRankCap : 70L , rankThreshold : new Gs2Cdk . Gs2Experience . Model . Threshold ( values : new long [] { 100L , 200L , 300L , 400L , 500L , }, options : new Gs2Cdk . Gs2Experience . Model . Options . ThresholdOptions { metadata = \"CHARACTER\" } ), options : new Gs2Cdk . Gs2Experience . Model . Options . ExperienceModelOptions { metadata = \"SR\" } ), new Gs2Cdk . Gs2Experience . Model . ExperienceModel ( name : \"character_r\" , defaultExperience : 0L , defaultRankCap : 30L , maxRankCap : 60L , rankThreshold : new Gs2Cdk . Gs2Experience . Model . Threshold ( values : new long [] { 100L , 200L , 300L , 400L , 500L , }, options : new Gs2Cdk . Gs2Experience . Model . Options . ThresholdOptions { metadata = \"CHARACTER\" } ), options : new Gs2Cdk . Gs2Experience . Model . Options . ExperienceModelOptions { metadata = \"R\" } ), new Gs2Cdk . Gs2Experience . Model . ExperienceModel ( name : \"equipment\" , defaultExperience : 0L , defaultRankCap : 30L , maxRankCap : 50L , rankThreshold : new Gs2Cdk . Gs2Experience . Model . Threshold ( values : new long [] { 200L , 400L , 600L , 800L , 1000L , }, options : new Gs2Cdk . Gs2Experience . Model . Options . ThresholdOptions { metadata = \"EQUIPMENT\" } ), options : new Gs2Cdk . Gs2Experience . Model . Options . ExperienceModelOptions { metadata = \"EQUIPMENT\" , acquireActionRates = new Gs2Cdk . Gs2Experience . Model . AcquireActionRate [] { new Gs2Cdk . Gs2Experience . Model . AcquireActionRate ( name : \"rate-0001\" , mode : Gs2Cdk . Gs2Experience . Model . Enums . AcquireActionRateMode . Big , options : new Gs2Cdk . Gs2Experience . Model . Options . AcquireActionRateOptions { bigRates = new string [] { \"1\" , \"10\" , \"100\" , \"1000\" , \"10000\" , } } ) } } ), new Gs2Cdk . Gs2Experience . Model . ExperienceModel ( name : \"skill\" , defaultExperience : 0L , defaultRankCap : 10L , maxRankCap : 20L , rankThreshold : new Gs2Cdk . Gs2Experience . Model . Threshold ( values : new long [] { 300L , 600L , 900L , 1200L , 1500L , }, options : new Gs2Cdk . Gs2Experience . Model . Options . ThresholdOptions { metadata = \"SKILL\" } ), options : new Gs2Cdk . Gs2Experience . Model . Options . ExperienceModelOptions { metadata = \"SKILL\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import experience from \"@/gs2cdk/experience\" ; class SampleStack extends core . Stack { public constructor () { super (); new experience . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new experience . model . ExperienceModel ( \"character_ssr\" , 0 , 50 , 80 , new experience . model . Threshold ( [ 100 , 200 , 300 , 400 , 500 , ], { metadata : \"CHARACTER\" } ), { metadata : \"SSR\" } ), new experience . model . ExperienceModel ( \"character_sr\" , 0 , 40 , 70 , new experience . model . Threshold ( [ 100 , 200 , 300 , 400 , 500 , ], { metadata : \"CHARACTER\" } ), { metadata : \"SR\" } ), new experience . model . ExperienceModel ( \"character_r\" , 0 , 30 , 60 , new experience . model . Threshold ( [ 100 , 200 , 300 , 400 , 500 , ], { metadata : \"CHARACTER\" } ), { metadata : \"R\" } ), new experience . model . ExperienceModel ( \"equipment\" , 0 , 30 , 50 , new experience . model . Threshold ( [ 200 , 400 , 600 , 800 , 1000 , ], { metadata : \"EQUIPMENT\" } ), { metadata : \"EQUIPMENT\" , acquireActionRates : [ new experience . model . AcquireActionRate ( \"rate-0001\" , experience . model . AcquireActionRateMode . BIG , { bigRates : [ \"1\" , \"10\" , \"100\" , \"1000\" , \"10000\" , ] } ), ] } ), new experience . model . ExperienceModel ( \"skill\" , 0 , 10 , 20 , new experience . model . Threshold ( [ 300 , 600 , 900 , 1200 , 1500 , ], { metadata : \"SKILL\" } ), { metadata : \"SKILL\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , experience class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () experience . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( experience_models = [ experience . ExperienceModel ( name = 'character_ssr' , default_experience = 0 , default_rank_cap = 50 , max_rank_cap = 80 , rank_threshold = experience . Threshold ( values = [ 100 , 200 , 300 , 400 , 500 , ], options = experience . ThresholdOptions ( metadata = 'CHARACTER' , ), ), options = experience . ExperienceModelOptions ( metadata = 'SSR' ), ), experience . ExperienceModel ( name = 'character_sr' , default_experience = 0 , default_rank_cap = 40 , max_rank_cap = 70 , rank_threshold = experience . Threshold ( values = [ 100 , 200 , 300 , 400 , 500 , ], options = experience . ThresholdOptions ( metadata = 'CHARACTER' , ), ), options = experience . ExperienceModelOptions ( metadata = 'SR' ), ), experience . ExperienceModel ( name = 'character_r' , default_experience = 0 , default_rank_cap = 30 , max_rank_cap = 60 , rank_threshold = experience . Threshold ( values = [ 100 , 200 , 300 , 400 , 500 , ], options = experience . ThresholdOptions ( metadata = 'CHARACTER' , ), ), options = experience . ExperienceModelOptions ( metadata = 'R' ), ), experience . ExperienceModel ( name = 'equipment' , default_experience = 0 , default_rank_cap = 30 , max_rank_cap = 50 , rank_threshold = experience . Threshold ( values = [ 200 , 400 , 600 , 800 , 1000 , ], options = experience . ThresholdOptions ( metadata = 'EQUIPMENT' , ), ), options = experience . ExperienceModelOptions ( metadata = 'EQUIPMENT' , acquire_action_rates = [ experience . AcquireActionRate ( name = 'rate-0001' , mode = experience . AcquireActionRateMode . BIG , options = experience . AcquireActionRateOptions ( big_rates = [ '1' , '10' , '100' , '1000' , '10000' , ], ), ), ] ), ), experience . ExperienceModel ( name = 'skill' , default_experience = 0 , default_rank_cap = 10 , max_rank_cap = 20 , rank_threshold = experience . Threshold ( values = [ 300 , 600 , 900 , 1200 , 1500 , ], options = experience . ThresholdOptions ( metadata = 'SKILL' , ), ), options = experience . ExperienceModelOptions ( metadata = 'SKILL' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template ExperienceModel 경험치 모델 경험치와 랭크 시스템의 규칙을 정의합니다. 랭크업에 필요한 경험치의 임계값, 기본 랭크 캡, 최대 랭크 캡을 설정합니다. 랭크 캡은 스테이터스가 도달할 수 있는 최대 랭크를 제한하며, 스테이터스별로 최대 랭크 캡까지 인상할 수 있습니다(예: 한계돌파). 옵션으로 현재 랭크에 따라 보상 배율을 조정하는 입수 액션 레이트 테이블을 포함할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 experienceModelId string ※ ~ 1024자 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultExperience long 0 0 ~ 9223372036854775805 경험치 초기값 신규 생성된 스테이터스에 할당되는 경험치입니다. 일반적으로 플레이어가 진행의 처음부터 시작하도록 0으로 설정됩니다. 초기 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 결정됩니다. defaultRankCap long  0 ~ 9223372036854775805 랭크 캡 초기값 신규 생성된 스테이터스가 도달할 수 있는 기본 최대 랭크입니다. 이 랭크의 임계값을 초과한 경험치는 폐기되거나 오버플로 스크립트가 트리거됩니다. 랭크 캡은 한계돌파 등의 조작을 통해 스테이터스별로 maxRankCap까지 인상할 수 있습니다. maxRankCap long  0 ~ 9223372036854775805 랭크 캡의 최댓값 랭크 캡의 절대적인 상한입니다. 랭크 캡 증가 조작(한계돌파 등)을 수행하더라도 랭크 캡은 이 값을 초과할 수 없습니다. defaultRankCap 이상의 값이어야 합니다. rankThreshold Threshold  랭크업 임계값 각 랭크에 필요한 누적 경험치를 정의하는 임계값 테이블을 참조합니다. 임계값의 엔트리 수가 도달 가능한 최대 랭크를 결정하며, 각 엔트리의 값은 다음 랭크에 도달하는 데 필요한 경험치를 지정합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 목록 스테이터스의 랭크를 참조로 사용할 때 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 각 테이블은 랭크와 배율을 매핑하여, 동일한 액션에서도 더 높은 랭크의 캐릭터가 더 많은 보상을 받는 구조를 구현할 수 있습니다. Threshold 랭크업 임계값 랭크업 임계값은 경험치로부터 랭크(레벨)를 결정하는 데 필요한 수열입니다. [10, 20]이라는 값을 설정한 경우, 경험치 값이 0 9 사이면 랭크1, 10 19 사이면 랭크2, 경험치 값이 20이면 랭크3이 되며, 그 이상 경험치를 획득할 수 없게 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. values List  1 ~ 10000 items 랭크업 경험치 임계값 목록 랭크 진행을 정의하는 누적 경험치의 순서가 있는 배열입니다. 항목 수가 도달 가능한 최대 랭크를 결정합니다. 예를 들어 [10, 20]인 경우, 경험치 0 9에서 랭크1, 10 19에서 랭크2, 20 이상에서 랭크3(그 이상의 경험치 획득은 불가)이 됩니다. AcquireActionRate 보상 가산 테이블 상태의 현재 랭크에 따라 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 테이블의 각 항목은 랭크에 대응하며, 입수량에 적용되는 배율을 지정합니다. 표준적인 배정밀도 부동소수점 값과, 대규모 계산용 대수 문자열 표현을 모두 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보상 가산 테이블 이름 이 보상 가산 테이블의 고유 식별자입니다. 특정 입수 액션에 적용할 배율 테이블을 지정할 때 참조됩니다. mode 문자열 열거형 enum {   “double”,   “big” } “double” 보상 가산 테이블의 종류 배율 값의 수치 정밀도를 선택합니다. 표준적인 부동소수점 수(2^48까지)에는 “double\"을, 대규모 계산이 필요한 경우에는 1024자리까지의 문자열 표현을 지원하는 “big\"을 사용합니다. 정의 설명 double 2^48 미만의 부동소수점 수 big 문자열 표기로 1024자리 미만의 부동소수점 수 rates List {mode} == “double” ※ 1 ~ 10000 items 랭크별 가산량(배율) 랭크를 인덱스로 하는 배율 값의 배열입니다. i번째 엔트리는 스테이터스가 랭크 i일 때 적용되는 보상 배율을 정의합니다. mode가 “double\"로 설정된 경우에 사용됩니다. ※ mode이(가) “double” 이면 필수 bigRates List {mode} == “big” ※ 1 ~ 10000 items 랭크별 가산량(배율) 랭크를 인덱스로 하는 문자열 표현 배율 값의 배열입니다. i번째 엔트리는 스테이터스가 랭크 i일 때 적용되는 보상 배율을 정의합니다. 대수치 정밀도가 필요한 계산에서 mode가 “big\"으로 설정된 경우에 사용됩니다. ※ mode이(가) “big” 이면 필수","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Experience Deploy/CDK 레퍼런스","url":"/ko/api_reference/experience/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 편성 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. updateMoldScript ScriptSetting 폼 저장 영역의 캐파시티를 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updateMold updateFormScript ScriptSetting 폼을 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updateForm updatePropertyFormScript ScriptSetting 프로퍼티 폼을 업데이트할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - updatePropertyForm logSetting LogSetting 로그 출력 설정 편성 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써 폼 업데이트, 저장 영역 캐파시티 변경, 프로퍼티 폼 변경의 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Formation::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 UpdateMoldScript : null UpdateFormScript : null UpdatePropertyFormScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/formation\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () formation . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , formation . NamespaceOptions { TransactionSetting : \u0026 core . TransactionSetting { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Formation\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Formation\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . formation . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . formation . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Formation . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Formation . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import formation from \"@/gs2cdk/formation\" ; class SampleStack extends core . Stack { public constructor () { super (); new formation . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , formation class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () formation . Namespace ( stack = self , name = 'namespace-0001' , options = formation . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentFormMaster 현재 활성화된 폼 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 폼 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Formation 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentFormMaster 업데이트된 현재 활성화된 폼 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Formation::CurrentFormMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-09-09\" , \"moldModels\": [ { \"name\": \"party\" , \"initialMaxCapacity\": 10 , \"maxCapacity\": 20 , \"formModel\" : { \"name\": \"party\" , \"metadata\": \"PARTY\" , \"slots\": [ { \"name\": \"tank\" , \"metadata\": \"TANK\" , \"propertyRegex\": \"grn:.*\" } , { \"name\": \"healer\" , \"metadata\": \"HEALER\" , \"propertyRegex\": \"grn:.*\" } , { \"name\": \"dps_1\" , \"metadata\": \"DPS\" , \"propertyRegex\": \"grn:.*\" } , { \"name\": \"dps_2\" , \"metadata\": \"DPS\" , \"propertyRegex\": \"grn:.*\" } ] } , \"metadata\": \"PARTY\" } , { \"name\": \"equipment\" , \"initialMaxCapacity\": 20 , \"maxCapacity\": 30 , \"formModel\" : { \"name\": \"equipment\" , \"metadata\": \"EQUIPMENT\" , \"slots\": [ { \"name\": \"head\" , \"metadata\": \"HEAD\" , \"propertyRegex\": \"grn:.*\" } , { \"name\": \"body\" , \"metadata\": \"BODY\" , \"propertyRegex\": \"grn:.*\" } , { \"name\": \"leg\" , \"metadata\": \"LEG\" , \"propertyRegex\": \"grn:.*\" } ] } , \"metadata\": \"EQUIPMENT\" } ], \"propertyFormModels\": [] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/formation\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () formation . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , formation . NamespaceOptions {}, ). MasterData ( [] formation . MoldModel { formation . NewMoldModel ( \"party\" , 10 , 20 , formation . NewFormModel ( \"party\" , [] formation . SlotModel { formation . NewSlotModel ( \"tank\" , \"grn:.*\" , formation . SlotModelOptions { Metadata : pointy . String ( \"TANK\" ), }, ), formation . NewSlotModel ( \"healer\" , \"grn:.*\" , formation . SlotModelOptions { Metadata : pointy . String ( \"HEALER\" ), }, ), formation . NewSlotModel ( \"dps_1\" , \"grn:.*\" , formation . SlotModelOptions { Metadata : pointy . String ( \"DPS\" ), }, ), formation . NewSlotModel ( \"dps_2\" , \"grn:.*\" , formation . SlotModelOptions { Metadata : pointy . String ( \"DPS\" ), }, ), }, formation . FormModelOptions { Metadata : pointy . String ( \"PARTY\" ), }, ), formation . MoldModelOptions { Metadata : pointy . String ( \"PARTY\" ), }, ), formation . NewMoldModel ( \"equipment\" , 20 , 30 , formation . NewFormModel ( \"equipment\" , [] formation . SlotModel { formation . NewSlotModel ( \"head\" , \"grn:.*\" , formation . SlotModelOptions { Metadata : pointy . String ( \"HEAD\" ), }, ), formation . NewSlotModel ( \"body\" , \"grn:.*\" , formation . SlotModelOptions { Metadata : pointy . String ( \"BODY\" ), }, ), formation . NewSlotModel ( \"leg\" , \"grn:.*\" , formation . SlotModelOptions { Metadata : pointy . String ( \"LEG\" ), }, ), }, formation . FormModelOptions { Metadata : pointy . String ( \"EQUIPMENT\" ), }, ), formation . MoldModelOptions { Metadata : pointy . String ( \"EQUIPMENT\" ), }, ), }, [] formation . PropertyFormModel { }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Formation\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Formation\\Model\\MoldModel ( name : \"party\" , initialMaxCapacity : 10 , maxCapacity : 20 , formModel : new \\Gs2Cdk\\Formation\\Model\\FormModel ( name : \"party\" , slots : [ new \\Gs2Cdk\\Formation\\Model\\SlotModel ( name : \"tank\" , propertyRegex : \"grn:.*\" , options : new \\Gs2Cdk\\Formation\\Model\\Options\\SlotModelOptions ( metadata : \"TANK\" , ), ), new \\Gs2Cdk\\Formation\\Model\\SlotModel ( name : \"healer\" , propertyRegex : \"grn:.*\" , options : new \\Gs2Cdk\\Formation\\Model\\Options\\SlotModelOptions ( metadata : \"HEALER\" , ), ), new \\Gs2Cdk\\Formation\\Model\\SlotModel ( name : \"dps_1\" , propertyRegex : \"grn:.*\" , options : new \\Gs2Cdk\\Formation\\Model\\Options\\SlotModelOptions ( metadata : \"DPS\" , ), ), new \\Gs2Cdk\\Formation\\Model\\SlotModel ( name : \"dps_2\" , propertyRegex : \"grn:.*\" , options : new \\Gs2Cdk\\Formation\\Model\\Options\\SlotModelOptions ( metadata : \"DPS\" , ), ), ], options : new \\Gs2Cdk\\Formation\\Model\\Options\\FormModelOptions ( metadata : \"PARTY\" , ), ), options : new \\Gs2Cdk\\Formation\\Model\\Options\\MoldModelOptions ( metadata : \"PARTY\" ) ), new \\Gs2Cdk\\Formation\\Model\\MoldModel ( name : \"equipment\" , initialMaxCapacity : 20 , maxCapacity : 30 , formModel : new \\Gs2Cdk\\Formation\\Model\\FormModel ( name : \"equipment\" , slots : [ new \\Gs2Cdk\\Formation\\Model\\SlotModel ( name : \"head\" , propertyRegex : \"grn:.*\" , options : new \\Gs2Cdk\\Formation\\Model\\Options\\SlotModelOptions ( metadata : \"HEAD\" , ), ), new \\Gs2Cdk\\Formation\\Model\\SlotModel ( name : \"body\" , propertyRegex : \"grn:.*\" , options : new \\Gs2Cdk\\Formation\\Model\\Options\\SlotModelOptions ( metadata : \"BODY\" , ), ), new \\Gs2Cdk\\Formation\\Model\\SlotModel ( name : \"leg\" , propertyRegex : \"grn:.*\" , options : new \\Gs2Cdk\\Formation\\Model\\Options\\SlotModelOptions ( metadata : \"LEG\" , ), ), ], options : new \\Gs2Cdk\\Formation\\Model\\Options\\FormModelOptions ( metadata : \"EQUIPMENT\" , ), ), options : new \\Gs2Cdk\\Formation\\Model\\Options\\MoldModelOptions ( metadata : \"EQUIPMENT\" ) ) ], [ ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . formation . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . formation . model . MoldModel ( \"party\" , 10 , 20 , new io . gs2 . cdk . formation . model . FormModel ( \"party\" , Arrays . asList ( new io . gs2 . cdk . formation . model . SlotModel ( \"tank\" , \"grn:.*\" , new io . gs2 . cdk . formation . model . options . SlotModelOptions () . withMetadata ( \"TANK\" ) ), new io . gs2 . cdk . formation . model . SlotModel ( \"healer\" , \"grn:.*\" , new io . gs2 . cdk . formation . model . options . SlotModelOptions () . withMetadata ( \"HEALER\" ) ), new io . gs2 . cdk . formation . model . SlotModel ( \"dps_1\" , \"grn:.*\" , new io . gs2 . cdk . formation . model . options . SlotModelOptions () . withMetadata ( \"DPS\" ) ), new io . gs2 . cdk . formation . model . SlotModel ( \"dps_2\" , \"grn:.*\" , new io . gs2 . cdk . formation . model . options . SlotModelOptions () . withMetadata ( \"DPS\" ) ) ), new io . gs2 . cdk . formation . model . options . FormModelOptions () . withMetadata ( \"PARTY\" ) ), new io . gs2 . cdk . formation . model . options . MoldModelOptions () . withMetadata ( \"PARTY\" ) ), new io . gs2 . cdk . formation . model . MoldModel ( \"equipment\" , 20 , 30 , new io . gs2 . cdk . formation . model . FormModel ( \"equipment\" , Arrays . asList ( new io . gs2 . cdk . formation . model . SlotModel ( \"head\" , \"grn:.*\" , new io . gs2 . cdk . formation . model . options . SlotModelOptions () . withMetadata ( \"HEAD\" ) ), new io . gs2 . cdk . formation . model . SlotModel ( \"body\" , \"grn:.*\" , new io . gs2 . cdk . formation . model . options . SlotModelOptions () . withMetadata ( \"BODY\" ) ), new io . gs2 . cdk . formation . model . SlotModel ( \"leg\" , \"grn:.*\" , new io . gs2 . cdk . formation . model . options . SlotModelOptions () . withMetadata ( \"LEG\" ) ) ), new io . gs2 . cdk . formation . model . options . FormModelOptions () . withMetadata ( \"EQUIPMENT\" ) ), new io . gs2 . cdk . formation . model . options . MoldModelOptions () . withMetadata ( \"EQUIPMENT\" ) ) ), Arrays . asList ( ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Formation . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Formation . Model . MoldModel [] { new Gs2Cdk . Gs2Formation . Model . MoldModel ( name : \"party\" , initialMaxCapacity : 10 , maxCapacity : 20 , formModel : new Gs2Cdk . Gs2Formation . Model . FormModel ( name : \"party\" , slots : new Gs2Cdk . Gs2Formation . Model . SlotModel [] { new Gs2Cdk . Gs2Formation . Model . SlotModel ( name : \"tank\" , propertyRegex : \"grn:.*\" , options : new Gs2Cdk . Gs2Formation . Model . Options . SlotModelOptions { metadata = \"TANK\" } ), new Gs2Cdk . Gs2Formation . Model . SlotModel ( name : \"healer\" , propertyRegex : \"grn:.*\" , options : new Gs2Cdk . Gs2Formation . Model . Options . SlotModelOptions { metadata = \"HEALER\" } ), new Gs2Cdk . Gs2Formation . Model . SlotModel ( name : \"dps_1\" , propertyRegex : \"grn:.*\" , options : new Gs2Cdk . Gs2Formation . Model . Options . SlotModelOptions { metadata = \"DPS\" } ), new Gs2Cdk . Gs2Formation . Model . SlotModel ( name : \"dps_2\" , propertyRegex : \"grn:.*\" , options : new Gs2Cdk . Gs2Formation . Model . Options . SlotModelOptions { metadata = \"DPS\" } ) }, options : new Gs2Cdk . Gs2Formation . Model . Options . FormModelOptions { metadata = \"PARTY\" } ), options : new Gs2Cdk . Gs2Formation . Model . Options . MoldModelOptions { metadata = \"PARTY\" } ), new Gs2Cdk . Gs2Formation . Model . MoldModel ( name : \"equipment\" , initialMaxCapacity : 20 , maxCapacity : 30 , formModel : new Gs2Cdk . Gs2Formation . Model . FormModel ( name : \"equipment\" , slots : new Gs2Cdk . Gs2Formation . Model . SlotModel [] { new Gs2Cdk . Gs2Formation . Model . SlotModel ( name : \"head\" , propertyRegex : \"grn:.*\" , options : new Gs2Cdk . Gs2Formation . Model . Options . SlotModelOptions { metadata = \"HEAD\" } ), new Gs2Cdk . Gs2Formation . Model . SlotModel ( name : \"body\" , propertyRegex : \"grn:.*\" , options : new Gs2Cdk . Gs2Formation . Model . Options . SlotModelOptions { metadata = \"BODY\" } ), new Gs2Cdk . Gs2Formation . Model . SlotModel ( name : \"leg\" , propertyRegex : \"grn:.*\" , options : new Gs2Cdk . Gs2Formation . Model . Options . SlotModelOptions { metadata = \"LEG\" } ) }, options : new Gs2Cdk . Gs2Formation . Model . Options . FormModelOptions { metadata = \"EQUIPMENT\" } ), options : new Gs2Cdk . Gs2Formation . Model . Options . MoldModelOptions { metadata = \"EQUIPMENT\" } ) }, new Gs2Cdk . Gs2Formation . Model . PropertyFormModel [] { } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import formation from \"@/gs2cdk/formation\" ; class SampleStack extends core . Stack { public constructor () { super (); new formation . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new formation . model . MoldModel ( \"party\" , 10 , 20 , new formation . model . FormModel ( \"party\" , [ new formation . model . SlotModel ( \"tank\" , \"grn:.*\" , { metadata : \"TANK\" } ), new formation . model . SlotModel ( \"healer\" , \"grn:.*\" , { metadata : \"HEALER\" } ), new formation . model . SlotModel ( \"dps_1\" , \"grn:.*\" , { metadata : \"DPS\" } ), new formation . model . SlotModel ( \"dps_2\" , \"grn:.*\" , { metadata : \"DPS\" } ), ], { metadata : \"PARTY\" } ), { metadata : \"PARTY\" } ), new formation . model . MoldModel ( \"equipment\" , 20 , 30 , new formation . model . FormModel ( \"equipment\" , [ new formation . model . SlotModel ( \"head\" , \"grn:.*\" , { metadata : \"HEAD\" } ), new formation . model . SlotModel ( \"body\" , \"grn:.*\" , { metadata : \"BODY\" } ), new formation . model . SlotModel ( \"leg\" , \"grn:.*\" , { metadata : \"LEG\" } ), ], { metadata : \"EQUIPMENT\" } ), { metadata : \"EQUIPMENT\" } ) ], [ ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , formation class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () formation . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( mold_models = [ formation . MoldModel ( name = 'party' , initial_max_capacity = 10 , max_capacity = 20 , form_model = formation . FormModel ( name = 'party' , slots = [ formation . SlotModel ( name = 'tank' , property_regex = 'grn:.*' , options = formation . SlotModelOptions ( metadata = 'TANK' , ), ), formation . SlotModel ( name = 'healer' , property_regex = 'grn:.*' , options = formation . SlotModelOptions ( metadata = 'HEALER' , ), ), formation . SlotModel ( name = 'dps_1' , property_regex = 'grn:.*' , options = formation . SlotModelOptions ( metadata = 'DPS' , ), ), formation . SlotModel ( name = 'dps_2' , property_regex = 'grn:.*' , options = formation . SlotModelOptions ( metadata = 'DPS' , ), ), ], options = formation . FormModelOptions ( metadata = 'PARTY' , ), ), options = formation . MoldModelOptions ( metadata = 'PARTY' ), ), formation . MoldModel ( name = 'equipment' , initial_max_capacity = 20 , max_capacity = 30 , form_model = formation . FormModel ( name = 'equipment' , slots = [ formation . SlotModel ( name = 'head' , property_regex = 'grn:.*' , options = formation . SlotModelOptions ( metadata = 'HEAD' , ), ), formation . SlotModel ( name = 'body' , property_regex = 'grn:.*' , options = formation . SlotModelOptions ( metadata = 'BODY' , ), ), formation . SlotModel ( name = 'leg' , property_regex = 'grn:.*' , options = formation . SlotModelOptions ( metadata = 'LEG' , ), ), ], options = formation . FormModelOptions ( metadata = 'EQUIPMENT' , ), ), options = formation . MoldModelOptions ( metadata = 'EQUIPMENT' ), ), ], property_form_models = [ ], ) print ( SampleStack () . yaml ()) # Generate Template FormModel 폼 모델 폼 모델은 편성 상태를 나타내는 엔티티입니다. 편성 가능한 영역으로 슬롯 을 정의할 수 있습니다. 무기·방어구라면 「오른손」「왼손」「몸통」「팔」과 같은 부위를 슬롯으로 하고, 파티라면 「전위」「중위」「후위」와 같은 포지션을 슬롯으로 표현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 formModelId string ※ ~ 1024자 폼 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 리스트 이 폼을 구성하는 슬롯 정의의 순서가 있는 리스트입니다. 각 슬롯은 할당 가능한 포지션을 나타내며, 슬롯명은 폼 내에서 고유해야 합니다. 장비에서는 “weapon”, “armor”, “accessory\"와 같은 슬롯, 파티에서는 “position_1”, “position_2\"와 같은 슬롯을 생각할 수 있습니다. SlotModel 슬롯 모델 폼 모델 내의 하나의 슬롯을 정의합니다. 슬롯은 게임 리소스(아이템, 캐릭터, 장비 등)를 배치할 수 있는 할당 가능한 포지션을 나타냅니다. 프로퍼티 정규 표현식에 의해 슬롯에 설정 가능한 값이 검증됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 슬롯 모델명 폼 모델 내에서 이 슬롯을 고유하게 식별하는 이름입니다. 장비 폼에서는 “right_hand”, “body\"와 같은 이름이, 파티 폼에서는 “vanguard”, “rear_guard\"와 같은 이름이 일반적으로 사용됩니다. propertyRegex string “.*” ~ 512자 프로퍼티로 설정 가능한 값의 정규 표현식 이 슬롯에 할당 가능한 프로퍼티 ID 값을 검증하는 정규 표현식 패턴입니다. 예를 들어 특정 GS2-Inventory 아이템 GRN이나 GS2-Dictionary 엔트리 GRN으로 제한할 수 있습니다. 기본값은 “.*“이며 임의의 값을 허용합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. MoldModel 폼 저장 영역 모델 폼 저장 영역 모델은 파티 편성이라면 「불 속성 파티」「물 속성 파티」와 같은 형태로 저장하는 것을 상정하고 있습니다. 저장할 수 있는 영역의 수는 제한할 수 있으며, 개별적으로 확장할 수도 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 moldModelId string ※ ~ 1024자 폼 저장 영역 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialMaxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 초기 캐파시티 이 저장 영역에서 각 플레이어가 이용할 수 있는 기본 폼 저장 슬롯 수입니다. 예를 들어 3으로 설정하면 플레이어는 초기 상태에서 최대 3개의 서로 다른 편성(예: 「불 속성 파티」「물 속성 파티」「바람 속성 파티」)을 저장할 수 있습니다. 플레이어별로 maxCapacity까지 확장할 수 있습니다. maxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 최대 캐파시티 이 저장 영역에서 플레이어별 폼 저장 슬롯 수의 절대적인 상한입니다. 캐파시티 확장 조작을 수행하더라도 캐파시티는 이 값을 초과할 수 없습니다. initialMaxCapacity 이상의 값이어야 합니다. formModel FormModel  폼 모델 PropertyFormModel 프로퍼티 폼 모델 프로퍼티 폼 모델은 편성 상태를 나타내는 엔티티입니다. Mold / Form과의 차이점은, 슬롯 수를 정의하고 각 슬롯에 편성을 기록하는 것이 Mold / Form이며, 보유하고 있는 장비에 스킬을 설정하는 것처럼 수를 사전에 정하기 어려운 편성을 표현할 때 사용하는 것이 프로퍼티 폼 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 propertyFormModelId string ※ ~ 1024자 프로퍼티 폼 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 목록 이 프로퍼티 폼의 슬롯 정의를 순서대로 나열한 목록입니다. 캐파시티에 의해 폼 수가 제한되는 Mold/Form과 달리, 프로퍼티 폼은 프로퍼티 ID로 식별되며 보유하는 리소스마다 존재할 수 있습니다. 슬롯 이름은 폼 내에서 고유해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Formation Deploy/CDK 레퍼런스","url":"/ko/api_reference/formation/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 친구 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. followScript ScriptSetting 팔로우되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - follow unfollowScript ScriptSetting 언팔로우되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - unfollow sendRequestScript ScriptSetting 친구 요청을 발행했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - sendRequest cancelRequestScript ScriptSetting 친구 요청을 취소했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - cancelRequest acceptRequestScript ScriptSetting 친구 요청을 승낙했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acceptRequest rejectRequestScript ScriptSetting 친구 요청을 거부했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - rejectRequest deleteFriendScript ScriptSetting 친구를 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteFriend updateProfileScript ScriptSetting 프로필을 갱신했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - updateProfile followNotification NotificationSetting 팔로우되었을 때의 푸시 통지 다른 플레이어에게 팔로우되었을 때 푸시 통지를 전송하는 설정입니다. 팔로우된 플레이어가 GS2-Gateway를 통해 실시간으로 통지를 받을 수 있습니다. receiveRequestNotification NotificationSetting  친구 요청을 받았을 때의 푸시 통지 다른 플레이어로부터 친구 요청을 받았을 때 푸시 통지를 전송하는 설정입니다. 수신자가 GS2-Gateway를 통해 신속하게 응답할 수 있도록 합니다. cancelRequestNotification NotificationSetting  받은 친구 요청이 취소되었을 때의 푸시 통지 이전에 받은 친구 요청이 발신자에 의해 취소되었을 때 푸시 통지를 전송하는 설정입니다. 보류 중이던 요청이 더 이상 존재하지 않음을 수신자에게 알립니다. acceptRequestNotification NotificationSetting  친구 요청이 승인되었을 때의 푸시 통지 보낸 친구 요청이 수신자에 의해 승인되었을 때 푸시 통지를 전송하는 설정입니다. 승인 후 두 플레이어가 서로의 친구 목록에 추가됩니다. rejectRequestNotification NotificationSetting  친구 요청이 거부되었을 때의 푸시 통지 보낸 친구 요청이 수신자에 의해 거부되었을 때 푸시 통지를 전송하는 설정입니다. 친구 요청은 보낸 편지함과 받은 편지함 양쪽에서 모두 삭제됩니다. deleteFriendNotification NotificationSetting  친구가 삭제되었을 때의 푸시 통지 다른 플레이어의 친구 목록에서 삭제되었을 때 푸시 통지를 전송하는 설정입니다. 친구 관계는 양쪽 모두에서 해제됩니다. logSetting LogSetting 로그 출력 설정 친구 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 팔로우/언팔로우, 친구 요청, 프로필 갱신의 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Friend::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null FollowScript : null UnfollowScript : null SendRequestScript : null CancelRequestScript : null AcceptRequestScript : null RejectRequestScript : null DeleteFriendScript : null UpdateProfileScript : null FollowNotification : null ReceiveRequestNotification : null CancelRequestNotification : null AcceptRequestNotification : null RejectRequestNotification : null DeleteFriendNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/friend\" ) SampleStack := core . NewStack () friend . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , friend . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Friend\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Friend\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . friend . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . friend . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Friend . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Friend . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import friend from \"@/gs2cdk/friend\" ; class SampleStack extends core . Stack { public constructor () { super (); new friend . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , friend class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () friend . Namespace ( stack = self , name = 'namespace-0001' , options = friend . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Friend Deploy/CDK 레퍼런스","url":"/ko/api_reference/friend/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 게이트웨이 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. firebaseSecret string ~ 1024자 Firebase 알림 송신에 사용하는 시크릿 토큰 Firebase Cloud Messaging(FCM)의 서버 키 또는 시크릿 토큰입니다. 대상 플레이어가 오프라인이어서 게임 내 WebSocket 알림을 수신할 수 없는 경우, 모바일 푸시 알림 전달을 활성화하기 위해 필요합니다. logSetting LogSetting 로그 출력 설정 게이트웨이 조작의 로그 데이터를 GS2-Log로 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정하면 WebSocket 세션 관리, 알림 전달, Firebase 토큰 조작에 대한 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Gateway::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null FirebaseSecret : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/gateway\" ) SampleStack := core . NewStack () gateway . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , gateway . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Gateway\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Gateway\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . gateway . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . gateway . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Gateway . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Gateway . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import gateway from \"@/gs2cdk/gateway\" ; class SampleStack extends core . Stack { public constructor () { super (); new gateway . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , gateway class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () gateway . Namespace ( stack = self , name = 'namespace-0001' , options = gateway . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Gateway Deploy/CDK 레퍼런스","url":"/ko/api_reference/gateway/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 그레이드 조작 시 분산 트랜잭션의 실행 방법을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. changeGradeScript ScriptSetting 그레이드가 변화했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - changeGrade logSetting LogSetting 로그 출력 설정 그레이드 조작의 로그 데이터를 GS2-Log에 출력하기 위한 설정입니다. GS2-Log의 네임스페이스를 지정함으로써, 그레이드 변경 및 랭크 캡 업데이트에 대한 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Grade::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null ChangeGradeScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/grade\" ) SampleStack := core . NewStack () grade . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , grade . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Grade\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Grade\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . grade . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . grade . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Grade . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Grade . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import grade from \"@/gs2cdk/grade\" ; class SampleStack extends core . Stack { public constructor () { super (); new grade . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , grade class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () grade . Namespace ( stack = self , name = 'namespace-0001' , options = grade . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답의 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 이용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentGradeMaster 현재 활성화된 그레이드 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 그레이드 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Grade 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentGradeMaster 업데이트된 현재 활성화된 그레이드 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Grade::CurrentGradeMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2023-12-25\" , \"gradeModels\": [ { \"name\": \"grade-0001\" , \"experienceModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , \"gradeEntries\": [ { \"rankCapValue\": 50 , \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" } , { \"rankCapValue\": 60 , \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" } , { \"rankCapValue\": 70 , \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" } , { \"rankCapValue\": 80 , \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"gradeUpPropertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" } ], \"metadata\": \"GRADE_0001\" , \"defaultGrades\": [ { \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\" , \"defaultGradeValue\": 2 } , { \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\" , \"defaultGradeValue\": 3 } , { \"propertyIdRegex\": \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" , \"defaultGradeValue\": 4 } ] } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/grade\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () grade . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , grade . NamespaceOptions {}, ). MasterData ( [] grade . GradeModel { grade . NewGradeModel ( \"grade-0001\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , [] grade . GradeEntryModel { grade . NewGradeEntryModel ( 50 , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" , grade . GradeEntryModelOptions {}, ), grade . NewGradeEntryModel ( 60 , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" , grade . GradeEntryModelOptions {}, ), grade . NewGradeEntryModel ( 70 , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" , grade . GradeEntryModelOptions {}, ), grade . NewGradeEntryModel ( 80 , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" , grade . GradeEntryModelOptions {}, ), }, grade . GradeModelOptions { Metadata : pointy . String ( \"GRADE_0001\" ), DefaultGrades : [] grade . DefaultGradeModel { grade . NewDefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\" , 2 , grade . DefaultGradeModelOptions {}, ), grade . NewDefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\" , 3 , grade . DefaultGradeModelOptions {}, ), grade . NewDefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" , 4 , grade . DefaultGradeModelOptions {}, ), }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Grade\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Grade\\Model\\GradeModel ( name : \"grade-0001\" , experienceModelId : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , gradeEntries : [ new \\Gs2Cdk\\Grade\\Model\\GradeEntryModel ( rankCapValue : 50 , propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex : 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' , ), new \\Gs2Cdk\\Grade\\Model\\GradeEntryModel ( rankCapValue : 60 , propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex : 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' , ), new \\Gs2Cdk\\Grade\\Model\\GradeEntryModel ( rankCapValue : 70 , propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex : 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' , ), new \\Gs2Cdk\\Grade\\Model\\GradeEntryModel ( rankCapValue : 80 , propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex : 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' , ), ], options : new \\Gs2Cdk\\Grade\\Model\\Options\\GradeModelOptions ( metadata : \"GRADE_0001\" , defaultGrades : [ new \\Gs2Cdk\\Grade\\Model\\DefaultGradeModel ( propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\" , defaultGradeValue : 2 , ), new \\Gs2Cdk\\Grade\\Model\\DefaultGradeModel ( propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\" , defaultGradeValue : 3 , ), new \\Gs2Cdk\\Grade\\Model\\DefaultGradeModel ( propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" , defaultGradeValue : 4 , ), ] ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . grade . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . grade . model . GradeModel ( \"grade-0001\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , Arrays . asList ( new io . gs2 . cdk . grade . model . GradeEntryModel ( 50L , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new io . gs2 . cdk . grade . model . GradeEntryModel ( 60L , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new io . gs2 . cdk . grade . model . GradeEntryModel ( 70L , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new io . gs2 . cdk . grade . model . GradeEntryModel ( 80L , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ) ), new io . gs2 . cdk . grade . model . options . GradeModelOptions () . withMetadata ( \"GRADE_0001\" ) . withDefaultGrades ( Arrays . asList ( new io . gs2 . cdk . grade . model . DefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\" , 2L ), new io . gs2 . cdk . grade . model . DefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\" , 3L ), new io . gs2 . cdk . grade . model . DefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" , 4L ) )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Grade . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Grade . Model . GradeModel [] { new Gs2Cdk . Gs2Grade . Model . GradeModel ( name : \"grade-0001\" , experienceModelId : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , gradeEntries : new Gs2Cdk . Gs2Grade . Model . GradeEntryModel [] { new Gs2Cdk . Gs2Grade . Model . GradeEntryModel ( rankCapValue : 50L , propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new Gs2Cdk . Gs2Grade . Model . GradeEntryModel ( rankCapValue : 60L , propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new Gs2Cdk . Gs2Grade . Model . GradeEntryModel ( rankCapValue : 70L , propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new Gs2Cdk . Gs2Grade . Model . GradeEntryModel ( rankCapValue : 80L , propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , gradeUpPropertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ) }, options : new Gs2Cdk . Gs2Grade . Model . Options . GradeModelOptions { metadata = \"GRADE_0001\" , defaultGrades = new Gs2Cdk . Gs2Grade . Model . DefaultGradeModel [] { new Gs2Cdk . Gs2Grade . Model . DefaultGradeModel ( propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\" , defaultGradeValue : 2L ), new Gs2Cdk . Gs2Grade . Model . DefaultGradeModel ( propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\" , defaultGradeValue : 3L ), new Gs2Cdk . Gs2Grade . Model . DefaultGradeModel ( propertyIdRegex : \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" , defaultGradeValue : 4L ) } } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import grade from \"@/gs2cdk/grade\" ; class SampleStack extends core . Stack { public constructor () { super (); new grade . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new grade . model . GradeModel ( \"grade-0001\" , \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001\" , [ new grade . model . GradeEntryModel ( 50 , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new grade . model . GradeEntryModel ( 60 , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new grade . model . GradeEntryModel ( 70 , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), new grade . model . GradeEntryModel ( 80 , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*\" , \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*\" ), ], { metadata : \"GRADE_0001\" , defaultGrades : [ new grade . model . DefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*\" , 2 ), new grade . model . DefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*\" , 3 ), new grade . model . DefaultGradeModel ( \"grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*\" , 4 ), ] } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , grade class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () grade . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( grade_models = [ grade . GradeModel ( name = 'grade-0001' , experience_model_id = 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:experience-0001' , grade_entries = [ grade . GradeEntryModel ( rank_cap_value = 50 , property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*' , grade_up_property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' , ), grade . GradeEntryModel ( rank_cap_value = 60 , property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*' , grade_up_property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' , ), grade . GradeEntryModel ( rank_cap_value = 70 , property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*' , grade_up_property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' , ), grade . GradeEntryModel ( rank_cap_value = 80 , property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:(.*):.*' , grade_up_property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:$1:.*' , ), ], options = grade . GradeModelOptions ( metadata = 'GRADE_0001' , default_grades = [ grade . DefaultGradeModel ( property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:r-.*' , default_grade_value = 2 , ), grade . DefaultGradeModel ( property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:sr-.*' , default_grade_value = 3 , ), grade . DefaultGradeModel ( property_id_regex = 'grn:gs2:ap-northeast-1:YourOwnerId:inventory:namespace-0001:inventory:inventory-0001:item:ssr-.*' , default_grade_value = 4 , ), ] ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template GradeModel 그레이드 모델 그레이드 모델이란 캐릭터나 장비의 랭크를 나타내는 엔티티로, 그레이드에 따라 GS2-Experience의 랭크 캡을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gradeModelId string ※ ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 그레이드 모델 이름 그레이드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultGrades List 0 ~ 100 items 기본 그레이드 모델 리스트 신규 스테이터스 작성 시 평가되는 기본 그레이드 규칙의 순서가 있는 리스트입니다. 각 항목은 프로퍼티 ID의 정규 표현식 패턴과, 매칭된 경우 할당할 그레이드 값을 정의합니다. 어떤 패턴에도 매칭되지 않으면 기본 그레이드 값 0이 사용됩니다. experienceModelId string  ~ 1024자 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그레이드 모델과 연동시킬 GS2-Experience의 경험치 모델의 GRN입니다. 그레이드 값이 변경되면, 그레이드 엔트리의 매핑에 기반하여 연동된 경험치 모델의 랭크 캡이 자동으로 업데이트됩니다. 이를 통해 높은 그레이드가 더 높은 랭크 캡을 해제하는 그레이드 기반 성장을 구현할 수 있습니다. gradeEntries List  1 ~ 100 items 그레이드 엔트리 모델 리스트 각 그레이드 값을 연동된 GS2-Experience 모델의 랭크 캡에 매핑하는 그레이드 엔트리의 순서가 있는 리스트입니다. 배열의 인덱스가 그레이드 값에 대응하므로, 첫 번째 항목(인덱스 0)이 그레이드 0의 랭크 캡을, 두 번째 항목이 그레이드 1의 랭크 캡을 정의합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 리스트 그레이드를 기반으로 보상량을 스케일링하기 위한 이름이 지정된 배율 테이블의 컬렉션입니다. 여러 테이블을 정의하여 서로 다른 종류의 보상(예: 경험치, 통화, 아이템)에 다른 스케일링 규칙을 적용할 수 있습니다. DefaultGradeModel 기본 그레이드 모델 그레이드를 새로 생성할 때 프로퍼티 ID의 정규 표현식과의 매칭에 따라 기본 그레이드 값을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 propertyIdRegex string  ~ 1024자 프로퍼티 ID 정규 표현식 새로 생성된 그레이드 스테이터스의 프로퍼티 ID에 대해 매칭되는 정규 표현식 패턴입니다. 프로퍼티 ID가 이 패턴에 매칭되면, 0 대신 지정된 기본 그레이드 값이 초기 그레이드로 할당됩니다. 패턴은 순서대로 평가되며, 처음 매칭된 것이 사용됩니다. defaultGradeValue long  0 ~ 9223372036854775805 기본 그레이드 값 프로퍼티 ID가 propertyIdRegex 패턴에 매칭된 경우 새로 생성된 스테이터스에 할당되는 초기 그레이드 값입니다. 이 인덱스의 그레이드 엔트리가 대응하는 랭크 캡을 정의하므로, 이 값이 연동된 GS2-Experience 모델의 시작 랭크 캡을 결정합니다. GradeEntryModel 그레이드 엔트리 모델 그레이드 값과 연동된 GS2-Experience 모델의 랭크 캡 간의 매핑을 정의합니다. 각 항목은 프로퍼티 ID 매칭에 사용되는 정규 표현식 패턴도 지정하여, 그레이드업 조작에 사용할 수 있는 리소스와 그 프로퍼티 ID의 변환 방법을 결정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rankCapValue long  0 ~ 9223372036854775805 랭크 캡 값 이 그레이드가 적용되었을 때 연동된 GS2-Experience 모델에 설정할 랭크 캡 값입니다. 플레이어의 그레이드가 이 항목에 대응하는 값으로 변경되면, 관련된 경험치 스테이터스의 랭크 캡이 이 값으로 자동 업데이트되어 도달 가능한 최대 랭크가 제어됩니다. propertyIdRegex string  ~ 1024자 프로퍼티 ID 정규 표현식 그레이드업 매칭용 변수를 추출하기 위해 그레이드 스테이터스의 프로퍼티 ID에 적용되는 정규 표현식 패턴입니다. 이 패턴 내의 캡처 그룹(괄호로 둘러싸인 부분)은 gradeUpPropertyIdRegex에서 $1, $2 등으로 사용할 수 있습니다. 예를 들어 “character-(.+)“와 같은 패턴은 캐릭터 식별자를 추출하여 그레이드업 소재의 프로퍼티 ID 매칭에 사용합니다. gradeUpPropertyIdRegex string  ~ 1024자 그레이드업용 프로퍼티 ID 정규 표현식 그레이드 승급을 위해 소비할 수 있는 리소스의 프로퍼티 ID를 특정하는 정규 표현식 패턴입니다. 이 패턴은 propertyIdRegex의 캡처 그룹을 $1, $2 등으로 참조할 수 있습니다. 예를 들어 propertyIdRegex에서 “sword-001\"을 $1로 추출한 경우, 이 패턴을 “grade-up-material-$1\"로 설정하면 해당 검에 고유한 소재를 매칭시킬 수 있습니다. AcquireActionRate 보상 가산 테이블 현재 그레이드 값을 기준으로 보상량을 조정하는 이름이 지정된 배율 테이블을 정의합니다. 각 그레이드 값은 트랜잭션의 입수 액션에 적용되는 배율에 매핑되며, 그레이드가 높은 캐릭터나 장비일수록 더 많은 보상을 받을 수 있습니다. 표준적인 배정밀도 부동소수점수 모드와, 매우 큰 값에 대응하는 빅 넘버 모드를 모두 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보상 가산 테이블 이름 그레이드 모델 내에서 이 배율 테이블을 고유하게 식별하는 이름입니다. 트랜잭션의 특정 입수 액션에 그레이드 기반 보상 스케일링을 적용할 때 참조됩니다. mode 문자열 열거형 enum {   “double”,   “big” } “double” 보상 가산 테이블 종류 배율 값의 수치 정밀도 모드를 선택합니다. “double” 모드는 대부분의 경우에 적합한 표준 부동소수점수를 사용합니다. “big” 모드는 최대 1024자리까지의 문자열 표현 숫자를 사용하여, 매우 큰 값 계산이 필요한 게임에 대응합니다. 정의 설명 double 2^48 미만의 부동소수점 수 big 문자열 표기로 1024자리 미만의 부동소수점 수 rates List {mode} == “double” ※ 1 ~ 1000 items 그레이드별 배율 리스트 (double 모드) 그레이드 값으로 인덱싱된 보상 배율의 배열로, 배정밀도 부동소수점수를 사용합니다. 인덱스 0의 항목이 그레이드 0의 배율, 인덱스 1이 그레이드 1의 배율이 됩니다. mode가 “double\"로 설정된 경우에 사용됩니다. ※ mode이(가) “double” 이면 필수 bigRates List {mode} == “big” ※ 1 ~ 1000 items 그레이드별 배율 리스트 (big 모드) 그레이드 값으로 인덱싱된 보상 배율의 배열로, 확장된 정밀도를 위해 문자열 표현 숫자를 사용합니다. 인덱스 0의 항목이 그레이드 0의 배율, 인덱스 1이 그레이드 1의 배율이 됩니다. 매우 큰 수치 계산이 필요한 게임을 위해 mode가 “big\"으로 설정된 경우에 사용됩니다. ※ mode이(가) “big” 이면 필수","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Grade Deploy/CDK 레퍼런스","url":"/ko/api_reference/grade/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 사용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스를 사용하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 blockingPolicy BlockingPolicyModel  블로킹 정책 GS2 서비스에 대한 액세스를 제어하는 이 네임스페이스의 보안 정책 설정입니다. 액세스 가능한 서비스, 지리적 제한 규칙, 익명 IP 감지, 호스팅 제공업체 IP 감지, 평판 기반 IP 필터링, 커스텀 IP 주소 허용/거부 목록을 정의합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Guard::Namespace Properties : Name : namespace-0001 Description : null BlockingPolicy : PassServices : - account DefaultRestriction : Deny LocationDetection : Disable AnonymousIpDetection : Disable HostingProviderIpDetection : Disable ReputationIpDetection : Disable IpAddressesDetection : Enable IpAddresses : - 192.168.0.0 /24 IpAddressRestriction : Allow import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/guard\" ) SampleStack := core . NewStack () guard . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , guard . BlockingPolicyModel { PassServices : [] string { \"account\" , }, DefaultRestriction : guard . BlockingPolicyModelDefaultRestrictionDeny , LocationDetection : guard . BlockingPolicyModelLocationDetectionDisable , AnonymousIpDetection : guard . BlockingPolicyModelAnonymousIpDetectionDisable , HostingProviderIpDetection : guard . BlockingPolicyModelHostingProviderIpDetectionDisable , ReputationIpDetection : guard . BlockingPolicyModelReputationIpDetectionDisable , IpAddressesDetection : guard . BlockingPolicyModelIpAddressesDetectionEnable , IpAddresses : [] string { \"192.168.0.0/24\" , }, IpAddressRestriction : guard . BlockingPolicyModelIpAddressRestrictionAllow . Pointer (), }, guard . NamespaceOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Guard\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , blockingPolicy : new \\Gs2Cdk\\Guard\\Model\\BlockingPolicyModel ( passServices : [ \"account\" , ], defaultRestriction : \\Gs2Cdk\\Guard\\Model\\Enums\\BlockingPolicyModelDefaultRestriction :: DENY , locationDetection : \\Gs2Cdk\\Guard\\Model\\Enums\\BlockingPolicyModelLocationDetection :: DISABLE , anonymousIpDetection : \\Gs2Cdk\\Guard\\Model\\Enums\\BlockingPolicyModelAnonymousIpDetection :: DISABLE , hostingProviderIpDetection : \\Gs2Cdk\\Guard\\Model\\Enums\\BlockingPolicyModelHostingProviderIpDetection :: DISABLE , reputationIpDetection : \\Gs2Cdk\\Guard\\Model\\Enums\\BlockingPolicyModelReputationIpDetection :: DISABLE , ipAddressesDetection : \\Gs2Cdk\\Guard\\Model\\Enums\\BlockingPolicyModelIpAddressesDetection :: ENABLE , options : new \\Gs2Cdk\\Guard\\Model\\Options\\BlockingPolicyModelOptions ( ipAddresses : [ \"192.168.0.0/24\" , ], ipAddressRestriction : \\Gs2Cdk\\Guard\\Model\\Enums\\BlockingPolicyModelIpAddressRestriction :: ALLOW ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . guard . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . guard . model . BlockingPolicyModel ( Arrays . asList ( \"account\" ), io . gs2 . cdk . guard . model . enums . BlockingPolicyModelDefaultRestriction . DENY , io . gs2 . cdk . guard . model . enums . BlockingPolicyModelLocationDetection . DISABLE , io . gs2 . cdk . guard . model . enums . BlockingPolicyModelAnonymousIpDetection . DISABLE , io . gs2 . cdk . guard . model . enums . BlockingPolicyModelHostingProviderIpDetection . DISABLE , io . gs2 . cdk . guard . model . enums . BlockingPolicyModelReputationIpDetection . DISABLE , io . gs2 . cdk . guard . model . enums . BlockingPolicyModelIpAddressesDetection . ENABLE , new io . gs2 . cdk . guard . model . options . BlockingPolicyModelOptions () . withIpAddresses ( Arrays . asList ( \"192.168.0.0/24\" ) ) . withIpAddressRestriction ( io . gs2 . cdk . guard . model . enums . BlockingPolicyModelIpAddressRestriction . ALLOW ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Guard . Model . Namespace ( stack : this , name : \"namespace-0001\" , blockingPolicy : new Gs2Cdk . Gs2Guard . Model . BlockingPolicyModel ( passServices : new string [] { \"account\" }, defaultRestriction : Gs2Cdk . Gs2Guard . Model . Enums . BlockingPolicyModelDefaultRestriction . Deny , locationDetection : Gs2Cdk . Gs2Guard . Model . Enums . BlockingPolicyModelLocationDetection . Disable , anonymousIpDetection : Gs2Cdk . Gs2Guard . Model . Enums . BlockingPolicyModelAnonymousIpDetection . Disable , hostingProviderIpDetection : Gs2Cdk . Gs2Guard . Model . Enums . BlockingPolicyModelHostingProviderIpDetection . Disable , reputationIpDetection : Gs2Cdk . Gs2Guard . Model . Enums . BlockingPolicyModelReputationIpDetection . Disable , ipAddressesDetection : Gs2Cdk . Gs2Guard . Model . Enums . BlockingPolicyModelIpAddressesDetection . Enable , options : new Gs2Cdk . Gs2Guard . Model . Options . BlockingPolicyModelOptions { ipAddresses = new string [] { \"192.168.0.0/24\" }, ipAddressRestriction = Gs2Cdk . Gs2Guard . Model . Enums . BlockingPolicyModelIpAddressRestriction . Allow } ) ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import guard from \"@/gs2cdk/guard\" ; class SampleStack extends core . Stack { public constructor () { super (); new guard . model . Namespace ( this , \"namespace-0001\" , new guard . model . BlockingPolicyModel ( [ \"account\" , ], guard . model . BlockingPolicyModelDefaultRestriction . DENY , guard . model . BlockingPolicyModelLocationDetection . DISABLE , guard . model . BlockingPolicyModelAnonymousIpDetection . DISABLE , guard . model . BlockingPolicyModelHostingProviderIpDetection . DISABLE , guard . model . BlockingPolicyModelReputationIpDetection . DISABLE , guard . model . BlockingPolicyModelIpAddressesDetection . ENABLE , { ipAddresses : [ \"192.168.0.0/24\" , ], ipAddressRestriction : guard.model.BlockingPolicyModelIpAddressRestriction.ALLOW } ) ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , guard class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () guard . Namespace ( stack = self , name = 'namespace-0001' , blocking_policy = guard . BlockingPolicyModel ( pass_services = [ 'account' , ], default_restriction = guard . BlockingPolicyModelDefaultRestriction . DENY , location_detection = guard . BlockingPolicyModelLocationDetection . DISABLE , anonymous_ip_detection = guard . BlockingPolicyModelAnonymousIpDetection . DISABLE , hosting_provider_ip_detection = guard . BlockingPolicyModelHostingProviderIpDetection . DISABLE , reputation_ip_detection = guard . BlockingPolicyModelReputationIpDetection . DISABLE , ip_addresses_detection = guard . BlockingPolicyModelIpAddressesDetection . ENABLE , options = guard . BlockingPolicyModelOptions ( ip_addresses = [ '192.168.0.0/24' , ], ip_address_restriction = guard . BlockingPolicyModelIpAddressRestriction . ALLOW , ) ), ) print ( SampleStack () . yaml ()) # Generate Template BlockingPolicyModel 블로킹 정책 GS2-Guard 네임스페이스의 포괄적인 액세스 제어 규칙을 정의합니다. 서비스 수준 액세스 제어, 국가별 지리적 제한, 익명 IP 감지(Tor/프록시), 호스팅 제공업체 IP 감지(VPN/렌탈 서버), IP 평판 필터링, 커스텀 IP 주소 허용/거부 목록 등 여러 보안 계층을 결합합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 passServices List  1 ~ 100 items 액세스 가능한 GS2 서비스 목록 이 가드 네임스페이스를 통해 클라이언트가 액세스할 수 있는 GS2 서비스 목록입니다. 이 목록에 포함된 서비스만 블로킹 정책의 보호 대상이 됩니다. 최소 하나 이상의 서비스를 지정해야 합니다. defaultRestriction 문자열 열거형 enum {   “Allow”,   “Deny” } “Allow” 제한 방침 설정된 감지 규칙 중 어느 것에도 일치하지 않는 요청에 적용되는 기본 동작입니다. “Allow\"는 일치하지 않는 모든 트래픽을 허용하고(블록리스트 방식), “Deny\"는 일치하지 않는 모든 트래픽을 차단합니다(허용리스트 방식). 정의 설명 Allow 조건에 일치하지 않는 액세스를 허용 Deny 조건에 일치하지 않는 액세스를 거부 locationDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 액세스 지역 감지 클라이언트의 액세스 지역 국가를 기반으로 한 지리적 제한을 활성화 또는 비활성화합니다. 활성화하면 국가별로 액세스가 필터링됩니다. 구체적인 국가와 허용/거부 동작은 locations 및 locationRestriction 필드에서 설정합니다. 정의 설명 Enable 활성화 Disable 비활성화 locations List {locationDetection} == “Enable” [] 1 ~ 100 items 액세스를 감지할 국가 목록 지리적 제한 필터링에 사용되는 국가 목록입니다. 각 국가는 ISO 3166-1 alpha-2 국가 코드로 지정합니다. 이 국가들이 허용되는지 거부되는지는 locationRestriction 설정에 따라 결정됩니다. locationDetection이 활성화된 경우에만 적용됩니다. ※ locationDetection이(가) “Enable” 이면 활성화 locationRestriction 문자열 열거형 enum {   “Allow”,   “Deny” } {locationDetection} == “Enable” ※ 국가 목록 일치 시 동작 locations 목록에 포함된 국가에서 온 요청에 대해 실행할 동작입니다. “Allow\"는 목록에 포함된 국가에서의 액세스만 허용하고(허용리스트), “Deny\"는 목록에 포함된 국가에서의 액세스를 차단합니다(블록리스트). locationDetection 및 locations 목록과 함께 동작합니다. 정의 설명 Allow 액세스를 허용 Deny 액세스를 거부 ※ locationDetection이(가) “Enable” 이면 필수 anonymousIpDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 익명 IP 서비스 감지 Tor 출구 노드나 공개 프록시 등 익명 IP 서비스로부터의 액세스 감지를 활성화 또는 비활성화합니다. 활성화하면 이러한 소스로부터의 요청이 식별되어 평가됩니다. 정의 설명 Enable 활성화 Disable 비활성화 anonymousIpRestriction 문자열 열거형 enum {   “Deny” } {anonymousIpDetection} == “Enable” “Deny” 익명 IP 감지 시 동작 익명 IP 서비스(Tor/공개 프록시)로부터의 액세스가 감지되었을 때 실행할 동작입니다. 현재는 해당 액세스를 차단하는 “Deny\"만 지원합니다. anonymousIpDetection이 활성화된 경우에만 적용됩니다. 정의 설명 Deny 액세스를 거부 ※ anonymousIpDetection이(가) “Enable” 이면 활성화 hostingProviderIpDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 호스팅 서비스 감지 공개 VPN 서비스나 렌탈 서버 등 호스팅 제공업체의 IP 주소로부터의 액세스 감지를 활성화 또는 비활성화합니다. 활성화하면 최종 사용자 디바이스가 아닌 클라우드 인프라나 호스팅 서비스에서 발생한 트래픽이 식별되어 평가됩니다. 정의 설명 Enable 활성화 Disable 비활성화 hostingProviderIpRestriction 문자열 열거형 enum {   “Deny” } {hostingProviderIpDetection} == “Enable” “Deny” 호스팅 서비스 감지 시 동작 호스팅 제공업체 IP(공개 VPN/렌탈 서버)로부터의 액세스가 감지되었을 때 실행할 동작입니다. 현재는 해당 액세스를 차단하는 “Deny\"만 지원합니다. hostingProviderIpDetection이 활성화된 경우에만 적용됩니다. 정의 설명 Deny 액세스를 거부 ※ hostingProviderIpDetection이(가) “Enable” 이면 활성화 reputationIpDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 악의적인 액세스 원본 IP 감지 알려진 악평을 가진 IP 주소로부터의 액세스 감지를 활성화 또는 비활성화합니다. 활성화하면 봇, DDoS 공격 등 악의적인 활동과 연관된 IP가 식별되어 평가됩니다. 정의 설명 Enable 활성화 Disable 비활성화 reputationIpRestriction 문자열 열거형 enum {   “Deny” } {reputationIpDetection} == “Enable” “Deny” 악의적인 액세스 원본 IP 감지 시 동작 악평을 가진 IP로부터의 액세스가 감지되었을 때 실행할 동작입니다. 현재는 해당 액세스를 차단하는 “Deny\"만 지원합니다. reputationIpDetection이 활성화된 경우에만 적용됩니다. 정의 설명 Deny 액세스를 거부 ※ reputationIpDetection이(가) “Enable” 이면 활성화 ipAddressesDetection 문자열 열거형 enum {   “Enable”,   “Disable” } “Disable” 액세스 원본 IP 감지 커스텀 IP 주소 기반 액세스 필터링을 활성화 또는 비활성화합니다. 활성화하면 ipAddresses 필드에 지정된 커스텀 IP 주소 목록에 대해 요청이 평가됩니다. 허용/거부 동작은 ipAddressRestriction으로 제어됩니다. 정의 설명 Enable 활성화 Disable 비활성화 ipAddresses List {ipAddressesDetection} == “Enable” 0 ~ 100 items IP 주소 범위 목록 커스텀 IP 기반 액세스 필터링에 사용되는 CIDR 표기법의 IP 주소 범위 목록입니다. 수신되는 각 요청의 소스 IP가 이 범위들에 대해 평가됩니다. 일치하는 IP가 허용되는지 거부되는지는 ipAddressRestriction으로 제어됩니다. ipAddressesDetection이 활성화된 경우에만 적용됩니다. ※ ipAddressesDetection이(가) “Enable” 이면 활성화 ipAddressRestriction 문자열 열거형 enum {   “Allow”,   “Deny” } {ipAddressesDetection} == “Enable” ※ IP 주소 목록 일치 시 동작 요청의 소스 IP가 커스텀 IP 주소 목록에 일치했을 때 실행할 동작입니다. “Allow\"는 목록에 포함된 IP로부터의 액세스만 허용하고(허용리스트), “Deny\"는 목록에 포함된 IP로부터의 액세스를 차단합니다(블록리스트). ipAddressesDetection이 활성화된 경우에만 적용됩니다. 정의 설명 Allow 액세스를 허용 Deny 액세스를 거부 ※ ipAddressesDetection이(가) “Enable” 이면 필수","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Guard Deploy/CDK 레퍼런스","url":"/ko/api_reference/guard/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 길드 조작 시 분산 트랜잭션의 실행 방식을 제어하는 설정입니다. 자동 실행, 원자적 커밋, 비동기 처리 등의 옵션을 지원합니다. changeNotification NotificationSetting 길드 변경 통지 길드 정보(표시 이름, 속성, 가입 정책 등)가 갱신되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 길드 멤버가 길드의 변경 사항에 대해 실시간으로 알림을 받을 수 있습니다. joinNotification NotificationSetting 멤버 가입 통지 새로운 멤버가 길드에 가입했을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 자유 가입 및 참가 신청 승인 양쪽 모두에 대응합니다. 기존 멤버가 신규 가입을 통지받을 수 있게 됩니다. leaveNotification NotificationSetting 멤버 탈퇴 통지 멤버가 길드에서 탈퇴하거나 제명되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 자발적인 탈퇴와 길드 마스터에 의한 추방 양쪽 모두에 대응합니다. changeMemberNotification NotificationSetting 멤버 변경 통지 길드 멤버의 정보(롤, 메타데이터)가 갱신되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 메타데이터 변경으로 이 통지가 발생할지 여부는 changeMemberNotificationIgnoreChangeMetadata로 제어할 수 있습니다. changeMemberNotificationIgnoreChangeMetadata bool? false 멤버의 정보가 갱신되었을 때 통지를 발행할 때 메타데이터 변경을 무시할지 여부 receiveRequestNotification NotificationSetting 신청 수신 통지 길드가 사용자로부터 새로운 참가 신청을 수신했을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 길드 마스터 및 권한을 가진 멤버가 승인이 필요한 보류 신청을 통지받을 수 있게 됩니다. removeRequestNotification NotificationSetting 신청 삭제 통지 길드 참가 신청이 삭제되었을 때 GS2-Gateway를 통해 전송되는 푸시 통지입니다. 발신자에 의한 취소, 길드에 의한 거부, 또는 승인(신청 삭제 및 멤버 추가) 중 하나에 대응합니다. createGuildScript ScriptSetting 길드를 생성할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - createGuild updateGuildScript ScriptSetting 길드를 갱신할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - updateGuild joinGuildScript ScriptSetting 길드에 가입할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - joinGuild receiveJoinRequestScript ScriptSetting 길드에 참가 신청을 접수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveJoinRequest leaveGuildScript ScriptSetting 길드를 탈퇴할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - leaveGuild changeRoleScript ScriptSetting 멤버에게 할당된 롤을 변경할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - changeRole deleteGuildScript ScriptSetting 길드를 삭제할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteGuild logSetting LogSetting 로그 출력 설정 길드 조작의 로그 데이터를 GS2-Log 로 출력하기 위한 설정입니다. GS2-Log 의 네임스페이스를 지정하면 길드 생성, 참가, 탈퇴, 역할 변경의 API 요청·응답 로그를 수집할 수 있습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Guild::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 ChangeNotification : null JoinNotification : null LeaveNotification : null ChangeMemberNotification : null ChangeMemberNotificationIgnoreChangeMetadata : null ReceiveRequestNotification : null RemoveRequestNotification : null CreateGuildScript : null UpdateGuildScript : null JoinGuildScript : null ReceiveJoinRequestScript : null LeaveGuildScript : null ChangeRoleScript : null DeleteGuildScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/guild\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () guild . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , guild . NamespaceOptions { TransactionSetting : \u0026 core . TransactionSetting { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Guild\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Guild\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . guild . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . guild . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Guild . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Guild . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import guild from \"@/gs2cdk/guild\" ; class SampleStack extends core . Stack { public constructor () { super (); new guild . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , guild class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () guild . Namespace ( stack = self , name = 'namespace-0001' , options = guild . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentGuildMaster 현재 활성화되어 있는 길드 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한, 길드 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Guild 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentGuildMaster 갱신된 현재 활성화된 길드 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Guild::CurrentGuildMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2024-04-25\" , \"guildModels\": [ { \"name\": \"guild-0001\" , \"defaultMaximumMemberCount\": 10 , \"maximumMemberCount\": 50 , \"inactivityPeriodDays\": 10 , \"roles\": [ { \"name\": \"master\" , \"policyDocument\": \"{\\\\\"Version\\\\\": \\\\\"2016-04-01\\\\\", \\\\\"Statements\\\\\": [{\\\\\"Effect\\\\\": \\\\\"Allow\\\\\", \\\\\"Actions\\\\\": [\\\\\"Gs2Guild:UpdateGuild\\\\\"], \\\\\"Resources\\\\\": [ \\\\\"*\\\\\"]}]}\" } , { \"name\": \"member\" , \"policyDocument\": \"{\\\\\"Version\\\\\": \\\\\"2016-04-01\\\\\", \\\\\"Statements\\\\\": [{\\\\\"Effect\\\\\": \\\\\"Allow\\\\\", \\\\\"Actions\\\\\": [\\\\\"Gs2Guild:UpdateGuild\\\\\"], \\\\\"Resources\\\\\": [ \\\\\"*\\\\\"]}]}\" } ], \"guildMasterRole\": \"master\" , \"guildMemberDefaultRole\": \"member\" , \"rejoinCoolTimeMinutes\": 1440 } , { \"name\": \"guild-0002\" , \"defaultMaximumMemberCount\": 20 , \"maximumMemberCount\": 40 , \"inactivityPeriodDays\": 10 , \"roles\": [ { \"name\": \"master\" , \"policyDocument\": \"{\\\\\"Version\\\\\": \\\\\"2016-04-01\\\\\", \\\\\"Statements\\\\\": [{\\\\\"Effect\\\\\": \\\\\"Allow\\\\\", \\\\\"Actions\\\\\": [\\\\\"Gs2Guild:UpdateGuild\\\\\"], \\\\\"Resources\\\\\": [ \\\\\"*\\\\\"]}]}\" } , { \"name\": \"member\" , \"policyDocument\": \"{\\\\\"Version\\\\\": \\\\\"2016-04-01\\\\\", \\\\\"Statements\\\\\": [{\\\\\"Effect\\\\\": \\\\\"Allow\\\\\", \\\\\"Actions\\\\\": [\\\\\"Gs2Guild:UpdateGuild\\\\\"], \\\\\"Resources\\\\\": [ \\\\\"*\\\\\"]}]}\" } ], \"guildMasterRole\": \"master\" , \"guildMemberDefaultRole\": \"member\" , \"rejoinCoolTimeMinutes\": 360 } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/guild\" ) SampleStack := core . NewStack () guild . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , guild . NamespaceOptions {}, ). MasterData ( [] guild . GuildModel { guild . NewGuildModel ( \"guild-0001\" , 10 , 50 , 10 , [] guild . RoleModel { guild . NewRoleModel ( \"master\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" , guild . RoleModelOptions {}, ), guild . NewRoleModel ( \"member\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" , guild . RoleModelOptions {}, ), }, \"master\" , \"member\" , 1440 , guild . GuildModelOptions { }, ), guild . NewGuildModel ( \"guild-0002\" , 20 , 40 , 10 , [] guild . RoleModel { guild . NewRoleModel ( \"master\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" , guild . RoleModelOptions {}, ), guild . NewRoleModel ( \"member\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" , guild . RoleModelOptions {}, ), }, \"master\" , \"member\" , 360 , guild . GuildModelOptions { }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Guild\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Guild\\Model\\GuildModel ( name : \"guild-0001\" , defaultMaximumMemberCount : 10 , maximumMemberCount : 50 , inactivityPeriodDays : 10 , roles : [ new \\Gs2Cdk\\Guild\\Model\\RoleModel ( name : \"master\" , policyDocument : \"{ \\\\\\\" Version \\\\\\\" : \\\\\\\" 2016-04-01 \\\\\\\" , \\\\\\\" Statements \\\\\\\" : [{ \\\\\\\" Effect \\\\\\\" : \\\\\\\" Allow \\\\\\\" , \\\\\\\" Actions \\\\\\\" : [ \\\\\\\" Gs2Guild:UpdateGuild \\\\\\\" ], \\\\\\\" Resources \\\\\\\" : [ \\\\\\\" * \\\\\\\" ]}]}\" , ), new \\Gs2Cdk\\Guild\\Model\\RoleModel ( name : \"member\" , policyDocument : \"{ \\\\\\\" Version \\\\\\\" : \\\\\\\" 2016-04-01 \\\\\\\" , \\\\\\\" Statements \\\\\\\" : [{ \\\\\\\" Effect \\\\\\\" : \\\\\\\" Allow \\\\\\\" , \\\\\\\" Actions \\\\\\\" : [ \\\\\\\" Gs2Guild:UpdateGuild \\\\\\\" ], \\\\\\\" Resources \\\\\\\" : [ \\\\\\\" * \\\\\\\" ]}]}\" , ), ], guildMasterRole : \"master\" , guildMemberDefaultRole : \"member\" , rejoinCoolTimeMinutes : 1440 ), new \\Gs2Cdk\\Guild\\Model\\GuildModel ( name : \"guild-0002\" , defaultMaximumMemberCount : 20 , maximumMemberCount : 40 , inactivityPeriodDays : 10 , roles : [ new \\Gs2Cdk\\Guild\\Model\\RoleModel ( name : \"master\" , policyDocument : \"{ \\\\\\\" Version \\\\\\\" : \\\\\\\" 2016-04-01 \\\\\\\" , \\\\\\\" Statements \\\\\\\" : [{ \\\\\\\" Effect \\\\\\\" : \\\\\\\" Allow \\\\\\\" , \\\\\\\" Actions \\\\\\\" : [ \\\\\\\" Gs2Guild:UpdateGuild \\\\\\\" ], \\\\\\\" Resources \\\\\\\" : [ \\\\\\\" * \\\\\\\" ]}]}\" , ), new \\Gs2Cdk\\Guild\\Model\\RoleModel ( name : \"member\" , policyDocument : \"{ \\\\\\\" Version \\\\\\\" : \\\\\\\" 2016-04-01 \\\\\\\" , \\\\\\\" Statements \\\\\\\" : [{ \\\\\\\" Effect \\\\\\\" : \\\\\\\" Allow \\\\\\\" , \\\\\\\" Actions \\\\\\\" : [ \\\\\\\" Gs2Guild:UpdateGuild \\\\\\\" ], \\\\\\\" Resources \\\\\\\" : [ \\\\\\\" * \\\\\\\" ]}]}\" , ), ], guildMasterRole : \"master\" , guildMemberDefaultRole : \"member\" , rejoinCoolTimeMinutes : 360 ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . guild . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . guild . model . GuildModel ( \"guild-0001\" , 10 , 50 , 10 , Arrays . asList ( new io . gs2 . cdk . guild . model . RoleModel ( \"master\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ), new io . gs2 . cdk . guild . model . RoleModel ( \"member\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ) ), \"master\" , \"member\" , 1440 ), new io . gs2 . cdk . guild . model . GuildModel ( \"guild-0002\" , 20 , 40 , 10 , Arrays . asList ( new io . gs2 . cdk . guild . model . RoleModel ( \"master\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ), new io . gs2 . cdk . guild . model . RoleModel ( \"member\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ) ), \"master\" , \"member\" , 360 ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Guild . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Guild . Model . GuildModel [] { new Gs2Cdk . Gs2Guild . Model . GuildModel ( name : \"guild-0001\" , defaultMaximumMemberCount : 10 , maximumMemberCount : 50 , inactivityPeriodDays : 10 , roles : new Gs2Cdk . Gs2Guild . Model . RoleModel [] { new Gs2Cdk . Gs2Guild . Model . RoleModel ( name : \"master\" , policyDocument : \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ), new Gs2Cdk . Gs2Guild . Model . RoleModel ( name : \"member\" , policyDocument : \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ) }, guildMasterRole : \"master\" , guildMemberDefaultRole : \"member\" , rejoinCoolTimeMinutes : 1440 ), new Gs2Cdk . Gs2Guild . Model . GuildModel ( name : \"guild-0002\" , defaultMaximumMemberCount : 20 , maximumMemberCount : 40 , inactivityPeriodDays : 10 , roles : new Gs2Cdk . Gs2Guild . Model . RoleModel [] { new Gs2Cdk . Gs2Guild . Model . RoleModel ( name : \"master\" , policyDocument : \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ), new Gs2Cdk . Gs2Guild . Model . RoleModel ( name : \"member\" , policyDocument : \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ) }, guildMasterRole : \"master\" , guildMemberDefaultRole : \"member\" , rejoinCoolTimeMinutes : 360 ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import guild from \"@/gs2cdk/guild\" ; class SampleStack extends core . Stack { public constructor () { super (); new guild . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new guild . model . GuildModel ( \"guild-0001\" , 10 , 50 , 10 , [ new guild . model . RoleModel ( \"master\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ), new guild . model . RoleModel ( \"member\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ), ], \"master\" , \"member\" , 1440 ), new guild . model . GuildModel ( \"guild-0002\" , 20 , 40 , 10 , [ new guild . model . RoleModel ( \"master\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ), new guild . model . RoleModel ( \"member\" , \"{\\\\\\\"Version\\\\\\\": \\\\\\\"2016-04-01\\\\\\\", \\\\\\\"Statements\\\\\\\": [{\\\\\\\"Effect\\\\\\\": \\\\\\\"Allow\\\\\\\", \\\\\\\"Actions\\\\\\\": [\\\\\\\"Gs2Guild:UpdateGuild\\\\\\\"], \\\\\\\"Resources\\\\\\\": [\\\\\\\"*\\\\\\\"]}]}\" ), ], \"master\" , \"member\" , 360 ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , guild class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () guild . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( guild_models = [ guild . GuildModel ( name = 'guild-0001' , default_maximum_member_count = 10 , maximum_member_count = 50 , inactivity_period_days = 10 , roles = [ guild . RoleModel ( name = 'master' , policy_document = '{ \\\\\\\" Version \\\\\\\" : \\\\\\\" 2016-04-01 \\\\\\\" , \\\\\\\" Statements \\\\\\\" : [{ \\\\\\\" Effect \\\\\\\" : \\\\\\\" Allow \\\\\\\" , \\\\\\\" Actions \\\\\\\" : [ \\\\\\\" Gs2Guild:UpdateGuild \\\\\\\" ], \\\\\\\" Resources \\\\\\\" : [ \\\\\\\" * \\\\\\\" ]}]}' , ), guild . RoleModel ( name = 'member' , policy_document = '{ \\\\\\\" Version \\\\\\\" : \\\\\\\" 2016-04-01 \\\\\\\" , \\\\\\\" Statements \\\\\\\" : [{ \\\\\\\" Effect \\\\\\\" : \\\\\\\" Allow \\\\\\\" , \\\\\\\" Actions \\\\\\\" : [ \\\\\\\" Gs2Guild:UpdateGuild \\\\\\\" ], \\\\\\\" Resources \\\\\\\" : [ \\\\\\\" * \\\\\\\" ]}]}' , ), ], guild_master_role = 'master' , guild_member_default_role = 'member' , rejoin_cool_time_minutes = 1440 ), guild . GuildModel ( name = 'guild-0002' , default_maximum_member_count = 20 , maximum_member_count = 40 , inactivity_period_days = 10 , roles = [ guild . RoleModel ( name = 'master' , policy_document = '{ \\\\\\\" Version \\\\\\\" : \\\\\\\" 2016-04-01 \\\\\\\" , \\\\\\\" Statements \\\\\\\" : [{ \\\\\\\" Effect \\\\\\\" : \\\\\\\" Allow \\\\\\\" , \\\\\\\" Actions \\\\\\\" : [ \\\\\\\" Gs2Guild:UpdateGuild \\\\\\\" ], \\\\\\\" Resources \\\\\\\" : [ \\\\\\\" * \\\\\\\" ]}]}' , ), guild . RoleModel ( name = 'member' , policy_document = '{ \\\\\\\" Version \\\\\\\" : \\\\\\\" 2016-04-01 \\\\\\\" , \\\\\\\" Statements \\\\\\\" : [{ \\\\\\\" Effect \\\\\\\" : \\\\\\\" Allow \\\\\\\" , \\\\\\\" Actions \\\\\\\" : [ \\\\\\\" Gs2Guild:UpdateGuild \\\\\\\" ], \\\\\\\" Resources \\\\\\\" : [ \\\\\\\" * \\\\\\\" ]}]}' , ), ], guild_master_role = 'master' , guild_member_default_role = 'member' , rejoin_cool_time_minutes = 360 ), ], ) print ( SampleStack () . yaml ()) # Generate Template GuildModel 길드 모델 길드 모델이란 길드에 가입 가능한 최대 인원수 설정 및 길드 내 직책별 권한 설정을 가지는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 guildModelId string ※ ~ 1024자 길드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultMaximumMemberCount int  1 ~ 2147483646 기본 최대 멤버 수 새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다. maximumMemberCount int  1 ~ 2147483646 최대 멤버 수 상한 길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다. inactivityPeriodDays int 7 1 ~ 365 무활동 기간(일수) 길드 마스터의 무활동이 이 일수를 초과한 경우, 남은 길드 멤버 중에서 새로운 길드 마스터가 자동으로 선출됩니다. 길드 마스터가 플레이를 중단했을 때 길드가 관리 불능 상태가 되는 것을 방지합니다. roles List  1 ~ 10 items 롤 모델 리스트 이 타입의 길드 내에서 이용 가능한 롤 정의 리스트입니다. guildMasterRole 및 guildMemberDefaultRole에서 참조되는 롤을 최소한 포함해야 합니다. 각 롤은 정책 문서를 통해 고유한 권한 집합을 정의합니다. 최대 10개의 롤을 정의할 수 있습니다. guildMasterRole string  ~ 128자 길드 마스터 롤 이름 길드 마스터에게 할당되는 롤의 이름입니다. roles 리스트에 정의된 롤을 참조해야 합니다. 길드 마스터는 일반적으로 참가 신청 승인, 멤버 추방, 롤 변경, 길드 설정 갱신 등 길드를 관리하는 모든 권한을 가집니다. guildMemberDefaultRole string  ~ 128자 기본 멤버 롤 이름 새로운 길드 멤버가 가입할 때 자동으로 할당되는 롤의 이름입니다. roles 리스트에 정의된 롤을 참조해야 합니다. 이는 길드 마스터에 의한 롤 변경 이전, 일반 멤버의 기본 권한 집합입니다. rejoinCoolTimeMinutes int 0 0 ~ 2147483646 재가입 쿨타임(분) 사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다. maxConcurrentJoinGuilds int 1 ~ 10 동시 가입 가능 길드 최대 수 사용자가 이 타입의 길드에 동시에 멤버로 가입할 수 있는 최대 수입니다. 플레이어가 여러 길드에 동시에 소속될 수 있는 디자인(예: 전투 길드와 소셜 길드)을 가능하게 합니다. 값은 1에서 10 사이입니다. maxConcurrentGuildMasterCount int 1 ~ 100 동시 존재 가능 길드 마스터 최대 수 하나의 길드에 동시에 존재할 수 있는 길드 마스터의 최대 인원수입니다. 여러 플레이어가 길드 마스터의 책임과 권한을 공유하는 공동 리더십 디자인을 가능하게 합니다. 값은 1에서 100 사이입니다. RoleModel 롤 모델 롤 모델은 길드 내에서의 역할을 정의하고, 각 역할별로 실행할 수 있는 처리에 관한 권한을 설정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. policyDocument string  ~ 10240자 정책 문서 이 역할의 권한을 정의하는 JSON 형식의 정책 문서입니다. 이 역할에 할당된 멤버에 대해 어떤 길드 조작(참가 요청 승인/거부, 멤버 추방, 길드 정보 업데이트, 멤버 역할 변경 등)이 허용되거나 거부되는지를 지정합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Guild Deploy/CDK 레퍼런스","url":"/ko/api_reference/guild/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Identifier 크레덴셜 GS2 API에 액세스하기 위해 사용되는 크레덴셜입니다. 크레덴셜은 클라이언트 ID와 클라이언트 시크릿으로 구성되며, 크레덴셜을 사용한 액세스는 크레덴셜 소유자인 사용자의 권한에 따라 액세스가 제한됩니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 크레덴셜을 소유한 GS2-Identifier 사용자의 이름입니다. 크레덴셜은 이 사용자에게 연결된 보안 정책에 따라 권한을 상속받습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Identifier 작성한 크리덴셜 ClientSecret string 클라이언트 시크릿 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Identifier::Identifier Properties : UserName : user-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/identifier\" ) SampleStack := core . NewStack () identifier . NewIdentifier ( \u0026 SampleStack , \"user-0001\" , identifier . IdentifierOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Identifier\\Model\\Identifier ( stack : $this , userName : \"user-0001\" ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . identifier . model . Identifier ( this , \"user-0001\" ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Identifier . Model . Identifier ( stack : this , userName : \"user-0001\" ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import identifier from \"@/gs2cdk/identifier\" ; class SampleStack extends core . Stack { public constructor () { super (); new identifier . model . Identifier ( this , \"user-0001\" ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , identifier class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () identifier . Identifier ( stack = self , user_name = 'user-0001' , ) print ( SampleStack () . yaml ()) # Generate Template Password 비밀번호 사용자의 권한에 따라 매니지먼트 콘솔에 로그인하기 위한 비밀번호입니다. 비밀번호를 설정하면 하나의 프로젝트에 서로 다른 계정으로 로그인할 수 있으며, 접근 가능한 정보에 제한을 둘 수 있습니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 사용자 이름 이 비밀번호를 소유하는 GS2-Identifier 사용자의 이름입니다. 사용자는 이 사용자 이름과 대응하는 비밀번호로 매니지먼트 콘솔에 로그인하며, 사용자에게 할당된 보안 정책에 따라 접근이 제한됩니다. password string  ~ 1024자 비밀번호 매니지먼트 콘솔 인증에 사용되는 해시화된 비밀번호입니다. 비밀번호 생성 시 설정되며, 로그인 시 사용자 입력과 대조됩니다. 내부적으로 저장되며, API를 통해 반환되지 않습니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Password 작성한 패스워드 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Identifier::Password Properties : UserName : user-0001 Password : password-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/identifier\" ) SampleStack := core . NewStack () identifier . NewPassword ( \u0026 SampleStack , \"user-0001\" , \"password-0001\" , identifier . PasswordOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Identifier\\Model\\Password ( stack : $this , userName : \"user-0001\" , password : \"password-0001\" ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . identifier . model . Password ( this , \"user-0001\" , \"password-0001\" ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Identifier . Model . Password ( stack : this , userName : \"user-0001\" , password : \"password-0001\" ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import identifier from \"@/gs2cdk/identifier\" ; class SampleStack extends core . Stack { public constructor () { super (); new identifier . model . Password ( this , \"user-0001\" , \"password-0001\" ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , identifier class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () identifier . Password ( stack = self , user_name = 'user-0001' , password = 'password-0001' , ) print ( SampleStack () . yaml ()) # Generate Template AttachSecurityPolicy 할당된 보안 정책 GS2-Identifier 사용자와 보안 정책의 연결을 관리합니다. 각 사용자는 해당 사용자에게 적용되는 보안 정책 GRN 목록을 포함하는 하나의 할당 레코드를 가집니다. 사용자의 크리덴셜이 API 접근에 사용될 때, 할당된 모든 정책이 평가되어 요청된 작업이 허용되는지 거부되는지가 판정됩니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 userName string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. securityPolicyId string  ~ 1024자 할당할 보안 정책의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Items SecurityPolicy[] 사용자에게 할당한 보안 정책 목록 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Identifier::AttachSecurityPolicy Properties : UserName : user-0001 SecurityPolicyId : securityPolicyId-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/identifier\" ) SampleStack := core . NewStack () identifier . NewAttachSecurityPolicy ( \u0026 SampleStack , \"user-0001\" , \"securityPolicyId-0001\" , identifier . AttachSecurityPolicyOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Identifier\\Model\\AttachSecurityPolicy ( stack : $this , userName : \"user-0001\" , securityPolicyId : \"securityPolicyId-0001\" ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . identifier . model . AttachSecurityPolicy ( this , \"user-0001\" , \"securityPolicyId-0001\" ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Identifier . Model . AttachSecurityPolicy ( stack : this , userName : \"user-0001\" , securityPolicyId : \"securityPolicyId-0001\" ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import identifier from \"@/gs2cdk/identifier\" ; class SampleStack extends core . Stack { public constructor () { super (); new identifier . model . AttachSecurityPolicy ( this , \"user-0001\" , \"securityPolicyId-0001\" ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , identifier class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () identifier . AttachSecurityPolicy ( stack = self , user_name = 'user-0001' , security_policy_id = 'securityPolicyId-0001' , ) print ( SampleStack () . yaml ()) # Generate Template User GS2-Identifier 사용자 프로젝트에 접근 가능한 게임 개발자를 나타내는 엔티티입니다. 사용자는 프로그램에서 접근하기 위한 크리덴셜과, 사용자의 권한에 따라 매니지먼트 콘솔에 로그인하여 프로젝트를 관리할 수 있는 비밀번호를 등록할 수 있습니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 GS2-Identifier 사용자 이름 GS2-Identifier 사용자 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item User 생성한 사용자 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Identifier::User Properties : Name : user-0001 Description : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/identifier\" ) SampleStack := core . NewStack () identifier . NewUser ( \u0026 SampleStack , \"user-0001\" , identifier . UserOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Identifier\\Model\\User ( stack : $this , name : \"user-0001\" ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . identifier . model . User ( this , \"user-0001\" ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Identifier . Model . User ( stack : this , name : \"user-0001\" ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import identifier from \"@/gs2cdk/identifier\" ; class SampleStack extends core . Stack { public constructor () { super (); new identifier . model . User ( this , \"user-0001\" ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , identifier class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () identifier . User ( stack = self , name = 'user-0001' , ) print ( SampleStack () . yaml ()) # Generate Template SecurityPolicy 보안 정책 사용자가 사용할 수 있는 API의 종류와 접근 가능한 리소스의 제한을 정의합니다. 접근 제한 규칙은 정책 문서라는 JSON 형식의 정의 데이터를 사용합니다. 정책 문서의 사양에 대해서는 개발 문서 내 정책 문서에 대한 설명 페이지 를 참조하십시오. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보안 정책 이름 보안 정책 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 policy string  ~ 524288자 정책 문서 이 보안 정책의 접근 제어 규칙을 정의하는 JSON 문서입니다. 어떤 GS2 API 액션을 허용 또는 거부할지, 그리고 규칙이 적용되는 리소스(GRN 패턴으로 식별)를 지정합니다. 여러 스테이트먼트를 조합하여 세밀한 접근 제어를 만들 수 있습니다. 최대 512KB입니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item SecurityPolicy 생성한 보안 정책 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Identifier::SecurityPolicy Properties : Name : policy-0001 Description : null Policy : Version : \"2016-04-01\" Statements : - Effect : Allow Actions : - \"*\" Resources : - \"*\" import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/identifier\" ) SampleStack := core . NewStack () identifier . NewSecurityPolicy ( \u0026 SampleStack , \"policy-0001\" , identifier . NewPolicy ( [] identifier . Statement { identifier . NewAllowAllStatement (), }, ), identifier . SecurityPolicyOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Identifier\\Model\\SecurityPolicy ( stack : $this , name : \"policy-0001\" , policy : new \\Gs2Cdk\\Identifier\\Model\\Policy ([ \\Gs2Cdk\\Identifier\\Model\\Statement :: allowAll () ]) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . identifier . model . SecurityPolicy ( this , \"policy-0001\" , new io . gs2 . cdk . identifier . model . Policy ( Arrays . asList ( io . gs2 . cdk . identifier . model . Statement . allowAll () ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Identifier . Model . SecurityPolicy ( stack : this , name : \"policy-0001\" , policy : new Gs2Cdk . Gs2Identifier . Model . Policy ( new [] { Gs2Cdk . Gs2Identifier . Model . Statement . AllowAll () } ) ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import identifier from \"@/gs2cdk/identifier\" ; import Policy from \"@/gs2cdk/identifier/model/Policy\" ; import Statement from \"@/gs2cdk/identifier/model/Statement\" ; class SampleStack extends core . Stack { public constructor () { super (); new identifier . model . SecurityPolicy ( this , \"policy-0001\" , new Policy ( [ Statement . allowAll () ] ) ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , identifier class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () identifier . SecurityPolicy ( stack = self , name = 'policy-0001' , policy = identifier . Policy ([ identifier . Statement . allow_all (), ]), ) print ( SampleStack () . yaml ()) # Generate Template","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Identifier Deploy/CDK 레퍼런스","url":"/ko/api_reference/identifier/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 방치 보상 부여 시 트랜잭션의 처리 방법을 제어하는 설정입니다. receiveScript ScriptSetting 보상을 받았을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receive overrideAcquireActionsScriptId string ~ 1024자 방치 보상의 입수 액션을 동적으로 결정하는 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - overrideAcquireActions logSetting LogSetting 로그 출력 설정 방치 보상 조작과 관련된 API 요청 및 응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 방치 스테이터스 생성, 보상 수취, 타이밍 문제 디버깅에 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Idle::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 ReceiveScript : null OverrideAcquireActionsScriptId : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/idle\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () idle . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , idle . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Idle\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Idle\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . idle . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . idle . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Idle . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Idle . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import idle from \"@/gs2cdk/idle\" ; class SampleStack extends core . Stack { public constructor () { super (); new idle . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , idle class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () idle . Namespace ( stack = self , name = 'namespace-0001' , options = idle . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentCategoryMaster 현재 활성화된 카테고리 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 카테고리 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Idle 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentCategoryMaster 업데이트된 현재 활성화된 카테고리 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Idle::CurrentCategoryMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2023-06-06\" , \"categoryModels\": [ { \"name\": \"category-0001\" , \"rewardIntervalMinutes\": 5 , \"defaultMaximumIdleMinutes\": 1440 , \"rewardResetMode\": \"Reset\" , \"acquireActions\": [ { \"acquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"userId\": \"#{userId}\" , \"propertyId\": \"player\" , \"experienceValue\": 10 } } ] } , { \"acquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"userId\": \"#{userId}\" , \"propertyId\": \"player\" , \"experienceValue\": 5 } } ] } ] } , { \"name\": \"category-0002\" , \"rewardIntervalMinutes\": 5 , \"defaultMaximumIdleMinutes\": 1440 , \"acquireActions\": [ { \"acquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"userId\": \"#{userId}\" , \"propertyId\": \"player\" , \"experienceValue\": 10 } } ] } , { \"acquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"userId\": \"#{userId}\" , \"propertyId\": \"player\" , \"experienceValue\": 5 } } ] } ], \"idlePeriodScheduleId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , \"receivePeriodScheduleId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/idle\" \"github.com/gs2io/gs2-golang-cdk/experience\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () idle . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , idle . NamespaceOptions {}, ). MasterData ( [] idle . CategoryModel { idle . NewCategoryModel ( \"category-0001\" , 5 , 1440 , idle . CategoryModelRewardResetModeReset , [] idle . AcquireActionList { idle . NewAcquireActionList ( idle . AcquireActionListOptions { AcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, }, ), idle . NewAcquireActionList ( idle . AcquireActionListOptions { AcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, }, ), }, idle . CategoryModelOptions { }, ), idle . NewCategoryModel ( \"category-0002\" , 5 , 1440 , idle . CategoryModelRewardResetModeReset , [] idle . AcquireActionList { idle . NewAcquireActionList ( idle . AcquireActionListOptions { AcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, }, ), idle . NewAcquireActionList ( idle . AcquireActionListOptions { AcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, }, ), }, idle . CategoryModelOptions { IdlePeriodScheduleId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), ReceivePeriodScheduleId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Idle\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Idle\\Model\\CategoryModel ( name : \"category-0001\" , rewardIntervalMinutes : 5 , defaultMaximumIdleMinutes : 1440 , rewardResetMode : \\Gs2Cdk\\Idle\\Model\\Enums\\CategoryModelRewardResetMode :: RESET , acquireActions : [ new \\Gs2Cdk\\Idle\\Model\\AcquireActionList ( options : new \\Gs2Cdk\\Idle\\Model\\Options\\AcquireActionListOptions ( acquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , userId : \"#{userId}\" , propertyId : \"player\" , experienceValue : 10 , ), ], ), ), new \\Gs2Cdk\\Idle\\Model\\AcquireActionList ( options : new \\Gs2Cdk\\Idle\\Model\\Options\\AcquireActionListOptions ( acquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , userId : \"#{userId}\" , propertyId : \"player\" , experienceValue : 5 , ), ], ), ), ] ), new \\Gs2Cdk\\Idle\\Model\\CategoryModel ( name : \"category-0002\" , rewardIntervalMinutes : 5 , defaultMaximumIdleMinutes : 1440 , rewardResetMode : \\Gs2Cdk\\Idle\\Model\\Enums\\CategoryModelRewardResetMode :: RESET , acquireActions : [ new \\Gs2Cdk\\Idle\\Model\\AcquireActionList ( options : new \\Gs2Cdk\\Idle\\Model\\Options\\AcquireActionListOptions ( acquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , userId : \"#{userId}\" , propertyId : \"player\" , experienceValue : 10 , ), ], ), ), new \\Gs2Cdk\\Idle\\Model\\AcquireActionList ( options : new \\Gs2Cdk\\Idle\\Model\\Options\\AcquireActionListOptions ( acquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , userId : \"#{userId}\" , propertyId : \"player\" , experienceValue : 5 , ), ], ), ), ], options : new \\Gs2Cdk\\Idle\\Model\\Options\\CategoryModelOptions ( idlePeriodScheduleId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , receivePeriodScheduleId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . idle . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . idle . model . CategoryModel ( \"category-0001\" , 5 , 1440 , io . gs2 . cdk . idle . model . enums . CategoryModelRewardResetMode . RESET , Arrays . asList ( new io . gs2 . cdk . idle . model . AcquireActionList ( new io . gs2 . cdk . idle . model . options . AcquireActionListOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) ), new io . gs2 . cdk . idle . model . AcquireActionList ( new io . gs2 . cdk . idle . model . options . AcquireActionListOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) ) ) ), new io . gs2 . cdk . idle . model . CategoryModel ( \"category-0002\" , 5 , 1440 , io . gs2 . cdk . idle . model . enums . CategoryModelRewardResetMode . RESET , Arrays . asList ( new io . gs2 . cdk . idle . model . AcquireActionList ( new io . gs2 . cdk . idle . model . options . AcquireActionListOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) ), new io . gs2 . cdk . idle . model . AcquireActionList ( new io . gs2 . cdk . idle . model . options . AcquireActionListOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) ) ), new io . gs2 . cdk . idle . model . options . CategoryModelOptions () . withIdlePeriodScheduleId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) . withReceivePeriodScheduleId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Idle . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Idle . Model . CategoryModel [] { new Gs2Cdk . Gs2Idle . Model . CategoryModel ( name : \"category-0001\" , rewardIntervalMinutes : 5 , defaultMaximumIdleMinutes : 1440 , rewardResetMode : Gs2Cdk . Gs2Idle . Model . Enums . CategoryModelRewardResetMode . Reset , acquireActions : new Gs2Cdk . Gs2Idle . Model . AcquireActionList [] { new Gs2Cdk . Gs2Idle . Model . AcquireActionList ( options : new Gs2Cdk . Gs2Idle . Model . Options . AcquireActionListOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , userId : \"#{userId}\" , propertyId : \"player\" , experienceValue : 10 ) } } ), new Gs2Cdk . Gs2Idle . Model . AcquireActionList ( options : new Gs2Cdk . Gs2Idle . Model . Options . AcquireActionListOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , userId : \"#{userId}\" , propertyId : \"player\" , experienceValue : 5 ) } } ) } ), new Gs2Cdk . Gs2Idle . Model . CategoryModel ( name : \"category-0002\" , rewardIntervalMinutes : 5 , defaultMaximumIdleMinutes : 1440 , rewardResetMode : Gs2Cdk . Gs2Idle . Model . Enums . CategoryModelRewardResetMode . Reset , acquireActions : new Gs2Cdk . Gs2Idle . Model . AcquireActionList [] { new Gs2Cdk . Gs2Idle . Model . AcquireActionList ( options : new Gs2Cdk . Gs2Idle . Model . Options . AcquireActionListOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , userId : \"#{userId}\" , propertyId : \"player\" , experienceValue : 10 ) } } ), new Gs2Cdk . Gs2Idle . Model . AcquireActionList ( options : new Gs2Cdk . Gs2Idle . Model . Options . AcquireActionListOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , userId : \"#{userId}\" , propertyId : \"player\" , experienceValue : 5 ) } } ) }, options : new Gs2Cdk . Gs2Idle . Model . Options . CategoryModelOptions { idlePeriodScheduleId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , receivePeriodScheduleId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import idle from \"@/gs2cdk/idle\" ; import experience from \"@/gs2cdk/experience\" ; class SampleStack extends core . Stack { public constructor () { super (); new idle . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new idle . model . CategoryModel ( \"category-0001\" , 5 , 1440 , idle . model . CategoryModelRewardResetMode . RESET , [ new idle . model . AcquireActionList ( { acquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , null , null , \"#{userId}\" ), ] } ), new idle . model . AcquireActionList ( { acquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , null , null , \"#{userId}\" ), ] } ), ] ), new idle . model . CategoryModel ( \"category-0002\" , 5 , 1440 , idle . model . CategoryModelRewardResetMode . RESET , [ new idle . model . AcquireActionList ( { acquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , null , null , \"#{userId}\" ), ] } ), new idle . model . AcquireActionList ( { acquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , null , null , \"#{userId}\" ), ] } ), ], { idlePeriodScheduleId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , receivePeriodScheduleId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , idle , experience class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () idle . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( category_models = [ idle . CategoryModel ( name = 'category-0001' , reward_interval_minutes = 5 , default_maximum_idle_minutes = 1440 , reward_reset_mode = idle . CategoryModelRewardResetMode . RESET , acquire_actions = [ idle . AcquireActionList ( options = idle . AcquireActionListOptions ( acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , user_id = '# {userId} ' , property_id = 'player' , experience_value = 10 ), ], ), ), idle . AcquireActionList ( options = idle . AcquireActionListOptions ( acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , user_id = '# {userId} ' , property_id = 'player' , experience_value = 5 ), ], ), ), ] ), idle . CategoryModel ( name = 'category-0002' , reward_interval_minutes = 5 , default_maximum_idle_minutes = 1440 , reward_reset_mode = idle . CategoryModelRewardResetMode . RESET , acquire_actions = [ idle . AcquireActionList ( options = idle . AcquireActionListOptions ( acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , user_id = '# {userId} ' , property_id = 'player' , experience_value = 10 ), ], ), ), idle . AcquireActionList ( options = idle . AcquireActionListOptions ( acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , user_id = '# {userId} ' , property_id = 'player' , experience_value = 5 ), ], ), ), ], options = idle . CategoryModelOptions ( idle_period_schedule_id = 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001' , receive_period_schedule_id = 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template CategoryModel 카테고리 모델 카테고리 모델이란, 방치 보상을 얻을 수 있는 대기 카테고리를 설정하는 엔티티입니다. 설정에는 대기 시간별 보상이나 최대 대기 시간 등의 정보가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rewardIntervalMinutes int  0 ~ 2147483646 보상 간격(분) 각 방치 보상 사이의 시간 간격(분)입니다. 예를 들어 60으로 설정하면, 사용자는 방치 시간 60분마다 보상 1유닛을 획득합니다. 보상의 총 개수는 (경과 방치 분수) / rewardIntervalMinutes로 계산되며, acquireActions 배열을 순환합니다. defaultMaximumIdleMinutes int  0 ~ 2147483646 기본 최대 방치 시간(분) 이 카테고리의 새로운 스테이터스에 대한 기본 최대 방치 시간(분)입니다. 이 제한을 초과하는 방치 시간은 추가 보상을 축적하지 않습니다. 이 값은 스테이터스 생성 시 각 스테이터스의 maximumIdleMinutes 에 복사되며, 입수 액션을 통해 사용자별로 확장할 수 있습니다. rewardResetMode 문자열 열거형 enum {   “Reset”,   “CarryOver” } “Reset” 보상 리셋 모드 사용자가 보상을 받은 후 방치 시간의 처리 방법을 결정합니다. “Reset\"은 방치 시간을 0으로 되돌리며, 부분적인 간격 시간은 소실됩니다. “CarryOver\"는 추가 보상을 얻기에 부족했던 나머지 시간을 유지하여 다음 보상 사이클에 반영됩니다. 정의 설명 Reset 대기 시간을 0으로 리셋 CarryOver 보상을 받기에 부족했던 나머지 시간을 이월 acquireActions List [] 1 ~ 100 items 대기 시간마다 얻을 수 있는 입수 액션 리스트 대기 시간을 “X분\"이라고 가정하면 “X / rewardIntervalMinutes\"가 보상을 받을 수 있는 횟수가 되지만, 여기서 지정한 배열의 요소를 반복함으로써 대기 시간마다 다른 보상을 부여할 수 있습니다. idlePeriodScheduleId string ~ 1024자 방치 기간 스케줄ID 방치 시간이 축적되는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 방치 시간이 카운트됩니다. 이벤트가 반복되는 경우, 스테이터스는 반복 횟수를 추적하고 새로운 사이클이 시작될 때 방치 시간을 리셋하여 이벤트 기간마다 보상이 계산되도록 합니다. receivePeriodScheduleId string ~ 1024자 수취 기간 스케줄ID 사용자가 축적된 방치 보상을 받을 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 보상 수취가 허용됩니다. 이를 통해 방치 축적 기간과는 별도의 기간 한정 보상 수취 기간을 설정할 수 있습니다. AcquireActionList 입수 액션 리스트 하나의 보상 간격에서 함께 지급되는 여러 입수 액션을 그룹화하는 래퍼입니다. 각 AcquireActionList는 카테고리 모델의 acquireActions 배열 내 하나의 보상 주기에 대응하며, 각 간격마다 서로 다른 보상 조합을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 0 ~ 100 items 입수 액션 리스트 이 보상 간격이 트리거될 때 함께 실행되는 입수 액션의 집합입니다. 여러 액션을 조합하여 하나의 방치 보상 주기에서 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 리스트당 최대 100개의 액션입니다. AcquireAction 입수 액션 방치 보상으로 사용되는 단일 입수 액션을 나타냅니다. 액션 타입(예: 아이템 추가, 통화 증가)과 그 요청 파라미터로 구성됩니다. 방치 보상을 수령하면 이러한 액션들이 트랜잭션으로 조합되어 실행되며, 사용자에게 보상이 지급됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Idle Deploy/CDK 레퍼런스","url":"/ko/api_reference/idle/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 isAutomaticDeletingEnabled bool false 자동 삭제 활성화하면 메시지가 개봉(읽음 처리)된 후 사용자의 메시지 목록에서 자동으로 삭제됩니다. 클라이언트의 명시적인 삭제 작업 없이 수령이 완료된 메시지를 삭제하여 수신함을 정리합니다. 비활성화된 경우, 개봉된 메시지는 수동으로 삭제할 때까지 목록에 남아 있습니다. transactionSetting TransactionSetting 트랜잭션 설정 메시지에 첨부된 보상을 지급할 때 사용되는 분산 트랜잭션 처리 설정입니다. readAcquireActions 를 가진 메시지가 개봉되면 획득 액션이 생성·실행되어 보상이 지급됩니다. 자동 실행, 원자적 커밋, 비동기 처리를 지원합니다. receiveMessageScript ScriptSetting 메시지를 수신했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveMessage readMessageScript ScriptSetting 메시지를 개봉했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - readMessage deleteMessageScript ScriptSetting 메시지를 삭제했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - deleteMessage receiveNotification NotificationSetting 수신 알림 사용자의 수신함에 새 메시지가 전달되었을 때 트리거되는 푸시 알림 설정입니다. GS2-Gateway를 사용하여 게임 클라이언트에 실시간 알림을 전송하며, 폴링 없이도 UI에서 새 메시지 표시나 수신함 갱신을 수행할 수 있게 합니다. logSetting LogSetting 로그 출력 설정 메시지 조작과 관련된 API 요청 및 응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 감사나 디버깅 목적으로 메시지의 전달, 개봉, 보상 수령, 삭제를 추적하는 데 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Inbox::Namespace Properties : Name : namespace-0001 Description : null IsAutomaticDeletingEnabled : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 ReceiveMessageScript : null ReadMessageScript : null DeleteMessageScript : null ReceiveNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/inbox\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () inbox . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , inbox . NamespaceOptions { TransactionSetting : \u0026 core . TransactionSetting { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Inbox\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Inbox\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . inbox . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . inbox . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Inbox . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Inbox . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import inbox from \"@/gs2cdk/inbox\" ; class SampleStack extends core . Stack { public constructor () { super (); new inbox . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , inbox class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () inbox . Namespace ( stack = self , name = 'namespace-0001' , options = inbox . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentMessageMaster 현재 활성화된 글로벌 메시지 마스터 데이터 현재 네임스페이스 내에서 유효한 글로벌 메시지의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Inbox 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentMessageMaster 갱신된, 현재 활성화되어 있는 글로벌 메시지의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Inbox::CurrentMessageMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2020-03-12\" , \"globalMessages\": [ { \"name\": \"message-0001\" , \"metadata\": \"hoge\" } , { \"name\": \"message-0002\" , \"metadata\": \"fuga\" , \"readAcquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ], \"expiresTimeSpan\" : { \"days\": 1 , \"hours\": 2 , \"minutes\": 3 } } , { \"name\": \"message-0003\" , \"metadata\": \"piyo\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/inbox\" \"github.com/gs2io/gs2-golang-cdk/inventory\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () inbox . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , inbox . NamespaceOptions {}, ). MasterData ( [] inbox . GlobalMessage { inbox . NewGlobalMessage ( \"message-0001\" , \"hoge\" , inbox . GlobalMessageOptions { }, ), inbox . NewGlobalMessage ( \"message-0002\" , \"fuga\" , inbox . GlobalMessageOptions { ReadAcquireActions : [] core . AcquireAction { inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, ExpiresTimeSpan : \u0026 inbox . TimeSpan { Days : 1 , Hours : 2 , Minutes : 3 , }, }, ), inbox . NewGlobalMessage ( \"message-0003\" , \"piyo\" , inbox . GlobalMessageOptions { }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Inbox\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Inbox\\Model\\GlobalMessage ( name : \"message-0001\" , metadata : \"hoge\" ), new \\Gs2Cdk\\Inbox\\Model\\GlobalMessage ( name : \"message-0002\" , metadata : \"fuga\" , options : new \\Gs2Cdk\\Inbox\\Model\\Options\\GlobalMessageOptions ( readAcquireActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ], expiresTimeSpan : new \\Gs2Cdk\\Inbox\\Model\\TimeSpan ( days : 1 , hours : 2 , minutes : 3 , ) ) ), new \\Gs2Cdk\\Inbox\\Model\\GlobalMessage ( name : \"message-0003\" , metadata : \"piyo\" ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . inbox . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . inbox . model . GlobalMessage ( \"message-0001\" , \"hoge\" ), new io . gs2 . cdk . inbox . model . GlobalMessage ( \"message-0002\" , \"fuga\" , new io . gs2 . cdk . inbox . model . options . GlobalMessageOptions () . withReadAcquireActions ( Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) )) . withExpiresTimeSpan ( new io . gs2 . cdk . inbox . model . TimeSpan ( 1 , 2 , 3 )) ), new io . gs2 . cdk . inbox . model . GlobalMessage ( \"message-0003\" , \"piyo\" ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Inbox . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Inbox . Model . GlobalMessage [] { new Gs2Cdk . Gs2Inbox . Model . GlobalMessage ( name : \"message-0001\" , metadata : \"hoge\" ), new Gs2Cdk . Gs2Inbox . Model . GlobalMessage ( name : \"message-0002\" , metadata : \"fuga\" , options : new Gs2Cdk . Gs2Inbox . Model . Options . GlobalMessageOptions { readAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ) }, expiresTimeSpan = new Gs2Cdk . Gs2Inbox . Model . TimeSpan_ ( days : 1 , hours : 2 , minutes : 3 ) } ), new Gs2Cdk . Gs2Inbox . Model . GlobalMessage ( name : \"message-0003\" , metadata : \"piyo\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import inbox from \"@/gs2cdk/inbox\" ; import inventory from \"@/gs2cdk/inventory\" ; class SampleStack extends core . Stack { public constructor () { super (); new inbox . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new inbox . model . GlobalMessage ( \"message-0001\" , \"hoge\" ), new inbox . model . GlobalMessage ( \"message-0002\" , \"fuga\" , { readAcquireActions : [ new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ], expiresTimeSpan : new inbox . model . TimeSpan ( 1 , 2 , 3 ) } ), new inbox . model . GlobalMessage ( \"message-0003\" , \"piyo\" ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , inbox , inventory class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () inbox . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( global_messages = [ inbox . GlobalMessage ( name = 'message-0001' , metadata = 'hoge' ), inbox . GlobalMessage ( name = 'message-0002' , metadata = 'fuga' , options = inbox . GlobalMessageOptions ( read_acquire_actions = [ inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ], expires_time_span = inbox . TimeSpan ( days = 1 , hours = 2 , minutes = 3 , ) ), ), inbox . GlobalMessage ( name = 'message-0003' , metadata = 'piyo' ), ], ) print ( SampleStack () . yaml ()) # Generate Template GlobalMessage 글로벌 메시지 글로벌 메시지는 게임 플레이어 전체에게 메시지를 전달하는 구조입니다. 글로벌 메시지에는 유효 기간을 설정할 수 있으며, 각 게임 플레이어는 글로벌 메시지를 수신하는 처리를 실행함으로써 유효 기간 내의 글로벌 메시지 중 아직 수신하지 않은 메시지를 자신의 메시지함에 복사합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 globalMessageId string ※ ~ 1024자 전체 사용자 대상 메시지 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 글로벌 메시지 이름 글로벌 메시지 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 표시 파라미터 등을 포함하는 JSON 문자열 등, 글로벌 메시지의 내용을 나타내는 임의의 데이터입니다. 사용자가 이 글로벌 메시지를 수신하면 메타데이터는 수신함 내의 개별 메시지로 복사됩니다. GS2는 이 값을 해석하지 않습니다. 최대 4096자입니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 획득 액션 이 글로벌 메시지에서 복사된 메시지를 사용자가 개봉했을 때 실행되는 획득 액션 목록입니다. 이 액션들은 메타데이터와 함께 각 사용자의 개별 메시지로 복사됩니다. 글로벌 메시지당 최대 100개의 액션입니다. expiresTimeSpan TimeSpan 유효 기한까지의 기간 사용자가 이 글로벌 메시지를 수신(복사)한 시각부터, 복사된 메시지가 만료되어 수신함에서 자동 삭제되기까지의 기간입니다. 일, 시간, 분의 조합으로 지정합니다. 유효 기한에 도달하면 메시지는 읽음 상태와 관계없이 삭제되며, 아직 받지 않은 첨부 보상도 함께 삭제됩니다. messageReceptionPeriodEventId string ~ 1024자 메시지 수신 기간 이벤트 ID 이 글로벌 메시지를 수신(사용자의 수신함에 복사)할 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외에는 사용자가 글로벌 메시지 수신 작업을 실행하더라도 메시지가 전달되지 않습니다. 기간 한정 이벤트 공지나 시즌 캠페인 보상에 유용합니다. TimeSpan 타임스팬 일, 시간, 분의 조합으로 기간을 나타냅니다. 수신 시각을 기준으로 한 메시지의 유효 기간을 정의하는 데 사용됩니다. 예를 들어 7일, 0시간, 0분의 타임스팬은 사용자가 수신한 후 정확히 1주일 후에 메시지가 만료됨을 의미합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 days int 0 0 ~ 365 일수 이 타임스팬의 일수입니다. 시간, 분과 조합하여 총 기간이 계산됩니다. 최대 365일입니다. hours int 0 0 ~ 24 시간 이 타임스팬의 시간 수입니다. 일수, 분과 조합하여 총 기간이 계산됩니다. 최대 24시간입니다. minutes int 0 0 ~ 60 분 이 타임스팬의 분수입니다. 일수, 시간과 조합하여 총 기간이 계산됩니다. 최대 60분입니다. AcquireAction 획득 액션 보상으로 메시지에 첨부되는 단일 획득 액션을 나타냅니다. 액션 타입(예: 인벤토리에 아이템 추가, 통화 증가)과 그 요청 파라미터로 구성됩니다. 메시지가 개봉되면 이 액션들이 트랜잭션으로 조립되어 실행되고, 사용자에게 보상이 지급됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Inbox Deploy/CDK 레퍼런스","url":"/ko/api_reference/inbox/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 아이템 획득 및 소비 등의 인벤토리 조작에 대한 분산 트랜잭션 처리를 설정합니다. 원활한 실행을 위한 자동 실행 모드, 여러 리소스에 대한 일관된 조작을 위한 원자적 커밋(atomic commit), 대규모 보상 배포를 위한 비동기 처리를 지원합니다. acquireScript ScriptSetting 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acquire overflowScript ScriptSetting 입수 상한에 도달하여 입수할 수 없었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - overflowDone consumeScript ScriptSetting 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - consume simpleItemAcquireScript ScriptSetting 심플 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - simpleItemAcquire simpleItemConsumeScript ScriptSetting 심플 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - simpleItemConsume bigItemAcquireScript ScriptSetting 거대 아이템을 입수했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - bigItemAcquire bigItemConsumeScript ScriptSetting 거대 아이템을 소비할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - bigItemConsume logSetting LogSetting 로그 출력 설정 인벤토리 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그 및 분석을 위해 아이템의 입수, 소비, 용량 변경을 추적하는 데 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Inventory::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null AcquireScript : null OverflowScript : null ConsumeScript : null SimpleItemAcquireScript : null SimpleItemConsumeScript : null BigItemAcquireScript : null BigItemConsumeScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/inventory\" ) SampleStack := core . NewStack () inventory . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , inventory . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Inventory\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . inventory . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . inventory . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Inventory . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Inventory . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import inventory from \"@/gs2cdk/inventory\" ; class SampleStack extends core . Stack { public constructor () { super (); new inventory . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , inventory class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () inventory . Namespace ( stack = self , name = 'namespace-0001' , options = inventory . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentItemModelMaster 현재 활성화된 아이템 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 아이템 모델의 정의를 기술한 마스터 데이터입니다. GS2는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 포맷의 JSON 파일을 작성함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Inventory 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentItemModelMaster 갱신된 현재 활성화된 아이템 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Inventory::CurrentItemModelMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-02-05\" , \"inventoryModels\": [ { \"name\": \"item\" , \"initialCapacity\": 100 , \"maxCapacity\": 999 , \"itemModels\": [ { \"name\": \"item-0001\" , \"metadata\": \"ITEM_0001\" , \"stackingLimit\": 99 , \"allowMultipleStacks\": false , \"sortValue\": 1 } , { \"name\": \"item-0002\" , \"metadata\": \"ITEM_0002\" , \"stackingLimit\": 49 , \"allowMultipleStacks\": true , \"sortValue\": 2 } , { \"name\": \"item-0003\" , \"metadata\": \"ITEM_0003\" , \"stackingLimit\": 9 , \"allowMultipleStacks\": false , \"sortValue\": 3 } ], \"metadata\": \"INVENTORY_ITEM\" } , { \"name\": \"character\" , \"initialCapacity\": 50 , \"maxCapacity\": 99 , \"itemModels\": [ { \"name\": \"character-0001\" , \"metadata\": \"CHARACTER_0001\" , \"stackingLimit\": 99 , \"allowMultipleStacks\": false , \"sortValue\": 1 } , { \"name\": \"character-0002\" , \"metadata\": \"CHARACTER_0002\" , \"stackingLimit\": 49 , \"allowMultipleStacks\": true , \"sortValue\": 2 } , { \"name\": \"character-0003\" , \"metadata\": \"CHARACTER_0003\" , \"stackingLimit\": 9 , \"allowMultipleStacks\": false , \"sortValue\": 3 } ], \"metadata\": \"INVENTORY_CHARACTER\" } ], \"simpleInventoryModels\": [ { \"name\": \"item\" , \"simpleItemModels\": [ { \"name\": \"item-0001\" , \"metadata\": \"ITEM_0001\" } , { \"name\": \"item-0002\" , \"metadata\": \"ITEM_0002\" } , { \"name\": \"item-0003\" , \"metadata\": \"ITEM_0003\" } ], \"metadata\": \"INVENTORY_ITEM\" } ], \"bigInventoryModels\": [ { \"name\": \"item\" , \"bigItemModels\": [ { \"name\": \"item-0001\" , \"metadata\": \"ITEM_0001\" } , { \"name\": \"item-0002\" , \"metadata\": \"ITEM_0002\" } , { \"name\": \"item-0003\" , \"metadata\": \"ITEM_0003\" } ], \"metadata\": \"INVENTORY_ITEM\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/inventory\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () inventory . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , inventory . NamespaceOptions {}, ). MasterData ( [] inventory . InventoryModel { inventory . NewInventoryModel ( \"item\" , 100 , 999 , [] inventory . ItemModel { inventory . NewItemModel ( \"item-0001\" , 99 , false , 1 , inventory . ItemModelOptions { Metadata : pointy . String ( \"ITEM_0001\" ), }, ), inventory . NewItemModel ( \"item-0002\" , 49 , true , 2 , inventory . ItemModelOptions { Metadata : pointy . String ( \"ITEM_0002\" ), }, ), inventory . NewItemModel ( \"item-0003\" , 9 , false , 3 , inventory . ItemModelOptions { Metadata : pointy . String ( \"ITEM_0003\" ), }, ), }, inventory . InventoryModelOptions { Metadata : pointy . String ( \"INVENTORY_ITEM\" ), }, ), inventory . NewInventoryModel ( \"character\" , 50 , 99 , [] inventory . ItemModel { inventory . NewItemModel ( \"character-0001\" , 99 , false , 1 , inventory . ItemModelOptions { Metadata : pointy . String ( \"CHARACTER_0001\" ), }, ), inventory . NewItemModel ( \"character-0002\" , 49 , true , 2 , inventory . ItemModelOptions { Metadata : pointy . String ( \"CHARACTER_0002\" ), }, ), inventory . NewItemModel ( \"character-0003\" , 9 , false , 3 , inventory . ItemModelOptions { Metadata : pointy . String ( \"CHARACTER_0003\" ), }, ), }, inventory . InventoryModelOptions { Metadata : pointy . String ( \"INVENTORY_CHARACTER\" ), }, ), }, [] inventory . SimpleInventoryModel { inventory . NewSimpleInventoryModel ( \"item\" , [] inventory . SimpleItemModel { inventory . NewSimpleItemModel ( \"item-0001\" , inventory . SimpleItemModelOptions { Metadata : pointy . String ( \"ITEM_0001\" ), }, ), inventory . NewSimpleItemModel ( \"item-0002\" , inventory . SimpleItemModelOptions { Metadata : pointy . String ( \"ITEM_0002\" ), }, ), inventory . NewSimpleItemModel ( \"item-0003\" , inventory . SimpleItemModelOptions { Metadata : pointy . String ( \"ITEM_0003\" ), }, ), }, inventory . SimpleInventoryModelOptions { Metadata : pointy . String ( \"INVENTORY_ITEM\" ), }, ), }, [] inventory . BigInventoryModel { inventory . NewBigInventoryModel ( \"item\" , [] inventory . BigItemModel { inventory . NewBigItemModel ( \"item-0001\" , inventory . BigItemModelOptions { Metadata : pointy . String ( \"ITEM_0001\" ), }, ), inventory . NewBigItemModel ( \"item-0002\" , inventory . BigItemModelOptions { Metadata : pointy . String ( \"ITEM_0002\" ), }, ), inventory . NewBigItemModel ( \"item-0003\" , inventory . BigItemModelOptions { Metadata : pointy . String ( \"ITEM_0003\" ), }, ), }, inventory . BigInventoryModelOptions { Metadata : pointy . String ( \"INVENTORY_ITEM\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Inventory\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Inventory\\Model\\InventoryModel ( name : \"item\" , initialCapacity : 100 , maxCapacity : 999 , itemModels : [ new \\Gs2Cdk\\Inventory\\Model\\ItemModel ( name : \"item-0001\" , stackingLimit : 99 , allowMultipleStacks : false , sortValue : 1 , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\ItemModelOptions ( metadata : \"ITEM_0001\" , ), ), new \\Gs2Cdk\\Inventory\\Model\\ItemModel ( name : \"item-0002\" , stackingLimit : 49 , allowMultipleStacks : true , sortValue : 2 , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\ItemModelOptions ( metadata : \"ITEM_0002\" , ), ), new \\Gs2Cdk\\Inventory\\Model\\ItemModel ( name : \"item-0003\" , stackingLimit : 9 , allowMultipleStacks : false , sortValue : 3 , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\ItemModelOptions ( metadata : \"ITEM_0003\" , ), ), ], options : new \\Gs2Cdk\\Inventory\\Model\\Options\\InventoryModelOptions ( metadata : \"INVENTORY_ITEM\" ) ), new \\Gs2Cdk\\Inventory\\Model\\InventoryModel ( name : \"character\" , initialCapacity : 50 , maxCapacity : 99 , itemModels : [ new \\Gs2Cdk\\Inventory\\Model\\ItemModel ( name : \"character-0001\" , stackingLimit : 99 , allowMultipleStacks : false , sortValue : 1 , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\ItemModelOptions ( metadata : \"CHARACTER_0001\" , ), ), new \\Gs2Cdk\\Inventory\\Model\\ItemModel ( name : \"character-0002\" , stackingLimit : 49 , allowMultipleStacks : true , sortValue : 2 , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\ItemModelOptions ( metadata : \"CHARACTER_0002\" , ), ), new \\Gs2Cdk\\Inventory\\Model\\ItemModel ( name : \"character-0003\" , stackingLimit : 9 , allowMultipleStacks : false , sortValue : 3 , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\ItemModelOptions ( metadata : \"CHARACTER_0003\" , ), ), ], options : new \\Gs2Cdk\\Inventory\\Model\\Options\\InventoryModelOptions ( metadata : \"INVENTORY_CHARACTER\" ) ) ], [ new \\Gs2Cdk\\Inventory\\Model\\SimpleInventoryModel ( name : \"item\" , simpleItemModels : [ new \\Gs2Cdk\\Inventory\\Model\\SimpleItemModel ( name : \"item-0001\" , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\SimpleItemModelOptions ( metadata : \"ITEM_0001\" , ), ), new \\Gs2Cdk\\Inventory\\Model\\SimpleItemModel ( name : \"item-0002\" , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\SimpleItemModelOptions ( metadata : \"ITEM_0002\" , ), ), new \\Gs2Cdk\\Inventory\\Model\\SimpleItemModel ( name : \"item-0003\" , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\SimpleItemModelOptions ( metadata : \"ITEM_0003\" , ), ), ], options : new \\Gs2Cdk\\Inventory\\Model\\Options\\SimpleInventoryModelOptions ( metadata : \"INVENTORY_ITEM\" ) ) ], [ new \\Gs2Cdk\\Inventory\\Model\\BigInventoryModel ( name : \"item\" , bigItemModels : [ new \\Gs2Cdk\\Inventory\\Model\\BigItemModel ( name : \"item-0001\" , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\BigItemModelOptions ( metadata : \"ITEM_0001\" , ), ), new \\Gs2Cdk\\Inventory\\Model\\BigItemModel ( name : \"item-0002\" , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\BigItemModelOptions ( metadata : \"ITEM_0002\" , ), ), new \\Gs2Cdk\\Inventory\\Model\\BigItemModel ( name : \"item-0003\" , options : new \\Gs2Cdk\\Inventory\\Model\\Options\\BigItemModelOptions ( metadata : \"ITEM_0003\" , ), ), ], options : new \\Gs2Cdk\\Inventory\\Model\\Options\\BigInventoryModelOptions ( metadata : \"INVENTORY_ITEM\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . inventory . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . inventory . model . InventoryModel ( \"item\" , 100 , 999 , Arrays . asList ( new io . gs2 . cdk . inventory . model . ItemModel ( \"item-0001\" , 99L , false , 1 , new io . gs2 . cdk . inventory . model . options . ItemModelOptions () . withMetadata ( \"ITEM_0001\" ) ), new io . gs2 . cdk . inventory . model . ItemModel ( \"item-0002\" , 49L , true , 2 , new io . gs2 . cdk . inventory . model . options . ItemModelOptions () . withMetadata ( \"ITEM_0002\" ) ), new io . gs2 . cdk . inventory . model . ItemModel ( \"item-0003\" , 9L , false , 3 , new io . gs2 . cdk . inventory . model . options . ItemModelOptions () . withMetadata ( \"ITEM_0003\" ) ) ), new io . gs2 . cdk . inventory . model . options . InventoryModelOptions () . withMetadata ( \"INVENTORY_ITEM\" ) ), new io . gs2 . cdk . inventory . model . InventoryModel ( \"character\" , 50 , 99 , Arrays . asList ( new io . gs2 . cdk . inventory . model . ItemModel ( \"character-0001\" , 99L , false , 1 , new io . gs2 . cdk . inventory . model . options . ItemModelOptions () . withMetadata ( \"CHARACTER_0001\" ) ), new io . gs2 . cdk . inventory . model . ItemModel ( \"character-0002\" , 49L , true , 2 , new io . gs2 . cdk . inventory . model . options . ItemModelOptions () . withMetadata ( \"CHARACTER_0002\" ) ), new io . gs2 . cdk . inventory . model . ItemModel ( \"character-0003\" , 9L , false , 3 , new io . gs2 . cdk . inventory . model . options . ItemModelOptions () . withMetadata ( \"CHARACTER_0003\" ) ) ), new io . gs2 . cdk . inventory . model . options . InventoryModelOptions () . withMetadata ( \"INVENTORY_CHARACTER\" ) ) ), Arrays . asList ( new io . gs2 . cdk . inventory . model . SimpleInventoryModel ( \"item\" , Arrays . asList ( new io . gs2 . cdk . inventory . model . SimpleItemModel ( \"item-0001\" , new io . gs2 . cdk . inventory . model . options . SimpleItemModelOptions () . withMetadata ( \"ITEM_0001\" ) ), new io . gs2 . cdk . inventory . model . SimpleItemModel ( \"item-0002\" , new io . gs2 . cdk . inventory . model . options . SimpleItemModelOptions () . withMetadata ( \"ITEM_0002\" ) ), new io . gs2 . cdk . inventory . model . SimpleItemModel ( \"item-0003\" , new io . gs2 . cdk . inventory . model . options . SimpleItemModelOptions () . withMetadata ( \"ITEM_0003\" ) ) ), new io . gs2 . cdk . inventory . model . options . SimpleInventoryModelOptions () . withMetadata ( \"INVENTORY_ITEM\" ) ) ), Arrays . asList ( new io . gs2 . cdk . inventory . model . BigInventoryModel ( \"item\" , Arrays . asList ( new io . gs2 . cdk . inventory . model . BigItemModel ( \"item-0001\" , new io . gs2 . cdk . inventory . model . options . BigItemModelOptions () . withMetadata ( \"ITEM_0001\" ) ), new io . gs2 . cdk . inventory . model . BigItemModel ( \"item-0002\" , new io . gs2 . cdk . inventory . model . options . BigItemModelOptions () . withMetadata ( \"ITEM_0002\" ) ), new io . gs2 . cdk . inventory . model . BigItemModel ( \"item-0003\" , new io . gs2 . cdk . inventory . model . options . BigItemModelOptions () . withMetadata ( \"ITEM_0003\" ) ) ), new io . gs2 . cdk . inventory . model . options . BigInventoryModelOptions () . withMetadata ( \"INVENTORY_ITEM\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Inventory . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Inventory . Model . InventoryModel [] { new Gs2Cdk . Gs2Inventory . Model . InventoryModel ( name : \"item\" , initialCapacity : 100 , maxCapacity : 999 , itemModels : new Gs2Cdk . Gs2Inventory . Model . ItemModel [] { new Gs2Cdk . Gs2Inventory . Model . ItemModel ( name : \"item-0001\" , stackingLimit : 99L , allowMultipleStacks : false , sortValue : 1 , options : new Gs2Cdk . Gs2Inventory . Model . Options . ItemModelOptions { metadata = \"ITEM_0001\" } ), new Gs2Cdk . Gs2Inventory . Model . ItemModel ( name : \"item-0002\" , stackingLimit : 49L , allowMultipleStacks : true , sortValue : 2 , options : new Gs2Cdk . Gs2Inventory . Model . Options . ItemModelOptions { metadata = \"ITEM_0002\" } ), new Gs2Cdk . Gs2Inventory . Model . ItemModel ( name : \"item-0003\" , stackingLimit : 9L , allowMultipleStacks : false , sortValue : 3 , options : new Gs2Cdk . Gs2Inventory . Model . Options . ItemModelOptions { metadata = \"ITEM_0003\" } ) }, options : new Gs2Cdk . Gs2Inventory . Model . Options . InventoryModelOptions { metadata = \"INVENTORY_ITEM\" } ), new Gs2Cdk . Gs2Inventory . Model . InventoryModel ( name : \"character\" , initialCapacity : 50 , maxCapacity : 99 , itemModels : new Gs2Cdk . Gs2Inventory . Model . ItemModel [] { new Gs2Cdk . Gs2Inventory . Model . ItemModel ( name : \"character-0001\" , stackingLimit : 99L , allowMultipleStacks : false , sortValue : 1 , options : new Gs2Cdk . Gs2Inventory . Model . Options . ItemModelOptions { metadata = \"CHARACTER_0001\" } ), new Gs2Cdk . Gs2Inventory . Model . ItemModel ( name : \"character-0002\" , stackingLimit : 49L , allowMultipleStacks : true , sortValue : 2 , options : new Gs2Cdk . Gs2Inventory . Model . Options . ItemModelOptions { metadata = \"CHARACTER_0002\" } ), new Gs2Cdk . Gs2Inventory . Model . ItemModel ( name : \"character-0003\" , stackingLimit : 9L , allowMultipleStacks : false , sortValue : 3 , options : new Gs2Cdk . Gs2Inventory . Model . Options . ItemModelOptions { metadata = \"CHARACTER_0003\" } ) }, options : new Gs2Cdk . Gs2Inventory . Model . Options . InventoryModelOptions { metadata = \"INVENTORY_CHARACTER\" } ) }, new Gs2Cdk . Gs2Inventory . Model . SimpleInventoryModel [] { new Gs2Cdk . Gs2Inventory . Model . SimpleInventoryModel ( name : \"item\" , simpleItemModels : new Gs2Cdk . Gs2Inventory . Model . SimpleItemModel [] { new Gs2Cdk . Gs2Inventory . Model . SimpleItemModel ( name : \"item-0001\" , options : new Gs2Cdk . Gs2Inventory . Model . Options . SimpleItemModelOptions { metadata = \"ITEM_0001\" } ), new Gs2Cdk . Gs2Inventory . Model . SimpleItemModel ( name : \"item-0002\" , options : new Gs2Cdk . Gs2Inventory . Model . Options . SimpleItemModelOptions { metadata = \"ITEM_0002\" } ), new Gs2Cdk . Gs2Inventory . Model . SimpleItemModel ( name : \"item-0003\" , options : new Gs2Cdk . Gs2Inventory . Model . Options . SimpleItemModelOptions { metadata = \"ITEM_0003\" } ) }, options : new Gs2Cdk . Gs2Inventory . Model . Options . SimpleInventoryModelOptions { metadata = \"INVENTORY_ITEM\" } ) }, new Gs2Cdk . Gs2Inventory . Model . BigInventoryModel [] { new Gs2Cdk . Gs2Inventory . Model . BigInventoryModel ( name : \"item\" , bigItemModels : new Gs2Cdk . Gs2Inventory . Model . BigItemModel [] { new Gs2Cdk . Gs2Inventory . Model . BigItemModel ( name : \"item-0001\" , options : new Gs2Cdk . Gs2Inventory . Model . Options . BigItemModelOptions { metadata = \"ITEM_0001\" } ), new Gs2Cdk . Gs2Inventory . Model . BigItemModel ( name : \"item-0002\" , options : new Gs2Cdk . Gs2Inventory . Model . Options . BigItemModelOptions { metadata = \"ITEM_0002\" } ), new Gs2Cdk . Gs2Inventory . Model . BigItemModel ( name : \"item-0003\" , options : new Gs2Cdk . Gs2Inventory . Model . Options . BigItemModelOptions { metadata = \"ITEM_0003\" } ) }, options : new Gs2Cdk . Gs2Inventory . Model . Options . BigInventoryModelOptions { metadata = \"INVENTORY_ITEM\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import inventory from \"@/gs2cdk/inventory\" ; class SampleStack extends core . Stack { public constructor () { super (); new inventory . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new inventory . model . InventoryModel ( \"item\" , 100 , 999 , [ new inventory . model . ItemModel ( \"item-0001\" , 99 , false , 1 , { metadata : \"ITEM_0001\" } ), new inventory . model . ItemModel ( \"item-0002\" , 49 , true , 2 , { metadata : \"ITEM_0002\" } ), new inventory . model . ItemModel ( \"item-0003\" , 9 , false , 3 , { metadata : \"ITEM_0003\" } ), ], { metadata : \"INVENTORY_ITEM\" } ), new inventory . model . InventoryModel ( \"character\" , 50 , 99 , [ new inventory . model . ItemModel ( \"character-0001\" , 99 , false , 1 , { metadata : \"CHARACTER_0001\" } ), new inventory . model . ItemModel ( \"character-0002\" , 49 , true , 2 , { metadata : \"CHARACTER_0002\" } ), new inventory . model . ItemModel ( \"character-0003\" , 9 , false , 3 , { metadata : \"CHARACTER_0003\" } ), ], { metadata : \"INVENTORY_CHARACTER\" } ) ], [ new inventory . model . SimpleInventoryModel ( \"item\" , [ new inventory . model . SimpleItemModel ( \"item-0001\" , { metadata : \"ITEM_0001\" } ), new inventory . model . SimpleItemModel ( \"item-0002\" , { metadata : \"ITEM_0002\" } ), new inventory . model . SimpleItemModel ( \"item-0003\" , { metadata : \"ITEM_0003\" } ), ], { metadata : \"INVENTORY_ITEM\" } ) ], [ new inventory . model . BigInventoryModel ( \"item\" , [ new inventory . model . BigItemModel ( \"item-0001\" , { metadata : \"ITEM_0001\" } ), new inventory . model . BigItemModel ( \"item-0002\" , { metadata : \"ITEM_0002\" } ), new inventory . model . BigItemModel ( \"item-0003\" , { metadata : \"ITEM_0003\" } ), ], { metadata : \"INVENTORY_ITEM\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , inventory class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () inventory . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( inventory_models = [ inventory . InventoryModel ( name = 'item' , initial_capacity = 100 , max_capacity = 999 , item_models = [ inventory . ItemModel ( name = 'item-0001' , stacking_limit = 99 , allow_multiple_stacks = False , sort_value = 1 , options = inventory . ItemModelOptions ( metadata = 'ITEM_0001' , ), ), inventory . ItemModel ( name = 'item-0002' , stacking_limit = 49 , allow_multiple_stacks = True , sort_value = 2 , options = inventory . ItemModelOptions ( metadata = 'ITEM_0002' , ), ), inventory . ItemModel ( name = 'item-0003' , stacking_limit = 9 , allow_multiple_stacks = False , sort_value = 3 , options = inventory . ItemModelOptions ( metadata = 'ITEM_0003' , ), ), ], options = inventory . InventoryModelOptions ( metadata = 'INVENTORY_ITEM' ), ), inventory . InventoryModel ( name = 'character' , initial_capacity = 50 , max_capacity = 99 , item_models = [ inventory . ItemModel ( name = 'character-0001' , stacking_limit = 99 , allow_multiple_stacks = False , sort_value = 1 , options = inventory . ItemModelOptions ( metadata = 'CHARACTER_0001' , ), ), inventory . ItemModel ( name = 'character-0002' , stacking_limit = 49 , allow_multiple_stacks = True , sort_value = 2 , options = inventory . ItemModelOptions ( metadata = 'CHARACTER_0002' , ), ), inventory . ItemModel ( name = 'character-0003' , stacking_limit = 9 , allow_multiple_stacks = False , sort_value = 3 , options = inventory . ItemModelOptions ( metadata = 'CHARACTER_0003' , ), ), ], options = inventory . InventoryModelOptions ( metadata = 'INVENTORY_CHARACTER' ), ), ], simple_inventory_models = [ inventory . SimpleInventoryModel ( name = 'item' , simple_item_models = [ inventory . SimpleItemModel ( name = 'item-0001' , options = inventory . SimpleItemModelOptions ( metadata = 'ITEM_0001' , ), ), inventory . SimpleItemModel ( name = 'item-0002' , options = inventory . SimpleItemModelOptions ( metadata = 'ITEM_0002' , ), ), inventory . SimpleItemModel ( name = 'item-0003' , options = inventory . SimpleItemModelOptions ( metadata = 'ITEM_0003' , ), ), ], options = inventory . SimpleInventoryModelOptions ( metadata = 'INVENTORY_ITEM' ), ), ], big_inventory_models = [ inventory . BigInventoryModel ( name = 'item' , big_item_models = [ inventory . BigItemModel ( name = 'item-0001' , options = inventory . BigItemModelOptions ( metadata = 'ITEM_0001' , ), ), inventory . BigItemModel ( name = 'item-0002' , options = inventory . BigItemModelOptions ( metadata = 'ITEM_0002' , ), ), inventory . BigItemModel ( name = 'item-0003' , options = inventory . BigItemModelOptions ( metadata = 'ITEM_0003' , ), ), ], options = inventory . BigInventoryModelOptions ( metadata = 'INVENTORY_ITEM' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template InventoryModel 인벤토리 모델 인벤토리는 게임 플레이어가 소유한 아이템을 담는 가방과 같은 것입니다. 인벤토리에는 용량을 설정할 수 있으며, 용량을 초과하여 소유할 수 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialCapacity int  0 ~ 2147483646 초기 크기 인벤토리가 처음 생성될 때 사용자에게 제공되는 인벤토리 칸의 수입니다. 각 칸에는 하나의 아이템 스택을 저장할 수 있습니다. 사용자는 게임 플레이 액션을 통해 maxCapacity까지 용량을 확장할 수 있습니다. maxCapacity int  0 ~ 2147483646 최대 크기 사용자가 확장할 수 있는 인벤토리 칸의 상한값입니다. 이 값을 초과하여 용량을 늘릴 수 없습니다. 모든 칸이 사용 중이고 아이템을 더 이상 스택할 수 없는 경우, 오버플로우 스크립트가 초과분을 처리하지 않는 한 입수는 실패합니다. protectReferencedItem bool? false 참조된 아이템 보호 활성화하면 (referenceOf 메커니즘을 통해) 참조가 등록된 아이템 세트는 소비하거나 삭제할 수 없게 됩니다. 다른 시스템에서 사용 중인 아이템(예: 장착 중인 장비, 편성에 연결된 아이템)이 실수로 삭제되는 것을 방지합니다. itemModels List [] 1 ~ 1000 items 아이템 모델 목록 이 인벤토리에 저장할 수 있는 아이템의 종류입니다. 각 아이템 모델은 한 종류의 아이템에 대한 스택 및 입수 동작을 정의합니다. 인벤토리 모델당 최대 1000개의 아이템 모델까지 설정할 수 있습니다. ItemModel 아이템 모델 아이템은 포션 ×99 처럼, 하나의 인벤토리 칸에 여러 개를 모아서 소지할 수 있습니다. 이렇게 한 칸에 여러 개를 모으는 것을 “스택\"이라고 하며, 아이템마다 스택 가능한 상한 수를 설정할 수 있습니다. 스택 상한에 도달했을 때의 동작도 아이템마다 설정할 수 있습니다. 구체적으로는 다음 중 하나를 선택할 수 있습니다: 새로운 인벤토리 칸을 추가하여 추가로 소지할 수 있도록 한다 상한에 도달했으므로 더 이상 입수할 수 없도록 한다 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 아이템 모델 이름 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 메커니즘이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. stackingLimit long  1 ~ 9223372036854775805 스택 가능한 최대 수량 하나의 인벤토리 칸(스택)에 보관할 수 있는 이 아이템의 최대 수입니다. 이 상한에 도달하면 allowMultipleStacks 설정에 따라 새로운 칸이 할당되거나 추가 입수가 차단됩니다. allowMultipleStacks bool  복수 스택 허용 활성화하면 스택 상한에 도달했을 때 새로운 인벤토리 칸이 자동으로 할당되어 이 아이템의 추가 수량을 저장합니다(추가 용량을 소비합니다). 비활성화하면 기존 칸에서 스택 상한에 도달한 시점에 입수가 차단됩니다. sortValue int  0 ~ 2147483646 표시 순서 인벤토리 내 아이템을 표시용으로 정렬하기 위한 수치입니다. 값이 작을수록 먼저 표시됩니다. 이 값은 ItemSet 레코드에도 복사되어 소지 아이템의 일관된 정렬을 가능하게 합니다. SimpleInventoryModel 심플 인벤토리 모델 일반적인 InventoryModel에서는 인벤토리 안에 저장할 수 있는 아이템의 용량 제한을 설정할 수 있었습니다. 하지만 심플 인벤토리에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량을 보유할 뿐입니다. 다만 심플 인벤토리에서는 여러 아이템의 증감 처리를 한 번의 처리로 실행할 수 있는 API를 사용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 심플 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. simpleItemModels List [] 1 ~ 1000 items 심플 아이템 모델 목록 이 심플 인벤토리에 저장할 수 있는 아이템의 종류입니다. 일반적인 인벤토리와 달리 심플 아이템에는 스택 상한이나 용량 제약이 없습니다. 심플 인벤토리 모델당 최대 1000개의 아이템 모델을 사용할 수 있습니다. SimpleItemModel 심플 아이템 모델 ItemModel에서는 스택할 수 있는 수량의 최댓값을 설정할 수 있어, 일정 수를 초과하는 경우 여러 스택으로 나누는 구현이 가능했습니다. 심플 아이템에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량만을 보관합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 심플 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. BigInventoryModel 거대 인벤토리 모델 일반적인 InventoryModel이나 SimpleInventoryModel에서는 인벤토리에 저장할 수 있는 아이템의 수가 int64 범위로 제한되었습니다. 인플레이션 계열 게임에서는 더 넓은 범위의 값이 필요한 경우가 있습니다. 거대 인벤토리 모델에서는 인벤토리에 저장할 수 있는 아이템의 수가 최대 1024자리의 정수값을 가질 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 거대 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. bigItemModels List [] 1 ~ 1000 items 거대 아이템 모델 목록 이 거대 인벤토리에 저장할 수 있는 아이템의 종류입니다. 각 거대 아이템 모델은 최대 1024자리의 정수 문자열로 표현되는 수량을 보유할 수 있습니다. 거대 인벤토리 모델당 최대 1000개의 아이템 모델까지 설정할 수 있습니다. BigItemModel 거대 아이템 모델 거대 아이템 모델은 거대 인벤토리 모델에 저장되는 거대 아이템을 정의하는 모델입니다. 거대 아이템은 소지 수량을 int64 범위를 초과하여 보유할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 거대 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Inventory Deploy/CDK 레퍼런스","url":"/ko/api_reference/inventory/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 잡 큐 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. enableAutoRun bool false 서버 사이드에서 자동으로 잡을 실행할지 여부 활성화하면 등록된 잡은 클라이언트가 폴링하여 실행할 필요 없이 서버 사이드에서 자동으로 실행됩니다. 비활성화된 경우, 클라이언트는 명시적으로 run API를 호출하여 잡을 처리해야 하며, pushNotification을 통해 새로운 잡에 대한 알림을 받을 수 있습니다. pushNotification NotificationSetting {enableAutoRun} == false 푸시 알림 새로운 잡이 잡 큐에 등록되었을 때 GS2-Gateway를 통한 푸시 알림 설정입니다. enableAutoRun이 비활성화된 경우에만 사용할 수 있습니다. 새로 등록된 잡을 처리하도록 클라이언트에 run API 호출을 요청하기 위해 사용됩니다. ※ enableAutoRun이(가) “false” 이면 활성화 runNotification NotificationSetting  실행 알림 잡 큐의 잡이 실행되었을 때 GS2-Gateway를 통한 푸시 알림 설정입니다. 알림에는 잡의 결과가 포함되어 있어, 클라이언트는 추가 API 호출 없이 보상을 표시하거나 오류를 처리할 수 있습니다. logSetting LogSetting 로그 출력 설정 잡 큐 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버깅 및 분석을 위해 잡의 등록, 실행, 재시도, 실패를 추적하는 데 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::JobQueue::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null EnableAutoRun : null PushNotification : null RunNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/jobQueue\" ) SampleStack := core . NewStack () jobQueue . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , jobQueue . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\JobQueue\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\JobQueue\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . jobQueue . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . jobQueue . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2JobQueue . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2JobQueue . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import jobQueue from \"@/gs2cdk/jobQueue\" ; class SampleStack extends core . Stack { public constructor () { super (); new jobQueue . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , job_queue class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () job_queue . Namespace ( stack = self , name = 'namespace-0001' , options = job_queue . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-JobQueue Deploy/CDK 레퍼런스","url":"/ko/api_reference/job_queue/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 암호화 키 작업의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 암호화·복호화 요청 등 키 사용 내역을 감사하는 데 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Key::Namespace Properties : Name : namespace-0001 Description : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/key\" ) SampleStack := core . NewStack () key . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , key . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Key\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Key\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . key . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . key . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Key . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Key . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import key from \"@/gs2cdk/key\" ; class SampleStack extends core . Stack { public constructor () { super (); new key . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , key class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () key . Namespace ( stack = self , name = 'namespace-0001' , options = key . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Key 암호화 키 GS2 에서 암호화 처리가 필요한 경우 여기서 생성하는 암호화 키의 GRN을 지정해야 합니다. 구체적인 암호화 키의 내용은 GS2 외부로 노출되지 않으며, 안전하게 암호화·복호화 처리를 수행할 수 있습니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 암호화 키 이름 암호화 키 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Key 작성한 암호화 키 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Key::Key Properties : NamespaceName : namespace-0001 Name : key-0001 Description : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/key\" ) SampleStack := core . NewStack () key . NewKey ( \u0026 SampleStack , \"namespace-0001\" , \"key-0001\" , key . KeyOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Key\\Model\\Key ( stack : $this , namespaceName : \"namespace-0001\" , name : \"key-0001\" ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . key . model . Key ( this , \"namespace-0001\" , \"key-0001\" ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Key . Model . Key ( stack : this , namespaceName : \"namespace-0001\" , name : \"key-0001\" ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import key from \"@/gs2cdk/key\" ; class SampleStack extends core . Stack { public constructor () { super (); new key . model . Key ( this , \"namespace-0001\" , \"key-0001\" ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , key class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () key . Key ( stack = self , namespace_name = 'namespace-0001' , name = 'key-0001' , ) print ( SampleStack () . yaml ()) # Generate Template","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Key Deploy/CDK 레퍼런스","url":"/ko/api_reference/key/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 카운트업이나 카운터 리셋 등 사용 횟수 제한 조작 시 트랜잭션 처리 방식을 제어하는 설정입니다. countUpScript ScriptSetting 카운트업 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - countUp logSetting LogSetting 로그 출력 설정 사용 횟수 제한 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그나 분석을 위해 카운터의 증가, 리셋, 제한 확인을 추적하는 데 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Limit::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null CountUpScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/limit\" ) SampleStack := core . NewStack () limit . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , limit . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Limit\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Limit\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . limit . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . limit . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Limit . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Limit . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import limit from \"@/gs2cdk/limit\" ; class SampleStack extends core . Stack { public constructor () { super (); new limit . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , limit class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () limit . Namespace ( stack = self , name = 'namespace-0001' , options = limit . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentLimitMaster 현재 활성화된 사용 횟수 제한 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 사용 횟수 제한 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Limit 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentLimitMaster 갱신된 현재 활성화되어 있는 횟수 제한 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Limit::CurrentLimitMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-04-05\" , \"limitModels\": [ { \"name\": \"daily\" , \"resetType\": \"daily\" , \"metadata\": \"DAILY\" , \"resetHour\": 9 } , { \"name\": \"weekly\" , \"resetType\": \"weekly\" , \"metadata\": \"WEEKLY\" , \"resetDayOfWeek\": \"sunday\" , \"resetHour\": 18 } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/limit\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () limit . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , limit . NamespaceOptions {}, ). MasterData ( [] limit . LimitModel { limit . NewLimitModel ( \"daily\" , limit . LimitModelResetTypeDaily , limit . LimitModelOptions { Metadata : pointy . String ( \"DAILY\" ), ResetHour : pointy . Int32 ( 9 ), }, ), limit . NewLimitModel ( \"weekly\" , limit . LimitModelResetTypeWeekly , limit . LimitModelOptions { Metadata : pointy . String ( \"WEEKLY\" ), ResetDayOfWeek : limit . LimitModelResetDayOfWeekSunday . Pointer (), ResetHour : pointy . Int32 ( 18 ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Limit\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Limit\\Model\\LimitModel ( name : \"daily\" , resetType : \\Gs2Cdk\\Limit\\Model\\Enums\\LimitModelResetType :: DAILY , options : new \\Gs2Cdk\\Limit\\Model\\Options\\LimitModelOptions ( metadata : \"DAILY\" , resetHour : 9 ) ), new \\Gs2Cdk\\Limit\\Model\\LimitModel ( name : \"weekly\" , resetType : \\Gs2Cdk\\Limit\\Model\\Enums\\LimitModelResetType :: WEEKLY , options : new \\Gs2Cdk\\Limit\\Model\\Options\\LimitModelOptions ( metadata : \"WEEKLY\" , resetDayOfWeek : \\Gs2Cdk\\Limit\\Model\\Enums\\LimitModelResetDayOfWeek :: SUNDAY , resetHour : 18 ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . limit . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . limit . model . LimitModel ( \"daily\" , io . gs2 . cdk . limit . model . enums . LimitModelResetType . DAILY , new io . gs2 . cdk . limit . model . options . LimitModelOptions () . withMetadata ( \"DAILY\" ) . withResetHour ( 9 ) ), new io . gs2 . cdk . limit . model . LimitModel ( \"weekly\" , io . gs2 . cdk . limit . model . enums . LimitModelResetType . WEEKLY , new io . gs2 . cdk . limit . model . options . LimitModelOptions () . withMetadata ( \"WEEKLY\" ) . withResetDayOfWeek ( io . gs2 . cdk . limit . model . enums . LimitModelResetDayOfWeek . SUNDAY ) . withResetHour ( 18 ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Limit . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Limit . Model . LimitModel [] { new Gs2Cdk . Gs2Limit . Model . LimitModel ( name : \"daily\" , resetType : Gs2Cdk . Gs2Limit . Model . Enums . LimitModelResetType . Daily , options : new Gs2Cdk . Gs2Limit . Model . Options . LimitModelOptions { metadata = \"DAILY\" , resetHour = 9 } ), new Gs2Cdk . Gs2Limit . Model . LimitModel ( name : \"weekly\" , resetType : Gs2Cdk . Gs2Limit . Model . Enums . LimitModelResetType . Weekly , options : new Gs2Cdk . Gs2Limit . Model . Options . LimitModelOptions { metadata = \"WEEKLY\" , resetDayOfWeek = Gs2Cdk . Gs2Limit . Model . Enums . LimitModelResetDayOfWeek . Sunday , resetHour = 18 } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import limit from \"@/gs2cdk/limit\" ; class SampleStack extends core . Stack { public constructor () { super (); new limit . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new limit . model . LimitModel ( \"daily\" , limit . model . LimitModelResetType . DAILY , { metadata : \"DAILY\" , resetHour : 9 } ), new limit . model . LimitModel ( \"weekly\" , limit . model . LimitModelResetType . WEEKLY , { metadata : \"WEEKLY\" , resetDayOfWeek : limit.model.LimitModelResetDayOfWeek.SUNDAY , resetHour : 18 } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , limit class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () limit . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( limit_models = [ limit . LimitModel ( name = 'daily' , reset_type = limit . LimitModelResetType . DAILY , options = limit . LimitModelOptions ( metadata = 'DAILY' , reset_hour = 9 ), ), limit . LimitModel ( name = 'weekly' , reset_type = limit . LimitModelResetType . WEEKLY , options = limit . LimitModelOptions ( metadata = 'WEEKLY' , reset_day_of_week = limit . LimitModelResetDayOfWeek . SUNDAY , reset_hour = 18 ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template LimitModel 횟수 제한 모델 횟수 제한 모델에는 사용 횟수를 리셋하는 타이밍을 설정할 수 있습니다. 리셋 간격은 “매일”, “매주”, “매월”, “리셋하지 않음”, “일정 일수마다” 5가지 중에서 선택할 수 있습니다. 또한, 횟수 제한의 최대값은 마스터 데이터 쪽에서는 고정하지 않습니다. 이는 게임 내 컨텍스트에 따라 허용되는 최대 횟수를 동적으로 변경할 수 있도록 하기 위함입니다. 예를 들어 스텝업 가챠처럼, 구매 횟수 카운터가 3회 미만일 때 구매할 수 있는 상품 위 상품을 구매할 수 없을 때, 구매 횟수 카운터가 5회 미만이면 구매할 수 있는 다른 상품 과 같이, 상황에 따라 “최대 횟수\"를 전환할 수 있는 설계를 상정하고 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 limitModelId string ※ ~ 1024자 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” }  리셋 타이밍 이 횟수 제한 모델 하위의 카운터 값이 자동으로 0으로 리셋되는 타이밍을 결정합니다. notReset(영구적, 리셋 없음), daily(매일 지정된 시각에 리셋), weekly(지정된 요일에 리셋), monthly(지정된 날짜에 리셋), days(기준 일시로부터 일정 일수마다 리셋) 중에서 선택합니다. 모든 시각은 UTC입니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋 날짜 resetType이 “monthly\"인 경우 카운터가 리셋되는 날짜(일)입니다. 1~31 사이의 값이 유효합니다. 지정한 날짜가 해당 월의 일수를 초과하는 경우(예: 2월의 31일), 해당 월의 마지막 날에 리셋됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋 요일 resetType이 “weekly\"인 경우 카운터가 리셋되는 요일입니다. 이 요일의 resetHour(UTC)로 지정된 시각에 리셋됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 daily, weekly, monthly 리셋 타입에서 카운터가 리셋되는 UTC 시각(0~23)입니다. 예를 들어 값이 0이면 UTC 자정에 카운터가 리셋됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋 일수 resetType이 “days\"인 경우 카운터 리셋 간격(일수)입니다. 리셋 주기는 anchorTimestamp를 기준으로 계산됩니다. 예를 들어 days가 7이고 anchorTimestamp가 월요일 정오라면, 매주 월요일 정오에 카운터가 리셋됩니다. ※ resetType이(가) “days” 이면 필수","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Limit Deploy/CDK 레퍼런스","url":"/ko/api_reference/limit/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Lock::Namespace Properties : Name : namespace-0001 Description : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/lock\" ) SampleStack := core . NewStack () lock . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , lock . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Lock\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Lock\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . lock . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . lock . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Lock . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Lock . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import lock from \"@/gs2cdk/lock\" ; class SampleStack extends core . Stack { public constructor () { super (); new lock . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , lock class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () lock . Namespace ( stack = self , name = 'namespace-0001' , options = lock . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Lock Deploy/CDK 레퍼런스","url":"/ko/api_reference/lock/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 type 문자열 열거형 enum {   “gs2”,   “bigquery”,   “firehose” } “gs2” 로그 출력 방법 로그 데이터의 내보내기 대상을 결정합니다. “gs2\"는 GS2의 매니지드 스토리지에 로그를 저장하며 내장된 검색·분석 기능을 이용할 수 있습니다. “bigquery\"는 Google BigQuery로 로그를 내보내 고급 분석을 수행할 수 있습니다. “firehose\"는 Amazon Kinesis Data Firehose로 로그를 스트리밍하여 S3, Redshift 등의 AWS 대상으로 전달합니다. 정의 설명 gs2 GS2에 의한 관리 bigquery BigQuery로 내보내기 firehose Kinesis Firehose로 내보내기 gcpCredentialJson string {type} == “bigquery” ※ ~ 5120자 GCP 자격 증명 BigQuery로 로그를 내보낼 때 인증에 사용하는 GCP 자격 증명 JSON입니다. 서비스 계정에는 대상 데이터셋에 대한 BigQuery Data Editor 권한이 필요합니다. ※ type이(가) “bigquery” 이면 필수 bigQueryDatasetName string {type} == “bigquery” ※ ~ 1024자 BigQuery 데이터셋 이름 로그 데이터를 내보낼 대상이 되는 BigQuery 데이터셋의 이름입니다. 데이터셋은 제공된 자격 증명에 연결된 GCP 프로젝트 내에 미리 존재해야 합니다. ※ type이(가) “bigquery” 이면 필수 logExpireDays int {type} in [“gs2”, “bigquery”] ※ 0 ~ 3650 로그 보존 기간(일) 로그 데이터를 보관하는 일수입니다. 이 기간을 초과한 로그는 자동으로 삭제됩니다. 내보내기 방법이 “gs2” 또는 “bigquery\"인 경우에 적용됩니다. 최대 3650일(약 10년)까지 설정할 수 있습니다. ※ type이(가) “gs2”,“bigquery\"이면 필수 awsRegion string {type} == “firehose” ※ ~ 256자 AWS 리전 Kinesis Data Firehose 전송 스트림이 존재하는 AWS 리전입니다(예: us-east-1, ap-northeast-1). ※ type이(가) “firehose” 이면 필수 awsAccessKeyId string {type} == “firehose” ※ ~ 256자 AWS 액세스 키 ID Kinesis Data Firehose 인증에 사용하는 AWS 액세스 키 ID입니다. IAM 사용자에게는 지정된 Firehose 전송 스트림으로 레코드를 전송할 수 있는 권한이 필요합니다. ※ type이(가) “firehose” 이면 필수 awsSecretAccessKey string {type} == “firehose” ※ ~ 256자 AWS 시크릿 액세스 키 Kinesis Data Firehose 인증을 위해 액세스 키 ID와 짝을 이루는 AWS 시크릿 액세스 키입니다. ※ type이(가) “firehose” 이면 필수 firehoseStreamName string {type} == “firehose” ※ ~ 256자 Kinesis Firehose 스트림 이름 로그 데이터의 전송 대상이 되는 Kinesis Data Firehose 전송 스트림의 이름입니다. ※ type이(가) “firehose” 이면 필수 firehoseCompressData 문자열 열거형 enum {   “none”,   “gzip” } {type} == “firehose” “none” Kinesis Firehose로 출력하는 데이터를 압축할지 여부 Kinesis Data Firehose로 전송하기 전에 로그 데이터를 압축할지를 설정합니다. Gzip 압축을 사용하면 데이터 전송량과 스토리지 비용을 절감할 수 있습니다. 정의 설명 none 압축하지 않음 gzip Gzip ※ type이(가) “firehose” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Log::Namespace Properties : Name : namespace-0001 Description : null Type : gs2 GcpCredentialJson : { \"project_id\": \"gs2-dev\" } BigQueryDatasetName : dataset_0001 LogExpireDays : 3 AwsRegion : awsRegion AwsAccessKeyId : awsAccessKeyId AwsSecretAccessKey : awsSecretAccessKey FirehoseStreamName : firehoseStreamName FirehoseCompressData : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/log\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () log . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , log . NamespaceOptions { Type : log . NamespaceTypeGs2 , GcpCredentialJson : pointy . String ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ), BigQueryDatasetName : pointy . String ( \"dataset_0001\" ), LogExpireDays : pointy . Int32 ( 3 ), AwsRegion : pointy . String ( \"awsRegion\" ), AwsAccessKeyId : pointy . String ( \"awsAccessKeyId\" ), AwsSecretAccessKey : pointy . String ( \"awsSecretAccessKey\" ), FirehoseStreamName : pointy . String ( \"firehoseStreamName\" ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Log\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Log\\Model\\Options\\NamespaceOptions ( type : \\Gs2Cdk\\Log\\Model\\Enums\\NamespaceType :: GS2 , gcpCredentialJson : \"{ \\\" project_id \\\" : \\\" gs2-dev \\\" }\" , bigQueryDatasetName : \"dataset_0001\" , logExpireDays : 3 , awsRegion : \"awsRegion\" , awsAccessKeyId : \"awsAccessKeyId\" , awsSecretAccessKey : \"awsSecretAccessKey\" , firehoseStreamName : \"firehoseStreamName\" ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . log . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . log . model . options . NamespaceOptions () . withType ( io . gs2 . cdk . log . model . enums . NamespaceType . GS2 ) . withGcpCredentialJson ( \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" ) . withBigQueryDatasetName ( \"dataset_0001\" ) . withLogExpireDays ( 3 ) . withAwsRegion ( \"awsRegion\" ) . withAwsAccessKeyId ( \"awsAccessKeyId\" ) . withAwsSecretAccessKey ( \"awsSecretAccessKey\" ) . withFirehoseStreamName ( \"firehoseStreamName\" ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Log . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Log . Model . Options . NamespaceOptions { type = Gs2Cdk . Gs2Log . Model . Enums . NamespaceType . Gs2 , gcpCredentialJson = \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" , bigQueryDatasetName = \"dataset_0001\" , logExpireDays = 3 , awsRegion = \"awsRegion\" , awsAccessKeyId = \"awsAccessKeyId\" , awsSecretAccessKey = \"awsSecretAccessKey\" , firehoseStreamName = \"firehoseStreamName\" } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import log from \"@/gs2cdk/log\" ; class SampleStack extends core . Stack { public constructor () { super (); new log . model . Namespace ( this , \"namespace-0001\" , { type : log . model . NamespaceType . GS2 , gcpCredentialJson : \"{\\\"project_id\\\": \\\"gs2-dev\\\"}\" , bigQueryDatasetName : \"dataset_0001\" , logExpireDays : 3 , awsRegion : \"awsRegion\" , awsAccessKeyId : \"awsAccessKeyId\" , awsSecretAccessKey : \"awsSecretAccessKey\" , firehoseStreamName : \"firehoseStreamName\" } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , log class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () log . Namespace ( stack = self , name = 'namespace-0001' , options = log . NamespaceOptions ( type = log . NamespaceType . GS2 , gcp_credential_json = '{\"project_id\": \"gs2-dev\"}' , big_query_dataset_name = 'dataset_0001' , log_expire_days = 3 , aws_region = 'awsRegion' , aws_access_key_id = 'awsAccessKeyId' , aws_secret_access_key = 'awsSecretAccessKey' , firehose_stream_name = 'firehoseStreamName' , ), ) print ( SampleStack () . yaml ()) # Generate Template Dashboard 대시보드 로그 데이터와 메트릭을 시각화하기 위한 커스터마이즈 가능한 대시보드입니다. 각 대시보드는 레이아웃과 위젯 설정을 JSON 페이로드로 저장하여, 로그 분석의 맞춤형 뷰를 만들 수 있습니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. displayName string  ~ 256자 표시용 이름 이 대시보드의 사람이 읽기 쉬운 이름으로, 대시보드 목록과 헤더에 표시됩니다. description string ~ 1024자 설명문 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Dashboard 생성한 대시보드 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Log::Dashboard Properties : NamespaceName : namespace-0001 DisplayName : Sample Dashboard 0001 Description : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/log\" ) SampleStack := core . NewStack () log . NewDashboard ( \u0026 SampleStack , \"namespace-0001\" , \"Sample Dashboard 0001\" , log . DashboardOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Log\\Model\\Dashboard ( stack : $this , namespaceName : \"namespace-0001\" , displayName : \"Sample Dashboard 0001\" ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . log . model . Dashboard ( this , \"namespace-0001\" , \"Sample Dashboard 0001\" ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Log . Model . Dashboard ( stack : this , namespaceName : \"namespace-0001\" , displayName : \"Sample Dashboard 0001\" ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import log from \"@/gs2cdk/log\" ; class SampleStack extends core . Stack { public constructor () { super (); new log . model . Dashboard ( this , \"namespace-0001\" , \"Sample Dashboard 0001\" ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , log class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () log . Dashboard ( stack = self , namespace_name = 'namespace-0001' , display_name = 'Sample Dashboard 0001' , ) print ( SampleStack () . yaml ()) # Generate Template FacetModel 패싯 모델 로그 데이터의 필터링과 집계에 사용할 수 있는 패싯 필드를 정의합니다. 패싯을 통해 서비스 이름, 메서드, 상태, 커스텀 필드 등 특정 차원으로 로그 검색 결과를 좁힐 수 있습니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. field string  ~ 128자 패싯 필드 이름 이 패싯이 대상으로 하는 로그 필드의 이름입니다(예: “service”, “method”, “status”). type 문자열 열거형 enum {   “string”,   “double”,   “measure” }  패싯 데이터 타입 패싯 필드의 데이터 타입입니다. “string\"은 값 카운트가 있는 범주형 값에, “double\"은 범위 필터링이 있는 숫자 값에, “measure\"는 통계 분석이 있는 측정값에 사용됩니다. 정의 설명 string 문자열 double 숫자 measure 측정값 displayName string  ~ 128자 표시용 이름 이 패싯의 사람이 읽을 수 있는 이름으로, 로그 검색 UI에 표시됩니다. order int 0 0 ~ 100000 표시 순서 UI에서 이 패싯을 표시할 때의 정렬 순서입니다. 값이 작을수록 먼저 표시됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item FacetModel 생성한 패싯 모델 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Log::FacetModel Properties : NamespaceName : namespace-0001 Field : facet-model-0001 Type : string DisplayName : Sample Facet Model 0001 Order : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/log\" ) SampleStack := core . NewStack () log . NewFacetModel ( \u0026 SampleStack , \"namespace-0001\" , \"facet-model-0001\" , log . FacetModelTypeString , \"Sample Facet Model 0001\" , log . FacetModelOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Log\\Model\\FacetModel ( stack : $this , namespaceName : \"namespace-0001\" , field : \"facet-model-0001\" , type : \\Gs2Cdk\\Log\\Model\\Enums\\FacetModelType :: STRING , displayName : \"Sample Facet Model 0001\" ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . log . model . FacetModel ( this , \"namespace-0001\" , \"facet-model-0001\" , io . gs2 . cdk . log . model . enums . FacetModelType . STRING , \"Sample Facet Model 0001\" ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Log . Model . FacetModel ( stack : this , namespaceName : \"namespace-0001\" , field : \"facet-model-0001\" , type : Gs2Cdk . Gs2Log . Model . Enums . FacetModelType . String , displayName : \"Sample Facet Model 0001\" ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import log from \"@/gs2cdk/log\" ; class SampleStack extends core . Stack { public constructor () { super (); new log . model . FacetModel ( this , \"namespace-0001\" , \"facet-model-0001\" , log . model . FacetModelType . STRING , \"Sample Facet Model 0001\" ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , log class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () log . FacetModel ( stack = self , namespace_name = 'namespace-0001' , field = 'facet-model-0001' , type = log . FacetModelType . STRING , display_name = 'Sample Facet Model 0001' , ) print ( SampleStack () . yaml ()) # Generate Template","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Log Deploy/CDK 레퍼런스","url":"/ko/api_reference/log/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 이 네임스페이스 내에서 보상 트랜잭션이 어떻게 실행되는지에 대한 설정. receiveScript ScriptSetting 보상을 수신할 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receive logSetting LogSetting 로그 출력 설정 API 요청·응답 로그를 GS2-Log에 출력하기 위한 설정. 설정하면 로그인 보너스 조작(수신, 놓친 보너스 구제 등)이 모니터링 및 분석을 위해 로그로 출력됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::LoginReward::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 ReceiveScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/loginReward\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () loginReward . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , loginReward . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\LoginReward\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\LoginReward\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . loginReward . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . loginReward . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2LoginReward . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2LoginReward . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import loginReward from \"@/gs2cdk/loginReward\" ; class SampleStack extends core . Stack { public constructor () { super (); new loginReward . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , login_reward class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () login_reward . Namespace ( stack = self , name = 'namespace-0001' , options = login_reward . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentBonusMaster 현재 활성화된 로그인 보너스 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 로그인 보너스 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여, 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-LoginReward 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentBonusMaster 갱신된 현재 활성화된 로그인 보너스 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::LoginReward::CurrentBonusMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2023-07-11\" , \"bonusModels\": [ { \"name\": \"schedule\" , \"mode\": \"schedule\" , \"missedReceiveRelief\": \"disabled\" , \"periodEventId\": \"grn:gs2:schedule:grn-0001\" , \"rewards\": [ { \"acquireActions\": [ { \"action\": \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\": { \"namespaceName\": \"stamina-0001\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"recoverValue\": 100 } } ] } , { \"acquireActions\": [ { \"action\": \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\": { \"namespaceName\": \"stamina-0001\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"recoverValue\": 100 } } ] } , { \"acquireActions\": [ { \"action\": \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\": { \"namespaceName\": \"stamina-0001\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"recoverValue\": 100 } } ] } ] } , { \"name\": \"streaming\" , \"mode\": \"streaming\" , \"missedReceiveRelief\": \"enabled\" , \"resetHour\": 15 , \"repeat\": \"enabled\" , \"rewards\": [ { \"acquireActions\": [ { \"action\": \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\": { \"namespaceName\": \"stamina-0001\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"recoverValue\": 100 } } ] } , { \"acquireActions\": [ { \"action\": \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\": { \"namespaceName\": \"stamina-0001\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"recoverValue\": 100 } } ] } , { \"acquireActions\": [ { \"action\": \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\": { \"namespaceName\": \"stamina-0001\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"recoverValue\": 100 } } ] } ], \"missedReceiveReliefConsumeActions\": [ { \"action\": \"Gs2Money:WithdrawByUserId\" , \"request\": { \"namespaceName\": \"money-0001\" , \"userId\": \"#{userId}\" , \"slot\": 0 , \"count\": 200 , \"paidOnly\": false } } ] } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/loginReward\" \"github.com/gs2io/gs2-golang-cdk/money\" \"github.com/gs2io/gs2-golang-cdk/stamina\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () loginReward . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , loginReward . NamespaceOptions {}, ). MasterData ( [] loginReward . BonusModel { loginReward . NewBonusModel ( \"schedule\" , loginReward . BonusModelModeSchedule , loginReward . BonusModelMissedReceiveReliefDisabled , loginReward . BonusModelOptions { PeriodEventId : pointy . String ( \"grn:gs2:schedule:grn-0001\" ), Rewards : [] loginReward . Reward { loginReward . NewReward ( [] core . AcquireAction { stamina . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, loginReward . RewardOptions {}, ), loginReward . NewReward ( [] core . AcquireAction { stamina . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, loginReward . RewardOptions {}, ), loginReward . NewReward ( [] core . AcquireAction { stamina . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, loginReward . RewardOptions {}, ), }, }, ), loginReward . NewBonusModel ( \"streaming\" , loginReward . BonusModelModeStreaming , loginReward . BonusModelMissedReceiveReliefEnabled , loginReward . BonusModelOptions { ResetHour : pointy . Int32 ( 15 ), Repeat : loginReward . BonusModelRepeatEnabled . Pointer (), Rewards : [] loginReward . Reward { loginReward . NewReward ( [] core . AcquireAction { stamina . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, loginReward . RewardOptions {}, ), loginReward . NewReward ( [] core . AcquireAction { stamina . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, loginReward . RewardOptions {}, ), loginReward . NewReward ( [] core . AcquireAction { stamina . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, loginReward . RewardOptions {}, ), }, MissedReceiveReliefConsumeActions : [] core . ConsumeAction { money . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , pointy . Bool ( false ), ), }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\LoginReward\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\LoginReward\\Model\\BonusModel ( name : \"schedule\" , mode : \\Gs2Cdk\\LoginReward\\Model\\Enums\\BonusModelMode :: SCHEDULE , missedReceiveRelief : \\Gs2Cdk\\LoginReward\\Model\\Enums\\BonusModelMissedReceiveRelief :: DISABLED , options : new \\Gs2Cdk\\LoginReward\\Model\\Options\\BonusModelOptions ( periodEventId : \"grn:gs2:schedule:grn-0001\" , rewards : [ new \\Gs2Cdk\\LoginReward\\Model\\Reward ( acquireActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 , ), ], ), new \\Gs2Cdk\\LoginReward\\Model\\Reward ( acquireActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 , ), ], ), new \\Gs2Cdk\\LoginReward\\Model\\Reward ( acquireActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 , ), ], ), ] ) ), new \\Gs2Cdk\\LoginReward\\Model\\BonusModel ( name : \"streaming\" , mode : \\Gs2Cdk\\LoginReward\\Model\\Enums\\BonusModelMode :: STREAMING , missedReceiveRelief : \\Gs2Cdk\\LoginReward\\Model\\Enums\\BonusModelMissedReceiveRelief :: ENABLED , options : new \\Gs2Cdk\\LoginReward\\Model\\Options\\BonusModelOptions ( resetHour : 15 , repeat : \\Gs2Cdk\\LoginReward\\Model\\Enums\\BonusModelRepeat :: ENABLED , rewards : [ new \\Gs2Cdk\\LoginReward\\Model\\Reward ( acquireActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 , ), ], ), new \\Gs2Cdk\\LoginReward\\Model\\Reward ( acquireActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 , ), ], ), new \\Gs2Cdk\\LoginReward\\Model\\Reward ( acquireActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 , ), ], ), ], missedReceiveReliefConsumeActions : [ new \\Gs2Cdk\\Money\\StampSheet\\WithdrawByUserId ( namespaceName : \"money-0001\" , userId : \"#{userId}\" , slot : 0 , count : 200 , paidOnly : false , ), ] ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . loginReward . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . loginReward . model . BonusModel ( \"schedule\" , io . gs2 . cdk . loginReward . model . enums . BonusModelMode . SCHEDULE , io . gs2 . cdk . loginReward . model . enums . BonusModelMissedReceiveRelief . DISABLED , new io . gs2 . cdk . loginReward . model . options . BonusModelOptions () . withPeriodEventId ( \"grn:gs2:schedule:grn-0001\" ) . withRewards ( Arrays . asList ( new io . gs2 . cdk . loginReward . model . Reward ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) ) ), new io . gs2 . cdk . loginReward . model . Reward ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) ) ), new io . gs2 . cdk . loginReward . model . Reward ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) ) ) )) ), new io . gs2 . cdk . loginReward . model . BonusModel ( \"streaming\" , io . gs2 . cdk . loginReward . model . enums . BonusModelMode . STREAMING , io . gs2 . cdk . loginReward . model . enums . BonusModelMissedReceiveRelief . ENABLED , new io . gs2 . cdk . loginReward . model . options . BonusModelOptions () . withResetHour ( 15 ) . withRepeat ( io . gs2 . cdk . loginReward . model . enums . BonusModelRepeat . ENABLED ) . withRewards ( Arrays . asList ( new io . gs2 . cdk . loginReward . model . Reward ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) ) ), new io . gs2 . cdk . loginReward . model . Reward ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) ) ), new io . gs2 . cdk . loginReward . model . Reward ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) ) ) )) . withMissedReceiveReliefConsumeActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , false , \"#{userId}\" ) )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2LoginReward . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2LoginReward . Model . BonusModel [] { new Gs2Cdk . Gs2LoginReward . Model . BonusModel ( name : \"schedule\" , mode : Gs2Cdk . Gs2LoginReward . Model . Enums . BonusModelMode . Schedule , missedReceiveRelief : Gs2Cdk . Gs2LoginReward . Model . Enums . BonusModelMissedReceiveRelief . Disabled , options : new Gs2Cdk . Gs2LoginReward . Model . Options . BonusModelOptions { periodEventId = \"grn:gs2:schedule:grn-0001\" , rewards = new Gs2Cdk . Gs2LoginReward . Model . Reward [] { new Gs2Cdk . Gs2LoginReward . Model . Reward ( acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 ) } ), new Gs2Cdk . Gs2LoginReward . Model . Reward ( acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 ) } ), new Gs2Cdk . Gs2LoginReward . Model . Reward ( acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 ) } ) } } ), new Gs2Cdk . Gs2LoginReward . Model . BonusModel ( name : \"streaming\" , mode : Gs2Cdk . Gs2LoginReward . Model . Enums . BonusModelMode . Streaming , missedReceiveRelief : Gs2Cdk . Gs2LoginReward . Model . Enums . BonusModelMissedReceiveRelief . Enabled , options : new Gs2Cdk . Gs2LoginReward . Model . Options . BonusModelOptions { resetHour = 15 , repeat = Gs2Cdk . Gs2LoginReward . Model . Enums . BonusModelRepeat . Enabled , rewards = new Gs2Cdk . Gs2LoginReward . Model . Reward [] { new Gs2Cdk . Gs2LoginReward . Model . Reward ( acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 ) } ), new Gs2Cdk . Gs2LoginReward . Model . Reward ( acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 ) } ), new Gs2Cdk . Gs2LoginReward . Model . Reward ( acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . RecoverStaminaByUserId ( namespaceName : \"stamina-0001\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 100 ) } ) }, missedReceiveReliefConsumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Money . StampSheet . WithdrawByUserId ( namespaceName : \"money-0001\" , userId : \"#{userId}\" , slot : 0 , count : 200 , paidOnly : false ) } } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import loginReward from \"@/gs2cdk/loginReward\" ; import money from \"@/gs2cdk/money\" ; import stamina from \"@/gs2cdk/stamina\" ; class SampleStack extends core . Stack { public constructor () { super (); new loginReward . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new loginReward . model . BonusModel ( \"schedule\" , loginReward . model . BonusModelMode . SCHEDULE , loginReward . model . BonusModelMissedReceiveRelief . DISABLED , { periodEventId : \"grn:gs2:schedule:grn-0001\" , rewards : [ new loginReward . model . Reward ( [ new stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ] ), new loginReward . model . Reward ( [ new stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ] ), new loginReward . model . Reward ( [ new stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ] ), ] } ), new loginReward . model . BonusModel ( \"streaming\" , loginReward . model . BonusModelMode . STREAMING , loginReward . model . BonusModelMissedReceiveRelief . ENABLED , { resetHour : 15 , repeat : loginReward.model.BonusModelRepeat.ENABLED , rewards : [ new loginReward . model . Reward ( [ new stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ] ), new loginReward . model . Reward ( [ new stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ] ), new loginReward . model . Reward ( [ new stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ] ), ], missedReceiveReliefConsumeActions : [ new money . stampSheet . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , false , \"#{userId}\" ), ] } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , login_reward , money , stamina class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () login_reward . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( bonus_models = [ login_reward . BonusModel ( name = 'schedule' , mode = login_reward . BonusModelMode . SCHEDULE , missed_receive_relief = login_reward . BonusModelMissedReceiveRelief . DISABLED , options = login_reward . BonusModelOptions ( period_event_id = 'grn:gs2:schedule:grn-0001' , rewards = [ login_reward . Reward ( acquire_actions = [ stamina . RecoverStaminaByUserId ( namespace_name = 'stamina-0001' , stamina_name = 'quest' , user_id = '# {userId} ' , recover_value = 100 ), ], ), login_reward . Reward ( acquire_actions = [ stamina . RecoverStaminaByUserId ( namespace_name = 'stamina-0001' , stamina_name = 'quest' , user_id = '# {userId} ' , recover_value = 100 ), ], ), login_reward . Reward ( acquire_actions = [ stamina . RecoverStaminaByUserId ( namespace_name = 'stamina-0001' , stamina_name = 'quest' , user_id = '# {userId} ' , recover_value = 100 ), ], ), ] ), ), login_reward . BonusModel ( name = 'streaming' , mode = login_reward . BonusModelMode . STREAMING , missed_receive_relief = login_reward . BonusModelMissedReceiveRelief . ENABLED , options = login_reward . BonusModelOptions ( reset_hour = 15 , repeat = login_reward . BonusModelRepeat . ENABLED , rewards = [ login_reward . Reward ( acquire_actions = [ stamina . RecoverStaminaByUserId ( namespace_name = 'stamina-0001' , stamina_name = 'quest' , user_id = '# {userId} ' , recover_value = 100 ), ], ), login_reward . Reward ( acquire_actions = [ stamina . RecoverStaminaByUserId ( namespace_name = 'stamina-0001' , stamina_name = 'quest' , user_id = '# {userId} ' , recover_value = 100 ), ], ), login_reward . Reward ( acquire_actions = [ stamina . RecoverStaminaByUserId ( namespace_name = 'stamina-0001' , stamina_name = 'quest' , user_id = '# {userId} ' , recover_value = 100 ), ], ), ], missed_receive_relief_consume_actions = [ money . WithdrawByUserId ( namespace_name = 'money-0001' , user_id = '# {userId} ' , slot = 0 , count = 200 , paid_only = False ), ] ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template BonusModel 로그인 보너스 모델 로그인 보너스 모델에는 로그인 보너스의 배포 스케줄을 설정합니다. 배포 스케줄에는 《스케줄 모드》와 《스트리밍 모드》가 있습니다. 스케줄 모드에서는 GS2-Schedule의 이벤트 지정이 필수이며, 해당 이벤트의 시작일로부터 경과한 일수에 따라 보너스를 배포합니다. 도중에 놓친 날짜가 발생한 경우, 그 날의 보너스는 배포되지 않습니다. 스트리밍 모드에서는 매일 보너스에 설정된 보상을 처음부터 순서대로 배포합니다. 스트리밍 모드에서는 반복 설정이 가능합니다. 이 경우 스트림의 끝에 도달하면 다시 처음부터 배포를 시작합니다. 스케줄 모드·스트리밍 모드 모두 미수령 구제 기능이 있습니다. 일정한 비용을 지불함으로써 놓친 보너스를 수령할 수 있습니다. 단, GS2-Schedule의 이벤트가 연결되어 있는 경우, 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없습니다. 미수령 구제 기능은 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 스케줄 모드·스트리밍 모드 모두, 설정 가능한 보너스의 최대 일수는 100일입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 bonusModelId string ※ ~ 1024자 로그인 보너스 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “schedule”,   “streaming” }  모드 로그인 보너스의 배포 스케줄 종류를 지정합니다. “schedule” 모드에서는 GS2-Schedule의 이벤트 시작일로부터 경과한 일수를 기준으로 보상이 배포됩니다. “streaming” 모드에서는 달력 날짜와 관계없이 매일 처음부터 순서대로 보상이 배포됩니다. 정의 설명 schedule 스케줄 모드 streaming 스트리밍 모드 periodEventId string ~ 1024자 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 로그인 보너스를 활성화할 기간을 나타내는 GS2-Schedule의 이벤트 GRN입니다. 스케줄 모드에서는 필수이며, 보상 배포의 경과 일수를 계산하는 기준이 되는 시작일을 결정합니다. 스트리밍 모드에서는 생략 가능하지만, 지정한 경우 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없게 됩니다. resetHour int {periodEventId} == \"” ※ 0 ~ 23 리셋 시간(UTC) 수령 플래그가 리셋되는 시각(0~23, UTC)입니다. 로그인 보너스에서 날짜가 바뀌는 시점을 결정합니다. periodEventId가 지정되지 않은 경우에만 필요합니다. 이벤트가 설정되어 있는 경우, 리셋 시점은 이벤트의 스케줄을 따릅니다. ※ periodEventId이(가) \"” 이면 필수 repeat 문자열 열거형 enum {   “enabled”,   “disabled” } {mode} == “streaming” ※ 반복 모든 보상을 배포한 후, 처음부터 다시 배포할지 여부입니다. 스트리밍 모드에서만 유효합니다. 활성화하면 마지막 보상을 배포한 후 첫 번째 보상으로 돌아가 반복됩니다. 주의: 반복이 활성화된 경우, 미수령 구제 기능은 사용할 수 없습니다. 정의 설명 enabled 활성화 disabled 비활성화 ※ mode이(가) “streaming” 이면 필수 rewards List 0 ~ 100 items 보상 목록 날짜별 보상의 순서가 지정된 목록입니다. 각 항목은 하루치 로그인 보너스에 대응하며, 인덱스 0부터 순서대로 배포됩니다. 스케줄 모드에서는 인덱스가 이벤트 시작일로부터 경과한 일수에 대응합니다. 스트리밍 모드에서는 인덱스가 로그인 일수에 대응합니다. 최대 100개 항목까지 설정할 수 있습니다. missedReceiveRelief 문자열 열거형 enum {   “enabled”,   “disabled” } “disabled” 미수령 구제 기능 놓친 보너스의 구제 기능을 활성화할지 여부입니다. 활성화하면 사용자는 지정된 비용(소비 액션)을 지불함으로써 받지 못한 보너스를 소급하여 수령할 수 있습니다. 필요에 따라 구제를 허용하기 전에 조건을 확인하는 검증 액션도 설정할 수 있습니다. 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 기본값은 “disabled\"입니다. 정의 설명 enabled 활성화 disabled 비활성화 missedReceiveReliefVerifyActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 검증 액션 목록 미수령 구제를 허용하기 전에 실행되는 검증 액션의 목록입니다. 구제 처리 전에 사용자의 자격 등 전제 조건을 확인합니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 missedReceiveReliefConsumeActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 소비 액션 목록 놓친 보너스를 구제하기 위해 사용자가 지불해야 하는 비용을 정의하는 소비 액션의 목록입니다. 예를 들어 게임 내 화폐나 아이템을 구제 비용으로 소비하도록 설정할 수 있습니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 Reward 보상 로그인 보너스의 하루치 보상 설정을 나타냅니다. 각 Reward에는 사용자가 수신할 항목(아이템, 화폐, 경험치 등)을 정의하는 입수 액션 목록이 포함됩니다. BonusModel의 rewards 배열은 하루당 하나의 Reward를 보유하며, 순서대로 배포됩니다. 보상 값은 버프 시스템(BonusModelBuff)을 통해 실행 시점에 변경할 수 있으며, 입수 액션에 배율을 적용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List  1 ~ 10 items 입수 액션 목록 이 날짜의 보상으로 사용자에게 부여되는 리소스를 정의하는 입수 액션 목록. 각 액션은 입수 액션(아이템 추가, 화폐 부여 등)과 그 요청 파라미터를 지정합니다. 보상당 최소 1개, 최대 10개의 액션을 설정할 수 있습니다. ConsumeAction 소비 액션 소비 액션의 구조를 통해 사용자로부터 리소스를 소비하는 액션을 정의합니다. 미수령 보너스 구제에서 사용자가 지불해야 하는 비용(화폐 차감, 아이템 소비 등)을 지정하는 데 사용됩니다. action 필드는 소비 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 작업을 실행하기 전에 조건을 검증하는 액션을 정의합니다. 미수령 보너스 구제에서 구제를 허용하기 전에 전제 조건(사용자 자격, 리소스 이용 가능 여부 등)을 확인하는 데 사용됩니다. action 필드는 검증 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 획득 액션 획득 액션의 구조를 통해 사용자에게 리소스를 부여하는 액션을 정의합니다. 보상 내에서 사용되며, 사용자가 받는 것(인벤토리에 아이템 추가, 화폐 부여, 경험치 부여 등)을 지정합니다. action 필드는 획득 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-LoginReward Deploy/CDK 레퍼런스","url":"/ko/api_reference/login_reward/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 추첨 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. 추첨에서는 입수 액션을 통해 사용자에게 경품을 지급하는 트랜잭션이 발행됩니다. lotteryTriggerScriptId string ~ 1024자 추첨을 실행했을 때 호출되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - lottery logSetting LogSetting 로그 출력 설정 추첨 조작의 API 요청·응답 로그를 출력하기 위한 GS2-Log 네임스페이스를 지정합니다. 디버그 및 분석을 위해 추첨 결과, 경품 배포, 박스 가챠 상태 추적에 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Lottery::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 LotteryTriggerScriptId : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/lottery\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () lottery . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , lottery . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Lottery\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . lottery . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . lottery . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Lottery . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Lottery . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import lottery from \"@/gs2cdk/lottery\" ; class SampleStack extends core . Stack { public constructor () { super (); new lottery . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , lottery class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () lottery . Namespace ( stack = self , name = 'namespace-0001' , options = lottery . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 타입 활성화 조건 필수 기본값 값 제한 설명 LogSetting 타입 활성화 조건 필수 기본값 값 제한 설명 CurrentLotteryMaster Note JSON 파일 형식에 대해서는 GS2-Lottery 마스터 데이터 레퍼런스 를 참조해 주세요. Request 타입 활성화 조건 필수 기본값 값 제한 설명 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Lottery::CurrentLotteryMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-02-21\" , \"lotteryModels\": [ { \"name\": \"gacha\" , \"mode\": \"normal\" , \"method\": \"prize_table\" , \"metadata\": \"GACHA\" , \"prizeTableName\": \"gacha\" } , { \"name\": \"gacha_ssr\" , \"mode\": \"normal\" , \"method\": \"prize_table\" , \"metadata\": \"SSR\" , \"prizeTableName\": \"gacha-ssr\" } , { \"name\": \"gacha_sr\" , \"mode\": \"normal\" , \"method\": \"prize_table\" , \"metadata\": \"SR\" , \"prizeTableName\": \"gacha-sr\" } , { \"name\": \"gacha_r\" , \"mode\": \"normal\" , \"method\": \"prize_table\" , \"metadata\": \"R\" , \"prizeTableName\": \"gacha-r\" } , { \"name\": \"box\" , \"mode\": \"box\" , \"method\": \"prize_table\" , \"metadata\": \"BOX\" , \"prizeTableName\": \"box\" } ], \"prizeTables\": [ { \"name\": \"gacha\" , \"prizes\": [ { \"prizeId\": \"prize-1\" , \"type\": \"prize_table\" , \"prizeTableName\": \"gacha-ssr\" , \"weight\": 5 } , { \"prizeId\": \"prize-2\" , \"type\": \"prize_table\" , \"prizeTableName\": \"gacha-sr\" , \"weight\": 15 } , { \"prizeId\": \"prize-3\" , \"type\": \"prize_table\" , \"prizeTableName\": \"gacha-r\" , \"weight\": 80 } ], \"metadata\": \"SSR\" } , { \"name\": \"gacha-ssr\" , \"prizes\": [ { \"prizeId\": \"prize-4\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 1 } , { \"prizeId\": \"prize-5\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 2 } , { \"prizeId\": \"prize-6\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 3 } ], \"metadata\": \"SSR\" } , { \"name\": \"gacha-sr\" , \"prizes\": [ { \"prizeId\": \"prize-7\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 10 } , { \"prizeId\": \"prize-8\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 20 } , { \"prizeId\": \"prize-9\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 30 } ], \"metadata\": \"SR\" } , { \"name\": \"gacha-r\" , \"prizes\": [ { \"prizeId\": \"prize-10\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 100 } , { \"prizeId\": \"prize-11\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 200 } , { \"prizeId\": \"prize-12\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 300 } ], \"metadata\": \"R\" } , { \"name\": \"box\" , \"prizes\": [ { \"prizeId\": \"prize-13\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 30 } , { \"prizeId\": \"prize-14\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 20 } , { \"prizeId\": \"prize-15\" , \"type\": \"action\" , \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ], \"weight\": 10 } ], \"metadata\": \"BOX\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/lottery\" \"github.com/gs2io/gs2-golang-cdk/money\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () lottery . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , lottery . NamespaceOptions {}, ). MasterData ( [] lottery . LotteryModel { lottery . NewLotteryModel ( \"gacha\" , lottery . LotteryModelModeNormal , lottery . LotteryModelMethodPrizeTable , lottery . LotteryModelOptions { Metadata : pointy . String ( \"GACHA\" ), PrizeTableName : pointy . String ( \"gacha\" ), }, ), lottery . NewLotteryModel ( \"gacha_ssr\" , lottery . LotteryModelModeNormal , lottery . LotteryModelMethodPrizeTable , lottery . LotteryModelOptions { Metadata : pointy . String ( \"SSR\" ), PrizeTableName : pointy . String ( \"gacha-ssr\" ), }, ), lottery . NewLotteryModel ( \"gacha_sr\" , lottery . LotteryModelModeNormal , lottery . LotteryModelMethodPrizeTable , lottery . LotteryModelOptions { Metadata : pointy . String ( \"SR\" ), PrizeTableName : pointy . String ( \"gacha-sr\" ), }, ), lottery . NewLotteryModel ( \"gacha_r\" , lottery . LotteryModelModeNormal , lottery . LotteryModelMethodPrizeTable , lottery . LotteryModelOptions { Metadata : pointy . String ( \"R\" ), PrizeTableName : pointy . String ( \"gacha-r\" ), }, ), lottery . NewLotteryModel ( \"box\" , lottery . LotteryModelModeBox , lottery . LotteryModelMethodPrizeTable , lottery . LotteryModelOptions { Metadata : pointy . String ( \"BOX\" ), PrizeTableName : pointy . String ( \"box\" ), }, ), }, [] lottery . PrizeTable { lottery . NewPrizeTable ( \"gacha\" , [] lottery . Prize { lottery . NewPrize ( \"prize-1\" , lottery . PrizeTypePrizeTable , 5 , lottery . PrizeOptions { PrizeTableName : pointy . String ( \"gacha-ssr\" ), }, ), lottery . NewPrize ( \"prize-2\" , lottery . PrizeTypePrizeTable , 15 , lottery . PrizeOptions { PrizeTableName : pointy . String ( \"gacha-sr\" ), }, ), lottery . NewPrize ( \"prize-3\" , lottery . PrizeTypePrizeTable , 80 , lottery . PrizeOptions { PrizeTableName : pointy . String ( \"gacha-r\" ), }, ), }, lottery . PrizeTableOptions { Metadata : pointy . String ( \"SSR\" ), }, ), lottery . NewPrizeTable ( \"gacha-ssr\" , [] lottery . Prize { lottery . NewPrize ( \"prize-4\" , lottery . PrizeTypeAction , 1 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), lottery . NewPrize ( \"prize-5\" , lottery . PrizeTypeAction , 2 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), lottery . NewPrize ( \"prize-6\" , lottery . PrizeTypeAction , 3 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), }, lottery . PrizeTableOptions { Metadata : pointy . String ( \"SSR\" ), }, ), lottery . NewPrizeTable ( \"gacha-sr\" , [] lottery . Prize { lottery . NewPrize ( \"prize-7\" , lottery . PrizeTypeAction , 10 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), lottery . NewPrize ( \"prize-8\" , lottery . PrizeTypeAction , 20 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), lottery . NewPrize ( \"prize-9\" , lottery . PrizeTypeAction , 30 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), }, lottery . PrizeTableOptions { Metadata : pointy . String ( \"SR\" ), }, ), lottery . NewPrizeTable ( \"gacha-r\" , [] lottery . Prize { lottery . NewPrize ( \"prize-10\" , lottery . PrizeTypeAction , 100 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), lottery . NewPrize ( \"prize-11\" , lottery . PrizeTypeAction , 200 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), lottery . NewPrize ( \"prize-12\" , lottery . PrizeTypeAction , 300 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), }, lottery . PrizeTableOptions { Metadata : pointy . String ( \"R\" ), }, ), lottery . NewPrizeTable ( \"box\" , [] lottery . Prize { lottery . NewPrize ( \"prize-13\" , lottery . PrizeTypeAction , 30 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), lottery . NewPrize ( \"prize-14\" , lottery . PrizeTypeAction , 20 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), lottery . NewPrize ( \"prize-15\" , lottery . PrizeTypeAction , 10 , lottery . PrizeOptions { AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, }, ), }, lottery . PrizeTableOptions { Metadata : pointy . String ( \"BOX\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Lottery\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Lottery\\Model\\LotteryModel ( name : \"gacha\" , mode : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMode :: NORMAL , method : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMethod :: PRIZE_TABLE , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\LotteryModelOptions ( metadata : \"GACHA\" , prizeTableName : \"gacha\" ) ), new \\Gs2Cdk\\Lottery\\Model\\LotteryModel ( name : \"gacha_ssr\" , mode : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMode :: NORMAL , method : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMethod :: PRIZE_TABLE , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\LotteryModelOptions ( metadata : \"SSR\" , prizeTableName : \"gacha-ssr\" ) ), new \\Gs2Cdk\\Lottery\\Model\\LotteryModel ( name : \"gacha_sr\" , mode : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMode :: NORMAL , method : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMethod :: PRIZE_TABLE , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\LotteryModelOptions ( metadata : \"SR\" , prizeTableName : \"gacha-sr\" ) ), new \\Gs2Cdk\\Lottery\\Model\\LotteryModel ( name : \"gacha_r\" , mode : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMode :: NORMAL , method : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMethod :: PRIZE_TABLE , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\LotteryModelOptions ( metadata : \"R\" , prizeTableName : \"gacha-r\" ) ), new \\Gs2Cdk\\Lottery\\Model\\LotteryModel ( name : \"box\" , mode : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMode :: BOX , method : \\Gs2Cdk\\Lottery\\Model\\Enums\\LotteryModelMethod :: PRIZE_TABLE , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\LotteryModelOptions ( metadata : \"BOX\" , prizeTableName : \"box\" ) ) ], [ new \\Gs2Cdk\\Lottery\\Model\\PrizeTable ( name : \"gacha\" , prizes : [ new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-1\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: PRIZE_TABLE , weight : 5 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( prizeTableName : \"gacha-ssr\" , ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-2\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: PRIZE_TABLE , weight : 15 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( prizeTableName : \"gacha-sr\" , ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-3\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: PRIZE_TABLE , weight : 80 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( prizeTableName : \"gacha-r\" , ), ), ], options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeTableOptions ( metadata : \"SSR\" ) ), new \\Gs2Cdk\\Lottery\\Model\\PrizeTable ( name : \"gacha-ssr\" , prizes : [ new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-4\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 1 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-5\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 2 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-6\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 3 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), ], options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeTableOptions ( metadata : \"SSR\" ) ), new \\Gs2Cdk\\Lottery\\Model\\PrizeTable ( name : \"gacha-sr\" , prizes : [ new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-7\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 10 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-8\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 20 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-9\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 30 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), ], options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeTableOptions ( metadata : \"SR\" ) ), new \\Gs2Cdk\\Lottery\\Model\\PrizeTable ( name : \"gacha-r\" , prizes : [ new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-10\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 100 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-11\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 200 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-12\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 300 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), ], options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeTableOptions ( metadata : \"R\" ) ), new \\Gs2Cdk\\Lottery\\Model\\PrizeTable ( name : \"box\" , prizes : [ new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-13\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 30 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-14\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 20 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Lottery\\Model\\Prize ( prizeId : \"prize-15\" , type : \\Gs2Cdk\\Lottery\\Model\\Enums\\PrizeType :: ACTION , weight : 10 , options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeOptions ( acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], ), ), ], options : new \\Gs2Cdk\\Lottery\\Model\\Options\\PrizeTableOptions ( metadata : \"BOX\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . lottery . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . lottery . model . LotteryModel ( \"gacha\" , io . gs2 . cdk . lottery . model . enums . LotteryModelMode . NORMAL , io . gs2 . cdk . lottery . model . enums . LotteryModelMethod . PRIZE_TABLE , new io . gs2 . cdk . lottery . model . options . LotteryModelOptions () . withMetadata ( \"GACHA\" ) . withPrizeTableName ( \"gacha\" ) ), new io . gs2 . cdk . lottery . model . LotteryModel ( \"gacha_ssr\" , io . gs2 . cdk . lottery . model . enums . LotteryModelMode . NORMAL , io . gs2 . cdk . lottery . model . enums . LotteryModelMethod . PRIZE_TABLE , new io . gs2 . cdk . lottery . model . options . LotteryModelOptions () . withMetadata ( \"SSR\" ) . withPrizeTableName ( \"gacha-ssr\" ) ), new io . gs2 . cdk . lottery . model . LotteryModel ( \"gacha_sr\" , io . gs2 . cdk . lottery . model . enums . LotteryModelMode . NORMAL , io . gs2 . cdk . lottery . model . enums . LotteryModelMethod . PRIZE_TABLE , new io . gs2 . cdk . lottery . model . options . LotteryModelOptions () . withMetadata ( \"SR\" ) . withPrizeTableName ( \"gacha-sr\" ) ), new io . gs2 . cdk . lottery . model . LotteryModel ( \"gacha_r\" , io . gs2 . cdk . lottery . model . enums . LotteryModelMode . NORMAL , io . gs2 . cdk . lottery . model . enums . LotteryModelMethod . PRIZE_TABLE , new io . gs2 . cdk . lottery . model . options . LotteryModelOptions () . withMetadata ( \"R\" ) . withPrizeTableName ( \"gacha-r\" ) ), new io . gs2 . cdk . lottery . model . LotteryModel ( \"box\" , io . gs2 . cdk . lottery . model . enums . LotteryModelMode . BOX , io . gs2 . cdk . lottery . model . enums . LotteryModelMethod . PRIZE_TABLE , new io . gs2 . cdk . lottery . model . options . LotteryModelOptions () . withMetadata ( \"BOX\" ) . withPrizeTableName ( \"box\" ) ) ), Arrays . asList ( new io . gs2 . cdk . lottery . model . PrizeTable ( \"gacha\" , Arrays . asList ( new io . gs2 . cdk . lottery . model . Prize ( \"prize-1\" , io . gs2 . cdk . lottery . model . enums . PrizeType . PRIZE_TABLE , 5 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withPrizeTableName ( \"gacha-ssr\" ) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-2\" , io . gs2 . cdk . lottery . model . enums . PrizeType . PRIZE_TABLE , 15 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withPrizeTableName ( \"gacha-sr\" ) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-3\" , io . gs2 . cdk . lottery . model . enums . PrizeType . PRIZE_TABLE , 80 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withPrizeTableName ( \"gacha-r\" ) ) ), new io . gs2 . cdk . lottery . model . options . PrizeTableOptions () . withMetadata ( \"SSR\" ) ), new io . gs2 . cdk . lottery . model . PrizeTable ( \"gacha-ssr\" , Arrays . asList ( new io . gs2 . cdk . lottery . model . Prize ( \"prize-4\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 1 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-5\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 2 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-6\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 3 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ) ), new io . gs2 . cdk . lottery . model . options . PrizeTableOptions () . withMetadata ( \"SSR\" ) ), new io . gs2 . cdk . lottery . model . PrizeTable ( \"gacha-sr\" , Arrays . asList ( new io . gs2 . cdk . lottery . model . Prize ( \"prize-7\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 10 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-8\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 20 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-9\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 30 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ) ), new io . gs2 . cdk . lottery . model . options . PrizeTableOptions () . withMetadata ( \"SR\" ) ), new io . gs2 . cdk . lottery . model . PrizeTable ( \"gacha-r\" , Arrays . asList ( new io . gs2 . cdk . lottery . model . Prize ( \"prize-10\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 100 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-11\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 200 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-12\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 300 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ) ), new io . gs2 . cdk . lottery . model . options . PrizeTableOptions () . withMetadata ( \"R\" ) ), new io . gs2 . cdk . lottery . model . PrizeTable ( \"box\" , Arrays . asList ( new io . gs2 . cdk . lottery . model . Prize ( \"prize-13\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 30 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-14\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 20 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ), new io . gs2 . cdk . lottery . model . Prize ( \"prize-15\" , io . gs2 . cdk . lottery . model . enums . PrizeType . ACTION , 10 , new io . gs2 . cdk . lottery . model . options . PrizeOptions () . withAcquireActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) )) ) ), new io . gs2 . cdk . lottery . model . options . PrizeTableOptions () . withMetadata ( \"BOX\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Lottery . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Lottery . Model . LotteryModel [] { new Gs2Cdk . Gs2Lottery . Model . LotteryModel ( name : \"gacha\" , mode : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMode . Normal , method : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMethod . PrizeTable , options : new Gs2Cdk . Gs2Lottery . Model . Options . LotteryModelOptions { metadata = \"GACHA\" , prizeTableName = \"gacha\" } ), new Gs2Cdk . Gs2Lottery . Model . LotteryModel ( name : \"gacha_ssr\" , mode : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMode . Normal , method : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMethod . PrizeTable , options : new Gs2Cdk . Gs2Lottery . Model . Options . LotteryModelOptions { metadata = \"SSR\" , prizeTableName = \"gacha-ssr\" } ), new Gs2Cdk . Gs2Lottery . Model . LotteryModel ( name : \"gacha_sr\" , mode : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMode . Normal , method : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMethod . PrizeTable , options : new Gs2Cdk . Gs2Lottery . Model . Options . LotteryModelOptions { metadata = \"SR\" , prizeTableName = \"gacha-sr\" } ), new Gs2Cdk . Gs2Lottery . Model . LotteryModel ( name : \"gacha_r\" , mode : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMode . Normal , method : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMethod . PrizeTable , options : new Gs2Cdk . Gs2Lottery . Model . Options . LotteryModelOptions { metadata = \"R\" , prizeTableName = \"gacha-r\" } ), new Gs2Cdk . Gs2Lottery . Model . LotteryModel ( name : \"box\" , mode : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMode . Box , method : Gs2Cdk . Gs2Lottery . Model . Enums . LotteryModelMethod . PrizeTable , options : new Gs2Cdk . Gs2Lottery . Model . Options . LotteryModelOptions { metadata = \"BOX\" , prizeTableName = \"box\" } ) }, new Gs2Cdk . Gs2Lottery . Model . PrizeTable [] { new Gs2Cdk . Gs2Lottery . Model . PrizeTable ( name : \"gacha\" , prizes : new Gs2Cdk . Gs2Lottery . Model . Prize [] { new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-1\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . PrizeTable , weight : 5 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { prizeTableName = \"gacha-ssr\" } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-2\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . PrizeTable , weight : 15 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { prizeTableName = \"gacha-sr\" } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-3\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . PrizeTable , weight : 80 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { prizeTableName = \"gacha-r\" } ) }, options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeTableOptions { metadata = \"SSR\" } ), new Gs2Cdk . Gs2Lottery . Model . PrizeTable ( name : \"gacha-ssr\" , prizes : new Gs2Cdk . Gs2Lottery . Model . Prize [] { new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-4\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 1 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-5\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 2 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-6\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 3 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ) }, options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeTableOptions { metadata = \"SSR\" } ), new Gs2Cdk . Gs2Lottery . Model . PrizeTable ( name : \"gacha-sr\" , prizes : new Gs2Cdk . Gs2Lottery . Model . Prize [] { new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-7\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 10 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-8\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 20 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-9\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 30 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ) }, options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeTableOptions { metadata = \"SR\" } ), new Gs2Cdk . Gs2Lottery . Model . PrizeTable ( name : \"gacha-r\" , prizes : new Gs2Cdk . Gs2Lottery . Model . Prize [] { new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-10\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 100 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-11\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 200 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-12\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 300 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ) }, options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeTableOptions { metadata = \"R\" } ), new Gs2Cdk . Gs2Lottery . Model . PrizeTable ( name : \"box\" , prizes : new Gs2Cdk . Gs2Lottery . Model . Prize [] { new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-13\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 30 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-14\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 20 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Lottery . Model . Prize ( prizeId : \"prize-15\" , type : Gs2Cdk . Gs2Lottery . Model . Enums . PrizeType . Action , weight : 10 , options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeOptions { acquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) } } ) }, options : new Gs2Cdk . Gs2Lottery . Model . Options . PrizeTableOptions { metadata = \"BOX\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import lottery from \"@/gs2cdk/lottery\" ; import money from \"@/gs2cdk/money\" ; class SampleStack extends core . Stack { public constructor () { super (); new lottery . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new lottery . model . LotteryModel ( \"gacha\" , lottery . model . LotteryModelMode . NORMAL , lottery . model . LotteryModelMethod . PRIZE_TABLE , { metadata : \"GACHA\" , prizeTableName : \"gacha\" } ), new lottery . model . LotteryModel ( \"gacha_ssr\" , lottery . model . LotteryModelMode . NORMAL , lottery . model . LotteryModelMethod . PRIZE_TABLE , { metadata : \"SSR\" , prizeTableName : \"gacha-ssr\" } ), new lottery . model . LotteryModel ( \"gacha_sr\" , lottery . model . LotteryModelMode . NORMAL , lottery . model . LotteryModelMethod . PRIZE_TABLE , { metadata : \"SR\" , prizeTableName : \"gacha-sr\" } ), new lottery . model . LotteryModel ( \"gacha_r\" , lottery . model . LotteryModelMode . NORMAL , lottery . model . LotteryModelMethod . PRIZE_TABLE , { metadata : \"R\" , prizeTableName : \"gacha-r\" } ), new lottery . model . LotteryModel ( \"box\" , lottery . model . LotteryModelMode . BOX , lottery . model . LotteryModelMethod . PRIZE_TABLE , { metadata : \"BOX\" , prizeTableName : \"box\" } ) ], [ new lottery . model . PrizeTable ( \"gacha\" , [ new lottery . model . Prize ( \"prize-1\" , lottery . model . PrizeType . PRIZE_TABLE , 5 , { prizeTableName : \"gacha-ssr\" } ), new lottery . model . Prize ( \"prize-2\" , lottery . model . PrizeType . PRIZE_TABLE , 15 , { prizeTableName : \"gacha-sr\" } ), new lottery . model . Prize ( \"prize-3\" , lottery . model . PrizeType . PRIZE_TABLE , 80 , { prizeTableName : \"gacha-r\" } ), ], { metadata : \"SSR\" } ), new lottery . model . PrizeTable ( \"gacha-ssr\" , [ new lottery . model . Prize ( \"prize-4\" , lottery . model . PrizeType . ACTION , 1 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), new lottery . model . Prize ( \"prize-5\" , lottery . model . PrizeType . ACTION , 2 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), new lottery . model . Prize ( \"prize-6\" , lottery . model . PrizeType . ACTION , 3 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), ], { metadata : \"SSR\" } ), new lottery . model . PrizeTable ( \"gacha-sr\" , [ new lottery . model . Prize ( \"prize-7\" , lottery . model . PrizeType . ACTION , 10 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), new lottery . model . Prize ( \"prize-8\" , lottery . model . PrizeType . ACTION , 20 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), new lottery . model . Prize ( \"prize-9\" , lottery . model . PrizeType . ACTION , 30 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), ], { metadata : \"SR\" } ), new lottery . model . PrizeTable ( \"gacha-r\" , [ new lottery . model . Prize ( \"prize-10\" , lottery . model . PrizeType . ACTION , 100 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), new lottery . model . Prize ( \"prize-11\" , lottery . model . PrizeType . ACTION , 200 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), new lottery . model . Prize ( \"prize-12\" , lottery . model . PrizeType . ACTION , 300 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), ], { metadata : \"R\" } ), new lottery . model . PrizeTable ( \"box\" , [ new lottery . model . Prize ( \"prize-13\" , lottery . model . PrizeType . ACTION , 30 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), new lottery . model . Prize ( \"prize-14\" , lottery . model . PrizeType . ACTION , 20 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), new lottery . model . Prize ( \"prize-15\" , lottery . model . PrizeType . ACTION , 10 , { acquireActions : [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ] } ), ], { metadata : \"BOX\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , lottery , money class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () lottery . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( lottery_models = [ lottery . LotteryModel ( name = 'gacha' , mode = lottery . LotteryModelMode . NORMAL , method = lottery . LotteryModelMethod . PRIZE_TABLE , options = lottery . LotteryModelOptions ( metadata = 'GACHA' , prize_table_name = 'gacha' ), ), lottery . LotteryModel ( name = 'gacha_ssr' , mode = lottery . LotteryModelMode . NORMAL , method = lottery . LotteryModelMethod . PRIZE_TABLE , options = lottery . LotteryModelOptions ( metadata = 'SSR' , prize_table_name = 'gacha-ssr' ), ), lottery . LotteryModel ( name = 'gacha_sr' , mode = lottery . LotteryModelMode . NORMAL , method = lottery . LotteryModelMethod . PRIZE_TABLE , options = lottery . LotteryModelOptions ( metadata = 'SR' , prize_table_name = 'gacha-sr' ), ), lottery . LotteryModel ( name = 'gacha_r' , mode = lottery . LotteryModelMode . NORMAL , method = lottery . LotteryModelMethod . PRIZE_TABLE , options = lottery . LotteryModelOptions ( metadata = 'R' , prize_table_name = 'gacha-r' ), ), lottery . LotteryModel ( name = 'box' , mode = lottery . LotteryModelMode . BOX , method = lottery . LotteryModelMethod . PRIZE_TABLE , options = lottery . LotteryModelOptions ( metadata = 'BOX' , prize_table_name = 'box' ), ), ], prize_tables = [ lottery . PrizeTable ( name = 'gacha' , prizes = [ lottery . Prize ( prize_id = 'prize-1' , type = lottery . PrizeType . PRIZE_TABLE , weight = 5 , options = lottery . PrizeOptions ( prize_table_name = 'gacha-ssr' , ), ), lottery . Prize ( prize_id = 'prize-2' , type = lottery . PrizeType . PRIZE_TABLE , weight = 15 , options = lottery . PrizeOptions ( prize_table_name = 'gacha-sr' , ), ), lottery . Prize ( prize_id = 'prize-3' , type = lottery . PrizeType . PRIZE_TABLE , weight = 80 , options = lottery . PrizeOptions ( prize_table_name = 'gacha-r' , ), ), ], options = lottery . PrizeTableOptions ( metadata = 'SSR' ), ), lottery . PrizeTable ( name = 'gacha-ssr' , prizes = [ lottery . Prize ( prize_id = 'prize-4' , type = lottery . PrizeType . ACTION , weight = 1 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), lottery . Prize ( prize_id = 'prize-5' , type = lottery . PrizeType . ACTION , weight = 2 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), lottery . Prize ( prize_id = 'prize-6' , type = lottery . PrizeType . ACTION , weight = 3 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), ], options = lottery . PrizeTableOptions ( metadata = 'SSR' ), ), lottery . PrizeTable ( name = 'gacha-sr' , prizes = [ lottery . Prize ( prize_id = 'prize-7' , type = lottery . PrizeType . ACTION , weight = 10 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), lottery . Prize ( prize_id = 'prize-8' , type = lottery . PrizeType . ACTION , weight = 20 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), lottery . Prize ( prize_id = 'prize-9' , type = lottery . PrizeType . ACTION , weight = 30 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), ], options = lottery . PrizeTableOptions ( metadata = 'SR' ), ), lottery . PrizeTable ( name = 'gacha-r' , prizes = [ lottery . Prize ( prize_id = 'prize-10' , type = lottery . PrizeType . ACTION , weight = 100 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), lottery . Prize ( prize_id = 'prize-11' , type = lottery . PrizeType . ACTION , weight = 200 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), lottery . Prize ( prize_id = 'prize-12' , type = lottery . PrizeType . ACTION , weight = 300 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), ], options = lottery . PrizeTableOptions ( metadata = 'R' ), ), lottery . PrizeTable ( name = 'box' , prizes = [ lottery . Prize ( prize_id = 'prize-13' , type = lottery . PrizeType . ACTION , weight = 30 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), lottery . Prize ( prize_id = 'prize-14' , type = lottery . PrizeType . ACTION , weight = 20 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), lottery . Prize ( prize_id = 'prize-15' , type = lottery . PrizeType . ACTION , weight = 10 , options = lottery . PrizeOptions ( acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], ), ), ], options = lottery . PrizeTableOptions ( metadata = 'BOX' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template PrizeTable 타입 활성화 조건 필수 기본값 값 제한 설명 Prize 타입 활성화 조건 필수 기본값 값 제한 설명 LotteryModel 타입 활성화 조건 필수 기본값 값 제한 설명 AcquireAction 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. | enableAutoRun | bool | | | false | | 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 | | enableAtomicCommit | bool | {enableAutoRun} == true | | false | | 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 | | transactionUseDistributor | bool | {enableAtomicCommit} == true | | false | | 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 | | commitScriptResultInUseDistributor | bool | {transactionUseDistributor} == true | | false | | 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 | | acquireActionUseJobQueue | bool | {enableAtomicCommit} == true | | false | | 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 | | distributorNamespaceId | string | | | “grn:gs2:{region}:{ownerId}:distributor:default” | ~ 1024자 | 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN | | queueNamespaceId | string | | | “grn:gs2:{region}:{ownerId}:queue:default” | ~ 1024자 | 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN | 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. | loggingNamespaceId | string | |  | | ~ 1024자 | 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. | 현재 활성화된 추첨 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 추첨 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. 리소스 생성·갱신 요청 | namespaceName | string | |  | | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | mode | 문자열 열거형 enum {   “direct”,   “preUpload” } | | | “direct” | | 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 | | settings | string | {mode} == “direct” | ※ | | ~ 5242880 바이트 (5MB) | 마스터 데이터 ※ mode이(가) “direct” 이면 필수 | | uploadToken | string | {mode} == “preUpload” | ※ | | ~ 1024자 | 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 | | Item | CurrentLotteryMaster | 업데이트된 현재 활성화된 추첨 모델의 마스터 데이터 배출 확률 테이블 경품에는 입수 액션을 직접 지정하거나, 다른 배출 확률 테이블을 참조하도록 설정할 수도 있습니다. 배출 확률 테이블을 중첩시키면, 예를 들어 1단계에서 SSR / SR / R 등의 레어도를 추첨하고, 2단계에서 해당 레어도에 대응하는 구체적인 콘텐츠를 추첨하는 등의 설정이 가능합니다. 이 구조를 통해 게임 전체의 레어도별 배출 확률을 관리하고 조정하기가 더 쉬워집니다. | prizeTableId | string | | ※ | | ~ 1024자 | 배출 확률 테이블 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 | | name | string | |  | | ~ 128자 | 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. | | metadata | string | | | | ~ 128자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. | | prizes | List | |  | | 1 ~ 100 items | 경품 리스트 이 배출 확률 테이블 내의 경품 리스트입니다. 각 경품은 배출 가중치(확률), 배출 시 실행할 액션, 그리고 선택적으로 배출 횟수 제한을 정의합니다. 각 경품의 실제 배출 확률은 해당 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다. | 경품 배출 확률 테이블 내 단일 경품 엔트리입니다. 경품은 입수 액션(아이템이나 통화의 부여 등)을 직접 지정하거나, 다른 배출 확률 테이블을 참조하여 중첩된 추첨을 수행할 수 있습니다. 각 경품에는 배출 가중치가 있으며, 배출되는 상대적 확률을 결정합니다. | prizeId | string | |  | UUID | ~ 36자 | 경품 ID 배출 확률 테이블 내에서 이 경품을 고유하게 식별하는 ID입니다. 배출 횟수 제한 추적 및 페일오버 경품 지정 시 참조에 사용됩니다. | | type | 문자열 열거형 enum {   “action”,   “prize_table” } | |  | | | 경품 종류 이 경품이 직접 보상을 부여하는지, 다른 배출 확률 테이블에 위임하는지를 결정합니다. “action\"은 배출 시 실행할 입수 액션을 지정합니다. “prize_table\"은 다른 배출 확률 테이블을 참조하여 중첩된 추첨을 수행합니다(예: 1단계에서 희귀도를 결정하고, 2단계에서 구체적인 아이템을 결정). 정의 설명 action 경품의 입수 액션 prize_table 더욱 배출 확률 테이블을 지정하여 재추첨 | | acquireActions | List | {type} == “action” | | [] | 1 ~ 100 items | 입수 액션 리스트 이 경품이 배출될 때 실행할 입수 액션의 리스트입니다. 여러 액션을 지정하여 한 번에 여러 보상을 부여할 수 있습니다(예: 아이템과 통화를 동시에 부여). ※ type이(가) “action” 이면 활성화 | | drawnLimit | int | {type} == “action” | | | 1 ~ 1000000 | 최대 배출 수 이 경품이 전체 사용자를 통틀어 배출될 수 있는 최대 횟수입니다. 제한에 도달하면 대신 페일오버 경품(limitFailOverPrizeId)이 배출됩니다. 잭팟 아이템 등 수량 한정 경품 구현에 사용됩니다. ※ type이(가) “action” 이면 활성화 | | limitFailOverPrizeId | string | {type} == “action” and {drawnLimit} \u003e 0 | ※ | | ~ 32자 | 제한 시 페일오버 경품 ID 이 경품의 배출 횟수 제한(drawnLimit)에 도달했을 때 대신 배출할 경품의 ID입니다. 동일한 배출 확률 테이블 내의 다른 경품을 참조해야 합니다. ※ type이(가) “action\"이고 drawnLimit이(가) 0 보다 크면 필수 | | prizeTableName | string | {type} == “prize_table” | ※ | | ~ 128자 | 배출 확률 테이블의 이름 추첨을 위임할 배출 확률 테이블의 이름입니다. 경품 타입이 “prize_table\"인 경우 중첩된 추첨에 사용됩니다. ※ type이(가) “prize_table” 이면 필수 | | weight | int | |  | | 1 ~ 2147483646 | 배출 가중치 배출 확률 테이블 내에서 이 경품의 상대적 가중치입니다. 실제 배출 확률은 이 경품의 가중치를 테이블 내 모든 경품의 가중치 합계로 나누어 산출됩니다. 예를 들어 3개의 경품의 가중치가 각각 70, 20, 10이라면 각각의 배출 확률은 70%, 20%, 10%가 됩니다. | 추첨 모델 추첨 모델은 배출 방식과 배출 테이블의 참조 방법을 정의하는 엔티티입니다. 배출 방식은 2종류가 마련되어 있으며, 일반 추첨은 매번 일정한 확률로 추첨하는 방식이고, 박스 추첨은 상자 안에 미리 정해진 수량의 경품이 들어 있어 추첨할 때마다 상자에서 경품을 꺼내는 추첨 방식입니다. 추첨 처리를 수행할 때 배출 확률 테이블을 사용하는데, GS2-Script를 사용하면 여러 번 추첨을 실행할 때 배출 확률 테이블 일부만 다른 테이블로 교체할 수 있습니다. 이 구조를 이용하면 10연 가챠에서 1회만 다른 추첨 확률 테이블을 적용하는 것이 가능해집니다. | lotteryModelId | string | | ※ | | ~ 1024자 | 추첨 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 | | name | string | |  | | ~ 128자 | 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | | metadata | string | | | | ~ 2048자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. | | mode | 문자열 열거형 enum {   “normal”,   “box” } | |  | | | 추첨 모드 경품의 추첨 방식을 선택합니다. “normal\"은 매번 일정한 확률로 추첨을 진행합니다(경품은 반복해서 배출됩니다). “box\"는 가상의 상자에 미리 정해진 수량의 경품을 넣어두고, 추첨할 때마다 상자에서 경품을 꺼냅니다(모든 경품이 최종적으로 배출되는 것이 보장됩니다). 정의 설명 normal 일반 추첨 box 박스 추첨 | | method | 문자열 열거형 enum {   “prize_table”,   “script” } | |  | | | 추첨 방법 배출 확률 테이블의 참조 방법을 결정합니다. “prize_table\"은 정적으로 지정된 배출 확률 테이블을 사용합니다. “script\"는 GS2-Script를 사용하여 추첨 시점에 배출 확률 테이블을 동적으로 선택하며, 10연 가챠에서 1회만 다른 배출 확률 테이블을 적용하는 등의 시나리오를 실현할 수 있습니다. 정의 설명 prize_table 정적 배출 확률 테이블 script GS2-Script를 사용한 동적 배출 확률 테이블 | | prizeTableName | string | {method} == “prize_table” | ※ | | ~ 128자 | 배출 확률 테이블 이름 이 추첨 모델에서 사용할 배출 확률 테이블의 이름입니다. 추첨 방법이 “prize_table\"인 경우 필수입니다. ※ method이(가) “prize_table” 이면 필수 | | choicePrizeTableScriptId | string | {method} == “script” | ※ | | ~ 1024자 | 배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - choicePrizeTable ※ method이(가) “script” 이면 필수 | 입수 액션","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Lottery Deploy/CDK 레퍼런스","url":"/ko/api_reference/lottery/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 매치메이킹 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. enableRating bool false 레이팅 계산 기능 활성화 Glicko-2 기반의 레이팅 계산 기능을 활성화할지 여부입니다. 활성화하면, 플레이어는 Vote 시스템을 통해 대전 결과를 제출하고 레이팅이 자동으로 갱신됩니다. RatingModel 마스터 데이터의 설정이 필요합니다. 기본값은 false입니다. enableDisconnectDetection 문자열 열거형 enum {   “disable”,   “enable” } “disable” 연결 끊김 감지 매치메이킹 중인 플레이어가 대기 중임을 정기적으로 보고해야 하는지 여부를 제어합니다. 활성화하면, 플레이어가 설정된 타임아웃 시간 내에 킵얼라이브를 전송하지 않을 경우 자동으로 개더링에서 퇴장 처리됩니다. 이를 통해 “고스트” 플레이어가 매치메이킹 완료를 방해하는 것을 방지합니다. 기본값은 “disable” 입니다. 정의 설명 disable 비활성화 enable 활성화 disconnectDetectionTimeoutSeconds int {enableDisconnectDetection} == “enable” ※ 15 ~ 600 연결 끊김 감지 타임아웃(초) 킵얼라이브 보고 없이 플레이어를 연결 끊김으로 간주하여 개더링에서 퇴장시키기까지의 대기 시간(초). 연결 끊김 감지가 활성화된 경우에만 적용됩니다. 15에서 600초 범위로 지정합니다. ※ enableDisconnectDetection이(가) “enable” 이면 필수 createGatheringTriggerType 문자열 열거형 enum {   “none”,   “gs2_realtime”,   “gs2_script” } “none” 개더링 생성 시 트리거 타입 새로운 개더링이 생성되었을 때 실행할 액션의 종류. GS2-Realtime의 룸 생성을 트리거하여 실시간 통신을 시작하거나, GS2-Script를 실행하여 커스텀 로직을 실행할 수 있습니다. 기본값은 “none” 입니다. 정의 설명 none 없음 gs2_realtime GS2-Realtime의 룸 생성 gs2_script GS2-Script의 실행 createGatheringTriggerRealtimeNamespaceId string {createGatheringTriggerType} == “gs2_realtime” ※ ~ 1024자 개더링 생성 시 룸을 생성할 GS2-Realtime의 네임스페이스 ※ createGatheringTriggerType이(가) “gs2_realtime” 이면 필수 createGatheringTriggerScriptId string {createGatheringTriggerType} == “gs2_script” ※ ~ 1024자 개더링 생성 시 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - createGathering ※ createGatheringTriggerType이(가) “gs2_script” 이면 필수 completeMatchmakingTriggerType 문자열 열거형 enum {   “none”,   “gs2_realtime”,   “gs2_script” } “none” 매치메이킹 완료 시 트리거 타입 매치메이킹이 완료되었을 때(모든 역할 슬롯이 채워졌을 때) 실행할 액션의 종류. 매칭된 플레이어를 대상으로 GS2-Realtime의 룸 생성을 트리거하거나, GS2-Script를 실행하여 커스텀 사후 처리 로직을 실행할 수 있습니다. 기본값은 “none” 입니다. 정의 설명 none 없음 gs2_realtime GS2-Realtime의 룸 생성 gs2_script GS2-Script의 실행 completeMatchmakingTriggerRealtimeNamespaceId string {completeMatchmakingTriggerType} == “gs2_realtime” ※ ~ 1024자 매치메이킹 완료 시 룸을 생성할 GS2-Realtime의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ completeMatchmakingTriggerType이(가) “gs2_realtime” 이면 필수 completeMatchmakingTriggerScriptId string {completeMatchmakingTriggerType} == “gs2_script” ※ ~ 1024자 매치메이킹 완료 시 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - completeMatchmaking ※ completeMatchmakingTriggerType이(가) “gs2_script” 이면 필수 enableCollaborateSeasonRating 문자열 열거형 enum {   “enable”,   “disable” } “disable” 시즌 레이팅 연계 활성화 시즌 기반 레이팅 계산을 위해 GS2-SeasonRating과의 연계를 활성화할지 여부. 활성화하면, 매치메이킹 완료 시 지정한 GS2-SeasonRating의 네임스페이스에 레이팅 계산 세션이 자동으로 생성됩니다. 기본값은 “disable” 입니다. 정의 설명 enable 활성화 disable 비활성화 collaborateSeasonRatingNamespaceId string {enableCollaborateSeasonRating} == “enable” ※ ~ 1024자 시즌 레이팅 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 매치메이킹 완료 시 레이팅 계산 세션이 생성되는 GS2-SeasonRating의 네임스페이스 GRN. 시즌 레이팅 연계가 활성화된 경우에만 적용됩니다. ※ enableCollaborateSeasonRating이(가) “enable” 이면 필수 collaborateSeasonRatingTtl int {enableCollaborateSeasonRating} == “enable” 60 60 ~ 7200 시즌 레이팅 결과 TTL(초) 매치메이킹 완료 후, GS2-SeasonRating을 통한 대전 결과 전송을 받아들이는 최대 대기 시간(초). 이 기간 내에 결과가 전송되지 않으면, 레이팅 세션은 만료됩니다. 60에서 7200초 범위로 지정합니다. 기본값은 60입니다. ※ enableCollaborateSeasonRating이(가) “enable” 이면 필수 changeRatingScript ScriptSetting 레이팅 값이 변경되었을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - changeRating joinNotification NotificationSetting 참가 알림 새로운 플레이어가 개더링에 참가했을 때의 푸시 알림 설정. 기존 참가자에게 새로운 플레이어가 참가했음을 알려, 게임 클라이언트가 매치메이킹 UI를 업데이트할 수 있도록 합니다. leaveNotification NotificationSetting 이탈 알림 플레이어가 개더링에서 이탈했을 때의 푸시 알림 설정. 남은 참가자에게 플레이어가 이탈했음을 알려, 게임 클라이언트가 변경 사항을 반영할 수 있도록 합니다. completeNotification NotificationSetting 완료 알림 매치메이킹이 완료되었을 때(모든 역할 슬롯이 채워졌을 때)의 푸시 알림 설정. 모든 참가자에게 개더링이 가득 차 대전을 시작할 수 있음을 알립니다. changeRatingNotification NotificationSetting 레이팅 변동 알림 투표 처리 후 플레이어의 레이팅 값이 변동되었을 때의 푸시 알림 설정. 영향을 받은 플레이어에게 새로운 레이팅을 알려, 게임 클라이언트가 업데이트된 값을 표시할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 API 요청/응답 로그를 GS2-Log에 출력하기 위한 설정. 설정하면, 매치메이킹 조작(개더링 생성·참가·이탈, 투표, 레이팅 변동 등)이 모니터링 및 분석을 위해 로그로 출력됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Matchmaking::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null EnableRating : true EnableDisconnectDetection : null DisconnectDetectionTimeoutSeconds : null CreateGatheringTriggerType : none CreateGatheringTriggerRealtimeNamespaceId : null CreateGatheringTriggerScriptId : null CompleteMatchmakingTriggerType : none CompleteMatchmakingTriggerRealtimeNamespaceId : null CompleteMatchmakingTriggerScriptId : null EnableCollaborateSeasonRating : disable CollaborateSeasonRatingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001 CollaborateSeasonRatingTtl : 60 ChangeRatingScript : null JoinNotification : null LeaveNotification : null CompleteNotification : null ChangeRatingNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/matchmaking\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () matchmaking . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , matchmaking . NamespaceOptions { EnableRating : true , CreateGatheringTriggerType : matchmaking . NamespaceCreateGatheringTriggerTypeNone , CompleteMatchmakingTriggerType : matchmaking . NamespaceCompleteMatchmakingTriggerTypeNone , EnableCollaborateSeasonRating : matchmaking . NamespaceEnableCollaborateSeasonRatingDisable , CollaborateSeasonRatingNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ), CollaborateSeasonRatingTtl : pointy . Int32 ( 60 ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Matchmaking\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Matchmaking\\Model\\Options\\NamespaceOptions ( enableRating : true , createGatheringTriggerType : \\Gs2Cdk\\Matchmaking\\Model\\Enums\\NamespaceCreateGatheringTriggerType :: NONE , completeMatchmakingTriggerType : \\Gs2Cdk\\Matchmaking\\Model\\Enums\\NamespaceCompleteMatchmakingTriggerType :: NONE , enableCollaborateSeasonRating : \\Gs2Cdk\\Matchmaking\\Model\\Enums\\NamespaceEnableCollaborateSeasonRating :: DISABLE , collaborateSeasonRatingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" , collaborateSeasonRatingTtl : 60 , logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . matchmaking . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . matchmaking . model . options . NamespaceOptions () . withEnableRating ( true ) . withCreateGatheringTriggerType ( io . gs2 . cdk . matchmaking . model . enums . NamespaceCreateGatheringTriggerType . NONE ) . withCompleteMatchmakingTriggerType ( io . gs2 . cdk . matchmaking . model . enums . NamespaceCompleteMatchmakingTriggerType . NONE ) . withEnableCollaborateSeasonRating ( io . gs2 . cdk . matchmaking . model . enums . NamespaceEnableCollaborateSeasonRating . DISABLE ) . withCollaborateSeasonRatingNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" ) . withCollaborateSeasonRatingTtl ( 60 ) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Matchmaking . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Matchmaking . Model . Options . NamespaceOptions { enableRating = true , createGatheringTriggerType = Gs2Cdk . Gs2Matchmaking . Model . Enums . NamespaceCreateGatheringTriggerType . None , completeMatchmakingTriggerType = Gs2Cdk . Gs2Matchmaking . Model . Enums . NamespaceCompleteMatchmakingTriggerType . None , enableCollaborateSeasonRating = Gs2Cdk . Gs2Matchmaking . Model . Enums . NamespaceEnableCollaborateSeasonRating . Disable , collaborateSeasonRatingNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" , collaborateSeasonRatingTtl = 60 , logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import matchmaking from \"@/gs2cdk/matchmaking\" ; class SampleStack extends core . Stack { public constructor () { super (); new matchmaking . model . Namespace ( this , \"namespace-0001\" , { enableRating : true , createGatheringTriggerType : matchmaking.model.NamespaceCreateGatheringTriggerType.NONE , completeMatchmakingTriggerType : matchmaking.model.NamespaceCompleteMatchmakingTriggerType.NONE , enableCollaborateSeasonRating : matchmaking.model.NamespaceEnableCollaborateSeasonRating.DISABLE , collaborateSeasonRatingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001\" , collaborateSeasonRatingTtl : 60 , logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , matchmaking class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () matchmaking . Namespace ( stack = self , name = 'namespace-0001' , options = matchmaking . NamespaceOptions ( enable_rating = True , create_gathering_trigger_type = matchmaking . NamespaceCreateGatheringTriggerType . NONE , complete_matchmaking_trigger_type = matchmaking . NamespaceCompleteMatchmakingTriggerType . NONE , enable_collaborate_season_rating = matchmaking . NamespaceEnableCollaborateSeasonRating . DISABLE , collaborate_season_rating_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001' , collaborate_season_rating_ttl = 60 , log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentModelMaster 현재 활성화된 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Matchmaking 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentModelMaster 갱신된 현재 활성화된 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Matchmaking::CurrentModelMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2020-06-24\" , \"ratingModels\": [ { \"name\": \"rating-0001\" , \"initialValue\": 1500 , \"volatility\": 100 , \"metadata\": \"RATING_0001\" } , { \"name\": \"rating-0002\" , \"initialValue\": 1500 , \"volatility\": 150 , \"metadata\": \"RATING_0002\" } ], \"seasonModels\": [ { \"name\": \"season-0001\" , \"maximumParticipants\": 50 , \"challengePeriodEventId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" } , { \"name\": \"season-0002\" , \"maximumParticipants\": 100 , \"challengePeriodEventId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/matchmaking\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () matchmaking . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , matchmaking . NamespaceOptions {}, ). MasterData ( [] matchmaking . RatingModel { matchmaking . NewRatingModel ( \"rating-0001\" , 1500 , 100 , matchmaking . RatingModelOptions { Metadata : pointy . String ( \"RATING_0001\" ), }, ), matchmaking . NewRatingModel ( \"rating-0002\" , 1500 , 150 , matchmaking . RatingModelOptions { Metadata : pointy . String ( \"RATING_0002\" ), }, ), }, [] matchmaking . SeasonModel { matchmaking . NewSeasonModel ( \"season-0001\" , 50 , \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" , matchmaking . SeasonModelOptions { }, ), matchmaking . NewSeasonModel ( \"season-0002\" , 100 , \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" , matchmaking . SeasonModelOptions { }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Matchmaking\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Matchmaking\\Model\\RatingModel ( name : \"rating-0001\" , initialValue : 1500 , volatility : 100 , options : new \\Gs2Cdk\\Matchmaking\\Model\\Options\\RatingModelOptions ( metadata : \"RATING_0001\" ) ), new \\Gs2Cdk\\Matchmaking\\Model\\RatingModel ( name : \"rating-0002\" , initialValue : 1500 , volatility : 150 , options : new \\Gs2Cdk\\Matchmaking\\Model\\Options\\RatingModelOptions ( metadata : \"RATING_0002\" ) ) ], [ new \\Gs2Cdk\\Matchmaking\\Model\\SeasonModel ( name : \"season-0001\" , maximumParticipants : 50 , challengePeriodEventId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), new \\Gs2Cdk\\Matchmaking\\Model\\SeasonModel ( name : \"season-0002\" , maximumParticipants : 100 , challengePeriodEventId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . matchmaking . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . matchmaking . model . RatingModel ( \"rating-0001\" , 1500 , 100 , new io . gs2 . cdk . matchmaking . model . options . RatingModelOptions () . withMetadata ( \"RATING_0001\" ) ), new io . gs2 . cdk . matchmaking . model . RatingModel ( \"rating-0002\" , 1500 , 150 , new io . gs2 . cdk . matchmaking . model . options . RatingModelOptions () . withMetadata ( \"RATING_0002\" ) ) ), Arrays . asList ( new io . gs2 . cdk . matchmaking . model . SeasonModel ( \"season-0001\" , 50 , \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), new io . gs2 . cdk . matchmaking . model . SeasonModel ( \"season-0002\" , 100 , \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Matchmaking . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Matchmaking . Model . RatingModel [] { new Gs2Cdk . Gs2Matchmaking . Model . RatingModel ( name : \"rating-0001\" , initialValue : 1500 , volatility : 100 , options : new Gs2Cdk . Gs2Matchmaking . Model . Options . RatingModelOptions { metadata = \"RATING_0001\" } ), new Gs2Cdk . Gs2Matchmaking . Model . RatingModel ( name : \"rating-0002\" , initialValue : 1500 , volatility : 150 , options : new Gs2Cdk . Gs2Matchmaking . Model . Options . RatingModelOptions { metadata = \"RATING_0002\" } ) }, new Gs2Cdk . Gs2Matchmaking . Model . SeasonModel [] { new Gs2Cdk . Gs2Matchmaking . Model . SeasonModel ( name : \"season-0001\" , maximumParticipants : 50 , challengePeriodEventId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), new Gs2Cdk . Gs2Matchmaking . Model . SeasonModel ( name : \"season-0002\" , maximumParticipants : 100 , challengePeriodEventId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import matchmaking from \"@/gs2cdk/matchmaking\" ; class SampleStack extends core . Stack { public constructor () { super (); new matchmaking . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new matchmaking . model . RatingModel ( \"rating-0001\" , 1500 , 100 , { metadata : \"RATING_0001\" } ), new matchmaking . model . RatingModel ( \"rating-0002\" , 1500 , 150 , { metadata : \"RATING_0002\" } ) ], [ new matchmaking . model . SeasonModel ( \"season-0001\" , 50 , \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), new matchmaking . model . SeasonModel ( \"season-0002\" , 100 , \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002\" ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , matchmaking class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () matchmaking . Namespace ( stack = self , name = \"namespace-0001\" , options = matchmaking . NamespaceOptions ( enable_rating = True , enable_collaborate_season_rating = matchmaking . NamespaceEnableCollaborateSeasonRating . DISABLE , collaborate_season_rating_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:seasonRating:namespace-0001' , collaborate_season_rating_ttl = 60 , log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) . master_data ( rating_models = [ matchmaking . RatingModel ( name = 'rating-0001' , initial_value = 1500 , volatility = 100 , options = matchmaking . RatingModelOptions ( metadata = 'RATING_0001' ), ), matchmaking . RatingModel ( name = 'rating-0002' , initial_value = 1500 , volatility = 150 , options = matchmaking . RatingModelOptions ( metadata = 'RATING_0002' ), ), ], season_models = [ matchmaking . SeasonModel ( name = 'season-0001' , maximum_participants = 50 , challenge_period_event_id = 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001' ), matchmaking . SeasonModel ( name = 'season-0002' , maximum_participants = 100 , challenge_period_event_id = 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0002' ), ], ) print ( SampleStack () . yaml ()) # Generate Template RatingModel 레이팅 모델 GS2에서는 레이팅 알고리즘으로 Glicko-2를 채택하고 있습니다. Glicko-2에는 여러 파라미터가 있지만, GS2-Matchmaking에서는 이를 종합적으로 나타내는 변동성이라는 하나의 파라미터로 통합하고 있습니다. 변동성은 변화의 크기를 나타내는 파라미터로, 값이 클수록 레이팅 값의 변동 폭이 커집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 ratingModelId string ※ ~ 1024자 레이팅 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialValue int 1500 100 ~ 10000 레이트 값의 초기값 플레이어가 처음 레이팅이 적용된 매치메이킹에 참가할 때 부여되는 시작 레이트 값입니다. 기본값은 1500입니다. 모든 플레이어는 동일한 레이팅에서 시작하며, 대전 결과에 따라 조정됩니다. volatility int 100 1 ~ 20000 레이팅의 변동성 각 대전 후 레이트 값이 얼마나 변동하는지를 제어하는 Glicko-2의 파라미터입니다. 값이 클수록 레이팅의 변동 폭이 커져 더 빠르게 레이팅이 조정됩니다. 값이 작을수록 레이팅이 안정되어 완만하게 변화합니다. 기본값은 100입니다. SeasonModel 시즌 모델 시즌 매치메이킹에서, 일정 기간 동안 유효한 영속 개더링의 기간·최대 참가 인원수·티어 연동 설정을 정의하는 마스터 데이터입니다. GS2-Schedule을 통해 기간을 관리하며, 필요에 따라 GS2-Experience와 연동하여 동일한 티어 내에서 영속 개더링을 형성합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParticipants int  2 ~ 1000 최대 참가 인원수 하나의 시즌 개더링에 참가할 수 있는 플레이어의 최대 인원수입니다. 이 상한에 도달하면 시즌 개더링은 만원 상태가 되어 더 이상 플레이어가 참가할 수 없게 됩니다. 2에서 1000 사이의 범위로 지정합니다. experienceModelId string ~ 1024자 티어 관리용 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 플레이어의 티어를 결정하기 위해 사용하는 GS2-Experience 경험치 모델의 GRN입니다. 이 경험치 모델에서의 플레이어 랭크가 매치메이킹의 티어로 사용되어, 비슷한 레벨의 플레이어끼리 그룹화됩니다. 지정하지 않으면 티어에 의한 그룹화가 비활성화되어, 레벨에 관계없이 모든 플레이어가 매칭됩니다. challengePeriodEventId string  ~ 1024자 챌린지 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 시즌의 유효 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 이벤트가 활성화되어 있는 동안에만 시즌 개더링의 생성·참가가 가능합니다. 이벤트 기간이 종료되면 시즌이 종료되어 새로운 매치메이킹이 불가능해집니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Matchmaking Deploy/CDK 레퍼런스","url":"/ko/api_reference/matchmaking/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명 logSetting LogSetting 로그 출력 설정 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::MegaField::Namespace Properties : Name : namespace-0001 Description : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/megaField\" ) SampleStack := core . NewStack () megaField . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , megaField . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\MegaField\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\MegaField\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . megaField . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . megaField . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2MegaField . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2MegaField . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import megaField from \"@/gs2cdk/megaField\" ; class SampleStack extends core . Stack { public constructor () { super (); new megaField . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , mega_field class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () mega_field . Namespace ( stack = self , name = 'namespace-0001' , options = mega_field . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 기록하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청/응답 로그 데이터가 대상 GS2-Log로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentFieldMaster 현재 활성화된 필드 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 필드 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터의 관리에 JSON 형식 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 툴을 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-MegaField 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentFieldMaster 업데이트된 현재 활성화된 필드 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::MegaField::CurrentFieldMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2022-08-28\" , \"areaModels\": [ { \"name\": \"area-0001\" , \"metadata\": \"AREA_0001\" , \"layerModels\": [ { \"name\": \"layer-0001\" , \"metadata\": \"LAYER_0001\" } ] } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/megaField\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () megaField . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , megaField . NamespaceOptions {}, ). MasterData ( [] megaField . AreaModel { megaField . NewAreaModel ( \"area-0001\" , megaField . AreaModelOptions { Metadata : pointy . String ( \"AREA_0001\" ), LayerModels : [] megaField . LayerModel { megaField . NewLayerModel ( \"layer-0001\" , megaField . LayerModelOptions { Metadata : pointy . String ( \"LAYER_0001\" ), }, ), }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\MegaField\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\MegaField\\Model\\AreaModel ( name : \"area-0001\" , options : new \\Gs2Cdk\\MegaField\\Model\\Options\\AreaModelOptions ( metadata : \"AREA_0001\" , layerModels : [ new \\Gs2Cdk\\MegaField\\Model\\LayerModel ( name : \"layer-0001\" , options : new \\Gs2Cdk\\MegaField\\Model\\Options\\LayerModelOptions ( metadata : \"LAYER_0001\" , ), ), ] ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . megaField . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . megaField . model . AreaModel ( \"area-0001\" , new io . gs2 . cdk . megaField . model . options . AreaModelOptions () . withMetadata ( \"AREA_0001\" ) . withLayerModels ( Arrays . asList ( new io . gs2 . cdk . megaField . model . LayerModel ( \"layer-0001\" , new io . gs2 . cdk . megaField . model . options . LayerModelOptions () . withMetadata ( \"LAYER_0001\" ) ) )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2MegaField . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2MegaField . Model . AreaModel [] { new Gs2Cdk . Gs2MegaField . Model . AreaModel ( name : \"area-0001\" , options : new Gs2Cdk . Gs2MegaField . Model . Options . AreaModelOptions { metadata = \"AREA_0001\" , layerModels = new Gs2Cdk . Gs2MegaField . Model . LayerModel [] { new Gs2Cdk . Gs2MegaField . Model . LayerModel ( name : \"layer-0001\" , options : new Gs2Cdk . Gs2MegaField . Model . Options . LayerModelOptions { metadata = \"LAYER_0001\" } ) } } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import megaField from \"@/gs2cdk/megaField\" ; class SampleStack extends core . Stack { public constructor () { super (); new megaField . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new megaField . model . AreaModel ( \"area-0001\" , { metadata : \"AREA_0001\" , layerModels : [ new megaField . model . LayerModel ( \"layer-0001\" , { metadata : \"LAYER_0001\" } ), ] } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , mega_field class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () mega_field . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( area_models = [ mega_field . AreaModel ( name = 'area-0001' , options = mega_field . AreaModelOptions ( metadata = 'AREA_0001' , layer_models = [ mega_field . LayerModel ( name = 'layer-0001' , options = mega_field . LayerModelOptions ( metadata = 'LAYER_0001' , ), ), ] ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template AreaModel 에어리어는 공간을 분할하는 것으로, 같은 좌표라도 에어리어가 다르면 별도의 공간으로 취급할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 areaModelId string ※ ~ 1024자 에어리어 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 에어리어 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. layerModels List [] 0 ~ 1000 items 레이어 모델 목록 LayerModel 레이어는 하나의 공간 내에서 여러 개의 논리적 계층을 구현합니다. 예를 들어, 캐릭터가 대량으로 존재하는 공간에서 에너미가 보이지 않게 되는 문제를 해결합니다. 레이어 1에는 캐릭터를 배치합니다. 레이어 2에 에너미를 배치한 경우, 레이어마다 지정한 거리 내에서의 취득 수량을 지정할 수 있으므로 보이지 않게 될 걱정이 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 layerModelId string ※ ~ 1024자 레이어 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이어 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-MegaField Deploy/CDK 레퍼런스","url":"/ko/api_reference/mega_field/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 미션 달성 보상 부여 시 사용되는 분산 트랜잭션 설정입니다. missionCompleteScript ScriptSetting 미션을 달성했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - missionComplete counterIncrementScript ScriptSetting 카운터가 상승했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - counterIncrement receiveRewardsScript ScriptSetting 보상을 받았을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - receiveRewards completeNotification NotificationSetting  미션 태스크를 달성했을 때의 푸시 통지 미션 태스크의 달성 조건이 충족되었을 때 GS2-Gateway를 통해 전달되는 푸시 통지 설정입니다. 게임 클라이언트가 달성 상황을 즉시 UI에 반영할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 이 네임스페이스에 대한 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 카운터 증가, 미션 달성, 보상 수령의 디버깅에 도움이 됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 작성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Mission::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 MissionCompleteScript : null CounterIncrementScript : null ReceiveRewardsScript : null CompleteNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/mission\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () mission . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , mission . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Mission\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Mission\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . mission . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . mission . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Mission . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Mission . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import mission from \"@/gs2cdk/mission\" ; class SampleStack extends core . Stack { public constructor () { super (); new mission . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , mission class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () mission . Namespace ( stack = self , name = 'namespace-0001' , options = mission . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentMissionMaster 현재 활성화된 미션 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 미션 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력함으로써도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Mission 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentMissionMaster 갱신된 현재 활성화된 미션 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Mission::CurrentMissionMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-05-28\" , \"groups\": [ { \"name\": \"daily\" , \"resetType\": \"daily\" , \"metadata\": \"DAILY\" , \"tasks\": [ { \"name\": \"quest_x10\" , \"metadata\": \"QUEST_X10\" , \"counterName\": \"quest_complete\" , \"targetValue\": 10 , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } ] } , { \"name\": \"quest_x20\" , \"metadata\": \"QUEST_X20\" , \"counterName\": \"quest_complete\" , \"premiseMissionTaskName\": \"quest_x10\" , \"targetValue\": 20 , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } ] } , { \"name\": \"gacha\" , \"metadata\": \"GACHA\" , \"counterName\": \"lot_gacha\" , \"targetValue\": 1 , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } ] } ], \"resetHour\": 10 } , { \"name\": \"weekly\" , \"resetType\": \"weekly\" , \"metadata\": \"WEEKLY\" , \"tasks\": [ { \"name\": \"quest_x100\" , \"metadata\": \"QUEST_X100\" , \"counterName\": \"quest_complete\" , \"targetValue\": 100 , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } ] } , { \"name\": \"quest_x1000\" , \"metadata\": \"QUEST_X1000\" , \"counterName\": \"quest_complete\" , \"premiseMissionTaskName\": \"quest_x100\" , \"targetValue\": 1000 , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } ] } ], \"resetDayOfWeek\": \"monday\" , \"resetHour\": 10 } , { \"name\": \"story\" , \"resetType\": \"notReset\" , \"metadata\": \"STORY\" , \"tasks\": [ { \"name\": \"quest_1-1\" , \"metadata\": \"QUEST_1-1\" , \"counterName\": \"quest1\" , \"targetValue\": 1 } , { \"name\": \"quest_1-2\" , \"metadata\": \"QUEST_1-2\" , \"counterName\": \"quest1\" , \"premiseMissionTaskName\": \"quest_1-1\" , \"targetValue\": 1 } , { \"name\": \"quest_1-3\" , \"metadata\": \"QUEST_1-3\" , \"counterName\": \"quest1\" , \"premiseMissionTaskName\": \"quest_1-2\" , \"targetValue\": 1 } , { \"name\": \"quest_1-4\" , \"metadata\": \"QUEST_1-4\" , \"counterName\": \"quest1\" , \"premiseMissionTaskName\": \"quest_1-3\" , \"targetValue\": 1 } , { \"name\": \"quest_2-1\" , \"metadata\": \"QUEST_2-1\" , \"counterName\": \"quest2\" , \"premiseMissionTaskName\": \"quest_1-4\" , \"targetValue\": 1 } ] } ], \"counters\": [ { \"name\": \"quest_complete\" , \"scopes\": [ { \"resetType\": \"daily\" , \"resetHour\": 5 } , { \"resetType\": \"weekly\" , \"resetDayOfWeek\": \"monday\" , \"resetHour\": 5 } ], \"metadata\": \"QUEST_COMPLETE\" } , { \"name\": \"lot_gacha\" , \"scopes\": [ { \"resetType\": \"daily\" , \"resetHour\": 5 } ], \"metadata\": \"LOT_GACHA\" } , { \"name\": \"quest1\" , \"scopes\": [ { \"resetType\": \"notReset\" } ], \"metadata\": \"QUEST1\" } , { \"name\": \"quest2\" , \"scopes\": [ { \"resetType\": \"notReset\" } ], \"metadata\": \"QUEST2\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/mission\" \"github.com/gs2io/gs2-golang-cdk/experience\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () mission . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , mission . NamespaceOptions {}, ). MasterData ( [] mission . MissionGroupModel { mission . NewMissionGroupModel ( \"daily\" , mission . MissionGroupModelResetTypeDaily , mission . MissionGroupModelOptions { Metadata : pointy . String ( \"DAILY\" ), Tasks : [] mission . MissionTaskModel { mission . NewMissionTaskModel ( \"quest_x10\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_X10\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, }, ), mission . NewMissionTaskModel ( \"quest_x20\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_X20\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, PremiseMissionTaskName : pointy . String ( \"quest_x10\" ), }, ), mission . NewMissionTaskModel ( \"gacha\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"GACHA\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, }, ), }, ResetHour : pointy . Int32 ( 10 ), }, ), mission . NewMissionGroupModel ( \"weekly\" , mission . MissionGroupModelResetTypeWeekly , mission . MissionGroupModelOptions { Metadata : pointy . String ( \"WEEKLY\" ), Tasks : [] mission . MissionTaskModel { mission . NewMissionTaskModel ( \"quest_x100\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_X100\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, }, ), mission . NewMissionTaskModel ( \"quest_x1000\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_X1000\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), }, PremiseMissionTaskName : pointy . String ( \"quest_x100\" ), }, ), }, ResetDayOfWeek : mission . MissionGroupModelResetDayOfWeekMonday . Pointer (), ResetHour : pointy . Int32 ( 10 ), }, ), mission . NewMissionGroupModel ( \"story\" , mission . MissionGroupModelResetTypeNotReset , mission . MissionGroupModelOptions { Metadata : pointy . String ( \"STORY\" ), Tasks : [] mission . MissionTaskModel { mission . NewMissionTaskModel ( \"quest_1-1\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_1-1\" ), }, ), mission . NewMissionTaskModel ( \"quest_1-2\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_1-2\" ), PremiseMissionTaskName : pointy . String ( \"quest_1-1\" ), }, ), mission . NewMissionTaskModel ( \"quest_1-3\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_1-3\" ), PremiseMissionTaskName : pointy . String ( \"quest_1-2\" ), }, ), mission . NewMissionTaskModel ( \"quest_1-4\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_1-4\" ), PremiseMissionTaskName : pointy . String ( \"quest_1-3\" ), }, ), mission . NewMissionTaskModel ( \"quest_2-1\" , mission . MissionTaskModelVerifyCompleteTypeCounter , mission . MissionTaskModelOptions { Metadata : pointy . String ( \"QUEST_2-1\" ), PremiseMissionTaskName : pointy . String ( \"quest_1-4\" ), }, ), }, }, ), }, [] mission . CounterModel { mission . NewCounterModel ( \"quest_complete\" , [] mission . CounterScopeModel { mission . NewCounterScopeModel ( mission . CounterScopeModelScopeTypeResetTiming , mission . CounterScopeModelResetTypeDaily , mission . CounterScopeModelOptions { ResetHour : pointy . Int32 ( 5 ), }, ), mission . NewCounterScopeModel ( mission . CounterScopeModelScopeTypeResetTiming , mission . CounterScopeModelResetTypeWeekly , mission . CounterScopeModelOptions { ResetDayOfWeek : mission . CounterScopeModelResetDayOfWeekMonday . Pointer (), ResetHour : pointy . Int32 ( 5 ), }, ), }, mission . CounterModelOptions { Metadata : pointy . String ( \"QUEST_COMPLETE\" ), }, ), mission . NewCounterModel ( \"lot_gacha\" , [] mission . CounterScopeModel { mission . NewCounterScopeModel ( mission . CounterScopeModelScopeTypeResetTiming , mission . CounterScopeModelResetTypeDaily , mission . CounterScopeModelOptions { ResetHour : pointy . Int32 ( 5 ), }, ), }, mission . CounterModelOptions { Metadata : pointy . String ( \"LOT_GACHA\" ), }, ), mission . NewCounterModel ( \"quest1\" , [] mission . CounterScopeModel { mission . NewCounterScopeModel ( mission . CounterScopeModelScopeTypeResetTiming , mission . CounterScopeModelResetTypeNotReset , mission . CounterScopeModelOptions {}, ), }, mission . CounterModelOptions { Metadata : pointy . String ( \"QUEST1\" ), }, ), mission . NewCounterModel ( \"quest2\" , [] mission . CounterScopeModel { mission . NewCounterScopeModel ( mission . CounterScopeModelScopeTypeResetTiming , mission . CounterScopeModelResetTypeNotReset , mission . CounterScopeModelOptions {}, ), }, mission . CounterModelOptions { Metadata : pointy . String ( \"QUEST2\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Mission\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Mission\\Model\\MissionGroupModel ( name : \"daily\" , resetType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionGroupModelResetType :: DAILY , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionGroupModelOptions ( metadata : \"DAILY\" , tasks : [ new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_x10\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_X10\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_x20\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_X20\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), ], premiseMissionTaskName : \"quest_x10\" , ), ), new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"gacha\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"GACHA\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), ], ), ), ], resetHour : 10 ) ), new \\Gs2Cdk\\Mission\\Model\\MissionGroupModel ( name : \"weekly\" , resetType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionGroupModelResetType :: WEEKLY , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionGroupModelOptions ( metadata : \"WEEKLY\" , tasks : [ new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_x100\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_X100\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_x1000\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_X1000\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), ], premiseMissionTaskName : \"quest_x100\" , ), ), ], resetDayOfWeek : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionGroupModelResetDayOfWeek :: MONDAY , resetHour : 10 ) ), new \\Gs2Cdk\\Mission\\Model\\MissionGroupModel ( name : \"story\" , resetType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionGroupModelResetType :: NOT_RESET , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionGroupModelOptions ( metadata : \"STORY\" , tasks : [ new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_1-1\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_1-1\" , ), ), new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_1-2\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_1-2\" , premiseMissionTaskName : \"quest_1-1\" , ), ), new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_1-3\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_1-3\" , premiseMissionTaskName : \"quest_1-2\" , ), ), new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_1-4\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_1-4\" , premiseMissionTaskName : \"quest_1-3\" , ), ), new \\Gs2Cdk\\Mission\\Model\\MissionTaskModel ( name : \"quest_2-1\" , verifyCompleteType : \\Gs2Cdk\\Mission\\Model\\Enums\\MissionTaskModelVerifyCompleteType :: COUNTER , options : new \\Gs2Cdk\\Mission\\Model\\Options\\MissionTaskModelOptions ( metadata : \"QUEST_2-1\" , premiseMissionTaskName : \"quest_1-4\" , ), ), ] ) ) ], [ new \\Gs2Cdk\\Mission\\Model\\CounterModel ( name : \"quest_complete\" , scopes : [ new \\Gs2Cdk\\Mission\\Model\\CounterScopeModel ( scopeType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelScopeType :: RESET_TIMING , resetType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelResetType :: DAILY , options : new \\Gs2Cdk\\Mission\\Model\\Options\\CounterScopeModelOptions ( resetHour : 5 , ), ), new \\Gs2Cdk\\Mission\\Model\\CounterScopeModel ( scopeType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelScopeType :: RESET_TIMING , resetType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelResetType :: WEEKLY , options : new \\Gs2Cdk\\Mission\\Model\\Options\\CounterScopeModelOptions ( resetDayOfWeek : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelResetDayOfWeek :: MONDAY , resetHour : 5 , ), ), ], options : new \\Gs2Cdk\\Mission\\Model\\Options\\CounterModelOptions ( metadata : \"QUEST_COMPLETE\" ) ), new \\Gs2Cdk\\Mission\\Model\\CounterModel ( name : \"lot_gacha\" , scopes : [ new \\Gs2Cdk\\Mission\\Model\\CounterScopeModel ( scopeType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelScopeType :: RESET_TIMING , resetType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelResetType :: DAILY , options : new \\Gs2Cdk\\Mission\\Model\\Options\\CounterScopeModelOptions ( resetHour : 5 , ), ), ], options : new \\Gs2Cdk\\Mission\\Model\\Options\\CounterModelOptions ( metadata : \"LOT_GACHA\" ) ), new \\Gs2Cdk\\Mission\\Model\\CounterModel ( name : \"quest1\" , scopes : [ new \\Gs2Cdk\\Mission\\Model\\CounterScopeModel ( scopeType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelScopeType :: RESET_TIMING , resetType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelResetType :: NOT_RESET , ), ], options : new \\Gs2Cdk\\Mission\\Model\\Options\\CounterModelOptions ( metadata : \"QUEST1\" ) ), new \\Gs2Cdk\\Mission\\Model\\CounterModel ( name : \"quest2\" , scopes : [ new \\Gs2Cdk\\Mission\\Model\\CounterScopeModel ( scopeType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelScopeType :: RESET_TIMING , resetType : \\Gs2Cdk\\Mission\\Model\\Enums\\CounterScopeModelResetType :: NOT_RESET , ), ], options : new \\Gs2Cdk\\Mission\\Model\\Options\\CounterModelOptions ( metadata : \"QUEST2\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . mission . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . mission . model . MissionGroupModel ( \"daily\" , io . gs2 . cdk . mission . model . enums . MissionGroupModelResetType . DAILY , new io . gs2 . cdk . mission . model . options . MissionGroupModelOptions () . withMetadata ( \"DAILY\" ) . withTasks ( Arrays . asList ( new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_x10\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_X10\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) ), new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_x20\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_X20\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) . withPremiseMissionTaskName ( \"quest_x10\" ) ), new io . gs2 . cdk . mission . model . MissionTaskModel ( \"gacha\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"GACHA\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) ) )) . withResetHour ( 10 ) ), new io . gs2 . cdk . mission . model . MissionGroupModel ( \"weekly\" , io . gs2 . cdk . mission . model . enums . MissionGroupModelResetType . WEEKLY , new io . gs2 . cdk . mission . model . options . MissionGroupModelOptions () . withMetadata ( \"WEEKLY\" ) . withTasks ( Arrays . asList ( new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_x100\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_X100\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) ), new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_x1000\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_X1000\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ) )) . withPremiseMissionTaskName ( \"quest_x100\" ) ) )) . withResetDayOfWeek ( io . gs2 . cdk . mission . model . enums . MissionGroupModelResetDayOfWeek . MONDAY ) . withResetHour ( 10 ) ), new io . gs2 . cdk . mission . model . MissionGroupModel ( \"story\" , io . gs2 . cdk . mission . model . enums . MissionGroupModelResetType . NOT_RESET , new io . gs2 . cdk . mission . model . options . MissionGroupModelOptions () . withMetadata ( \"STORY\" ) . withTasks ( Arrays . asList ( new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_1-1\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_1-1\" ) ), new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_1-2\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_1-2\" ) . withPremiseMissionTaskName ( \"quest_1-1\" ) ), new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_1-3\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_1-3\" ) . withPremiseMissionTaskName ( \"quest_1-2\" ) ), new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_1-4\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_1-4\" ) . withPremiseMissionTaskName ( \"quest_1-3\" ) ), new io . gs2 . cdk . mission . model . MissionTaskModel ( \"quest_2-1\" , io . gs2 . cdk . mission . model . enums . MissionTaskModelVerifyCompleteType . COUNTER , new io . gs2 . cdk . mission . model . options . MissionTaskModelOptions () . withMetadata ( \"QUEST_2-1\" ) . withPremiseMissionTaskName ( \"quest_1-4\" ) ) )) ) ), Arrays . asList ( new io . gs2 . cdk . mission . model . CounterModel ( \"quest_complete\" , Arrays . asList ( new io . gs2 . cdk . mission . model . CounterScopeModel ( io . gs2 . cdk . mission . model . enums . CounterScopeModelScopeType . RESET_TIMING , io . gs2 . cdk . mission . model . enums . CounterScopeModelResetType . DAILY , new io . gs2 . cdk . mission . model . options . CounterScopeModelOptions () . withResetHour ( 5 ) ), new io . gs2 . cdk . mission . model . CounterScopeModel ( io . gs2 . cdk . mission . model . enums . CounterScopeModelScopeType . RESET_TIMING , io . gs2 . cdk . mission . model . enums . CounterScopeModelResetType . WEEKLY , new io . gs2 . cdk . mission . model . options . CounterScopeModelOptions () . withResetDayOfWeek ( io . gs2 . cdk . mission . model . enums . CounterScopeModelResetDayOfWeek . MONDAY ) . withResetHour ( 5 ) ) ), new io . gs2 . cdk . mission . model . options . CounterModelOptions () . withMetadata ( \"QUEST_COMPLETE\" ) ), new io . gs2 . cdk . mission . model . CounterModel ( \"lot_gacha\" , Arrays . asList ( new io . gs2 . cdk . mission . model . CounterScopeModel ( io . gs2 . cdk . mission . model . enums . CounterScopeModelScopeType . RESET_TIMING , io . gs2 . cdk . mission . model . enums . CounterScopeModelResetType . DAILY , new io . gs2 . cdk . mission . model . options . CounterScopeModelOptions () . withResetHour ( 5 ) ) ), new io . gs2 . cdk . mission . model . options . CounterModelOptions () . withMetadata ( \"LOT_GACHA\" ) ), new io . gs2 . cdk . mission . model . CounterModel ( \"quest1\" , Arrays . asList ( new io . gs2 . cdk . mission . model . CounterScopeModel ( io . gs2 . cdk . mission . model . enums . CounterScopeModelScopeType . RESET_TIMING , io . gs2 . cdk . mission . model . enums . CounterScopeModelResetType . NOT_RESET ) ), new io . gs2 . cdk . mission . model . options . CounterModelOptions () . withMetadata ( \"QUEST1\" ) ), new io . gs2 . cdk . mission . model . CounterModel ( \"quest2\" , Arrays . asList ( new io . gs2 . cdk . mission . model . CounterScopeModel ( io . gs2 . cdk . mission . model . enums . CounterScopeModelScopeType . RESET_TIMING , io . gs2 . cdk . mission . model . enums . CounterScopeModelResetType . NOT_RESET ) ), new io . gs2 . cdk . mission . model . options . CounterModelOptions () . withMetadata ( \"QUEST2\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Mission . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Mission . Model . MissionGroupModel [] { new Gs2Cdk . Gs2Mission . Model . MissionGroupModel ( name : \"daily\" , resetType : Gs2Cdk . Gs2Mission . Model . Enums . MissionGroupModelResetType . Daily , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionGroupModelOptions { metadata = \"DAILY\" , tasks = new Gs2Cdk . Gs2Mission . Model . MissionTaskModel [] { new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_x10\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_X10\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_x20\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_X20\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ) }, premiseMissionTaskName = \"quest_x10\" } ), new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"gacha\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"GACHA\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ) } } ) }, resetHour = 10 } ), new Gs2Cdk . Gs2Mission . Model . MissionGroupModel ( name : \"weekly\" , resetType : Gs2Cdk . Gs2Mission . Model . Enums . MissionGroupModelResetType . Weekly , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionGroupModelOptions { metadata = \"WEEKLY\" , tasks = new Gs2Cdk . Gs2Mission . Model . MissionTaskModel [] { new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_x100\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_X100\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_x1000\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_X1000\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ) }, premiseMissionTaskName = \"quest_x100\" } ) }, resetDayOfWeek = Gs2Cdk . Gs2Mission . Model . Enums . MissionGroupModelResetDayOfWeek . Monday , resetHour = 10 } ), new Gs2Cdk . Gs2Mission . Model . MissionGroupModel ( name : \"story\" , resetType : Gs2Cdk . Gs2Mission . Model . Enums . MissionGroupModelResetType . NotReset , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionGroupModelOptions { metadata = \"STORY\" , tasks = new Gs2Cdk . Gs2Mission . Model . MissionTaskModel [] { new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_1-1\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_1-1\" } ), new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_1-2\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_1-2\" , premiseMissionTaskName = \"quest_1-1\" } ), new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_1-3\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_1-3\" , premiseMissionTaskName = \"quest_1-2\" } ), new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_1-4\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_1-4\" , premiseMissionTaskName = \"quest_1-3\" } ), new Gs2Cdk . Gs2Mission . Model . MissionTaskModel ( name : \"quest_2-1\" , verifyCompleteType : Gs2Cdk . Gs2Mission . Model . Enums . MissionTaskModelVerifyCompleteType . Counter , options : new Gs2Cdk . Gs2Mission . Model . Options . MissionTaskModelOptions { metadata = \"QUEST_2-1\" , premiseMissionTaskName = \"quest_1-4\" } ) } } ) }, new Gs2Cdk . Gs2Mission . Model . CounterModel [] { new Gs2Cdk . Gs2Mission . Model . CounterModel ( name : \"quest_complete\" , scopes : new Gs2Cdk . Gs2Mission . Model . CounterScopeModel [] { new Gs2Cdk . Gs2Mission . Model . CounterScopeModel ( scopeType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelScopeType . ResetTiming , resetType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelResetType . Daily , options : new Gs2Cdk . Gs2Mission . Model . Options . CounterScopeModelOptions { resetHour = 5 } ), new Gs2Cdk . Gs2Mission . Model . CounterScopeModel ( scopeType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelScopeType . ResetTiming , resetType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelResetType . Weekly , options : new Gs2Cdk . Gs2Mission . Model . Options . CounterScopeModelOptions { resetDayOfWeek = Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelResetDayOfWeek . Monday , resetHour = 5 } ) }, options : new Gs2Cdk . Gs2Mission . Model . Options . CounterModelOptions { metadata = \"QUEST_COMPLETE\" } ), new Gs2Cdk . Gs2Mission . Model . CounterModel ( name : \"lot_gacha\" , scopes : new Gs2Cdk . Gs2Mission . Model . CounterScopeModel [] { new Gs2Cdk . Gs2Mission . Model . CounterScopeModel ( scopeType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelScopeType . ResetTiming , resetType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelResetType . Daily , options : new Gs2Cdk . Gs2Mission . Model . Options . CounterScopeModelOptions { resetHour = 5 } ) }, options : new Gs2Cdk . Gs2Mission . Model . Options . CounterModelOptions { metadata = \"LOT_GACHA\" } ), new Gs2Cdk . Gs2Mission . Model . CounterModel ( name : \"quest1\" , scopes : new Gs2Cdk . Gs2Mission . Model . CounterScopeModel [] { new Gs2Cdk . Gs2Mission . Model . CounterScopeModel ( scopeType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelScopeType . ResetTiming , resetType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelResetType . NotReset ) }, options : new Gs2Cdk . Gs2Mission . Model . Options . CounterModelOptions { metadata = \"QUEST1\" } ), new Gs2Cdk . Gs2Mission . Model . CounterModel ( name : \"quest2\" , scopes : new Gs2Cdk . Gs2Mission . Model . CounterScopeModel [] { new Gs2Cdk . Gs2Mission . Model . CounterScopeModel ( scopeType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelScopeType . ResetTiming , resetType : Gs2Cdk . Gs2Mission . Model . Enums . CounterScopeModelResetType . NotReset ) }, options : new Gs2Cdk . Gs2Mission . Model . Options . CounterModelOptions { metadata = \"QUEST2\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import mission from \"@/gs2cdk/mission\" ; import experience from \"@/gs2cdk/experience\" ; class SampleStack extends core . Stack { public constructor () { super (); new mission . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new mission . model . MissionGroupModel ( \"daily\" , mission . model . MissionGroupModelResetType . DAILY , { metadata : \"DAILY\" , tasks : [ new mission . model . MissionTaskModel ( \"quest_x10\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_X10\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), ] } ), new mission . model . MissionTaskModel ( \"quest_x20\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_X20\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), ], premiseMissionTaskName : \"quest_x10\" } ), new mission . model . MissionTaskModel ( \"gacha\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"GACHA\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), ] } ), ], resetHour : 10 } ), new mission . model . MissionGroupModel ( \"weekly\" , mission . model . MissionGroupModelResetType . WEEKLY , { metadata : \"WEEKLY\" , tasks : [ new mission . model . MissionTaskModel ( \"quest_x100\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_X100\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), ] } ), new mission . model . MissionTaskModel ( \"quest_x1000\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_X1000\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), ], premiseMissionTaskName : \"quest_x100\" } ), ], resetDayOfWeek : mission.model.MissionGroupModelResetDayOfWeek.MONDAY , resetHour : 10 } ), new mission . model . MissionGroupModel ( \"story\" , mission . model . MissionGroupModelResetType . NOT_RESET , { metadata : \"STORY\" , tasks : [ new mission . model . MissionTaskModel ( \"quest_1-1\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_1-1\" } ), new mission . model . MissionTaskModel ( \"quest_1-2\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_1-2\" , premiseMissionTaskName : \"quest_1-1\" } ), new mission . model . MissionTaskModel ( \"quest_1-3\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_1-3\" , premiseMissionTaskName : \"quest_1-2\" } ), new mission . model . MissionTaskModel ( \"quest_1-4\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_1-4\" , premiseMissionTaskName : \"quest_1-3\" } ), new mission . model . MissionTaskModel ( \"quest_2-1\" , mission . model . MissionTaskModelVerifyCompleteType . COUNTER , { metadata : \"QUEST_2-1\" , premiseMissionTaskName : \"quest_1-4\" } ), ] } ) ], [ new mission . model . CounterModel ( \"quest_complete\" , [ new mission . model . CounterScopeModel ( mission . model . CounterScopeModelScopeType . RESET_TIMING , mission . model . CounterScopeModelResetType . DAILY , { resetHour : 5 } ), new mission . model . CounterScopeModel ( mission . model . CounterScopeModelScopeType . RESET_TIMING , mission . model . CounterScopeModelResetType . WEEKLY , { resetDayOfWeek : mission.model.CounterScopeModelResetDayOfWeek.MONDAY , resetHour : 5 } ), ], { metadata : \"QUEST_COMPLETE\" } ), new mission . model . CounterModel ( \"lot_gacha\" , [ new mission . model . CounterScopeModel ( mission . model . CounterScopeModelScopeType . RESET_TIMING , mission . model . CounterScopeModelResetType . DAILY , { resetHour : 5 } ), ], { metadata : \"LOT_GACHA\" } ), new mission . model . CounterModel ( \"quest1\" , [ new mission . model . CounterScopeModel ( mission . model . CounterScopeModelScopeType . RESET_TIMING , mission . model . CounterScopeModelResetType . NOT_RESET ), ], { metadata : \"QUEST1\" } ), new mission . model . CounterModel ( \"quest2\" , [ new mission . model . CounterScopeModel ( mission . model . CounterScopeModelScopeType . RESET_TIMING , mission . model . CounterScopeModelResetType . NOT_RESET ), ], { metadata : \"QUEST2\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , mission , experience class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () mission . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( groups = [ mission . MissionGroupModel ( name = 'daily' , reset_type = mission . MissionGroupModelResetType . DAILY , options = mission . MissionGroupModelOptions ( metadata = 'DAILY' , tasks = [ mission . MissionTaskModel ( name = 'quest_x10' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_X10' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), ], ), ), mission . MissionTaskModel ( name = 'quest_x20' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_X20' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), ], premise_mission_task_name = 'quest_x10' , ), ), mission . MissionTaskModel ( name = 'gacha' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'GACHA' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), ], ), ), ], reset_hour = 10 ), ), mission . MissionGroupModel ( name = 'weekly' , reset_type = mission . MissionGroupModelResetType . WEEKLY , options = mission . MissionGroupModelOptions ( metadata = 'WEEKLY' , tasks = [ mission . MissionTaskModel ( name = 'quest_x100' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_X100' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), ], ), ), mission . MissionTaskModel ( name = 'quest_x1000' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_X1000' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), ], premise_mission_task_name = 'quest_x100' , ), ), ], reset_day_of_week = mission . MissionGroupModelResetDayOfWeek . MONDAY , reset_hour = 10 ), ), mission . MissionGroupModel ( name = 'story' , reset_type = mission . MissionGroupModelResetType . NOT_RESET , options = mission . MissionGroupModelOptions ( metadata = 'STORY' , tasks = [ mission . MissionTaskModel ( name = 'quest_1-1' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_1-1' , ), ), mission . MissionTaskModel ( name = 'quest_1-2' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_1-2' , premise_mission_task_name = 'quest_1-1' , ), ), mission . MissionTaskModel ( name = 'quest_1-3' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_1-3' , premise_mission_task_name = 'quest_1-2' , ), ), mission . MissionTaskModel ( name = 'quest_1-4' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_1-4' , premise_mission_task_name = 'quest_1-3' , ), ), mission . MissionTaskModel ( name = 'quest_2-1' , verify_complete_type = mission . MissionTaskModelVerifyCompleteType . COUNTER , options = mission . MissionTaskModelOptions ( metadata = 'QUEST_2-1' , premise_mission_task_name = 'quest_1-4' , ), ), ] ), ), ], counters = [ mission . CounterModel ( name = 'quest_complete' , scopes = [ mission . CounterScopeModel ( scope_type = mission . CounterScopeModelScopeType . RESET_TIMING , reset_type = mission . CounterScopeModelResetType . DAILY , options = mission . CounterScopeModelOptions ( reset_hour = 5 , ), ), mission . CounterScopeModel ( scope_type = mission . CounterScopeModelScopeType . RESET_TIMING , reset_type = mission . CounterScopeModelResetType . WEEKLY , options = mission . CounterScopeModelOptions ( reset_day_of_week = mission . CounterScopeModelResetDayOfWeek . MONDAY , reset_hour = 5 , ), ), ], options = mission . CounterModelOptions ( metadata = 'QUEST_COMPLETE' ), ), mission . CounterModel ( name = 'lot_gacha' , scopes = [ mission . CounterScopeModel ( scope_type = mission . CounterScopeModelScopeType . RESET_TIMING , reset_type = mission . CounterScopeModelResetType . DAILY , options = mission . CounterScopeModelOptions ( reset_hour = 5 , ), ), ], options = mission . CounterModelOptions ( metadata = 'LOT_GACHA' ), ), mission . CounterModel ( name = 'quest1' , scopes = [ mission . CounterScopeModel ( scope_type = mission . CounterScopeModelScopeType . RESET_TIMING , reset_type = mission . CounterScopeModelResetType . NOT_RESET , ), ], options = mission . CounterModelOptions ( metadata = 'QUEST1' ), ), mission . CounterModel ( name = 'quest2' , scopes = [ mission . CounterScopeModel ( scope_type = mission . CounterScopeModelScopeType . RESET_TIMING , reset_type = mission . CounterScopeModelResetType . NOT_RESET , ), ], options = mission . CounterModelOptions ( metadata = 'QUEST2' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template CounterModel 카운터 모델 카운터 모델은 미션 태스크의 달성 조건으로 설정할 수 있는 엔티티입니다. 카운터 값은 여러 미션 그룹에서 참조할 수 있기 때문에, 하나의 카운터를 위클리 미션과 데일리 미션 같은 여러 미션 그룹의 달성 조건으로 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 counterId string ※ ~ 1024자 카운터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scopes List [] 1 ~ 20 items 카운터의 리셋 타이밍 목록 이 카운터의 스코프(리셋 타이밍 또는 검증 액션 조건)를 정의합니다. 하나의 카운터에 여러 스코프를 설정할 수 있으며, 서로 다른 기간의 값(예: 데일리, 위클리, 누계를 동시에)을 추적할 수 있습니다. challengePeriodEventId string ~ 1024자 카운터를 조작할 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 카운터의 증감이 가능한 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 카운터는 언제든지 조작할 수 있습니다. CounterScopeModel 카운터 리셋 타이밍 모델 카운터의 스코프를 정의하고, 카운터 값의 리셋 방법과 타이밍을 결정합니다. 스코프는 리셋 타이밍(매일, 매주, 매월, 일정 일수마다, 또는 리셋 없음) 또는 검증 액션 조건 중 하나입니다. 각 카운터는 여러 스코프를 가질 수 있으며, 서로 다른 기간의 값을 추적할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프의 종류 카운터 스코프의 정의 방법을 결정합니다. “resetTiming” 은 정기적인 리셋 스케줄을 사용하고, “verifyAction” 은 검증 액션으로 카운터 값이 적용되는지 여부를 판정합니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 이 스코프의 카운터 값이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구 누계), 매일, 매주, 매월, 일정 일수마다 중에서 선택합니다. scopeType 이 “resetTiming” 인 경우에만 사용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋할 날짜 카운터 값이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType 이 “monthly” 인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋할 요일 카운터 값이 리셋되는 요일입니다. resetType 이 “weekly” 인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 카운터 값이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건명 이 검증 액션 조건 스코프를 식별하는 고유한 이름입니다. 카운터 내에서 대응하는 스코프 값을 조회하는 데 사용됩니다. scopeType 이 “verifyAction” 인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 condition VerifyAction {scopeType} == “verifyAction” ※ 조건 이 스코프의 카운터 값이 적용되는지 여부를 판정하는 검증 액션입니다. scopeType이 “verifyAction\"인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 카운터 값의 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 MissionGroupModel 미션 그룹 모델 미션 그룹은 카운터의 리셋 타이밍으로 태스크를 그룹화하는 엔티티입니다. 예를 들어, 데일리 미션으로 하나의 그룹, 위클리 미션으로 하나의 그룹이 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 missionGroupId string ※ ~ 1024자 미션 그룹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tasks List [] 0 ~ 1000 items 미션 태스크 리스트 이 그룹에 속하는 미션 태스크입니다. 각 태스크는 달성 조건(카운터의 임계값 또는 검증 액션)과 달성 시 부여되는 보상을 정의합니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 미션 그룹의 달성 상황이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구), 매일, 매주, 매월, 기준 일시부터 일정 일수마다 중에서 선택합니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋하는 날짜 미션 그룹이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType이 “monthly\"인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋하는 요일 미션 그룹이 리셋되는 요일입니다. resetType이 “weekly\"인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 미션 그룹이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 completeNotificationNamespaceId string ~ 1024자 미션 태스크를 달성했을 때의 푸시 통지 이 그룹 내의 미션 태스크가 달성되었을 때 푸시 통지를 전송하는 데 사용되는 GS2-Gateway의 네임스페이스 GRN입니다. 게임 클라이언트에 실시간으로 통지할 수 있습니다. anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 MissionTaskModel 미션 태스크 모델 미션 태스크는 연결된 카운터의 값이 일정 수준을 초과하면 보상을 받을 수 있는 조건을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 missionTaskId string ※ ~ 1024자 미션 태스크 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyCompleteType 문자열 열거형 enum {   “counter”,   “verifyActions” } “counter” 달성 조건 종류 미션 태스크의 달성 판정 방법을 지정합니다. “counter\"는 관련된 카운터의 스코프 값이 목표 임곗값에 도달했는지 확인합니다. “verifyActions\"는 검증 액션을 사용하여 달성 조건을 확인합니다. 정의 설명 counter 카운터 verifyActions 검증 액션 targetCounter TargetCounterModel {verifyCompleteType} == “counter” ※ 목표 카운터 미션 태스크의 달성 판정에 사용되는 카운터, 스코프, 목표값을 정의합니다. 카운터의 스코프 값이 지정된 목표값에 도달하거나 초과한 경우, 태스크가 달성된 것으로 간주됩니다. ※ verifyCompleteType이(가) “counter” 이면 필수 verifyCompleteConsumeActions List {verifyCompleteType} == “verifyActions” [] 0 ~ 10 items 태스크 달성 판정에 사용하는 검증 액션 미션 태스크의 달성 판정에 사용되는 검증 액션의 목록입니다. 모든 검증 액션이 성공한 경우 태스크가 달성된 것으로 간주됩니다. verifyCompleteType이 “verifyActions\"인 경우에만 사용됩니다. ※ verifyCompleteType이(가) “verifyActions” 이면 활성화 completeAcquireActions List [] 0 ~ 100 items 미션 달성 시 보상 플레이어가 미션 달성 보상을 받을 때 실행되는 입수 액션의 목록입니다. challengePeriodEventId string ~ 1024자 보상을 받을 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 미션 태스크의 보상을 받을 수 있는 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 달성 후 언제든지 보상을 받을 수 있습니다. premiseMissionTaskName string ~ 128자 이 태스크에 도전하기 위해 달성해 두어야 하는 태스크의 이름 이 태스크의 보상을 받기 전에 달성해 두어야 하는, 같은 그룹 내의 전제 미션 태스크를 지정합니다. 단계적인 미션 체인을 만드는 데 사용합니다. TargetCounterModel 목표 카운터 미션의 달성 목표가 되는 카운터의 정보 타입 활성화 조건 필수 기본값 값 제한 설명 counterName string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 미션 달성 판정에 사용하는 카운터 스코프의 종류를 지정합니다. “resetTiming\"은 특정 리셋 기간의 카운터 값을 평가하고, “verifyAction\"은 이름이 지정된 조건의 값을 평가합니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” 목표 리셋 타이밍 목표값과 비교할 카운터의 리셋 타이밍 스코프를 지정합니다. 예를 들어 “daily\"를 선택하면 데일리 카운터 값을 확인합니다. 생략한 경우, 미션 그룹의 리셋 타이밍이 사용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 활성화 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 목표값과 비교할 검증 액션 조건 스코프의 이름입니다. 카운터 모델의 스코프에서 정의된 conditionName과 일치해야 합니다. scopeType이 “verifyAction\"인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long  0 ~ 9223372036854775805 목표값 미션 태스크가 달성된 것으로 간주되기 위해, 카운터의 스코프 값이 도달하거나 초과해야 하는 임곗값입니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Mission Deploy/CDK 레퍼런스","url":"/ko/api_reference/mission/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 머니 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. priority 문자열 열거형 enum {   “free”,   “paid” }  소비 우선순위 지갑에서 통화를 소비할 때, 유료 통화와 무료 통화 중 어느 쪽을 먼저 소비할지를 결정합니다. “free\"로 설정하면 무료 통화(단가=0)가 먼저 소비되고, 그 다음 단가가 높은 유료 통화가 소비됩니다. “paid\"로 설정하면 단가가 높은 유료 통화가 먼저 소비되고, 그 다음 무료 통화가 소비됩니다. 정의 설명 free 무료 통화를 우선해서 사용한다 paid 유료 통화를 우선해서 사용한다 shareFree bool  무료 통화 공유 무료 통화를 모든 지갑 슬롯 간에 공유할지 여부입니다. 활성화하면 무료 통화 잔액이 슬롯 0에서 다른 모든 슬롯으로 동기화되어, 서로 다른 플랫폼의 플레이어가 동일한 무료 통화 풀을 공유할 수 있습니다. 유료 통화는 이 설정과 관계없이 항상 슬롯별로 별도로 관리됩니다. currency 문자열 열거형 enum {   “JPY”,   “USD”,   “TWD” }  통화 종류 가격 설정과 자금결제법 준수 계산에 사용되는 실제 통화입니다. 유료 통화 가치 추적과 환불 의무 계산 시의 측정 단위를 결정합니다. 네임스페이스 생성 후에는 변경할 수 없습니다. 정의 설명 JPY 일본 엔 USD 미국 달러 TWD 대만 달러 appleKey string ~ 1024자 Apple App Store 번들 ID Apple App Store의 구매 영수증을 검증하는 데 사용되는 iOS 앱의 Bundle ID입니다. iOS 기기로부터의 인앱 구매를 받으려면 필요합니다. googleKey string ~ 5120자 Google PlayStore 비밀 키 Google Play의 구매 영수증을 검증하는 데 사용되는 서비스 계정의 비밀 키입니다. Android 기기로부터의 인앱 구매를 받으려면 필요합니다. enableFakeReceipt bool false 가짜 영수증 활성화 테스트 목적으로 Unity Editor가 생성하는 가짜 구매 영수증을 허용할지 여부입니다. 개발/테스트 환경에서만 활성화해야 하며, 부정한 통화 지급을 방지하기 위해 운영 환경에서는 반드시 비활성화해야 합니다. 기본값은 false입니다. createWalletScript ScriptSetting 지갑 생성 시 스크립트 새로운 지갑이 처음 생성될 때 실행되는 스크립트입니다. 지갑은 최초 접근 시 자동으로 생성되므로, 플레이어가 통화 시스템에 처음 접근했을 때 이 스크립트가 트리거됩니다. depositScript ScriptSetting 잔액 충전 시 스크립트 지갑에 통화가 충전될 때 실행되는 스크립트입니다. 유료 통화 충전(스토어 구매)과 무료 통화 지급 양쪽에서 트리거됩니다. withdrawScript ScriptSetting 잔액 소비 시 스크립트 지갑에서 통화가 소비될 때 실행되는 스크립트입니다. 소비 우선순위 설정에 따라 유료 통화 또는 무료 통화가 차감될 때 트리거됩니다. logSetting LogSetting 로그 출력 설정 API 요청/응답 로그를 GS2-Log에 출력하기 위한 설정입니다. 설정하면 지갑 조작(충전, 소비, 구매)이 모니터링, 감사, 분석을 위해 로그로 출력됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Money::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null Priority : paid ShareFree : false Currency : USD AppleKey : null GoogleKey : null EnableFakeReceipt : null CreateWalletScript : null DepositScript : null WithdrawScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/money\" ) SampleStack := core . NewStack () money . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , money . NamespacePriorityPaid , false , money . NamespaceCurrencyUsd , money . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Money\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , priority : \\Gs2Cdk\\Money\\Model\\Enums\\NamespacePriority :: PAID , shareFree : false , currency : \\Gs2Cdk\\Money\\Model\\Enums\\NamespaceCurrency :: USD , options : new \\Gs2Cdk\\Money\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . money . model . Namespace ( this , \"namespace-0001\" , io . gs2 . cdk . money . model . enums . NamespacePriority . PAID , false , io . gs2 . cdk . money . model . enums . NamespaceCurrency . USD , new io . gs2 . cdk . money . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Money . Model . Namespace ( stack : this , name : \"namespace-0001\" , priority : Gs2Cdk . Gs2Money . Model . Enums . NamespacePriority . Paid , shareFree : false , currency : Gs2Cdk . Gs2Money . Model . Enums . NamespaceCurrency . Usd , options : new Gs2Cdk . Gs2Money . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import money from \"@/gs2cdk/money\" ; class SampleStack extends core . Stack { public constructor () { super (); new money . model . Namespace ( this , \"namespace-0001\" , money . model . NamespacePriority . PAID , false , money . model . NamespaceCurrency . USD , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , money class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () money . Namespace ( stack = self , name = 'namespace-0001' , priority = money . NamespacePriority . PAID , share_free = False , currency = money . NamespaceCurrency . USD , options = money . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Money Deploy/CDK 레퍼런스","url":"/ko/api_reference/money/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. currencyUsagePriority 문자열 열거형 enum {   “PrioritizeFree”,   “PrioritizePaid” }  소비 우선순위 지갑에서 출금할 때 유상 재화와 무상 재화 중 어느 것을 먼저 소비할지를 결정합니다. “PrioritizeFree\"는 무상 재화를 우선하고, “PrioritizePaid\"는 유상 재화를 우선합니다. 정의 설명 PrioritizeFree 무료 통화를 우선해서 사용한다 PrioritizePaid 유료 통화를 우선해서 사용한다 description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 재화의 입금·출금 시 사용되는 분산 트랜잭션의 설정입니다. sharedFreeCurrency bool  무상 재화를 다른 슬롯과 공유할지 여부 활성화하면 무상 재화 잔액이 모든 지갑 슬롯(플랫폼) 간에 공유됩니다. 유상 재화는 슬롯별로 분리된 상태로 유지됩니다. 이 설정은 네임스페이스 생성 시에만 설정할 수 있으며, 이후에는 변경할 수 없습니다. platformSetting PlatformSetting  스토어 플랫폼 설정 지원되는 각 스토어 플랫폼(Apple App Store, Google Play, 테스트용 Fake)의 설정입니다. 각 플랫폼에서의 영수증 검증에 필요한 인증 정보와 키를 포함합니다. depositBalanceScript ScriptSetting 지갑 잔액을 가산했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - deposit withdrawBalanceScript ScriptSetting 지갑 잔액을 소비했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - withdraw verifyReceiptScript ScriptSetting 영수증 검증을 실행했을 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - verifyReceipt subscribeScript string ~ 1024자 기간 결제를 신규 계약할 때 실행할 GS2-Script 스크립트 GRN(사용자 연결 변경 시에는 호출되지 않음/한 번 계약이 실효된 후 다시 계약한 경우에도 호출됨) Script 트리거 레퍼런스 - subscribe renewScript string ~ 1024자 기간 결제를 갱신할 때 실행할 GS2-Script 스크립트 GRN Script 트리거 레퍼런스 - renew unsubscribeScript string ~ 1024자 기간 결제를 해지할 때 실행할 GS2-Script 스크립트 GRN(사용자 연결 변경 시에는 호출되지 않음) Script 트리거 레퍼런스 - unsubscribe takeOverScript ScriptSetting 기간 결제에 연결된 사용자를 변경할 때 실행할 스크립트의 설정 Script 트리거 레퍼런스 - takeOver changeSubscriptionStatusNotification NotificationSetting 기간 결제의 계약 상태가 변화했을 때의 푸시 알림 구독 상태가 변화했을 때(활성화, 갱신, 해지, 만료, 취소 등) GS2-Gateway를 통해 전송되는 푸시 알림 설정입니다. 게임 클라이언트가 구독 상태 변화에 실시간으로 대응할 수 있도록 합니다. logSetting LogSetting 로그 출력 설정 이 네임스페이스에 대한 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 입금, 출금, 영수증 검증, 구독 이벤트의 추적에 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Money2::Namespace Properties : Name : namespace-0001 CurrencyUsagePriority : PrioritizeFree Description : null TransactionSetting : null SharedFreeCurrency : false PlatformSetting : {} DepositBalanceScript : null WithdrawBalanceScript : null VerifyReceiptScript : null SubscribeScript : null RenewScript : null UnsubscribeScript : null TakeOverScript : null ChangeSubscriptionStatusNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/money2\" ) SampleStack := core . NewStack () money2 . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , money2 . NamespaceCurrencyUsagePriorityPrioritizeFree , false , money2 . PlatformSetting { AppleAppStore : nil , GooglePlay : nil , Fake : nil , }, money2 . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Money2\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , currencyUsagePriority : \\Gs2Cdk\\Money2\\Model\\Enums\\NamespaceCurrencyUsagePriority :: PRIORITIZE_FREE , sharedFreeCurrency : false , platformSetting : new \\Gs2Cdk\\Money2\\Model\\PlatformSetting (), options : new \\Gs2Cdk\\Money2\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . money2 . model . Namespace ( this , \"namespace-0001\" , io . gs2 . cdk . money2 . model . enums . NamespaceCurrencyUsagePriority . PRIORITIZE_FREE , false , new io . gs2 . cdk . money2 . model . PlatformSetting (), new io . gs2 . cdk . money2 . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Money2 . Model . Namespace ( stack : this , name : \"namespace-0001\" , currencyUsagePriority : Gs2Cdk . Gs2Money2 . Model . Enums . NamespaceCurrencyUsagePriority . PrioritizeFree , sharedFreeCurrency : false , platformSetting : new Gs2Cdk . Gs2Money2 . Model . PlatformSetting (), options : new Gs2Cdk . Gs2Money2 . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import money2 from \"@/gs2cdk/money2\" ; class SampleStack extends core . Stack { public constructor () { super (); new money2 . model . Namespace ( this , \"namespace-0001\" , money2 . model . NamespaceCurrencyUsagePriority . PRIORITIZE_FREE , false , new money2 . model . PlatformSetting (), { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , money2 class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () money2 . Namespace ( stack = self , name = 'namespace-0001' , currency_usage_priority = money2 . NamespaceCurrencyUsagePriority . PRIORITIZE_FREE , shared_free_currency = False , platform_setting = money2 . PlatformSetting (), options = money2 . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. PlatformSetting 스토어 플랫폼 설정 지원되는 모든 스토어 플랫폼의 설정을 통합합니다. Apple App Store, Google Play, Fake(Unity Editor에서의 테스트용) 설정을 포함합니다. 각 플랫폼 설정에는 영수증 검증에 필요한 인증 정보와 키가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 appleAppStore AppleAppStoreSetting Apple App Store 설정 Apple App Store 영수증 검증에 사용하는 인증 정보입니다. 번들 ID, 공유 비밀 키, Issuer ID, 키 ID, 비공개 키를 포함합니다. googlePlay GooglePlaySetting Google Play 설정 Google Play 영수증 검증에 사용하는 인증 정보입니다. 패키지 이름과 서명 검증용 공개 키를 포함합니다. fake FakeSetting Fake(Unity Editor) 설정 개발 및 테스트 중에 Unity Editor가 생성하는 가짜 영수증을 수용하기 위한 설정입니다. AppleAppStoreSetting Apple App Store 설정 Apple App Store 영수증 검증을 위한 설정입니다. Apple의 영수증 검증 서버와 통신하는 데 필요한 인증 정보를 포함하며, 번들 ID, 공유 비밀 키, App Store Connect의 Issuer ID, 키 ID, 비밀 키가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 bundleId string ~ 1024자 Apple App Store 번들 ID sharedSecretKey string ~ 1024자 AppStore Connect에서 발급한 영수증의 암호화에 사용되는 공유 비밀 키 issuerId string ~ 1024자 AppStore Connect에 등록된 인앱 결제의 Issuer ID keyId string ~ 1024자 Apple에 등록된 키 ID privateKeyPem string ~ 10240자 Apple로부터 받은 비밀 키 GooglePlaySetting Google Play 설정 Google Play 영수증 검증을 위한 설정입니다. Google Play의 구매 서명을 검증하는 데 필요한 패키지 이름과 공개 키를 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 packageName string ~ 5120자 Google Play에서 배포하는 패키지 이름 publicKey string ~ 5120자 서명 검증에 사용하는 공개 키 FakeSetting 디버그용 가짜 플랫폼 설정 개발 중 Unity Editor가 생성하는 가짜 영수증 처리에 관한 설정입니다. 가짜 영수증을 허용할지 거부할지를 제어하여, 실제 스토어 플랫폼을 사용하지 않고도 인앱 결제 흐름을 테스트할 수 있도록 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 acceptFakeReceipt 문자열 열거형 enum {   “Accept”,   “Reject” } “Reject” Unity Editor가 출력하는 가짜 영수증으로 결제할 수 있도록 할지 여부 가짜 영수증의 허용 여부를 제어합니다. 개발·테스트 중에는 “Accept\"로 설정하고, 프로덕션 환경에서는 부정한 재화 입금을 방지하기 위해 “Reject\"로 설정하세요. 정의 설명 Accept 허용 Reject 거부 CurrentModelMaster 현재 활성화되어 있는 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Money2 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentModelMaster 갱신된 현재 활성화된 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Money2::CurrentModelMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2024-06-20\" , \"storeContentModels\": [ { \"name\": \"content-0001\" , \"appleAppStore\" : { \"productId\": \"io.gs2.sample.apple.product1\" } , \"googlePlay\" : { \"productId\": \"io.gs2.sample.google.product1\" } } , { \"name\": \"content-0002\" , \"appleAppStore\" : { \"productId\": \"io.gs2.sample.apple.product2\" } , \"googlePlay\" : { \"productId\": \"io.gs2.sample.google.product2\" } } , { \"name\": \"apple-only-0001\" , \"appleAppStore\" : { \"productId\": \"io.gs2.sample.apple.product3\" } } , { \"name\": \"google-only-0001\" , \"googlePlay\" : { \"productId\": \"io.gs2.sample.google.product3\" } } ], \"storeSubscriptionContentModels\": [] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/money2\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () money2 . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , money2 . NamespaceCurrencyUsagePriorityPrioritizeFree , false , money2 . PlatformSetting { AppleAppStore : nil , GooglePlay : nil , Fake : nil , }, money2 . NamespaceOptions {}, ). MasterData ( [] money2 . StoreContentModel { money2 . NewStoreContentModel ( \"content-0001\" , money2 . StoreContentModelOptions { AppleAppStore : \u0026 money2 . AppleAppStoreContent { ProductId : pointy . String ( \"io.gs2.sample.apple.product1\" ), }, GooglePlay : \u0026 money2 . GooglePlayContent { ProductId : pointy . String ( \"io.gs2.sample.google.product1\" ), }, }, ), money2 . NewStoreContentModel ( \"content-0002\" , money2 . StoreContentModelOptions { AppleAppStore : \u0026 money2 . AppleAppStoreContent { ProductId : pointy . String ( \"io.gs2.sample.apple.product2\" ), }, GooglePlay : \u0026 money2 . GooglePlayContent { ProductId : pointy . String ( \"io.gs2.sample.google.product2\" ), }, }, ), money2 . NewStoreContentModel ( \"apple-only-0001\" , money2 . StoreContentModelOptions { AppleAppStore : \u0026 money2 . AppleAppStoreContent { ProductId : pointy . String ( \"io.gs2.sample.apple.product3\" ), }, }, ), money2 . NewStoreContentModel ( \"google-only-0001\" , money2 . StoreContentModelOptions { GooglePlay : \u0026 money2 . GooglePlayContent { ProductId : pointy . String ( \"io.gs2.sample.google.product3\" ), }, }, ), }, [] money2 . StoreSubscriptionContentModel { }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Money2\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , currencyUsagePriority : \\Gs2Cdk\\Money2\\Model\\Enums\\NamespaceCurrencyUsagePriority :: PRIORITIZE_FREE , sharedFreeCurrency : false , platformSetting : new \\Gs2Cdk\\Money2\\Model\\PlatformSetting (), )) -\u003e masterData ( [ new \\Gs2Cdk\\Money2\\Model\\StoreContentModel ( name : \"content-0001\" , options : new \\Gs2Cdk\\Money2\\Model\\Options\\StoreContentModelOptions ( appleAppStore : new \\Gs2Cdk\\Money2\\Model\\AppleAppStoreContent ( options : new \\Gs2Cdk\\Money2\\Model\\Options\\AppleAppStoreContentOptions ( productId : \"io.gs2.sample.apple.product1\" , ), ), googlePlay : new \\Gs2Cdk\\Money2\\Model\\GooglePlayContent ( options : new \\Gs2Cdk\\Money2\\Model\\Options\\GooglePlayContentOptions ( productId : \"io.gs2.sample.google.product1\" , ), ) ) ), new \\Gs2Cdk\\Money2\\Model\\StoreContentModel ( name : \"content-0002\" , options : new \\Gs2Cdk\\Money2\\Model\\Options\\StoreContentModelOptions ( appleAppStore : new \\Gs2Cdk\\Money2\\Model\\AppleAppStoreContent ( options : new \\Gs2Cdk\\Money2\\Model\\Options\\AppleAppStoreContentOptions ( productId : \"io.gs2.sample.apple.product2\" , ), ), googlePlay : new \\Gs2Cdk\\Money2\\Model\\GooglePlayContent ( options : new \\Gs2Cdk\\Money2\\Model\\Options\\GooglePlayContentOptions ( productId : \"io.gs2.sample.google.product2\" , ), ) ) ), new \\Gs2Cdk\\Money2\\Model\\StoreContentModel ( name : \"apple-only-0001\" , options : new \\Gs2Cdk\\Money2\\Model\\Options\\StoreContentModelOptions ( appleAppStore : new \\Gs2Cdk\\Money2\\Model\\AppleAppStoreContent ( options : new \\Gs2Cdk\\Money2\\Model\\Options\\AppleAppStoreContentOptions ( productId : \"io.gs2.sample.apple.product3\" , ), ) ) ), new \\Gs2Cdk\\Money2\\Model\\StoreContentModel ( name : \"google-only-0001\" , options : new \\Gs2Cdk\\Money2\\Model\\Options\\StoreContentModelOptions ( googlePlay : new \\Gs2Cdk\\Money2\\Model\\GooglePlayContent ( options : new \\Gs2Cdk\\Money2\\Model\\Options\\GooglePlayContentOptions ( productId : \"io.gs2.sample.google.product3\" , ), ) ) ) ], [ ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . money2 . model . Namespace ( this , \"namespace-0001\" , io . gs2 . cdk . money2 . model . enums . NamespaceCurrencyUsagePriority . PRIORITIZE_FREE , false , null ). masterData ( Arrays . asList ( new io . gs2 . cdk . money2 . model . StoreContentModel ( \"content-0001\" , new io . gs2 . cdk . money2 . model . options . StoreContentModelOptions () . withAppleAppStore ( new io . gs2 . cdk . money2 . model . AppleAppStoreContent ( new io . gs2 . cdk . money2 . model . options . AppleAppStoreContentOptions () . withProductId ( \"io.gs2.sample.apple.product1\" ) )) . withGooglePlay ( new io . gs2 . cdk . money2 . model . GooglePlayContent ( new io . gs2 . cdk . money2 . model . options . GooglePlayContentOptions () . withProductId ( \"io.gs2.sample.google.product1\" ) )) ), new io . gs2 . cdk . money2 . model . StoreContentModel ( \"content-0002\" , new io . gs2 . cdk . money2 . model . options . StoreContentModelOptions () . withAppleAppStore ( new io . gs2 . cdk . money2 . model . AppleAppStoreContent ( new io . gs2 . cdk . money2 . model . options . AppleAppStoreContentOptions () . withProductId ( \"io.gs2.sample.apple.product2\" ) )) . withGooglePlay ( new io . gs2 . cdk . money2 . model . GooglePlayContent ( new io . gs2 . cdk . money2 . model . options . GooglePlayContentOptions () . withProductId ( \"io.gs2.sample.google.product2\" ) )) ), new io . gs2 . cdk . money2 . model . StoreContentModel ( \"apple-only-0001\" , new io . gs2 . cdk . money2 . model . options . StoreContentModelOptions () . withAppleAppStore ( new io . gs2 . cdk . money2 . model . AppleAppStoreContent ( new io . gs2 . cdk . money2 . model . options . AppleAppStoreContentOptions () . withProductId ( \"io.gs2.sample.apple.product3\" ) )) ), new io . gs2 . cdk . money2 . model . StoreContentModel ( \"google-only-0001\" , new io . gs2 . cdk . money2 . model . options . StoreContentModelOptions () . withGooglePlay ( new io . gs2 . cdk . money2 . model . GooglePlayContent ( new io . gs2 . cdk . money2 . model . options . GooglePlayContentOptions () . withProductId ( \"io.gs2.sample.google.product3\" ) )) ) ), Arrays . asList ( ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Money2 . Model . Namespace ( stack : this , name : \"namespace-0001\" , currencyUsagePriority : Gs2Cdk . Gs2Money2 . Model . Enums . NamespaceCurrencyUsagePriority . PrioritizeFree , sharedFreeCurrency : false , platformSetting : null ). MasterData ( new Gs2Cdk . Gs2Money2 . Model . StoreContentModel [] { new Gs2Cdk . Gs2Money2 . Model . StoreContentModel ( name : \"content-0001\" , options : new Gs2Cdk . Gs2Money2 . Model . Options . StoreContentModelOptions { appleAppStore = new Gs2Cdk . Gs2Money2 . Model . AppleAppStoreContent ( options : new Gs2Cdk . Gs2Money2 . Model . Options . AppleAppStoreContentOptions { productId = \"io.gs2.sample.apple.product1\" } ), googlePlay = new Gs2Cdk . Gs2Money2 . Model . GooglePlayContent ( options : new Gs2Cdk . Gs2Money2 . Model . Options . GooglePlayContentOptions { productId = \"io.gs2.sample.google.product1\" } ) } ), new Gs2Cdk . Gs2Money2 . Model . StoreContentModel ( name : \"content-0002\" , options : new Gs2Cdk . Gs2Money2 . Model . Options . StoreContentModelOptions { appleAppStore = new Gs2Cdk . Gs2Money2 . Model . AppleAppStoreContent ( options : new Gs2Cdk . Gs2Money2 . Model . Options . AppleAppStoreContentOptions { productId = \"io.gs2.sample.apple.product2\" } ), googlePlay = new Gs2Cdk . Gs2Money2 . Model . GooglePlayContent ( options : new Gs2Cdk . Gs2Money2 . Model . Options . GooglePlayContentOptions { productId = \"io.gs2.sample.google.product2\" } ) } ), new Gs2Cdk . Gs2Money2 . Model . StoreContentModel ( name : \"apple-only-0001\" , options : new Gs2Cdk . Gs2Money2 . Model . Options . StoreContentModelOptions { appleAppStore = new Gs2Cdk . Gs2Money2 . Model . AppleAppStoreContent ( options : new Gs2Cdk . Gs2Money2 . Model . Options . AppleAppStoreContentOptions { productId = \"io.gs2.sample.apple.product3\" } ) } ), new Gs2Cdk . Gs2Money2 . Model . StoreContentModel ( name : \"google-only-0001\" , options : new Gs2Cdk . Gs2Money2 . Model . Options . StoreContentModelOptions { googlePlay = new Gs2Cdk . Gs2Money2 . Model . GooglePlayContent ( options : new Gs2Cdk . Gs2Money2 . Model . Options . GooglePlayContentOptions { productId = \"io.gs2.sample.google.product3\" } ) } ) }, new Gs2Cdk . Gs2Money2 . Model . StoreSubscriptionContentModel [] { } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import money2 from \"@/gs2cdk/money2\" ; class SampleStack extends core . Stack { public constructor () { super (); new money2 . model . Namespace ( this , \"namespace-0001\" , money2 . model . NamespaceCurrencyUsagePriority . PRIORITIZE_FREE , false , new money2 . model . PlatformSetting () ). masterData ( [ new money2 . model . StoreContentModel ( \"content-0001\" , { appleAppStore : new money2 . model . AppleAppStoreContent ( { productId : \"io.gs2.sample.apple.product1\" } ), googlePlay : new money2 . model . GooglePlayContent ( { productId : \"io.gs2.sample.google.product1\" } ) } ), new money2 . model . StoreContentModel ( \"content-0002\" , { appleAppStore : new money2 . model . AppleAppStoreContent ( { productId : \"io.gs2.sample.apple.product2\" } ), googlePlay : new money2 . model . GooglePlayContent ( { productId : \"io.gs2.sample.google.product2\" } ) } ), new money2 . model . StoreContentModel ( \"apple-only-0001\" , { appleAppStore : new money2 . model . AppleAppStoreContent ( { productId : \"io.gs2.sample.apple.product3\" } ) } ), new money2 . model . StoreContentModel ( \"google-only-0001\" , { googlePlay : new money2 . model . GooglePlayContent ( { productId : \"io.gs2.sample.google.product3\" } ) } ) ], [ ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , money2 class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () money2 . Namespace ( stack = self , name = \"namespace-0001\" , currency_usage_priority = money2 . NamespaceCurrencyUsagePriority . PRIORITIZE_FREE , shared_free_currency = False , platform_setting = money2 . PlatformSetting (), ) . master_data ( store_content_models = [ money2 . StoreContentModel ( name = 'content-0001' , options = money2 . StoreContentModelOptions ( apple_app_store = money2 . AppleAppStoreContent ( options = money2 . AppleAppStoreContentOptions ( product_id = 'io.gs2.sample.apple.product1' , ), ), google_play = money2 . GooglePlayContent ( options = money2 . GooglePlayContentOptions ( product_id = 'io.gs2.sample.google.product1' , ), ) ), ), money2 . StoreContentModel ( name = 'content-0002' , options = money2 . StoreContentModelOptions ( apple_app_store = money2 . AppleAppStoreContent ( options = money2 . AppleAppStoreContentOptions ( product_id = 'io.gs2.sample.apple.product2' , ), ), google_play = money2 . GooglePlayContent ( options = money2 . GooglePlayContentOptions ( product_id = 'io.gs2.sample.google.product2' , ), ) ), ), money2 . StoreContentModel ( name = 'apple-only-0001' , options = money2 . StoreContentModelOptions ( apple_app_store = money2 . AppleAppStoreContent ( options = money2 . AppleAppStoreContentOptions ( product_id = 'io.gs2.sample.apple.product3' , ), ) ), ), money2 . StoreContentModel ( name = 'google-only-0001' , options = money2 . StoreContentModelOptions ( google_play = money2 . GooglePlayContent ( options = money2 . GooglePlayContentOptions ( product_id = 'io.gs2.sample.google.product3' , ), ) ), ), ], store_subscription_content_models = [ ], ) print ( SampleStack () . yaml ()) # Generate Template StoreContentModel 스토어 콘텐츠 모델 다양한 스토어 플랫폼의 콘텐츠를 저장하는 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 storeContentModelId string ※ ~ 1024자 스토어 콘텐츠 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스토어 콘텐츠 모델 이름 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. appleAppStore AppleAppStoreContent Apple App Store의 콘텐츠 이 스토어 콘텐츠의 Apple App Store 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. googlePlay GooglePlayContent Google Play의 콘텐츠 이 스토어 콘텐츠의 Google Play 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. AppleAppStoreContent Apple App Store의 콘텐츠 인앱 결제 상품에 대응하는 Apple App Store의 프로덕트 ID를 포함합니다. 영수증 검증 시 대조에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 이 인앱 결제 아이템에 대해 App Store Connect에 등록된 Apple App Store의 프로덕트 식별자입니다. GooglePlayContent Google Play의 콘텐츠 인앱 결제 상품에 대응하는 Google Play의 프로덕트 ID를 포함합니다. 영수증 검증 시 대조에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 이 인앱 결제 아이템에 대해 Google Play Console에 등록되어 있는 Google Play의 프로덕트 식별자입니다. StoreSubscriptionContentModel 스토어 구독 콘텐츠 모델 다양한 스토어 플랫폼의 구독 콘텐츠를 저장하는 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 storeSubscriptionContentModelId string ※ ~ 1024자 구독 콘텐츠 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스토어 구독 콘텐츠 모델 이름 metadata string ~ 1024자 메타데이터 scheduleNamespaceId string  ~ 1024자 구독 기간을 연동시킬 GS2-Schedule의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN triggerName string  ~ 128자 구독 기간을 반영하는 트리거 이름 구독의 유효 기간을 반영하기 위해 실행되는 GS2-Schedule의 트리거 이름입니다. 트리거의 지속 시간은 구독의 유효 기한으로 설정됩니다. triggerExtendMode 문자열 열거형 enum {   “just”,   “rollupHour” } “just” 구독 기간을 트리거에 반영할 때의 모드 구독의 유효 기한을 트리거의 지속 시간에 어떻게 매핑할지를 제어합니다. “just\"는 구독 기간을 그대로 사용합니다. “rollupHour\"는 지정한 시각(UTC)까지 연장하여 하루 중간에 만료되는 것을 방지합니다. 정의 설명 just 그대로 구독 기간을 반영 rollupHour 다음 날짜 변경 시각까지 연장하여 구독 기간을 반영 rollupHour int {triggerExtendMode} == “rollupHour” 0 0 ~ 23 날짜 변경 시각(UTC) triggerExtendMode가 “rollupHour\"인 경우, 구독 기간은 유효 기한일의 이 시각(0~23, UTC)까지 연장됩니다. 사용자의 플레이 세션 중에 구독이 만료되는 것을 방지합니다. ※ triggerExtendMode이(가) “rollupHour” 이면 활성화 reallocateSpanDays int 30 0 ~ 365 구독 계약 정보를 다른 사용자에게 할당할 수 있게 되는 기간(일) 마지막 할당 이후, 구독 계약을 다른 사용자에게 재할당할 수 있게 되기까지의 일수입니다. 사용자가 계정을 변경할 때의 부정 이용을 방지하기 위해 구독 이전에 대기 기간을 둡니다. appleAppStore AppleAppStoreSubscriptionContent Apple App Store 콘텐츠 이 구독 콘텐츠의 Apple App Store 구독 정보(구독 그룹 ID)입니다. googlePlay GooglePlaySubscriptionContent Google Play 콘텐츠 이 구독 콘텐츠의 Google Play 구독 정보(프로덕트 ID)입니다. AppleAppStoreSubscriptionContent Apple App Store의 기간 결제 콘텐츠 구독 기반 상품의 Apple App Store 구독 그룹 식별자를 포함합니다. 자동 갱신 구독의 관리와 검증에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 subscriptionGroupIdentifier string ~ 64자 구독 그룹 ID App Store Connect에 등록된 구독 그룹 식별자입니다. 동일 그룹 내의 구독은 상호 배타적이며, 사용자는 동시에 하나만 계약할 수 있습니다. GooglePlaySubscriptionContent Google Play 구독 콘텐츠 구독 기반 상품의 Google Play 프로덕트 ID를 포함합니다. Google Play에서 자동 갱신 구독을 관리하고 검증하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Money2 Deploy/CDK 레퍼런스","url":"/ko/api_reference/money2/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 logSetting LogSetting 로그 출력 설정 API 요청·응답 로그를 GS2-Log로 출력하기 위한 설정입니다. 설정하면 뉴스 관련 작업(게시글 조회, 콘텐츠 생성, Cookie 발급 등)이 모니터링과 분석을 위해 로그로 출력됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::News::Namespace Properties : Name : namespace-0001 Description : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/news\" ) SampleStack := core . NewStack () news . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , news . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\News\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\News\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . news . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . news . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2News . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2News . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import news from \"@/gs2cdk/news\" ; class SampleStack extends core . Stack { public constructor () { super (); new news . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , news class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () news . Namespace ( stack = self , name = 'namespace-0001' , options = news . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-News Deploy/CDK 레퍼런스","url":"/ko/api_reference/news/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 퀘스트 보상 지급 시 트랜잭션 처리 방식을 제어하는 설정입니다. startQuestScript ScriptSetting 퀘스트를 시작했을 때 실행할 스크립트 설정 Script 트리거 참조 - startQuest completeQuestScript ScriptSetting 퀘스트를 클리어했을 때 실행할 스크립트 설정 Script 트리거 참조 - completeQuest failedQuestScript ScriptSetting 퀘스트에 실패했을 때 실행할 스크립트 설정 Script 트리거 참조 - failedQuest logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 퀘스트의 시작·클리어·실패 이벤트를 추적하는 데 사용됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Quest::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 StartQuestScript : null CompleteQuestScript : null FailedQuestScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/quest\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () quest . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , quest . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Quest\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Quest\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . quest . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . quest . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Quest . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Quest . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import quest from \"@/gs2cdk/quest\" ; class SampleStack extends core . Stack { public constructor () { super (); new quest . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , quest class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () quest . Namespace ( stack = self , name = 'namespace-0001' , options = quest . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentQuestMaster 현재 활성화된 퀘스트 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 퀘스트 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 툴을 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Quest 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentQuestMaster 갱신된 현재 활성화된 퀘스트 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Quest::CurrentQuestMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-05-14\" , \"groups\": [ { \"name\": \"main\" , \"metadata\": \"MAIN\" , \"quests\": [ { \"name\": \"1-1\" , \"metadata\": \"stage1-1\" , \"contents\": [ { \"metadata\": \"normal\" , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ], \"weight\": 99 } , { \"metadata\": \"rare\" , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ], \"weight\": 1 } ], \"consumeActions\": [ { \"action\": \"Gs2Stamina:ConsumeStaminaByUserId\" , \"request\": { \"namespaceName\": \"basic\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"consumeValue\": 5 } } ], \"failedAcquireActions\": [ { \"action\": \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\": { \"namespaceName\": \"basic\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"recoverValue\": 5 } } ], \"premiseQuestNames\": [ ] } , { \"name\": \"1-2\" , \"metadata\": \"stage1-2\" , \"contents\": [ { \"metadata\": \"normal\" , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ], \"weight\": 98 } , { \"metadata\": \"rare\" , \"completeAcquireActions\": [ { \"action\": \"Gs2Experience:AddExperienceByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"experienceName\": \"player\" , \"propertyId\": \"player\" , \"experienceValue\": 30 , \"truncateExperienceWhenRankUp\": false , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ], \"weight\": 2 } ], \"consumeActions\": [ { \"action\": \"Gs2Stamina:ConsumeStaminaByUserId\" , \"request\": { \"namespaceName\": \"basic\" , \"staminaName\": \"quest\" , \"consumeValue\": 5 , \"userId\": \"#{userId}\" } } ], \"failedAcquireActions\": [ { \"action\": \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\": { \"namespaceName\": \"basic\" , \"staminaName\": \"quest\" , \"userId\": \"#{userId}\" , \"recoverValue\": 5 } } ], \"premiseQuestNames\": [ \"1-1\" ] } ] } , { \"name\": \"sub\" , \"metadata\": \"SUB\" , \"quests\": [ { \"name\": \"1-1\" , \"metadata\": \"stage1-1\" , \"contents\": [ { \"metadata\": \"normal\" , \"completeAcquireActions\": [ { \"action\": \"Gs2JobQueue:PushByUserId\" , \"request\": { \"namespaceName\": \"queue-0001\" , \"userId\": \"#{userId}\" , \"jobs\": [ { 'scriptId': 'script-0001', 'args' : { }, 'maxTryCount' : 3 } ] } } ], \"weight\": 1 } ], \"premiseQuestNames\": [ ] } ] } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/quest\" \"github.com/gs2io/gs2-golang-cdk/experience\" \"github.com/gs2io/gs2-golang-cdk/inventory\" \"github.com/gs2io/gs2-golang-cdk/stamina\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () quest . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , quest . NamespaceOptions {}, ). MasterData ( [] quest . QuestGroupModel { quest . NewQuestGroupModel ( \"main\" , quest . QuestGroupModelOptions { Metadata : pointy . String ( \"MAIN\" ), Quests : [] quest . QuestModel { quest . NewQuestModel ( \"1-1\" , [] quest . Contents { quest . NewContents ( 99 , quest . ContentsOptions { Metadata : pointy . String ( \"normal\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, }, ), quest . NewContents ( 1 , quest . ContentsOptions { Metadata : pointy . String ( \"rare\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, }, ), }, quest . QuestModelOptions { Metadata : pointy . String ( \"stage1-1\" ), ConsumeActions : [] core . ConsumeAction { stamina . ConsumeStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, FailedAcquireActions : [] core . AcquireAction { stamina . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, PremiseQuestNames : [] string {}, }, ), quest . NewQuestModel ( \"1-2\" , [] quest . Contents { quest . NewContents ( 98 , quest . ContentsOptions { Metadata : pointy . String ( \"normal\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, }, ), quest . NewContents ( 2 , quest . ContentsOptions { Metadata : pointy . String ( \"rare\" ), CompleteAcquireActions : [] core . AcquireAction { experience . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , pointy . Int64 ( 30 ), pointy . Bool ( false ), ), inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, }, ), }, quest . QuestModelOptions { Metadata : pointy . String ( \"stage1-2\" ), ConsumeActions : [] core . ConsumeAction { stamina . ConsumeStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, FailedAcquireActions : [] core . AcquireAction { stamina . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , ), }, PremiseQuestNames : [] string { \"1-1\" , }, }, ), }, }, ), quest . NewQuestGroupModel ( \"sub\" , quest . QuestGroupModelOptions { Metadata : pointy . String ( \"SUB\" ), Quests : [] quest . QuestModel { quest . NewQuestModel ( \"1-1\" , [] quest . Contents { quest . NewContents ( 1 , quest . ContentsOptions { Metadata : pointy . String ( \"normal\" ), CompleteAcquireActions : [] core . AcquireAction { jobQueue . PushByUserId ( \"queue-0001\" , \u0026 [] jobQueue . JobEntry { jobQueue . NewJobEntry ( \"script-0001\" , \"\" , 3 , jobQueue . JobEntryOptions {},), }, ), }, }, ), }, quest . QuestModelOptions { Metadata : pointy . String ( \"stage1-1\" ), PremiseQuestNames : [] string {}, }, ), }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Quest\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Quest\\Model\\QuestGroupModel ( name : \"main\" , options : new \\Gs2Cdk\\Quest\\Model\\Options\\QuestGroupModelOptions ( metadata : \"MAIN\" , quests : [ new \\Gs2Cdk\\Quest\\Model\\QuestModel ( name : \"1-1\" , contents : [ new \\Gs2Cdk\\Quest\\Model\\Contents ( weight : 99 , options : new \\Gs2Cdk\\Quest\\Model\\Options\\ContentsOptions ( metadata : \"normal\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Quest\\Model\\Contents ( weight : 1 , options : new \\Gs2Cdk\\Quest\\Model\\Options\\ContentsOptions ( metadata : \"rare\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ], ), ), ], options : new \\Gs2Cdk\\Quest\\Model\\Options\\QuestModelOptions ( metadata : \"stage1-1\" , consumeActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\ConsumeStaminaByUserId ( namespaceName : \"basic\" , staminaName : \"quest\" , userId : \"#{userId}\" , consumeValue : 5 ), ], failedAcquireActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\RecoverStaminaByUserId ( namespaceName : \"basic\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 5 ), ], premiseQuestNames : [], ), ), new \\Gs2Cdk\\Quest\\Model\\QuestModel ( name : \"1-2\" , contents : [ new \\Gs2Cdk\\Quest\\Model\\Contents ( weight : 98 , options : new \\Gs2Cdk\\Quest\\Model\\Options\\ContentsOptions ( metadata : \"normal\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Quest\\Model\\Contents ( weight : 2 , options : new \\Gs2Cdk\\Quest\\Model\\Options\\ContentsOptions ( metadata : \"rare\" , completeAcquireActions : [ new \\Gs2Cdk\\Experience\\StampSheet\\AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ], ), ), ], options : new \\Gs2Cdk\\Quest\\Model\\Options\\QuestModelOptions ( metadata : \"stage1-2\" , consumeActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\ConsumeStaminaByUserId ( namespaceName : \"basic\" , staminaName : \"quest\" , consumeValue : 5 , userId : \"#{userId}\" ), ], failedAcquireActions : [ new \\Gs2Cdk\\Stamina\\StampSheet\\RecoverStaminaByUserId ( namespaceName : \"basic\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 5 ), ], premiseQuestNames : [ \"1-1\" , ], ), ), ] ) ), new \\Gs2Cdk\\Quest\\Model\\QuestGroupModel ( name : \"sub\" , options : new \\Gs2Cdk\\Quest\\Model\\Options\\QuestGroupModelOptions ( metadata : \"SUB\" , quests : [ new \\Gs2Cdk\\Quest\\Model\\QuestModel ( name : \"1-1\" , contents : [ new \\Gs2Cdk\\Quest\\Model\\Contents ( weight : 1 , options : new \\Gs2Cdk\\Quest\\Model\\Options\\ContentsOptions ( metadata : \"normal\" , completeAcquireActions : [ new \\Gs2Cdk\\JobQueue\\StampSheet\\PushByUserId ( namespaceName : \"queue-0001\" , jobs : [ new \\Gs2Cdk\\JobQueue\\Model\\JobEntry ( scriptId : \"script-0001\" , args : \"\" , maxTryCount : 3 )], userId : \"#{userId}\" ), ], ), ), ], options : new \\Gs2Cdk\\Quest\\Model\\Options\\QuestModelOptions ( metadata : \"stage1-1\" , premiseQuestNames : [], ), ), ] ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . quest . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . quest . model . QuestGroupModel ( \"main\" , new io . gs2 . cdk . quest . model . options . QuestGroupModelOptions () . withMetadata ( \"MAIN\" ) . withQuests ( Arrays . asList ( new io . gs2 . cdk . quest . model . QuestModel ( \"1-1\" , Arrays . asList ( new io . gs2 . cdk . quest . model . Contents ( 99 , new io . gs2 . cdk . quest . model . options . ContentsOptions () . withMetadata ( \"normal\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) )) ), new io . gs2 . cdk . quest . model . Contents ( 1 , new io . gs2 . cdk . quest . model . options . ContentsOptions () . withMetadata ( \"rare\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) )) ) ), new io . gs2 . cdk . quest . model . options . QuestModelOptions () . withMetadata ( \"stage1-1\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . ConsumeStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) )) . withFailedAcquireActions ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) )) . withPremiseQuestNames ( new ArrayList String \u003e ()) ), new io . gs2 . cdk . quest . model . QuestModel ( \"1-2\" , Arrays . asList ( new io . gs2 . cdk . quest . model . Contents ( 98 , new io . gs2 . cdk . quest . model . options . ContentsOptions () . withMetadata ( \"normal\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) )) ), new io . gs2 . cdk . quest . model . Contents ( 2 , new io . gs2 . cdk . quest . model . options . ContentsOptions () . withMetadata ( \"rare\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30L , false , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) )) ) ), new io . gs2 . cdk . quest . model . options . QuestModelOptions () . withMetadata ( \"stage1-2\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . ConsumeStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) )) . withFailedAcquireActions ( Arrays . asList ( new io . gs2 . cdk . stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , \"#{userId}\" ) )) . withPremiseQuestNames ( Arrays . asList ( \"1-1\" )) ) )) ), new io . gs2 . cdk . quest . model . QuestGroupModel ( \"sub\" , new io . gs2 . cdk . quest . model . options . QuestGroupModelOptions () . withMetadata ( \"SUB\" ) . withQuests ( Arrays . asList ( new io . gs2 . cdk . quest . model . QuestModel ( \"1-1\" , Arrays . asList ( new io . gs2 . cdk . quest . model . Contents ( 1 , new io . gs2 . cdk . quest . model . options . ContentsOptions () . withMetadata ( \"normal\" ) . withCompleteAcquireActions ( Arrays . asList ( new io . gs2 . cdk . jobQueue . stampSheet . PushByUserId ( \"queue-0001\" , Arrays . asList ( new io . gs2 . cdk . jobQueue . model . JobEntry ( \"script-0001\" , \"\" , 3 )), \"#{userId}\" ) )) ) ), new io . gs2 . cdk . quest . model . options . QuestModelOptions () . withMetadata ( \"stage1-1\" ) . withPremiseQuestNames ( new ArrayList String \u003e ()) ) )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Quest . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Quest . Model . QuestGroupModel [] { new Gs2Cdk . Gs2Quest . Model . QuestGroupModel ( name : \"main\" , options : new Gs2Cdk . Gs2Quest . Model . Options . QuestGroupModelOptions { metadata = \"MAIN\" , quests = new Gs2Cdk . Gs2Quest . Model . QuestModel [] { new Gs2Cdk . Gs2Quest . Model . QuestModel ( name : \"1-1\" , contents : new Gs2Cdk . Gs2Quest . Model . Contents [] { new Gs2Cdk . Gs2Quest . Model . Contents ( weight : 99 , options : new Gs2Cdk . Gs2Quest . Model . Options . ContentsOptions { metadata = \"normal\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Quest . Model . Contents ( weight : 1 , options : new Gs2Cdk . Gs2Quest . Model . Options . ContentsOptions { metadata = \"rare\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ) } } ) }, options : new Gs2Cdk . Gs2Quest . Model . Options . QuestModelOptions { metadata = \"stage1-1\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . ConsumeStaminaByUserId ( namespaceName : \"basic\" , staminaName : \"quest\" , userId : \"#{userId}\" , consumeValue : 5 ) }, failedAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . RecoverStaminaByUserId ( namespaceName : \"basic\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 5 ) }, premiseQuestNames = new string [] {} } ), new Gs2Cdk . Gs2Quest . Model . QuestModel ( name : \"1-2\" , contents : new Gs2Cdk . Gs2Quest . Model . Contents [] { new Gs2Cdk . Gs2Quest . Model . Contents ( weight : 98 , options : new Gs2Cdk . Gs2Quest . Model . Options . ContentsOptions { metadata = \"normal\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Quest . Model . Contents ( weight : 2 , options : new Gs2Cdk . Gs2Quest . Model . Options . ContentsOptions { metadata = \"rare\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Experience . StampSheet . AddExperienceByUserId ( namespaceName : \"namespace-0001\" , experienceName : \"player\" , propertyId : \"player\" , experienceValue : 30 , truncateExperienceWhenRankUp : false , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ) } } ) }, options : new Gs2Cdk . Gs2Quest . Model . Options . QuestModelOptions { metadata = \"stage1-2\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . ConsumeStaminaByUserId ( namespaceName : \"basic\" , staminaName : \"quest\" , consumeValue : 5 , userId : \"#{userId}\" ) }, failedAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Stamina . StampSheet . RecoverStaminaByUserId ( namespaceName : \"basic\" , staminaName : \"quest\" , userId : \"#{userId}\" , recoverValue : 5 ) }, premiseQuestNames = new string [] { \"1-1\" } } ) } } ), new Gs2Cdk . Gs2Quest . Model . QuestGroupModel ( name : \"sub\" , options : new Gs2Cdk . Gs2Quest . Model . Options . QuestGroupModelOptions { metadata = \"SUB\" , quests = new Gs2Cdk . Gs2Quest . Model . QuestModel [] { new Gs2Cdk . Gs2Quest . Model . QuestModel ( name : \"1-1\" , contents : new Gs2Cdk . Gs2Quest . Model . Contents [] { new Gs2Cdk . Gs2Quest . Model . Contents ( weight : 1 , options : new Gs2Cdk . Gs2Quest . Model . Options . ContentsOptions { metadata = \"normal\" , completeAcquireActions = new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2JobQueue . StampSheet . PushByUserId ( namespaceName : \"queue-0001\" , jobs : new [] { new Gs2Cdk . Gs2JobQueue . Model . JobEntry ( scriptId : \"script-0001\" , args : \"\" , maxTryCount : 3 ) }, userId : \"#{userId}\" ) } } ) }, options : new Gs2Cdk . Gs2Quest . Model . Options . QuestModelOptions { metadata = \"stage1-1\" , premiseQuestNames = new string [] {} } ) } } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import quest from \"@/gs2cdk/quest\" ; class SampleStack extends core . Stack { public constructor () { super (); new quest . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new quest . model . QuestGroupModel ( \"main\" , { metadata : \"MAIN\" , quests : [ new quest . model . QuestModel ( \"1-1\" , [ new quest . model . Contents ( 99 , { metadata : \"normal\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ] } ), new quest . model . Contents ( 1 , { metadata : \"rare\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ] } ), ], { metadata : \"stage1-1\" , consumeActions : [ new stamina . stampSheet . ConsumeStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ], failedAcquireActions : [ new stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ], premiseQuestNames : [] } ), new quest . model . QuestModel ( \"1-2\" , [ new quest . model . Contents ( 98 , { metadata : \"normal\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ] } ), new quest . model . Contents ( 2 , { metadata : \"rare\" , completeAcquireActions : [ new experience . stampSheet . AddExperienceByUserId ( \"namespace-0001\" , \"player\" , \"player\" , 30 , false , null , \"#{userId}\" ), new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ] } ), ], { metadata : \"stage1-2\" , consumeActions : [ new stamina . stampSheet . ConsumeStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ], failedAcquireActions : [ new stamina . stampSheet . RecoverStaminaByUserId ( \"namespace-0001\" , \"quest\" , 5 , null , \"#{userId}\" ), ], premiseQuestNames : [ \"1-1\" , ] } ), ] } ), new quest . model . QuestGroupModel ( \"sub\" , { metadata : \"SUB\" , quests : [ new quest . model . QuestModel ( \"1-1\" , [ new quest . model . Contents ( 1 , { metadata : \"normal\" , completeAcquireActions : [ new jobQueue . stampSheet . PushByUserId ( \"namespace-0001\" , [ new jobQueue . model . JobEntry ( \"script-0001\" , \"\" , 3 ) ], \"#{userId}\" ), ] } ), ], { metadata : \"stage1-1\" , premiseQuestNames : [] } ), ] } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , quest , job_queue class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () quest . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( groups = [ quest . QuestGroupModel ( name = 'main' , options = quest . QuestGroupModelOptions ( metadata = 'MAIN' , quests = [ quest . QuestModel ( name = '1-1' , contents = [ quest . Contents ( weight = 99 , options = quest . ContentsOptions ( metadata = 'normal' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ], ), ), quest . Contents ( weight = 1 , options = quest . ContentsOptions ( metadata = 'rare' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ], ), ), ], options = quest . QuestModelOptions ( metadata = 'stage1-1' , consume_actions = [ stamina . ConsumeStaminaByUserId ( namespace_name = 'basic' , stamina_name = 'quest' , user_id = '# {userId} ' , consume_value = 5 ), ], failed_acquire_actions = [ stamina . RecoverStaminaByUserId ( namespace_name = 'basic' , stamina_name = 'quest' , user_id = '# {userId} ' , recover_value = 5 ), ], premise_quest_names = [], ), ), quest . QuestModel ( name = '1-2' , contents = [ quest . Contents ( weight = 98 , options = quest . ContentsOptions ( metadata = 'normal' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ], ), ), quest . Contents ( weight = 2 , options = quest . ContentsOptions ( metadata = 'rare' , complete_acquire_actions = [ experience . AddExperienceByUserId ( namespace_name = 'namespace-0001' , experience_name = 'player' , property_id = 'player' , experience_value = 30 , truncate_experience_when_rank_up = False , user_id = '# {userId} ' ), inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ], ), ), ], options = quest . QuestModelOptions ( metadata = 'stage1-2' , consume_actions = [ stamina . ConsumeStaminaByUserId ( namespace_name = 'basic' , stamina_name = 'quest' , consume_value = 5 , user_id = '# {userId} ' ), ], failed_acquire_actions = [ stamina . RecoverStaminaByUserId ( namespace_name = 'basic' , stamina_name = 'quest' , user_id = '# {userId} ' , recover_value = 5 ), ], premise_quest_names = [ '1-1' , ], ), ), ] ), ), quest . QuestGroupModel ( name = 'sub' , options = quest . QuestGroupModelOptions ( metadata = 'SUB' , quests = [ quest . QuestModel ( name = '1-1' , contents = [ quest . Contents ( weight = 1 , options = quest . ContentsOptions ( metadata = 'normal' , complete_acquire_actions = [ job_queue . PushByUserId ( namespace_name = 'queue-0001' , jobs = [{ 'scriptId' : 'script-0001' , 'args' : {}, 'maxTryCount' : 3 }], user_id = '# {userId} ' ), ], ), ), ], options = quest . QuestModelOptions ( metadata = 'stage1-1' , premise_quest_names = [], ), ), ] ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template QuestGroupModel 퀘스트 그룹 모델 퀘스트 그룹은 여러 퀘스트를 그룹화하기 위한 엔티티로, 퀘스트 진행은 그룹 내에서 동시에 하나만 실행할 수 있습니다. 즉, 퀘스트를 병렬로 진행할 수 있도록 하려면 그룹을 분리해야 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 questGroupModelId string ※ ~ 1024자 퀘스트 그룹 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. quests List [] 0 ~ 1000 items 그룹에 속한 퀘스트 이 퀘스트 그룹에 속한 퀘스트 모델의 목록입니다. 그룹 내에서는 동시에 하나의 퀘스트만 진행할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그룹 내 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule의 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화된 기간 동안에만 퀘스트를 시작할 수 있습니다. QuestModel 퀘스트 모델 퀘스트 모델은 인게임 시작에 필요한 대가와 클리어했을 때 얻는 보상을 보유하는 엔티티입니다. 클리어했을 때 얻는 보상은 여러 배리에이션을 준비할 수 있으며, 퀘스트 시작 시 추첨할 수 있습니다. 예를 들어, 퀘스트 자체는 동일하더라도 레어 몬스터의 출현 여부에 따라 두 가지 콘텐츠 배리에이션을 만들 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 questModelId string ※ ~ 1024자 퀘스트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. contents List [] 1 ~ 10 items 퀘스트 내용 이 퀘스트의 콘텐츠 배리에이션 목록입니다. 퀘스트 시작 시 가중치 추첨을 통해 하나의 배리에이션이 선택됩니다. 각 배리에이션마다 서로 다른 클리어 보상을 정의할 수 있어, 동일한 퀘스트라도 다른 결과(예: 레어 몬스터의 출현)를 구현할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화되어 있는 기간에만 퀘스트를 시작할 수 있습니다. 이 설정은 퀘스트 그룹의 도전 가능 기간보다 우선됩니다. firstCompleteAcquireActions List [] 0 ~ 10 items 최초 클리어 보상 입수 액션 리스트 이 퀘스트를 처음 클리어했을 때만 실행되는 입수 액션의 리스트입니다. 일반 클리어 보상에 더해 지급되는 보너스 보상으로, 최초 클리어 보너스를 구현하는 데 사용합니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 이 퀘스트를 시작하기 위한 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공해야만 퀘스트를 시작할 수 있습니다. 레벨 확인이나 아이템 소지 등의 요건을 강제하는 데 사용합니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 퀘스트의 시작 비용으로 실행되는 소비 액션입니다. 스태미나나 통화 등의 비용이 퀘스트 시작 시 소비됩니다. failedAcquireActions List [] 0 ~ 100 items 실패 시 입수 액션 리스트 퀘스트 실패 시 실행되는 입수 액션입니다. 실패 시 위로 보상이나 퀘스트 참가 비용의 일부 반환 등에 사용합니다. premiseQuestNames List [] 0 ~ 10 items 전제 퀘스트 이름 리스트 이 퀘스트에 도전하기 전에 클리어가 필요한 같은 그룹 내 퀘스트 이름의 리스트입니다. 연속되는 퀘스트 체인이나 분기되는 퀘스트 경로 작성에 사용합니다. Contents 콘텐츠 퀘스트 콘텐츠의 하나의 배리에이션을 나타냅니다. 각 퀘스트는 서로 다른 보상을 가진 여러 콘텐츠 배리에이션을 가질 수 있으며, 퀘스트 시작 시 가중치 추첨을 통해 하나가 선택됩니다. 메타데이터는 사용자 ID 및 컨피그 값을 이용한 템플릿 변수 치환을 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 256자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. completeAcquireActions List [] 0 ~ 10 items 클리어 보상 획득 액션 이 콘텐츠 배리에이션으로 퀘스트를 클리어했을 때 실행되는 획득 액션입니다. 플레이어가 퀘스트 클리어 시 받게 되는 실제 보상을 정의합니다. weight int 1 1 ~ 2147483646 추첨 가중치 퀘스트 시작 시 이 콘텐츠 배리에이션의 무작위 선택에 사용되는 상대적 가중치입니다. 값이 클수록 이 배리에이션이 선택될 확률이 높아집니다. 예를 들어 가중치가 9인 배리에이션은 가중치가 1인 배리에이션보다 9배 선택되기 쉽습니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Quest Deploy/CDK 레퍼런스","url":"/ko/api_reference/quest/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 랭킹 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 랭킹 관련 조작 로그를 GS2-Log에 출력하기 위한 설정입니다. 설정하면 스코어 등록, 랭킹 취득, 구독 변경 등의 작업이 분석 및 감사를 위해 기록됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Ranking::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/ranking\" ) SampleStack := core . NewStack () ranking . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , ranking . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Ranking\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Ranking\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . ranking . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . ranking . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Ranking . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Ranking . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import ranking from \"@/gs2cdk/ranking\" ; class SampleStack extends core . Stack { public constructor () { super (); new ranking . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , ranking class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () ranking . Namespace ( stack = self , name = 'namespace-0001' , options = ranking . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentRankingMaster 현재 활성화된 랭킹 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 랭킹 모델의 정의를 기술한 마스터 데이터입니다. GS2는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Ranking 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentRankingMaster 업데이트된 현재 활성화된 랭킹 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Ranking::CurrentRankingMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-09-17\" , \"categories\": [] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/ranking\" ) SampleStack := core . NewStack () ranking . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , ranking . NamespaceOptions {}, ). MasterData ( [] ranking . CategoryModel { }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Ranking\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . ranking . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Ranking . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Ranking . Model . CategoryModel [] { } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import ranking from \"@/gs2cdk/ranking\" ; class SampleStack extends core . Stack { public constructor () { super (); new ranking . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , ranking class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () ranking . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( categories = [ ], ) print ( SampleStack () . yaml ()) # Generate Template CategoryModel 카테고리 모델 카테고리마다 서로 다른 랭킹을 생성할 수 있습니다. 카테고리에는 등록 가능한 스코어의 최소값·최대값을 설정할 수 있으며, 해당 범위를 벗어나는 스코어는 폐기됩니다. 랭킹을 집계할 때 스코어가 작은 것을 상위(오름차순)로 할지, 큰 것을 상위(내림차순)로 할지를 설정할 수 있습니다. 랭킹의 종류로 글로벌 과 스코프 를 선택할 수 있습니다. 글로벌은 모든 플레이어가 동일한 결과를 참조하는 것이며, 스코프는 친구 내 랭킹이나 길드 내 랭킹처럼 게임 플레이어마다 결과가 다른 랭킹입니다. 글로벌 랭킹은 카테고리별로 랭킹 집계 간격을 15분~24시간으로 설정할 수 있습니다. 스코프 랭킹은 실시간으로 집계 결과가 반영됩니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 스코어를 리셋할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 점수 최솟값 이 카테고리에 등록할 수 있는 점수의 최솟값입니다. 이 임곗값보다 낮은 점수는 등록 시 거부됩니다. 설정하지 않으면 하한이 없습니다. maximumValue long 0 ~ 9223372036854775805 점수 최댓값 이 카테고리에 등록할 수 있는 점수의 최댓값입니다. 이 임곗값보다 높은 점수는 등록 시 거부됩니다. 설정하지 않으면 상한이 없습니다. sum bool false 합산 모드 활성화하면 새로 등록된 점수가 기존 점수를 대체하는 것이 아니라 합계에 더해집니다. 랭킹은 누적된 합계값을 기준으로 계산됩니다. 비활성화된 경우 각 점수 등록은 독립된 항목으로 처리됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 집계의 정렬 순서를 결정합니다. “asc”(오름차순)는 낮은 점수를 상위로 하며, 시간 기반이나 골프식 랭킹에 적합합니다. “desc”(내림차순)는 높은 점수를 상위로 하며, 포인트 기반이나 하이스코어 랭킹에 적합합니다. 정의 설명 asc 오름차순 desc 내림차순 scope 문자열 열거형 enum {   “global”,   “scoped” }  랭킹 종류 이 카테고리의 랭킹 타입입니다. “global” 은 모든 플레이어가 공유하는 단일 리더보드를 만들며, 설정된 간격으로 배치 집계됩니다. “scoped” 는 구독한 플레이어(친구나 길드 멤버 등)를 기반으로 한 사용자별 리더보드를 만들며, 점수가 실시간으로 반영됩니다. 정의 설명 global 글로벌 scoped 스코프 globalRankingSetting GlobalRankingSetting {scope} == “global” ※ 글로벌 랭킹 설정 글로벌 랭킹 모드 전용 설정입니다. 집계 간격, 고정 시각, 점수의 유니크 여부, 세대 관리, 추가 기간 한정 스코프를 포함합니다. scope 가 “global” 로 설정된 경우에만 적용됩니다. ※ scope이(가) “global” 이면 필수 entryPeriodEventId string ~ 1024자 점수 등록 기간 이벤트 ID 점수 등록을 받는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 점수 등록 요청은 거부됩니다. 설정하지 않으면 점수는 언제든지 등록할 수 있습니다. accessPeriodEventId string ~ 1024자 접근 기간 이벤트 ID 랭킹 데이터를 열람할 수 있는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 랭킹 조회 요청은 거부됩니다. 설정하지 않으면 랭킹은 언제든지 접근할 수 있습니다. Scope 집계 스코프 글로벌 랭킹 모드에서의 추가적인 기간 한정 집계 스코프를 정의합니다. 일반적으로 글로벌 랭킹은 등록된 모든 스코어를 대상으로 집계됩니다. 스코프를 추가하면 지정한 일수 이내에 등록된 스코어만을 대상으로 하는 별도의 랭킹을 생성할 수 있으며, 전체 기간 랭킹과 함께 데일리·위클리·먼슬리 등의 리더보드를 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. targetDays long  1 ~ 365 집계 대상 일수 집계 윈도우에 포함할 일수입니다. 현재 시각으로부터 이 일수 이내에 등록된 스코어만 스코프 랭킹의 대상이 됩니다. 범위: 1~365일. GlobalRankingSetting 글로벌 랭킹 설정 글로벌은 모든 플레이어가 동일한 결과를 참조하는 방식입니다. 랭킹 집계 간격은 15분~24시간으로 설정할 수 있습니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 점수를 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 uniqueByUserId bool true 사용자 ID별 유니크 활성화하면 랭킹 내에서 사용자 ID별로 하나의 점수만 유지됩니다. 사용자가 새로운 점수를 등록하면 정렬 방향에 따라 더 나은 점수로 교체됩니다. 비활성화하면 동일 사용자로부터 여러 점수 항목이 허용되어 합산 모드나 다중 항목 경쟁이 가능해집니다. calculateIntervalMinutes int  15 ~ 1440 집계 간격(분) 연속되는 랭킹 재집계 사이의 간격(분)입니다. 시스템은 이 간격으로 등록된 모든 점수를 기반으로 글로벌 랭킹을 정기적으로 재집계합니다. 범위: 15 1440분(15분 24시간). calculateFixedTiming FixedTiming 집계 시각 고정 설정 랭킹 재집계가 시작되는 하루 중 고정 시각(UTC)을 지정합니다. 설정하지 않으면 재집계는 정해지지 않은 기준 시각부터 일정 간격으로 실행됩니다. 이를 설정하면 매일 예측 가능하고 일관된 시각에 재집계가 이루어지도록 할 수 있습니다. additionalScopes List 0 ~ 10 items 추가 스코프 목록 추가적인 기간 한정 집계 스코프 목록입니다. 각 스코프는 지정한 일수 이내에 등록된 점수만을 대상으로 하는 별도의 랭킹을 정의합니다. 전체 기간의 글로벌 랭킹과 함께 데일리·위클리·먼슬리 등의 리더보드를 만들 수 있습니다. 최대 10건. ignoreUserIds List 0 ~ 10000 items 제외 사용자 ID 목록 랭킹 집계에서 점수를 제외할 사용자 ID 목록입니다. 테스트 계정, 관리자 계정 또는 알려진 부정 사용자를 리더보드에서 제외하는 데 사용합니다. 최대 10,000건. generation string ~ 256자 세대 현재 랭킹 세대를 나타내는 임의의 문자열입니다. 이 값을 변경하면 이전 세대의 점수는 랭킹 집계에 포함되지 않으므로 사실상 점수가 초기화됩니다. 시즌제 초기화나 정기적인 랭킹 초기화를 구현하는 데 사용합니다. 최대 256자. FixedTiming 집계 시각 고정 설정 글로벌 랭킹의 집계가 시작되는 고정 시각을 지정합니다. 이 설정이 없으면 랭킹 집계는 정해지지 않은 기준 시각부터 일정 간격으로 실행됩니다. 고정된 시·분을 지정함으로써 매일의 집계 시작 시각(UTC)을 예측 가능하게 할 수 있으며, 자정이나 특정 시각에 집계를 시작하도록 제어할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 hour int 0 ~ 23 시 랭킹 집계가 시작되는 시각의 시(UTC)입니다. 0~23 사이의 정수로 지정합니다. minute int 0 ~ 59 분 지정한 시각의 분입니다. 0~59 사이의 정수로 지정합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Ranking Deploy/CDK 레퍼런스","url":"/ko/api_reference/ranking/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 랭킹 보상 지급에 사용되는 분산 트랜잭션 설정입니다. 입수 액션을 자동으로 실행하는 오토런, 전체의 성패를 보장하는 아토믹 커밋을 지원합니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 점수 등록이나 랭킹 보상 배포 추적에 사용됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Ranking2::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/ranking2\" ) SampleStack := core . NewStack () ranking2 . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , ranking2 . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Ranking2\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Ranking2\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . ranking2 . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . ranking2 . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Ranking2 . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Ranking2 . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import ranking2 from \"@/gs2cdk/ranking2\" ; class SampleStack extends core . Stack { public constructor () { super (); new ranking2 . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , ranking2 class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () ranking2 . Namespace ( stack = self , name = 'namespace-0001' , options = ranking2 . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentRankingMaster 현재 활성화된 랭킹 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 랭킹 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 제작하여 적절한 형식의 JSON 파일을 출력하는 방법으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Ranking2 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentRankingMaster 업데이트된 현재 활성화된 랭킹 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Ranking2::CurrentRankingMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2024-05-30\" , \"globalRankingModels\": [ { \"name\": \"ranking-0001\" , \"orderDirection\": \"asc\" } , { \"name\": \"ranking-0002\" , \"orderDirection\": \"desc\" } ], \"clusterRankingModels\": [ { \"name\": \"ranking-0001\" , \"clusterType\": \"Raw\" , \"orderDirection\": \"asc\" } , { \"name\": \"ranking-0002\" , \"clusterType\": \"Gs2Guild::Guild\" , \"orderDirection\": \"desc\" } ], \"subscribeRankingModels\": [ { \"name\": \"ranking-0001\" , \"orderDirection\": \"asc\" } , { \"name\": \"ranking-0002\" , \"orderDirection\": \"desc\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/ranking2\" ) SampleStack := core . NewStack () ranking2 . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , ranking2 . NamespaceOptions {}, ). MasterData ( [] ranking2 . GlobalRankingModel { ranking2 . NewGlobalRankingModel ( \"ranking-0001\" , false , ranking2 . GlobalRankingModelOrderDirectionAsc , ranking2 . GlobalRankingModelRewardCalculationIndexRank , ranking2 . GlobalRankingModelOptions { }, ), ranking2 . NewGlobalRankingModel ( \"ranking-0002\" , false , ranking2 . GlobalRankingModelOrderDirectionDesc , ranking2 . GlobalRankingModelRewardCalculationIndexRank , ranking2 . GlobalRankingModelOptions { }, ), }, [] ranking2 . ClusterRankingModel { ranking2 . NewClusterRankingModel ( \"ranking-0001\" , ranking2 . ClusterRankingModelClusterTypeRaw , false , ranking2 . ClusterRankingModelOrderDirectionAsc , ranking2 . ClusterRankingModelRewardCalculationIndexRank , ranking2 . ClusterRankingModelOptions { }, ), ranking2 . NewClusterRankingModel ( \"ranking-0002\" , ranking2 . ClusterRankingModelClusterTypeGs2Guild_guild , false , ranking2 . ClusterRankingModelOrderDirectionDesc , ranking2 . ClusterRankingModelRewardCalculationIndexRank , ranking2 . ClusterRankingModelOptions { }, ), }, [] ranking2 . SubscribeRankingModel { ranking2 . NewSubscribeRankingModel ( \"ranking-0001\" , false , ranking2 . SubscribeRankingModelOrderDirectionAsc , ranking2 . SubscribeRankingModelOptions { }, ), ranking2 . NewSubscribeRankingModel ( \"ranking-0002\" , false , ranking2 . SubscribeRankingModelOrderDirectionDesc , ranking2 . SubscribeRankingModelOptions { }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Ranking2\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Ranking2\\Model\\GlobalRankingModel ( name : \"ranking-0001\" , sum : false , orderDirection : \\Gs2Cdk\\Ranking2\\Model\\Enums\\GlobalRankingModelOrderDirection :: ASC , rewardCalculationIndex : \\Gs2Cdk\\Ranking2\\Model\\Enums\\GlobalRankingModelRewardCalculationIndex :: RANK ), new \\Gs2Cdk\\Ranking2\\Model\\GlobalRankingModel ( name : \"ranking-0002\" , sum : false , orderDirection : \\Gs2Cdk\\Ranking2\\Model\\Enums\\GlobalRankingModelOrderDirection :: DESC , rewardCalculationIndex : \\Gs2Cdk\\Ranking2\\Model\\Enums\\GlobalRankingModelRewardCalculationIndex :: RANK ) ], [ new \\Gs2Cdk\\Ranking2\\Model\\ClusterRankingModel ( name : \"ranking-0001\" , clusterType : \\Gs2Cdk\\Ranking2\\Model\\Enums\\ClusterRankingModelClusterType :: RAW , sum : false , orderDirection : \\Gs2Cdk\\Ranking2\\Model\\Enums\\ClusterRankingModelOrderDirection :: ASC , rewardCalculationIndex : \\Gs2Cdk\\Ranking2\\Model\\Enums\\ClusterRankingModelRewardCalculationIndex :: RANK ), new \\Gs2Cdk\\Ranking2\\Model\\ClusterRankingModel ( name : \"ranking-0002\" , clusterType : \\Gs2Cdk\\Ranking2\\Model\\Enums\\ClusterRankingModelClusterType :: GS2_GUILD__GUILD , sum : false , orderDirection : \\Gs2Cdk\\Ranking2\\Model\\Enums\\ClusterRankingModelOrderDirection :: DESC , rewardCalculationIndex : \\Gs2Cdk\\Ranking2\\Model\\Enums\\ClusterRankingModelRewardCalculationIndex :: RANK ) ], [ new \\Gs2Cdk\\Ranking2\\Model\\SubscribeRankingModel ( name : \"ranking-0001\" , sum : false , orderDirection : \\Gs2Cdk\\Ranking2\\Model\\Enums\\SubscribeRankingModelOrderDirection :: ASC ), new \\Gs2Cdk\\Ranking2\\Model\\SubscribeRankingModel ( name : \"ranking-0002\" , sum : false , orderDirection : \\Gs2Cdk\\Ranking2\\Model\\Enums\\SubscribeRankingModelOrderDirection :: DESC ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . ranking2 . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . ranking2 . model . GlobalRankingModel ( \"ranking-0001\" , false , io . gs2 . cdk . ranking2 . model . enums . GlobalRankingModelOrderDirection . ASC , io . gs2 . cdk . ranking2 . model . enums . GlobalRankingModelRewardCalculationIndex . RANK ), new io . gs2 . cdk . ranking2 . model . GlobalRankingModel ( \"ranking-0002\" , false , io . gs2 . cdk . ranking2 . model . enums . GlobalRankingModelOrderDirection . DESC , io . gs2 . cdk . ranking2 . model . enums . GlobalRankingModelRewardCalculationIndex . RANK ) ), Arrays . asList ( new io . gs2 . cdk . ranking2 . model . ClusterRankingModel ( \"ranking-0001\" , io . gs2 . cdk . ranking2 . model . enums . ClusterRankingModelClusterType . RAW , false , io . gs2 . cdk . ranking2 . model . enums . ClusterRankingModelOrderDirection . ASC , io . gs2 . cdk . ranking2 . model . enums . ClusterRankingModelRewardCalculationIndex . RANK ), new io . gs2 . cdk . ranking2 . model . ClusterRankingModel ( \"ranking-0002\" , io . gs2 . cdk . ranking2 . model . enums . ClusterRankingModelClusterType . GS2_GUILD__GUILD , false , io . gs2 . cdk . ranking2 . model . enums . ClusterRankingModelOrderDirection . DESC , io . gs2 . cdk . ranking2 . model . enums . ClusterRankingModelRewardCalculationIndex . RANK ) ), Arrays . asList ( new io . gs2 . cdk . ranking2 . model . SubscribeRankingModel ( \"ranking-0001\" , false , io . gs2 . cdk . ranking2 . model . enums . SubscribeRankingModelOrderDirection . ASC ), new io . gs2 . cdk . ranking2 . model . SubscribeRankingModel ( \"ranking-0002\" , false , io . gs2 . cdk . ranking2 . model . enums . SubscribeRankingModelOrderDirection . DESC ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Ranking2 . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Ranking2 . Model . GlobalRankingModel [] { new Gs2Cdk . Gs2Ranking2 . Model . GlobalRankingModel ( name : \"ranking-0001\" , sum : false , orderDirection : Gs2Cdk . Gs2Ranking2 . Model . Enums . GlobalRankingModelOrderDirection . Asc , rewardCalculationIndex : Gs2Cdk . Gs2Ranking2 . Model . Enums . GlobalRankingModelRewardCalculationIndex . Rank ), new Gs2Cdk . Gs2Ranking2 . Model . GlobalRankingModel ( name : \"ranking-0002\" , sum : false , orderDirection : Gs2Cdk . Gs2Ranking2 . Model . Enums . GlobalRankingModelOrderDirection . Desc , rewardCalculationIndex : Gs2Cdk . Gs2Ranking2 . Model . Enums . GlobalRankingModelRewardCalculationIndex . Rank ) }, new Gs2Cdk . Gs2Ranking2 . Model . ClusterRankingModel [] { new Gs2Cdk . Gs2Ranking2 . Model . ClusterRankingModel ( name : \"ranking-0001\" , clusterType : Gs2Cdk . Gs2Ranking2 . Model . Enums . ClusterRankingModelClusterType . Raw , sum : false , orderDirection : Gs2Cdk . Gs2Ranking2 . Model . Enums . ClusterRankingModelOrderDirection . Asc , rewardCalculationIndex : Gs2Cdk . Gs2Ranking2 . Model . Enums . ClusterRankingModelRewardCalculationIndex . Rank ), new Gs2Cdk . Gs2Ranking2 . Model . ClusterRankingModel ( name : \"ranking-0002\" , clusterType : Gs2Cdk . Gs2Ranking2 . Model . Enums . ClusterRankingModelClusterType . Gs2Guild_guild , sum : false , orderDirection : Gs2Cdk . Gs2Ranking2 . Model . Enums . ClusterRankingModelOrderDirection . Desc , rewardCalculationIndex : Gs2Cdk . Gs2Ranking2 . Model . Enums . ClusterRankingModelRewardCalculationIndex . Rank ) }, new Gs2Cdk . Gs2Ranking2 . Model . SubscribeRankingModel [] { new Gs2Cdk . Gs2Ranking2 . Model . SubscribeRankingModel ( name : \"ranking-0001\" , sum : false , orderDirection : Gs2Cdk . Gs2Ranking2 . Model . Enums . SubscribeRankingModelOrderDirection . Asc ), new Gs2Cdk . Gs2Ranking2 . Model . SubscribeRankingModel ( name : \"ranking-0002\" , sum : false , orderDirection : Gs2Cdk . Gs2Ranking2 . Model . Enums . SubscribeRankingModelOrderDirection . Desc ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import ranking2 from \"@/gs2cdk/ranking2\" ; class SampleStack extends core . Stack { public constructor () { super (); new ranking2 . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new ranking2 . model . GlobalRankingModel ( \"ranking-0001\" , false , ranking2 . model . GlobalRankingModelOrderDirection . ASC , ranking2 . model . GlobalRankingModelRewardCalculationIndex . RANK ), new ranking2 . model . GlobalRankingModel ( \"ranking-0002\" , false , ranking2 . model . GlobalRankingModelOrderDirection . DESC , ranking2 . model . GlobalRankingModelRewardCalculationIndex . RANK ) ], [ new ranking2 . model . ClusterRankingModel ( \"ranking-0001\" , ranking2 . model . ClusterRankingModelClusterType . RAW , false , ranking2 . model . ClusterRankingModelOrderDirection . ASC , ranking2 . model . ClusterRankingModelRewardCalculationIndex . RANK ), new ranking2 . model . ClusterRankingModel ( \"ranking-0002\" , ranking2 . model . ClusterRankingModelClusterType . GS2_GUILD__GUILD , false , ranking2 . model . ClusterRankingModelOrderDirection . DESC , ranking2 . model . ClusterRankingModelRewardCalculationIndex . RANK ) ], [ new ranking2 . model . SubscribeRankingModel ( \"ranking-0001\" , false , ranking2 . model . SubscribeRankingModelOrderDirection . ASC ), new ranking2 . model . SubscribeRankingModel ( \"ranking-0002\" , false , ranking2 . model . SubscribeRankingModelOrderDirection . DESC ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , ranking2 class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () ranking2 . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( global_ranking_models = [ ranking2 . GlobalRankingModel ( name = 'ranking-0001' , sum = False , order_direction = ranking2 . GlobalRankingModelOrderDirection . ASC , reward_calculation_index = ranking2 . GlobalRankingModelRewardCalculationIndex . RANK ), ranking2 . GlobalRankingModel ( name = 'ranking-0002' , sum = False , order_direction = ranking2 . GlobalRankingModelOrderDirection . DESC , reward_calculation_index = ranking2 . GlobalRankingModelRewardCalculationIndex . RANK ), ], cluster_ranking_models = [ ranking2 . ClusterRankingModel ( name = 'ranking-0001' , cluster_type = ranking2 . ClusterRankingModelClusterType . RAW , sum = False , order_direction = ranking2 . ClusterRankingModelOrderDirection . ASC , reward_calculation_index = ranking2 . ClusterRankingModelRewardCalculationIndex . RANK ), ranking2 . ClusterRankingModel ( name = 'ranking-0002' , cluster_type = ranking2 . ClusterRankingModelClusterType . GS2_GUILD__GUILD , sum = False , order_direction = ranking2 . ClusterRankingModelOrderDirection . DESC , reward_calculation_index = ranking2 . ClusterRankingModelRewardCalculationIndex . RANK ), ], subscribe_ranking_models = [ ranking2 . SubscribeRankingModel ( name = 'ranking-0001' , sum = False , order_direction = ranking2 . SubscribeRankingModelOrderDirection . ASC ), ranking2 . SubscribeRankingModel ( name = 'ranking-0002' , sum = False , order_direction = ranking2 . SubscribeRankingModelOrderDirection . DESC ), ], ) print ( SampleStack () . yaml ()) # Generate Template GlobalRankingModel 글로벌 랭킹 모델 글로벌 랭킹은 모든 플레이어를 대상으로 한 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연결하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 globalRankingModelId string ※ ~ 1024자 글로벌 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 스코어 최솟값 허용되는 스코어의 최솟값입니다. 이 값보다 낮은 스코어는 등록 시 거부됩니다. 유효하지 않거나 의도하지 않은 스코어 값을 필터링하는 데 사용합니다. maximumValue long 0 ~ 9223372036854775805 스코어 최댓값 허용되는 스코어의 최댓값입니다. 이 값을 초과하는 스코어는 등록 시 거부됩니다. 비정상적으로 높은 스코어의 등록을 방지하는 데 사용합니다. sum bool false 스코어 합산 활성화하면 등록된 모든 스코어가 합산되어 합계 값으로 랭킹이 결정됩니다. 비활성화된 경우, 정렬 방향에 따른 최적의 스코어(최댓값 또는 최솟값)만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 스코어의 정렬 방향입니다. 낮은 스코어일수록 상위인 경우(예: 타임어택)에는 “오름차순\"을, 높은 스코어일수록 상위인 경우(예: 하이스코어)에는 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 반복 사이클마다 랭킹이 초기화되어 시즌제 랭킹을 구현할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. 각 보상은 순위 임계값과 실행할 입수 액션을 정의합니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 일반적으로 스코어 등록 기간 사이의 간격으로 설정합니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위를 사용하며(동점 스코어의 플레이어는 동일한 순위를 공유), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치를 사용합니다(동일 순위 없음). 일반적인 사용 사례에서는 “순위 기반\"을 선택하시기 바랍니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 RankingReward 랭킹 보상 점수 등록 기간이 설정된 랭킹에서, 등록 기간 외 참조 기간 내에 받을 수 있는 보상을 설정합니다. 반복 설정이 유효한 경우, 가장 최근에 종료된 기간의 랭킹이 보상 수령 대상이 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 thresholdRank int  1 ~ 1001 순위 임계값 이 보상 티어의 순위 임계값입니다. 순위(또는 인덱스, rewardCalculationIndex 설정에 따라 다름)가 이 임계값 이상인 플레이어가 이 보상을 받습니다. 1001로 설정하면 랭크 외(상위 1000위 밖) 플레이어를 위한 보상을 정의할 수 있습니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. acquireActions List [] 0 ~ 100 items 입수 액션 리스트 플레이어가 이 랭킹 보상을 수령할 때 실행되는 입수 액션의 목록입니다. 이 순위 임계값을 달성한 보상으로 지급되는 아이템, 화폐, 기타 리소스를 정의합니다. ClusterRankingModel 클러스터 랭킹 모델 클러스터 랭킹은 길드나 게더링 내의 플레이어를 대상으로 하는 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연동하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 clusterRankingModelId string ※ ~ 1024자 클러스터 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. clusterType 문자열 열거형 enum {   “Raw”,   “Gs2Guild::Guild”,   “Gs2Matchmaking::SeasonGathering” }  클러스터 타입 랭킹의 세그멘테이션에 사용하는 그룹(클러스터)의 종류를 정의합니다. “Raw\"는 소속 검증 없이 임의의 클러스터 이름을 지정할 수 있으며, “Gs2Guild::Guild\"는 GS2-Guild 길드에 대한 소속을 검증하고, “Gs2Matchmaking::SeasonGathering\"은 GS2-Matchmaking 시즌 개더링에 대한 소속을 검증합니다. 정의 설명 Raw 검증 없음 Gs2Guild::Guild GS2-Guild 길드 Gs2Matchmaking::SeasonGathering GS2-Matchmaking 시즌 개더링 minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위(동점 스코어는 동일 순위), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치(동일 순위 없음)를 사용합니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 SubscribeRankingModel 구독 랭킹 모델 구독한 다른 플레이어의 점수를 집계하여 랭킹을 작성하는 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeRankingModelId string ※ ~ 1024자 구독 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과를 열람할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Ranking2 Deploy/CDK 레퍼런스","url":"/ko/api_reference/ranking2/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 리얼타임 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. serverType 문자열 열거형 enum {   “relay” }  서버 타입 실시간 통신을 위해 프로비저닝하는 게임 서버의 타입. 현재 “relay” 모드를 지원하며, 접속된 게임 클라이언트 간에 메시지를 전달하는 패킷 릴레이 서버를 제공합니다. 정의 설명 relay 패킷 릴레이 serverSpec 문자열 열거형 enum {   “realtime1.nano” }  서버 스펙 프로비저닝되는 게임 서버의 하드웨어 스펙 티어. 각 룸의 서버 인스턴스에 할당되는 컴퓨팅 리소스(CPU, 메모리)를 결정합니다. 현재 “realtime1.nano\"를 지원합니다. 정의 설명 realtime1.nano realtime1.nano createNotification NotificationSetting 룸 생성 완료 알림 룸의 프로비저닝이 완료되어 접속이 가능해졌을 때 트리거되는 푸시 알림 설정. 룸 생성은 비동기로 이루어지며(IP 주소, 포트, 암호화 키는 약간의 지연 후 할당됨), 이 알림을 통해 클라이언트에게 룸이 접속을 받을 준비가 되었음을 알립니다. logSetting LogSetting 로그 출력 설정 리얼타임 관련 조작 로그를 GS2-Log에 출력하기 위한 설정. 설정하면 룸 생성, 접속 이벤트, 메시지 릴레이 활동 등이 분석과 디버깅을 위해 기록됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Realtime::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null ServerType : relay ServerSpec : realtime1.nano CreateNotification : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/realtime\" ) SampleStack := core . NewStack () realtime . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , realtime . NamespaceServerTypeRelay , realtime . NamespaceServerSpecRealtime1Nano , realtime . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Realtime\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , serverType : \\Gs2Cdk\\Realtime\\Model\\Enums\\NamespaceServerType :: RELAY , serverSpec : \\Gs2Cdk\\Realtime\\Model\\Enums\\NamespaceServerSpec :: REALTIME1_NANO , options : new \\Gs2Cdk\\Realtime\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . realtime . model . Namespace ( this , \"namespace-0001\" , io . gs2 . cdk . realtime . model . enums . NamespaceServerType . RELAY , io . gs2 . cdk . realtime . model . enums . NamespaceServerSpec . REALTIME1_NANO , new io . gs2 . cdk . realtime . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Realtime . Model . Namespace ( stack : this , name : \"namespace-0001\" , serverType : Gs2Cdk . Gs2Realtime . Model . Enums . NamespaceServerType . Relay , serverSpec : Gs2Cdk . Gs2Realtime . Model . Enums . NamespaceServerSpec . Realtime1Nano , options : new Gs2Cdk . Gs2Realtime . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import realtime from \"@/gs2cdk/realtime\" ; class SampleStack extends core . Stack { public constructor () { super (); new realtime . model . Namespace ( this , \"namespace-0001\" , realtime . model . NamespaceServerType . RELAY , realtime . model . NamespaceServerSpec . REALTIME1_NANO , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , realtime class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () realtime . Namespace ( stack = self , name = 'namespace-0001' , server_type = realtime . NamespaceServerType . RELAY , server_spec = realtime . NamespaceServerSpec . REALTIME1_NANO , options = realtime . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN NotificationSetting 푸시 통지에 관한 설정 GS2의 마이크로서비스 내에서 어떠한 이벤트가 발생했을 때, 푸시 통지를 전송하기 위한 설정입니다. 여기서 말하는 푸시 통지란 GS2-Gateway가 제공하는 WebSocket 인터페이스를 경유하는 처리이며, 스마트폰의 푸시 통지와는 성질이 다릅니다. 예를 들어 매치메이킹이 완료되었을 때나 친구 요청이 도착했을 때 등, 게임 클라이언트의 조작과는 관계없이 상태가 변화했을 때 GS2-Gateway를 경유하여 푸시 통지를 함으로써, 게임 클라이언트는 상태 변화를 감지할 수 있습니다. GS2-Gateway의 푸시 통지는 통지 대상 디바이스가 오프라인이었을 때 추가 처리로 모바일 푸시 통지를 전송할 수 있습니다. 모바일 푸시 통지를 잘 활용하면, 매치메이킹 중에 게임을 종료하더라도 모바일 푸시 통지를 사용하여 플레이어에게 알리고, 게임으로 복귀하도록 하는 흐름을 구현할 수 있을 가능성이 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gatewayNamespaceId string “grn:gs2:{region}:{ownerId}:gateway:default” ~ 1024자 푸시 통지에 사용할 GS2-Gateway의 네임스페이스 “grn:gs2:“로 시작하는 GRN 형식으로 GS2-Gateway의 네임스페이스 ID를 지정합니다. enableTransferMobileNotification bool? false 모바일 푸시 통지로 전달할지 여부 이 통지를 전송하려 할 때, 통지 대상 디바이스가 오프라인일 경우 모바일 푸시 통지로 전달할지 여부를 지정합니다. sound string {enableTransferMobileNotification} == true ~ 1024자 모바일 푸시 통지에서 사용할 사운드 파일명 여기서 지정한 사운드 파일명은 모바일 푸시 통지를 전송할 때 사용되며, 특별한 사운드로 통지를 출력할 수 있습니다. ※ enableTransferMobileNotification이(가) true 이면 활성화 enable 문자열 열거형 enum {   “Enabled”,   “Disabled” } “Enabled” 푸시 통지를 활성화할지 여부 정의 설명 Enabled 활성화 Disabled 비활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Realtime Deploy/CDK 레퍼런스","url":"/ko/api_reference/realtime/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스케줄 작업 실행 시 트랜잭션 처리 방식을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 스케줄 관련 작업 로그를 GS2-Log로 출력하기 위한 설정입니다. 설정하면 이벤트 조회, 트리거 발동, 트리거 삭제 등의 작업이 분석 및 감사를 위해 기록됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Schedule::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/schedule\" ) SampleStack := core . NewStack () schedule . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , schedule . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Schedule\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . schedule . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . schedule . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Schedule . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Schedule . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import schedule from \"@/gs2cdk/schedule\" ; class SampleStack extends core . Stack { public constructor () { super (); new schedule . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , schedule class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () schedule . Namespace ( stack = self , name = 'namespace-0001' , options = schedule . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentEventMaster 현재 활성화된 이벤트 마스터 데이터 현재 네임스페이스 내에서 유효한 이벤트 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여, 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Schedule 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentEventMaster 업데이트된 현재 활성화된 이벤트의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Schedule::CurrentEventMaster Properties : NamespaceName : namespace-0001 Mode : null Settings : { \"version\": \"2019-03-31\" , \"events\": [ { \"name\": \"event-0001\" , \"scheduleType\": \"absolute\" , \"repeatSetting\" : { \"repeatType\": \"always\" , \"beginDayOfMonth\": 1 , \"endDayOfMonth\": 1 , \"beginHour\": 0 , \"endHour\": 0 , \"activeDays\": 1 , \"inactiveDays\": 0 } , \"metadata\": \"EVENT_0001\" , \"absoluteBegin\": 10000 , \"absoluteEnd\": 20000 } , { \"name\": \"event-0002\" , \"scheduleType\": \"relative\" , \"repeatSetting\" : { \"repeatType\": \"always\" , \"beginDayOfMonth\": 1 , \"endDayOfMonth\": 1 , \"beginHour\": 0 , \"endHour\": 0 , \"activeDays\": 1 , \"inactiveDays\": 0 } , \"metadata\": \"EVENT_0002\" , \"relativeTriggerName\": \"trigger-0001\" } , { \"name\": \"daily-0001\" , \"scheduleType\": \"absolute\" , \"repeatSetting\" : { \"repeatType\": \"always\" , \"beginDayOfMonth\": 1 , \"endDayOfMonth\": 1 , \"beginHour\": 0 , \"endHour\": 0 , \"activeDays\": 1 , \"inactiveDays\": 0 } , \"metadata\": \"EVENT_0003\" , \"absoluteBegin\": 1569369600000 , \"absoluteEnd\": 1569456000000 } , { \"name\": \"daily-0002\" , \"scheduleType\": \"absolute\" , \"repeatSetting\" : { \"repeatType\": \"always\" , \"beginDayOfMonth\": 1 , \"endDayOfMonth\": 1 , \"beginHour\": 0 , \"endHour\": 0 , \"activeDays\": 1 , \"inactiveDays\": 0 } , \"metadata\": \"EVENT_0004\" , \"absoluteBegin\": 1569369600000 , \"absoluteEnd\": 1569456000000 } , { \"name\": \"weekly-0001\" , \"scheduleType\": \"absolute\" , \"repeatSetting\" : { \"repeatType\": \"always\" , \"beginDayOfMonth\": 1 , \"endDayOfMonth\": 1 , \"beginHour\": 0 , \"endHour\": 0 , \"activeDays\": 1 , \"inactiveDays\": 0 } , \"metadata\": \"EVENT_0005\" , \"absoluteBegin\": 1569888000000 , \"absoluteEnd\": 1570406400000 } , { \"name\": \"weekly-0002\" , \"scheduleType\": \"absolute\" , \"repeatSetting\" : { \"repeatType\": \"always\" , \"beginDayOfMonth\": 1 , \"endDayOfMonth\": 1 , \"beginHour\": 0 , \"endHour\": 0 , \"activeDays\": 1 , \"inactiveDays\": 0 } , \"metadata\": \"EVENT_0006\" , \"absoluteBegin\": 1569888000000 , \"absoluteEnd\": 1570406400000 } , { \"name\": \"monthly-0001\" , \"scheduleType\": \"absolute\" , \"repeatSetting\" : { \"repeatType\": \"always\" , \"beginDayOfMonth\": 1 , \"endDayOfMonth\": 1 , \"beginHour\": 0 , \"endHour\": 0 , \"activeDays\": 1 , \"inactiveDays\": 0 } , \"metadata\": \"EVENT_0007\" , \"absoluteBegin\": 1570406400000 , \"absoluteEnd\": 1575158400000 } , { \"name\": \"monthly-0002\" , \"scheduleType\": \"absolute\" , \"repeatSetting\" : { \"repeatType\": \"always\" , \"beginDayOfMonth\": 1 , \"endDayOfMonth\": 1 , \"beginHour\": 0 , \"endHour\": 0 , \"activeDays\": 1 , \"inactiveDays\": 0 } , \"metadata\": \"EVENT_0008\" , \"absoluteBegin\": 1570406400000 , \"absoluteEnd\": 1575158400000 } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/schedule\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () schedule . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , schedule . NamespaceOptions {}, ). MasterData ( [] schedule . Event { schedule . NewEvent ( \"event-0001\" , schedule . EventScheduleTypeAbsolute , schedule . NewRepeatSetting ( schedule . RepeatSettingRepeatTypeAlways , schedule . RepeatSettingOptions { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 1 ), BeginHour : pointy . Int32 ( 0 ), EndHour : pointy . Int32 ( 0 ), ActiveDays : pointy . Int32 ( 1 ), InactiveDays : pointy . Int32 ( 0 ), }, ), schedule . EventOptions { Metadata : pointy . String ( \"EVENT_0001\" ), AbsoluteBegin : pointy . Int64 ( 10000 ), AbsoluteEnd : pointy . Int64 ( 20000 ), }, ), schedule . NewEvent ( \"event-0002\" , schedule . EventScheduleTypeRelative , schedule . NewRepeatSetting ( schedule . RepeatSettingRepeatTypeAlways , schedule . RepeatSettingOptions { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 1 ), BeginHour : pointy . Int32 ( 0 ), EndHour : pointy . Int32 ( 0 ), ActiveDays : pointy . Int32 ( 1 ), InactiveDays : pointy . Int32 ( 0 ), }, ), schedule . EventOptions { Metadata : pointy . String ( \"EVENT_0002\" ), RelativeTriggerName : pointy . String ( \"trigger-0001\" ), }, ), schedule . NewEvent ( \"daily-0001\" , schedule . EventScheduleTypeAbsolute , schedule . NewRepeatSetting ( schedule . RepeatSettingRepeatTypeAlways , schedule . RepeatSettingOptions { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 1 ), BeginHour : pointy . Int32 ( 0 ), EndHour : pointy . Int32 ( 0 ), ActiveDays : pointy . Int32 ( 1 ), InactiveDays : pointy . Int32 ( 0 ), }, ), schedule . EventOptions { Metadata : pointy . String ( \"EVENT_0003\" ), AbsoluteBegin : pointy . Int64 ( 1569369600000 ), AbsoluteEnd : pointy . Int64 ( 1569456000000 ), }, ), schedule . NewEvent ( \"daily-0002\" , schedule . EventScheduleTypeAbsolute , schedule . NewRepeatSetting ( schedule . RepeatSettingRepeatTypeAlways , schedule . RepeatSettingOptions { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 1 ), BeginHour : pointy . Int32 ( 0 ), EndHour : pointy . Int32 ( 0 ), ActiveDays : pointy . Int32 ( 1 ), InactiveDays : pointy . Int32 ( 0 ), }, ), schedule . EventOptions { Metadata : pointy . String ( \"EVENT_0004\" ), AbsoluteBegin : pointy . Int64 ( 1569369600000 ), AbsoluteEnd : pointy . Int64 ( 1569456000000 ), }, ), schedule . NewEvent ( \"weekly-0001\" , schedule . EventScheduleTypeAbsolute , schedule . NewRepeatSetting ( schedule . RepeatSettingRepeatTypeAlways , schedule . RepeatSettingOptions { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 1 ), BeginHour : pointy . Int32 ( 0 ), EndHour : pointy . Int32 ( 0 ), ActiveDays : pointy . Int32 ( 1 ), InactiveDays : pointy . Int32 ( 0 ), }, ), schedule . EventOptions { Metadata : pointy . String ( \"EVENT_0005\" ), AbsoluteBegin : pointy . Int64 ( 1569888000000 ), AbsoluteEnd : pointy . Int64 ( 1570406400000 ), }, ), schedule . NewEvent ( \"weekly-0002\" , schedule . EventScheduleTypeAbsolute , schedule . NewRepeatSetting ( schedule . RepeatSettingRepeatTypeAlways , schedule . RepeatSettingOptions { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 1 ), BeginHour : pointy . Int32 ( 0 ), EndHour : pointy . Int32 ( 0 ), ActiveDays : pointy . Int32 ( 1 ), InactiveDays : pointy . Int32 ( 0 ), }, ), schedule . EventOptions { Metadata : pointy . String ( \"EVENT_0006\" ), AbsoluteBegin : pointy . Int64 ( 1569888000000 ), AbsoluteEnd : pointy . Int64 ( 1570406400000 ), }, ), schedule . NewEvent ( \"monthly-0001\" , schedule . EventScheduleTypeAbsolute , schedule . NewRepeatSetting ( schedule . RepeatSettingRepeatTypeAlways , schedule . RepeatSettingOptions { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 1 ), BeginHour : pointy . Int32 ( 0 ), EndHour : pointy . Int32 ( 0 ), ActiveDays : pointy . Int32 ( 1 ), InactiveDays : pointy . Int32 ( 0 ), }, ), schedule . EventOptions { Metadata : pointy . String ( \"EVENT_0007\" ), AbsoluteBegin : pointy . Int64 ( 1570406400000 ), AbsoluteEnd : pointy . Int64 ( 1575158400000 ), }, ), schedule . NewEvent ( \"monthly-0002\" , schedule . EventScheduleTypeAbsolute , schedule . NewRepeatSetting ( schedule . RepeatSettingRepeatTypeAlways , schedule . RepeatSettingOptions { BeginDayOfMonth : pointy . Int32 ( 1 ), EndDayOfMonth : pointy . Int32 ( 1 ), BeginHour : pointy . Int32 ( 0 ), EndHour : pointy . Int32 ( 0 ), ActiveDays : pointy . Int32 ( 1 ), InactiveDays : pointy . Int32 ( 0 ), }, ), schedule . EventOptions { Metadata : pointy . String ( \"EVENT_0008\" ), AbsoluteBegin : pointy . Int64 ( 1570406400000 ), AbsoluteEnd : pointy . Int64 ( 1575158400000 ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Schedule\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Schedule\\Model\\Event ( name : \"event-0001\" , scheduleType : \\Gs2Cdk\\Schedule\\Model\\Enums\\EventScheduleType :: ABSOLUTE , repeatSetting : new \\Gs2Cdk\\Schedule\\Model\\RepeatSetting ( repeatType : \\Gs2Cdk\\Schedule\\Model\\Enums\\RepeatSettingRepeatType :: ALWAYS , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\RepeatSettingOptions ( beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 , ), ), options : new \\Gs2Cdk\\Schedule\\Model\\Options\\EventOptions ( metadata : \"EVENT_0001\" , absoluteBegin : 10000 , absoluteEnd : 20000 ) ), new \\Gs2Cdk\\Schedule\\Model\\Event ( name : \"event-0002\" , scheduleType : \\Gs2Cdk\\Schedule\\Model\\Enums\\EventScheduleType :: RELATIVE , repeatSetting : new \\Gs2Cdk\\Schedule\\Model\\RepeatSetting ( repeatType : \\Gs2Cdk\\Schedule\\Model\\Enums\\RepeatSettingRepeatType :: ALWAYS , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\RepeatSettingOptions ( beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 , ), ), options : new \\Gs2Cdk\\Schedule\\Model\\Options\\EventOptions ( metadata : \"EVENT_0002\" , relativeTriggerName : \"trigger-0001\" ) ), new \\Gs2Cdk\\Schedule\\Model\\Event ( name : \"daily-0001\" , scheduleType : \\Gs2Cdk\\Schedule\\Model\\Enums\\EventScheduleType :: ABSOLUTE , repeatSetting : new \\Gs2Cdk\\Schedule\\Model\\RepeatSetting ( repeatType : \\Gs2Cdk\\Schedule\\Model\\Enums\\RepeatSettingRepeatType :: ALWAYS , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\RepeatSettingOptions ( beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 , ), ), options : new \\Gs2Cdk\\Schedule\\Model\\Options\\EventOptions ( metadata : \"EVENT_0003\" , absoluteBegin : 1569369600000 , absoluteEnd : 1569456000000 ) ), new \\Gs2Cdk\\Schedule\\Model\\Event ( name : \"daily-0002\" , scheduleType : \\Gs2Cdk\\Schedule\\Model\\Enums\\EventScheduleType :: ABSOLUTE , repeatSetting : new \\Gs2Cdk\\Schedule\\Model\\RepeatSetting ( repeatType : \\Gs2Cdk\\Schedule\\Model\\Enums\\RepeatSettingRepeatType :: ALWAYS , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\RepeatSettingOptions ( beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 , ), ), options : new \\Gs2Cdk\\Schedule\\Model\\Options\\EventOptions ( metadata : \"EVENT_0004\" , absoluteBegin : 1569369600000 , absoluteEnd : 1569456000000 ) ), new \\Gs2Cdk\\Schedule\\Model\\Event ( name : \"weekly-0001\" , scheduleType : \\Gs2Cdk\\Schedule\\Model\\Enums\\EventScheduleType :: ABSOLUTE , repeatSetting : new \\Gs2Cdk\\Schedule\\Model\\RepeatSetting ( repeatType : \\Gs2Cdk\\Schedule\\Model\\Enums\\RepeatSettingRepeatType :: ALWAYS , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\RepeatSettingOptions ( beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 , ), ), options : new \\Gs2Cdk\\Schedule\\Model\\Options\\EventOptions ( metadata : \"EVENT_0005\" , absoluteBegin : 1569888000000 , absoluteEnd : 1570406400000 ) ), new \\Gs2Cdk\\Schedule\\Model\\Event ( name : \"weekly-0002\" , scheduleType : \\Gs2Cdk\\Schedule\\Model\\Enums\\EventScheduleType :: ABSOLUTE , repeatSetting : new \\Gs2Cdk\\Schedule\\Model\\RepeatSetting ( repeatType : \\Gs2Cdk\\Schedule\\Model\\Enums\\RepeatSettingRepeatType :: ALWAYS , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\RepeatSettingOptions ( beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 , ), ), options : new \\Gs2Cdk\\Schedule\\Model\\Options\\EventOptions ( metadata : \"EVENT_0006\" , absoluteBegin : 1569888000000 , absoluteEnd : 1570406400000 ) ), new \\Gs2Cdk\\Schedule\\Model\\Event ( name : \"monthly-0001\" , scheduleType : \\Gs2Cdk\\Schedule\\Model\\Enums\\EventScheduleType :: ABSOLUTE , repeatSetting : new \\Gs2Cdk\\Schedule\\Model\\RepeatSetting ( repeatType : \\Gs2Cdk\\Schedule\\Model\\Enums\\RepeatSettingRepeatType :: ALWAYS , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\RepeatSettingOptions ( beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 , ), ), options : new \\Gs2Cdk\\Schedule\\Model\\Options\\EventOptions ( metadata : \"EVENT_0007\" , absoluteBegin : 1570406400000 , absoluteEnd : 1575158400000 ) ), new \\Gs2Cdk\\Schedule\\Model\\Event ( name : \"monthly-0002\" , scheduleType : \\Gs2Cdk\\Schedule\\Model\\Enums\\EventScheduleType :: ABSOLUTE , repeatSetting : new \\Gs2Cdk\\Schedule\\Model\\RepeatSetting ( repeatType : \\Gs2Cdk\\Schedule\\Model\\Enums\\RepeatSettingRepeatType :: ALWAYS , options : new \\Gs2Cdk\\Schedule\\Model\\Options\\RepeatSettingOptions ( beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 , ), ), options : new \\Gs2Cdk\\Schedule\\Model\\Options\\EventOptions ( metadata : \"EVENT_0008\" , absoluteBegin : 1570406400000 , absoluteEnd : 1575158400000 ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . schedule . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . schedule . model . Event ( \"event-0001\" , io . gs2 . cdk . schedule . model . enums . EventScheduleType . ABSOLUTE , new io . gs2 . cdk . schedule . model . RepeatSetting ( io . gs2 . cdk . schedule . model . enums . RepeatSettingRepeatType . ALWAYS , new io . gs2 . cdk . schedule . model . options . RepeatSettingOptions () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 1 ) . withBeginHour ( 0 ) . withEndHour ( 0 ) . withActiveDays ( 1 ) . withInactiveDays ( 0 ) ), new io . gs2 . cdk . schedule . model . options . EventOptions () . withMetadata ( \"EVENT_0001\" ) . withAbsoluteBegin ( 10000L ) . withAbsoluteEnd ( 20000L ) ), new io . gs2 . cdk . schedule . model . Event ( \"event-0002\" , io . gs2 . cdk . schedule . model . enums . EventScheduleType . RELATIVE , new io . gs2 . cdk . schedule . model . RepeatSetting ( io . gs2 . cdk . schedule . model . enums . RepeatSettingRepeatType . ALWAYS , new io . gs2 . cdk . schedule . model . options . RepeatSettingOptions () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 1 ) . withBeginHour ( 0 ) . withEndHour ( 0 ) . withActiveDays ( 1 ) . withInactiveDays ( 0 ) ), new io . gs2 . cdk . schedule . model . options . EventOptions () . withMetadata ( \"EVENT_0002\" ) . withRelativeTriggerName ( \"trigger-0001\" ) ), new io . gs2 . cdk . schedule . model . Event ( \"daily-0001\" , io . gs2 . cdk . schedule . model . enums . EventScheduleType . ABSOLUTE , new io . gs2 . cdk . schedule . model . RepeatSetting ( io . gs2 . cdk . schedule . model . enums . RepeatSettingRepeatType . ALWAYS , new io . gs2 . cdk . schedule . model . options . RepeatSettingOptions () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 1 ) . withBeginHour ( 0 ) . withEndHour ( 0 ) . withActiveDays ( 1 ) . withInactiveDays ( 0 ) ), new io . gs2 . cdk . schedule . model . options . EventOptions () . withMetadata ( \"EVENT_0003\" ) . withAbsoluteBegin ( 1569369600000L ) . withAbsoluteEnd ( 1569456000000L ) ), new io . gs2 . cdk . schedule . model . Event ( \"daily-0002\" , io . gs2 . cdk . schedule . model . enums . EventScheduleType . ABSOLUTE , new io . gs2 . cdk . schedule . model . RepeatSetting ( io . gs2 . cdk . schedule . model . enums . RepeatSettingRepeatType . ALWAYS , new io . gs2 . cdk . schedule . model . options . RepeatSettingOptions () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 1 ) . withBeginHour ( 0 ) . withEndHour ( 0 ) . withActiveDays ( 1 ) . withInactiveDays ( 0 ) ), new io . gs2 . cdk . schedule . model . options . EventOptions () . withMetadata ( \"EVENT_0004\" ) . withAbsoluteBegin ( 1569369600000L ) . withAbsoluteEnd ( 1569456000000L ) ), new io . gs2 . cdk . schedule . model . Event ( \"weekly-0001\" , io . gs2 . cdk . schedule . model . enums . EventScheduleType . ABSOLUTE , new io . gs2 . cdk . schedule . model . RepeatSetting ( io . gs2 . cdk . schedule . model . enums . RepeatSettingRepeatType . ALWAYS , new io . gs2 . cdk . schedule . model . options . RepeatSettingOptions () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 1 ) . withBeginHour ( 0 ) . withEndHour ( 0 ) . withActiveDays ( 1 ) . withInactiveDays ( 0 ) ), new io . gs2 . cdk . schedule . model . options . EventOptions () . withMetadata ( \"EVENT_0005\" ) . withAbsoluteBegin ( 1569888000000L ) . withAbsoluteEnd ( 1570406400000L ) ), new io . gs2 . cdk . schedule . model . Event ( \"weekly-0002\" , io . gs2 . cdk . schedule . model . enums . EventScheduleType . ABSOLUTE , new io . gs2 . cdk . schedule . model . RepeatSetting ( io . gs2 . cdk . schedule . model . enums . RepeatSettingRepeatType . ALWAYS , new io . gs2 . cdk . schedule . model . options . RepeatSettingOptions () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 1 ) . withBeginHour ( 0 ) . withEndHour ( 0 ) . withActiveDays ( 1 ) . withInactiveDays ( 0 ) ), new io . gs2 . cdk . schedule . model . options . EventOptions () . withMetadata ( \"EVENT_0006\" ) . withAbsoluteBegin ( 1569888000000L ) . withAbsoluteEnd ( 1570406400000L ) ), new io . gs2 . cdk . schedule . model . Event ( \"monthly-0001\" , io . gs2 . cdk . schedule . model . enums . EventScheduleType . ABSOLUTE , new io . gs2 . cdk . schedule . model . RepeatSetting ( io . gs2 . cdk . schedule . model . enums . RepeatSettingRepeatType . ALWAYS , new io . gs2 . cdk . schedule . model . options . RepeatSettingOptions () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 1 ) . withBeginHour ( 0 ) . withEndHour ( 0 ) . withActiveDays ( 1 ) . withInactiveDays ( 0 ) ), new io . gs2 . cdk . schedule . model . options . EventOptions () . withMetadata ( \"EVENT_0007\" ) . withAbsoluteBegin ( 1570406400000L ) . withAbsoluteEnd ( 1575158400000L ) ), new io . gs2 . cdk . schedule . model . Event ( \"monthly-0002\" , io . gs2 . cdk . schedule . model . enums . EventScheduleType . ABSOLUTE , new io . gs2 . cdk . schedule . model . RepeatSetting ( io . gs2 . cdk . schedule . model . enums . RepeatSettingRepeatType . ALWAYS , new io . gs2 . cdk . schedule . model . options . RepeatSettingOptions () . withBeginDayOfMonth ( 1 ) . withEndDayOfMonth ( 1 ) . withBeginHour ( 0 ) . withEndHour ( 0 ) . withActiveDays ( 1 ) . withInactiveDays ( 0 ) ), new io . gs2 . cdk . schedule . model . options . EventOptions () . withMetadata ( \"EVENT_0008\" ) . withAbsoluteBegin ( 1570406400000L ) . withAbsoluteEnd ( 1575158400000L ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Schedule . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Schedule . Model . Event [] { new Gs2Cdk . Gs2Schedule . Model . Event ( name : \"event-0001\" , scheduleType : Gs2Cdk . Gs2Schedule . Model . Enums . EventScheduleType . Absolute , repeatSetting : new Gs2Cdk . Gs2Schedule . Model . RepeatSetting ( repeatType : Gs2Cdk . Gs2Schedule . Model . Enums . RepeatSettingRepeatType . Always , options : new Gs2Cdk . Gs2Schedule . Model . Options . RepeatSettingOptions { beginDayOfMonth = 1 , endDayOfMonth = 1 , beginHour = 0 , endHour = 0 , activeDays = 1 , inactiveDays = 0 } ), options : new Gs2Cdk . Gs2Schedule . Model . Options . EventOptions { metadata = \"EVENT_0001\" , absoluteBegin = 10000L , absoluteEnd = 20000L } ), new Gs2Cdk . Gs2Schedule . Model . Event ( name : \"event-0002\" , scheduleType : Gs2Cdk . Gs2Schedule . Model . Enums . EventScheduleType . Relative , repeatSetting : new Gs2Cdk . Gs2Schedule . Model . RepeatSetting ( repeatType : Gs2Cdk . Gs2Schedule . Model . Enums . RepeatSettingRepeatType . Always , options : new Gs2Cdk . Gs2Schedule . Model . Options . RepeatSettingOptions { beginDayOfMonth = 1 , endDayOfMonth = 1 , beginHour = 0 , endHour = 0 , activeDays = 1 , inactiveDays = 0 } ), options : new Gs2Cdk . Gs2Schedule . Model . Options . EventOptions { metadata = \"EVENT_0002\" , relativeTriggerName = \"trigger-0001\" } ), new Gs2Cdk . Gs2Schedule . Model . Event ( name : \"daily-0001\" , scheduleType : Gs2Cdk . Gs2Schedule . Model . Enums . EventScheduleType . Absolute , repeatSetting : new Gs2Cdk . Gs2Schedule . Model . RepeatSetting ( repeatType : Gs2Cdk . Gs2Schedule . Model . Enums . RepeatSettingRepeatType . Always , options : new Gs2Cdk . Gs2Schedule . Model . Options . RepeatSettingOptions { beginDayOfMonth = 1 , endDayOfMonth = 1 , beginHour = 0 , endHour = 0 , activeDays = 1 , inactiveDays = 0 } ), options : new Gs2Cdk . Gs2Schedule . Model . Options . EventOptions { metadata = \"EVENT_0003\" , absoluteBegin = 1569369600000L , absoluteEnd = 1569456000000L } ), new Gs2Cdk . Gs2Schedule . Model . Event ( name : \"daily-0002\" , scheduleType : Gs2Cdk . Gs2Schedule . Model . Enums . EventScheduleType . Absolute , repeatSetting : new Gs2Cdk . Gs2Schedule . Model . RepeatSetting ( repeatType : Gs2Cdk . Gs2Schedule . Model . Enums . RepeatSettingRepeatType . Always , options : new Gs2Cdk . Gs2Schedule . Model . Options . RepeatSettingOptions { beginDayOfMonth = 1 , endDayOfMonth = 1 , beginHour = 0 , endHour = 0 , activeDays = 1 , inactiveDays = 0 } ), options : new Gs2Cdk . Gs2Schedule . Model . Options . EventOptions { metadata = \"EVENT_0004\" , absoluteBegin = 1569369600000L , absoluteEnd = 1569456000000L } ), new Gs2Cdk . Gs2Schedule . Model . Event ( name : \"weekly-0001\" , scheduleType : Gs2Cdk . Gs2Schedule . Model . Enums . EventScheduleType . Absolute , repeatSetting : new Gs2Cdk . Gs2Schedule . Model . RepeatSetting ( repeatType : Gs2Cdk . Gs2Schedule . Model . Enums . RepeatSettingRepeatType . Always , options : new Gs2Cdk . Gs2Schedule . Model . Options . RepeatSettingOptions { beginDayOfMonth = 1 , endDayOfMonth = 1 , beginHour = 0 , endHour = 0 , activeDays = 1 , inactiveDays = 0 } ), options : new Gs2Cdk . Gs2Schedule . Model . Options . EventOptions { metadata = \"EVENT_0005\" , absoluteBegin = 1569888000000L , absoluteEnd = 1570406400000L } ), new Gs2Cdk . Gs2Schedule . Model . Event ( name : \"weekly-0002\" , scheduleType : Gs2Cdk . Gs2Schedule . Model . Enums . EventScheduleType . Absolute , repeatSetting : new Gs2Cdk . Gs2Schedule . Model . RepeatSetting ( repeatType : Gs2Cdk . Gs2Schedule . Model . Enums . RepeatSettingRepeatType . Always , options : new Gs2Cdk . Gs2Schedule . Model . Options . RepeatSettingOptions { beginDayOfMonth = 1 , endDayOfMonth = 1 , beginHour = 0 , endHour = 0 , activeDays = 1 , inactiveDays = 0 } ), options : new Gs2Cdk . Gs2Schedule . Model . Options . EventOptions { metadata = \"EVENT_0006\" , absoluteBegin = 1569888000000L , absoluteEnd = 1570406400000L } ), new Gs2Cdk . Gs2Schedule . Model . Event ( name : \"monthly-0001\" , scheduleType : Gs2Cdk . Gs2Schedule . Model . Enums . EventScheduleType . Absolute , repeatSetting : new Gs2Cdk . Gs2Schedule . Model . RepeatSetting ( repeatType : Gs2Cdk . Gs2Schedule . Model . Enums . RepeatSettingRepeatType . Always , options : new Gs2Cdk . Gs2Schedule . Model . Options . RepeatSettingOptions { beginDayOfMonth = 1 , endDayOfMonth = 1 , beginHour = 0 , endHour = 0 , activeDays = 1 , inactiveDays = 0 } ), options : new Gs2Cdk . Gs2Schedule . Model . Options . EventOptions { metadata = \"EVENT_0007\" , absoluteBegin = 1570406400000L , absoluteEnd = 1575158400000L } ), new Gs2Cdk . Gs2Schedule . Model . Event ( name : \"monthly-0002\" , scheduleType : Gs2Cdk . Gs2Schedule . Model . Enums . EventScheduleType . Absolute , repeatSetting : new Gs2Cdk . Gs2Schedule . Model . RepeatSetting ( repeatType : Gs2Cdk . Gs2Schedule . Model . Enums . RepeatSettingRepeatType . Always , options : new Gs2Cdk . Gs2Schedule . Model . Options . RepeatSettingOptions { beginDayOfMonth = 1 , endDayOfMonth = 1 , beginHour = 0 , endHour = 0 , activeDays = 1 , inactiveDays = 0 } ), options : new Gs2Cdk . Gs2Schedule . Model . Options . EventOptions { metadata = \"EVENT_0008\" , absoluteBegin = 1570406400000L , absoluteEnd = 1575158400000L } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import schedule from \"@/gs2cdk/schedule\" ; class SampleStack extends core . Stack { public constructor () { super (); new schedule . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new schedule . model . Event ( \"event-0001\" , schedule . model . EventScheduleType . ABSOLUTE , new schedule . model . RepeatSetting ( schedule . model . RepeatSettingRepeatType . ALWAYS , { beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 } ), { metadata : \"EVENT_0001\" , absoluteBegin : 10000 , absoluteEnd : 20000 } ), new schedule . model . Event ( \"event-0002\" , schedule . model . EventScheduleType . RELATIVE , new schedule . model . RepeatSetting ( schedule . model . RepeatSettingRepeatType . ALWAYS , { beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 } ), { metadata : \"EVENT_0002\" , relativeTriggerName : \"trigger-0001\" } ), new schedule . model . Event ( \"daily-0001\" , schedule . model . EventScheduleType . ABSOLUTE , new schedule . model . RepeatSetting ( schedule . model . RepeatSettingRepeatType . ALWAYS , { beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 } ), { metadata : \"EVENT_0003\" , absoluteBegin : 1569369600000 , absoluteEnd : 1569456000000 } ), new schedule . model . Event ( \"daily-0002\" , schedule . model . EventScheduleType . ABSOLUTE , new schedule . model . RepeatSetting ( schedule . model . RepeatSettingRepeatType . ALWAYS , { beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 } ), { metadata : \"EVENT_0004\" , absoluteBegin : 1569369600000 , absoluteEnd : 1569456000000 } ), new schedule . model . Event ( \"weekly-0001\" , schedule . model . EventScheduleType . ABSOLUTE , new schedule . model . RepeatSetting ( schedule . model . RepeatSettingRepeatType . ALWAYS , { beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 } ), { metadata : \"EVENT_0005\" , absoluteBegin : 1569888000000 , absoluteEnd : 1570406400000 } ), new schedule . model . Event ( \"weekly-0002\" , schedule . model . EventScheduleType . ABSOLUTE , new schedule . model . RepeatSetting ( schedule . model . RepeatSettingRepeatType . ALWAYS , { beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 } ), { metadata : \"EVENT_0006\" , absoluteBegin : 1569888000000 , absoluteEnd : 1570406400000 } ), new schedule . model . Event ( \"monthly-0001\" , schedule . model . EventScheduleType . ABSOLUTE , new schedule . model . RepeatSetting ( schedule . model . RepeatSettingRepeatType . ALWAYS , { beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 } ), { metadata : \"EVENT_0007\" , absoluteBegin : 1570406400000 , absoluteEnd : 1575158400000 } ), new schedule . model . Event ( \"monthly-0002\" , schedule . model . EventScheduleType . ABSOLUTE , new schedule . model . RepeatSetting ( schedule . model . RepeatSettingRepeatType . ALWAYS , { beginDayOfMonth : 1 , endDayOfMonth : 1 , beginHour : 0 , endHour : 0 , activeDays : 1 , inactiveDays : 0 } ), { metadata : \"EVENT_0008\" , absoluteBegin : 1570406400000 , absoluteEnd : 1575158400000 } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , schedule class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () schedule . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( events = [ schedule . Event ( name = 'event-0001' , schedule_type = schedule . EventScheduleType . ABSOLUTE , repeat_setting = schedule . RepeatSetting ( repeat_type = schedule . RepeatSettingRepeatType . ALWAYS , options = schedule . RepeatSettingOptions ( begin_day_of_month = 1 , end_day_of_month = 1 , begin_hour = 0 , end_hour = 0 , active_days = 1 , inactive_days = 0 , ), ), options = schedule . EventOptions ( metadata = 'EVENT_0001' , absolute_begin = 10000 , absolute_end = 20000 ), ), schedule . Event ( name = 'event-0002' , schedule_type = schedule . EventScheduleType . RELATIVE , repeat_setting = schedule . RepeatSetting ( repeat_type = schedule . RepeatSettingRepeatType . ALWAYS , options = schedule . RepeatSettingOptions ( begin_day_of_month = 1 , end_day_of_month = 1 , begin_hour = 0 , end_hour = 0 , active_days = 1 , inactive_days = 0 , ), ), options = schedule . EventOptions ( metadata = 'EVENT_0002' , relative_trigger_name = 'trigger-0001' ), ), schedule . Event ( name = 'daily-0001' , schedule_type = schedule . EventScheduleType . ABSOLUTE , repeat_setting = schedule . RepeatSetting ( repeat_type = schedule . RepeatSettingRepeatType . ALWAYS , options = schedule . RepeatSettingOptions ( begin_day_of_month = 1 , end_day_of_month = 1 , begin_hour = 0 , end_hour = 0 , active_days = 1 , inactive_days = 0 , ), ), options = schedule . EventOptions ( metadata = 'EVENT_0003' , absolute_begin = 1569369600000 , absolute_end = 1569456000000 ), ), schedule . Event ( name = 'daily-0002' , schedule_type = schedule . EventScheduleType . ABSOLUTE , repeat_setting = schedule . RepeatSetting ( repeat_type = schedule . RepeatSettingRepeatType . ALWAYS , options = schedule . RepeatSettingOptions ( begin_day_of_month = 1 , end_day_of_month = 1 , begin_hour = 0 , end_hour = 0 , active_days = 1 , inactive_days = 0 , ), ), options = schedule . EventOptions ( metadata = 'EVENT_0004' , absolute_begin = 1569369600000 , absolute_end = 1569456000000 ), ), schedule . Event ( name = 'weekly-0001' , schedule_type = schedule . EventScheduleType . ABSOLUTE , repeat_setting = schedule . RepeatSetting ( repeat_type = schedule . RepeatSettingRepeatType . ALWAYS , options = schedule . RepeatSettingOptions ( begin_day_of_month = 1 , end_day_of_month = 1 , begin_hour = 0 , end_hour = 0 , active_days = 1 , inactive_days = 0 , ), ), options = schedule . EventOptions ( metadata = 'EVENT_0005' , absolute_begin = 1569888000000 , absolute_end = 1570406400000 ), ), schedule . Event ( name = 'weekly-0002' , schedule_type = schedule . EventScheduleType . ABSOLUTE , repeat_setting = schedule . RepeatSetting ( repeat_type = schedule . RepeatSettingRepeatType . ALWAYS , options = schedule . RepeatSettingOptions ( begin_day_of_month = 1 , end_day_of_month = 1 , begin_hour = 0 , end_hour = 0 , active_days = 1 , inactive_days = 0 , ), ), options = schedule . EventOptions ( metadata = 'EVENT_0006' , absolute_begin = 1569888000000 , absolute_end = 1570406400000 ), ), schedule . Event ( name = 'monthly-0001' , schedule_type = schedule . EventScheduleType . ABSOLUTE , repeat_setting = schedule . RepeatSetting ( repeat_type = schedule . RepeatSettingRepeatType . ALWAYS , options = schedule . RepeatSettingOptions ( begin_day_of_month = 1 , end_day_of_month = 1 , begin_hour = 0 , end_hour = 0 , active_days = 1 , inactive_days = 0 , ), ), options = schedule . EventOptions ( metadata = 'EVENT_0007' , absolute_begin = 1570406400000 , absolute_end = 1575158400000 ), ), schedule . Event ( name = 'monthly-0002' , schedule_type = schedule . EventScheduleType . ABSOLUTE , repeat_setting = schedule . RepeatSetting ( repeat_type = schedule . RepeatSettingRepeatType . ALWAYS , options = schedule . RepeatSettingOptions ( begin_day_of_month = 1 , end_day_of_month = 1 , begin_hour = 0 , end_hour = 0 , active_days = 1 , inactive_days = 0 , ), ), options = schedule . EventOptions ( metadata = 'EVENT_0008' , absolute_begin = 1570406400000 , absolute_end = 1575158400000 ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template Event 이벤트 이벤트의 기간에는 절대 기간과 상대 기간의 2가지 종류가 있습니다. 절대 기간은 예를 들어 YYYY년 MM월 DD일 00:00(UTC) ~ YYYY년 MM월 DD일 23:59(UTC)와 같은 고정된 기간이며, 상대 기간은 트리거를 당긴 시점부터 24시간과 같이 게임 플레이어마다 다른 기간을 이벤트 기간으로 하는 것입니다. 이벤트에는 개최 기간뿐만 아니라 반복도 설정할 수 있게 되어 있어 이벤트 기간 중 월요일 10:00 ~ 11:00만을 이벤트 기간으로 하는 설정도 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 eventId string ※ ~ 1024자 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scheduleType 문자열 열거형 enum {   “absolute”,   “relative” }  스케줄 타입 이벤트 기간을 정의하는 방식을 결정합니다. “absolute\"는 모든 플레이어에게 동일하게 적용되는 고정된 시작/종료 타임스탬프를 사용합니다. “relative\"는 플레이어별 트리거를 기점으로 사용하여, 개인화된 이벤트 기간을 구현합니다(예: 각 플레이어가 처음 로그인한 시점부터 24시간). 정의 설명 absolute 고정 기간 relative 플레이어별 기간 absoluteBegin long 절대 시작 일시 절대 스케줄링에서 이벤트 기간의 고정 시작 시각입니다. 모든 플레이어가 동일한 시작 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 과거부터 시작된 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. absoluteEnd long 절대 종료 일시 절대 스케줄링에서 이벤트 기간의 고정 종료 시각입니다. 모든 플레이어가 동일한 종료 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 종료되지 않는 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. relativeTriggerName string {scheduleType} == “relative” ※ ~ 128자 이벤트 시작 트리거 이름 게임 플레이어별로 이벤트 기간을 설정하는( relative ) 경우, 이벤트 시작의 기점이 되는 트리거의 이름을 지정합니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ※ scheduleType이(가) “relative” 이면 필수 repeatSetting RepeatSetting  반복 설정 이벤트 기간 내에서 반복되는 유효 시간대에 대한 설정입니다. 활성 기간을 특정 시간대, 요일, 월중 날짜, 또는 사용자 지정 활성/비활성 일 주기로 좁힐 수 있습니다. 반복 패턴 없이 이벤트 기간 전체를 활성 상태로 유지하려면 repeatType을 “always\"로 설정합니다. RepeatSetting 반복 설정 이벤트 전체 기간 내에서 반복되는 유효 시간대를 설정합니다. 5가지 반복 타입을 지원합니다: “always”(이벤트 기간 전체), “daily”(매일 특정 시간대), “weekly”(매주 특정 요일 범위+시간대), “monthly”(매월 특정 날짜 범위+시간대), “custom”(기준일로부터 활성/비활성 일수의 교대 주기). daily/weekly/monthly 타입에서 beginHour와 endHour가 같으면 종료 시각은 다음 날 같은 시각으로 처리됩니다(즉 24시간 전체 윈도우). 타입 활성화 조건 필수 기본값 값 제한 설명 repeatType 문자열 열거형 enum {   “always”,   “daily”,   “weekly”,   “monthly”,   “custom” } “always” 반복 종류 이벤트 기간 내에 적용할 반복 패턴의 종류입니다. 타입에 따라 필요한 추가 필드가 다릅니다: daily/weekly/monthly는 시간 설정, weekly는 요일, monthly는 날짜, custom은 기준 타임스탬프와 일수가 필요합니다. 지정하지 않으면 기본값은 “always\"입니다. 정의 설명 always 이벤트 기간 중 상시 유효 daily 이벤트 기간 중 매일 X시 X시 weekly 이벤트 기간 중 매주 개시 요일 종료 요일 X시 X시 monthly 이벤트 기간 중 매월 개시일 종료일 X시~X시 custom 기준일부터 시작하여, 이벤트 기간 중 X일 활성, Y일 비활성을 반복 beginDayOfMonth int {repeatType} == “monthly” ※ 1 ~ 31 반복 시작일 반복 윈도우가 시작되는 월중 날짜(1~31)입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 해당 월의 마지막 날로 처리됩니다. repeatType이 “monthly\"인 경우에만 적용됩니다. ※ repeatType이(가) “monthly” 이면 필수 endDayOfMonth int {repeatType} == “monthly” ※ 1 ~ 31 반복 종료일 반복 윈도우가 종료되는 월중 날짜(1~31)입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 해당 월의 마지막 날로 처리됩니다. repeatType이 “monthly\"인 경우에만 적용됩니다. ※ repeatType이(가) “monthly” 이면 필수 beginDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {repeatType} == “weekly” ※ 반복 시작 요일 반복 윈도우가 시작되는 요일입니다. 윈도우는 주의 경계를 넘어설 수 있습니다(예: 금요일~월요일). repeatType이 “weekly\"인 경우에만 적용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ repeatType이(가) “weekly” 이면 필수 endDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {repeatType} == “weekly” ※ 반복 종료 요일 반복 윈도우가 종료되는 요일입니다. beginDayOfWeek과 조합하여 주간 활성 기간을 정의합니다. repeatType이 “weekly\"인 경우에만 적용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ repeatType이(가) “weekly” 이면 필수 beginHour int {repeatType} in [“daily”, “weekly”, “monthly”] ※ 0 ~ 23 반복 시작 시각(시) 각 주기마다 반복 윈도우가 시작되는 시각(UTC, 0~23)입니다. daily, weekly, monthly 반복 타입에서 필수입니다. beginHour와 endHour가 같으면 윈도우는 24시간(다음 날 같은 시각까지)이 됩니다. ※ repeatType이(가) “daily”,“weekly”,“monthly\"이면 필수 endHour int {repeatType} in [“daily”, “weekly”, “monthly”] ※ 0 ~ 24 반복 종료 시각(시) 각 주기마다 반복 윈도우가 종료되는 시각(UTC, 0~24)입니다. 24를 지정하면 다음 날 자정을 나타냅니다. daily, weekly, monthly 반복 타입에서 필수입니다. ※ repeatType이(가) “daily”,“weekly”,“monthly\"이면 필수 anchorTimestamp long {repeatType} == “custom” ※ 기준 타임스탬프 커스텀 활성/비활성 주기가 시작되는 기준일입니다. 시스템은 이 기준일로부터 경과한 일수를 바탕으로 현재 시각이 어느 단계(활성 또는 비활성)에 있는지 계산합니다. repeatType이 “custom\"인 경우에만 적용됩니다. UNIX 시간(밀리초)으로 표현합니다. ※ repeatType이(가) “custom” 이면 필수 activeDays int {repeatType} == “custom” ※ 1 ~ 2147483646 활성 일수 각 커스텀 주기에서 이벤트가 연속으로 활성 상태가 되는 일수입니다. 활성 일수가 지난 후, inactiveDays에서 지정한 일수만큼 이벤트가 비활성 상태가 되며, 이후 주기가 반복됩니다. repeatType이 “custom\"인 경우에만 적용됩니다. 최소 1일. ※ repeatType이(가) “custom” 이면 필수 inactiveDays int {repeatType} == “custom” ※ 0 ~ 2147483646 비활성 일수 각 커스텀 주기에서 이벤트가 연속으로 비활성 상태가 되는 일수입니다. 활성 일수 뒤에 이어집니다. 공백 없이 계속 활성 상태인 이벤트로 하려면 0을 설정합니다. repeatType이 “custom\"인 경우에만 적용됩니다. 최소 0일. ※ repeatType이(가) “custom” 이면 필수","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Schedule Deploy/CDK 레퍼런스","url":"/ko/api_reference/schedule/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스크립트가 트랜잭션 액션을 반환할 때 사용되는 분산 트랜잭션 설정입니다. logSetting LogSetting 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 스크립트 호출과 그 결과의 추적에 사용됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Script::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/script\" ) SampleStack := core . NewStack () script . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , script . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Script\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Script\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . script . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . script . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Script . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Script . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import script from \"@/gs2cdk/script\" ; class SampleStack extends core . Stack { public constructor () { super (); new script . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , script class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () script . Namespace ( stack = self , name = 'namespace-0001' , options = script . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. Script 스크립트 GS2에서는 표준 기능만으로 기능을 구현할 수 없을 때를 위해 스크립트로 기능을 확장할 수 있게 되어 있습니다. 스크립트는 Lua 언어로 작성할 수 있습니다. 스크립트 내에서 GS2 서비스의 데이터를 취득할 수도 있으므로, 유연한 처리를 작성할 수 있습니다. 자세한 내용은 문서를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. name string  ~ 128자 스크립트 이름 스크립트 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 script string  ~ 5242880자 Lua 스크립트 실행할 Lua 스크립트의 소스 코드입니다. 스크립트에서 GS2 서비스의 데이터에 액세스하여 호출한 서비스의 동작을 변경하는 결과를 반환할 수 있습니다. disableStringNumberToNumber bool false 문자열-숫자 변환 비활성화 활성화하면 숫자로만 구성된 문자열(예: “12345”)이 자동으로 숫자로 변환되지 않고 문자열로 유지됩니다. 숫자처럼 보여도 문자열 타입으로 유지해야 하는 ID나 코드를 다룰 때 유용합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Script 생성한 스크립트 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Script::Script Properties : NamespaceName : namespace-0001 Name : script-0001 Description : null Script : result = {permit=true} DisableStringNumberToNumber : false import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/script\" ) SampleStack := core . NewStack () script . NewScript ( \u0026 SampleStack , \"namespace-0001\" , \"script-0001\" , \"result = {permit=true}\" , script . ScriptOptions { DisableStringNumberToNumber : false , }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Script\\Model\\Script ( stack : $this , namespaceName : \"namespace-0001\" , name : \"script-0001\" , script : \"result = {permit=true}\" , options : new \\Gs2Cdk\\Script\\Model\\Options\\ScriptOptions ( disableStringNumberToNumber : false ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . script . model . Script ( this , \"namespace-0001\" , \"script-0001\" , \"result = {permit=true}\" , new io . gs2 . cdk . script . model . options . ScriptOptions () . withDisableStringNumberToNumber ( false ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Script . Model . Script ( stack : this , namespaceName : \"namespace-0001\" , name : \"script-0001\" , script : \"result = {permit=true}\" , options : new Gs2Cdk . Gs2Script . Model . Options . ScriptOptions { disableStringNumberToNumber = false } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import script from \"@/gs2cdk/script\" ; class SampleStack extends core . Stack { public constructor () { super (); new script . model . Script ( this , \"namespace-0001\" , \"script-0001\" , \"result = {permit=true}\" , { disableStringNumberToNumber : false } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , script class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () script . Script ( stack = self , namespace_name = 'namespace-0001' , name = 'script-0001' , script = 'result = {permit=true}' , options = script . ScriptOptions ( disable_string_number_to_number = False , ), ) print ( SampleStack () . yaml ()) # Generate Template","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Script Deploy/CDK 레퍼런스","url":"/ko/api_reference/script/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 시즌 레이팅 결과 적용 시 사용되는 트랜잭션 처리 설정입니다. logSetting LogSetting 로그 출력 설정 투표용지 발행, 투표 제출, 레이팅 계산 등 시즌 레이팅 조작에 대한 로그 출력 설정입니다. 설정한 경우, 조작 로그가 지정한 GS2-Log 네임스페이스로 출력됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::SeasonRating::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/seasonRating\" ) SampleStack := core . NewStack () seasonRating . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , seasonRating . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\SeasonRating\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\SeasonRating\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . seasonRating . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . seasonRating . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2SeasonRating . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2SeasonRating . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import seasonRating from \"@/gs2cdk/seasonRating\" ; class SampleStack extends core . Stack { public constructor () { super (); new seasonRating . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , season_rating class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () season_rating . Namespace ( stack = self , name = 'namespace-0001' , options = season_rating . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue에 의한 획득 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAtomicCommit bool false 트랜잭션의 실행을 원자적으로 커밋할지 여부 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentSeasonModelMaster 현재 활성화된 시즌 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한, 시즌 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-SeasonRating 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentSeasonModelMaster 갱신된 현재 활성화된 시즌 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::SeasonRating::CurrentSeasonModelMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2024-02-23\" , \"seasonModels\": [ { \"name\": \"season1\" , \"tiers\": [ { \"raiseRankBonus\": 0 , \"entryFee\": 0 , \"minimumChangePoint\": - 10 , \"maximumChangePoint\": 20 } , { \"raiseRankBonus\": 30 , \"entryFee\": 10 , \"minimumChangePoint\": - 10 , \"maximumChangePoint\": 30 } , { \"raiseRankBonus\": 60 , \"entryFee\": 20 , \"minimumChangePoint\": - 20 , \"maximumChangePoint\": 50 } , { \"raiseRankBonus\": 60 , \"entryFee\": 30 , \"minimumChangePoint\": - 30 , \"maximumChangePoint\": 60 } ], \"experienceModelId\": \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , \"challengePeriodEventId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/seasonRating\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () seasonRating . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , seasonRating . NamespaceOptions {}, ). MasterData ( [] seasonRating . SeasonModel { seasonRating . NewSeasonModel ( \"season1\" , [] seasonRating . TierModel { seasonRating . NewTierModel ( 0 , 0 , - 10 , 20 , seasonRating . TierModelOptions {}, ), seasonRating . NewTierModel ( 30 , 10 , - 10 , 30 , seasonRating . TierModelOptions {}, ), seasonRating . NewTierModel ( 60 , 20 , - 20 , 50 , seasonRating . TierModelOptions {}, ), seasonRating . NewTierModel ( 60 , 30 , - 30 , 60 , seasonRating . TierModelOptions {}, ), }, \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , seasonRating . SeasonModelOptions { ChallengePeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\SeasonRating\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\SeasonRating\\Model\\SeasonModel ( name : \"season1\" , tiers : [ new \\Gs2Cdk\\SeasonRating\\Model\\TierModel ( raiseRankBonus : 0 , entryFee : 0 , minimumChangePoint : - 10 , maximumChangePoint : 20 , ), new \\Gs2Cdk\\SeasonRating\\Model\\TierModel ( raiseRankBonus : 30 , entryFee : 10 , minimumChangePoint : - 10 , maximumChangePoint : 30 , ), new \\Gs2Cdk\\SeasonRating\\Model\\TierModel ( raiseRankBonus : 60 , entryFee : 20 , minimumChangePoint : - 20 , maximumChangePoint : 50 , ), new \\Gs2Cdk\\SeasonRating\\Model\\TierModel ( raiseRankBonus : 60 , entryFee : 30 , minimumChangePoint : - 30 , maximumChangePoint : 60 , ), ], experienceModelId : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , options : new \\Gs2Cdk\\SeasonRating\\Model\\Options\\SeasonModelOptions ( challengePeriodEventId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . seasonRating . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . seasonRating . model . SeasonModel ( \"season1\" , Arrays . asList ( new io . gs2 . cdk . seasonRating . model . TierModel ( 0 , 0 , - 10 , 20 ), new io . gs2 . cdk . seasonRating . model . TierModel ( 30 , 10 , - 10 , 30 ), new io . gs2 . cdk . seasonRating . model . TierModel ( 60 , 20 , - 20 , 50 ), new io . gs2 . cdk . seasonRating . model . TierModel ( 60 , 30 , - 30 , 60 ) ), \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , new io . gs2 . cdk . seasonRating . model . options . SeasonModelOptions () . withChallengePeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2SeasonRating . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2SeasonRating . Model . SeasonModel [] { new Gs2Cdk . Gs2SeasonRating . Model . SeasonModel ( name : \"season1\" , tiers : new Gs2Cdk . Gs2SeasonRating . Model . TierModel [] { new Gs2Cdk . Gs2SeasonRating . Model . TierModel ( raiseRankBonus : 0 , entryFee : 0 , minimumChangePoint : - 10 , maximumChangePoint : 20 ), new Gs2Cdk . Gs2SeasonRating . Model . TierModel ( raiseRankBonus : 30 , entryFee : 10 , minimumChangePoint : - 10 , maximumChangePoint : 30 ), new Gs2Cdk . Gs2SeasonRating . Model . TierModel ( raiseRankBonus : 60 , entryFee : 20 , minimumChangePoint : - 20 , maximumChangePoint : 50 ), new Gs2Cdk . Gs2SeasonRating . Model . TierModel ( raiseRankBonus : 60 , entryFee : 30 , minimumChangePoint : - 30 , maximumChangePoint : 60 ) }, experienceModelId : \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , options : new Gs2Cdk . Gs2SeasonRating . Model . Options . SeasonModelOptions { challengePeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import seasonRating from \"@/gs2cdk/seasonRating\" ; class SampleStack extends core . Stack { public constructor () { super (); new seasonRating . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new seasonRating . model . SeasonModel ( \"season1\" , [ new seasonRating . model . TierModel ( 0 , 0 , - 10 , 20 ), new seasonRating . model . TierModel ( 30 , 10 , - 10 , 30 ), new seasonRating . model . TierModel ( 60 , 20 , - 20 , 50 ), new seasonRating . model . TierModel ( 60 , 30 , - 30 , 60 ), ], \"grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level\" , { challengePeriodEventId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , season_rating class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () season_rating . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( season_models = [ season_rating . SeasonModel ( name = 'season1' , tiers = [ season_rating . TierModel ( raise_rank_bonus = 0 , entry_fee = 0 , minimum_change_point =- 10 , maximum_change_point = 20 , ), season_rating . TierModel ( raise_rank_bonus = 30 , entry_fee = 10 , minimum_change_point =- 10 , maximum_change_point = 30 , ), season_rating . TierModel ( raise_rank_bonus = 60 , entry_fee = 20 , minimum_change_point =- 20 , maximum_change_point = 50 , ), season_rating . TierModel ( raise_rank_bonus = 60 , entry_fee = 30 , minimum_change_point =- 30 , maximum_change_point = 60 , ), ], experience_model_id = 'grn:gs2:ap-northeast-1:YourOwnerId:experience:namespace-0001:model:level' , options = season_rating . SeasonModelOptions ( challenge_period_event_id = 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:namespace-0001:event:event-0001' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template SeasonModel 시즌 모델 시즌 기간 동안 적용되는 티어 구조와 포인트 변동 규칙을 정의하는 마스터 데이터입니다. 각 티어별 포인트 변동 범위·참가료·랭크업 보너스를 설정하고, 포인트 관리에 사용할 Experience 모델을 지정합니다. 실제 포인트 및 티어의 사용자 데이터는 GS2-Experience에 의해 관리됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tiers List  1 ~ 100 items 티어 모델 목록 시즌의 랭킹 사다리를 구성하는 티어 정의의 순서가 있는 목록. 각 티어는 고유한 포인트 변동 규칙(참가료, 최소/최대 변동량, 승급 보너스)을 정의합니다. 플레이어는 GS2-Experience에서 관리되는 누적 포인트에 따라 티어를 진행합니다. 최소 1개 티어, 최대 100개 티어. experienceModelId string  ~ 1024자 경험치 모델 ID 시즌 포인트와 티어 진행 관리에 사용되는 GS2-Experience 경험치 모델의 GRN. 경험치 모델의 랭크 임계값이 티어 경계를 결정하며, 경험치 값은 플레이어의 현재 시즌 포인트를 나타냅니다. 대전 결과에 따른 포인트 변동은 이 경험치 모델에 적용됩니다. challengePeriodEventId string ~ 1024자 챌린지 기간 이벤트 ID 시즌이 대전 가능한 기간을 정의하는 GS2-Schedule 이벤트의 GRN. 설정한 경우, 참조된 이벤트가 활성 상태인 동안에만 플레이어가 대전에 참가할 수 있습니다. 설정하지 않은 경우, 시즌에 기간 제한이 없습니다. TierModel 티어 모델 티어 모델은 시즌 내 각 티어의 포인트 변동 규칙을 정의하는 모델입니다. 순위에 따른 포인트 변동 범위, 참가료, 승급 시 보너스를 설정합니다. 포인트의 실제 데이터는 GS2-Experience에 의해 관리되지만, 그 증감 로직은 TierModel의 설정에 따라 결정됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. raiseRankBonus int  0 ~ 10000 랭크 승급 보너스 플레이어가 이 티어로 승급했을 때 가산되는 보너스 포인트로, 즉각적인 강등을 방지하는 완충 역할을 합니다. 예를 들어 100으로 설정하면, 승급 기준점보다 100포인트 많은 상태로 새 티어를 시작합니다. 유효 범위: 0~10000. entryFee int  0 ~ 10000 참가료 대전 시작 전 플레이어로부터 차감되는 참가 비용으로서의 포인트. 이 참가료는 대전 결과와 관계없이 항상 차감되며, 경쟁 플레이에 리스크 요소를 만듭니다. 유효 범위: 0~10000. minimumChangePoint int  -99999999 ~ -1 최소 변동 포인트 한 번의 대전 결과로 발생할 수 있는 최소(가장 음수인) 포인트 변동량으로, 일반적으로 최악의 패배 시 값을 나타냅니다. 음수 값이어야 합니다. 패배한 플레이어의 실제 포인트 변동은 이 값과 0 사이가 됩니다. 유효 범위: -99999999~-1. maximumChangePoint int  1 ~ 99999999 최대 변동 포인트 한 번의 대전 결과로 발생할 수 있는 최대(가장 양수인) 포인트 변동량으로, 일반적으로 최고의 승리 시 값을 나타냅니다. 양수 값이어야 합니다. 승리한 플레이어의 실제 포인트 변동은 0과 이 값 사이가 됩니다. 유효 범위: 1~99999999.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-SeasonRating Deploy/CDK 레퍼런스","url":"/ko/api_reference/season_rating/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명 transactionSetting TransactionSetting 트랜잭션 설정 시리얼 키 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. logSetting LogSetting 로그 출력 설정 시리얼 코드의 발행·사용에 관한 API 요청·응답 로그를 출력할 GS2-Log의 네임스페이스를 지정합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::SerialKey::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/serialKey\" ) SampleStack := core . NewStack () serialKey . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , serialKey . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\SerialKey\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\SerialKey\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . serialKey . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . serialKey . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2SerialKey . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2SerialKey . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import serialKey from \"@/gs2cdk/serialKey\" ; class SampleStack extends core . Stack { public constructor () { super (); new serialKey . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , serial_key class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () serial_key . Namespace ( stack = self , name = 'namespace-0001' , options = serial_key . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·경합 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue에 의한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그의 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하는 데 사용되는 로그 네임스페이스의 식별자(Namespace ID)를 보유합니다. 로그 네임스페이스 ID는 로그 데이터를 집계하여 저장할 대상 GS2-Log 의 네임스페이스를 지정합니다. 이 설정을 통해 이 네임스페이스 이하의 API 요청·응답 로그 데이터가 대상 GS2-Log 로 출력됩니다. GS2-Log 에서는 실시간으로 로그가 제공되며, 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentCampaignMaster 현재 활성화된 캠페인 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 캠페인 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터의 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드하면 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-SerialKey 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 갱신 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentCampaignMaster 갱신된 현재 활성화된 캠페인 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::SerialKey::CurrentCampaignMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2022-09-13\" , \"campaignModels\": [ { \"name\": \"campaign-0001\" , \"enableCampaignCode\": true , \"metadata\": \"CAMPAIGN_0001\" } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/serialKey\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () serialKey . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , serialKey . NamespaceOptions {}, ). MasterData ( [] serialKey . CampaignModel { serialKey . NewCampaignModel ( \"campaign-0001\" , true , serialKey . CampaignModelOptions { Metadata : pointy . String ( \"CAMPAIGN_0001\" ), }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\SerialKey\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\SerialKey\\Model\\CampaignModel ( name : \"campaign-0001\" , enableCampaignCode : true , options : new \\Gs2Cdk\\SerialKey\\Model\\Options\\CampaignModelOptions ( metadata : \"CAMPAIGN_0001\" ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . serialKey . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . serialKey . model . CampaignModel ( \"campaign-0001\" , true , new io . gs2 . cdk . serialKey . model . options . CampaignModelOptions () . withMetadata ( \"CAMPAIGN_0001\" ) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2SerialKey . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2SerialKey . Model . CampaignModel [] { new Gs2Cdk . Gs2SerialKey . Model . CampaignModel ( name : \"campaign-0001\" , enableCampaignCode : true , options : new Gs2Cdk . Gs2SerialKey . Model . Options . CampaignModelOptions { metadata = \"CAMPAIGN_0001\" } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import serialKey from \"@/gs2cdk/serialKey\" ; class SampleStack extends core . Stack { public constructor () { super (); new serialKey . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new serialKey . model . CampaignModel ( \"campaign-0001\" , true , { metadata : \"CAMPAIGN_0001\" } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , serial_key class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () serial_key . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( campaign_models = [ serial_key . CampaignModel ( name = 'campaign-0001' , enable_campaign_code = True , options = serial_key . CampaignModelOptions ( metadata = 'CAMPAIGN_0001' ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template CampaignModel 캠페인 모델 캠페인 모델은 캠페인을 정의하고 시리얼 코드와 연결하여 관리하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 campaignId string ※ ~ 1024자 캠페인 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 캠페인 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. enableCampaignCode bool false 캠페인 코드에 의한 교환을 허용할지 여부 활성화하면 개별 시리얼 코드가 아닌 공통 캠페인 코드(캠페인 이름)를 사용하여 보상을 교환할 수 있게 됩니다. 이를 통해 하나의 코드를 여러 사용자가 사용할 수 있습니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-SerialKey Deploy/CDK 레퍼런스","url":"/ko/api_reference/serial_key/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 진열대 조작 시 트랜잭션 처리 방법을 제어하는 설정입니다. buyScript ScriptSetting 구매를 실행하려고 할 때 실행하는 스크립트 설정 Script 트리거 레퍼런스 - buy logSetting LogSetting 로그 출력 설정 진열대 열람이나 상품 구매에 관한 API 요청·응답 로그를 출력하는 GS2-Log의 네임스페이스를 지정합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Showcase::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 BuyScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/showcase\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () showcase . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , showcase . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Showcase\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Showcase\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . showcase . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . showcase . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Showcase . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Showcase . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import showcase from \"@/gs2cdk/showcase\" ; class SampleStack extends core . Stack { public constructor () { super (); new showcase . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , showcase class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () showcase . Namespace ( stack = self , name = 'namespace-0001' , options = showcase . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentShowcaseMaster 현재 활성화된 진열대 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 진열대 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 만들어 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Showcase 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentShowcaseMaster 업데이트된 현재 활성화된 쇼케이스의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Showcase::CurrentShowcaseMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-04-04\" , \"showcases\": [ { \"name\": \"gem\" , \"displayItems\": [ { \"type\": \"salesItem\" , \"salesItem\": { \"name\": \"gem_3000\" , \"metadata\": \"GEM_3000\" , \"consumeActions\": [ { \"action\": \"Gs2Money:RecordReceipt\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"contentsId\": \"contentsId-0001\" , \"receipt\": \"#{receipt}\" , \"userId\": \"#{userId}\" } } ], \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ] } } , { \"type\": \"salesItemGroup\" , \"salesPeriodEventId\": \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , \"salesItemGroup\": { \"name\": \"step_gem\" , \"metadata\": \"STEP_GEM\" , \"salesItems\": [ { \"name\": \"step1_gem_1000\" , \"metadata\": \"STEP1_GEM_1000\" , \"consumeActions\": [ { \"action\": \"Gs2Money:RecordReceipt\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"contentsId\": \"contentsId-0001\" , \"receipt\": \"#{receipt}\" , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Limit:CountUpByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"limitName\": \"limit-0001\" , \"counterName\": \"counter-0001\" , \"countUpValue\": 1 , \"maxValue\": 100 , \"userId\": \"#{userId}\" } } ], \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ] } , { \"name\": \"step2_gem_2000\" , \"metadata\": \"STEP1_GEM_2000\" , \"consumeActions\": [ { \"action\": \"Gs2Money:RecordReceipt\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"contentsId\": \"contentsId-0001\" , \"receipt\": \"#{receipt}\" , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Limit:CountUpByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"limitName\": \"limit-0001\" , \"counterName\": \"counter-0001\" , \"countUpValue\": 1 , \"maxValue\": 100 , \"userId\": \"#{userId}\" } } ], \"acquireActions\": [ { \"action\": \"Gs2Money:DepositByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"price\": 100 , \"count\": 1 , \"userId\": \"#{userId}\" } } ] } ] } } ], \"metadata\": \"GEM\" } , { \"name\": \"gacha\" , \"displayItems\": [ { \"type\": \"salesItem\" , \"salesItem\": { \"name\": \"single\" , \"metadata\": \"SINGLE\" , \"consumeActions\": [ { \"action\": \"Gs2Money:WithdrawByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"count\": 1 , \"paidOnly\": false , \"userId\": \"#{userId}\" } } ], \"acquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ] } } , { \"type\": \"salesItem\" , \"salesItem\": { \"name\": \"10times\" , \"metadata\": \"10TIMES\" , \"consumeActions\": [ { \"action\": \"Gs2Money:WithdrawByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"slot\": 0 , \"count\": 1 , \"paidOnly\": false , \"userId\": \"#{userId}\" } } ], \"acquireActions\": [ { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"acquireCount\": 1 , \"expiresAt\": 0 , \"createNewItemSet\": false , \"itemSetName\": \"\" , \"userId\": \"#{userId}\" } } ] } } ], \"metadata\": \"GACHA\" } ], \"randomShowcases\": [] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/showcase\" \"github.com/gs2io/gs2-golang-cdk/money\" \"github.com/gs2io/gs2-golang-cdk/limit\" \"github.com/gs2io/gs2-golang-cdk/inventory\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () showcase . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , showcase . NamespaceOptions {}, ). MasterData ( [] showcase . Showcase { showcase . NewShowcase ( \"gem\" , [] showcase . DisplayItem { showcase . NewDisplayItem ( \"\" , showcase . DisplayItemTypeSalesItem , showcase . DisplayItemOptions { SalesItem : \u0026 showcase . SalesItem { Name : \"gem_3000\" , AcquireActions : [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, Metadata : pointy . String ( \"GEM_3000\" ), ConsumeActions : [] core . ConsumeAction { money . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , ), }, }, }, ), showcase . NewDisplayItem ( \"\" , showcase . DisplayItemTypeSalesItemGroup , showcase . DisplayItemOptions { SalesItemGroup : \u0026 showcase . SalesItemGroup { Name : \"step_gem\" , SalesItems : [] showcase . SalesItem { showcase . NewSalesItem ( \"step1_gem_1000\" , [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, showcase . SalesItemOptions { Metadata : pointy . String ( \"STEP1_GEM_1000\" ), ConsumeActions : [] core . ConsumeAction { money . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , ), limit . CountUpByUserId ( \"namespace-0001\" , \"limit-0001\" , \"counter-0001\" , pointy . Int32 ( 1 ), pointy . Int32 ( 100 ), ), }, }, ), showcase . NewSalesItem ( \"step2_gem_2000\" , [] core . AcquireAction { money . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , ), }, showcase . SalesItemOptions { Metadata : pointy . String ( \"STEP1_GEM_2000\" ), ConsumeActions : [] core . ConsumeAction { money . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , ), limit . CountUpByUserId ( \"namespace-0001\" , \"limit-0001\" , \"counter-0001\" , pointy . Int32 ( 1 ), pointy . Int32 ( 100 ), ), }, }, ), }, Metadata : pointy . String ( \"STEP_GEM\" ), }, SalesPeriodEventId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ), }, ), }, showcase . ShowcaseOptions { Metadata : pointy . String ( \"GEM\" ), }, ), showcase . NewShowcase ( \"gacha\" , [] showcase . DisplayItem { showcase . NewDisplayItem ( \"\" , showcase . DisplayItemTypeSalesItem , showcase . DisplayItemOptions { SalesItem : \u0026 showcase . SalesItem { Name : \"single\" , AcquireActions : [] core . AcquireAction { inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, Metadata : pointy . String ( \"SINGLE\" ), ConsumeActions : [] core . ConsumeAction { money . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , pointy . Bool ( false ), ), }, }, }, ), showcase . NewDisplayItem ( \"\" , showcase . DisplayItemTypeSalesItem , showcase . DisplayItemOptions { SalesItem : \u0026 showcase . SalesItem { Name : \"10times\" , AcquireActions : [] core . AcquireAction { inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), inventory . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . Int64 ( 0 ), pointy . Bool ( false ), pointy . String ( \"\" ), ), }, Metadata : pointy . String ( \"10TIMES\" ), ConsumeActions : [] core . ConsumeAction { money . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , pointy . Bool ( false ), ), }, }, }, ), }, showcase . ShowcaseOptions { Metadata : pointy . String ( \"GACHA\" ), }, ), }, [] showcase . RandomShowcase { }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Showcase\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Showcase\\Model\\Showcase ( name : \"gem\" , displayItems : [ new \\Gs2Cdk\\Showcase\\Model\\DisplayItem ( displayItemId : \"\" , type : \\Gs2Cdk\\Showcase\\Model\\Enums\\DisplayItemType :: SALES_ITEM , options : new \\Gs2Cdk\\Showcase\\Model\\Options\\DisplayItemOptions ( salesItem : new \\Gs2Cdk\\Showcase\\Model\\SalesItem ( name : \"gem_3000\" , acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], options : new \\Gs2Cdk\\Showcase\\Model\\Options\\SalesItemOptions ( metadata : \"GEM_3000\" , consumeActions : [ new \\Gs2Cdk\\Money\\StampSheet\\RecordReceipt ( namespaceName : \"namespace-0001\" , contentsId : \"contentsId-0001\" , receipt : \"#{receipt}\" , userId : \"#{userId}\" ), ], ), ), ), ), new \\Gs2Cdk\\Showcase\\Model\\DisplayItem ( displayItemId : \"\" , type : \\Gs2Cdk\\Showcase\\Model\\Enums\\DisplayItemType :: SALES_ITEM_GROUP , options : new \\Gs2Cdk\\Showcase\\Model\\Options\\DisplayItemOptions ( salesItemGroup : new \\Gs2Cdk\\Showcase\\Model\\SalesItemGroup ( name : \"step_gem\" , salesItems : [ new \\Gs2Cdk\\Showcase\\Model\\SalesItem ( name : \"step1_gem_1000\" , acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], options : new \\Gs2Cdk\\Showcase\\Model\\Options\\SalesItemOptions ( metadata : \"STEP1_GEM_1000\" , consumeActions : [ new \\Gs2Cdk\\Money\\StampSheet\\RecordReceipt ( namespaceName : \"namespace-0001\" , contentsId : \"contentsId-0001\" , receipt : \"#{receipt}\" , userId : \"#{userId}\" ), new \\Gs2Cdk\\Limit\\StampSheet\\CountUpByUserId ( namespaceName : \"namespace-0001\" , limitName : \"limit-0001\" , counterName : \"counter-0001\" , countUpValue : 1 , maxValue : 100 , userId : \"#{userId}\" ), ], ), ), new \\Gs2Cdk\\Showcase\\Model\\SalesItem ( name : \"step2_gem_2000\" , acquireActions : [ new \\Gs2Cdk\\Money\\StampSheet\\DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ), ], options : new \\Gs2Cdk\\Showcase\\Model\\Options\\SalesItemOptions ( metadata : \"STEP1_GEM_2000\" , consumeActions : [ new \\Gs2Cdk\\Money\\StampSheet\\RecordReceipt ( namespaceName : \"namespace-0001\" , contentsId : \"contentsId-0001\" , receipt : \"#{receipt}\" , userId : \"#{userId}\" ), new \\Gs2Cdk\\Limit\\StampSheet\\CountUpByUserId ( namespaceName : \"namespace-0001\" , limitName : \"limit-0001\" , counterName : \"counter-0001\" , countUpValue : 1 , maxValue : 100 , userId : \"#{userId}\" ), ], ), ), ], options : new \\Gs2Cdk\\Showcase\\Model\\Options\\SalesItemGroupOptions ( metadata : \"STEP_GEM\" , ), ), salesPeriodEventId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" , ), ), ], options : new \\Gs2Cdk\\Showcase\\Model\\Options\\ShowcaseOptions ( metadata : \"GEM\" ) ), new \\Gs2Cdk\\Showcase\\Model\\Showcase ( name : \"gacha\" , displayItems : [ new \\Gs2Cdk\\Showcase\\Model\\DisplayItem ( displayItemId : \"\" , type : \\Gs2Cdk\\Showcase\\Model\\Enums\\DisplayItemType :: SALES_ITEM , options : new \\Gs2Cdk\\Showcase\\Model\\Options\\DisplayItemOptions ( salesItem : new \\Gs2Cdk\\Showcase\\Model\\SalesItem ( name : \"single\" , acquireActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ], options : new \\Gs2Cdk\\Showcase\\Model\\Options\\SalesItemOptions ( metadata : \"SINGLE\" , consumeActions : [ new \\Gs2Cdk\\Money\\StampSheet\\WithdrawByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , count : 1 , paidOnly : false , userId : \"#{userId}\" ), ], ), ), ), ), new \\Gs2Cdk\\Showcase\\Model\\DisplayItem ( displayItemId : \"\" , type : \\Gs2Cdk\\Showcase\\Model\\Enums\\DisplayItemType :: SALES_ITEM , options : new \\Gs2Cdk\\Showcase\\Model\\Options\\DisplayItemOptions ( salesItem : new \\Gs2Cdk\\Showcase\\Model\\SalesItem ( name : \"10times\" , acquireActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), ], options : new \\Gs2Cdk\\Showcase\\Model\\Options\\SalesItemOptions ( metadata : \"10TIMES\" , consumeActions : [ new \\Gs2Cdk\\Money\\StampSheet\\WithdrawByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , count : 1 , paidOnly : false , userId : \"#{userId}\" ), ], ), ), ), ), ], options : new \\Gs2Cdk\\Showcase\\Model\\Options\\ShowcaseOptions ( metadata : \"GACHA\" ) ) ], [ ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . showcase . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . showcase . model . Showcase ( \"gem\" , Arrays . asList ( new io . gs2 . cdk . showcase . model . DisplayItem ( \"\" , io . gs2 . cdk . showcase . model . enums . DisplayItemType . SALES_ITEM , new io . gs2 . cdk . showcase . model . options . DisplayItemOptions () . withSalesItem ( new io . gs2 . cdk . showcase . model . SalesItem ( \"gem_3000\" , Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) ), new io . gs2 . cdk . showcase . model . options . SalesItemOptions () . withMetadata ( \"GEM_3000\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , \"#{userId}\" ) )) )) ), new io . gs2 . cdk . showcase . model . DisplayItem ( \"\" , io . gs2 . cdk . showcase . model . enums . DisplayItemType . SALES_ITEM_GROUP , new io . gs2 . cdk . showcase . model . options . DisplayItemOptions () . withSalesItemGroup ( new io . gs2 . cdk . showcase . model . SalesItemGroup ( \"step_gem\" , Arrays . asList ( new io . gs2 . cdk . showcase . model . SalesItem ( \"step1_gem_1000\" , Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) ), new io . gs2 . cdk . showcase . model . options . SalesItemOptions () . withMetadata ( \"STEP1_GEM_1000\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , \"#{userId}\" ), new io . gs2 . cdk . limit . stampSheet . CountUpByUserId ( \"namespace-0001\" , \"limit-0001\" , \"counter-0001\" , 1 , 100 , \"#{userId}\" ) )) ), new io . gs2 . cdk . showcase . model . SalesItem ( \"step2_gem_2000\" , Arrays . asList ( new io . gs2 . cdk . money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100f , 1 , \"#{userId}\" ) ), new io . gs2 . cdk . showcase . model . options . SalesItemOptions () . withMetadata ( \"STEP1_GEM_2000\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , \"#{userId}\" ), new io . gs2 . cdk . limit . stampSheet . CountUpByUserId ( \"namespace-0001\" , \"limit-0001\" , \"counter-0001\" , 1 , 100 , \"#{userId}\" ) )) ) ), new io . gs2 . cdk . showcase . model . options . SalesItemGroupOptions () . withMetadata ( \"STEP_GEM\" ) )) . withSalesPeriodEventId ( \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" ) ) ), new io . gs2 . cdk . showcase . model . options . ShowcaseOptions () . withMetadata ( \"GEM\" ) ), new io . gs2 . cdk . showcase . model . Showcase ( \"gacha\" , Arrays . asList ( new io . gs2 . cdk . showcase . model . DisplayItem ( \"\" , io . gs2 . cdk . showcase . model . enums . DisplayItemType . SALES_ITEM , new io . gs2 . cdk . showcase . model . options . DisplayItemOptions () . withSalesItem ( new io . gs2 . cdk . showcase . model . SalesItem ( \"single\" , Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) ), new io . gs2 . cdk . showcase . model . options . SalesItemOptions () . withMetadata ( \"SINGLE\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , false , \"#{userId}\" ) )) )) ), new io . gs2 . cdk . showcase . model . DisplayItem ( \"\" , io . gs2 . cdk . showcase . model . enums . DisplayItemType . SALES_ITEM , new io . gs2 . cdk . showcase . model . options . DisplayItemOptions () . withSalesItem ( new io . gs2 . cdk . showcase . model . SalesItem ( \"10times\" , Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , 0L , false , \"\" , \"#{userId}\" ) ), new io . gs2 . cdk . showcase . model . options . SalesItemOptions () . withMetadata ( \"10TIMES\" ) . withConsumeActions ( Arrays . asList ( new io . gs2 . cdk . money . stampSheet . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , false , \"#{userId}\" ) )) )) ) ), new io . gs2 . cdk . showcase . model . options . ShowcaseOptions () . withMetadata ( \"GACHA\" ) ) ), Arrays . asList ( ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Showcase . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Showcase . Model . Showcase [] { new Gs2Cdk . Gs2Showcase . Model . Showcase ( name : \"gem\" , displayItems : new Gs2Cdk . Gs2Showcase . Model . DisplayItem [] { new Gs2Cdk . Gs2Showcase . Model . DisplayItem ( displayItemId : \"\" , type : Gs2Cdk . Gs2Showcase . Model . Enums . DisplayItemType . SalesItem , options : new Gs2Cdk . Gs2Showcase . Model . Options . DisplayItemOptions { salesItem = new Gs2Cdk . Gs2Showcase . Model . SalesItem ( name : \"gem_3000\" , acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) }, options : new Gs2Cdk . Gs2Showcase . Model . Options . SalesItemOptions { metadata = \"GEM_3000\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Money . StampSheet . RecordReceipt ( namespaceName : \"namespace-0001\" , contentsId : \"contentsId-0001\" , receipt : \"#{receipt}\" , userId : \"#{userId}\" ) } } ) } ), new Gs2Cdk . Gs2Showcase . Model . DisplayItem ( displayItemId : \"\" , type : Gs2Cdk . Gs2Showcase . Model . Enums . DisplayItemType . SalesItemGroup , options : new Gs2Cdk . Gs2Showcase . Model . Options . DisplayItemOptions { salesItemGroup = new Gs2Cdk . Gs2Showcase . Model . SalesItemGroup ( name : \"step_gem\" , salesItems : new Gs2Cdk . Gs2Showcase . Model . SalesItem [] { new Gs2Cdk . Gs2Showcase . Model . SalesItem ( name : \"step1_gem_1000\" , acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) }, options : new Gs2Cdk . Gs2Showcase . Model . Options . SalesItemOptions { metadata = \"STEP1_GEM_1000\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Money . StampSheet . RecordReceipt ( namespaceName : \"namespace-0001\" , contentsId : \"contentsId-0001\" , receipt : \"#{receipt}\" , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Limit . StampSheet . CountUpByUserId ( namespaceName : \"namespace-0001\" , limitName : \"limit-0001\" , counterName : \"counter-0001\" , countUpValue : 1 , maxValue : 100 , userId : \"#{userId}\" ) } } ), new Gs2Cdk . Gs2Showcase . Model . SalesItem ( name : \"step2_gem_2000\" , acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Money . StampSheet . DepositByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , price : 100 , count : 1 , userId : \"#{userId}\" ) }, options : new Gs2Cdk . Gs2Showcase . Model . Options . SalesItemOptions { metadata = \"STEP1_GEM_2000\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Money . StampSheet . RecordReceipt ( namespaceName : \"namespace-0001\" , contentsId : \"contentsId-0001\" , receipt : \"#{receipt}\" , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Limit . StampSheet . CountUpByUserId ( namespaceName : \"namespace-0001\" , limitName : \"limit-0001\" , counterName : \"counter-0001\" , countUpValue : 1 , maxValue : 100 , userId : \"#{userId}\" ) } } ) }, options : new Gs2Cdk . Gs2Showcase . Model . Options . SalesItemGroupOptions { metadata = \"STEP_GEM\" } ), salesPeriodEventId = \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" } ) }, options : new Gs2Cdk . Gs2Showcase . Model . Options . ShowcaseOptions { metadata = \"GEM\" } ), new Gs2Cdk . Gs2Showcase . Model . Showcase ( name : \"gacha\" , displayItems : new Gs2Cdk . Gs2Showcase . Model . DisplayItem [] { new Gs2Cdk . Gs2Showcase . Model . DisplayItem ( displayItemId : \"\" , type : Gs2Cdk . Gs2Showcase . Model . Enums . DisplayItemType . SalesItem , options : new Gs2Cdk . Gs2Showcase . Model . Options . DisplayItemOptions { salesItem = new Gs2Cdk . Gs2Showcase . Model . SalesItem ( name : \"single\" , acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ) }, options : new Gs2Cdk . Gs2Showcase . Model . Options . SalesItemOptions { metadata = \"SINGLE\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Money . StampSheet . WithdrawByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , count : 1 , paidOnly : false , userId : \"#{userId}\" ) } } ) } ), new Gs2Cdk . Gs2Showcase . Model . DisplayItem ( displayItemId : \"\" , type : Gs2Cdk . Gs2Showcase . Model . Enums . DisplayItemType . SalesItem , options : new Gs2Cdk . Gs2Showcase . Model . Options . DisplayItemOptions { salesItem = new Gs2Cdk . Gs2Showcase . Model . SalesItem ( name : \"10times\" , acquireActions : new Gs2Cdk . Core . Model . AcquireAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . AcquireItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , acquireCount : 1 , expiresAt : 0 , createNewItemSet : false , itemSetName : \"\" , userId : \"#{userId}\" ), }, options : new Gs2Cdk . Gs2Showcase . Model . Options . SalesItemOptions { metadata = \"10TIMES\" , consumeActions = new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Money . StampSheet . WithdrawByUserId ( namespaceName : \"namespace-0001\" , slot : 0 , count : 1 , paidOnly : false , userId : \"#{userId}\" ) } } ) } ) }, options : new Gs2Cdk . Gs2Showcase . Model . Options . ShowcaseOptions { metadata = \"GACHA\" } ) }, new Gs2Cdk . Gs2Showcase . Model . RandomShowcase [] { } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import showcase from \"@/gs2cdk/showcase\" ; import money from \"@/gs2cdk/money\" ; import limit from \"@/gs2cdk/limit\" ; import inventory from \"@/gs2cdk/inventory\" ; class SampleStack extends core . Stack { public constructor () { super (); new showcase . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new showcase . model . Showcase ( \"gem\" , [ new showcase . model . DisplayItem ( \"\" , showcase . model . DisplayItemType . SALES_ITEM , { salesItem : new showcase . model . SalesItem ( \"gem_3000\" , [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ], { metadata : \"GEM_3000\" , consumeActions : [ new money . stampSheet . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , null , \"#{userId}\" ), ] } ) } ), new showcase . model . DisplayItem ( \"\" , showcase . model . DisplayItemType . SALES_ITEM_GROUP , { salesItemGroup : new showcase . model . SalesItemGroup ( \"step_gem\" , [ new showcase . model . SalesItem ( \"step1_gem_1000\" , [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ], { metadata : \"STEP1_GEM_1000\" , consumeActions : [ new money . stampSheet . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , null , \"#{userId}\" ), new limit . stampSheet . CountUpByUserId ( \"namespace-0001\" , \"limit-0001\" , \"counter-0001\" , 1 , 100 , null , \"#{userId}\" ), ] } ), new showcase . model . SalesItem ( \"step2_gem_2000\" , [ new money . stampSheet . DepositByUserId ( \"namespace-0001\" , 0 , 100 , 1 , null , \"#{userId}\" ), ], { metadata : \"STEP1_GEM_2000\" , consumeActions : [ new money . stampSheet . RecordReceipt ( \"namespace-0001\" , \"contentsId-0001\" , \"#{receipt}\" , null , \"#{userId}\" ), new limit . stampSheet . CountUpByUserId ( \"namespace-0001\" , \"limit-0001\" , \"counter-0001\" , 1 , 100 , null , \"#{userId}\" ), ] } ), ], { metadata : \"STEP_GEM\" } ), salesPeriodEventId : \"grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001\" } ), ], { metadata : \"GEM\" } ), new showcase . model . Showcase ( \"gacha\" , [ new showcase . model . DisplayItem ( \"\" , showcase . model . DisplayItemType . SALES_ITEM , { salesItem : new showcase . model . SalesItem ( \"single\" , [ new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ], { metadata : \"SINGLE\" , consumeActions : [ new money . stampSheet . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , false , null , \"#{userId}\" ), ] } ) } ), new showcase . model . DisplayItem ( \"\" , showcase . model . DisplayItemType . SALES_ITEM , { salesItem : new showcase . model . SalesItem ( \"10times\" , [ new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), new inventory . stampSheet . AcquireItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , 0 , false , \"\" , null , \"#{userId}\" ), ], { metadata : \"10TIMES\" , consumeActions : [ new money . stampSheet . WithdrawByUserId ( \"namespace-0001\" , 0 , 1 , false , null , \"#{userId}\" ), ] } ) } ), ], { metadata : \"GACHA\" } ) ], [ ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , showcase , money class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () showcase . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( showcases = [ showcase . Showcase ( name = 'gem' , display_items = [ showcase . DisplayItem ( display_item_id = \"\" , type = showcase . DisplayItemType . SALES_ITEM , options = showcase . DisplayItemOptions ( sales_item = showcase . SalesItem ( name = 'gem_3000' , acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], options = showcase . SalesItemOptions ( metadata = 'GEM_3000' , consume_actions = [ money . RecordReceipt ( namespace_name = 'namespace-0001' , contents_id = 'contentsId-0001' , receipt = '# {receipt} ' , user_id = '# {userId} ' ), ], ), ), ), ), showcase . DisplayItem ( display_item_id = \"\" , type = showcase . DisplayItemType . SALES_ITEM_GROUP , options = showcase . DisplayItemOptions ( sales_item_group = showcase . SalesItemGroup ( name = 'step_gem' , sales_items = [ showcase . SalesItem ( name = 'step1_gem_1000' , acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], options = showcase . SalesItemOptions ( metadata = 'STEP1_GEM_1000' , consume_actions = [ money . RecordReceipt ( namespace_name = 'namespace-0001' , contents_id = 'contentsId-0001' , receipt = '# {receipt} ' , user_id = '# {userId} ' ), limit . CountUpByUserId ( namespace_name = 'namespace-0001' , limit_name = 'limit-0001' , counter_name = 'counter-0001' , count_up_value = 1 , max_value = 100 , user_id = '# {userId} ' ), ], ), ), showcase . SalesItem ( name = 'step2_gem_2000' , acquire_actions = [ money . DepositByUserId ( namespace_name = 'namespace-0001' , slot = 0 , price = 100 , count = 1 , user_id = '# {userId} ' ), ], options = showcase . SalesItemOptions ( metadata = 'STEP1_GEM_2000' , consume_actions = [ money . RecordReceipt ( namespace_name = 'namespace-0001' , contents_id = 'contentsId-0001' , receipt = '# {receipt} ' , user_id = '# {userId} ' ), limit . CountUpByUserId ( namespace_name = 'namespace-0001' , limit_name = 'limit-0001' , counter_name = 'counter-0001' , count_up_value = 1 , max_value = 100 , user_id = '# {userId} ' ), ], ), ), ], options = showcase . SalesItemGroupOptions ( metadata = 'STEP_GEM' , ), ), sales_period_event_id = 'grn:gs2:ap-northeast-1:YourOwnerId:schedule:schedule-0001:event:event-0001' , ), ), ], options = showcase . ShowcaseOptions ( metadata = 'GEM' ), ), showcase . Showcase ( name = 'gacha' , display_items = [ showcase . DisplayItem ( display_item_id = \"\" , type = showcase . DisplayItemType . SALES_ITEM , options = showcase . DisplayItemOptions ( sales_item = showcase . SalesItem ( name = 'single' , acquire_actions = [ inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ], options = showcase . SalesItemOptions ( metadata = 'SINGLE' , consume_actions = [ money . WithdrawByUserId ( namespace_name = 'namespace-0001' , slot = 0 , count = 1 , paid_only = False , user_id = '# {userId} ' ), ], ), ), ), ), showcase . DisplayItem ( display_item_id = \"\" , type = showcase . DisplayItemType . SALES_ITEM , options = showcase . DisplayItemOptions ( sales_item = showcase . SalesItem ( name = '10times' , acquire_actions = [ inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), inventory . AcquireItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , acquire_count = 1 , expires_at = 0 , create_new_item_set = False , item_set_name = \"\" , user_id = '# {userId} ' ), ], options = showcase . SalesItemOptions ( metadata = '10TIMES' , consume_actions = [ money . WithdrawByUserId ( namespace_name = 'namespace-0001' , slot = 0 , count = 1 , paid_only = False , user_id = '# {userId} ' ), ], ), ), ), ), ], options = showcase . ShowcaseOptions ( metadata = 'GACHA' ), ), ], random_showcases = [ ], ) print ( SampleStack () . yaml ()) # Generate Template Showcase 진열대 진열대 에는 진열할 상품을 정의할 수 있습니다. 또한 진열대 의 상품 판매 기간을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 showcaseId string ※ ~ 1024자 진열대 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 연관된 GS2-Schedule 이벤트 기간 중에만 진열대를 이용할 수 있습니다. 이벤트가 유효하지 않은 경우, 진열대는 비어 있는 상태로 반환됩니다. displayItems List [] 1 ~ 1000 items 진열할 상품 리스트 이 진열대에 진열되는 상품의 리스트입니다. 각 진열 상품은 단일 상품 또는 상품 그룹 중 하나입니다. 판매 기간 이벤트가 종료되었거나 유효하지 않은 상품은 진열대 조회 시 자동으로 필터링됩니다. DisplayItem 진열 상품 진열대에 표시되는 상품입니다. 단일 상품 또는 상품 그룹 중 하나를 참조할 수 있습니다. 각 진열 상품에는 진열대 전체의 판매 기간과는 독립적으로 GS2-Schedule 이벤트에 의한 개별 판매 기간을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 displayItemId string  UUID ~ 128자 진열 상품 ID 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. type 문자열 열거형 enum {   “salesItem”,   “salesItemGroup” }  종류 표시할 상품의 종류입니다. “salesItem\"은 고정된 대가와 보상을 가진 단일 상품입니다. “salesItemGroup\"은 여러 상품을 순서대로 평가하는 상품 그룹으로, 단계별 가격 인상이나 초회 한정 할인 등에 사용됩니다. 정의 설명 salesItem 상품 salesItemGroup 상품 그룹 salesItem SalesItem {type} == “salesItem” ※ 상품 ※ type이(가) “salesItem” 이면 필수 salesItemGroup SalesItemGroup {type} == “salesItemGroup” ※ 상품 그룹 ※ type이(가) “salesItemGroup” 이면 필수 salesPeriodEventId string ~ 1024자 이 진열 상품의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 개별 진열 상품의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대에 표시됩니다. 진열대 전체의 판매 기간과는 독립적으로 동작합니다. SalesItem 상품 상품을 구매하기 위해 필요한 대가와, 상품을 구매했을 때 얻을 수 있는 보상을 설정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 이름 상품 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 구매 전에 실행되는 전제 조건 체크입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 구매 자격 조건 체크에 사용할 수 있습니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 구매 대가로 리소스를 소비하는 액션입니다. 상품 그룹의 구매 횟수 제어를 위해 GS2-Limit의 CountUp 액션을 포함할 수 있습니다. acquireActions List [] 1 ~ 100 items 획득 액션 리스트 구매 보상으로 리소스를 부여하는 액션입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. SalesItemGroup 상품 그룹 상품 그룹은 진열대에 진열하기 위한 엔티티입니다. 상품 그룹에는 여러 상품을 소속시킬 수 있으며, 소속된 상품의 앞에서부터 순서대로 구매 가능한지를 판정하여 가장 먼저 구매 가능하다고 판정된 상품이 실제로 진열됩니다. 최초 1회만 할인되는 상품이나, 스텝업 가챠처럼 구매 횟수에 따라 상품 내용이 변화하는 구조에 사용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. salesItems List [] 2 ~ 10 items 상품 그룹에 포함할 상품 이 그룹 내 상품의 순서가 지정된 리스트입니다. GS2-Limit 카운터를 사용하여 앞에서부터 순서대로 구매 가능한지를 판정하고, 가장 먼저 구매 가능하다고 판정된 상품이 표시됩니다. 어느 것도 해당하지 않는 경우, 리스트의 마지막 상품이 폴백으로 사용됩니다. RandomShowcase 랜덤 진열대 랜덤 진열대는 지정한 주기로 교체되는, 랜덤으로 선별된 상품이 진열되는 진열대 모델입니다. 선별되는 상품은 상품 풀에 등록된 상품 중에서 지정된 수량이 상품별로 설정된 가중치에 기반하여 랜덤으로 선택됩니다. 랜덤 진열대에는 GS2-Schedule의 이벤트를 연결하여 판매 기간을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 randomShowcaseId string ※ ~ 1024자 랜덤 진열대 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumNumberOfChoice int  1 ~ 100 선택되는 상품의 최대 수 각 로테이션 기간마다 상품 풀에서 랜덤으로 추첨되는 상품의 수입니다. 가중치 기반 랜덤 선택으로 중복 없이 추첨되므로, 한 번의 로테이션에서 같은 상품이 두 번 표시되는 일은 없습니다. displayItems List [] 1 ~ 100 items 선택 대상 진열 상품 목록 상품이 랜덤으로 추첨되는 후보 아이템의 풀입니다. 각 아이템에는 선택 확률을 결정하는 가중치와, 로테이션 전체에서 표시 가능한 횟수를 제한하는 재고 수가 있습니다. baseTimestamp long  진열 상품 재추첨 기준 시간 로테이션 경계 계산에 사용되는 기준 타임스탬프입니다. 이 기준 시간으로부터 일정 간격(resetIntervalHours)마다 상품의 재추첨이 이루어집니다. 과거 시각을 지정해야 합니다. resetIntervalHours int  1 ~ 168 진열 상품을 재추첨하는 간격(시간) 각 상품 로테이션 사이의 시간 수입니다. baseTimestamp를 기준으로 간격이 경과하면 새로운 난수 시드로 진열 상품이 재추첨됩니다. 1~168시간(1주일) 범위에서 설정할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 랜덤 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대를 이용할 수 있습니다. RandomDisplayItemModel 랜덤 진열대에 진열 가능한 상품 weight 에 상품을 선별하는 확률을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 128자 랜덤 진열 상품 ID 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 목록 이 랜덤 진열 상품을 구매하기 전에 실행되는 전제 조건 확인입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 목록 이 랜덤 진열 상품의 구매 대가로 리소스를 소비하는 액션입니다. 트랜잭션의 소비 액션으로 실행됩니다. acquireActions List [] 1 ~ 100 items 획득 액션 목록 이 랜덤 진열 상품의 구매 보상으로 리소스를 지급하는 액션입니다. 트랜잭션의 획득 액션으로 실행됩니다. stock int  1 ~ 2147483646 재고 수 모든 로테이션을 통틀어 이 상품이 추첨될 수 있는 최대 횟수입니다. 재고가 0이 되면 이후 추첨에서 제외됩니다. 로테이션 추첨 시 상품이 선택되면 재고가 소비됩니다. weight int  1 ~ 2147483646 추첨 가중치 랜덤 선택에서 이 상품의 상대적인 확률 가중치입니다. 가중치가 클수록 추첨될 확률이 높아집니다. 실제 선택 확률은 이 상품의 가중치를 대상이 되는 모든 상품의 가중치 합계로 나눈 값으로 계산됩니다. ConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Showcase Deploy/CDK 레퍼런스","url":"/ko/api_reference/showcase/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting  트랜잭션 설정 노드 해방·구속 조작을 실행할 때 사용되는 트랜잭션 처리 설정입니다. 소비 액션(해방 비용)과 입수 액션(구속 시 반환)이 GS2 트랜잭션 시스템을 통해 어떻게 처리되는지를 정의합니다. releaseScript ScriptSetting 노드 해방 시 실행할 스크립트 설정 Script 트리거 레퍼런스 - release restrainScript ScriptSetting 노드 해방 상태를 미해방 상태로 되돌릴 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - restrain logSetting LogSetting 로그 출력 설정 노드 해방·구속·초기화 등 스킬 트리 조작에 대한 로그 출력 설정입니다. 설정한 경우, 조작 로그가 지정한 GS2-Log 네임스페이스로 출력됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::SkillTree::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : EnableAutoRun : true QueueNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001 ReleaseScript : null RestrainScript : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/skillTree\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () skillTree . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , skillTree . NamespaceOptions { TransactionSetting : core . NewTransactionSetting ( core . TransactionSettingOptions { QueueNamespaceId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ), }, ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\SkillTree\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\SkillTree\\Model\\Options\\NamespaceOptions ( transactionSetting : new \\Gs2Cdk\\Core\\Model\\TransactionSetting ( new \\Gs2Cdk\\Core\\Model\\TransactionSettingOptions ( queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) ), logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . skillTree . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . skillTree . model . options . NamespaceOptions () . withTransactionSetting ( new io . gs2 . cdk . core . model . TransactionSetting ( new io . gs2 . cdk . core . model . options . TransactionSettingOptions () . withQueueNamespaceId ( \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" ) )) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2SkillTree . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2SkillTree . Model . Options . NamespaceOptions { transactionSetting = new Gs2Cdk . Core . Model . TransactionSetting ( options : new Gs2Cdk . Core . Model . TransactionSettingOptions { queueNamespaceId = \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import skillTree from \"@/gs2cdk/skillTree\" ; class SampleStack extends core . Stack { public constructor () { super (); new skillTree . model . Namespace ( this , \"namespace-0001\" , { transactionSetting : new core . TransactionSetting ( { queueNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001\" } ), logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , skill_tree class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () skill_tree . Namespace ( stack = self , name = 'namespace-0001' , options = skill_tree . NamespaceOptions ( transaction_setting = core . TransactionSetting ( options = core . TransactionSettingOptions ( queue_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001' , ) ), log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentTreeMaster 현재 활성화된 노드 모델 마스터 데이터 현재 네임스페이스 내에서 유효한 노드 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 포맷의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-SkillTree 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentTreeMaster 갱신된 현재 활성화된 노드 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::SkillTree::CurrentTreeMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2023-09-06\" , \"nodeModels\": [ { \"name\": \"node-0001\" , \"releaseConsumeActions\": [ { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"consumeCount\": 1 , \"itemSetName\": \"#{itemSetName}\" , \"userId\": \"#{userId}\" } } ], \"restrainReturnRate\": 0.5 , \"metadata\": \"NODE-0001\" } , { \"name\": \"node-0002\" , \"releaseConsumeActions\": [ { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"consumeCount\": 1 , \"itemSetName\": \"#{itemSetName}\" , \"userId\": \"#{userId}\" } } ], \"restrainReturnRate\": 0.5 , \"metadata\": \"NODE-0002\" , \"premiseNodeNames\": [ \"node-0001\" ] } , { \"name\": \"node-0003\" , \"releaseConsumeActions\": [ { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"consumeCount\": 1 , \"itemSetName\": \"#{itemSetName}\" , \"userId\": \"#{userId}\" } } , { \"action\": \"Gs2Inventory:ConsumeItemSetByUserId\" , \"request\": { \"namespaceName\": \"namespace-0001\" , \"inventoryName\": \"inventory-0001\" , \"itemName\": \"item-0001\" , \"consumeCount\": 1 , \"itemSetName\": \"#{itemSetName}\" , \"userId\": \"#{userId}\" } } ], \"restrainReturnRate\": 0.5 , \"metadata\": \"NODE-0003\" , \"premiseNodeNames\": [ \"node-0002\" ] } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/skillTree\" \"github.com/gs2io/gs2-golang-cdk/inventory\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () skillTree . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , skillTree . NamespaceOptions {}, ). MasterData ( [] skillTree . NodeModel { skillTree . NewNodeModel ( \"node-0001\" , [] core . ConsumeAction { inventory . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . String ( \"#{itemSetName}\" ), ), }, 0.5 , skillTree . NodeModelOptions { Metadata : pointy . String ( \"NODE-0001\" ), }, ), skillTree . NewNodeModel ( \"node-0002\" , [] core . ConsumeAction { inventory . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . String ( \"#{itemSetName}\" ), ), }, 0.5 , skillTree . NodeModelOptions { Metadata : pointy . String ( \"NODE-0002\" ), PremiseNodeNames : [] string { \"node-0001\" , }, }, ), skillTree . NewNodeModel ( \"node-0003\" , [] core . ConsumeAction { inventory . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . String ( \"#{itemSetName}\" ), ), inventory . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , pointy . String ( \"#{itemSetName}\" ), ), }, 0.5 , skillTree . NodeModelOptions { Metadata : pointy . String ( \"NODE-0003\" ), PremiseNodeNames : [] string { \"node-0002\" , }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\SkillTree\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\SkillTree\\Model\\NodeModel ( name : \"node-0001\" , releaseConsumeActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ), ], restrainReturnRate : 0.5 , options : new \\Gs2Cdk\\SkillTree\\Model\\Options\\NodeModelOptions ( metadata : \"NODE-0001\" ) ), new \\Gs2Cdk\\SkillTree\\Model\\NodeModel ( name : \"node-0002\" , releaseConsumeActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ), ], restrainReturnRate : 0.5 , options : new \\Gs2Cdk\\SkillTree\\Model\\Options\\NodeModelOptions ( metadata : \"NODE-0002\" , premiseNodeNames : [ \"node-0001\" , ] ) ), new \\Gs2Cdk\\SkillTree\\Model\\NodeModel ( name : \"node-0003\" , releaseConsumeActions : [ new \\Gs2Cdk\\Inventory\\StampSheet\\ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ), new \\Gs2Cdk\\Inventory\\StampSheet\\ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ), ], restrainReturnRate : 0.5 , options : new \\Gs2Cdk\\SkillTree\\Model\\Options\\NodeModelOptions ( metadata : \"NODE-0003\" , premiseNodeNames : [ \"node-0002\" , ] ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . skillTree . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . skillTree . model . NodeModel ( \"node-0001\" , Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , \"#{itemSetName}\" , \"#{userId}\" ) ), 0 . 5f , new io . gs2 . cdk . skillTree . model . options . NodeModelOptions () . withMetadata ( \"NODE-0001\" ) ), new io . gs2 . cdk . skillTree . model . NodeModel ( \"node-0002\" , Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , \"#{itemSetName}\" , \"#{userId}\" ) ), 0 . 5f , new io . gs2 . cdk . skillTree . model . options . NodeModelOptions () . withMetadata ( \"NODE-0002\" ) . withPremiseNodeNames ( Arrays . asList ( \"node-0001\" )) ), new io . gs2 . cdk . skillTree . model . NodeModel ( \"node-0003\" , Arrays . asList ( new io . gs2 . cdk . inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , \"#{itemSetName}\" , \"#{userId}\" ), new io . gs2 . cdk . inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1L , \"#{itemSetName}\" , \"#{userId}\" ) ), 0 . 5f , new io . gs2 . cdk . skillTree . model . options . NodeModelOptions () . withMetadata ( \"NODE-0003\" ) . withPremiseNodeNames ( Arrays . asList ( \"node-0002\" )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2SkillTree . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2SkillTree . Model . NodeModel [] { new Gs2Cdk . Gs2SkillTree . Model . NodeModel ( name : \"node-0001\" , releaseConsumeActions : new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ) }, restrainReturnRate : 0.5f , options : new Gs2Cdk . Gs2SkillTree . Model . Options . NodeModelOptions { metadata = \"NODE-0001\" } ), new Gs2Cdk . Gs2SkillTree . Model . NodeModel ( name : \"node-0002\" , releaseConsumeActions : new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ) }, restrainReturnRate : 0.5f , options : new Gs2Cdk . Gs2SkillTree . Model . Options . NodeModelOptions { metadata = \"NODE-0002\" , premiseNodeNames = new string [] { \"node-0001\" } } ), new Gs2Cdk . Gs2SkillTree . Model . NodeModel ( name : \"node-0003\" , releaseConsumeActions : new Gs2Cdk . Core . Model . ConsumeAction [] { new Gs2Cdk . Gs2Inventory . StampSheet . ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ), new Gs2Cdk . Gs2Inventory . StampSheet . ConsumeItemSetByUserId ( namespaceName : \"namespace-0001\" , inventoryName : \"inventory-0001\" , itemName : \"item-0001\" , consumeCount : 1 , itemSetName : \"#{itemSetName}\" , userId : \"#{userId}\" ) }, restrainReturnRate : 0.5f , options : new Gs2Cdk . Gs2SkillTree . Model . Options . NodeModelOptions { metadata = \"NODE-0003\" , premiseNodeNames = new string [] { \"node-0002\" } } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import skillTree from \"@/gs2cdk/skillTree\" ; import inventory from \"@/gs2cdk/inventory\" ; class SampleStack extends core . Stack { public constructor () { super (); new skillTree . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new skillTree . model . NodeModel ( \"node-0001\" , [ new inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , \"#{itemSetName}\" , null , \"#{userId}\" ), ], 0.5 , { metadata : \"NODE-0001\" } ), new skillTree . model . NodeModel ( \"node-0002\" , [ new inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , \"#{itemSetName}\" , null , \"#{userId}\" ), ], 0.5 , { metadata : \"NODE-0002\" , premiseNodeNames : [ \"node-0001\" , ] } ), new skillTree . model . NodeModel ( \"node-0003\" , [ new inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , \"#{itemSetName}\" , null , \"#{userId}\" ), new inventory . stampSheet . ConsumeItemSetByUserId ( \"namespace-0001\" , \"inventory-0001\" , \"item-0001\" , 1 , \"#{itemSetName}\" , null , \"#{userId}\" ), ], 0.5 , { metadata : \"NODE-0003\" , premiseNodeNames : [ \"node-0002\" , ] } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , skill_tree , inventory class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () skill_tree . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( node_models = [ skill_tree . NodeModel ( name = 'node-0001' , release_consume_actions = [ inventory . ConsumeItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , consume_count = 1 , item_set_name = '# {itemSetName} ' , user_id = '# {userId} ' ), ], restrain_return_rate = 0.5 , options = skill_tree . NodeModelOptions ( metadata = 'NODE-0001' ), ), skill_tree . NodeModel ( name = 'node-0002' , release_consume_actions = [ inventory . ConsumeItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , consume_count = 1 , item_set_name = '# {itemSetName} ' , user_id = '# {userId} ' ), ], restrain_return_rate = 0.5 , options = skill_tree . NodeModelOptions ( metadata = 'NODE-0002' , premise_node_names = [ 'node-0001' , ] ), ), skill_tree . NodeModel ( name = 'node-0003' , release_consume_actions = [ inventory . ConsumeItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , consume_count = 1 , item_set_name = '# {itemSetName} ' , user_id = '# {userId} ' ), inventory . ConsumeItemSetByUserId ( namespace_name = 'namespace-0001' , inventory_name = 'inventory-0001' , item_name = 'item-0001' , consume_count = 1 , item_set_name = '# {itemSetName} ' , user_id = '# {userId} ' ), ], restrain_return_rate = 0.5 , options = skill_tree . NodeModelOptions ( metadata = 'NODE-0003' , premise_node_names = [ 'node-0002' , ] ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template NodeModel 노드 모델 스킬 트리 내의 노드를 정의하는 모델로, 해방 비용·전제 조건·반환 동작을 포함합니다. 각 노드에는 검증 액션(해방 전 조건 확인), 소비 액션(지불할 비용), 먼저 해방되어야 하는 전제 노드를 설정할 수 있습니다. 노드를 구속(미해방 상태로 되돌림)하면, 소비한 리소스가 반환율에 따라 부분적으로 반환됩니다. 반환 입수 액션은 소비 액션에 반환율을 곱하여 자동으로 계산됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 nodeModelId string ※ ~ 1024자 노드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. releaseVerifyActions List [] 0 ~ 10 items 해방 검증 액션 목록 이 노드를 해방하기 전에 실행되어 조건이 충족되었는지 확인하는 검증 액션의 목록입니다. 예를 들어 플레이어가 특정 레벨에 도달했는지, 특정 아이템을 소지하고 있는지를 검증할 수 있습니다. 검증 액션 중 하나라도 실패하면 노드 해방이 거부됩니다. 최대 10개 액션. releaseConsumeActions List [] 1 ~ 10 items 해방 소비 액션 목록 이 노드를 해방할 때 실행되는 소비 액션의 목록으로, 해방 비용을 나타냅니다. 이 액션들은 반환 입수 액션 계산에도 사용됩니다. 노드를 구속할 때 각 소비 액션이 반환율에 따라 역산됩니다. 최소 1개의 소비 액션이 필요합니다. 최대 10개 액션. returnAcquireActions List 0 ~ 10 items 반환 입수 액션 목록 이 노드를 구속(취소)할 때 실행되는 입수 액션의 목록으로, 플레이어에게 반환되는 리소스를 나타냅니다. 이 필드는 해방 소비 액션에 반환율을 곱하여 자동 생성됩니다. 예를 들어 해방 비용이 골드 100이고 반환율이 0.8인 경우, 구속 시 골드 80이 반환됩니다. 최대 10개 액션. restrainReturnRate float 1.0 0.0 ~ 1.0 반환율 이 노드를 구속(미해방 상태로 되돌림)했을 때 소비된 리소스가 반환되는 비율입니다. 1.0은 전액 반환, 0.5는 절반 반환, 0.0은 반환 없음을 의미합니다. 기본값은 1.0(전액 반환)입니다. 유효 범위: 0.0~1.0. premiseNodeNames List [] 0 ~ 10 items 전제 노드명 목록 이 노드를 해방하기 전에 먼저 해방되어 있어야 하는 다른 노드 모델의 이름입니다. 스킬 트리의 의존 관계 그래프를 정의합니다. 전제 노드가 모두 해방되어 있지 않으면 이 노드는 해방할 수 없습니다. 최대 10개의 전제 노드. ConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-SkillTree Deploy/CDK 레퍼런스","url":"/ko/api_reference/skill_tree/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 스태미나 조작 시 트랜잭션의 처리 방법을 제어하는 설정입니다. overflowTriggerScript string ~ 1024자 오버플로우 트리거 스크립트 회복 시 스태미나가 오버플로우될 때 호출되는 GS2-Script의 GRN입니다. 시간 기반 회복으로 스태미나가 최대값을 초과하는 경우에 트리거되며, 초과분에 대한 커스텀 처리(예: 오버플로우분을 아이템으로 변환)가 가능합니다. Script 트리거 레퍼런스 - overflow logSetting LogSetting 로그 출력 설정 스태미나의 소비, 회복, 오버플로우 등의 조작을 GS2-Log에 기록하기 위한 로그 출력 설정입니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Stamina::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null OverflowTriggerScript : grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/stamina\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () stamina . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , stamina . NamespaceOptions { OverflowTriggerScript : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" ), LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Stamina\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\Stamina\\Model\\Options\\NamespaceOptions ( overflowTriggerScript : \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" , logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . stamina . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . stamina . model . options . NamespaceOptions () . withOverflowTriggerScript ( \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" ) . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Stamina . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2Stamina . Model . Options . NamespaceOptions { overflowTriggerScript = \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" , logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import stamina from \"@/gs2cdk/stamina\" ; class SampleStack extends core . Stack { public constructor () { super (); new stamina . model . Namespace ( this , \"namespace-0001\" , { overflowTriggerScript : \"grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script\" , logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , stamina class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () stamina . Namespace ( stack = self , name = 'namespace-0001' , options = stamina . NamespaceOptions ( overflow_trigger_script = 'grn:gs2:ap-northeast-1:YourOwnerId:script:namespace-0001:script:script' , log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentStaminaMaster 현재 활성화된 스태미나 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 스태미나 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 도구를 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Stamina 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentStaminaMaster 업데이트된 현재 활성화된 스태미나 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Stamina::CurrentStaminaMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-02-14\" , \"staminaModels\": [ { \"name\": \"quest\" , \"recoverIntervalMinutes\": 15 , \"recoverValue\": 1 , \"initialCapacity\": 50 , \"isOverflow\": true , \"metadata\": \"QUEST\" , \"maxCapacity\": 999 , \"maxStaminaTable\" : { \"name\": \"playerLevel\" , \"metadata\": \"PLAYER_LEVEL\" , \"experienceModelId\": \"playerLevel\" , \"values\": [ 51 , 52 , 53 , 54 , 55 ] } , \"recoverIntervalTable\" : { \"name\": \"staminaRecoverInterval\" , \"metadata\": \"STAMINA_RECOVER_INTERVAL\" , \"experienceModelId\": \"playerLevel\" , \"values\": [ 41 , 42 , 43 , 44 , 45 ] } , \"recoverValueTable\" : { \"name\": \"staminaRecoverValue\" , \"metadata\": \"STAMINA_RECOVER_VALUE\" , \"experienceModelId\": \"playerLevel\" , \"values\": [ 31 , 32 , 33 , 34 , 35 ] } } , { \"name\": \"raidBattle\" , \"recoverIntervalMinutes\": 60 , \"recoverValue\": 1 , \"initialCapacity\": 10 , \"isOverflow\": false , \"metadata\": \"RAID_BATTLE\" } , { \"name\": \"special\" , \"recoverIntervalMinutes\": 30 , \"recoverValue\": 3 , \"initialCapacity\": 100 , \"isOverflow\": true , \"metadata\": \"SPECIAL\" , \"maxCapacity\": 999 , \"maxStaminaTable\" : { \"name\": \"special\" , \"metadata\": \"SPECIAL\" , \"experienceModelId\": \"special\" , \"values\": [ 102 , 104 , 106 , 108 , 110 ] } } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/stamina\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () stamina . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , stamina . NamespaceOptions {}, ). MasterData ( [] stamina . StaminaModel { stamina . NewStaminaModel ( \"quest\" , 15 , 1 , 50 , true , stamina . StaminaModelOptions { Metadata : pointy . String ( \"QUEST\" ), MaxCapacity : pointy . Int32 ( 999 ), MaxStaminaTable : \u0026 stamina . MaxStaminaTable { Name : \"playerLevel\" , ExperienceModelId : \"playerLevel\" , Values : [] int32 { 51 , 52 , 53 , 54 , 55 , }, Metadata : pointy . String ( \"PLAYER_LEVEL\" ), }, RecoverIntervalTable : \u0026 stamina . RecoverIntervalTable { Name : \"staminaRecoverInterval\" , ExperienceModelId : \"playerLevel\" , Values : [] int32 { 41 , 42 , 43 , 44 , 45 , }, Metadata : pointy . String ( \"STAMINA_RECOVER_INTERVAL\" ), }, RecoverValueTable : \u0026 stamina . RecoverValueTable { Name : \"staminaRecoverValue\" , ExperienceModelId : \"playerLevel\" , Values : [] int32 { 31 , 32 , 33 , 34 , 35 , }, Metadata : pointy . String ( \"STAMINA_RECOVER_VALUE\" ), }, }, ), stamina . NewStaminaModel ( \"raidBattle\" , 60 , 1 , 10 , false , stamina . StaminaModelOptions { Metadata : pointy . String ( \"RAID_BATTLE\" ), }, ), stamina . NewStaminaModel ( \"special\" , 30 , 3 , 100 , true , stamina . StaminaModelOptions { Metadata : pointy . String ( \"SPECIAL\" ), MaxCapacity : pointy . Int32 ( 999 ), MaxStaminaTable : \u0026 stamina . MaxStaminaTable { Name : \"special\" , ExperienceModelId : \"special\" , Values : [] int32 { 102 , 104 , 106 , 108 , 110 , }, Metadata : pointy . String ( \"SPECIAL\" ), }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Stamina\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Stamina\\Model\\StaminaModel ( name : \"quest\" , recoverIntervalMinutes : 15 , recoverValue : 1 , initialCapacity : 50 , isOverflow : true , options : new \\Gs2Cdk\\Stamina\\Model\\Options\\StaminaModelOptions ( metadata : \"QUEST\" , maxCapacity : 999 , maxStaminaTable : new \\Gs2Cdk\\Stamina\\Model\\MaxStaminaTable ( name : \"playerLevel\" , experienceModelId : \"playerLevel\" , values : [ 51 , 52 , 53 , 54 , 55 , ], options : new \\Gs2Cdk\\Stamina\\Model\\Options\\MaxStaminaTableOptions ( metadata : \"PLAYER_LEVEL\" , ), ), recoverIntervalTable : new \\Gs2Cdk\\Stamina\\Model\\RecoverIntervalTable ( name : \"staminaRecoverInterval\" , experienceModelId : \"playerLevel\" , values : [ 41 , 42 , 43 , 44 , 45 , ], options : new \\Gs2Cdk\\Stamina\\Model\\Options\\RecoverIntervalTableOptions ( metadata : \"STAMINA_RECOVER_INTERVAL\" , ), ), recoverValueTable : new \\Gs2Cdk\\Stamina\\Model\\RecoverValueTable ( name : \"staminaRecoverValue\" , experienceModelId : \"playerLevel\" , values : [ 31 , 32 , 33 , 34 , 35 , ], options : new \\Gs2Cdk\\Stamina\\Model\\Options\\RecoverValueTableOptions ( metadata : \"STAMINA_RECOVER_VALUE\" , ), ) ) ), new \\Gs2Cdk\\Stamina\\Model\\StaminaModel ( name : \"raidBattle\" , recoverIntervalMinutes : 60 , recoverValue : 1 , initialCapacity : 10 , isOverflow : false , options : new \\Gs2Cdk\\Stamina\\Model\\Options\\StaminaModelOptions ( metadata : \"RAID_BATTLE\" ) ), new \\Gs2Cdk\\Stamina\\Model\\StaminaModel ( name : \"special\" , recoverIntervalMinutes : 30 , recoverValue : 3 , initialCapacity : 100 , isOverflow : true , options : new \\Gs2Cdk\\Stamina\\Model\\Options\\StaminaModelOptions ( metadata : \"SPECIAL\" , maxCapacity : 999 , maxStaminaTable : new \\Gs2Cdk\\Stamina\\Model\\MaxStaminaTable ( name : \"special\" , experienceModelId : \"special\" , values : [ 102 , 104 , 106 , 108 , 110 , ], options : new \\Gs2Cdk\\Stamina\\Model\\Options\\MaxStaminaTableOptions ( metadata : \"SPECIAL\" , ), ) ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . stamina . model . Namespace ( this , \"namespace-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . stamina . model . StaminaModel ( \"quest\" , 15 , 1 , 50 , true , new io . gs2 . cdk . stamina . model . options . StaminaModelOptions () . withMetadata ( \"QUEST\" ) . withMaxCapacity ( 999 ) . withMaxStaminaTable ( new io . gs2 . cdk . stamina . model . MaxStaminaTable ( \"playerLevel\" , \"playerLevel\" , Arrays . asList ( 51 , 52 , 53 , 54 , 55 ), new io . gs2 . cdk . stamina . model . options . MaxStaminaTableOptions () . withMetadata ( \"PLAYER_LEVEL\" ) )) . withRecoverIntervalTable ( new io . gs2 . cdk . stamina . model . RecoverIntervalTable ( \"staminaRecoverInterval\" , \"playerLevel\" , Arrays . asList ( 41 , 42 , 43 , 44 , 45 ), new io . gs2 . cdk . stamina . model . options . RecoverIntervalTableOptions () . withMetadata ( \"STAMINA_RECOVER_INTERVAL\" ) )) . withRecoverValueTable ( new io . gs2 . cdk . stamina . model . RecoverValueTable ( \"staminaRecoverValue\" , \"playerLevel\" , Arrays . asList ( 31 , 32 , 33 , 34 , 35 ), new io . gs2 . cdk . stamina . model . options . RecoverValueTableOptions () . withMetadata ( \"STAMINA_RECOVER_VALUE\" ) )) ), new io . gs2 . cdk . stamina . model . StaminaModel ( \"raidBattle\" , 60 , 1 , 10 , false , new io . gs2 . cdk . stamina . model . options . StaminaModelOptions () . withMetadata ( \"RAID_BATTLE\" ) ), new io . gs2 . cdk . stamina . model . StaminaModel ( \"special\" , 30 , 3 , 100 , true , new io . gs2 . cdk . stamina . model . options . StaminaModelOptions () . withMetadata ( \"SPECIAL\" ) . withMaxCapacity ( 999 ) . withMaxStaminaTable ( new io . gs2 . cdk . stamina . model . MaxStaminaTable ( \"special\" , \"special\" , Arrays . asList ( 102 , 104 , 106 , 108 , 110 ), new io . gs2 . cdk . stamina . model . options . MaxStaminaTableOptions () . withMetadata ( \"SPECIAL\" ) )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Stamina . Model . Namespace ( stack : this , name : \"namespace-0001\" ). MasterData ( new Gs2Cdk . Gs2Stamina . Model . StaminaModel [] { new Gs2Cdk . Gs2Stamina . Model . StaminaModel ( name : \"quest\" , recoverIntervalMinutes : 15 , recoverValue : 1 , initialCapacity : 50 , isOverflow : true , options : new Gs2Cdk . Gs2Stamina . Model . Options . StaminaModelOptions { metadata = \"QUEST\" , maxCapacity = 999 , maxStaminaTable = new Gs2Cdk . Gs2Stamina . Model . MaxStaminaTable ( name : \"playerLevel\" , experienceModelId : \"playerLevel\" , values : new int [] { 51 , 52 , 53 , 54 , 55 , }, options : new Gs2Cdk . Gs2Stamina . Model . Options . MaxStaminaTableOptions { metadata = \"PLAYER_LEVEL\" } ), recoverIntervalTable = new Gs2Cdk . Gs2Stamina . Model . RecoverIntervalTable ( name : \"staminaRecoverInterval\" , experienceModelId : \"playerLevel\" , values : new int [] { 41 , 42 , 43 , 44 , 45 , }, options : new Gs2Cdk . Gs2Stamina . Model . Options . RecoverIntervalTableOptions { metadata = \"STAMINA_RECOVER_INTERVAL\" } ), recoverValueTable = new Gs2Cdk . Gs2Stamina . Model . RecoverValueTable ( name : \"staminaRecoverValue\" , experienceModelId : \"playerLevel\" , values : new int [] { 31 , 32 , 33 , 34 , 35 , }, options : new Gs2Cdk . Gs2Stamina . Model . Options . RecoverValueTableOptions { metadata = \"STAMINA_RECOVER_VALUE\" } ) } ), new Gs2Cdk . Gs2Stamina . Model . StaminaModel ( name : \"raidBattle\" , recoverIntervalMinutes : 60 , recoverValue : 1 , initialCapacity : 10 , isOverflow : false , options : new Gs2Cdk . Gs2Stamina . Model . Options . StaminaModelOptions { metadata = \"RAID_BATTLE\" } ), new Gs2Cdk . Gs2Stamina . Model . StaminaModel ( name : \"special\" , recoverIntervalMinutes : 30 , recoverValue : 3 , initialCapacity : 100 , isOverflow : true , options : new Gs2Cdk . Gs2Stamina . Model . Options . StaminaModelOptions { metadata = \"SPECIAL\" , maxCapacity = 999 , maxStaminaTable = new Gs2Cdk . Gs2Stamina . Model . MaxStaminaTable ( name : \"special\" , experienceModelId : \"special\" , values : new int [] { 102 , 104 , 106 , 108 , 110 , }, options : new Gs2Cdk . Gs2Stamina . Model . Options . MaxStaminaTableOptions { metadata = \"SPECIAL\" } ) } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import stamina from \"@/gs2cdk/stamina\" ; class SampleStack extends core . Stack { public constructor () { super (); new stamina . model . Namespace ( this , \"namespace-0001\" , ). masterData ( [ new stamina . model . StaminaModel ( \"quest\" , 15 , 1 , 50 , true , { metadata : \"QUEST\" , maxCapacity : 999 , maxStaminaTable : new stamina . model . MaxStaminaTable ( \"playerLevel\" , \"playerLevel\" , [ 51 , 52 , 53 , 54 , 55 , ], { metadata : \"PLAYER_LEVEL\" } ), recoverIntervalTable : new stamina . model . RecoverIntervalTable ( \"staminaRecoverInterval\" , \"playerLevel\" , [ 41 , 42 , 43 , 44 , 45 , ], { metadata : \"STAMINA_RECOVER_INTERVAL\" } ), recoverValueTable : new stamina . model . RecoverValueTable ( \"staminaRecoverValue\" , \"playerLevel\" , [ 31 , 32 , 33 , 34 , 35 , ], { metadata : \"STAMINA_RECOVER_VALUE\" } ) } ), new stamina . model . StaminaModel ( \"raidBattle\" , 60 , 1 , 10 , false , { metadata : \"RAID_BATTLE\" } ), new stamina . model . StaminaModel ( \"special\" , 30 , 3 , 100 , true , { metadata : \"SPECIAL\" , maxCapacity : 999 , maxStaminaTable : new stamina . model . MaxStaminaTable ( \"special\" , \"special\" , [ 102 , 104 , 106 , 108 , 110 , ], { metadata : \"SPECIAL\" } ) } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , stamina class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () stamina . Namespace ( stack = self , name = \"namespace-0001\" , ) . master_data ( stamina_models = [ stamina . StaminaModel ( name = 'quest' , recover_interval_minutes = 15 , recover_value = 1 , initial_capacity = 50 , is_overflow = True , options = stamina . StaminaModelOptions ( metadata = 'QUEST' , max_capacity = 999 , max_stamina_table = stamina . MaxStaminaTable ( name = 'playerLevel' , experience_model_id = 'playerLevel' , values = [ 51 , 52 , 53 , 54 , 55 , ], options = stamina . MaxStaminaTableOptions ( metadata = 'PLAYER_LEVEL' , ), ), recover_interval_table = stamina . RecoverIntervalTable ( name = 'staminaRecoverInterval' , experience_model_id = 'playerLevel' , values = [ 41 , 42 , 43 , 44 , 45 , ], options = stamina . RecoverIntervalTableOptions ( metadata = 'STAMINA_RECOVER_INTERVAL' , ), ), recover_value_table = stamina . RecoverValueTable ( name = 'staminaRecoverValue' , experience_model_id = 'playerLevel' , values = [ 31 , 32 , 33 , 34 , 35 , ], options = stamina . RecoverValueTableOptions ( metadata = 'STAMINA_RECOVER_VALUE' , ), ) ), ), stamina . StaminaModel ( name = 'raidBattle' , recover_interval_minutes = 60 , recover_value = 1 , initial_capacity = 10 , is_overflow = False , options = stamina . StaminaModelOptions ( metadata = 'RAID_BATTLE' ), ), stamina . StaminaModel ( name = 'special' , recover_interval_minutes = 30 , recover_value = 3 , initial_capacity = 100 , is_overflow = True , options = stamina . StaminaModelOptions ( metadata = 'SPECIAL' , max_capacity = 999 , max_stamina_table = stamina . MaxStaminaTable ( name = 'special' , experience_model_id = 'special' , values = [ 102 , 104 , 106 , 108 , 110 , ], options = stamina . MaxStaminaTableOptions ( metadata = 'SPECIAL' , ), ) ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template StaminaModel 스태미나 모델 스태미나의 최대값, 회복 간격, 회복량과 같은 파라미터를 정의할 수 있습니다. GS2-Experience와 연동하여 최대값이나 회복량을 제어할 수도 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 staminaModelId string ※ ~ 1024자 스타미나 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. recoverIntervalMinutes int  0 ~ 2147483646 회복 간격(분) 스태미나 회복 틱의 간격(분 단위)입니다. 이 간격이 경과할 때마다 플레이어의 스태미나가 회복량만큼 증가합니다. RecoverIntervalTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 0으로 설정하면 시간 기반 자동 회복이 비활성화됩니다. recoverValue int 1 0 ~ 2147483646 회복량 회복 틱마다 회복되는 스태미나의 양입니다. 회복 간격이 경과할 때마다 최대값에 도달할 때까지 이 값만큼 스태미나가 증가합니다. RecoverValueTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 기본값은 1입니다. initialCapacity int  0 ~ 2147483646 최대값의 초기값 모든 플레이어에 대한 기본 스태미나 최대값입니다. 오버플로우가 비활성화된 경우, 사용자별 최대값의 하한으로 작용합니다. MaxStaminaTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. isOverflow bool  오버플로우 가능 여부 아이템 사용 등의 수단으로 스태미나가 초기 최대값을 초과할 수 있는지 여부입니다. 활성화된 경우, 스태미나는 initialCapacity를 초과하여 maxCapacity까지 설정할 수 있습니다. 자연 회복은 일반적인 최대값에서 정지합니다. 비활성화된 경우, 사용자별 최대값은 initialCapacity 이상으로 제한됩니다. maxCapacity int {isOverflow} == true ※ 0 ~ 2147483646 오버플로우 시 최대값 오버플로우 활성화 시 스태미나의 절대 상한값입니다. 오버플로우 상태에서도 스태미나는 이 값을 초과할 수 없습니다. isOverflow가 true인 경우에만 표시됩니다. 예를 들어 initialCapacity가 100, maxCapacity가 200인 경우, 아이템으로 스태미나를 200까지 늘릴 수 있지만 자연 회복은 100에서 정지합니다. ※ isOverflow이(가) true 이면 필수 maxStaminaTable MaxStaminaTable 스태미나 최대값 테이블 플레이어의 GS2-Experience 랭크에 기반하여 스태미나 최대값을 동적으로 결정하는 MaxStaminaTable에 대한 참조입니다. 설정 시, 플레이어의 최대 스태미나는 현재 랭크 인덱스로 테이블에서 참조되며, initialCapacity를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 initialCapacity를 최대값으로 공유합니다. recoverIntervalTable RecoverIntervalTable 회복 간격 테이블 플레이어의 GS2-Experience 랭크에 기반하여 회복 간격을 동적으로 결정하는 RecoverIntervalTable에 대한 참조입니다. 설정 시, 플레이어의 회복 간격은 현재 랭크 인덱스로 테이블에서 참조되며, recoverIntervalMinutes를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 recoverIntervalMinutes를 공유합니다. recoverValueTable RecoverValueTable 회복량 테이블 플레이어의 GS2-Experience 랭크에 기반하여 회복량을 동적으로 결정하는 RecoverValueTable에 대한 참조입니다. 설정 시, 플레이어의 회복량은 현재 랭크 인덱스로 테이블에서 참조되며, recoverValue를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 recoverValue를 공유합니다. MaxStaminaTable 스태미나 최대값 테이블 스태미나 최대값 테이블은 GS2-Experience의 랭크별로 스태미나의 최대값을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 최대값 테이블 이름 스태미나 최대값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 스태미나 최대값이 결정됩니다. values List  1 ~ 1024 items 랭크별 스태미나 최대값 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 스태미나 최대값의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 최대 스태미나로 사용됩니다. 배열 길이는 참조하는 ExperienceModel에서 정의된 랭크 수와 일치해야 합니다. RecoverIntervalTable 회복 간격 테이블 회복 간격 테이블은 GS2-Experience의 랭크별로 스태미나의 회복 간격을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복 간격이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복 간격 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복 간격 값(분 단위)의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 회복 간격으로 사용되며, 모델의 기본값 recoverIntervalMinutes를 오버라이드합니다. RecoverValueTable 스태미나 회복량 테이블 스태미나 회복량 테이블은 GS2-Experience의 랭크별로 스태미나의 회복량을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복량이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복량 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복량 값의 배열입니다. 인덱스 i의 값은 랭크 i의 플레이어에 대한 틱당 회복량으로 사용되며, 모델의 기본 recoverValue를 오버라이드합니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Stamina Deploy/CDK 레퍼런스","url":"/ko/api_reference/stamina/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 supportSpeculativeExecution 문자열 열거형 enum {   “enable”,   “disable” } “disable” 투기적 실행을 지원할지 여부 활성화하면 스테이트 머신 정의와 난수 상태가 Status 엔티티에 포함되어, 클라이언트가 서버 확인 전에 로컬에서 상태 전이를 시뮬레이션할 수 있게 됩니다. transactionSetting 설정이 필요합니다. 정의 설명 enable 활성화 disable 비활성화 transactionSetting TransactionSetting {supportSpeculativeExecution} == “enable” 트랜잭션 설정 스테이트 머신의 emit 액션 실행 시 트랜잭션 처리 방식을 제어하는 설정입니다. 투기적 실행을 활성화하는 경우 필요합니다. ※ supportSpeculativeExecution이(가) “enable” 이면 활성화 startScript ScriptSetting 스테이트 머신을 시작했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - start passScript ScriptSetting 스테이트 머신이 정상 종료되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - pass errorScript ScriptSetting 스테이트 머신이 이상 종료되었을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - error lowestStateMachineVersion long 스테이트 머신의 최저 버전 실행 가능한 스테이트 머신의 최저 버전입니다. 이 값보다 오래된 버전의 스테이트 머신으로 생성된 Status 인스턴스는 거부되며, 모든 실행 중인 인스턴스가 최신 정의를 사용하도록 보장됩니다. logSetting LogSetting 로그 출력 설정 스테이트 머신의 실행, 상태 전이, emit 이벤트에 관한 API 요청·응답 로그를 출력할 GS2-Log의 네임스페이스를 지정합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::StateMachine::Namespace Properties : Name : namespace-0001 Description : null SupportSpeculativeExecution : null TransactionSetting : null StartScript : null PassScript : null ErrorScript : null LowestStateMachineVersion : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/stateMachine\" ) SampleStack := core . NewStack () stateMachine . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , stateMachine . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\StateMachine\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , options : new \\Gs2Cdk\\StateMachine\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . stateMachine . model . Namespace ( this , \"namespace-0001\" , new io . gs2 . cdk . stateMachine . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2StateMachine . Model . Namespace ( stack : this , name : \"namespace-0001\" , options : new Gs2Cdk . Gs2StateMachine . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import stateMachine from \"@/gs2cdk/stateMachine\" ; class SampleStack extends core . Stack { public constructor () { super (); new stateMachine . model . Namespace ( this , \"namespace-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , state_machine class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () state_machine . Namespace ( stack = self , name = 'namespace-0001' , options = state_machine . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방식, 정합성, 비동기 처리, 충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 완료 시 실행할 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 완료 시 스크립트를 실행할 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 완료 스크립트의 완료 여부를 알고 싶을 때 사용합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. StateMachineMaster 스테이트 머신 정의 GSL로 작성된 스테이트 머신을 관리합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mainStateMachineName string  ~ 128자 메인 스테이트 머신 이름 GSL 정의 내에서 진입점이 되는 스테이트 머신의 이름입니다. 이 스테이트 머신부터 실행이 시작되며, 스택 메커니즘을 통해 서브 스테이트 머신을 호출할 수 있습니다. payload string  ~ 5242880자 스테이트 머신 정의 스테이트 머신의 상태, 전이, 액션을 정의하는 GSL(GS2 State Language) 소스 코드입니다. 효율적인 취득을 위해 메타데이터와는 별도로 저장됩니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item StateMachineMaster 작성한 스테이트 머신 마스터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::StateMachine::StateMachineMaster Properties : NamespaceName : namespace-0001 MainStateMachineName : MainStateMachine Payload : \\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/stateMachine\" ) SampleStack := core . NewStack () stateMachine . NewStateMachineMaster ( \u0026 SampleStack , \"namespace-0001\" , \"MainStateMachine\" , \"\\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n \" , stateMachine . StateMachineMasterOptions {}, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\StateMachine\\Model\\StateMachineMaster ( stack : $this , namespaceName : \"namespace-0001\" , mainStateMachineName : \"MainStateMachine\" , payload : \" \\n StateMachine MainStateMachine { \\n EntryPoint Task1; \\n\\n Task Task1(int initCounter) { \\n Event Pass(); \\n Event Error(string Reason); \\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1 \\n } \\n\\n PassTask Pass; \\n\\n ErrorTask Error(string reason); \\n\\n Transition Task1 handling Pass -\u003e Pass; \\n Transition Task1 handling Error -\u003e Error; \\n } \\n \" ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . stateMachine . model . StateMachineMaster ( this , \"namespace-0001\" , \"MainStateMachine\" , \"\\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n \" ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2StateMachine . Model . StateMachineMaster ( stack : this , namespaceName : \"namespace-0001\" , mainStateMachineName : \"MainStateMachine\" , payload : \"\\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n \" ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import stateMachine from \"@/gs2cdk/stateMachine\" ; class SampleStack extends core . Stack { public constructor () { super (); new stateMachine . model . StateMachineMaster ( this , \"namespace-0001\" , \"MainStateMachine\" , \"\\nStateMachine MainStateMachine {\\n EntryPoint Task1;\\n\\n Task Task1(int initCounter) {\\n Event Pass();\\n Event Error(string Reason);\\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\\n }\\n\\n PassTask Pass;\\n\\n ErrorTask Error(string reason);\\n\\n Transition Task1 handling Pass -\u003e Pass;\\n Transition Task1 handling Error -\u003e Error;\\n}\\n \" ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , state_machine class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () state_machine . StateMachineMaster ( stack = self , namespace_name = 'namespace-0001' , main_state_machine_name = 'MainStateMachine' , payload = ' \\n StateMachine MainStateMachine { \\n EntryPoint Task1; \\n\\n Task Task1(int initCounter) { \\n Event Pass(); \\n Event Error(string Reason); \\n\\n Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1 \\n } \\n\\n PassTask Pass; \\n\\n ErrorTask Error(string reason); \\n\\n Transition Task1 handling Pass -\u003e Pass; \\n Transition Task1 handling Error -\u003e Error; \\n } \\n ' , ) print ( SampleStack () . yaml ()) # Generate Template","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-StateMachine Deploy/CDK 레퍼런스","url":"/ko/api_reference/state_machine/deploy/"},{"content":"엔티티 Deploy 처리에서 조작 대상이 되는 리소스 Namespace 네임스페이스 네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다. GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다. 따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 transactionSetting TransactionSetting 트랜잭션 설정 버전 체크 작업 시 트랜잭션 처리 방법을 제어하는 설정입니다. assumeUserId string  ~ 1024자 버전 체크를 통과한 경우 승격되는 GS2-Identifier 사용자 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 버전 체크가 통과했을 때 권한을 이어받는 GS2-Identifier 사용자입니다. 버전 검증이 성공한 후, 시스템이 사용자를 대신하여 인가된 작업(액세스 부여 등)을 수행할 수 있도록 합니다. acceptVersionScript ScriptSetting 버전을 승인했을 때 실행할 스크립트 설정 Script 트리거 레퍼런스 - acceptVersion checkVersionTriggerScriptId string ~ 1024자 버전 체크 처리를 실행하는 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - checkVersion logSetting LogSetting 로그 출력 설정 버전 체크 및 버전 승인 작업에 관한 API 요청·응답 로그를 출력할 GS2-Log 네임스페이스를 지정합니다. GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item Namespace 생성한 네임스페이스 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Version::Namespace Properties : Name : namespace-0001 Description : null TransactionSetting : null AssumeUserId : grn:gs2::YourOwnerId:identifier:user:user-0001 AcceptVersionScript : null CheckVersionTriggerScriptId : null LogSetting : LoggingNamespaceId : grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001 import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/version\" ) SampleStack := core . NewStack () version . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , version . NamespaceOptions { LogSetting : \u0026 core . LogSetting { LoggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" , }, }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); new \\Gs2Cdk\\Version\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , assumeUserId : \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , options : new \\Gs2Cdk\\Version\\Model\\Options\\NamespaceOptions ( logSetting : new \\Gs2Cdk\\Core\\Model\\LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) ) ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . version . model . Namespace ( this , \"namespace-0001\" , \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , new io . gs2 . cdk . version . model . options . NamespaceOptions () . withLogSetting ( new io . gs2 . cdk . core . model . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" )) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Version . Model . Namespace ( stack : this , name : \"namespace-0001\" , assumeUserId : \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , options : new Gs2Cdk . Gs2Version . Model . Options . NamespaceOptions { logSetting = new Gs2Cdk . Core . Model . LogSetting ( loggingNamespaceId : \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import version from \"@/gs2cdk/version\" ; class SampleStack extends core . Stack { public constructor () { super (); new version . model . Namespace ( this , \"namespace-0001\" , \"grn:gs2::YourOwnerId:identifier:user:user-0001\" , { logSetting : new core . LogSetting ( \"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001\" ) } ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , version class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () version . Namespace ( stack = self , name = 'namespace-0001' , assume_user_id = 'grn:gs2::YourOwnerId:identifier:user:user-0001' , options = version . NamespaceOptions ( log_setting = core . LogSetting ( logging_namespace_id = 'grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001' , ), ), ) print ( SampleStack () . yaml ()) # Generate Template TransactionSetting 트랜잭션 설정 트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다. 자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 enableAutoRun bool false 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 enableAtomicCommit bool {enableAutoRun} == true false 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 transactionUseDistributor bool {enableAtomicCommit} == true false 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 commitScriptResultInUseDistributor bool {transactionUseDistributor} == true false 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 acquireActionUseJobQueue bool {enableAtomicCommit} == true false 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 distributorNamespaceId string “grn:gs2:{region}:{ownerId}:distributor:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN queueNamespaceId string “grn:gs2:{region}:{ownerId}:queue:default” ~ 1024자 트랜잭션 실행에 사용하는 GS2-JobQueue의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ScriptSetting 스크립트 설정 GS2에서는 마이크로서비스의 이벤트에 연결하여 커스텀 스크립트를 실행할 수 있습니다. 이 모델은 스크립트 실행을 트리거하기 위한 설정을 보유합니다. 스크립트 실행 방식은 크게 두 가지로, 바로 “동기 실행\"과 “비동기 실행\"입니다. 동기 실행은 스크립트 실행이 완료될 때까지 처리가 블록됩니다. 대신 스크립트 실행 결과를 이용하여 API 실행을 중단시키거나 API 응답 내용을 제어할 수 있습니다. 한편, 비동기 실행에서는 스크립트 완료를 기다리기 위해 처리가 블록되는 일이 없습니다. 다만 스크립트 실행 결과를 이용하여 API 실행을 중단하거나 API 응답 내용을 변경할 수는 없습니다. 비동기 실행은 API의 응답 흐름에 영향을 주지 않으므로 원칙적으로 비동기 실행을 권장합니다. 비동기 실행에는 실행 방식이 두 가지 있으며, GS2-Script와 Amazon EventBridge가 있습니다. Amazon EventBridge를 사용함으로써 Lua 이외의 언어로 처리를 작성할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 triggerScriptId string ~ 1024자 API 실행 시 동기적으로 실행되는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. doneTriggerTargetType 문자열 열거형 enum {   “none”,   “gs2_script”,   “aws” } “none” 비동기 스크립트의 실행 방법 비동기 실행에서 사용할 스크립트의 종류를 지정합니다. “비동기 실행의 스크립트를 사용하지 않음(none)”, “GS2-Script를 사용함(gs2_script)”, “Amazon EventBridge를 사용함(aws)” 중에서 선택할 수 있습니다. 정의 설명 none 없음 gs2_script GS2-Script aws Amazon EventBridge doneTriggerScriptId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행할 GS2-Script 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 doneTriggerQueueNamespaceId string {doneTriggerTargetType} == “gs2_script” ~ 1024자 비동기 실행 스크립트를 실행하는 GS2-JobQueue 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 비동기 실행 스크립트를 직접 실행하지 않고 GS2-JobQueue를 경유하는 경우 GS2-JobQueue의 네임스페이스GRN을 지정합니다. GS2-JobQueue를 이용해야 할 이유는 많지 않으므로, 특별한 이유가 없다면 지정할 필요는 없습니다. ※ doneTriggerTargetType이(가) “gs2_script” 이면 활성화 LogSetting 로그 출력 설정 로그 데이터의 출력 설정을 관리합니다. 이 타입은 로그 데이터를 출력하기 위해 사용되는 GS2-Log 네임스페이스의 식별자(Namespace ID)를 보관합니다. 로그 네임스페이스ID(loggingNamespaceId)에는 로그 데이터를 수집하여 저장하는 GS2-Log의 네임스페이스를 GRN 형식으로 지정합니다. 이 설정을 하면 설정된 네임스페이스 내에서 발생한 API 요청·응답 로그 데이터가 대상 GS2-Log 네임스페이스 쪽으로 출력됩니다. GS2-Log에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 loggingNamespaceId string  ~ 1024자 로그를 출력할 GS2-Log의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN “grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. CurrentVersionMaster 현재 활성화된 버전 모델의 마스터 데이터 현재 네임스페이스 내에서 유효한 버전 모델의 정의를 기술한 마스터 데이터입니다. GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다. 파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다. JSON 파일을 작성하는 방법으로, 매니지먼트 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다. 또한 게임 운영에 더 적합한 툴을 직접 제작하여 적절한 형식의 JSON 파일을 출력하는 방식으로도 서비스를 이용할 수 있습니다. Note JSON 파일 형식에 대해서는 GS2-Version 마스터 데이터 레퍼런스 를 참조해 주세요. Request 리소스 생성·갱신 요청 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. mode 문자열 열거형 enum {   “direct”,   “preUpload” } “direct” 업데이트 모드 정의 설명 direct 마스터 데이터를 직접 업데이트 preUpload 마스터 데이터를 업로드한 후 업데이트 settings string {mode} == “direct” ※ ~ 5242880 바이트 (5MB) 마스터 데이터 ※ mode이(가) “direct” 이면 필수 uploadToken string {mode} == “preUpload” ※ ~ 1024자 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 GetAttr !GetAttr 태그로 취득 가능한 리소스 생성 결과 타입 설명 Item CurrentVersionMaster 갱신된 현재 활성화된 버전 모델의 마스터 데이터 구현 예제 Language: GS2-Deploy(YAML) Go PHP Java C# TypeScript Python Type : GS2::Version::CurrentVersionMaster Properties : NamespaceName : namespace-0001 Mode : direct Settings : { \"version\": \"2019-10-09\" , \"versionModels\": [ { \"name\": \"app\" , \"scope\": \"passive\" , \"type\": \"simple\" , \"metadata\": \"APP\" , \"warningVersion\" : { \"major\": 2 , \"minor\": 2 , \"micro\": 2 } , \"errorVersion\" : { \"major\": 1 , \"minor\": 1 , \"micro\": 1 } } , { \"name\": \"asset\" , \"scope\": \"passive\" , \"type\": \"simple\" , \"metadata\": \"ASSET\" , \"warningVersion\" : { \"major\": 3 , \"minor\": 3 , \"micro\": 3 } , \"errorVersion\" : { \"major\": 2 , \"minor\": 2 , \"micro\": 2 } , \"needSignature\": true , \"signatureKeyId\": \"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\" } , { \"name\": \"eula\" , \"scope\": \"active\" , \"type\": \"simple\" , \"metadata\": \"EULA\" , \"currentVersion\" : { \"major\": 2 , \"minor\": 2 , \"micro\": 2 } , \"warningVersion\" : { \"major\": 4 , \"minor\": 4 , \"micro\": 4 } , \"errorVersion\" : { \"major\": 3 , \"minor\": 3 , \"micro\": 3 } } ] } UploadToken : null import ( \"github.com/gs2io/gs2-golang-cdk/core\" \"github.com/gs2io/gs2-golang-cdk/version\" \"github.com/openlyinc/pointy\" ) SampleStack := core . NewStack () version . NewNamespace ( \u0026 SampleStack , \"namespace-0001\" , \"user-0001\" , version . NamespaceOptions {}, ). MasterData ( [] version . VersionModel { version . NewVersionModel ( \"app\" , version . VersionModelScopePassive , version . VersionModelTypeSimple , version . VersionModelOptions { Metadata : pointy . String ( \"APP\" ), WarningVersion : \u0026 version . Version { Major : 2 , Minor : 2 , Micro : 2 , }, ErrorVersion : \u0026 version . Version { Major : 1 , Minor : 1 , Micro : 1 , }, }, ), version . NewVersionModel ( \"asset\" , version . VersionModelScopePassive , version . VersionModelTypeSimple , version . VersionModelOptions { Metadata : pointy . String ( \"ASSET\" ), WarningVersion : \u0026 version . Version { Major : 3 , Minor : 3 , Micro : 3 , }, ErrorVersion : \u0026 version . Version { Major : 2 , Minor : 2 , Micro : 2 , }, NeedSignature : pointy . Bool ( true ), SignatureKeyId : pointy . String ( \"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\" ), }, ), version . NewVersionModel ( \"eula\" , version . VersionModelScopeActive , version . VersionModelTypeSimple , version . VersionModelOptions { Metadata : pointy . String ( \"EULA\" ), CurrentVersion : \u0026 version . Version { Major : 2 , Minor : 2 , Micro : 2 , }, WarningVersion : \u0026 version . Version { Major : 4 , Minor : 4 , Micro : 4 , }, ErrorVersion : \u0026 version . Version { Major : 3 , Minor : 3 , Micro : 3 , }, }, ), }, ) println ( SampleStack . Yaml ()) // Generate Template class SampleStack extends \\Gs2Cdk\\Core\\Model\\Stack { function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\Version\\Model\\Namespace_ ( stack : $this , name : \"namespace-0001\" , assumeUserId : \"user-0001\" )) -\u003e masterData ( [ new \\Gs2Cdk\\Version\\Model\\VersionModel ( name : \"app\" , scope : \\Gs2Cdk\\Version\\Model\\Enums\\VersionModelScope :: PASSIVE , type : \\Gs2Cdk\\Version\\Model\\Enums\\VersionModelType :: SIMPLE , options : new \\Gs2Cdk\\Version\\Model\\Options\\VersionModelOptions ( metadata : \"APP\" , warningVersion : new \\Gs2Cdk\\Version\\Model\\Version ( major : 2 , minor : 2 , micro : 2 , ), errorVersion : new \\Gs2Cdk\\Version\\Model\\Version ( major : 1 , minor : 1 , micro : 1 , ) ) ), new \\Gs2Cdk\\Version\\Model\\VersionModel ( name : \"asset\" , scope : \\Gs2Cdk\\Version\\Model\\Enums\\VersionModelScope :: PASSIVE , type : \\Gs2Cdk\\Version\\Model\\Enums\\VersionModelType :: SIMPLE , options : new \\Gs2Cdk\\Version\\Model\\Options\\VersionModelOptions ( metadata : \"ASSET\" , warningVersion : new \\Gs2Cdk\\Version\\Model\\Version ( major : 3 , minor : 3 , micro : 3 , ), errorVersion : new \\Gs2Cdk\\Version\\Model\\Version ( major : 2 , minor : 2 , micro : 2 , ), needSignature : true , signatureKeyId : \"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\" ) ), new \\Gs2Cdk\\Version\\Model\\VersionModel ( name : \"eula\" , scope : \\Gs2Cdk\\Version\\Model\\Enums\\VersionModelScope :: ACTIVE , type : \\Gs2Cdk\\Version\\Model\\Enums\\VersionModelType :: SIMPLE , options : new \\Gs2Cdk\\Version\\Model\\Options\\VersionModelOptions ( metadata : \"EULA\" , currentVersion : new \\Gs2Cdk\\Version\\Model\\Version ( major : 2 , minor : 2 , micro : 2 , ), warningVersion : new \\Gs2Cdk\\Version\\Model\\Version ( major : 4 , minor : 4 , micro : 4 , ), errorVersion : new \\Gs2Cdk\\Version\\Model\\Version ( major : 3 , minor : 3 , micro : 3 , ) ) ) ] ); } } print (( new SampleStack ()) -\u003e yaml ()); // Generate Template class SampleStack extends io . gs2 . cdk . core . model . Stack { public SampleStack () { super (); new io . gs2 . cdk . version . model . Namespace ( this , \"namespace-0001\" , \"user-0001\" ). masterData ( Arrays . asList ( new io . gs2 . cdk . version . model . VersionModel ( \"app\" , io . gs2 . cdk . version . model . enums . VersionModelScope . PASSIVE , io . gs2 . cdk . version . model . enums . VersionModelType . SIMPLE , new io . gs2 . cdk . version . model . options . VersionModelOptions () . withMetadata ( \"APP\" ) . withWarningVersion ( new io . gs2 . cdk . version . model . Version ( 2 , 2 , 2 )) . withErrorVersion ( new io . gs2 . cdk . version . model . Version ( 1 , 1 , 1 )) ), new io . gs2 . cdk . version . model . VersionModel ( \"asset\" , io . gs2 . cdk . version . model . enums . VersionModelScope . PASSIVE , io . gs2 . cdk . version . model . enums . VersionModelType . SIMPLE , new io . gs2 . cdk . version . model . options . VersionModelOptions () . withMetadata ( \"ASSET\" ) . withWarningVersion ( new io . gs2 . cdk . version . model . Version ( 3 , 3 , 3 )) . withErrorVersion ( new io . gs2 . cdk . version . model . Version ( 2 , 2 , 2 )) . withNeedSignature ( true ) . withSignatureKeyId ( \"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\" ) ), new io . gs2 . cdk . version . model . VersionModel ( \"eula\" , io . gs2 . cdk . version . model . enums . VersionModelScope . ACTIVE , io . gs2 . cdk . version . model . enums . VersionModelType . SIMPLE , new io . gs2 . cdk . version . model . options . VersionModelOptions () . withMetadata ( \"EULA\" ) . withCurrentVersion ( new io . gs2 . cdk . version . model . Version ( 2 , 2 , 2 )) . withWarningVersion ( new io . gs2 . cdk . version . model . Version ( 4 , 4 , 4 )) . withErrorVersion ( new io . gs2 . cdk . version . model . Version ( 3 , 3 , 3 )) ) ) ); } } System . out . println ( new SampleStack (). yaml ()); // Generate Template public class SampleStack : Gs2Cdk . Core . Model . Stack { public SampleStack () { new Gs2Cdk . Gs2Version . Model . Namespace ( stack : this , name : \"namespace-0001\" , assumeUserId : \"user-0001\" ). MasterData ( new Gs2Cdk . Gs2Version . Model . VersionModel [] { new Gs2Cdk . Gs2Version . Model . VersionModel ( name : \"app\" , scope : Gs2Cdk . Gs2Version . Model . Enums . VersionModelScope . Passive , type : Gs2Cdk . Gs2Version . Model . Enums . VersionModelType . Simple , options : new Gs2Cdk . Gs2Version . Model . Options . VersionModelOptions { metadata = \"APP\" , warningVersion = new Gs2Cdk . Gs2Version . Model . Version_ ( major : 2 , minor : 2 , micro : 2 ), errorVersion = new Gs2Cdk . Gs2Version . Model . Version_ ( major : 1 , minor : 1 , micro : 1 ) } ), new Gs2Cdk . Gs2Version . Model . VersionModel ( name : \"asset\" , scope : Gs2Cdk . Gs2Version . Model . Enums . VersionModelScope . Passive , type : Gs2Cdk . Gs2Version . Model . Enums . VersionModelType . Simple , options : new Gs2Cdk . Gs2Version . Model . Options . VersionModelOptions { metadata = \"ASSET\" , warningVersion = new Gs2Cdk . Gs2Version . Model . Version_ ( major : 3 , minor : 3 , micro : 3 ), errorVersion = new Gs2Cdk . Gs2Version . Model . Version_ ( major : 2 , minor : 2 , micro : 2 ), needSignature = true , signatureKeyId = \"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\" } ), new Gs2Cdk . Gs2Version . Model . VersionModel ( name : \"eula\" , scope : Gs2Cdk . Gs2Version . Model . Enums . VersionModelScope . Active , type : Gs2Cdk . Gs2Version . Model . Enums . VersionModelType . Simple , options : new Gs2Cdk . Gs2Version . Model . Options . VersionModelOptions { metadata = \"EULA\" , currentVersion = new Gs2Cdk . Gs2Version . Model . Version_ ( major : 2 , minor : 2 , micro : 2 ), warningVersion = new Gs2Cdk . Gs2Version . Model . Version_ ( major : 4 , minor : 4 , micro : 4 ), errorVersion = new Gs2Cdk . Gs2Version . Model . Version_ ( major : 3 , minor : 3 , micro : 3 ) } ) } ); } } Debug . Log ( new SampleStack (). Yaml ()); // Generate Template import core from \"@/gs2cdk/core\" ; import version from \"@/gs2cdk/version\" ; class SampleStack extends core . Stack { public constructor () { super (); new version . model . Namespace ( this , \"namespace-0001\" , \"user-0001\" , ). masterData ( [ new version . model . VersionModel ( \"app\" , version . model . VersionModelScope . PASSIVE , version . model . VersionModelType . SIMPLE , { metadata : \"APP\" , warningVersion : new version . model . Version ( 2 , 2 , 2 ), errorVersion : new version . model . Version ( 1 , 1 , 1 ) } ), new version . model . VersionModel ( \"asset\" , version . model . VersionModelScope . PASSIVE , version . model . VersionModelType . SIMPLE , { metadata : \"ASSET\" , warningVersion : new version . model . Version ( 3 , 3 , 3 ), errorVersion : new version . model . Version ( 2 , 2 , 2 ), needSignature : true , signatureKeyId : \"grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001\" } ), new version . model . VersionModel ( \"eula\" , version . model . VersionModelScope . ACTIVE , version . model . VersionModelType . SIMPLE , { metadata : \"EULA\" , currentVersion : new version . model . Version ( 2 , 2 , 2 ), warningVersion : new version . model . Version ( 4 , 4 , 4 ), errorVersion : new version . model . Version ( 3 , 3 , 3 ) } ) ] ); } } console . log ( new SampleStack (). yaml ()); // Generate Template from gs2_cdk import Stack , core , version class SampleStack ( Stack ): def __init__ ( self ): super () . __init__ () version . Namespace ( stack = self , name = \"namespace-0001\" , assume_user_id = \"user-0001\" ) . master_data ( version_models = [ version . VersionModel ( name = 'app' , scope = version . VersionModelScope . PASSIVE , type = version . VersionModelType . SIMPLE , options = version . VersionModelOptions ( metadata = 'APP' , warning_version = version . Version ( major = 2 , minor = 2 , micro = 2 , ), error_version = version . Version ( major = 1 , minor = 1 , micro = 1 , ) ), ), version . VersionModel ( name = 'asset' , scope = version . VersionModelScope . PASSIVE , type = version . VersionModelType . SIMPLE , options = version . VersionModelOptions ( metadata = 'ASSET' , warning_version = version . Version ( major = 3 , minor = 3 , micro = 3 , ), error_version = version . Version ( major = 2 , minor = 2 , micro = 2 , ), need_signature = True , signature_key_id = 'grn:gs2:ap-northeast-1:YourOwnerId:key:namespace-0001:key:key-0001' ), ), version . VersionModel ( name = 'eula' , scope = version . VersionModelScope . ACTIVE , type = version . VersionModelType . SIMPLE , options = version . VersionModelOptions ( metadata = 'EULA' , current_version = version . Version ( major = 2 , minor = 2 , micro = 2 , ), warning_version = version . Version ( major = 4 , minor = 4 , micro = 4 , ), error_version = version . Version ( major = 3 , minor = 3 , micro = 3 , ) ), ), ], ) print ( SampleStack () . yaml ()) # Generate Template VersionModel 버전 모델 버전 모델에는 로그인은 허용하지만 버전 업그레이드가 가능함을 알리는 경고 버전과, 로그인을 허용하지 않는 에러 버전을 설정할 수 있습니다. 현재 버전을 클라이언트에 신고하도록 할 때, 서명 유무를 지정할 수 있습니다. 서명 있음을 선택한 경우, 클라이언트는 허위 버전을 신고할 수 없게 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 versionModelId string ※ ~ 1024자 버전 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scope 문자열 열거형 enum {   “passive”,   “active” }  판정에 사용할 버전 값의 종류 버전 체크에 사용할 버전 값을 얻는 방법을 결정합니다. “passive\"는 체크 시점에 클라이언트가 현재 버전을 신고하는 방식이며, “active\"는 사용자가 과거에 명시적으로 승인한 버전(이용약관 동의 등)을 사용하는 방식입니다. 정의 설명 passive 클라이언트에서 전송 active 과거 명시적으로 승인한 버전 type 문자열 열거형 enum {   “simple”,   “schedule” } “simple” 버전 체크 모드 버전 체크 방식을 선택합니다. “simple\"은 고정된 경고·에러 버전 임계값을 사용하며, “schedule\"은 GS2-Schedule의 이벤트를 이용하여 시기에 따라 다른 버전 임계값을 적용합니다. 정의 설명 simple 심플 schedule 시계열 전환 currentVersion Version {type} == “simple” and {scope} == “active” ※ 현재 버전 이 버전 모델의 최신 버전입니다. “simple” 모드의 “active” 스코프에서만 사용되며, 사용자가 버전 업데이트를 승인·확인할 때 현재 버전을 알립니다. ※ type이(가) “simple\"이고 scope이(가) “active” 이면 필수 warningVersion Version {type} == “simple” ※ 버전 업그레이드를 촉구하는 버전 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮은 경우에도 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 errorVersion Version {type} == “simple” ※ 버전 체크에서 에러로 판정되는 버전 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 scheduleVersions List {type} == “schedule” 0 ~ 10 items 시계열로 전환되는 버전 체크 내용 목록 GS2-Schedule의 이벤트를 기준으로 서로 다른 시점에 유효해지는 버전 체크 설정 목록입니다. 업데이트를 필수로 만들기 전에 경고를 표시하는 등 단계적인 버전 강제가 가능해집니다. ※ type이(가) “schedule” 이면 활성화 needSignature bool {scope} == “passive” ※ 판정할 버전 값에 서명 검증이 필요한지 여부 활성화하면 클라이언트는 버전 신고와 함께 암호 서명을 제공해야 합니다. 이를 통해 클라이언트가 버전 체크를 회피하기 위해 허위 버전을 신고하는 것을 방지합니다. 스코프가 “passive\"인 경우에만 적용됩니다. ※ scope이(가) “passive” 이면 필수 signatureKeyId string {needSignature} ※ ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ needSignature이(가) “true” 이면 필수 approveRequirement 문자열 열거형 enum {   “required”,   “optional” } {scope} == “active” “required” 승인 필요 여부 이 버전 모델에 대한 사용자 승인이 필수인지 임의인지를 제어합니다. “required\"인 경우, 사용자가 현재 버전을 승인하지 않으면 버전 체크가 실패합니다. “optional\"인 경우, 승인 상태와 관계없이 버전 체크가 통과합니다. 스코프가 “active\"인 경우에만 적용됩니다. 정의 설명 required 승인 필요 optional 임의 승인 ※ scope이(가) “active” 이면 활성화 Version 버전 3단계 계층(메이저, 마이너, 마이크로)으로 구성된 버전 번호를 나타냅니다. 버전 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. 버전 체크의 경고·에러 임계값 정의에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 major int  0 ~ 2147483646 메이저 버전 버전 비교에서 가장 우선순위가 높은 구성 요소입니다. 메이저 버전의 차이는 마이너 버전 및 마이크로 버전보다 우선합니다. minor int  0 ~ 2147483646 마이너 버전 버전 비교에서 두 번째로 우선순위가 높은 구성 요소입니다. 메이저 버전이 동일한 경우에만 비교됩니다. micro int  0 ~ 2147483646 마이크로 버전 버전 비교에서 가장 우선순위가 낮은 구성 요소입니다. 메이저 버전과 마이너 버전이 모두 동일한 경우에만 비교됩니다. ScheduleVersion 시계열로 전환되는 버전 GS2-Schedule의 이벤트로 제어되는 특정 기간 동안 유효해지는 버전 임계값(현재, 경고, 에러) 세트를 정의합니다. 여러 개의 스케줄 버전을 설정함으로써, 오래된 클라이언트를 차단하기 전에 사용자에게 경고하는 등 단계적인 버전 강제를 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 currentVersion Version  현재 버전 이 스케줄 기간 동안 사용 가능한 최신 버전입니다. “active” 스코프에서 사용자가 업데이트를 승인할 때 현재 버전을 알리는 데 사용됩니다. warningVersion Version  버전 업그레이드를 촉구하는 버전 이 스케줄 기간 동안 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. errorVersion Version  버전 체크에서 에러로 판정되는 버전 이 스케줄 기간 동안 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. scheduleEventId string ~ 1024자 버전 체크를 활성화하는 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버전 임계값 세트가 유효해지는 기간을 제어하는 GS2-Schedule의 이벤트를 지정합니다. 여기서 정의된 버전 체크 설정은 지정한 이벤트가 활성화되어 있는 기간에만 적용됩니다.","lang":"ko","section":"api_reference","summary":"GS2-Deploy의 스택을 생성할 때 사용하는 템플릿 포맷과, CDK를 이용한 각종 언어의 템플릿 출력 구현 예제\n","title":"GS2-Version Deploy/CDK 레퍼런스","url":"/ko/api_reference/version/deploy/"},{"content":"GS2의 Game Engine용 SDK(GS2 SDK for Unity, GS2 SDK for Unreal Engine, GS2 SDK for Godot 등)에는, 서버에서 취득한 데이터를 SDK 내부에 캐싱하는 메커니즘이 내장되어 있습니다. 이 캐시 메커니즘을 이해하면, API 호출 횟수를 줄여 게임의 응답성과 비용을 모두 개선할 수 있습니다. 캐시의 기본 동작 Domain 객체( gs2.Inventory.Namespace(...).Me(...).Inventory(...) 와 같은 접근)를 통해 데이터를 취득하면, 취득한 데이터는 SDK 내부의 캐시에 보관됩니다. 동일한 리소스에 대한 재취득은 서버에 문의하지 않고 캐시에서 반환됩니다. 따라서 UI 각 부분에서 필요한 값을 매번 서버에서 가져오지 않아도, Domain 객체를 통해 몇 번이든 안심하고 값을 참조할 수 있습니다. 캐시의 자동 갱신 서버 측에서 데이터가 갱신된 경우에는, SDK 측의 캐시도 자동으로 최신 상태를 따라갑니다. 구체적으로는 다음과 같은 시점에 반영됩니다. API 호출 응답에 포함된 리소스 정보를 받았을 때 WebSocket 연결을 통해 리소스 갱신 알림을 받았을 때 스탬프 시트 실행 결과로 반환된 리소스 정보를 받았을 때 예를 들어, Gs2-Showcase 에서 상품을 구매하면, 그 구매 처리로 인해 증가한 Gs2-Inventory 의 아이템 소지 수도, 구매 API 응답에 포함된 결과로부터 자동으로 SDK 내 캐시에 반영됩니다. UI 측에서 일부러 “아이템 목록을 다시 가져오는” 작업을 할 필요가 없습니다. 설계 지침 취득 API는 망설임 없이 호출한다 Domain 객체를 통한 ModelAsync / Model / Fetch 와 같은 취득 처리는, 최초 1회는 서버에 요청을 발행하고, 이후에는 캐시에서 값을 반환합니다. 따라서 UI를 갱신할 때마다 값을 읽으러 가는 구현으로 만들어도, 과도한 요청 비용이 발생하지 않습니다. // UI를 다시 그릴 때마다 호출해도, 최초 이후에는 SDK 내 캐시에서 반환됩니다 var item = await gs2.Inventory.Namespace(\"namespace-0001\") .Me(GameSession) .Inventory(\"inventory-0001\") .ItemSet(\"item-0001\") .ModelAsync(); 캐시 갱신을 능동적으로 수신한다 Domain 객체는 SDK 내 캐시가 갱신된 시점을 구독하기 위한 이벤트 메커니즘을 가지고 있습니다. UI 측에서 이벤트를 구독해 두면, 소지 수의 변동 등을 폴링 없이 반영할 수 있습니다. 자세한 내용은 각 Game Engine SDK의 레퍼런스를 참조해 주세요. 서버의 최신 상태를 보장하고 싶은 경우 저수준 API( Gs2*RestClient / Gs2*WebSocketClient 를 직접 호출하는 방식)는 캐시를 거치지 않고 반드시 서버로 요청을 보냅니다. 치트 대책을 위한 서버 재검증 등, 확실하게 서버 측의 최신 상태를 취득하고 싶은 경우에는 저수준 API를 이용해 주세요. 존 전환 시의 동작 GS2는 하나의 리전 안에 여러 존을 Active / Active로 구성하고 있습니다( 리전 참조). 존 사이에서는 데이터베이스 동기화에 약간의 지연이 발생하기 때문에, 존이 전환된 순간 “방금 기록했을 값을 읽어올 수 없는” 현상이 발생할 수 있습니다. SDK의 캐시 메커니즘은 이러한 순간적인 불일치가 있어도 UI가 오래된 값으로 고정되지 않도록, 최선의 노력으로 최신 상태를 따라가도록 설계되어 있습니다. 게임 개발자가 특별한 추가 구현을 하지 않아도, 새로운 존의 최신 값에 캐시가 맞춰집니다. 관련 항목 리전 비용 최적화","lang":"ko","section":"articles","summary":"GS2 SDK가 내부에 보유하는 캐시의 구조와, 이를 활용하기 위한 설계 지침\n","title":"SDK의 캐시 메커니즘","url":"/ko/articles/tech/cache/"},{"content":"검증을 진행함에 있어 오늘날 대다수의 서버 시스템은 몇 가지 과제를 안고 있습니다. 검증 항목에 대응하는 환경 구축 시간에 관한 검증 서버 부하에 관한 검증 검증 항목에 대응하는 환경 구축 검증에 사용하는 인프라는 직접적인 이익을 창출하지 않습니다. 그렇기 때문에 환경을 유지하는 비용은 문제시되기 쉽습니다. 그 결과 빈약한 검증 환경이 만들어지고, 이것이 비효율적인 업무를 낳는 경우가 있습니다. GS2는 pay-as-you-go 방식의 과금 형태를 채택하여, 환경을 늘려도 접근하지 않으면 비용이 발생하지 않습니다. 게다가 환경을 구축하는 것도 GS2-Deploy를 이용하면 곧바로 준비가 완료됩니다. 이러한 특성 덕분에 검증 항목에 맞춰 환경을 손쉽게 늘리거나 줄일 수 있게 됩니다. 구체적으로는 다음과 같은 검증을 하고 싶을 때, 기존의 개발 방식에서는 순차적으로 검증 업무를 진행해야 했지만 GS2에서는 병렬로 업무를 진행할 수 있습니다. 하루 1회 퀘스트에 도전할 수 있는 횟수 제한이 올바르게 동작하는지 확인 퀘스트의 드롭 보상 내용이 적절한지 확인 위의 예시는 “퀘스트에 도전할 수 있는 횟수에 제한이 있어 드롭 보상 내용을 확인하기 어려워진다\"는 상황입니다. 이런 경우 횟수 제한을 없앤 버전을 별도의 환경에 준비하여, 그곳에서 드롭 보상 내용을 검증하게 할 수 있습니다. 별도의 환경을 준비하는 비용이 높으면 이러한 판단을 내릴 수 없어, 한쪽을 확인한 후에야 다른 한쪽을 확인하게 되어 검증에 걸리는 시간이 늘어납니다. 시간에 관한 검증 특정 시각이 되면 이벤트가 시작되는 것을 검증하는 것도 어려운 과제 중 하나입니다. 시간에 관한 처리는 오류를 발견하기 어려우며, 가능하면 검증 환경에서 이벤트 기간을 앞당기는 등의 조치 없이 프로덕션 환경에 적용할 GS2-Deploy 템플릿을 공통화하고 싶을 것입니다. GS2는 시간에 관한 처리에 대해 시각 오프셋을 지정하여 이용할 수 있는 구조를 제공합니다. 시각 오프셋 지정은 GS2-Account를 이용하는 경우에는 계정 단위로 서로 다른 오프셋을 지정할 수 있으며, GS2-Auth를 사용하여 액세스 토큰을 발급하는 경우에는 액세스 토큰을 발급할 때의 파라미터로 오프셋을 지정할 수 있습니다. 이 기능을 이용하면 2주 후에 개최되는 이벤트의 QA를 진행할 때, +2주의 오프셋을 부여한 계정 또는 액세스 토큰으로 검증함으로써 GS2-Schedule의 이벤트 개최 기간을 변경하지 않고도 검증을 수행할 수 있습니다. 서버 부하에 관한 검증 게임 플레이어를 서버에 맞이하기 전에, 대량의 플레이어가 접속하더라도 문제없이 서비스를 제공할 수 있는지 서버 부하에 관한 검증이 필요합니다. 많은 게임은 과거 실적이 없는 서버 시스템이기 때문에 이 검증은 신중하게 수행해야 할 것입니다. 그러나 GS2는 다수의 게임을 호스팅하고 있으며, GS2의 아키텍처는 초당 10만 건이 넘는 API 요청을 처리할 수 있음이 검증되어 있습니다. 따라서 GS2 이용자는 서버 부하에 대해 걱정할 필요가 없습니다. 그럼에도 아무래도 걱정되는 경우에는 부하 테스트 보고서를 GS2에 유상으로 의뢰할 수 있습니다. 그 방법 또한 매우 간단합니다. 일반적인 게임 플레이어가 하는 것과 동등한 플레이를, 가능하면 10명 이상이 1시간 정도 플레이합니다. 그 플레이를 진행할 때 사용한 GS2 계정ID와 프로젝트 이름, 시간대, 그리고 예상되는 CCU를 GS2에 공유합니다. GS2는 그 접근 이력으로부터 테스트 시나리오를 작성하고, CCU에 상응하도록 접근 수를 증폭시켜 테스트를 실시한 후 보고서를 작성합니다. 지금까지 부하 테스트를 해본 적이 있는 분이라면 이것이 얼마나 간단한 과정인지 이해할 수 있을 것입니다.","lang":"ko","section":"overview","summary":"GS2를 활용한 게임 검증 방법에 대하여\n","title":"검증","url":"/ko/overview/workflow/qa/"},{"content":"여기서는 GS2 SDK를 사용하여 계정 생성과 로그인을 수행하는 최소한의 구현 방법을 설명합니다. 각 플랫폼별 전체 코드는 샘플 코드 전문 을 확인해 주세요. Unity에서의 구현에 대해 Unity SDK에서는 비동기 처리에 Coroutine을 사용합니다. 아래 코드 예시는 Coroutine 내부( IEnumerator 를 반환하는 메서드 내부)에서 실행하는 것을 상정하고 있습니다. GS2 SDK 초기화 Game Engine: Unity Unreal Engine Godot // Setup variables var clientId = \"YourClientId\" ; var clientSecret = \"YourClientSecret\" ; var accountNamespaceName = \"game-0001\" ; // Setup general setting Gs2Domain gs2 ; { var future = Gs2Client . CreateFuture ( new BasicGs2Credential ( clientId , clientSecret ), Region . ApNortheast1 ); yield return future ; if ( future . Error != null ) { throw future . Error ; } gs2 = future . Result ; } // Setup variables const auto ClientId = \"YourClientId\" ; const auto ClientSecret = \"YourClientSecret\" ; const auto AccountNamespaceName = \"game-0001\" ; // Create GS2 client const auto InitializeFuture = Gs2 :: UE5 :: Core :: FGs2Client :: Create ( MakeShared Gs2 :: Core :: Model :: FBasicGs2Credential \u003e ( ClientId , ClientSecret ), Gs2 :: Core :: Model :: ApNorthEast1 ); InitializeFuture -\u003e StartSynchronousTask (); if ( InitializeFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( InitializeFuture -\u003e GetTask (). Error () -\u003e String ())); return InitializeFuture -\u003e GetTask (). Error (); } const auto Gs2 = InitializeFuture -\u003e GetTask (). Result (); # Setup variables var client_id = \"YourClientId\" var client_secret = \"YourClientSecret\" var account_namespace_name = \"game-0001\" var account_encryption_key_id = \"grn:gs2: {region}:{ownerId} :key:account-encryption-key-namespace:key:account-encryption-key\" # Initialize GS2 SDK var credential = Gs2BasicCredential . new ( client_id , client_secret ) var connection = Gs2Connection . new ( credential , Gs2Region . AP_NORTHEAST_1 ) var ez = Gs2EzDomain . new ( connection ) Setup variables 먼저 4개의 변수를 정의하고 있습니다. 변수 이름 용도 취득처 clientId GS2에 접근하기 위한 인증 정보 크리덴셜(API 키) 생성 에서 생성한 값 clientSecret GS2에 접근하기 위한 인증 정보 크리덴셜(API 키) 생성 에서 생성한 값 accountNamespaceName 이용할 GS2-Account의 네임스페이스 이름 로그인 처리에 필요한 리소스 준비 에서 생성한 값 accountEncryptionKeyId 계정 인증에 사용하는 암호 키의 GRN 로그인 처리에 필요한 리소스 준비 에서 생성한 스택의 KeyAccountAuthenticationKeyId 출력 값 Setup general setting Gs2Client.CreateFuture(UniTask 사용 시 Gs2Client.CreateAsync)로 GS2 클라이언트를 생성합니다. clientId 나 clientSecret 이 올바르지 않은 경우 여기서 오류가 반환됩니다. Godot에서는 Gs2Connection 을 생성하고, 게임 엔진용 Ez 레이어를 이용하기 위해 Gs2EzDomain 을 초기화합니다. 각 서비스는 ez.account 나 ez.inventory 와 같은 서비스 프로퍼티를 통해 접근합니다. 익명 계정 신규 생성 Game Engine: Unity Unreal Engine Godot // define GS2-Account namespace var gs2Account = gs2 . Account . Namespace ( accountNamespaceName ); // Create an anonymous account EzAccount account ; { Debug . Log ( \"Create an anonymous account\" ); var future = gs2Account . CreateFuture (); yield return future ; if ( future . Error != null ) { throw future . Error ; } var future2 = future . Result . ModelFuture (); yield return future2 ; if ( future2 . Error != null ) { throw future2 . Error ; } account = future2 . Result ; } // Create an anonymous account UE_LOG ( GameLog , Display , TEXT ( \"Create anonymous account\" )); const auto CreateFuture = Gs2 -\u003e Account -\u003e Namespace ( AccountNamespaceName ) -\u003e Create (); CreateFuture -\u003e StartSynchronousTask (); if ( CreateFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( CreateFuture -\u003e GetTask (). Error () -\u003e String ())); return CreateFuture -\u003e GetTask (). Error (); } // Load created account const auto LoadFuture = CreateFuture -\u003e GetTask (). Result () -\u003e Model (); LoadFuture -\u003e StartSynchronousTask (); if ( LoadFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( LoadFuture -\u003e GetTask (). Error () -\u003e String ())); return LoadFuture -\u003e GetTask (). Error (); } const auto Account = LoadFuture -\u003e GetTask (). Result (); // Dump anonymous account UE_LOG ( GameLog , Display , TEXT ( \"UserId: %s\" ), ToCStr ( * Account -\u003e GetUserId ())); UE_LOG ( GameLog , Display , TEXT ( \"Password: %s\" ), ToCStr ( * Account -\u003e GetPassword ())); # Define the GS2-Account namespace var gs2_account = ez . account . namespace_ ( account_namespace_name ) # Create an anonymous account var create_result = await gs2_account . create () if create_result . error != null : push_error ( str ( create_result . error )) return var model_result = await create_result . result . model () if model_result . error != null : push_error ( str ( model_result . error )) return var account = model_result . result print ( \"UserId: \" , account . user_id ) print ( \"Password: \" , account . password ) 여기서는 게임 플레이어를 식별하기 위한 계정 생성을 하고 있습니다. accountNamespaceName에는 계정을 추가할 네임스페이스 이름을 지정합니다. 또한 이 샘플에서는 실행할 때마다 신규 계정으로 로그인하는 동작으로 되어 있지만, 일반적으로 계정 생성은 애플리케이션의 최초 실행 시에만 수행합니다. 실제 애플리케이션에서는 이 응답의 계정 정보를 로컬 스토리지 등에 저장하고, 두 번째 실행부터는 로컬 스토리지 등에서 취득한 생성된 계정 정보로 기존 게임 플레이어로서 로그인을 수행합니다. 로그인 처리 Game Engine: Unity Unreal Engine Godot // Log-in created anonymous account GameSession gameSession ; { var future = gs2 . LoginFuture ( new Gs2AccountAuthenticator ( accountSetting : new AccountSetting { accountNamespaceName = accountNamespaceName , } ), account . UserId , account . Password ); yield return future ; if ( future . Error != null ) { throw future . Error ; } gameSession = future . Result ; } // Log-in created anonymous account const auto LoginFuture = Gs2 -\u003e Login ( MakeShareable Gs2 :: UE5 :: Util :: IAuthenticator \u003e ( new Gs2 :: UE5 :: Util :: FGs2AccountAuthenticator ( MakeShared Gs2 :: UE5 :: Util :: FAccountSetting \u003e ( AccountNamespaceName ) ) ), * Account -\u003e GetUserId (), * Account -\u003e GetPassword () ); LoginFuture -\u003e StartSynchronousTask (); if ( LoginFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( LoginFuture -\u003e GetTask (). Error () -\u003e String ())); return LoginFuture -\u003e GetTask (). Error (); } const auto GameSession = LoginFuture -\u003e GetTask (). Result (); # Log in with the created anonymous account var authenticator = Gs2AccountAuthenticator . new ( account_namespace_name , account_encryption_key_id ) var game_session = Gs2GameSession . new ( authenticator , connection , account . user_id , account . password ) var login_result = await game_session . login () if login_result . error != null : push_error ( str ( login_result . error )) return 이어서 GS2에 로그인하는 처리입니다. Gs2AccountAuthenticator에 계정 인증에 관한 정보를 지정합니다. 구체적으로는 로그인에 사용할 GS2-Account의 네임스페이스 이름을 지정하고 있습니다. Godot에서는 이와 함께 계정 인증에 사용하는 암호 키의 GRN을 지정합니다. 또한 userId, password에는 생성한 계정의 사용자ID와 비밀번호를 지정합니다. 결과적으로 GameSession 객체가 반환됩니다. 이후 GS2의 API를 호출할 때 로그인 상태가 아니면 호출할 수 없는 API의 인수에는 GameSession을 전달하여 사용하게 됩니다. 로그인 후 호출 가능한 API 호출 Game Engine: Unity Unreal Engine Godot // Load TakeOver settings { var it = gs2Account . Me ( gameSession ). TakeOvers (); while ( it . HasNext ()) { yield return it . Next (); if ( it . Error != null ) { throw it . Error ; } if ( it . Current != null ) { Debug . Log ( $\"Type: {it.Current.Type}\" ); Debug . Log ( $\"Identifier: {it.Current.UserIdentifier}\" ); } } } // Load TakeOver settings const auto It = Gs2 -\u003e Account -\u003e Namespace ( AccountNamespaceName ) -\u003e Me ( GameSession ) -\u003e TakeOvers (); for ( const auto TakeOver : * It ) { UE_LOG ( GameLog , Display , TEXT ( \"Type: %s\" ), * TakeOver -\u003e GetType ()); UE_LOG ( GameLog , Display , TEXT ( \"Identifier: %s\" ), * TakeOver -\u003e GetUserIdentifier ()); } # Load TakeOver settings var load_result = await gs2_account . me ( game_session ) . take_overs () . load () if load_result . error != null : push_error ( str ( load_result . error )) return for take_over in load_result . result : print ( \"Type: \" , take_over . type ) print ( \"Identifier: \" , take_over . user_identifier ) 로그인 상태가 아니면 사용할 수 없는 API의 예시로, 인계 설정 목록을 취득하는 API를 호출하고 있습니다. GameSession을 전달하여 로그인 중인 게임 플레이어에게 설정된 인계 설정 목록을 취득할 수 있습니다. GS2 SDK 종료 처리 Game Engine: Unity Unreal Engine Godot // Finalize GS2-SDK { var future = gs2 . DisconnectFuture (); yield return future ; if ( future . Error != null ) { throw future . Error ; } } // Finalize GS2-SDK const auto FinalizeFuture = Gs2 -\u003e Disconnect (); FinalizeFuture -\u003e StartSynchronousTask (); if ( FinalizeFuture -\u003e GetTask (). IsError ()) { UE_LOG ( GameLog , Error , TEXT ( \"%s\" ), ToCStr ( FinalizeFuture -\u003e GetTask (). Error () -\u003e String ())); return FinalizeFuture -\u003e GetTask (). Error (); } # Finalize GS2 SDK connection . disconnect_session () GS2와의 연결을 종료합니다. 튜토리얼을 마치셨나요? GS2 사용법에 대해 안내하는 YouTube 채널을 확인해 보세요! 보다 실전적인 샘플도 제공하고 있습니다. GS2를 사용하면 그 밖에 어떤 것을 구현할 수 있는지 알아봅시다 GS2를 사용한 개발 워크플로우에 대해 배워봅시다","lang":"ko","section":"get_start","summary":"계정 발급부터 로그인까지 구현해 봅시다\n","title":"구현","url":"/ko/get_start/tutorial/coding/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2024-07-30\" , \"takeOverTypeModels\" : [ { \"type\" : \"[int]슬롯 번호\" , \"metadata\" : \"[string?]메타데이터\" , \"openIdConnectSetting\" : { \"configurationPath\" : \"[string]OpenID Connect 설정 URL\" , \"clientId\" : \"[string]클라이언트 ID\" , \"clientSecret\" : \"[string]클라이언트 시크릿\" , \"appleTeamId\" : \"[string]Apple Developer 팀 ID\" , \"appleKeyId\" : \"[string]Apple에 등록된 키 ID\" , \"applePrivateKeyPem\" : \"[string]Apple로부터 받은 비밀 키\" , \"doneEndpointUrl\" : \"[string?]인증 완료 시 이동하는 URL\" , \"additionalScopeValues\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string?]값\" } ], \"additionalReturnValues\" : [ \"[string]OpenID Connect에서 획득하는 추가 반환값\" ] } } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2024-07-30 마스터 데이터 포맷 버전 takeOverTypeModels List ~ 1000 items 인계 정보 타입 모델 인계 정보를 정의하는 모델입니다. 인계 정보란 디바이스 기종 변경이나 플랫폼 간 계정 이동·공유 시에 사용하는 정보입니다. 개인을 식별하는 고유한 문자열과 비밀번호로 구성되며, 그 올바른 조합을 입력함으로써 Account(익명 계정)를 취득할 수 있습니다. 하나의 Account에 대해 여러 개의 인계 정보를 설정할 수 있습니다. 여러 개의 인계 정보를 설정하려면 각각 다른 슬롯을 지정해야 합니다. 슬롯은 0~1024를 지정할 수 있으므로 최대 1,025종류의 인계 정보를 설정할 수 있습니다. 구체적인 예로는 0에는 Sign in with Apple의 계정 정보를, 1에는 Google 계정 정보를 저장하는 등의 방식이 상정되어 있습니다. 어디까지나 이 인계 정보는 데이터 홀더이며, 소셜 계정과의 인증 메커니즘은 별도로 준비해야 합니다. 모델 TakeOverTypeModel 인계 정보 타입 모델 인계 정보를 정의하는 모델입니다. 인계 정보란 디바이스 기종 변경이나 플랫폼 간 계정 이동·공유 시에 사용하는 정보입니다. 개인을 식별하는 고유한 문자열과 비밀번호로 구성되며, 그 올바른 조합을 입력함으로써 Account(익명 계정)를 취득할 수 있습니다. 하나의 Account에 대해 여러 개의 인계 정보를 설정할 수 있습니다. 여러 개의 인계 정보를 설정하려면 각각 다른 슬롯을 지정해야 합니다. 슬롯은 0~1024를 지정할 수 있으므로 최대 1,025종류의 인계 정보를 설정할 수 있습니다. 구체적인 예로는 0에는 Sign in with Apple의 계정 정보를, 1에는 Google 계정 정보를 저장하는 등의 방식이 상정되어 있습니다. 어디까지나 이 인계 정보는 데이터 홀더이며, 소셜 계정과의 인증 메커니즘은 별도로 준비해야 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 takeOverTypeModelId string ※ ~ 1024자 인계 정보 타입 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 type int  0 ~ 1024 슬롯 번호 0부터 1024까지의 범위로 지정되며, 서로 다른 인계 정보를 구분합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. openIdConnectSetting OpenIdConnectSetting  OpenID Connect 설정 OpenID Connect 준수 Identity Provider(IdP)와 연동하기 위한 설정입니다. 디스커버리 URL, 클라이언트 인증 정보, Apple Sign In 파라미터 등 플랫폼별 설정이 포함됩니다. OpenIdConnectSetting OpenID Connect 설정 OpenID Connect 준수 IdP의 설정을 등록함으로써 계정의 인계 정보로 IdP 연동을 이용할 수 있게 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 configurationPath string  ~ 1024자 OpenID Connect 설정 URL OpenID Connect 제공자의 디스커버리 엔드포인트 URL입니다. well-known 형식(예: https://example.com/.well-known/openid-configuration)을 따라야 합니다. clientId string  ~ 1024자 클라이언트 ID IdP에 등록된 애플리케이션의 클라이언트 ID입니다. clientSecret string {configurationPath} != “https://appleid.apple.com/.well-known/openid-configuration” ※ ~ 1024자 클라이언트 시크릿 ※ configurationPath가 “https://appleid.apple.com/.well-known/openid-configuration” 이외의 다른 IdP 연동인 경우 필수 appleTeamId string {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” ※ ~ 1024자 Apple Developer 팀 ID Apple Developer 계정의 팀 ID입니다. Sign in with Apple 인증에 필요합니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 appleKeyId string {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” ※ ~ 1024자 Apple에 등록된 키 ID Sign in with Apple용으로 Apple Developer 계정에 등록된 키 ID입니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 applePrivateKeyPem string {configurationPath} == “https://appleid.apple.com/.well-known/openid-configuration” ※ ~ 10240자 Apple로부터 받은 비밀 키 Apple Developer 포털에서 다운로드한 PEM 형식의 비밀 키입니다. Sign in with Apple 인증에 필요합니다. ※ configurationPath이(가) “https://appleid.apple.com/.well-known/openid-configuration” 이면 필수 doneEndpointUrl string ~ 1024자 인증 완료 시 이동하는 URL 지정하지 않으면 /authorization/done으로 이동합니다. 쿼리 스트링에 id_token이 부여됩니다. additionalScopeValues List [] 0 ~ 10 items OpenID Connect에서 획득하는 추가 스코프 기본 OpenID Connect 스코프 외에 IdP에 요청하는 추가 OAuth 스코프입니다. 인증 시 추가 사용자 정보를 취득할 수 있습니다. additionalReturnValues List [] 0 ~ 10 items OpenID Connect에서 획득하는 추가 반환값 ID 토큰 또는 UserInfo 응답에서 반환값에 포함할 추가 클레임 이름입니다. 지정된 클레임이 추출되어 표준 인증 결과와 함께 반환됩니다. ScopeValue 스코프 값 OpenID Connect 인증 시 취득되는 추가 OAuth 스코프 값을 나타내는 키-값 쌍입니다. 표준 OpenID Connect 클레임 외에 IdP로부터 취득한 추가 데이터를 저장하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 key string  ~ 64자 이름 인증 시 IdP에 요청한 스코프 이름입니다. value string ~ 51200자 값 해당 스코프에 대해 IdP로부터 반환된 값입니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Account 마스터 데이터 레퍼런스","url":"/ko/api_reference/account/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2024-04-15\" , \"buffEntryModels\" : [ { \"name\" : \"[string]버프 엔트리 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"expression\" : \"[문자열 열거형]버프의 적용 타입\" , \"targetType\" : \"[문자열 열거형]버프를 적용할 대상의 종류\" , \"targetModel\" : { \"targetModelName\" : \"[string]버프를 적용할 모델의 종류\" , \"targetFieldName\" : \"[string]버프 적용 대상 필드명\" , \"conditionGrns\" : [ { \"targetModelName\" : \"[string]버프 적용 조건의 모델 이름\" , \"targetGrn\" : \"[string]버프의 적용 조건 GRN\" } ], \"rate\" : \"[float]보정 레이트\" }, \"targetAction\" : { \"targetActionName\" : \"[string]버프를 적용할 액션의 종류\" , \"targetFieldName\" : \"[string]버프 적용 대상 필드명\" , \"conditionGrns\" : [ { \"targetModelName\" : \"[string]버프 적용 조건의 모델 이름\" , \"targetGrn\" : \"[string]버프의 적용 조건 GRN\" } ], \"rate\" : \"[float]보정 레이트\" }, \"priority\" : \"[int]버프의 적용 우선순위\" , \"applyPeriodScheduleEventId\" : \"[string?]버프를 적용할 이벤트의 개최 기간 GRN\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2024-04-15 마스터 데이터 포맷 버전 buffEntryModels List ~ 100 items 버프 엔트리 모델 버프의 적용량은 버프 엔트리 모델로 관리하며, 동일한 대상에 대해 여러 버프 엔트리 모델을 연결할 수 있습니다. 버프 엔트리 모델의 적용 순서는 버프 엔트리 모델의 priority 로 관리하며, priority 값이 작을수록 우선순위가 높아집니다. 버프의 적용 방식은 3종류가 있으며 “Rate Add”, “Mul”, “Value Add\"가 있습니다. Rate Add 는 버프의 적용 레이트에 가산하는 명령이며, Mul 은 버프의 적용 레이트에 곱하는 명령입니다. Value Add 는 버프 보정 계산 후의 값에 가산을 수행하는 명령입니다. 예를 들어 기본 레이트가 1.0 이고 Rate Add 0.2 를 설정하면 버프 적용 레이트는 1.2 가 됩니다. Mul 0.5 를 설정하면 버프 적용 레이트는 현재 레이트의 0.5배가 됩니다. 버프 엔트리 모델에는 GS2-Schedule 의 이벤트를 연결할 수 있으며, 이벤트 개최 기간 중에만 버프를 적용하도록 설정하는 것도 가능합니다. 모델 BuffEntryModel 버프 엔트리 모델 버프의 적용량은 버프 엔트리 모델로 관리하며, 동일한 대상에 대해 여러 버프 엔트리 모델을 연결할 수 있습니다. 버프 엔트리 모델의 적용 순서는 버프 엔트리 모델의 priority 로 관리하며, priority 값이 작을수록 우선순위가 높아집니다. 버프의 적용 방식은 3종류가 있으며 “Rate Add”, “Mul”, “Value Add\"가 있습니다. Rate Add 는 버프의 적용 레이트에 가산하는 명령이며, Mul 은 버프의 적용 레이트에 곱하는 명령입니다. Value Add 는 버프 보정 계산 후의 값에 가산을 수행하는 명령입니다. 예를 들어 기본 레이트가 1.0 이고 Rate Add 0.2 를 설정하면 버프 적용 레이트는 1.2 가 됩니다. Mul 0.5 를 설정하면 버프 적용 레이트는 현재 레이트의 0.5배가 됩니다. 버프 엔트리 모델에는 GS2-Schedule 의 이벤트를 연결할 수 있으며, 이벤트 개최 기간 중에만 버프를 적용하도록 설정하는 것도 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 buffEntryModelId string ※ ~ 1024자 버프 엔트리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 버프 엔트리 모델 이름 버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. expression 문자열 열거형 enum {   “rate_add”,   “mul”,   “value_add” }  버프의 적용 타입 버프 값을 대상에 어떻게 적용할지를 지정합니다. “Rate Add\"는 보정 레이트에 가산(예: 1.0 + 0.2 = 1.2), “Mul\"은 보정 레이트에 곱함(예: 레이트 * 0.5), “Value Add\"는 레이트 기반 보정 계산 후의 값에 직접 가산합니다. 정의 설명 rate_add 보정 레이트에 가산 mul 보정 레이트에 곱함 value_add 값을 직접 가산(모델이나 액션의 숫자 값만) targetType 문자열 열거형 enum {   “model”,   “action” }  버프를 적용할 대상의 종류 버프를 모델의 필드 값에 적용할지, 액션의 파라미터에 적용할지를 지정합니다. “Model\"은 GS2 리소스 모델의 필드를 대상으로 하며, “Action\"은 GS2 액션(예: 획득량이나 소비량)의 파라미터를 대상으로 합니다. 정의 설명 model 모델 action 액션 targetModel BuffTargetModel {targetType} == “model” ※ 버프를 적용할 대상 모델 버프를 적용할 GS2 리소스 모델과 필드를 지정합니다. 모델 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “model” 이면 필수 targetAction BuffTargetAction {targetType} == “action” ※ 버프를 적용할 대상 액션 버프를 적용할 GS2 액션과 파라미터를 지정합니다. 액션 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다. ※ targetType이(가) “action” 이면 필수 priority int  0 ~ 2147483646 버프의 적용 우선순위 버프 엔트리 모델이 평가되는 순서를 결정합니다. 값이 작을수록 먼저 평가됩니다. 동일한 필드를 대상으로 하는 여러 버프가 있는 경우, Rate Add 와 Mul 연산의 상호작용으로 인해 적용 순서가 최종 결과에 영향을 미칩니다. applyPeriodScheduleEventId string ~ 1024자 버프를 적용할 이벤트의 개최 기간 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버프의 유효 기간을 제어하는 GS2-Schedule 이벤트의 GRN입니다. 지정한 경우, 이벤트 개최 기간 중에만 버프가 적용됩니다. 지정하지 않은 경우, 버프는 항상 유효합니다. BuffTargetModel 버프 적용 대상 모델 버프 적용의 대상이 되는 GS2 리소스 모델과 필드를 정의합니다. 어떤 모델의 어떤 필드 값을 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetModelName 문자열 열거형 enum { }  버프를 적용할 모델의 종류 targetFieldName string  ~ 64자 버프 적용 대상 필드명 버프에 의해 값이 변경되는 대상 모델 상의 수치 필드명입니다. 예를 들어 경험치나 공격력 등의 수치 속성을 나타내는 필드가 대상이 됩니다. conditionGrns List  1 ~ 10 items 버프 적용 조건 GRN 목록 버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다. rate float  0 ~ 1000000 보정 레이트 적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add\"의 경우 기본 레이트에 가산, “Mul\"의 경우 현재 레이트에 곱셈, “Value Add\"의 경우 레이트 계산 후의 필드 값에 직접 가산됩니다. BuffTargetAction 버프 적용 대상 액션 버프 적용의 대상이 되는 GS2 액션과 파라미터를 정의합니다. 어떤 액션의 어떤 파라미터를 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetActionName 문자열 열거형 enum { \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SubExperience\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:ConsumeItemSet\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeSimpleItems\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:ConsumeBigItem\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2Limit:CountUp\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:Withdraw\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Money2:Withdraw\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Stamina:ConsumeStamina\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , }  버프를 적용할 액션의 종류 targetFieldName string  ~ 64자 버프 적용 대상 필드명 버프에 의해 값이 변경되는 대상 액션 상의 수치 파라미터명입니다. 예를 들어 입수 수량, 소비량, 보상 수량 등을 나타내는 파라미터가 대상이 됩니다. conditionGrns List  1 ~ 10 items 버프 적용 조건 GRN 목록 버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다. rate float  0 ~ 1000000 보정 레이트 적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add\"의 경우 기본 레이트에 가산, “Mul\"의 경우 현재 레이트에 곱셈, “Value Add\"의 경우 레이트 계산 후의 파라미터 값에 직접 가산됩니다. BuffTargetGrn 버프 적용 조건이 되는 리소스의 GRN 패턴 버프가 유효해지는 리소스 인스턴스를 좁히기 위한 조건 GRN 패턴입니다. targetModelName 으로 GS2 서비스 모델의 종류를 특정하며, targetGrn 에는 런타임에 해결되는 컨텍스트 변수({region}, {ownerId})를 포함할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 targetModelName string  ~ 64자 버프 적용 조건의 모델 이름 조건 GRN을 해결하기 위해 사용되는 GS2 서비스 모델의 이름입니다. GRN 패턴이 어느 서비스의 리소스 모델을 참조하는지를 특정합니다. targetGrn string  ~ 1024자 버프의 적용 조건 GRN 런타임에 해결되는 컨텍스트 플레이스홀더(예: {region}, {ownerId})를 포함한 GRN 템플릿입니다. 버프의 대상이 되는 특정 리소스 인스턴스를 특정하기 위해 사용됩니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Buff 마스터 데이터 레퍼런스","url":"/ko/api_reference/buff/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2020-04-30\" , \"categoryModels\" : [ { \"category\" : \"[int]카테고리\" , \"rejectAccessTokenPost\" : \"[문자열 열거형?]플레이어의 액세스 토큰을 이용한 게시를 거부한다\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2020-04-30 마스터 데이터 포맷 버전 categoryModels List ~ 1000 items 메시지 카테고리 모델 메시지 카테고리 모델은 채팅 룸에 게시되는 메시지를 분류하기 위한 카테고리를 정의합니다. 각 카테고리는 숫자로 식별되며, 카테고리별로 플레이어의 액세스 토큰을 사용한 게시를 허용할지 거부할지 설정할 수 있습니다. 이를 통해 서버만 게시할 수 있는 시스템 안내 카테고리 등의 사용 사례를 구현할 수 있습니다. 모델 CategoryModel 메시지 카테고리 모델 메시지 카테고리 모델은 채팅 룸에 게시되는 메시지를 분류하기 위한 카테고리를 정의합니다. 각 카테고리는 숫자로 식별되며, 카테고리별로 플레이어의 액세스 토큰을 사용한 게시를 허용할지 거부할지 설정할 수 있습니다. 이를 통해 서버만 게시할 수 있는 시스템 안내 카테고리 등의 사용 사례를 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 메시지 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 category int  0 ~ 2147483645 카테고리 메시지 카테고리의 숫자 식별자입니다. 이 카테고리 번호로 게시된 메시지는, 플레이어의 게시를 허용할지 여부 등 이 모델에서 정의된 규칙을 따릅니다. rejectAccessTokenPost 문자열 열거형 enum {   “Enabled”,   “Disabled” } 플레이어의 액세스 토큰을 이용한 게시를 거부한다 활성화하면, 이 카테고리에서는 서버 사이드 API 호출(사용자 ID 지정)만으로 메시지를 게시할 수 있습니다. 플레이어가 직접 게시해서는 안 되는 시스템 안내나 서버 생성 메시지에 유용합니다. 정의 설명 Enabled 액세스 토큰을 이용한 게시를 거부한다 Disabled 액세스 토큰을 이용한 게시를 허용한다","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Chat 마스터 데이터 레퍼런스","url":"/ko/api_reference/chat/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2020-04-30\" , \"entryModels\" : [ { \"name\" : \"[string]엔트리 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2020-04-30 마스터 데이터 포맷 버전 entryModels List ~ 10000 items 엔트리 모델 엔트리 모델은 GS2-Dictionary에서 도감에 기록 가능한 대상을 정의하는 마스터 데이터입니다. 각 엔트리 모델은 몬스터, 아이템, 아바타 파츠 등 도감에 기록되는 엔티티의 종류를 나타냅니다. 엔트리의 보유 상태는 ‘기록됨 / 미기록’의 2가지 값으로 관리되며, 동일한 엔트리 모델에 대해 수량이나 스택의 개념은 없습니다. 모델 EntryModel 엔트리 모델 엔트리 모델은 GS2-Dictionary에서 도감에 기록 가능한 대상을 정의하는 마스터 데이터입니다. 각 엔트리 모델은 몬스터, 아이템, 아바타 파츠 등 도감에 기록되는 엔티티의 종류를 나타냅니다. 엔트리의 보유 상태는 ‘기록됨 / 미기록’의 2가지 값으로 관리되며, 동일한 엔트리 모델에 대해 수량이나 스택의 개념은 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 entryModelId string ※ ~ 1024자 엔트리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 엔트리 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Dictionary 마스터 데이터 레퍼런스","url":"/ko/api_reference/dictionary/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-03-01\" , \"distributorModels\" : [ { \"name\" : \"[string]배포 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"inboxNamespaceId\" : \"[string?]넘친 리소스를 전송할 GS2-Inbox 네임스페이스 GRN\" , \"whiteListTargetIds\" : [ \"[string]GS2-Distributor를 통해 처리할 수 있는 대상 리소스 GRN 프리픽스\" ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-03-01 마스터 데이터 포맷 버전 distributorModels List ~ 100 items 배포 모델 배포 모델이란 리소스 입수 시 소지 한도를 초과하여 입수했을 때의 정책을 설정하는 엔티티입니다. GS2-Distributor를 통해 입수 처리를 수행함으로써, 넘친 리소스를 GS2-Inbox의 메시지로 전송할 수 있습니다. 모델 DistributorModel 배포 모델 배포 모델이란 리소스 입수 시 소지 한도를 초과하여 입수했을 때의 정책을 설정하는 엔티티입니다. GS2-Distributor를 통해 입수 처리를 수행함으로써, 넘친 리소스를 GS2-Inbox의 메시지로 전송할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 distributorModelId string ※ ~ 1024자 배포 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 배포 모델 이름 배포 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. inboxNamespaceId string ~ 1024자 넘친 리소스를 전송할 GS2-Inbox 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 리소스 입수가 플레이어의 소지 한도를 초과한 경우, 넘친 리소스는 지정된 GS2-Inbox 네임스페이스에 메시지로 전송됩니다. 플레이어는 이후 수신함에서 리소스를 수령할 수 있습니다. whiteListTargetIds List [] 0 ~ 1000 items GS2-Distributor를 통해 처리할 수 있는 대상 리소스 GRN의 화이트리스트 이 배포 모델을 사용하여 입수 처리를 수행할 수 있는 대상 리소스의 GRN 프리픽스를 지정합니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Distributor 마스터 데이터 레퍼런스","url":"/ko/api_reference/distributor/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2023-07-18\" , \"balanceParameterModels\" : [ { \"name\" : \"[string]밸런스 파라미터 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"totalValue\" : \"[long]합계값\" , \"initialValueStrategy\" : \"[문자열 열거형]초기값 설정 방침\" , \"parameters\" : [ { \"name\" : \"[string]이름\" , \"metadata\" : \"[string?]메타데이터\" } ] } ], \"rarityParameterModels\" : [ { \"name\" : \"[string]레어리티 파라미터 모델명\" , \"metadata\" : \"[string?]메타데이터\" , \"maximumParameterCount\" : \"[int]부여할 파라미터의 최대 수\" , \"parameterCounts\" : [ { \"count\" : \"[int]부여 수\" , \"weight\" : \"[int]추첨 가중치\" } ], \"parameters\" : [ { \"name\" : \"[string]이름\" , \"metadata\" : \"[string?]메타데이터\" , \"resourceName\" : \"[string]게임에서 사용하는 파라미터 리소스 종류를 나타내는 이름(GS2의 동작에는 사용되지 않음)\" , \"resourceValue\" : \"[long]게임에서 사용하는 파라미터 리소스 값(GS2의 동작에는 사용되지 않음)\" , \"weight\" : \"[int]추첨 가중치\" } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2023-07-18 마스터 데이터 포맷 버전 balanceParameterModels List ~ 10000 items 밸런스 파라미터 모델 밸런스 파라미터의 추첨 조건을 정의합니다. 밸런스 파라미터는 고정된 합계 값을 여러 파라미터 슬롯에 분배합니다. 예를 들어 합계 파워가 100인 무기에 대해 ATK=60, DEF=30, SPD=10과 같이 배분됩니다. 초기값 설정 방침에 따라 값의 할당 방법이 결정됩니다: average 는 균등하게 분배하고, lottery 는 합계 값을 무작위로 배분합니다. rarityParameterModels List ~ 10000 items 레어리티 파라미터 모델 레어리티 파라미터의 추첨 조건을 정의합니다. 레어리티 파라미터는 가중 추첨 시스템을 사용하여 부여되는 파라미터의 수와 할당되는 구체적인 값을 모두 결정합니다. 먼저, 부여 수 모델 목록에서 가중 추첨을 통해 채울 파라미터 슬롯 수가 결정됩니다. 그런 다음, 각 슬롯의 값이 파라미터 값 모델 목록에서 가중 추첨으로 선택되어, 제어된 확률 분포에 따른 무작위 장비 속성을 제공합니다. 모델 BalanceParameterModel 밸런스 파라미터 모델 밸런스 파라미터의 추첨 조건을 정의합니다. 밸런스 파라미터는 고정된 합계 값을 여러 파라미터 슬롯에 분배합니다. 예를 들어 합계 파워가 100인 무기에 대해 ATK=60, DEF=30, SPD=10과 같이 배분됩니다. 초기값 설정 방침에 따라 값의 할당 방법이 결정됩니다: average 는 균등하게 분배하고, lottery 는 합계 값을 무작위로 배분합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 balanceParameterModelId string ※ ~ 1024자 밸런스 파라미터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 밸런스 파라미터 모델 이름 밸런스 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. totalValue long  0 ~ 9223372036854775805 합계값 모든 파라미터 슬롯에 분배되는 고정된 합계값입니다. 파라미터가 추첨될 때, 사용되는 배분 방식과 관계없이 개별 값의 합계는 항상 이 합계값이 됩니다. initialValueStrategy 문자열 열거형 enum {   “average”,   “lottery” } “average” 초기값 설정 방침 최초 할당 시 합계값을 파라미터 슬롯에 어떻게 분배할지를 결정합니다. average 는 합계값을 모든 파라미터에 균등하게 분배하고, lottery 는 합계값을 무작위로 분배하여 다양한 파라미터 조합을 만듭니다. 정의 설명 average 평균값 lottery 추첨 parameters List  1 ~ 10 items 밸런스 파라미터 값 모델 목록 이 밸런스 파라미터에서 사용 가능한 파라미터 슬롯을 정의합니다. 각 엔트리는 이름이 지정된 파라미터 슬롯(예: ATK, DEF, SPD)을 선택적 메타데이터와 함께 지정합니다. 합계값은 이 슬롯들에 분배됩니다. BalanceParameterValueModel 밸런스 파라미터 값 모델 밸런스 파라미터 내에서 사용 가능한 단일 파라미터 슬롯을 정의합니다. 각 엔트리는 추첨 처리 중 합계값의 일부를 받는 이름이 지정된 슬롯(예: ATK, DEF, SPD)을 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 이 파라미터 슬롯의 식별자(예: ATK, DEF, SPD)입니다. 밸런스 파라미터 모델 내에서 고유해야 합니다. 추첨된 파라미터 값을 저장·취득할 때 키로 사용됩니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. RarityParameterModel 레어리티 파라미터 모델 레어리티 파라미터의 추첨 조건을 정의합니다. 레어리티 파라미터는 가중 추첨 시스템을 사용하여 부여되는 파라미터의 수와 할당되는 구체적인 값을 모두 결정합니다. 먼저, 부여 수 모델 목록에서 가중 추첨을 통해 채울 파라미터 슬롯 수가 결정됩니다. 그런 다음, 각 슬롯의 값이 파라미터 값 모델 목록에서 가중 추첨으로 선택되어, 제어된 확률 분포에 따른 무작위 장비 속성을 제공합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rarityParameterModelId string ※ ~ 1024자 레어리티 파라미터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레어리티 파라미터 모델명 레어리티 파라미터 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParameterCount int  1 ~ 10 부여할 파라미터의 최대 수 리소스에 부여할 수 있는 파라미터 슬롯 수의 상한입니다. 실제로 부여되는 수는 부여 수 모델 목록에서의 가중 추첨으로 결정되지만, 이 값을 초과하지 않습니다. parameterCounts List  1 ~ 10 items 레어리티 파라미터의 부여 수 모델 목록 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨 엔트리를 정의합니다. 각 엔트리는 부여 수와 추첨 가중치를 지정합니다. 가중치가 클수록 해당 부여 수가 선택될 확률이 높아집니다. parameters List  1 ~ 1000 items 레어리티 파라미터 값 모델 목록 추첨 가능한 파라미터 값의 풀을 정의합니다. 각 엔트리는 파라미터 이름, 리소스 상세 정보, 추첨 가중치를 지정합니다. 파라미터 슬롯을 채울 때, 이 풀에서 중복 없이 가중 추첨으로 값이 선택됩니다. RarityParameterCountModel 레어리티 파라미터의 부여 수 모델 리소스에 부여되는 파라미터 슬롯 수를 결정하기 위한 가중 추첨의 단일 엔트리를 정의합니다. 각 엔트리는 파라미터 수와 추첨 가중치를 짝지어, 파라미터 수량의 확률 분포를 세밀하게 제어할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 count int  0 ~ 10 부여 수 이 엔트리가 추첨되었을 때 부여되는 파라미터 슬롯 수입니다. 예를 들어 부여 수가 3인 경우, 리소스는 값 모델 풀에서 선택된 3개의 파라미터 값을 받게 됩니다. weight int  1 ~ 2147483646 추첨 가중치 파라미터 부여 수를 결정하는 가중치 추첨에서 사용되는 상대적인 가중치입니다. 값이 클수록 이 부여 수가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 부여 수 모델 리스트 내 모든 가중치의 합으로 나눈 값입니다. RarityParameterValueModel 레어리티 파라미터 값 모델 레어리티 파라미터 값의 가중 추첨 풀 내 단일 엔트리를 정의합니다. 각 엔트리는 파라미터 이름, 게임에서 정의한 리소스 상세 정보, 그리고 풀 내 다른 엔트리에 대한 선택 확률을 결정하는 추첨 가중치를 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 64자 이름 이 추첨 엔트리의 식별자입니다. 레어리티 파라미터 모델의 값 풀 내에서 고유해야 합니다. 추첨되었을 때, 이 이름이 결과 레어리티 파라미터 값에 저장됩니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resourceName string  ~ 64자 게임에서 사용하는 파라미터 리소스 종류를 나타내는 이름(GS2의 동작에는 사용되지 않음) 이 파라미터 값에 연결된 게임에서 정의한 리소스 종류 이름(예: “fire_attack”, “ice_resist”)입니다. GS2는 자체 동작에 이 값을 사용하지 않으며, 추첨 결과에 그대로 전달되어 게임 로직에서 사용됩니다. resourceValue long  0 ~ 9223372036854775805 게임에서 사용하는 파라미터 리소스 값(GS2의 동작에는 사용되지 않음) 이 파라미터의 게임에서 정의한 수치(예: 공격력+50인 경우 50)입니다. GS2는 자체 동작에 이 값을 사용하지 않으며, 추첨 결과에 그대로 전달되어 게임 로직에서 사용됩니다. weight int  1 ~ 2147483646 추첨 가중치 파라미터 값을 선택하는 가중 추첨에서 사용되는 상대적 가중치입니다. 값이 클수록 이 엔트리가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 풀 내 모든 가중치의 합으로 나눈 값이 됩니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Enchant 마스터 데이터 레퍼런스","url":"/ko/api_reference/enchant/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2020-08-22\" , \"rateModels\" : [ { \"name\" : \"[string]강화 레이트 모델 이름\" , \"description\" : \"[string?]설명문\" , \"metadata\" : \"[string?]메타데이터\" , \"targetInventoryModelId\" : \"[string]강화 대상으로 사용할 수 있는 GS2-Inventory 인벤토리 모델의 GRN\" , \"acquireExperienceSuffix\" : \"[string]GS2-Experience에서 획득한 경험치를 저장하는 프로퍼티 ID에 부여하는 서픽스\" , \"materialInventoryModelId\" : \"[string]강화 소재로 사용할 수 있는 GS2-Inventory 인벤토리 모델 GRN\" , \"acquireExperienceHierarchy\" : [ \"[string]ItemModel의 메타데이터에 저장할, 획득 경험치를 정의하는 JSON 데이터의 계층 구조 정의\" ], \"experienceModelId\" : \"[string]강화 결과로 얻는 GS2-Experience 경험치 모델 GRN\" , \"bonusRates\" : [ { \"rate\" : \"[float]경험치 보너스 배율 (1.0 = 보너스 없음)\" , \"weight\" : \"[int]추첨 가중치\" } ] } ], \"unleashRateModels\" : [ { \"name\" : \"[string]한계돌파 레이트 모델명\" , \"description\" : \"[string?]설명문\" , \"metadata\" : \"[string?]메타데이터\" , \"targetInventoryModelId\" : \"[string]한계돌파 대상에 사용할 수 있는 GS2-Inventory 인벤토리 모델 GRN\" , \"gradeModelId\" : \"[string]그레이드 모델 GRN\" , \"gradeEntries\" : [ { \"gradeValue\" : \"[long]대상 그레이드\" , \"needCount\" : \"[int]동일 종류의 아이템을 몇 개 소비할지\" } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2020-08-22 마스터 데이터 포맷 버전 rateModels List ~ 10000 items 강화 레이트 모델 강화 레이트는 강화에 사용하는 소재와 강화 대상을 정의한 데이터입니다. 소재 데이터와 강화 대상 데이터는 모두 GS2-Inventory에서 관리되고 있어야 합니다. 강화로 얻는 경험치는 GS2-Inventory의 메타데이터에 JSON 형식으로 기록됩니다. 여기서는 메타데이터의 어느 계층에 경험치 값이 저장되어 있는지를 기재해야 합니다. 강화 시 일정 확률로 대성공 과 같은 형태로 입수할 수 있는 경험치량에 보정값을 적용할 수 있습니다. 그 추첨 확률도 이 엔티티에서 정의합니다. unleashRateModels List ~ 10000 items 한계돌파 레이트 모델 아이템의 한계돌파(해방) 조건을 정의합니다. GS2-Inventory에서 관리되는 아이템과 GS2-Grade의 그레이드 모델을 연결하여 그레이드 진행을 가능하게 합니다. 각 그레이드 레벨에서 소비하는 동일 종류 아이템의 수를 개별적으로 설정할 수 있어, 각 한계돌파 단계의 비용을 세밀하게 제어할 수 있습니다. 모델 RateModel 강화 레이트 모델 강화 레이트는 강화에 사용하는 소재와 강화 대상을 정의한 데이터입니다. 소재 데이터와 강화 대상 데이터는 모두 GS2-Inventory에서 관리되고 있어야 합니다. 강화로 얻는 경험치는 GS2-Inventory의 메타데이터에 JSON 형식으로 기록됩니다. 여기서는 메타데이터의 어느 계층에 경험치 값이 저장되어 있는지를 기재해야 합니다. 강화 시 일정 확률로 대성공 과 같은 형태로 입수할 수 있는 경험치량에 보정값을 적용할 수 있습니다. 그 추첨 확률도 이 엔티티에서 정의합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rateModelId string ※ ~ 1024자 강화 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 강화 대상으로 사용할 수 있는 GS2-Inventory 인벤토리 모델의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 강화되는 아이템은 이 인벤토리 모델에 속해 있어야 합니다. acquireExperienceSuffix string  ~ 1024자 GS2-Experience에서 획득한 경험치를 저장하는 프로퍼티 ID에 부여하는 서픽스 아이템의 프로퍼티 ID 끝에 추가되어, 경험치가 저장되는 GS2-Experience의 프로퍼티 ID를 구성하는 문자열입니다. 같은 아이템에 여러 경험치 종류를 부여할 수 있습니다(예: 캐릭터 레벨의 “level”, 호감도의 “like”). materialInventoryModelId string  ~ 1024자 강화 소재로 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화 소재로 사용할 수 있는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 각 소재가 제공하는 경험치는 acquireExperienceHierarchy로 지정된 JSON 계층을 사용하여 아이템 모델의 메타데이터에 정의됩니다. acquireExperienceHierarchy List 0 ~ 10 items ItemModel의 메타데이터에 저장할, 획득 경험치를 정의하는 JSON 데이터의 계층 구조 정의 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 기능이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 예를 들어, { “aaa”: { “bbb”: { “experienceValue”: 100 } } }와 같은 구조의 데이터 정의로 메타데이터에 설정하고 싶은 경우에는 [ “aaa”, “bbb”, “experienceValue” ]와 같이 지정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. experienceModelId string  ~ 1024자 강화 결과로 얻는 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 강화로 얻은 경험치가 기록되는 GS2-Experience의 경험치 모델을 지정합니다. 경험치는 대상 아이템의 프로퍼티 ID와 acquireExperienceSuffix를 조합하여 식별되는 프로퍼티에 가산됩니다. bonusRates List 0 ~ 1000 items 경험치 획득량 보너스 강화 시 보너스 경험치 배율의 가중치 추첨을 정의합니다. 각 항목은 배율(예: 1.5로 150%)과 추첨 가중치를 지정합니다. 강화 실행 시 가중치 추첨으로 하나의 항목이 선택되어, 획득 경험치에 “대성공” 보너스가 적용되는지 여부가 결정됩니다. BonusRate 경험치 획득량 보너스 강화 시 경험치 보너스 배율을 결정하는 가중치 추첨의 단일 항목을 정의합니다. 서로 다른 배율과 가중치를 가진 여러 항목을 설정함으로써, 제어된 확률에 따른 “대성공\"이나 “초성공” 같은 시스템을 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rate float 1.0 0 ~ 10000 경험치 보너스 배율 (1.0 = 보너스 없음) 이 항목이 추첨되었을 때 기본 경험치에 적용되는 배율입니다. 1.0은 보너스 없는 일반 강화, 1.5는 경험치 150%(대성공), 2.0은 경험치 200%(초성공) 등을 의미합니다. weight int 1 0 ~ 2147483645 추첨 가중치 보너스 레이트를 선택하는 가중치 추첨에서 사용되는 상대적인 가중치입니다. 값이 클수록 이 보너스 레이트가 선택될 확률이 높아집니다. 실제 확률은 이 가중치를 보너스 레이트 목록 내 모든 가중치의 합계로 나눈 값이 됩니다. UnleashRateModel 한계돌파 레이트 모델 아이템의 한계돌파(해방) 조건을 정의합니다. GS2-Inventory에서 관리되는 아이템과 GS2-Grade의 그레이드 모델을 연결하여 그레이드 진행을 가능하게 합니다. 각 그레이드 레벨에서 소비하는 동일 종류 아이템의 수를 개별적으로 설정할 수 있어, 각 한계돌파 단계의 비용을 세밀하게 제어할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 unleashRateModelId string ※ ~ 1024자 한계돌파 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 한계돌파 레이트 모델명 한계돌파 레이트 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. description string ~ 1024자 설명문 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. targetInventoryModelId string  ~ 1024자 한계돌파 대상에 사용할 수 있는 GS2-Inventory 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 한계돌파 대상이 되는 아이템을 보유하는 GS2-Inventory의 인벤토리 모델을 지정합니다. 한계돌파하는 아이템과 소재로 소비되는 동일 종류 아이템 모두 이 인벤토리 모델에 속해 있어야 합니다. gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 대상 아이템의 한계돌파 레벨을 추적하는 GS2-Grade의 그레이드 모델을 지정합니다. 한계돌파가 성공하면, 이 그레이드 모델 내에서 아이템의 그레이드가 가산됩니다. gradeEntries List  1 ~ 1000 items 그레이드 엔트리 목록 한계돌파의 각 그레이드 레벨에 대한 소재 비용을 정의합니다. 각 엔트리는 그레이드 값과, 해당 그레이드에 도달하기 위해 소비해야 하는 동일 종류 아이템 수를 매핑합니다. 예를 들어, 그레이드 1은 복제품 1개, 그레이드 2는 복제품 3개와 같이 설정할 수 있습니다. UnleashRateEntryModel 한계돌파 레이트 엔트리 모델 한계돌파 진행에서 단일 그레이드 레벨의 소재 비용을 정의합니다. 각 엔트리는 대상이 되는 그레이드 값과, 해당 그레이드를 달성하기 위해 소비해야 하는 동일 종류 아이템의 수를 지정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gradeValue long  1 ~ 1000 대상 그레이드 이 엔트리가 비용을 정의하는 그레이드 값입니다. 이 그레이드 레벨로의 한계돌파를 실행할 때, needCount로 지정된 수의 아이템이 소비됩니다. needCount int  1 ~ 1000 동일 종류의 아이템을 몇 개 소비할지 대상 그레이드로의 한계돌파를 실행하기 위해 소비해야 하는 동일 종류 아이템의 수입니다. 이 아이템들은 한계돌파되는 아이템과 동일한 아이템 모델의 것입니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Enhance 마스터 데이터 레퍼런스","url":"/ko/api_reference/enhance/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-08-19\" , \"rateModels\" : [ { \"name\" : \"[string]교환 레이트 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"verifyActions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"consumeActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"timingType\" : \"[문자열 열거형]교환 종류\" , \"lockTime\" : \"[int]교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분)\" , \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] } ], \"incrementalRateModels\" : [ { \"name\" : \"[string]코스트 상승형 교환 레이트 모델의 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"consumeAction\" : { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" }, \"calculateType\" : \"[문자열 열거형]코스트 상승량 계산 방식\" , \"baseValue\" : \"[long]베이스 값\" , \"coefficientValue\" : \"[long]계수\" , \"calculateScriptId\" : \"[string]코스트 계산 스크립트의 GRN\" , \"exchangeCountId\" : \"[string]교환 실행 횟수를 관리하는 GS2-Limit의 횟수 제한 모델 GRN\" , \"maximumExchangeCount\" : \"[int]교환 횟수 상한\" , \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-08-19 마스터 데이터 포맷 버전 rateModels List ~ 10000 items 교환 레이트 모델 교환 레이트 모델은 리소스와 리소스를 교환할 때 사용하는 레이트를 정의하는 엔티티입니다. 즉시 교환할 수 있는 레이트뿐만 아니라, 현실 시간으로 일정 시간이 경과한 후에 교환할 수 있는 레이트도 설정할 수 있습니다. 현실 시간의 경과가 필요한 교환 레이트에는 즉시 교환을 실행하는 데 필요한 리소스를 추가로 정의할 수 있습니다. incrementalRateModels List ~ 10000 items 코스트 상승형 교환 레이트 모델 일반적인 교환 레이트는 항상 일정한 레이트로 교환을 제공합니다. 상승형 교환 레이트에서는 교환 횟수에 따라 코스트가 상승하는 레이트를 정의할 수 있습니다. 예를 들어, 첫 번째 교환에서는 1:1로 교환할 수 있지만, 두 번째 교환에서는 2:1로 교환하게 되는 것과 같은 레이트를 정의할 수 있습니다. 이러한 레이트를 정의함으로써 플레이어가 게임을 진행함에 따라 얻을 수 있는 리소스의 가치를 높일 수 있습니다. 교환 횟수는 현실 시간의 경과에 따라 리셋할 수 있습니다. 이 기능을 이용하면 매일 또는 매주 교환에 필요한 코스트를 리셋할 수 있습니다. 모델 RateModel 교환 레이트 모델 교환 레이트 모델은 리소스와 리소스를 교환할 때 사용하는 레이트를 정의하는 엔티티입니다. 즉시 교환할 수 있는 레이트뿐만 아니라, 현실 시간으로 일정 시간이 경과한 후에 교환할 수 있는 레이트도 설정할 수 있습니다. 현실 시간의 경과가 필요한 교환 레이트에는 즉시 교환을 실행하는 데 필요한 리소스를 추가로 정의할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 rateModelId string ※ ~ 1024자 교환 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 교환이 실행되기 전에 모두 통과해야 하는 사전 조건 체크입니다. 검증 액션 중 하나라도 실패하면, 리소스를 소비하지 않고 교환이 중단됩니다. 레벨 요건이나 인벤토리 용량 등의 조건을 강제하기 위해 사용됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 교환을 실행하기 위해 플레이어가 지불해야 하는 리소스(코스트)를 정의합니다. 여러 개의 소비 액션을 지정할 수 있어, 골드와 아이템을 모두 필요로 하는 것과 같은 복잡한 교환 코스트를 구현할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 소비 액션으로 실행됩니다. timingType 문자열 열거형 enum {   “immediate”,   “await” } “immediate” 교환 종류 교환 실행 후 보상이 언제 전달되는지를 결정합니다. immediate 는 교환 실행 시 즉시 보상을 전달합니다. await 는 보상을 받기 전에 실시간의 경과가 필요하며, 대기 기간(예: 제작 시간)을 둡니다. 정의 설명 immediate 즉시 await 현실 시간의 경과 대기 lockTime int {timingType} == “await” ※ 0 ~ 538214400 교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분) timingType이 await 인 경우에만 적용됩니다. 교환이 시작된 후 플레이어가 보상을 받을 수 있게 되기까지 경과해야 하는 실시간 분수를 지정합니다. 대기 시간은 스킵 기능을 사용하여 단축할 수 있습니다. ※ timingType이(가) “await” 이면 필수 acquireActions List [] 0 ~ 100 items 획득 액션 리스트 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 여러 개의 획득 액션을 지정하여 다양한 리소스 타입을 동시에 지급할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 획득 액션으로 실행됩니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 IncrementalRateModel 코스트 상승형 교환 레이트 모델 일반적인 교환 레이트는 항상 일정한 레이트로 교환을 제공합니다. 상승형 교환 레이트에서는 교환 횟수에 따라 코스트가 상승하는 레이트를 정의할 수 있습니다. 예를 들어, 첫 번째 교환에서는 1:1로 교환할 수 있지만, 두 번째 교환에서는 2:1로 교환하게 되는 것과 같은 레이트를 정의할 수 있습니다. 이러한 레이트를 정의함으로써 플레이어가 게임을 진행함에 따라 얻을 수 있는 리소스의 가치를 높일 수 있습니다. 교환 횟수는 현실 시간의 경과에 따라 리셋할 수 있습니다. 이 기능을 이용하면 매일 또는 매주 교환에 필요한 코스트를 리셋할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 incrementalRateModelId string ※ ~ 1024자 코스트 상승형 교환 레이트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. consumeAction ConsumeAction  소비 액션 (수량/값은 자동으로 덮어써집니다) 교환 비용으로 소비되는 리소스의 종류를 정의합니다. 실제 수량은 교환 횟수와 계산 방식(선형, 거듭제곱, 스크립트)에 기반하여 동적으로 계산됩니다. 액션 종류와 대상 리소스만 지정하면 되며, 수량 필드는 자동으로 덮어써집니다. calculateType 문자열 열거형 enum {   “linear”,   “power”,   “gs2_script” }  코스트 상승량 계산 방식 교환 횟수에 따라 코스트가 어떻게 상승하는지를 결정합니다. linear 는 코스트를 baseValue +（coefficientValue × 교환 횟수）로 계산합니다. power 는 코스트를 coefficientValue ×（교환 횟수 + 1）^2로 계산합니다. gs2_script 는 임의의 로직을 위해 커스텀 GS2-Script에 계산을 위임합니다. 정의 설명 linear 베이스 값 + (계수 * 교환 횟수) power 계수 * (교환 횟수 + 1) ^ 2 gs2_script GS2-Script에 의한 임의의 로직 baseValue long {calculateType} == “linear” ※ 0 ~ 9223372036854775805 베이스 값 linear 계산 방식을 사용하는 경우 첫 교환 시의 기본 코스트입니다. 합계 코스트는 baseValue +（coefficientValue × 교환 횟수）로 계산됩니다. ※ calculateType이(가) “linear” 이면 필수 coefficientValue long {calculateType} in [“linear”, “power”] ※ 0 ~ 9223372036854775805 계수 교환 횟수에 따라 코스트가 얼마나 빠르게 상승하는지를 제어하는 승수입니다. linear 모드에서는 각 교환마다 이 값이 코스트에 더해집니다. power 모드에서는 코스트가 coefficientValue ×（교환 횟수 + 1）^2로 계산됩니다. ※ calculateType이(가) “linear”,“power\"이면 필수 calculateScriptId string {calculateType} == “gs2_script” ※ ~ 1024자 코스트 계산 스크립트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - calculateCost ※ calculateType이(가) “gs2_script” 이면 필수 exchangeCountId string  ~ 1024자 교환 실행 횟수를 관리하는 GS2-Limit의 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 각 사용자가 이 코스트 상승형 교환을 몇 번 실행했는지 추적하는 GS2-Limit의 횟수 제한 모델을 참조합니다. 카운트는 상승하는 코스트 계산에 사용되며, GS2-Limit의 리셋 타이밍을 사용하여 정기적으로(예: 매일 또는 매주) 리셋할 수 있습니다. maximumExchangeCount int 2147483646 0 ~ 2147483646 교환 횟수 상한 사용자가 이 코스트 상승형 교환을 실행할 수 있는 최대 횟수입니다. 교환 횟수가 이 상한에 도달하면, GS2-Limit에 의한 카운트 리셋까지 이후의 교환이 거부됩니다. acquireActions List [] 0 ~ 100 items 획득 액션 리스트 코스트 상승형 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 보상은 교환 횟수와 관계없이 일정하며, 코스트만 교환마다 증가합니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Exchange 마스터 데이터 레퍼런스","url":"/ko/api_reference/exchange/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-01-11\" , \"experienceModels\" : [ { \"name\" : \"[string]경험치 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"defaultExperience\" : \"[long]경험치 초기값\" , \"defaultRankCap\" : \"[long]랭크 캡 초기값\" , \"maxRankCap\" : \"[long]랭크 캡의 최댓값\" , \"rankThreshold\" : { \"metadata\" : \"[string?]메타데이터\" , \"values\" : [ \"[long]랭크업 경험치 임계값\" ] }, \"acquireActionRates\" : [ { \"name\" : \"[string]보상 가산 테이블 이름\" , \"mode\" : \"[string]보상 가산 테이블의 종류\" , \"rates\" : [ \"[double]가산량(배율)\" ], \"bigRates\" : [ \"[string]가산량(배율)\" ] } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-01-11 마스터 데이터 포맷 버전 experienceModels List ~ 100 items 경험치 모델 경험치와 랭크 시스템의 규칙을 정의합니다. 랭크업에 필요한 경험치의 임계값, 기본 랭크 캡, 최대 랭크 캡을 설정합니다. 랭크 캡은 스테이터스가 도달할 수 있는 최대 랭크를 제한하며, 스테이터스별로 최대 랭크 캡까지 인상할 수 있습니다(예: 한계돌파). 옵션으로 현재 랭크에 따라 보상 배율을 조정하는 입수 액션 레이트 테이블을 포함할 수 있습니다. 모델 ExperienceModel 경험치 모델 경험치와 랭크 시스템의 규칙을 정의합니다. 랭크업에 필요한 경험치의 임계값, 기본 랭크 캡, 최대 랭크 캡을 설정합니다. 랭크 캡은 스테이터스가 도달할 수 있는 최대 랭크를 제한하며, 스테이터스별로 최대 랭크 캡까지 인상할 수 있습니다(예: 한계돌파). 옵션으로 현재 랭크에 따라 보상 배율을 조정하는 입수 액션 레이트 테이블을 포함할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 experienceModelId string ※ ~ 1024자 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 경험치 모델 이름 경험치 모델 고유 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultExperience long 0 0 ~ 9223372036854775805 경험치 초기값 신규 생성된 스테이터스에 할당되는 경험치입니다. 일반적으로 플레이어가 진행의 처음부터 시작하도록 0으로 설정됩니다. 초기 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 결정됩니다. defaultRankCap long  0 ~ 9223372036854775805 랭크 캡 초기값 신규 생성된 스테이터스가 도달할 수 있는 기본 최대 랭크입니다. 이 랭크의 임계값을 초과한 경험치는 폐기되거나 오버플로 스크립트가 트리거됩니다. 랭크 캡은 한계돌파 등의 조작을 통해 스테이터스별로 maxRankCap까지 인상할 수 있습니다. maxRankCap long  0 ~ 9223372036854775805 랭크 캡의 최댓값 랭크 캡의 절대적인 상한입니다. 랭크 캡 증가 조작(한계돌파 등)을 수행하더라도 랭크 캡은 이 값을 초과할 수 없습니다. defaultRankCap 이상의 값이어야 합니다. rankThreshold Threshold  랭크업 임계값 각 랭크에 필요한 누적 경험치를 정의하는 임계값 테이블을 참조합니다. 임계값의 엔트리 수가 도달 가능한 최대 랭크를 결정하며, 각 엔트리의 값은 다음 랭크에 도달하는 데 필요한 경험치를 지정합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 목록 스테이터스의 랭크를 참조로 사용할 때 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 각 테이블은 랭크와 배율을 매핑하여, 동일한 액션에서도 더 높은 랭크의 캐릭터가 더 많은 보상을 받는 구조를 구현할 수 있습니다. Threshold 랭크업 임계값 랭크업 임계값은 경험치로부터 랭크(레벨)를 결정하는 데 필요한 수열입니다. [10, 20]이라는 값을 설정한 경우, 경험치 값이 0 9 사이면 랭크1, 10 19 사이면 랭크2, 경험치 값이 20이면 랭크3이 되며, 그 이상 경험치를 획득할 수 없게 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. values List  1 ~ 10000 items 랭크업 경험치 임계값 목록 랭크 진행을 정의하는 누적 경험치의 순서가 있는 배열입니다. 항목 수가 도달 가능한 최대 랭크를 결정합니다. 예를 들어 [10, 20]인 경우, 경험치 0 9에서 랭크1, 10 19에서 랭크2, 20 이상에서 랭크3(그 이상의 경험치 획득은 불가)이 됩니다. AcquireActionRate 보상 가산 테이블 상태의 현재 랭크에 따라 보상량을 조정하는 랭크 기반 배율 테이블을 정의합니다. 테이블의 각 항목은 랭크에 대응하며, 입수량에 적용되는 배율을 지정합니다. 표준적인 배정밀도 부동소수점 값과, 대규모 계산용 대수 문자열 표현을 모두 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보상 가산 테이블 이름 이 보상 가산 테이블의 고유 식별자입니다. 특정 입수 액션에 적용할 배율 테이블을 지정할 때 참조됩니다. mode 문자열 열거형 enum {   “double”,   “big” } “double” 보상 가산 테이블의 종류 배율 값의 수치 정밀도를 선택합니다. 표준적인 부동소수점 수(2^48까지)에는 “double\"을, 대규모 계산이 필요한 경우에는 1024자리까지의 문자열 표현을 지원하는 “big\"을 사용합니다. 정의 설명 double 2^48 미만의 부동소수점 수 big 문자열 표기로 1024자리 미만의 부동소수점 수 rates List {mode} == “double” ※ 1 ~ 10000 items 랭크별 가산량(배율) 랭크를 인덱스로 하는 배율 값의 배열입니다. i번째 엔트리는 스테이터스가 랭크 i일 때 적용되는 보상 배율을 정의합니다. mode가 “double\"로 설정된 경우에 사용됩니다. ※ mode이(가) “double” 이면 필수 bigRates List {mode} == “big” ※ 1 ~ 10000 items 랭크별 가산량(배율) 랭크를 인덱스로 하는 문자열 표현 배율 값의 배열입니다. i번째 엔트리는 스테이터스가 랭크 i일 때 적용되는 보상 배율을 정의합니다. 대수치 정밀도가 필요한 계산에서 mode가 “big\"으로 설정된 경우에 사용됩니다. ※ mode이(가) “big” 이면 필수","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Experience 마스터 데이터 레퍼런스","url":"/ko/api_reference/experience/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-09-09\" , \"moldModels\" : [ { \"name\" : \"[string]폼 저장 영역 모델의 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"initialMaxCapacity\" : \"[int]폼을 저장할 수 있는 초기 캐파시티\" , \"maxCapacity\" : \"[int]폼을 저장할 수 있는 최대 캐파시티\" , \"formModel\" : { \"name\" : \"[string]폼 모델명\" , \"metadata\" : \"[string?]메타데이터\" , \"slots\" : [ { \"name\" : \"[string]슬롯 모델명\" , \"propertyRegex\" : \"[string]프로퍼티로 설정 가능한 값의 정규 표현식\" , \"metadata\" : \"[string?]메타데이터\" } ] } } ], \"propertyFormModels\" : [ { \"name\" : \"[string]프로퍼티 폼 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"slots\" : [ { \"name\" : \"[string]슬롯 모델명\" , \"propertyRegex\" : \"[string]프로퍼티로 설정 가능한 값의 정규 표현식\" , \"metadata\" : \"[string?]메타데이터\" } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-09-09 마스터 데이터 포맷 버전 moldModels List ~ 100 items 폼 저장 영역 모델 폼 저장 영역 모델은 파티 편성이라면 「불 속성 파티」「물 속성 파티」와 같은 형태로 저장하는 것을 상정하고 있습니다. 저장할 수 있는 영역의 수는 제한할 수 있으며, 개별적으로 확장할 수도 있습니다. propertyFormModels List ~ 100 items 프로퍼티 폼 모델 프로퍼티 폼 모델은 편성 상태를 나타내는 엔티티입니다. Mold / Form과의 차이점은, 슬롯 수를 정의하고 각 슬롯에 편성을 기록하는 것이 Mold / Form이며, 보유하고 있는 장비에 스킬을 설정하는 것처럼 수를 사전에 정하기 어려운 편성을 표현할 때 사용하는 것이 프로퍼티 폼 모델입니다. 모델 FormModel 폼 모델 폼 모델은 편성 상태를 나타내는 엔티티입니다. 편성 가능한 영역으로 슬롯 을 정의할 수 있습니다. 무기·방어구라면 「오른손」「왼손」「몸통」「팔」과 같은 부위를 슬롯으로 하고, 파티라면 「전위」「중위」「후위」와 같은 포지션을 슬롯으로 표현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 formModelId string ※ ~ 1024자 폼 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 모델명 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 리스트 이 폼을 구성하는 슬롯 정의의 순서가 있는 리스트입니다. 각 슬롯은 할당 가능한 포지션을 나타내며, 슬롯명은 폼 내에서 고유해야 합니다. 장비에서는 “weapon”, “armor”, “accessory\"와 같은 슬롯, 파티에서는 “position_1”, “position_2\"와 같은 슬롯을 생각할 수 있습니다. SlotModel 슬롯 모델 폼 모델 내의 하나의 슬롯을 정의합니다. 슬롯은 게임 리소스(아이템, 캐릭터, 장비 등)를 배치할 수 있는 할당 가능한 포지션을 나타냅니다. 프로퍼티 정규 표현식에 의해 슬롯에 설정 가능한 값이 검증됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 슬롯 모델명 폼 모델 내에서 이 슬롯을 고유하게 식별하는 이름입니다. 장비 폼에서는 “right_hand”, “body\"와 같은 이름이, 파티 폼에서는 “vanguard”, “rear_guard\"와 같은 이름이 일반적으로 사용됩니다. propertyRegex string “.*” ~ 512자 프로퍼티로 설정 가능한 값의 정규 표현식 이 슬롯에 할당 가능한 프로퍼티 ID 값을 검증하는 정규 표현식 패턴입니다. 예를 들어 특정 GS2-Inventory 아이템 GRN이나 GS2-Dictionary 엔트리 GRN으로 제한할 수 있습니다. 기본값은 “.*“이며 임의의 값을 허용합니다. metadata string ~ 512자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. MoldModel 폼 저장 영역 모델 폼 저장 영역 모델은 파티 편성이라면 「불 속성 파티」「물 속성 파티」와 같은 형태로 저장하는 것을 상정하고 있습니다. 저장할 수 있는 영역의 수는 제한할 수 있으며, 개별적으로 확장할 수도 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 moldModelId string ※ ~ 1024자 폼 저장 영역 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialMaxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 초기 캐파시티 이 저장 영역에서 각 플레이어가 이용할 수 있는 기본 폼 저장 슬롯 수입니다. 예를 들어 3으로 설정하면 플레이어는 초기 상태에서 최대 3개의 서로 다른 편성(예: 「불 속성 파티」「물 속성 파티」「바람 속성 파티」)을 저장할 수 있습니다. 플레이어별로 maxCapacity까지 확장할 수 있습니다. maxCapacity int  1 ~ 2147483646 폼을 저장할 수 있는 최대 캐파시티 이 저장 영역에서 플레이어별 폼 저장 슬롯 수의 절대적인 상한입니다. 캐파시티 확장 조작을 수행하더라도 캐파시티는 이 값을 초과할 수 없습니다. initialMaxCapacity 이상의 값이어야 합니다. formModel FormModel  폼 모델 PropertyFormModel 프로퍼티 폼 모델 프로퍼티 폼 모델은 편성 상태를 나타내는 엔티티입니다. Mold / Form과의 차이점은, 슬롯 수를 정의하고 각 슬롯에 편성을 기록하는 것이 Mold / Form이며, 보유하고 있는 장비에 스킬을 설정하는 것처럼 수를 사전에 정하기 어려운 편성을 표현할 때 사용하는 것이 프로퍼티 폼 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 propertyFormModelId string ※ ~ 1024자 프로퍼티 폼 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 프로퍼티 폼 모델 이름 프로퍼티 폼 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 모델 목록 이 프로퍼티 폼의 슬롯 정의를 순서대로 나열한 목록입니다. 캐파시티에 의해 폼 수가 제한되는 Mold/Form과 달리, 프로퍼티 폼은 프로퍼티 ID로 식별되며 보유하는 리소스마다 존재할 수 있습니다. 슬롯 이름은 폼 내에서 고유해야 합니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Formation 마스터 데이터 레퍼런스","url":"/ko/api_reference/formation/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2023-12-25\" , \"gradeModels\" : [ { \"name\" : \"[string]그레이드 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"defaultGrades\" : [ { \"propertyIdRegex\" : \"[string]프로퍼티 ID 정규 표현식\" , \"defaultGradeValue\" : \"[long]기본 그레이드 값\" } ], \"experienceModelId\" : \"[string]GS2-Experience 경험치 모델 GRN\" , \"gradeEntries\" : [ { \"metadata\" : \"[string?]메타데이터\" , \"rankCapValue\" : \"[long]랭크 캡 값\" , \"propertyIdRegex\" : \"[string]프로퍼티 ID 정규 표현식\" , \"gradeUpPropertyIdRegex\" : \"[string]그레이드업용 프로퍼티 ID 정규 표현식\" } ], \"acquireActionRates\" : [ { \"name\" : \"[string]보상 가산 테이블 이름\" , \"mode\" : \"[string]보상 가산 테이블 종류\" , \"rates\" : [ \"[double]배율 값\" ], \"bigRates\" : [ \"[string]배율 값 (빅 넘버)\" ] } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2023-12-25 마스터 데이터 포맷 버전 gradeModels List ~ 100 items 그레이드 모델 그레이드 모델이란 캐릭터나 장비의 랭크를 나타내는 엔티티로, 그레이드에 따라 GS2-Experience의 랭크 캡을 설정할 수 있습니다. 모델 GradeModel 그레이드 모델 그레이드 모델이란 캐릭터나 장비의 랭크를 나타내는 엔티티로, 그레이드에 따라 GS2-Experience의 랭크 캡을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 gradeModelId string ※ ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 그레이드 모델 이름 그레이드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultGrades List 0 ~ 100 items 기본 그레이드 모델 리스트 신규 스테이터스 작성 시 평가되는 기본 그레이드 규칙의 순서가 있는 리스트입니다. 각 항목은 프로퍼티 ID의 정규 표현식 패턴과, 매칭된 경우 할당할 그레이드 값을 정의합니다. 어떤 패턴에도 매칭되지 않으면 기본 그레이드 값 0이 사용됩니다. experienceModelId string  ~ 1024자 GS2-Experience 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그레이드 모델과 연동시킬 GS2-Experience의 경험치 모델의 GRN입니다. 그레이드 값이 변경되면, 그레이드 엔트리의 매핑에 기반하여 연동된 경험치 모델의 랭크 캡이 자동으로 업데이트됩니다. 이를 통해 높은 그레이드가 더 높은 랭크 캡을 해제하는 그레이드 기반 성장을 구현할 수 있습니다. gradeEntries List  1 ~ 100 items 그레이드 엔트리 모델 리스트 각 그레이드 값을 연동된 GS2-Experience 모델의 랭크 캡에 매핑하는 그레이드 엔트리의 순서가 있는 리스트입니다. 배열의 인덱스가 그레이드 값에 대응하므로, 첫 번째 항목(인덱스 0)이 그레이드 0의 랭크 캡을, 두 번째 항목이 그레이드 1의 랭크 캡을 정의합니다. acquireActionRates List 0 ~ 100 items 보상 가산 테이블 리스트 그레이드를 기반으로 보상량을 스케일링하기 위한 이름이 지정된 배율 테이블의 컬렉션입니다. 여러 테이블을 정의하여 서로 다른 종류의 보상(예: 경험치, 통화, 아이템)에 다른 스케일링 규칙을 적용할 수 있습니다. DefaultGradeModel 기본 그레이드 모델 그레이드를 새로 생성할 때 프로퍼티 ID의 정규 표현식과의 매칭에 따라 기본 그레이드 값을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 propertyIdRegex string  ~ 1024자 프로퍼티 ID 정규 표현식 새로 생성된 그레이드 스테이터스의 프로퍼티 ID에 대해 매칭되는 정규 표현식 패턴입니다. 프로퍼티 ID가 이 패턴에 매칭되면, 0 대신 지정된 기본 그레이드 값이 초기 그레이드로 할당됩니다. 패턴은 순서대로 평가되며, 처음 매칭된 것이 사용됩니다. defaultGradeValue long  0 ~ 9223372036854775805 기본 그레이드 값 프로퍼티 ID가 propertyIdRegex 패턴에 매칭된 경우 새로 생성된 스테이터스에 할당되는 초기 그레이드 값입니다. 이 인덱스의 그레이드 엔트리가 대응하는 랭크 캡을 정의하므로, 이 값이 연동된 GS2-Experience 모델의 시작 랭크 캡을 결정합니다. GradeEntryModel 그레이드 엔트리 모델 그레이드 값과 연동된 GS2-Experience 모델의 랭크 캡 간의 매핑을 정의합니다. 각 항목은 프로퍼티 ID 매칭에 사용되는 정규 표현식 패턴도 지정하여, 그레이드업 조작에 사용할 수 있는 리소스와 그 프로퍼티 ID의 변환 방법을 결정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rankCapValue long  0 ~ 9223372036854775805 랭크 캡 값 이 그레이드가 적용되었을 때 연동된 GS2-Experience 모델에 설정할 랭크 캡 값입니다. 플레이어의 그레이드가 이 항목에 대응하는 값으로 변경되면, 관련된 경험치 스테이터스의 랭크 캡이 이 값으로 자동 업데이트되어 도달 가능한 최대 랭크가 제어됩니다. propertyIdRegex string  ~ 1024자 프로퍼티 ID 정규 표현식 그레이드업 매칭용 변수를 추출하기 위해 그레이드 스테이터스의 프로퍼티 ID에 적용되는 정규 표현식 패턴입니다. 이 패턴 내의 캡처 그룹(괄호로 둘러싸인 부분)은 gradeUpPropertyIdRegex에서 $1, $2 등으로 사용할 수 있습니다. 예를 들어 “character-(.+)“와 같은 패턴은 캐릭터 식별자를 추출하여 그레이드업 소재의 프로퍼티 ID 매칭에 사용합니다. gradeUpPropertyIdRegex string  ~ 1024자 그레이드업용 프로퍼티 ID 정규 표현식 그레이드 승급을 위해 소비할 수 있는 리소스의 프로퍼티 ID를 특정하는 정규 표현식 패턴입니다. 이 패턴은 propertyIdRegex의 캡처 그룹을 $1, $2 등으로 참조할 수 있습니다. 예를 들어 propertyIdRegex에서 “sword-001\"을 $1로 추출한 경우, 이 패턴을 “grade-up-material-$1\"로 설정하면 해당 검에 고유한 소재를 매칭시킬 수 있습니다. AcquireActionRate 보상 가산 테이블 현재 그레이드 값을 기준으로 보상량을 조정하는 이름이 지정된 배율 테이블을 정의합니다. 각 그레이드 값은 트랜잭션의 입수 액션에 적용되는 배율에 매핑되며, 그레이드가 높은 캐릭터나 장비일수록 더 많은 보상을 받을 수 있습니다. 표준적인 배정밀도 부동소수점수 모드와, 매우 큰 값에 대응하는 빅 넘버 모드를 모두 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 보상 가산 테이블 이름 그레이드 모델 내에서 이 배율 테이블을 고유하게 식별하는 이름입니다. 트랜잭션의 특정 입수 액션에 그레이드 기반 보상 스케일링을 적용할 때 참조됩니다. mode 문자열 열거형 enum {   “double”,   “big” } “double” 보상 가산 테이블 종류 배율 값의 수치 정밀도 모드를 선택합니다. “double” 모드는 대부분의 경우에 적합한 표준 부동소수점수를 사용합니다. “big” 모드는 최대 1024자리까지의 문자열 표현 숫자를 사용하여, 매우 큰 값 계산이 필요한 게임에 대응합니다. 정의 설명 double 2^48 미만의 부동소수점 수 big 문자열 표기로 1024자리 미만의 부동소수점 수 rates List {mode} == “double” ※ 1 ~ 1000 items 그레이드별 배율 리스트 (double 모드) 그레이드 값으로 인덱싱된 보상 배율의 배열로, 배정밀도 부동소수점수를 사용합니다. 인덱스 0의 항목이 그레이드 0의 배율, 인덱스 1이 그레이드 1의 배율이 됩니다. mode가 “double\"로 설정된 경우에 사용됩니다. ※ mode이(가) “double” 이면 필수 bigRates List {mode} == “big” ※ 1 ~ 1000 items 그레이드별 배율 리스트 (big 모드) 그레이드 값으로 인덱싱된 보상 배율의 배열로, 확장된 정밀도를 위해 문자열 표현 숫자를 사용합니다. 인덱스 0의 항목이 그레이드 0의 배율, 인덱스 1이 그레이드 1의 배율이 됩니다. 매우 큰 수치 계산이 필요한 게임을 위해 mode가 “big\"으로 설정된 경우에 사용됩니다. ※ mode이(가) “big” 이면 필수","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Grade 마스터 데이터 레퍼런스","url":"/ko/api_reference/grade/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2024-04-25\" , \"guildModels\" : [ { \"name\" : \"[string]길드 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"defaultMaximumMemberCount\" : \"[int]기본 최대 멤버 수\" , \"maximumMemberCount\" : \"[int]최대 멤버 수 상한\" , \"inactivityPeriodDays\" : \"[int]무활동 기간(일수)\" , \"roles\" : [ { \"name\" : \"[string]롤 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"policyDocument\" : \"[string]정책 문서\" } ], \"guildMasterRole\" : \"[string]길드 마스터 롤 이름\" , \"guildMemberDefaultRole\" : \"[string]기본 멤버 롤 이름\" , \"rejoinCoolTimeMinutes\" : \"[int]재가입 쿨타임(분)\" , \"maxConcurrentJoinGuilds\" : \"[int?]동시 가입 가능 길드 최대 수\" , \"maxConcurrentGuildMasterCount\" : \"[int?]동시 존재 가능 길드 마스터 최대 수\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2024-04-25 마스터 데이터 포맷 버전 guildModels List ~ 100 items 길드 모델 길드 모델이란 길드에 가입 가능한 최대 인원수 설정 및 길드 내 직책별 권한 설정을 가지는 엔티티입니다. 모델 GuildModel 길드 모델 길드 모델이란 길드에 가입 가능한 최대 인원수 설정 및 길드 내 직책별 권한 설정을 가지는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 guildModelId string ※ ~ 1024자 길드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. defaultMaximumMemberCount int  1 ~ 2147483646 기본 최대 멤버 수 새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다. maximumMemberCount int  1 ~ 2147483646 최대 멤버 수 상한 길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다. inactivityPeriodDays int 7 1 ~ 365 무활동 기간(일수) 길드 마스터의 무활동이 이 일수를 초과한 경우, 남은 길드 멤버 중에서 새로운 길드 마스터가 자동으로 선출됩니다. 길드 마스터가 플레이를 중단했을 때 길드가 관리 불능 상태가 되는 것을 방지합니다. roles List  1 ~ 10 items 롤 모델 리스트 이 타입의 길드 내에서 이용 가능한 롤 정의 리스트입니다. guildMasterRole 및 guildMemberDefaultRole에서 참조되는 롤을 최소한 포함해야 합니다. 각 롤은 정책 문서를 통해 고유한 권한 집합을 정의합니다. 최대 10개의 롤을 정의할 수 있습니다. guildMasterRole string  ~ 128자 길드 마스터 롤 이름 길드 마스터에게 할당되는 롤의 이름입니다. roles 리스트에 정의된 롤을 참조해야 합니다. 길드 마스터는 일반적으로 참가 신청 승인, 멤버 추방, 롤 변경, 길드 설정 갱신 등 길드를 관리하는 모든 권한을 가집니다. guildMemberDefaultRole string  ~ 128자 기본 멤버 롤 이름 새로운 길드 멤버가 가입할 때 자동으로 할당되는 롤의 이름입니다. roles 리스트에 정의된 롤을 참조해야 합니다. 이는 길드 마스터에 의한 롤 변경 이전, 일반 멤버의 기본 권한 집합입니다. rejoinCoolTimeMinutes int 0 0 ~ 2147483646 재가입 쿨타임(분) 사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다. maxConcurrentJoinGuilds int 1 ~ 10 동시 가입 가능 길드 최대 수 사용자가 이 타입의 길드에 동시에 멤버로 가입할 수 있는 최대 수입니다. 플레이어가 여러 길드에 동시에 소속될 수 있는 디자인(예: 전투 길드와 소셜 길드)을 가능하게 합니다. 값은 1에서 10 사이입니다. maxConcurrentGuildMasterCount int 1 ~ 100 동시 존재 가능 길드 마스터 최대 수 하나의 길드에 동시에 존재할 수 있는 길드 마스터의 최대 인원수입니다. 여러 플레이어가 길드 마스터의 책임과 권한을 공유하는 공동 리더십 디자인을 가능하게 합니다. 값은 1에서 100 사이입니다. RoleModel 롤 모델 롤 모델은 길드 내에서의 역할을 정의하고, 각 역할별로 실행할 수 있는 처리에 관한 권한을 설정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. policyDocument string  ~ 10240자 정책 문서 이 역할의 권한을 정의하는 JSON 형식의 정책 문서입니다. 이 역할에 할당된 멤버에 대해 어떤 길드 조작(참가 요청 승인/거부, 멤버 추방, 길드 정보 업데이트, 멤버 역할 변경 등)이 허용되거나 거부되는지를 지정합니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Guild 마스터 데이터 레퍼런스","url":"/ko/api_reference/guild/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2023-06-06\" , \"categoryModels\" : [ { \"name\" : \"[string]카테고리 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"rewardIntervalMinutes\" : \"[int]보상 간격(분)\" , \"defaultMaximumIdleMinutes\" : \"[int]기본 최대 방치 시간(분)\" , \"rewardResetMode\" : \"[문자열 열거형]보상 리셋 모드\" , \"acquireActions\" : [ { \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] } ], \"idlePeriodScheduleId\" : \"[string?]방치 기간 스케줄ID\" , \"receivePeriodScheduleId\" : \"[string?]수취 기간 스케줄ID\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2023-06-06 마스터 데이터 포맷 버전 categoryModels List ~ 100 items 카테고리 모델 카테고리 모델이란, 방치 보상을 얻을 수 있는 대기 카테고리를 설정하는 엔티티입니다. 설정에는 대기 시간별 보상이나 최대 대기 시간 등의 정보가 포함됩니다. 모델 CategoryModel 카테고리 모델 카테고리 모델이란, 방치 보상을 얻을 수 있는 대기 카테고리를 설정하는 엔티티입니다. 설정에는 대기 시간별 보상이나 최대 대기 시간 등의 정보가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. rewardIntervalMinutes int  0 ~ 2147483646 보상 간격(분) 각 방치 보상 사이의 시간 간격(분)입니다. 예를 들어 60으로 설정하면, 사용자는 방치 시간 60분마다 보상 1유닛을 획득합니다. 보상의 총 개수는 (경과 방치 분수) / rewardIntervalMinutes로 계산되며, acquireActions 배열을 순환합니다. defaultMaximumIdleMinutes int  0 ~ 2147483646 기본 최대 방치 시간(분) 이 카테고리의 새로운 스테이터스에 대한 기본 최대 방치 시간(분)입니다. 이 제한을 초과하는 방치 시간은 추가 보상을 축적하지 않습니다. 이 값은 스테이터스 생성 시 각 스테이터스의 maximumIdleMinutes 에 복사되며, 입수 액션을 통해 사용자별로 확장할 수 있습니다. rewardResetMode 문자열 열거형 enum {   “Reset”,   “CarryOver” } “Reset” 보상 리셋 모드 사용자가 보상을 받은 후 방치 시간의 처리 방법을 결정합니다. “Reset\"은 방치 시간을 0으로 되돌리며, 부분적인 간격 시간은 소실됩니다. “CarryOver\"는 추가 보상을 얻기에 부족했던 나머지 시간을 유지하여 다음 보상 사이클에 반영됩니다. 정의 설명 Reset 대기 시간을 0으로 리셋 CarryOver 보상을 받기에 부족했던 나머지 시간을 이월 acquireActions List [] 1 ~ 100 items 대기 시간마다 얻을 수 있는 입수 액션 리스트 대기 시간을 “X분\"이라고 가정하면 “X / rewardIntervalMinutes\"가 보상을 받을 수 있는 횟수가 되지만, 여기서 지정한 배열의 요소를 반복함으로써 대기 시간마다 다른 보상을 부여할 수 있습니다. idlePeriodScheduleId string ~ 1024자 방치 기간 스케줄ID 방치 시간이 축적되는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 방치 시간이 카운트됩니다. 이벤트가 반복되는 경우, 스테이터스는 반복 횟수를 추적하고 새로운 사이클이 시작될 때 방치 시간을 리셋하여 이벤트 기간마다 보상이 계산되도록 합니다. receivePeriodScheduleId string ~ 1024자 수취 기간 스케줄ID 사용자가 축적된 방치 보상을 받을 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 설정하면 이벤트가 활성 상태인 동안에만 보상 수취가 허용됩니다. 이를 통해 방치 축적 기간과는 별도의 기간 한정 보상 수취 기간을 설정할 수 있습니다. AcquireActionList 입수 액션 리스트 하나의 보상 간격에서 함께 지급되는 여러 입수 액션을 그룹화하는 래퍼입니다. 각 AcquireActionList는 카테고리 모델의 acquireActions 배열 내 하나의 보상 주기에 대응하며, 각 간격마다 서로 다른 보상 조합을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 0 ~ 100 items 입수 액션 리스트 이 보상 간격이 트리거될 때 함께 실행되는 입수 액션의 집합입니다. 여러 액션을 조합하여 하나의 방치 보상 주기에서 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 리스트당 최대 100개의 액션입니다. AcquireAction 입수 액션 방치 보상으로 사용되는 단일 입수 액션을 나타냅니다. 액션 타입(예: 아이템 추가, 통화 증가)과 그 요청 파라미터로 구성됩니다. 방치 보상을 수령하면 이러한 액션들이 트랜잭션으로 조합되어 실행되며, 사용자에게 보상이 지급됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Idle 마스터 데이터 레퍼런스","url":"/ko/api_reference/idle/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2020-03-12\" , \"globalMessages\" : [ { \"name\" : \"[string]글로벌 메시지 이름\" , \"metadata\" : \"[string]메타데이터\" , \"readAcquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"expiresTimeSpan\" : { \"days\" : \"[int]일수\" , \"hours\" : \"[int]시간\" , \"minutes\" : \"[int]분\" }, \"messageReceptionPeriodEventId\" : \"[string?]메시지 수신 기간 이벤트 ID\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2020-03-12 마스터 데이터 포맷 버전 globalMessages List ~ 1000 items 글로벌 메시지 글로벌 메시지는 게임 플레이어 전체에게 메시지를 전달하는 구조입니다. 글로벌 메시지에는 유효 기간을 설정할 수 있으며, 각 게임 플레이어는 글로벌 메시지를 수신하는 처리를 실행함으로써 유효 기간 내의 글로벌 메시지 중 아직 수신하지 않은 메시지를 자신의 메시지함에 복사합니다. 모델 GlobalMessage 글로벌 메시지 글로벌 메시지는 게임 플레이어 전체에게 메시지를 전달하는 구조입니다. 글로벌 메시지에는 유효 기간을 설정할 수 있으며, 각 게임 플레이어는 글로벌 메시지를 수신하는 처리를 실행함으로써 유효 기간 내의 글로벌 메시지 중 아직 수신하지 않은 메시지를 자신의 메시지함에 복사합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 globalMessageId string ※ ~ 1024자 전체 사용자 대상 메시지 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 글로벌 메시지 이름 글로벌 메시지 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 표시 파라미터 등을 포함하는 JSON 문자열 등, 글로벌 메시지의 내용을 나타내는 임의의 데이터입니다. 사용자가 이 글로벌 메시지를 수신하면 메타데이터는 수신함 내의 개별 메시지로 복사됩니다. GS2는 이 값을 해석하지 않습니다. 최대 4096자입니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 획득 액션 이 글로벌 메시지에서 복사된 메시지를 사용자가 개봉했을 때 실행되는 획득 액션 목록입니다. 이 액션들은 메타데이터와 함께 각 사용자의 개별 메시지로 복사됩니다. 글로벌 메시지당 최대 100개의 액션입니다. expiresTimeSpan TimeSpan 유효 기한까지의 기간 사용자가 이 글로벌 메시지를 수신(복사)한 시각부터, 복사된 메시지가 만료되어 수신함에서 자동 삭제되기까지의 기간입니다. 일, 시간, 분의 조합으로 지정합니다. 유효 기한에 도달하면 메시지는 읽음 상태와 관계없이 삭제되며, 아직 받지 않은 첨부 보상도 함께 삭제됩니다. messageReceptionPeriodEventId string ~ 1024자 메시지 수신 기간 이벤트 ID 이 글로벌 메시지를 수신(사용자의 수신함에 복사)할 수 있는 시간대를 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외에는 사용자가 글로벌 메시지 수신 작업을 실행하더라도 메시지가 전달되지 않습니다. 기간 한정 이벤트 공지나 시즌 캠페인 보상에 유용합니다. TimeSpan 타임스팬 일, 시간, 분의 조합으로 기간을 나타냅니다. 수신 시각을 기준으로 한 메시지의 유효 기간을 정의하는 데 사용됩니다. 예를 들어 7일, 0시간, 0분의 타임스팬은 사용자가 수신한 후 정확히 1주일 후에 메시지가 만료됨을 의미합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 days int 0 0 ~ 365 일수 이 타임스팬의 일수입니다. 시간, 분과 조합하여 총 기간이 계산됩니다. 최대 365일입니다. hours int 0 0 ~ 24 시간 이 타임스팬의 시간 수입니다. 일수, 분과 조합하여 총 기간이 계산됩니다. 최대 24시간입니다. minutes int 0 0 ~ 60 분 이 타임스팬의 분수입니다. 일수, 시간과 조합하여 총 기간이 계산됩니다. 최대 60분입니다. AcquireAction 획득 액션 보상으로 메시지에 첨부되는 단일 획득 액션을 나타냅니다. 액션 타입(예: 인벤토리에 아이템 추가, 통화 증가)과 그 요청 파라미터로 구성됩니다. 메시지가 개봉되면 이 액션들이 트랜잭션으로 조립되어 실행되고, 사용자에게 보상이 지급됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Inbox 마스터 데이터 레퍼런스","url":"/ko/api_reference/inbox/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-02-05\" , \"inventoryModels\" : [ { \"name\" : \"[string]인벤토리 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"initialCapacity\" : \"[int]초기 크기\" , \"maxCapacity\" : \"[int]최대 크기\" , \"protectReferencedItem\" : \"[bool?]참조된 아이템 보호\" , \"itemModels\" : [ { \"name\" : \"[string]아이템 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"stackingLimit\" : \"[long]스택 가능한 최대 수량\" , \"allowMultipleStacks\" : \"[bool]복수 스택 허용\" , \"sortValue\" : \"[int]표시 순서\" } ] } ], \"simpleInventoryModels\" : [ { \"name\" : \"[string]심플 인벤토리 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"simpleItemModels\" : [ { \"name\" : \"[string]심플 아이템 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" } ] } ], \"bigInventoryModels\" : [ { \"name\" : \"[string]거대 인벤토리 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"bigItemModels\" : [ { \"name\" : \"[string]거대 아이템 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-02-05 마스터 데이터 포맷 버전 inventoryModels List ~ 50 items 인벤토리 모델 인벤토리는 게임 플레이어가 소유한 아이템을 담는 가방과 같은 것입니다. 인벤토리에는 용량을 설정할 수 있으며, 용량을 초과하여 소유할 수 없습니다. simpleInventoryModels List ~ 50 items 심플 인벤토리 모델 일반적인 InventoryModel에서는 인벤토리 안에 저장할 수 있는 아이템의 용량 제한을 설정할 수 있었습니다. 하지만 심플 인벤토리에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량을 보유할 뿐입니다. 다만 심플 인벤토리에서는 여러 아이템의 증감 처리를 한 번의 처리로 실행할 수 있는 API를 사용할 수 있습니다. bigInventoryModels List ~ 50 items 거대 인벤토리 모델 일반적인 InventoryModel이나 SimpleInventoryModel에서는 인벤토리에 저장할 수 있는 아이템의 수가 int64 범위로 제한되었습니다. 인플레이션 계열 게임에서는 더 넓은 범위의 값이 필요한 경우가 있습니다. 거대 인벤토리 모델에서는 인벤토리에 저장할 수 있는 아이템의 수가 최대 1024자리의 정수값을 가질 수 있습니다. 모델 InventoryModel 인벤토리 모델 인벤토리는 게임 플레이어가 소유한 아이템을 담는 가방과 같은 것입니다. 인벤토리에는 용량을 설정할 수 있으며, 용량을 초과하여 소유할 수 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialCapacity int  0 ~ 2147483646 초기 크기 인벤토리가 처음 생성될 때 사용자에게 제공되는 인벤토리 칸의 수입니다. 각 칸에는 하나의 아이템 스택을 저장할 수 있습니다. 사용자는 게임 플레이 액션을 통해 maxCapacity까지 용량을 확장할 수 있습니다. maxCapacity int  0 ~ 2147483646 최대 크기 사용자가 확장할 수 있는 인벤토리 칸의 상한값입니다. 이 값을 초과하여 용량을 늘릴 수 없습니다. 모든 칸이 사용 중이고 아이템을 더 이상 스택할 수 없는 경우, 오버플로우 스크립트가 초과분을 처리하지 않는 한 입수는 실패합니다. protectReferencedItem bool? false 참조된 아이템 보호 활성화하면 (referenceOf 메커니즘을 통해) 참조가 등록된 아이템 세트는 소비하거나 삭제할 수 없게 됩니다. 다른 시스템에서 사용 중인 아이템(예: 장착 중인 장비, 편성에 연결된 아이템)이 실수로 삭제되는 것을 방지합니다. itemModels List [] 1 ~ 1000 items 아이템 모델 목록 이 인벤토리에 저장할 수 있는 아이템의 종류입니다. 각 아이템 모델은 한 종류의 아이템에 대한 스택 및 입수 동작을 정의합니다. 인벤토리 모델당 최대 1000개의 아이템 모델까지 설정할 수 있습니다. ItemModel 아이템 모델 아이템은 포션 ×99 처럼, 하나의 인벤토리 칸에 여러 개를 모아서 소지할 수 있습니다. 이렇게 한 칸에 여러 개를 모으는 것을 “스택\"이라고 하며, 아이템마다 스택 가능한 상한 수를 설정할 수 있습니다. 스택 상한에 도달했을 때의 동작도 아이템마다 설정할 수 있습니다. 구체적으로는 다음 중 하나를 선택할 수 있습니다: 새로운 인벤토리 칸을 추가하여 추가로 소지할 수 있도록 한다 상한에 도달했으므로 더 이상 입수할 수 없도록 한다 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 아이템 모델 이름 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 GS2-Enhance에는 GS2-Inventory와 연동하여 강화를 수행하는 메커니즘이 있으며, ItemModel의 메타데이터에 JSON 형식으로 강화 소재로 사용했을 때의 경험치량을 설정합니다. 자세한 내용은 마이크로서비스 소개 / GS2-Enhance 항목에서 설명합니다. stackingLimit long  1 ~ 9223372036854775805 스택 가능한 최대 수량 하나의 인벤토리 칸(스택)에 보관할 수 있는 이 아이템의 최대 수입니다. 이 상한에 도달하면 allowMultipleStacks 설정에 따라 새로운 칸이 할당되거나 추가 입수가 차단됩니다. allowMultipleStacks bool  복수 스택 허용 활성화하면 스택 상한에 도달했을 때 새로운 인벤토리 칸이 자동으로 할당되어 이 아이템의 추가 수량을 저장합니다(추가 용량을 소비합니다). 비활성화하면 기존 칸에서 스택 상한에 도달한 시점에 입수가 차단됩니다. sortValue int  0 ~ 2147483646 표시 순서 인벤토리 내 아이템을 표시용으로 정렬하기 위한 수치입니다. 값이 작을수록 먼저 표시됩니다. 이 값은 ItemSet 레코드에도 복사되어 소지 아이템의 일관된 정렬을 가능하게 합니다. SimpleInventoryModel 심플 인벤토리 모델 일반적인 InventoryModel에서는 인벤토리 안에 저장할 수 있는 아이템의 용량 제한을 설정할 수 있었습니다. 하지만 심플 인벤토리에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량을 보유할 뿐입니다. 다만 심플 인벤토리에서는 여러 아이템의 증감 처리를 한 번의 처리로 실행할 수 있는 API를 사용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 심플 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. simpleItemModels List [] 1 ~ 1000 items 심플 아이템 모델 목록 이 심플 인벤토리에 저장할 수 있는 아이템의 종류입니다. 일반적인 인벤토리와 달리 심플 아이템에는 스택 상한이나 용량 제약이 없습니다. 심플 인벤토리 모델당 최대 1000개의 아이템 모델을 사용할 수 있습니다. SimpleItemModel 심플 아이템 모델 ItemModel에서는 스택할 수 있는 수량의 최댓값을 설정할 수 있어, 일정 수를 초과하는 경우 여러 스택으로 나누는 구현이 가능했습니다. 심플 아이템에는 그러한 기능이 없으며, 단순히 아이템의 소지 수량만을 보관합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 심플 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 심플 아이템 모델 이름 심플 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. BigInventoryModel 거대 인벤토리 모델 일반적인 InventoryModel이나 SimpleInventoryModel에서는 인벤토리에 저장할 수 있는 아이템의 수가 int64 범위로 제한되었습니다. 인플레이션 계열 게임에서는 더 넓은 범위의 값이 필요한 경우가 있습니다. 거대 인벤토리 모델에서는 인벤토리에 저장할 수 있는 아이템의 수가 최대 1024자리의 정수값을 가질 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 inventoryModelId string ※ ~ 1024자 거대 인벤토리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. bigItemModels List [] 1 ~ 1000 items 거대 아이템 모델 목록 이 거대 인벤토리에 저장할 수 있는 아이템의 종류입니다. 각 거대 아이템 모델은 최대 1024자리의 정수 문자열로 표현되는 수량을 보유할 수 있습니다. 거대 인벤토리 모델당 최대 1000개의 아이템 모델까지 설정할 수 있습니다. BigItemModel 거대 아이템 모델 거대 아이템 모델은 거대 인벤토리 모델에 저장되는 거대 아이템을 정의하는 모델입니다. 거대 아이템은 소지 수량을 int64 범위를 초과하여 보유할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 itemModelId string ※ ~ 1024자 거대 아이템 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Inventory 마스터 데이터 레퍼런스","url":"/ko/api_reference/inventory/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-04-05\" , \"limitModels\" : [ { \"name\" : \"[string]횟수 제한 모델명\" , \"metadata\" : \"[string?]메타데이터\" , \"resetType\" : \"[문자열 열거형]리셋 타이밍\" , \"resetDayOfMonth\" : \"[int]리셋 날짜\" , \"resetDayOfWeek\" : \"[문자열 열거형]리셋 요일\" , \"resetHour\" : \"[int]리셋 시각\" , \"anchorTimestamp\" : \"[long]경과 일수를 계산하는 기준 일시\" , \"days\" : \"[int]리셋 일수\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-04-05 마스터 데이터 포맷 버전 limitModels List ~ 100 items 횟수 제한 모델 횟수 제한 모델에는 사용 횟수를 리셋하는 타이밍을 설정할 수 있습니다. 리셋 간격은 “매일”, “매주”, “매월”, “리셋하지 않음”, “일정 일수마다” 5가지 중에서 선택할 수 있습니다. 또한, 횟수 제한의 최대값은 마스터 데이터 쪽에서는 고정하지 않습니다. 이는 게임 내 컨텍스트에 따라 허용되는 최대 횟수를 동적으로 변경할 수 있도록 하기 위함입니다. 예를 들어 스텝업 가챠처럼, - 구매 횟수 카운터가 3회 미만일 때 구매할 수 있는 상품 - 위 상품을 구매할 수 없을 때, 구매 횟수 카운터가 5회 미만이면 구매할 수 있는 다른 상품 과 같이, 상황에 따라 “최대 횟수\"를 전환할 수 있는 설계를 상정하고 있습니다. 모델 LimitModel 횟수 제한 모델 횟수 제한 모델에는 사용 횟수를 리셋하는 타이밍을 설정할 수 있습니다. 리셋 간격은 “매일”, “매주”, “매월”, “리셋하지 않음”, “일정 일수마다” 5가지 중에서 선택할 수 있습니다. 또한, 횟수 제한의 최대값은 마스터 데이터 쪽에서는 고정하지 않습니다. 이는 게임 내 컨텍스트에 따라 허용되는 최대 횟수를 동적으로 변경할 수 있도록 하기 위함입니다. 예를 들어 스텝업 가챠처럼, 구매 횟수 카운터가 3회 미만일 때 구매할 수 있는 상품 위 상품을 구매할 수 없을 때, 구매 횟수 카운터가 5회 미만이면 구매할 수 있는 다른 상품 과 같이, 상황에 따라 “최대 횟수\"를 전환할 수 있는 설계를 상정하고 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 limitModelId string ※ ~ 1024자 횟수 제한 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 횟수 제한 모델명 횟수 제한 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” }  리셋 타이밍 이 횟수 제한 모델 하위의 카운터 값이 자동으로 0으로 리셋되는 타이밍을 결정합니다. notReset(영구적, 리셋 없음), daily(매일 지정된 시각에 리셋), weekly(지정된 요일에 리셋), monthly(지정된 날짜에 리셋), days(기준 일시로부터 일정 일수마다 리셋) 중에서 선택합니다. 모든 시각은 UTC입니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋 날짜 resetType이 “monthly\"인 경우 카운터가 리셋되는 날짜(일)입니다. 1~31 사이의 값이 유효합니다. 지정한 날짜가 해당 월의 일수를 초과하는 경우(예: 2월의 31일), 해당 월의 마지막 날에 리셋됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋 요일 resetType이 “weekly\"인 경우 카운터가 리셋되는 요일입니다. 이 요일의 resetHour(UTC)로 지정된 시각에 리셋됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 daily, weekly, monthly 리셋 타입에서 카운터가 리셋되는 UTC 시각(0~23)입니다. 예를 들어 값이 0이면 UTC 자정에 카운터가 리셋됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋 일수 resetType이 “days\"인 경우 카운터 리셋 간격(일수)입니다. 리셋 주기는 anchorTimestamp를 기준으로 계산됩니다. 예를 들어 days가 7이고 anchorTimestamp가 월요일 정오라면, 매주 월요일 정오에 카운터가 리셋됩니다. ※ resetType이(가) “days” 이면 필수","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Limit 마스터 데이터 레퍼런스","url":"/ko/api_reference/limit/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2023-07-11\" , \"bonusModels\" : [ { \"name\" : \"[string]로그인 보너스 모델명\" , \"metadata\" : \"[string?]메타데이터\" , \"mode\" : \"[문자열 열거형]모드\" , \"periodEventId\" : \"[string?]기간 이벤트 GRN\" , \"resetHour\" : \"[int]리셋 시간(UTC)\" , \"repeat\" : \"[문자열 열거형]반복\" , \"rewards\" : [ { \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] } ], \"missedReceiveRelief\" : \"[문자열 열거형]미수령 구제 기능\" , \"missedReceiveReliefVerifyActions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"missedReceiveReliefConsumeActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2023-07-11 마스터 데이터 포맷 버전 bonusModels List ~ 100 items 로그인 보너스 모델 로그인 보너스 모델에는 로그인 보너스의 배포 스케줄을 설정합니다. 배포 스케줄에는 《스케줄 모드》와 《스트리밍 모드》가 있습니다. 스케줄 모드에서는 GS2-Schedule의 이벤트 지정이 필수이며, 해당 이벤트의 시작일로부터 경과한 일수에 따라 보너스를 배포합니다. 도중에 놓친 날짜가 발생한 경우, 그 날의 보너스는 배포되지 않습니다. 스트리밍 모드에서는 매일 보너스에 설정된 보상을 처음부터 순서대로 배포합니다. 스트리밍 모드에서는 반복 설정이 가능합니다. 이 경우 스트림의 끝에 도달하면 다시 처음부터 배포를 시작합니다. 스케줄 모드·스트리밍 모드 모두 미수령 구제 기능이 있습니다. 일정한 비용을 지불함으로써 놓친 보너스를 수령할 수 있습니다. 단, GS2-Schedule의 이벤트가 연결되어 있는 경우, 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없습니다. 미수령 구제 기능은 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 스케줄 모드·스트리밍 모드 모두, 설정 가능한 보너스의 최대 일수는 100일입니다. 모델 BonusModel 로그인 보너스 모델 로그인 보너스 모델에는 로그인 보너스의 배포 스케줄을 설정합니다. 배포 스케줄에는 《스케줄 모드》와 《스트리밍 모드》가 있습니다. 스케줄 모드에서는 GS2-Schedule의 이벤트 지정이 필수이며, 해당 이벤트의 시작일로부터 경과한 일수에 따라 보너스를 배포합니다. 도중에 놓친 날짜가 발생한 경우, 그 날의 보너스는 배포되지 않습니다. 스트리밍 모드에서는 매일 보너스에 설정된 보상을 처음부터 순서대로 배포합니다. 스트리밍 모드에서는 반복 설정이 가능합니다. 이 경우 스트림의 끝에 도달하면 다시 처음부터 배포를 시작합니다. 스케줄 모드·스트리밍 모드 모두 미수령 구제 기능이 있습니다. 일정한 비용을 지불함으로써 놓친 보너스를 수령할 수 있습니다. 단, GS2-Schedule의 이벤트가 연결되어 있는 경우, 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없습니다. 미수령 구제 기능은 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 스케줄 모드·스트리밍 모드 모두, 설정 가능한 보너스의 최대 일수는 100일입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 bonusModelId string ※ ~ 1024자 로그인 보너스 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 로그인 보너스 모델명 로그인 보너스 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “schedule”,   “streaming” }  모드 로그인 보너스의 배포 스케줄 종류를 지정합니다. “schedule” 모드에서는 GS2-Schedule의 이벤트 시작일로부터 경과한 일수를 기준으로 보상이 배포됩니다. “streaming” 모드에서는 달력 날짜와 관계없이 매일 처음부터 순서대로 보상이 배포됩니다. 정의 설명 schedule 스케줄 모드 streaming 스트리밍 모드 periodEventId string ~ 1024자 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 로그인 보너스를 활성화할 기간을 나타내는 GS2-Schedule의 이벤트 GRN입니다. 스케줄 모드에서는 필수이며, 보상 배포의 경과 일수를 계산하는 기준이 되는 시작일을 결정합니다. 스트리밍 모드에서는 생략 가능하지만, 지정한 경우 이벤트 시작일로부터 경과한 일수보다 앞선 보너스는 받을 수 없게 됩니다. resetHour int {periodEventId} == \"\" ※ 0 ~ 23 리셋 시간(UTC) 수령 플래그가 리셋되는 시각(0~23, UTC)입니다. 로그인 보너스에서 날짜가 바뀌는 시점을 결정합니다. periodEventId가 지정되지 않은 경우에만 필요합니다. 이벤트가 설정되어 있는 경우, 리셋 시점은 이벤트의 스케줄을 따릅니다. ※ periodEventId이(가) \"\" 이면 필수 repeat 문자열 열거형 enum {   “enabled”,   “disabled” } {mode} == “streaming” ※ 반복 모든 보상을 배포한 후, 처음부터 다시 배포할지 여부입니다. 스트리밍 모드에서만 유효합니다. 활성화하면 마지막 보상을 배포한 후 첫 번째 보상으로 돌아가 반복됩니다. 주의: 반복이 활성화된 경우, 미수령 구제 기능은 사용할 수 없습니다. 정의 설명 enabled 활성화 disabled 비활성화 ※ mode이(가) “streaming” 이면 필수 rewards List 0 ~ 100 items 보상 목록 날짜별 보상의 순서가 지정된 목록입니다. 각 항목은 하루치 로그인 보너스에 대응하며, 인덱스 0부터 순서대로 배포됩니다. 스케줄 모드에서는 인덱스가 이벤트 시작일로부터 경과한 일수에 대응합니다. 스트리밍 모드에서는 인덱스가 로그인 일수에 대응합니다. 최대 100개 항목까지 설정할 수 있습니다. missedReceiveRelief 문자열 열거형 enum {   “enabled”,   “disabled” } “disabled” 미수령 구제 기능 놓친 보너스의 구제 기능을 활성화할지 여부입니다. 활성화하면 사용자는 지정된 비용(소비 액션)을 지불함으로써 받지 못한 보너스를 소급하여 수령할 수 있습니다. 필요에 따라 구제를 허용하기 전에 조건을 확인하는 검증 액션도 설정할 수 있습니다. 스트리밍 모드이면서 반복이 활성화된 경우에는 사용할 수 없습니다. 기본값은 “disabled\"입니다. 정의 설명 enabled 활성화 disabled 비활성화 missedReceiveReliefVerifyActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 검증 액션 목록 미수령 구제를 허용하기 전에 실행되는 검증 액션의 목록입니다. 구제 처리 전에 사용자의 자격 등 전제 조건을 확인합니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 missedReceiveReliefConsumeActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 소비 액션 목록 놓친 보너스를 구제하기 위해 사용자가 지불해야 하는 비용을 정의하는 소비 액션의 목록입니다. 예를 들어 게임 내 화폐나 아이템을 구제 비용으로 소비하도록 설정할 수 있습니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 Reward 보상 로그인 보너스의 하루치 보상 설정을 나타냅니다. 각 Reward에는 사용자가 수신할 항목(아이템, 화폐, 경험치 등)을 정의하는 입수 액션 목록이 포함됩니다. BonusModel의 rewards 배열은 하루당 하나의 Reward를 보유하며, 순서대로 배포됩니다. 보상 값은 버프 시스템(BonusModelBuff)을 통해 실행 시점에 변경할 수 있으며, 입수 액션에 배율을 적용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List  1 ~ 10 items 입수 액션 목록 이 날짜의 보상으로 사용자에게 부여되는 리소스를 정의하는 입수 액션 목록. 각 액션은 입수 액션(아이템 추가, 화폐 부여 등)과 그 요청 파라미터를 지정합니다. 보상당 최소 1개, 최대 10개의 액션을 설정할 수 있습니다. ConsumeAction 소비 액션 소비 액션의 구조를 통해 사용자로부터 리소스를 소비하는 액션을 정의합니다. 미수령 보너스 구제에서 사용자가 지불해야 하는 비용(화폐 차감, 아이템 소비 등)을 지정하는 데 사용됩니다. action 필드는 소비 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 작업을 실행하기 전에 조건을 검증하는 액션을 정의합니다. 미수령 보너스 구제에서 구제를 허용하기 전에 전제 조건(사용자 자격, 리소스 이용 가능 여부 등)을 확인하는 데 사용됩니다. action 필드는 검증 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 획득 액션 획득 액션의 구조를 통해 사용자에게 리소스를 부여하는 액션을 정의합니다. 보상 내에서 사용되며, 사용자가 받는 것(인벤토리에 아이템 추가, 화폐 부여, 경험치 부여 등)을 지정합니다. action 필드는 획득 액션의 종류를 지정하고, request 필드에는 그에 대응하는 요청 매개변수가 포함됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-LoginReward 마스터 데이터 레퍼런스","url":"/ko/api_reference/login_reward/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-02-21\" , \"lotteryModels\" : [ { \"name\" : \"[string]추첨 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"mode\" : \"[문자열 열거형]추첨 모드\" , \"method\" : \"[문자열 열거형]추첨 방법\" , \"prizeTableName\" : \"[string]배출 확률 테이블 이름\" , \"choicePrizeTableScriptId\" : \"[string]배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GRN\" } ], \"prizeTables\" : [ { \"name\" : \"[string]배출 확률 테이블 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"prizes\" : [ { \"prizeId\" : \"[string]경품 ID\" , \"type\" : \"[string]경품 종류\" , \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"drawnLimit\" : \"[int?]최대 배출 수\" , \"limitFailOverPrizeId\" : \"[string]제한 시 페일오버 경품 ID\" , \"prizeTableName\" : \"[string]배출 확률 테이블의 이름\" , \"weight\" : \"[int]배출 가중치\" } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-02-21 마스터 데이터 포맷 버전 lotteryModels List ~ 100 items 추첨 모델 추첨 모델은 배출 방식과 배출 테이블의 참조 방법을 정의하는 엔티티입니다. 배출 방식은 2종류가 마련되어 있으며, 일반 추첨은 매번 일정한 확률로 추첨하는 방식이고, 박스 추첨은 상자 안에 미리 정해진 수량의 경품이 들어 있어 추첨할 때마다 상자에서 경품을 꺼내는 추첨 방식입니다. 추첨 처리를 수행할 때 배출 확률 테이블을 사용하는데, GS2-Script를 사용하면 여러 번 추첨을 실행할 때 배출 확률 테이블 일부만 다른 테이블로 교체할 수 있습니다. 이 구조를 이용하면 10연 가챠에서 1회만 다른 추첨 확률 테이블을 적용하는 것이 가능해집니다. prizeTables List ~ 100 items 배출 확률 테이블 경품에는 입수 액션을 직접 지정하거나, 다른 배출 확률 테이블을 참조하도록 설정할 수도 있습니다. 배출 확률 테이블을 중첩시키면, 예를 들어 1단계에서 SSR / SR / R 등의 레어도를 추첨하고, 2단계에서 해당 레어도에 대응하는 구체적인 콘텐츠를 추첨하는 등의 설정이 가능합니다. 이 구조를 통해 게임 전체의 레어도별 배출 확률을 관리하고 조정하기가 더 쉬워집니다. 모델 PrizeTable 배출 확률 테이블 경품에는 입수 액션을 직접 지정하거나, 다른 배출 확률 테이블을 참조하도록 설정할 수도 있습니다. 배출 확률 테이블을 중첩시키면, 예를 들어 1단계에서 SSR / SR / R 등의 레어도를 추첨하고, 2단계에서 해당 레어도에 대응하는 구체적인 콘텐츠를 추첨하는 등의 설정이 가능합니다. 이 구조를 통해 게임 전체의 레어도별 배출 확률을 관리하고 조정하기가 더 쉬워집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 prizeTableId string ※ ~ 1024자 배출 확률 테이블 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 배출 확률 테이블 이름 배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. prizes List  1 ~ 100 items 경품 리스트 이 배출 확률 테이블 내의 경품 리스트입니다. 각 경품은 배출 가중치(확률), 배출 시 실행할 액션, 그리고 선택적으로 배출 횟수 제한을 정의합니다. 각 경품의 실제 배출 확률은 해당 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다. Prize 경품 배출 확률 테이블 내 단일 경품 엔트리입니다. 경품은 입수 액션(아이템이나 통화의 부여 등)을 직접 지정하거나, 다른 배출 확률 테이블을 참조하여 중첩된 추첨을 수행할 수 있습니다. 각 경품에는 배출 가중치가 있으며, 배출되는 상대적 확률을 결정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 prizeId string  UUID ~ 36자 경품 ID 배출 확률 테이블 내에서 이 경품을 고유하게 식별하는 ID입니다. 배출 횟수 제한 추적 및 페일오버 경품 지정 시 참조에 사용됩니다. type 문자열 열거형 enum {   “action”,   “prize_table” }  경품 종류 이 경품이 직접 보상을 부여하는지, 다른 배출 확률 테이블에 위임하는지를 결정합니다. “action\"은 배출 시 실행할 입수 액션을 지정합니다. “prize_table\"은 다른 배출 확률 테이블을 참조하여 중첩된 추첨을 수행합니다(예: 1단계에서 희귀도를 결정하고, 2단계에서 구체적인 아이템을 결정). 정의 설명 action 경품의 입수 액션 prize_table 더욱 배출 확률 테이블을 지정하여 재추첨 acquireActions List {type} == “action” [] 1 ~ 100 items 입수 액션 리스트 이 경품이 배출될 때 실행할 입수 액션의 리스트입니다. 여러 액션을 지정하여 한 번에 여러 보상을 부여할 수 있습니다(예: 아이템과 통화를 동시에 부여). ※ type이(가) “action” 이면 활성화 drawnLimit int {type} == “action” 1 ~ 1000000 최대 배출 수 이 경품이 전체 사용자를 통틀어 배출될 수 있는 최대 횟수입니다. 제한에 도달하면 대신 페일오버 경품(limitFailOverPrizeId)이 배출됩니다. 잭팟 아이템 등 수량 한정 경품 구현에 사용됩니다. ※ type이(가) “action” 이면 활성화 limitFailOverPrizeId string {type} == “action” and {drawnLimit} \u003e 0 ※ ~ 32자 제한 시 페일오버 경품 ID 이 경품의 배출 횟수 제한(drawnLimit)에 도달했을 때 대신 배출할 경품의 ID입니다. 동일한 배출 확률 테이블 내의 다른 경품을 참조해야 합니다. ※ type이(가) “action\"이고 drawnLimit이(가) 0 보다 크면 필수 prizeTableName string {type} == “prize_table” ※ ~ 128자 배출 확률 테이블의 이름 추첨을 위임할 배출 확률 테이블의 이름입니다. 경품 타입이 “prize_table\"인 경우 중첩된 추첨에 사용됩니다. ※ type이(가) “prize_table” 이면 필수 weight int  1 ~ 2147483646 배출 가중치 배출 확률 테이블 내에서 이 경품의 상대적 가중치입니다. 실제 배출 확률은 이 경품의 가중치를 테이블 내 모든 경품의 가중치 합계로 나누어 산출됩니다. 예를 들어 3개의 경품의 가중치가 각각 70, 20, 10이라면 각각의 배출 확률은 70%, 20%, 10%가 됩니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 LotteryModel 추첨 모델 추첨 모델은 배출 방식과 배출 테이블의 참조 방법을 정의하는 엔티티입니다. 배출 방식은 2종류가 마련되어 있으며, 일반 추첨은 매번 일정한 확률로 추첨하는 방식이고, 박스 추첨은 상자 안에 미리 정해진 수량의 경품이 들어 있어 추첨할 때마다 상자에서 경품을 꺼내는 추첨 방식입니다. 추첨 처리를 수행할 때 배출 확률 테이블을 사용하는데, GS2-Script를 사용하면 여러 번 추첨을 실행할 때 배출 확률 테이블 일부만 다른 테이블로 교체할 수 있습니다. 이 구조를 이용하면 10연 가챠에서 1회만 다른 추첨 확률 테이블을 적용하는 것이 가능해집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 lotteryModelId string ※ ~ 1024자 추첨 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다. mode 문자열 열거형 enum {   “normal”,   “box” }  추첨 모드 경품의 추첨 방식을 선택합니다. “normal\"은 매번 일정한 확률로 추첨을 진행합니다(경품은 반복해서 배출됩니다). “box\"는 가상의 상자에 미리 정해진 수량의 경품을 넣어두고, 추첨할 때마다 상자에서 경품을 꺼냅니다(모든 경품이 최종적으로 배출되는 것이 보장됩니다). 정의 설명 normal 일반 추첨 box 박스 추첨 method 문자열 열거형 enum {   “prize_table”,   “script” }  추첨 방법 배출 확률 테이블의 참조 방법을 결정합니다. “prize_table\"은 정적으로 지정된 배출 확률 테이블을 사용합니다. “script\"는 GS2-Script를 사용하여 추첨 시점에 배출 확률 테이블을 동적으로 선택하며, 10연 가챠에서 1회만 다른 배출 확률 테이블을 적용하는 등의 시나리오를 실현할 수 있습니다. 정의 설명 prize_table 정적 배출 확률 테이블 script GS2-Script를 사용한 동적 배출 확률 테이블 prizeTableName string {method} == “prize_table” ※ ~ 128자 배출 확률 테이블 이름 이 추첨 모델에서 사용할 배출 확률 테이블의 이름입니다. 추첨 방법이 “prize_table\"인 경우 필수입니다. ※ method이(가) “prize_table” 이면 필수 choicePrizeTableScriptId string {method} == “script” ※ ~ 1024자 배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN Script 트리거 레퍼런스 - choicePrizeTable ※ method이(가) “script” 이면 필수","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Lottery 마스터 데이터 레퍼런스","url":"/ko/api_reference/lottery/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2020-06-24\" , \"ratingModels\" : [ { \"name\" : \"[string]레이팅 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"initialValue\" : \"[int]레이트 값의 초기값\" , \"volatility\" : \"[int]레이팅의 변동성\" } ], \"seasonModels\" : [ { \"name\" : \"[string]시즌 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"maximumParticipants\" : \"[int]최대 참가 인원수\" , \"experienceModelId\" : \"[string?]티어 관리용 경험치 모델 GRN\" , \"challengePeriodEventId\" : \"[string]챌린지 기간 이벤트 GRN\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2020-06-24 마스터 데이터 포맷 버전 ratingModels List ~ 50 items 레이팅 모델 GS2에서는 레이팅 알고리즘으로 Glicko-2를 채택하고 있습니다. Glicko-2에는 여러 파라미터가 있지만, GS2-Matchmaking에서는 이를 종합적으로 나타내는 변동성이라는 하나의 파라미터로 통합하고 있습니다. 변동성은 변화의 크기를 나타내는 파라미터로, 값이 클수록 레이팅 값의 변동 폭이 커집니다. seasonModels List ~ 50 items 시즌 모델 시즌 매치메이킹에서, 일정 기간 동안 유효한 영속 개더링의 기간·최대 참가 인원수·티어 연동 설정을 정의하는 마스터 데이터입니다. GS2-Schedule을 통해 기간을 관리하며, 필요에 따라 GS2-Experience와 연동하여 동일한 티어 내에서 영속 개더링을 형성합니다. 모델 RatingModel 레이팅 모델 GS2에서는 레이팅 알고리즘으로 Glicko-2를 채택하고 있습니다. Glicko-2에는 여러 파라미터가 있지만, GS2-Matchmaking에서는 이를 종합적으로 나타내는 변동성이라는 하나의 파라미터로 통합하고 있습니다. 변동성은 변화의 크기를 나타내는 파라미터로, 값이 클수록 레이팅 값의 변동 폭이 커집니다. 타입 활성화 조건 필수 기본값 값 제한 설명 ratingModelId string ※ ~ 1024자 레이팅 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이팅 모델 이름 레이팅 모델 고유의 이름. 영숫자 및 -(하이픈), _(밑줄), .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. initialValue int 1500 100 ~ 10000 레이트 값의 초기값 플레이어가 처음 레이팅이 적용된 매치메이킹에 참가할 때 부여되는 시작 레이트 값입니다. 기본값은 1500입니다. 모든 플레이어는 동일한 레이팅에서 시작하며, 대전 결과에 따라 조정됩니다. volatility int 100 1 ~ 20000 레이팅의 변동성 각 대전 후 레이트 값이 얼마나 변동하는지를 제어하는 Glicko-2의 파라미터입니다. 값이 클수록 레이팅의 변동 폭이 커져 더 빠르게 레이팅이 조정됩니다. 값이 작을수록 레이팅이 안정되어 완만하게 변화합니다. 기본값은 100입니다. SeasonModel 시즌 모델 시즌 매치메이킹에서, 일정 기간 동안 유효한 영속 개더링의 기간·최대 참가 인원수·티어 연동 설정을 정의하는 마스터 데이터입니다. GS2-Schedule을 통해 기간을 관리하며, 필요에 따라 GS2-Experience와 연동하여 동일한 티어 내에서 영속 개더링을 형성합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumParticipants int  2 ~ 1000 최대 참가 인원수 하나의 시즌 개더링에 참가할 수 있는 플레이어의 최대 인원수입니다. 이 상한에 도달하면 시즌 개더링은 만원 상태가 되어 더 이상 플레이어가 참가할 수 없게 됩니다. 2에서 1000 사이의 범위로 지정합니다. experienceModelId string ~ 1024자 티어 관리용 경험치 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 플레이어의 티어를 결정하기 위해 사용하는 GS2-Experience 경험치 모델의 GRN입니다. 이 경험치 모델에서의 플레이어 랭크가 매치메이킹의 티어로 사용되어, 비슷한 레벨의 플레이어끼리 그룹화됩니다. 지정하지 않으면 티어에 의한 그룹화가 비활성화되어, 레벨에 관계없이 모든 플레이어가 매칭됩니다. challengePeriodEventId string  ~ 1024자 챌린지 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 시즌의 유효 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 이벤트가 활성화되어 있는 동안에만 시즌 개더링의 생성·참가가 가능합니다. 이벤트 기간이 종료되면 시즌이 종료되어 새로운 매치메이킹이 불가능해집니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Matchmaking 마스터 데이터 레퍼런스","url":"/ko/api_reference/matchmaking/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2022-08-28\" , \"areaModels\" : [ { \"name\" : \"[string]에어리어 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"layerModels\" : [ { \"name\" : \"[string]레이어 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" } ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2022-08-28 마스터 데이터 포맷 버전 areaModels List ~ 50 items 에어리어는 공간을 분할하는 것으로, 같은 좌표라도 에어리어가 다르면 별도의 공간으로 취급할 수 있습니다. 모델 AreaModel 에어리어는 공간을 분할하는 것으로, 같은 좌표라도 에어리어가 다르면 별도의 공간으로 취급할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 areaModelId string ※ ~ 1024자 에어리어 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 에어리어 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. layerModels List [] 0 ~ 1000 items 레이어 모델 목록 LayerModel 레이어는 하나의 공간 내에서 여러 개의 논리적 계층을 구현합니다. 예를 들어, 캐릭터가 대량으로 존재하는 공간에서 에너미가 보이지 않게 되는 문제를 해결합니다. 레이어 1에는 캐릭터를 배치합니다. 레이어 2에 에너미를 배치한 경우, 레이어마다 지정한 거리 내에서의 취득 수량을 지정할 수 있으므로 보이지 않게 될 걱정이 없습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 layerModelId string ※ ~ 1024자 레이어 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 레이어 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-MegaField 마스터 데이터 레퍼런스","url":"/ko/api_reference/mega_field/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-05-28\" , \"groups\" : [ { \"name\" : \"[string]미션 그룹 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"tasks\" : [ { \"name\" : \"[string]미션 태스크 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"verifyCompleteType\" : \"[string]달성 조건 종류\" , \"targetCounter\" : { \"counterName\" : \"[string]카운터 모델명\" , \"scopeType\" : \"[string]스코프 종류\" , \"resetType\" : \"[string?]목표 리셋 타이밍\" , \"conditionName\" : \"[string]조건 이름\" , \"value\" : \"[long]목표값\" }, \"verifyCompleteConsumeActions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"completeAcquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"challengePeriodEventId\" : \"[string?]보상을 받을 수 있는 기간을 설정한 GS2-Schedule 이벤트 GRN\" , \"premiseMissionTaskName\" : \"[string?]이 태스크에 도전하기 위해 달성해 두어야 하는 태스크의 이름\" , \"counterName\" : \"[string]카운터 모델명\" , \"targetResetType\" : \"[string?]목표 리셋 타이밍\" , \"targetValue\" : \"[long]목표값\" } ], \"resetType\" : \"[문자열 열거형]리셋 타이밍\" , \"resetDayOfMonth\" : \"[int]리셋하는 날짜\" , \"resetDayOfWeek\" : \"[문자열 열거형]리셋하는 요일\" , \"resetHour\" : \"[int]리셋 시각\" , \"completeNotificationNamespaceId\" : \"[string?]미션 태스크를 달성했을 때의 푸시 통지\" , \"anchorTimestamp\" : \"[long]경과 일수를 계산하는 기준 일시\" , \"days\" : \"[int]리셋하는 일수\" } ], \"counters\" : [ { \"name\" : \"[string]카운터 모델명\" , \"metadata\" : \"[string?]메타데이터\" , \"scopes\" : [ { \"scopeType\" : \"[string]스코프의 종류\" , \"resetType\" : \"[string]리셋 타이밍\" , \"resetDayOfMonth\" : \"[int]리셋할 날짜\" , \"resetDayOfWeek\" : \"[string]리셋할 요일\" , \"resetHour\" : \"[int]리셋 시각\" , \"conditionName\" : \"[string]조건명\" , \"condition\" : { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" }, \"anchorTimestamp\" : \"[long]경과 일수를 계산하는 기준 일시\" , \"days\" : \"[int]리셋하는 일수\" } ], \"challengePeriodEventId\" : \"[string?]카운터를 조작할 수 있는 기간을 설정한 GS2-Schedule 이벤트 GRN\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-05-28 마스터 데이터 포맷 버전 groups List ~ 20 items 미션 그룹 모델 미션 그룹은 카운터의 리셋 타이밍으로 태스크를 그룹화하는 엔티티입니다. 예를 들어, 데일리 미션으로 하나의 그룹, 위클리 미션으로 하나의 그룹이 됩니다. counters List ~ 1000 items 카운터 모델 카운터 모델은 미션 태스크의 달성 조건으로 설정할 수 있는 엔티티입니다. 카운터 값은 여러 미션 그룹에서 참조할 수 있기 때문에, 하나의 카운터를 위클리 미션과 데일리 미션 같은 여러 미션 그룹의 달성 조건으로 설정할 수 있습니다. 모델 CounterModel 카운터 모델 카운터 모델은 미션 태스크의 달성 조건으로 설정할 수 있는 엔티티입니다. 카운터 값은 여러 미션 그룹에서 참조할 수 있기 때문에, 하나의 카운터를 위클리 미션과 데일리 미션 같은 여러 미션 그룹의 달성 조건으로 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 counterId string ※ ~ 1024자 카운터 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scopes List [] 1 ~ 20 items 카운터의 리셋 타이밍 목록 이 카운터의 스코프(리셋 타이밍 또는 검증 액션 조건)를 정의합니다. 하나의 카운터에 여러 스코프를 설정할 수 있으며, 서로 다른 기간의 값(예: 데일리, 위클리, 누계를 동시에)을 추적할 수 있습니다. challengePeriodEventId string ~ 1024자 카운터를 조작할 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 카운터의 증감이 가능한 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 카운터는 언제든지 조작할 수 있습니다. CounterScopeModel 카운터 리셋 타이밍 모델 카운터의 스코프를 정의하고, 카운터 값의 리셋 방법과 타이밍을 결정합니다. 스코프는 리셋 타이밍(매일, 매주, 매월, 일정 일수마다, 또는 리셋 없음) 또는 검증 액션 조건 중 하나입니다. 각 카운터는 여러 스코프를 가질 수 있으며, 서로 다른 기간의 값을 추적할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프의 종류 카운터 스코프의 정의 방법을 결정합니다. “resetTiming” 은 정기적인 리셋 스케줄을 사용하고, “verifyAction” 은 검증 액션으로 카운터 값이 적용되는지 여부를 판정합니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 이 스코프의 카운터 값이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구 누계), 매일, 매주, 매월, 일정 일수마다 중에서 선택합니다. scopeType 이 “resetTiming” 인 경우에만 사용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋할 날짜 카운터 값이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType 이 “monthly” 인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋할 요일 카운터 값이 리셋되는 요일입니다. resetType 이 “weekly” 인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 카운터 값이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건명 이 검증 액션 조건 스코프를 식별하는 고유한 이름입니다. 카운터 내에서 대응하는 스코프 값을 조회하는 데 사용됩니다. scopeType 이 “verifyAction” 인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 condition VerifyAction {scopeType} == “verifyAction” ※ 조건 이 스코프의 카운터 값이 적용되는지 여부를 판정하는 검증 액션입니다. scopeType이 “verifyAction\"인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 카운터 값의 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 MissionGroupModel 미션 그룹 모델 미션 그룹은 카운터의 리셋 타이밍으로 태스크를 그룹화하는 엔티티입니다. 예를 들어, 데일리 미션으로 하나의 그룹, 위클리 미션으로 하나의 그룹이 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 missionGroupId string ※ ~ 1024자 미션 그룹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 미션 그룹 모델 이름 미션 그룹 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tasks List [] 0 ~ 1000 items 미션 태스크 리스트 이 그룹에 속하는 미션 태스크입니다. 각 태스크는 달성 조건(카운터의 임계값 또는 검증 액션)과 달성 시 부여되는 보상을 정의합니다. resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } “notReset” 리셋 타이밍 미션 그룹의 달성 상황이 리셋되는 타이밍을 결정합니다. 리셋하지 않음(영구), 매일, 매주, 매월, 기준 일시부터 일정 일수마다 중에서 선택합니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 resetDayOfMonth int {resetType} == “monthly” ※ 1 ~ 31 리셋하는 날짜 미션 그룹이 리셋되는 월의 날짜입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 그 달의 마지막 날로 처리됩니다. resetType이 “monthly\"인 경우에만 사용됩니다. ※ resetType이(가) “monthly” 이면 필수 resetDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {resetType} == “weekly” ※ 리셋하는 요일 미션 그룹이 리셋되는 요일입니다. resetType이 “weekly\"인 경우에만 사용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ resetType이(가) “weekly” 이면 필수 resetHour int {resetType} in [“monthly”, “weekly”, “daily”] ※ 0 ~ 23 리셋 시각 미션 그룹이 리셋되는 시각(0~23)입니다. 매일, 매주, 매월 리셋 타입과 조합하여 사용됩니다. ※ resetType이(가) “monthly”,“weekly”,“daily\"이면 필수 completeNotificationNamespaceId string ~ 1024자 미션 태스크를 달성했을 때의 푸시 통지 이 그룹 내의 미션 태스크가 달성되었을 때 푸시 통지를 전송하는 데 사용되는 GS2-Gateway의 네임스페이스 GRN입니다. 게임 클라이언트에 실시간으로 통지할 수 있습니다. anchorTimestamp long {resetType} == “days” ※ 경과 일수를 계산하는 기준 일시 UNIX 시간(밀리초) ※ resetType이(가) “days” 이면 필수 days int {resetType} == “days” ※ 1 ~ 2147483646 리셋하는 일수 기준 일시부터 카운트되는 리셋 간격 일수입니다. resetType이 “days\"인 경우에만 사용됩니다. ※ resetType이(가) “days” 이면 필수 MissionTaskModel 미션 태스크 모델 미션 태스크는 연결된 카운터의 값이 일정 수준을 초과하면 보상을 받을 수 있는 조건을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 missionTaskId string ※ ~ 1024자 미션 태스크 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyCompleteType 문자열 열거형 enum {   “counter”,   “verifyActions” } “counter” 달성 조건 종류 미션 태스크의 달성 판정 방법을 지정합니다. “counter\"는 관련된 카운터의 스코프 값이 목표 임곗값에 도달했는지 확인합니다. “verifyActions\"는 검증 액션을 사용하여 달성 조건을 확인합니다. 정의 설명 counter 카운터 verifyActions 검증 액션 targetCounter TargetCounterModel {verifyCompleteType} == “counter” ※ 목표 카운터 미션 태스크의 달성 판정에 사용되는 카운터, 스코프, 목표값을 정의합니다. 카운터의 스코프 값이 지정된 목표값에 도달하거나 초과한 경우, 태스크가 달성된 것으로 간주됩니다. ※ verifyCompleteType이(가) “counter” 이면 필수 verifyCompleteConsumeActions List {verifyCompleteType} == “verifyActions” [] 0 ~ 10 items 태스크 달성 판정에 사용하는 검증 액션 미션 태스크의 달성 판정에 사용되는 검증 액션의 목록입니다. 모든 검증 액션이 성공한 경우 태스크가 달성된 것으로 간주됩니다. verifyCompleteType이 “verifyActions\"인 경우에만 사용됩니다. ※ verifyCompleteType이(가) “verifyActions” 이면 활성화 completeAcquireActions List [] 0 ~ 100 items 미션 달성 시 보상 플레이어가 미션 달성 보상을 받을 때 실행되는 입수 액션의 목록입니다. challengePeriodEventId string ~ 1024자 보상을 받을 수 있는 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 미션 태스크의 보상을 받을 수 있는 기간을 정의하는 GS2-Schedule 이벤트를 지정합니다. 설정하지 않은 경우, 달성 후 언제든지 보상을 받을 수 있습니다. premiseMissionTaskName string ~ 128자 이 태스크에 도전하기 위해 달성해 두어야 하는 태스크의 이름 이 태스크의 보상을 받기 전에 달성해 두어야 하는, 같은 그룹 내의 전제 미션 태스크를 지정합니다. 단계적인 미션 체인을 만드는 데 사용합니다. TargetCounterModel 목표 카운터 미션의 달성 목표가 되는 카운터의 정보 타입 활성화 조건 필수 기본값 값 제한 설명 counterName string  ~ 128자 카운터 모델명 카운터 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 미션 달성 판정에 사용하는 카운터 스코프의 종류를 지정합니다. “resetTiming\"은 특정 리셋 기간의 카운터 값을 평가하고, “verifyAction\"은 이름이 지정된 조건의 값을 평가합니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” 목표 리셋 타이밍 목표값과 비교할 카운터의 리셋 타이밍 스코프를 지정합니다. 예를 들어 “daily\"를 선택하면 데일리 카운터 값을 확인합니다. 생략한 경우, 미션 그룹의 리셋 타이밍이 사용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 활성화 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 목표값과 비교할 검증 액션 조건 스코프의 이름입니다. 카운터 모델의 스코프에서 정의된 conditionName과 일치해야 합니다. scopeType이 “verifyAction\"인 경우에만 사용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long  0 ~ 9223372036854775805 목표값 미션 태스크가 달성된 것으로 간주되기 위해, 카운터의 스코프 값이 도달하거나 초과해야 하는 임곗값입니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Mission 마스터 데이터 레퍼런스","url":"/ko/api_reference/mission/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2024-06-20\" , \"storeContentModels\" : [ { \"name\" : \"[string]스토어 콘텐츠 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"appleAppStore\" : { \"productId\" : \"[string?]프로덕트 ID\" }, \"googlePlay\" : { \"productId\" : \"[string?]프로덕트 ID\" } } ], \"storeSubscriptionContentModels\" : [ { \"name\" : \"[string]스토어 구독 콘텐츠 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"scheduleNamespaceId\" : \"[string]구독 기간을 연동시킬 GS2-Schedule의 네임스페이스 GRN\" , \"triggerName\" : \"[string]구독 기간을 반영하는 트리거 이름\" , \"triggerExtendMode\" : \"[문자열 열거형]구독 기간을 트리거에 반영할 때의 모드\" , \"rollupHour\" : \"[int]날짜 변경 시각(UTC)\" , \"reallocateSpanDays\" : \"[int]구독 계약 정보를 다른 사용자에게 할당할 수 있게 되는 기간(일)\" , \"appleAppStore\" : { \"subscriptionGroupIdentifier\" : \"[string?]구독 그룹 ID\" }, \"googlePlay\" : { \"productId\" : \"[string?]프로덕트 ID\" } } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2024-06-20 마스터 데이터 포맷 버전 storeContentModels List ~ 1000 items 스토어 콘텐츠 모델 다양한 스토어 플랫폼의 콘텐츠를 저장하는 모델입니다. storeSubscriptionContentModels List ~ 1000 items 스토어 구독 콘텐츠 모델 다양한 스토어 플랫폼의 구독 콘텐츠를 저장하는 모델입니다. 모델 StoreContentModel 스토어 콘텐츠 모델 다양한 스토어 플랫폼의 콘텐츠를 저장하는 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 storeContentModelId string ※ ~ 1024자 스토어 콘텐츠 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스토어 콘텐츠 모델 이름 metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. appleAppStore AppleAppStoreContent Apple App Store의 콘텐츠 이 스토어 콘텐츠의 Apple App Store 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. googlePlay GooglePlayContent Google Play의 콘텐츠 이 스토어 콘텐츠의 Google Play 상품 정보(프로덕트 ID)입니다. 영수증 검증 시 구매한 상품과의 대조에 사용됩니다. AppleAppStoreContent Apple App Store의 콘텐츠 인앱 결제 상품에 대응하는 Apple App Store의 프로덕트 ID를 포함합니다. 영수증 검증 시 대조에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 이 인앱 결제 아이템에 대해 App Store Connect에 등록된 Apple App Store의 프로덕트 식별자입니다. GooglePlayContent Google Play의 콘텐츠 인앱 결제 상품에 대응하는 Google Play의 프로덕트 ID를 포함합니다. 영수증 검증 시 대조에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID 이 인앱 결제 아이템에 대해 Google Play Console에 등록되어 있는 Google Play의 프로덕트 식별자입니다. StoreSubscriptionContentModel 스토어 구독 콘텐츠 모델 다양한 스토어 플랫폼의 구독 콘텐츠를 저장하는 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 storeSubscriptionContentModelId string ※ ~ 1024자 구독 콘텐츠 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스토어 구독 콘텐츠 모델 이름 metadata string ~ 1024자 메타데이터 scheduleNamespaceId string  ~ 1024자 구독 기간을 연동시킬 GS2-Schedule의 네임스페이스 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN triggerName string  ~ 128자 구독 기간을 반영하는 트리거 이름 구독의 유효 기간을 반영하기 위해 실행되는 GS2-Schedule의 트리거 이름입니다. 트리거의 지속 시간은 구독의 유효 기한으로 설정됩니다. triggerExtendMode 문자열 열거형 enum {   “just”,   “rollupHour” } “just” 구독 기간을 트리거에 반영할 때의 모드 구독의 유효 기한을 트리거의 지속 시간에 어떻게 매핑할지를 제어합니다. “just\"는 구독 기간을 그대로 사용합니다. “rollupHour\"는 지정한 시각(UTC)까지 연장하여 하루 중간에 만료되는 것을 방지합니다. 정의 설명 just 그대로 구독 기간을 반영 rollupHour 다음 날짜 변경 시각까지 연장하여 구독 기간을 반영 rollupHour int {triggerExtendMode} == “rollupHour” 0 0 ~ 23 날짜 변경 시각(UTC) triggerExtendMode가 “rollupHour\"인 경우, 구독 기간은 유효 기한일의 이 시각(0~23, UTC)까지 연장됩니다. 사용자의 플레이 세션 중에 구독이 만료되는 것을 방지합니다. ※ triggerExtendMode이(가) “rollupHour” 이면 활성화 reallocateSpanDays int 30 0 ~ 365 구독 계약 정보를 다른 사용자에게 할당할 수 있게 되는 기간(일) 마지막 할당 이후, 구독 계약을 다른 사용자에게 재할당할 수 있게 되기까지의 일수입니다. 사용자가 계정을 변경할 때의 부정 이용을 방지하기 위해 구독 이전에 대기 기간을 둡니다. appleAppStore AppleAppStoreSubscriptionContent Apple App Store 콘텐츠 이 구독 콘텐츠의 Apple App Store 구독 정보(구독 그룹 ID)입니다. googlePlay GooglePlaySubscriptionContent Google Play 콘텐츠 이 구독 콘텐츠의 Google Play 구독 정보(프로덕트 ID)입니다. AppleAppStoreSubscriptionContent Apple App Store의 기간 결제 콘텐츠 구독 기반 상품의 Apple App Store 구독 그룹 식별자를 포함합니다. 자동 갱신 구독의 관리와 검증에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 subscriptionGroupIdentifier string ~ 64자 구독 그룹 ID App Store Connect에 등록된 구독 그룹 식별자입니다. 동일 그룹 내의 구독은 상호 배타적이며, 사용자는 동시에 하나만 계약할 수 있습니다. GooglePlaySubscriptionContent Google Play 구독 콘텐츠 구독 기반 상품의 Google Play 프로덕트 ID를 포함합니다. Google Play에서 자동 갱신 구독을 관리하고 검증하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 productId string ~ 1024자 프로덕트 ID","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Money2 마스터 데이터 레퍼런스","url":"/ko/api_reference/money2/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-05-14\" , \"groups\" : [ { \"name\" : \"[string]퀘스트 그룹 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"quests\" : [ { \"name\" : \"[string]퀘스트 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"contents\" : [ { \"metadata\" : \"[string?]메타데이터\" , \"completeAcquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"weight\" : \"[int]추첨 가중치\" } ], \"challengePeriodEventId\" : \"[string?]도전 가능 기간 이벤트 GRN\" , \"firstCompleteAcquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"verifyActions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"consumeActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"failedAcquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"premiseQuestNames\" : [ \"[string]퀘스트 모델 이름\" ] } ], \"challengePeriodEventId\" : \"[string?]도전 가능 기간 이벤트 GRN\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-05-14 마스터 데이터 포맷 버전 groups List ~ 10 items 퀘스트 그룹 모델 퀘스트 그룹은 여러 퀘스트를 그룹화하기 위한 엔티티로, 퀘스트 진행은 그룹 내에서 동시에 하나만 실행할 수 있습니다. 즉, 퀘스트를 병렬로 진행할 수 있도록 하려면 그룹을 분리해야 합니다. 모델 QuestGroupModel 퀘스트 그룹 모델 퀘스트 그룹은 여러 퀘스트를 그룹화하기 위한 엔티티로, 퀘스트 진행은 그룹 내에서 동시에 하나만 실행할 수 있습니다. 즉, 퀘스트를 병렬로 진행할 수 있도록 하려면 그룹을 분리해야 합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 questGroupModelId string ※ ~ 1024자 퀘스트 그룹 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 퀘스트 그룹 모델 이름 퀘스트 그룹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. quests List [] 0 ~ 1000 items 그룹에 속한 퀘스트 이 퀘스트 그룹에 속한 퀘스트 모델의 목록입니다. 그룹 내에서는 동시에 하나의 퀘스트만 진행할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 그룹 내 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule의 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화된 기간 동안에만 퀘스트를 시작할 수 있습니다. QuestModel 퀘스트 모델 퀘스트 모델은 인게임 시작에 필요한 대가와 클리어했을 때 얻는 보상을 보유하는 엔티티입니다. 클리어했을 때 얻는 보상은 여러 배리에이션을 준비할 수 있으며, 퀘스트 시작 시 추첨할 수 있습니다. 예를 들어, 퀘스트 자체는 동일하더라도 레어 몬스터의 출현 여부에 따라 두 가지 콘텐츠 배리에이션을 만들 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 questModelId string ※ ~ 1024자 퀘스트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 퀘스트 모델 이름 퀘스트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. contents List [] 1 ~ 10 items 퀘스트 내용 이 퀘스트의 콘텐츠 배리에이션 목록입니다. 퀘스트 시작 시 가중치 추첨을 통해 하나의 배리에이션이 선택됩니다. 각 배리에이션마다 서로 다른 클리어 보상을 정의할 수 있어, 동일한 퀘스트라도 다른 결과(예: 레어 몬스터의 출현)를 구현할 수 있습니다. challengePeriodEventId string ~ 1024자 도전 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 퀘스트에 도전할 수 있는 기간을 설정하는 GS2-Schedule 이벤트 GRN입니다. 지정한 경우, 이벤트가 활성화되어 있는 기간에만 퀘스트를 시작할 수 있습니다. 이 설정은 퀘스트 그룹의 도전 가능 기간보다 우선됩니다. firstCompleteAcquireActions List [] 0 ~ 10 items 최초 클리어 보상 입수 액션 리스트 이 퀘스트를 처음 클리어했을 때만 실행되는 입수 액션의 리스트입니다. 일반 클리어 보상에 더해 지급되는 보너스 보상으로, 최초 클리어 보너스를 구현하는 데 사용합니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 이 퀘스트를 시작하기 위한 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공해야만 퀘스트를 시작할 수 있습니다. 레벨 확인이나 아이템 소지 등의 요건을 강제하는 데 사용합니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 퀘스트의 시작 비용으로 실행되는 소비 액션입니다. 스태미나나 통화 등의 비용이 퀘스트 시작 시 소비됩니다. failedAcquireActions List [] 0 ~ 100 items 실패 시 입수 액션 리스트 퀘스트 실패 시 실행되는 입수 액션입니다. 실패 시 위로 보상이나 퀘스트 참가 비용의 일부 반환 등에 사용합니다. premiseQuestNames List [] 0 ~ 10 items 전제 퀘스트 이름 리스트 이 퀘스트에 도전하기 전에 클리어가 필요한 같은 그룹 내 퀘스트 이름의 리스트입니다. 연속되는 퀘스트 체인이나 분기되는 퀘스트 경로 작성에 사용합니다. Contents 콘텐츠 퀘스트 콘텐츠의 하나의 배리에이션을 나타냅니다. 각 퀘스트는 서로 다른 보상을 가진 여러 콘텐츠 배리에이션을 가질 수 있으며, 퀘스트 시작 시 가중치 추첨을 통해 하나가 선택됩니다. 메타데이터는 사용자 ID 및 컨피그 값을 이용한 템플릿 변수 치환을 지원합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 256자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. completeAcquireActions List [] 0 ~ 10 items 클리어 보상 획득 액션 이 콘텐츠 배리에이션으로 퀘스트를 클리어했을 때 실행되는 획득 액션입니다. 플레이어가 퀘스트 클리어 시 받게 되는 실제 보상을 정의합니다. weight int 1 1 ~ 2147483646 추첨 가중치 퀘스트 시작 시 이 콘텐츠 배리에이션의 무작위 선택에 사용되는 상대적 가중치입니다. 값이 클수록 이 배리에이션이 선택될 확률이 높아집니다. 예를 들어 가중치가 9인 배리에이션은 가중치가 1인 배리에이션보다 9배 선택되기 쉽습니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Quest 마스터 데이터 레퍼런스","url":"/ko/api_reference/quest/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-09-17\" , \"categories\" : [ { \"name\" : \"[string]카테고리 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"minimumValue\" : \"[long?]점수 최솟값\" , \"maximumValue\" : \"[long?]점수 최댓값\" , \"sum\" : \"[bool]합산 모드\" , \"orderDirection\" : \"[문자열 열거형]정렬 방향\" , \"scope\" : \"[문자열 열거형]랭킹 종류\" , \"globalRankingSetting\" : { \"uniqueByUserId\" : \"[bool]사용자 ID별 유니크\" , \"calculateIntervalMinutes\" : \"[int]집계 간격(분)\" , \"calculateFixedTiming\" : { \"hour\" : \"[int?]시\" , \"minute\" : \"[int?]분\" }, \"additionalScopes\" : [ { \"name\" : \"[string]스코프 이름\" , \"targetDays\" : \"[long]집계 대상 일수\" } ], \"ignoreUserIds\" : [ \"[string]랭킹에 반영하지 않을 사용자 ID\" ], \"generation\" : \"[string?]세대\" }, \"entryPeriodEventId\" : \"[string?]점수 등록 기간 이벤트 ID\" , \"accessPeriodEventId\" : \"[string?]접근 기간 이벤트 ID\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-09-17 마스터 데이터 포맷 버전 categories List ~ 1000 items 카테고리 모델 카테고리마다 서로 다른 랭킹을 생성할 수 있습니다. 카테고리에는 등록 가능한 스코어의 최소값·최대값을 설정할 수 있으며, 해당 범위를 벗어나는 스코어는 폐기됩니다. 랭킹을 집계할 때 스코어가 작은 것을 상위(오름차순)로 할지, 큰 것을 상위(내림차순)로 할지를 설정할 수 있습니다. 랭킹의 종류로 글로벌 과 스코프 를 선택할 수 있습니다. 글로벌은 모든 플레이어가 동일한 결과를 참조하는 것이며, 스코프는 친구 내 랭킹이나 길드 내 랭킹처럼 게임 플레이어마다 결과가 다른 랭킹입니다. 글로벌 랭킹은 카테고리별로 랭킹 집계 간격을 15분~24시간으로 설정할 수 있습니다. 스코프 랭킹은 실시간으로 집계 결과가 반영됩니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 스코어를 리셋할 수 있습니다. 모델 CategoryModel 카테고리 모델 카테고리마다 서로 다른 랭킹을 생성할 수 있습니다. 카테고리에는 등록 가능한 스코어의 최소값·최대값을 설정할 수 있으며, 해당 범위를 벗어나는 스코어는 폐기됩니다. 랭킹을 집계할 때 스코어가 작은 것을 상위(오름차순)로 할지, 큰 것을 상위(내림차순)로 할지를 설정할 수 있습니다. 랭킹의 종류로 글로벌 과 스코프 를 선택할 수 있습니다. 글로벌은 모든 플레이어가 동일한 결과를 참조하는 것이며, 스코프는 친구 내 랭킹이나 길드 내 랭킹처럼 게임 플레이어마다 결과가 다른 랭킹입니다. 글로벌 랭킹은 카테고리별로 랭킹 집계 간격을 15분~24시간으로 설정할 수 있습니다. 스코프 랭킹은 실시간으로 집계 결과가 반영됩니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 스코어를 리셋할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 categoryModelId string ※ ~ 1024자 카테고리 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 카테고리 모델 이름 카테고리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 점수 최솟값 이 카테고리에 등록할 수 있는 점수의 최솟값입니다. 이 임곗값보다 낮은 점수는 등록 시 거부됩니다. 설정하지 않으면 하한이 없습니다. maximumValue long 0 ~ 9223372036854775805 점수 최댓값 이 카테고리에 등록할 수 있는 점수의 최댓값입니다. 이 임곗값보다 높은 점수는 등록 시 거부됩니다. 설정하지 않으면 상한이 없습니다. sum bool false 합산 모드 활성화하면 새로 등록된 점수가 기존 점수를 대체하는 것이 아니라 합계에 더해집니다. 랭킹은 누적된 합계값을 기준으로 계산됩니다. 비활성화된 경우 각 점수 등록은 독립된 항목으로 처리됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 집계의 정렬 순서를 결정합니다. “asc”(오름차순)는 낮은 점수를 상위로 하며, 시간 기반이나 골프식 랭킹에 적합합니다. “desc”(내림차순)는 높은 점수를 상위로 하며, 포인트 기반이나 하이스코어 랭킹에 적합합니다. 정의 설명 asc 오름차순 desc 내림차순 scope 문자열 열거형 enum {   “global”,   “scoped” }  랭킹 종류 이 카테고리의 랭킹 타입입니다. “global” 은 모든 플레이어가 공유하는 단일 리더보드를 만들며, 설정된 간격으로 배치 집계됩니다. “scoped” 는 구독한 플레이어(친구나 길드 멤버 등)를 기반으로 한 사용자별 리더보드를 만들며, 점수가 실시간으로 반영됩니다. 정의 설명 global 글로벌 scoped 스코프 globalRankingSetting GlobalRankingSetting {scope} == “global” ※ 글로벌 랭킹 설정 글로벌 랭킹 모드 전용 설정입니다. 집계 간격, 고정 시각, 점수의 유니크 여부, 세대 관리, 추가 기간 한정 스코프를 포함합니다. scope 가 “global” 로 설정된 경우에만 적용됩니다. ※ scope이(가) “global” 이면 필수 entryPeriodEventId string ~ 1024자 점수 등록 기간 이벤트 ID 점수 등록을 받는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 점수 등록 요청은 거부됩니다. 설정하지 않으면 점수는 언제든지 등록할 수 있습니다. accessPeriodEventId string ~ 1024자 접근 기간 이벤트 ID 랭킹 데이터를 열람할 수 있는 기간을 정의하는 GS2-Schedule 이벤트의 GRN입니다. 이 기간 외의 랭킹 조회 요청은 거부됩니다. 설정하지 않으면 랭킹은 언제든지 접근할 수 있습니다. Scope 집계 스코프 글로벌 랭킹 모드에서의 추가적인 기간 한정 집계 스코프를 정의합니다. 일반적으로 글로벌 랭킹은 등록된 모든 스코어를 대상으로 집계됩니다. 스코프를 추가하면 지정한 일수 이내에 등록된 스코어만을 대상으로 하는 별도의 랭킹을 생성할 수 있으며, 전체 기간 랭킹과 함께 데일리·위클리·먼슬리 등의 리더보드를 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스코프 이름 카테고리 내에서 이 집계 스코프를 고유하게 식별하는 이름입니다. 여러 개의 기간 한정 랭킹 보드를 구분하기 위해 사용됩니다(예: “daily”, “weekly”). 최대 128자. targetDays long  1 ~ 365 집계 대상 일수 집계 윈도우에 포함할 일수입니다. 현재 시각으로부터 이 일수 이내에 등록된 스코어만 스코프 랭킹의 대상이 됩니다. 범위: 1~365일. GlobalRankingSetting 글로벌 랭킹 설정 글로벌은 모든 플레이어가 동일한 결과를 참조하는 방식입니다. 랭킹 집계 간격은 15분~24시간으로 설정할 수 있습니다. 랭킹 데이터에는 세대라는 설정이 있으며, 세대를 변경함으로써 등록된 점수를 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 uniqueByUserId bool true 사용자 ID별 유니크 활성화하면 랭킹 내에서 사용자 ID별로 하나의 점수만 유지됩니다. 사용자가 새로운 점수를 등록하면 정렬 방향에 따라 더 나은 점수로 교체됩니다. 비활성화하면 동일 사용자로부터 여러 점수 항목이 허용되어 합산 모드나 다중 항목 경쟁이 가능해집니다. calculateIntervalMinutes int  15 ~ 1440 집계 간격(분) 연속되는 랭킹 재집계 사이의 간격(분)입니다. 시스템은 이 간격으로 등록된 모든 점수를 기반으로 글로벌 랭킹을 정기적으로 재집계합니다. 범위: 15 1440분(15분 24시간). calculateFixedTiming FixedTiming 집계 시각 고정 설정 랭킹 재집계가 시작되는 하루 중 고정 시각(UTC)을 지정합니다. 설정하지 않으면 재집계는 정해지지 않은 기준 시각부터 일정 간격으로 실행됩니다. 이를 설정하면 매일 예측 가능하고 일관된 시각에 재집계가 이루어지도록 할 수 있습니다. additionalScopes List 0 ~ 10 items 추가 스코프 목록 추가적인 기간 한정 집계 스코프 목록입니다. 각 스코프는 지정한 일수 이내에 등록된 점수만을 대상으로 하는 별도의 랭킹을 정의합니다. 전체 기간의 글로벌 랭킹과 함께 데일리·위클리·먼슬리 등의 리더보드를 만들 수 있습니다. 최대 10건. ignoreUserIds List 0 ~ 10000 items 제외 사용자 ID 목록 랭킹 집계에서 점수를 제외할 사용자 ID 목록입니다. 테스트 계정, 관리자 계정 또는 알려진 부정 사용자를 리더보드에서 제외하는 데 사용합니다. 최대 10,000건. generation string ~ 256자 세대 현재 랭킹 세대를 나타내는 임의의 문자열입니다. 이 값을 변경하면 이전 세대의 점수는 랭킹 집계에 포함되지 않으므로 사실상 점수가 초기화됩니다. 시즌제 초기화나 정기적인 랭킹 초기화를 구현하는 데 사용합니다. 최대 256자. FixedTiming 집계 시각 고정 설정 글로벌 랭킹의 집계가 시작되는 고정 시각을 지정합니다. 이 설정이 없으면 랭킹 집계는 정해지지 않은 기준 시각부터 일정 간격으로 실행됩니다. 고정된 시·분을 지정함으로써 매일의 집계 시작 시각(UTC)을 예측 가능하게 할 수 있으며, 자정이나 특정 시각에 집계를 시작하도록 제어할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 hour int 0 ~ 23 시 랭킹 집계가 시작되는 시각의 시(UTC)입니다. 0~23 사이의 정수로 지정합니다. minute int 0 ~ 59 분 지정한 시각의 분입니다. 0~59 사이의 정수로 지정합니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Ranking 마스터 데이터 레퍼런스","url":"/ko/api_reference/ranking/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2024-05-30\" , \"globalRankingModels\" : [ { \"name\" : \"[string]글로벌 랭킹 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"minimumValue\" : \"[long?]스코어 최솟값\" , \"maximumValue\" : \"[long?]스코어 최댓값\" , \"sum\" : \"[bool]스코어 합산\" , \"orderDirection\" : \"[문자열 열거형]정렬 방향\" , \"entryPeriodEventId\" : \"[string?]스코어 등록 가능 기간 이벤트 GRN\" , \"rankingRewards\" : [ { \"thresholdRank\" : \"[int]순위 임계값\" , \"metadata\" : \"[string?]메타데이터\" , \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] } ], \"accessPeriodEventId\" : \"[string?]랭킹 데이터 접근 가능 기간 이벤트 GRN\" , \"rewardCalculationIndex\" : \"[문자열 열거형]보상 계산 인덱스\" } ], \"clusterRankingModels\" : [ { \"name\" : \"[string]클러스터 랭킹 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"clusterType\" : \"[문자열 열거형]클러스터 타입\" , \"minimumValue\" : \"[long?]최소 점수\" , \"maximumValue\" : \"[long?]최대 점수\" , \"sum\" : \"[bool]점수 합산\" , \"orderDirection\" : \"[문자열 열거형]정렬 방향\" , \"entryPeriodEventId\" : \"[string?]스코어 등록 가능 기간 이벤트 GRN\" , \"rankingRewards\" : [ { \"thresholdRank\" : \"[int]순위 임계값\" , \"metadata\" : \"[string?]메타데이터\" , \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] } ], \"accessPeriodEventId\" : \"[string?]랭킹 데이터 접근 가능 기간 이벤트 GRN\" , \"rewardCalculationIndex\" : \"[문자열 열거형]보상 계산 인덱스\" } ], \"subscribeRankingModels\" : [ { \"name\" : \"[string]구독 랭킹 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"minimumValue\" : \"[long?]최소 점수\" , \"maximumValue\" : \"[long?]최대 점수\" , \"sum\" : \"[bool]점수 합산\" , \"orderDirection\" : \"[문자열 열거형]정렬 방향\" , \"entryPeriodEventId\" : \"[string?]스코어 등록 가능 기간 이벤트 GRN\" , \"accessPeriodEventId\" : \"[string?]랭킹 데이터 접근 가능 기간 이벤트 GRN\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2024-05-30 마스터 데이터 포맷 버전 globalRankingModels List ~ 10 items 글로벌 랭킹 모델 글로벌 랭킹은 모든 플레이어를 대상으로 한 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연결하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. clusterRankingModels List ~ 10 items 클러스터 랭킹 모델 클러스터 랭킹은 길드나 게더링 내의 플레이어를 대상으로 하는 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연동하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. subscribeRankingModels List ~ 10 items 구독 랭킹 모델 구독한 다른 플레이어의 점수를 집계하여 랭킹을 작성하는 모델입니다. 모델 GlobalRankingModel 글로벌 랭킹 모델 글로벌 랭킹은 모든 플레이어를 대상으로 한 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연결하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 globalRankingModelId string ※ ~ 1024자 글로벌 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 스코어 최솟값 허용되는 스코어의 최솟값입니다. 이 값보다 낮은 스코어는 등록 시 거부됩니다. 유효하지 않거나 의도하지 않은 스코어 값을 필터링하는 데 사용합니다. maximumValue long 0 ~ 9223372036854775805 스코어 최댓값 허용되는 스코어의 최댓값입니다. 이 값을 초과하는 스코어는 등록 시 거부됩니다. 비정상적으로 높은 스코어의 등록을 방지하는 데 사용합니다. sum bool false 스코어 합산 활성화하면 등록된 모든 스코어가 합산되어 합계 값으로 랭킹이 결정됩니다. 비활성화된 경우, 정렬 방향에 따른 최적의 스코어(최댓값 또는 최솟값)만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 스코어의 정렬 방향입니다. 낮은 스코어일수록 상위인 경우(예: 타임어택)에는 “오름차순\"을, 높은 스코어일수록 상위인 경우(예: 하이스코어)에는 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 반복 사이클마다 랭킹이 초기화되어 시즌제 랭킹을 구현할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. 각 보상은 순위 임계값과 실행할 입수 액션을 정의합니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 일반적으로 스코어 등록 기간 사이의 간격으로 설정합니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위를 사용하며(동점 스코어의 플레이어는 동일한 순위를 공유), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치를 사용합니다(동일 순위 없음). 일반적인 사용 사례에서는 “순위 기반\"을 선택하시기 바랍니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 RankingReward 랭킹 보상 점수 등록 기간이 설정된 랭킹에서, 등록 기간 외 참조 기간 내에 받을 수 있는 보상을 설정합니다. 반복 설정이 유효한 경우, 가장 최근에 종료된 기간의 랭킹이 보상 수령 대상이 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 thresholdRank int  1 ~ 1001 순위 임계값 이 보상 티어의 순위 임계값입니다. 순위(또는 인덱스, rewardCalculationIndex 설정에 따라 다름)가 이 임계값 이상인 플레이어가 이 보상을 받습니다. 1001로 설정하면 랭크 외(상위 1000위 밖) 플레이어를 위한 보상을 정의할 수 있습니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. acquireActions List [] 0 ~ 100 items 입수 액션 리스트 플레이어가 이 랭킹 보상을 수령할 때 실행되는 입수 액션의 목록입니다. 이 순위 임계값을 달성한 보상으로 지급되는 아이템, 화폐, 기타 리소스를 정의합니다. AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 ClusterRankingModel 클러스터 랭킹 모델 클러스터 랭킹은 길드나 게더링 내의 플레이어를 대상으로 하는 랭킹을 구현하기 위한 모델입니다. 상위 1000위까지의 랭킹을 표시할 수 있습니다. GS2-Schedule의 반복 이벤트와 연동하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 clusterRankingModelId string ※ ~ 1024자 클러스터 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. clusterType 문자열 열거형 enum {   “Raw”,   “Gs2Guild::Guild”,   “Gs2Matchmaking::SeasonGathering” }  클러스터 타입 랭킹의 세그멘테이션에 사용하는 그룹(클러스터)의 종류를 정의합니다. “Raw\"는 소속 검증 없이 임의의 클러스터 이름을 지정할 수 있으며, “Gs2Guild::Guild\"는 GS2-Guild 길드에 대한 소속을 검증하고, “Gs2Matchmaking::SeasonGathering\"은 GS2-Matchmaking 시즌 개더링에 대한 소속을 검증합니다. 정의 설명 Raw 검증 없음 Gs2Guild::Guild GS2-Guild 길드 Gs2Matchmaking::SeasonGathering GS2-Matchmaking 시즌 개더링 minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. rankingRewards List {entryPeriodEventId} != null [] 0 ~ 100 items 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. rewardCalculationIndex 문자열 열거형 enum {   “rank”,   “index” } “rank” 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반\"은 1부터 시작하는 랭킹 순위(동점 스코어는 동일 순위), “인덱스 기반\"은 0부터 시작하는 고유한 정렬 위치(동일 순위 없음)를 사용합니다. 정의 설명 rank 순위 기반으로 보상 결정 index 인덱스 기반으로 보상 결정 SubscribeRankingModel 구독 랭킹 모델 구독한 다른 플레이어의 점수를 집계하여 랭킹을 작성하는 모델입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 subscribeRankingModelId string ※ ~ 1024자 구독 랭킹 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 1024자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. minimumValue long 0 ~ 9223372036854775805 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. maximumValue long 0 ~ 9223372036854775805 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. sum bool false 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. orderDirection 문자열 열거형 enum {   “asc”,   “desc” }  정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순\"을 사용합니다. 정의 설명 asc 오름차순 desc 내림차순 entryPeriodEventId string ~ 1024자 스코어 등록 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. accessPeriodEventId string ~ 1024자 랭킹 데이터 접근 가능 기간 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 랭킹 결과를 열람할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Ranking2 마스터 데이터 레퍼런스","url":"/ko/api_reference/ranking2/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-03-31\" , \"events\" : [ { \"name\" : \"[string]이벤트 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"scheduleType\" : \"[문자열 열거형]스케줄 타입\" , \"absoluteBegin\" : \"[long?]절대 시작 일시\" , \"absoluteEnd\" : \"[long?]절대 종료 일시\" , \"relativeTriggerName\" : \"[string]이벤트 시작 트리거 이름\" , \"repeatSetting\" : { \"repeatType\" : \"[string]반복 종류\" , \"beginDayOfMonth\" : \"[int]반복 시작일\" , \"endDayOfMonth\" : \"[int]반복 종료일\" , \"beginDayOfWeek\" : \"[string]반복 시작 요일\" , \"endDayOfWeek\" : \"[string]반복 종료 요일\" , \"beginHour\" : \"[int]반복 시작 시각(시)\" , \"endHour\" : \"[int]반복 종료 시각(시)\" , \"anchorTimestamp\" : \"[long]기준 타임스탬프\" , \"activeDays\" : \"[int]활성 일수\" , \"inactiveDays\" : \"[int]비활성 일수\" } } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-03-31 마스터 데이터 포맷 버전 events List ~ 100 items 이벤트 이벤트의 기간에는 절대 기간과 상대 기간의 2가지 종류가 있습니다. 절대 기간은 예를 들어 YYYY년 MM월 DD일 00:00(UTC) ~ YYYY년 MM월 DD일 23:59(UTC)와 같은 고정된 기간이며, 상대 기간은 트리거를 당긴 시점부터 24시간과 같이 게임 플레이어마다 다른 기간을 이벤트 기간으로 하는 것입니다. 이벤트에는 개최 기간뿐만 아니라 반복도 설정할 수 있게 되어 있어 이벤트 기간 중 월요일 10:00 ~ 11:00만을 이벤트 기간으로 하는 설정도 가능합니다. 모델 Event 이벤트 이벤트의 기간에는 절대 기간과 상대 기간의 2가지 종류가 있습니다. 절대 기간은 예를 들어 YYYY년 MM월 DD일 00:00(UTC) ~ YYYY년 MM월 DD일 23:59(UTC)와 같은 고정된 기간이며, 상대 기간은 트리거를 당긴 시점부터 24시간과 같이 게임 플레이어마다 다른 기간을 이벤트 기간으로 하는 것입니다. 이벤트에는 개최 기간뿐만 아니라 반복도 설정할 수 있게 되어 있어 이벤트 기간 중 월요일 10:00 ~ 11:00만을 이벤트 기간으로 하는 설정도 가능합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 eventId string ※ ~ 1024자 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scheduleType 문자열 열거형 enum {   “absolute”,   “relative” }  스케줄 타입 이벤트 기간을 정의하는 방식을 결정합니다. “absolute\"는 모든 플레이어에게 동일하게 적용되는 고정된 시작/종료 타임스탬프를 사용합니다. “relative\"는 플레이어별 트리거를 기점으로 사용하여, 개인화된 이벤트 기간을 구현합니다(예: 각 플레이어가 처음 로그인한 시점부터 24시간). 정의 설명 absolute 고정 기간 relative 플레이어별 기간 absoluteBegin long 절대 시작 일시 절대 스케줄링에서 이벤트 기간의 고정 시작 시각입니다. 모든 플레이어가 동일한 시작 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 과거부터 시작된 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. absoluteEnd long 절대 종료 일시 절대 스케줄링에서 이벤트 기간의 고정 종료 시각입니다. 모든 플레이어가 동일한 종료 시각을 공유합니다. 절대 이벤트에서 설정하지 않으면 이벤트는 종료되지 않는 것으로 취급됩니다. UNIX 시간(밀리초)으로 표현됩니다. relativeTriggerName string {scheduleType} == “relative” ※ ~ 128자 이벤트 시작 트리거 이름 게임 플레이어별로 이벤트 기간을 설정하는( relative ) 경우, 이벤트 시작의 기점이 되는 트리거의 이름을 지정합니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. ※ scheduleType이(가) “relative” 이면 필수 repeatSetting RepeatSetting  반복 설정 이벤트 기간 내에서 반복되는 유효 시간대에 대한 설정입니다. 활성 기간을 특정 시간대, 요일, 월중 날짜, 또는 사용자 지정 활성/비활성 일 주기로 좁힐 수 있습니다. 반복 패턴 없이 이벤트 기간 전체를 활성 상태로 유지하려면 repeatType을 “always\"로 설정합니다. RepeatSetting 반복 설정 이벤트 전체 기간 내에서 반복되는 유효 시간대를 설정합니다. 5가지 반복 타입을 지원합니다: “always”(이벤트 기간 전체), “daily”(매일 특정 시간대), “weekly”(매주 특정 요일 범위+시간대), “monthly”(매월 특정 날짜 범위+시간대), “custom”(기준일로부터 활성/비활성 일수의 교대 주기). daily/weekly/monthly 타입에서 beginHour와 endHour가 같으면 종료 시각은 다음 날 같은 시각으로 처리됩니다(즉 24시간 전체 윈도우). 타입 활성화 조건 필수 기본값 값 제한 설명 repeatType 문자열 열거형 enum {   “always”,   “daily”,   “weekly”,   “monthly”,   “custom” } “always” 반복 종류 이벤트 기간 내에 적용할 반복 패턴의 종류입니다. 타입에 따라 필요한 추가 필드가 다릅니다: daily/weekly/monthly는 시간 설정, weekly는 요일, monthly는 날짜, custom은 기준 타임스탬프와 일수가 필요합니다. 지정하지 않으면 기본값은 “always\"입니다. 정의 설명 always 이벤트 기간 중 상시 유효 daily 이벤트 기간 중 매일 X시 X시 weekly 이벤트 기간 중 매주 개시 요일 종료 요일 X시 X시 monthly 이벤트 기간 중 매월 개시일 종료일 X시~X시 custom 기준일부터 시작하여, 이벤트 기간 중 X일 활성, Y일 비활성을 반복 beginDayOfMonth int {repeatType} == “monthly” ※ 1 ~ 31 반복 시작일 반복 윈도우가 시작되는 월중 날짜(1~31)입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 해당 월의 마지막 날로 처리됩니다. repeatType이 “monthly\"인 경우에만 적용됩니다. ※ repeatType이(가) “monthly” 이면 필수 endDayOfMonth int {repeatType} == “monthly” ※ 1 ~ 31 반복 종료일 반복 윈도우가 종료되는 월중 날짜(1~31)입니다. 지정한 값이 해당 월의 일수를 초과하는 경우, 해당 월의 마지막 날로 처리됩니다. repeatType이 “monthly\"인 경우에만 적용됩니다. ※ repeatType이(가) “monthly” 이면 필수 beginDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {repeatType} == “weekly” ※ 반복 시작 요일 반복 윈도우가 시작되는 요일입니다. 윈도우는 주의 경계를 넘어설 수 있습니다(예: 금요일~월요일). repeatType이 “weekly\"인 경우에만 적용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ repeatType이(가) “weekly” 이면 필수 endDayOfWeek 문자열 열거형 enum {   “sunday”,   “monday”,   “tuesday”,   “wednesday”,   “thursday”,   “friday”,   “saturday” } {repeatType} == “weekly” ※ 반복 종료 요일 반복 윈도우가 종료되는 요일입니다. beginDayOfWeek과 조합하여 주간 활성 기간을 정의합니다. repeatType이 “weekly\"인 경우에만 적용됩니다. 정의 설명 sunday 일요일 monday 월요일 tuesday 화요일 wednesday 수요일 thursday 목요일 friday 금요일 saturday 토요일 ※ repeatType이(가) “weekly” 이면 필수 beginHour int {repeatType} in [“daily”, “weekly”, “monthly”] ※ 0 ~ 23 반복 시작 시각(시) 각 주기마다 반복 윈도우가 시작되는 시각(UTC, 0~23)입니다. daily, weekly, monthly 반복 타입에서 필수입니다. beginHour와 endHour가 같으면 윈도우는 24시간(다음 날 같은 시각까지)이 됩니다. ※ repeatType이(가) “daily”,“weekly”,“monthly\"이면 필수 endHour int {repeatType} in [“daily”, “weekly”, “monthly”] ※ 0 ~ 24 반복 종료 시각(시) 각 주기마다 반복 윈도우가 종료되는 시각(UTC, 0~24)입니다. 24를 지정하면 다음 날 자정을 나타냅니다. daily, weekly, monthly 반복 타입에서 필수입니다. ※ repeatType이(가) “daily”,“weekly”,“monthly\"이면 필수 anchorTimestamp long {repeatType} == “custom” ※ 기준 타임스탬프 커스텀 활성/비활성 주기가 시작되는 기준일입니다. 시스템은 이 기준일로부터 경과한 일수를 바탕으로 현재 시각이 어느 단계(활성 또는 비활성)에 있는지 계산합니다. repeatType이 “custom\"인 경우에만 적용됩니다. UNIX 시간(밀리초)으로 표현합니다. ※ repeatType이(가) “custom” 이면 필수 activeDays int {repeatType} == “custom” ※ 1 ~ 2147483646 활성 일수 각 커스텀 주기에서 이벤트가 연속으로 활성 상태가 되는 일수입니다. 활성 일수가 지난 후, inactiveDays에서 지정한 일수만큼 이벤트가 비활성 상태가 되며, 이후 주기가 반복됩니다. repeatType이 “custom\"인 경우에만 적용됩니다. 최소 1일. ※ repeatType이(가) “custom” 이면 필수 inactiveDays int {repeatType} == “custom” ※ 0 ~ 2147483646 비활성 일수 각 커스텀 주기에서 이벤트가 연속으로 비활성 상태가 되는 일수입니다. 활성 일수 뒤에 이어집니다. 공백 없이 계속 활성 상태인 이벤트로 하려면 0을 설정합니다. repeatType이 “custom\"인 경우에만 적용됩니다. 최소 0일. ※ repeatType이(가) “custom” 이면 필수","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Schedule 마스터 데이터 레퍼런스","url":"/ko/api_reference/schedule/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2024-02-23\" , \"seasonModels\" : [ { \"name\" : \"[string]시즌 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"tiers\" : [ { \"metadata\" : \"[string?]메타데이터\" , \"raiseRankBonus\" : \"[int]랭크 승급 보너스\" , \"entryFee\" : \"[int]참가료\" , \"minimumChangePoint\" : \"[int]최소 변동 포인트\" , \"maximumChangePoint\" : \"[int]최대 변동 포인트\" } ], \"experienceModelId\" : \"[string]경험치 모델 ID\" , \"challengePeriodEventId\" : \"[string?]챌린지 기간 이벤트 ID\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2024-02-23 마스터 데이터 포맷 버전 seasonModels List ~ 50 items 시즌 모델 시즌 기간 동안 적용되는 티어 구조와 포인트 변동 규칙을 정의하는 마스터 데이터입니다. 각 티어별 포인트 변동 범위·참가료·랭크업 보너스를 설정하고, 포인트 관리에 사용할 Experience 모델을 지정합니다. 실제 포인트 및 티어의 사용자 데이터는 GS2-Experience에 의해 관리됩니다. 모델 SeasonModel 시즌 모델 시즌 기간 동안 적용되는 티어 구조와 포인트 변동 규칙을 정의하는 마스터 데이터입니다. 각 티어별 포인트 변동 범위·참가료·랭크업 보너스를 설정하고, 포인트 관리에 사용할 Experience 모델을 지정합니다. 실제 포인트 및 티어의 사용자 데이터는 GS2-Experience에 의해 관리됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 seasonModelId string ※ ~ 1024자 시즌 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름. 영숫자와 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. tiers List  1 ~ 100 items 티어 모델 목록 시즌의 랭킹 사다리를 구성하는 티어 정의의 순서가 있는 목록. 각 티어는 고유한 포인트 변동 규칙(참가료, 최소/최대 변동량, 승급 보너스)을 정의합니다. 플레이어는 GS2-Experience에서 관리되는 누적 포인트에 따라 티어를 진행합니다. 최소 1개 티어, 최대 100개 티어. experienceModelId string  ~ 1024자 경험치 모델 ID 시즌 포인트와 티어 진행 관리에 사용되는 GS2-Experience 경험치 모델의 GRN. 경험치 모델의 랭크 임계값이 티어 경계를 결정하며, 경험치 값은 플레이어의 현재 시즌 포인트를 나타냅니다. 대전 결과에 따른 포인트 변동은 이 경험치 모델에 적용됩니다. challengePeriodEventId string ~ 1024자 챌린지 기간 이벤트 ID 시즌이 대전 가능한 기간을 정의하는 GS2-Schedule 이벤트의 GRN. 설정한 경우, 참조된 이벤트가 활성 상태인 동안에만 플레이어가 대전에 참가할 수 있습니다. 설정하지 않은 경우, 시즌에 기간 제한이 없습니다. TierModel 티어 모델 티어 모델은 시즌 내 각 티어의 포인트 변동 규칙을 정의하는 모델입니다. 순위에 따른 포인트 변동 범위, 참가료, 승급 시 보너스를 설정합니다. 포인트의 실제 데이터는 GS2-Experience에 의해 관리되지만, 그 증감 로직은 TierModel의 설정에 따라 결정됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. raiseRankBonus int  0 ~ 10000 랭크 승급 보너스 플레이어가 이 티어로 승급했을 때 가산되는 보너스 포인트로, 즉각적인 강등을 방지하는 완충 역할을 합니다. 예를 들어 100으로 설정하면, 승급 기준점보다 100포인트 많은 상태로 새 티어를 시작합니다. 유효 범위: 0~10000. entryFee int  0 ~ 10000 참가료 대전 시작 전 플레이어로부터 차감되는 참가 비용으로서의 포인트. 이 참가료는 대전 결과와 관계없이 항상 차감되며, 경쟁 플레이에 리스크 요소를 만듭니다. 유효 범위: 0~10000. minimumChangePoint int  -99999999 ~ -1 최소 변동 포인트 한 번의 대전 결과로 발생할 수 있는 최소(가장 음수인) 포인트 변동량으로, 일반적으로 최악의 패배 시 값을 나타냅니다. 음수 값이어야 합니다. 패배한 플레이어의 실제 포인트 변동은 이 값과 0 사이가 됩니다. 유효 범위: -99999999~-1. maximumChangePoint int  1 ~ 99999999 최대 변동 포인트 한 번의 대전 결과로 발생할 수 있는 최대(가장 양수인) 포인트 변동량으로, 일반적으로 최고의 승리 시 값을 나타냅니다. 양수 값이어야 합니다. 승리한 플레이어의 실제 포인트 변동은 0과 이 값 사이가 됩니다. 유효 범위: 1~99999999.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-SeasonRating 마스터 데이터 레퍼런스","url":"/ko/api_reference/season_rating/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2022-09-13\" , \"campaignModels\" : [ { \"name\" : \"[string]캠페인 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"enableCampaignCode\" : \"[bool]캠페인 코드에 의한 교환을 허용할지 여부\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2022-09-13 마스터 데이터 포맷 버전 campaignModels List ~ 1000 items 캠페인 모델 캠페인 모델은 캠페인을 정의하고 시리얼 코드와 연결하여 관리하는 데 사용됩니다. 모델 CampaignModel 캠페인 모델 캠페인 모델은 캠페인을 정의하고 시리얼 코드와 연결하여 관리하는 데 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 campaignId string ※ ~ 1024자 캠페인 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 캠페인 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. enableCampaignCode bool false 캠페인 코드에 의한 교환을 허용할지 여부 활성화하면 개별 시리얼 코드가 아닌 공통 캠페인 코드(캠페인 이름)를 사용하여 보상을 교환할 수 있게 됩니다. 이를 통해 하나의 코드를 여러 사용자가 사용할 수 있습니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-SerialKey 마스터 데이터 레퍼런스","url":"/ko/api_reference/serial_key/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-04-04\" , \"showcases\" : [ { \"name\" : \"[string]진열대 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"salesPeriodEventId\" : \"[string?]진열대의 판매 기간을 설정한 GS2-Schedule 이벤트 GRN\" , \"displayItems\" : [ { \"displayItemId\" : \"[string]진열 상품 ID\" , \"type\" : \"[string]종류\" , \"salesItem\" : { \"name\" : \"[string]상품 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"verifyActions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"consumeActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] }, \"salesItemGroup\" : { \"name\" : \"[string]상품 그룹 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"salesItems\" : [ { \"name\" : \"[string]상품 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"verifyActions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"consumeActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ] } ] }, \"salesPeriodEventId\" : \"[string?]이 진열 상품의 판매 기간을 설정한 GS2-Schedule의 이벤트 GRN\" } ] } ], \"randomShowcases\" : [ { \"name\" : \"[string]랜덤 진열대 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"maximumNumberOfChoice\" : \"[int]선택되는 상품의 최대 수\" , \"displayItems\" : [ { \"name\" : \"[string]랜덤 진열 상품 ID\" , \"metadata\" : \"[string?]메타데이터\" , \"verifyActions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"consumeActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"stock\" : \"[int]재고 수\" , \"weight\" : \"[int]추첨 가중치\" } ], \"baseTimestamp\" : \"[long]진열 상품 재추첨 기준 시간\" , \"resetIntervalHours\" : \"[int]진열 상품을 재추첨하는 간격(시간)\" , \"salesPeriodEventId\" : \"[string?]진열대의 판매 기간을 설정한 GS2-Schedule의 이벤트 GRN\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-04-04 마스터 데이터 포맷 버전 showcases List ~ 100 items 진열대 진열대 에는 진열할 상품을 정의할 수 있습니다. 또한 진열대 의 상품 판매 기간을 설정할 수 있습니다. randomShowcases List ~ 100 items 랜덤 진열대 랜덤 진열대는 지정한 주기로 교체되는, 랜덤으로 선별된 상품이 진열되는 진열대 모델입니다. 선별되는 상품은 상품 풀에 등록된 상품 중에서 지정된 수량이 상품별로 설정된 가중치에 기반하여 랜덤으로 선택됩니다. 랜덤 진열대에는 GS2-Schedule의 이벤트를 연결하여 판매 기간을 설정할 수 있습니다. 모델 Showcase 진열대 진열대 에는 진열할 상품을 정의할 수 있습니다. 또한 진열대 의 상품 판매 기간을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 showcaseId string ※ ~ 1024자 진열대 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 진열대 이름 진열대 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 연관된 GS2-Schedule 이벤트 기간 중에만 진열대를 이용할 수 있습니다. 이벤트가 유효하지 않은 경우, 진열대는 비어 있는 상태로 반환됩니다. displayItems List [] 1 ~ 1000 items 진열할 상품 리스트 이 진열대에 진열되는 상품의 리스트입니다. 각 진열 상품은 단일 상품 또는 상품 그룹 중 하나입니다. 판매 기간 이벤트가 종료되었거나 유효하지 않은 상품은 진열대 조회 시 자동으로 필터링됩니다. DisplayItem 진열 상품 진열대에 표시되는 상품입니다. 단일 상품 또는 상품 그룹 중 하나를 참조할 수 있습니다. 각 진열 상품에는 진열대 전체의 판매 기간과는 독립적으로 GS2-Schedule 이벤트에 의한 개별 판매 기간을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 displayItemId string  UUID ~ 128자 진열 상품 ID 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. type 문자열 열거형 enum {   “salesItem”,   “salesItemGroup” }  종류 표시할 상품의 종류입니다. “salesItem\"은 고정된 대가와 보상을 가진 단일 상품입니다. “salesItemGroup\"은 여러 상품을 순서대로 평가하는 상품 그룹으로, 단계별 가격 인상이나 초회 한정 할인 등에 사용됩니다. 정의 설명 salesItem 상품 salesItemGroup 상품 그룹 salesItem SalesItem {type} == “salesItem” ※ 상품 ※ type이(가) “salesItem” 이면 필수 salesItemGroup SalesItemGroup {type} == “salesItemGroup” ※ 상품 그룹 ※ type이(가) “salesItemGroup” 이면 필수 salesPeriodEventId string ~ 1024자 이 진열 상품의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 개별 진열 상품의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대에 표시됩니다. 진열대 전체의 판매 기간과는 독립적으로 동작합니다. SalesItem 상품 상품을 구매하기 위해 필요한 대가와, 상품을 구매했을 때 얻을 수 있는 보상을 설정합니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 이름 상품 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 리스트 구매 전에 실행되는 전제 조건 체크입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 구매 자격 조건 체크에 사용할 수 있습니다. consumeActions List [] 0 ~ 10 items 소비 액션 리스트 구매 대가로 리소스를 소비하는 액션입니다. 상품 그룹의 구매 횟수 제어를 위해 GS2-Limit의 CountUp 액션을 포함할 수 있습니다. acquireActions List [] 1 ~ 100 items 획득 액션 리스트 구매 보상으로 리소스를 부여하는 액션입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. SalesItemGroup 상품 그룹 상품 그룹은 진열대에 진열하기 위한 엔티티입니다. 상품 그룹에는 여러 상품을 소속시킬 수 있으며, 소속된 상품의 앞에서부터 순서대로 구매 가능한지를 판정하여 가장 먼저 구매 가능하다고 판정된 상품이 실제로 진열됩니다. 최초 1회만 할인되는 상품이나, 스텝업 가챠처럼 구매 횟수에 따라 상품 내용이 변화하는 구조에 사용할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 상품 그룹 이름 상품 그룹 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. salesItems List [] 2 ~ 10 items 상품 그룹에 포함할 상품 이 그룹 내 상품의 순서가 지정된 리스트입니다. GS2-Limit 카운터를 사용하여 앞에서부터 순서대로 구매 가능한지를 판정하고, 가장 먼저 구매 가능하다고 판정된 상품이 표시됩니다. 어느 것도 해당하지 않는 경우, 리스트의 마지막 상품이 폴백으로 사용됩니다. ConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 RandomShowcase 랜덤 진열대 랜덤 진열대는 지정한 주기로 교체되는, 랜덤으로 선별된 상품이 진열되는 진열대 모델입니다. 선별되는 상품은 상품 풀에 등록된 상품 중에서 지정된 수량이 상품별로 설정된 가중치에 기반하여 랜덤으로 선택됩니다. 랜덤 진열대에는 GS2-Schedule의 이벤트를 연결하여 판매 기간을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 randomShowcaseId string ※ ~ 1024자 랜덤 진열대 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 랜덤 진열대 이름 랜덤 진열대 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. maximumNumberOfChoice int  1 ~ 100 선택되는 상품의 최대 수 각 로테이션 기간마다 상품 풀에서 랜덤으로 추첨되는 상품의 수입니다. 가중치 기반 랜덤 선택으로 중복 없이 추첨되므로, 한 번의 로테이션에서 같은 상품이 두 번 표시되는 일은 없습니다. displayItems List [] 1 ~ 100 items 선택 대상 진열 상품 목록 상품이 랜덤으로 추첨되는 후보 아이템의 풀입니다. 각 아이템에는 선택 확률을 결정하는 가중치와, 로테이션 전체에서 표시 가능한 횟수를 제한하는 재고 수가 있습니다. baseTimestamp long  진열 상품 재추첨 기준 시간 로테이션 경계 계산에 사용되는 기준 타임스탬프입니다. 이 기준 시간으로부터 일정 간격(resetIntervalHours)마다 상품의 재추첨이 이루어집니다. 과거 시각을 지정해야 합니다. resetIntervalHours int  1 ~ 168 진열 상품을 재추첨하는 간격(시간) 각 상품 로테이션 사이의 시간 수입니다. baseTimestamp를 기준으로 간격이 경과하면 새로운 난수 시드로 진열 상품이 재추첨됩니다. 1~168시간(1주일) 범위에서 설정할 수 있습니다. salesPeriodEventId string ~ 1024자 진열대의 판매 기간을 설정한 GS2-Schedule의 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 랜덤 진열대 전체의 판매 기간을 제어합니다. 지정한 경우, 관련된 GS2-Schedule의 이벤트 기간 중에만 진열대를 이용할 수 있습니다. RandomDisplayItemModel 랜덤 진열대에 진열 가능한 상품 weight 에 상품을 선별하는 확률을 설정할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  UUID ~ 128자 랜덤 진열 상품 ID 랜덤 진열 상품의 고유한 이름을 유지합니다. 생략하면 시스템에 의해 UUID(Universally Unique Identifier) 형식으로 자동 할당됩니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. verifyActions List [] 0 ~ 10 items 검증 액션 목록 이 랜덤 진열 상품을 구매하기 전에 실행되는 전제 조건 확인입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. consumeActions List [] 0 ~ 10 items 소비 액션 목록 이 랜덤 진열 상품의 구매 대가로 리소스를 소비하는 액션입니다. 트랜잭션의 소비 액션으로 실행됩니다. acquireActions List [] 1 ~ 100 items 획득 액션 목록 이 랜덤 진열 상품의 구매 보상으로 리소스를 지급하는 액션입니다. 트랜잭션의 획득 액션으로 실행됩니다. stock int  1 ~ 2147483646 재고 수 모든 로테이션을 통틀어 이 상품이 추첨될 수 있는 최대 횟수입니다. 재고가 0이 되면 이후 추첨에서 제외됩니다. 로테이션 추첨 시 상품이 선택되면 재고가 소비됩니다. weight int  1 ~ 2147483646 추첨 가중치 랜덤 선택에서 이 상품의 상대적인 확률 가중치입니다. 가중치가 클수록 추첨될 확률이 높아집니다. 실제 선택 확률은 이 상품의 가중치를 대상이 되는 모든 상품의 가중치 합계로 나눈 값으로 계산됩니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Showcase 마스터 데이터 레퍼런스","url":"/ko/api_reference/showcase/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2023-09-06\" , \"nodeModels\" : [ { \"name\" : \"[string]노드 모델명\" , \"metadata\" : \"[string?]메타데이터\" , \"releaseVerifyActions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"releaseConsumeActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"returnAcquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"restrainReturnRate\" : \"[float]반환율\" , \"premiseNodeNames\" : [ \"[string]노드 모델명\" ] } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2023-09-06 마스터 데이터 포맷 버전 nodeModels List ~ 1000 items 노드 모델 스킬 트리 내의 노드를 정의하는 모델로, 해방 비용·전제 조건·반환 동작을 포함합니다. 각 노드에는 검증 액션(해방 전 조건 확인), 소비 액션(지불할 비용), 먼저 해방되어야 하는 전제 노드를 설정할 수 있습니다. 노드를 구속(미해방 상태로 되돌림)하면, 소비한 리소스가 반환율에 따라 부분적으로 반환됩니다. 반환 입수 액션은 소비 액션에 반환율을 곱하여 자동으로 계산됩니다. 모델 NodeModel 노드 모델 스킬 트리 내의 노드를 정의하는 모델로, 해방 비용·전제 조건·반환 동작을 포함합니다. 각 노드에는 검증 액션(해방 전 조건 확인), 소비 액션(지불할 비용), 먼저 해방되어야 하는 전제 노드를 설정할 수 있습니다. 노드를 구속(미해방 상태로 되돌림)하면, 소비한 리소스가 반환율에 따라 부분적으로 반환됩니다. 반환 입수 액션은 소비 액션에 반환율을 곱하여 자동으로 계산됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 nodeModelId string ※ ~ 1024자 노드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 노드 모델명 노드 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. releaseVerifyActions List [] 0 ~ 10 items 해방 검증 액션 목록 이 노드를 해방하기 전에 실행되어 조건이 충족되었는지 확인하는 검증 액션의 목록입니다. 예를 들어 플레이어가 특정 레벨에 도달했는지, 특정 아이템을 소지하고 있는지를 검증할 수 있습니다. 검증 액션 중 하나라도 실패하면 노드 해방이 거부됩니다. 최대 10개 액션. releaseConsumeActions List [] 1 ~ 10 items 해방 소비 액션 목록 이 노드를 해방할 때 실행되는 소비 액션의 목록으로, 해방 비용을 나타냅니다. 이 액션들은 반환 입수 액션 계산에도 사용됩니다. 노드를 구속할 때 각 소비 액션이 반환율에 따라 역산됩니다. 최소 1개의 소비 액션이 필요합니다. 최대 10개 액션. returnAcquireActions List 0 ~ 10 items 반환 입수 액션 목록 이 노드를 구속(취소)할 때 실행되는 입수 액션의 목록으로, 플레이어에게 반환되는 리소스를 나타냅니다. 이 필드는 해방 소비 액션에 반환율을 곱하여 자동 생성됩니다. 예를 들어 해방 비용이 골드 100이고 반환율이 0.8인 경우, 구속 시 골드 80이 반환됩니다. 최대 10개 액션. restrainReturnRate float 1.0 0.0 ~ 1.0 반환율 이 노드를 구속(미해방 상태로 되돌림)했을 때 소비된 리소스가 반환되는 비율입니다. 1.0은 전액 반환, 0.5는 절반 반환, 0.0은 반환 없음을 의미합니다. 기본값은 1.0(전액 반환)입니다. 유효 범위: 0.0~1.0. premiseNodeNames List [] 0 ~ 10 items 전제 노드명 목록 이 노드를 해방하기 전에 먼저 해방되어 있어야 하는 다른 노드 모델의 이름입니다. 스킬 트리의 의존 관계 그래프를 정의합니다. 전제 노드가 모두 해방되어 있지 않으면 이 노드는 해방할 수 없습니다. 최대 10개의 전제 노드. ConsumeAction 소비 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:ConsumePointByUserId\" , \"Gs2Dictionary:DeleteEntriesByUserId\" , \"Gs2Enhance:DeleteProgressByUserId\" , \"Gs2Exchange:DeleteAwaitByUserId\" , \"Gs2Experience:SubExperienceByUserId\" , \"Gs2Experience:SubRankCapByUserId\" , \"Gs2Formation:SubMoldCapacityByUserId\" , \"Gs2Grade:SubGradeByUserId\" , \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"Gs2Inbox:OpenMessageByUserId\" , \"Gs2Inbox:DeleteMessageByUserId\" , \"Gs2Inventory:ConsumeItemSetByUserId\" , \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"Gs2Inventory:ConsumeBigItemByUserId\" , \"Gs2JobQueue:DeleteJobByUserId\" , \"Gs2Limit:CountUpByUserId\" , \"Gs2LoginReward:MarkReceivedByUserId\" , \"Gs2Mission:ReceiveByUserId\" , \"Gs2Mission:BatchReceiveByUserId\" , \"Gs2Mission:DecreaseCounterByUserId\" , \"Gs2Mission:ResetCounterByUserId\" , \"Gs2Money:WithdrawByUserId\" , \"Gs2Money:RecordReceipt\" , \"Gs2Money2:WithdrawByUserId\" , \"Gs2Money2:VerifyReceiptByUserId\" , \"Gs2Quest:DeleteProgressByUserId\" , \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"Gs2Schedule:DeleteTriggerByUserId\" , \"Gs2SerialKey:UseByUserId\" , \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"Gs2SkillTree:MarkRestrainByUserId\" , \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"Gs2Stamina:ConsumeStaminaByUserId\" , }  소비 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 VerifyAction 검증 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2Dictionary:VerifyEntryByUserId\" , \"Gs2Distributor:IfExpressionByUserId\" , \"Gs2Distributor:AndExpressionByUserId\" , \"Gs2Distributor:OrExpressionByUserId\" , \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"Gs2Experience:VerifyRankByUserId\" , \"Gs2Experience:VerifyRankCapByUserId\" , \"Gs2Grade:VerifyGradeByUserId\" , \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"Gs2Inventory:VerifyItemSetByUserId\" , \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"Gs2Inventory:VerifySimpleItemByUserId\" , \"Gs2Inventory:VerifyBigItemByUserId\" , \"Gs2Limit:VerifyCounterByUserId\" , \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"Gs2Mission:VerifyCompleteByUserId\" , \"Gs2Mission:VerifyCounterValueByUserId\" , \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"Gs2Schedule:VerifyTriggerByUserId\" , \"Gs2Schedule:VerifyEventByUserId\" , \"Gs2SerialKey:VerifyCodeByUserId\" , \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , }  검증 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열 AcquireAction 입수 액션 타입 활성화 조건 필수 기본값 값 제한 설명 action 문자열 열거형 enum { \"Gs2AdReward:AcquirePointByUserId\" , \"Gs2Dictionary:AddEntriesByUserId\" , \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"Gs2Enhance:DirectEnhanceByUserId\" , \"Gs2Enhance:UnleashByUserId\" , \"Gs2Enhance:CreateProgressByUserId\" , \"Gs2Exchange:ExchangeByUserId\" , \"Gs2Exchange:IncrementalExchangeByUserId\" , \"Gs2Exchange:CreateAwaitByUserId\" , \"Gs2Exchange:AcquireForceByUserId\" , \"Gs2Exchange:SkipByUserId\" , \"Gs2Experience:AddExperienceByUserId\" , \"Gs2Experience:SetExperienceByUserId\" , \"Gs2Experience:AddRankCapByUserId\" , \"Gs2Experience:SetRankCapByUserId\" , \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"Gs2Formation:AddMoldCapacityByUserId\" , \"Gs2Formation:SetMoldCapacityByUserId\" , \"Gs2Formation:AcquireActionsToFormProperties\" , \"Gs2Formation:SetFormByUserId\" , \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"Gs2Friend:UpdateProfileByUserId\" , \"Gs2Grade:AddGradeByUserId\" , \"Gs2Grade:ApplyRankCapByUserId\" , \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"Gs2Idle:ReceiveByUserId\" , \"Gs2Inbox:SendMessageByUserId\" , \"Gs2Inventory:AddCapacityByUserId\" , \"Gs2Inventory:SetCapacityByUserId\" , \"Gs2Inventory:AcquireItemSetByUserId\" , \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"Gs2Inventory:AddReferenceOfByUserId\" , \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"Gs2Inventory:SetSimpleItemsByUserId\" , \"Gs2Inventory:AcquireBigItemByUserId\" , \"Gs2Inventory:SetBigItemByUserId\" , \"Gs2JobQueue:PushByUserId\" , \"Gs2Limit:CountDownByUserId\" , \"Gs2Limit:DeleteCounterByUserId\" , \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"Gs2Lottery:DrawByUserId\" , \"Gs2Lottery:ResetBoxByUserId\" , \"Gs2Mission:RevertReceiveByUserId\" , \"Gs2Mission:IncreaseCounterByUserId\" , \"Gs2Mission:SetCounterByUserId\" , \"Gs2Money:DepositByUserId\" , \"Gs2Money:RevertRecordReceipt\" , \"Gs2Money2:DepositByUserId\" , \"Gs2Quest:CreateProgressByUserId\" , \"Gs2Schedule:TriggerByUserId\" , \"Gs2Schedule:ExtendTriggerByUserId\" , \"Gs2Script:InvokeScript\" , \"Gs2SerialKey:RevertUseByUserId\" , \"Gs2SerialKey:IssueOnce\" , \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"Gs2Showcase:ForceReDrawByUserId\" , \"Gs2SkillTree:MarkReleaseByUserId\" , \"Gs2Stamina:RecoverStaminaByUserId\" , \"Gs2Stamina:RaiseMaxValueByUserId\" , \"Gs2Stamina:SetMaxValueByUserId\" , \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"Gs2Stamina:SetRecoverValueByUserId\" , \"Gs2StateMachine:StartStateMachineByUserId\" , }  입수 액션에서 실행할 액션의 종류 request string  ~ 524288자 액션 실행 시 사용되는 요청의 JSON 문자열","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-SkillTree 마스터 데이터 레퍼런스","url":"/ko/api_reference/skill_tree/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-02-14\" , \"staminaModels\" : [ { \"name\" : \"[string]스태미나 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"recoverIntervalMinutes\" : \"[int]회복 간격(분)\" , \"recoverValue\" : \"[int]회복량\" , \"initialCapacity\" : \"[int]최대값의 초기값\" , \"isOverflow\" : \"[bool]오버플로우 가능 여부\" , \"maxCapacity\" : \"[int]오버플로우 시 최대값\" , \"maxStaminaTable\" : { \"name\" : \"[string]스태미나 최대값 테이블 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"experienceModelId\" : \"[string]경험치 모델 ID\" , \"values\" : [ \"[int]스태미나 최대값\" ] }, \"recoverIntervalTable\" : { \"name\" : \"[string]회복 간격 테이블 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"experienceModelId\" : \"[string]경험치 모델 ID\" , \"values\" : [ \"[int?]스태미나 회복 간격(분)\" ] }, \"recoverValueTable\" : { \"name\" : \"[string]스태미나 회복량 테이블 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"experienceModelId\" : \"[string]경험치 모델 ID\" , \"values\" : [ \"[int?]스태미나 회복량\" ] } } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-02-14 마스터 데이터 포맷 버전 staminaModels List ~ 100 items 스태미나 모델 스태미나의 최대값, 회복 간격, 회복량과 같은 파라미터를 정의할 수 있습니다. GS2-Experience와 연동하여 최대값이나 회복량을 제어할 수도 있습니다. 모델 StaminaModel 스태미나 모델 스태미나의 최대값, 회복 간격, 회복량과 같은 파라미터를 정의할 수 있습니다. GS2-Experience와 연동하여 최대값이나 회복량을 제어할 수도 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 staminaModelId string ※ ~ 1024자 스타미나 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 스태미나 모델 이름 스태미나 모델 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. recoverIntervalMinutes int  0 ~ 2147483646 회복 간격(분) 스태미나 회복 틱의 간격(분 단위)입니다. 이 간격이 경과할 때마다 플레이어의 스태미나가 회복량만큼 증가합니다. RecoverIntervalTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 0으로 설정하면 시간 기반 자동 회복이 비활성화됩니다. recoverValue int 1 0 ~ 2147483646 회복량 회복 틱마다 회복되는 스태미나의 양입니다. 회복 간격이 경과할 때마다 최대값에 도달할 때까지 이 값만큼 스태미나가 증가합니다. RecoverValueTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. 기본값은 1입니다. initialCapacity int  0 ~ 2147483646 최대값의 초기값 모든 플레이어에 대한 기본 스태미나 최대값입니다. 오버플로우가 비활성화된 경우, 사용자별 최대값의 하한으로 작용합니다. MaxStaminaTable을 사용하여 GS2-Experience의 랭크별로 사용자 단위로 오버라이드할 수 있습니다. isOverflow bool  오버플로우 가능 여부 아이템 사용 등의 수단으로 스태미나가 초기 최대값을 초과할 수 있는지 여부입니다. 활성화된 경우, 스태미나는 initialCapacity를 초과하여 maxCapacity까지 설정할 수 있습니다. 자연 회복은 일반적인 최대값에서 정지합니다. 비활성화된 경우, 사용자별 최대값은 initialCapacity 이상으로 제한됩니다. maxCapacity int {isOverflow} == true ※ 0 ~ 2147483646 오버플로우 시 최대값 오버플로우 활성화 시 스태미나의 절대 상한값입니다. 오버플로우 상태에서도 스태미나는 이 값을 초과할 수 없습니다. isOverflow가 true인 경우에만 표시됩니다. 예를 들어 initialCapacity가 100, maxCapacity가 200인 경우, 아이템으로 스태미나를 200까지 늘릴 수 있지만 자연 회복은 100에서 정지합니다. ※ isOverflow이(가) true 이면 필수 maxStaminaTable MaxStaminaTable 스태미나 최대값 테이블 플레이어의 GS2-Experience 랭크에 기반하여 스태미나 최대값을 동적으로 결정하는 MaxStaminaTable에 대한 참조입니다. 설정 시, 플레이어의 최대 스태미나는 현재 랭크 인덱스로 테이블에서 참조되며, initialCapacity를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 initialCapacity를 최대값으로 공유합니다. recoverIntervalTable RecoverIntervalTable 회복 간격 테이블 플레이어의 GS2-Experience 랭크에 기반하여 회복 간격을 동적으로 결정하는 RecoverIntervalTable에 대한 참조입니다. 설정 시, 플레이어의 회복 간격은 현재 랭크 인덱스로 테이블에서 참조되며, recoverIntervalMinutes를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 recoverIntervalMinutes를 공유합니다. recoverValueTable RecoverValueTable 회복량 테이블 플레이어의 GS2-Experience 랭크에 기반하여 회복량을 동적으로 결정하는 RecoverValueTable에 대한 참조입니다. 설정 시, 플레이어의 회복량은 현재 랭크 인덱스로 테이블에서 참조되며, recoverValue를 오버라이드합니다. 미설정 시, 모든 플레이어가 동일한 recoverValue를 공유합니다. MaxStaminaTable 스태미나 최대값 테이블 스태미나 최대값 테이블은 GS2-Experience의 랭크별로 스태미나의 최대값을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 최대값 테이블 이름 스태미나 최대값 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 스태미나 최대값이 결정됩니다. values List  1 ~ 1024 items 랭크별 스태미나 최대값 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 스태미나 최대값의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 최대 스태미나로 사용됩니다. 배열 길이는 참조하는 ExperienceModel에서 정의된 랭크 수와 일치해야 합니다. RecoverIntervalTable 회복 간격 테이블 회복 간격 테이블은 GS2-Experience의 랭크별로 스태미나의 회복 간격을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 회복 간격 테이블 이름 회복 간격 테이블 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복 간격이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복 간격 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복 간격 값(분 단위)의 배열. 인덱스 i의 값이 랭크 i의 플레이어의 회복 간격으로 사용되며, 모델의 기본값 recoverIntervalMinutes를 오버라이드합니다. RecoverValueTable 스태미나 회복량 테이블 스태미나 회복량 테이블은 GS2-Experience의 랭크별로 스태미나의 회복량을 정의하는 엔티티입니다. 타입 활성화 조건 필수 기본값 값 제한 설명 name string  ~ 128자 스태미나 회복량 테이블 이름 스태미나 회복량 테이블 고유의 이름. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. metadata string ~ 128자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. experienceModelId string  ~ 1024자 경험치 모델 ID 플레이어의 현재 랭크를 참조하기 위해 사용하는 GS2-Experience의 ExperienceModel의 GRN. 랭크 인덱스가 values 목록의 배열 인덱스로 사용되어, 사용자별 회복량이 결정됩니다. values List  1 ~ 1024 items 랭크별 회복량 플레이어의 GS2-Experience 랭크 인덱스로 색인되는 회복량 값의 배열입니다. 인덱스 i의 값은 랭크 i의 플레이어에 대한 틱당 회복량으로 사용되며, 모델의 기본 recoverValue를 오버라이드합니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Stamina 마스터 데이터 레퍼런스","url":"/ko/api_reference/stamina/master_data/"},{"content":"마스터 데이터 포맷 JSON { \"version\" : \"2019-10-09\" , \"versionModels\" : [ { \"name\" : \"[string]버전 모델 이름\" , \"metadata\" : \"[string?]메타데이터\" , \"scope\" : \"[문자열 열거형]판정에 사용할 버전 값의 종류\" , \"type\" : \"[문자열 열거형]버전 체크 모드\" , \"currentVersion\" : { \"major\" : \"[int]메이저 버전\" , \"minor\" : \"[int]마이너 버전\" , \"micro\" : \"[int]마이크로 버전\" }, \"warningVersion\" : { \"major\" : \"[int]메이저 버전\" , \"minor\" : \"[int]마이너 버전\" , \"micro\" : \"[int]마이크로 버전\" }, \"errorVersion\" : { \"major\" : \"[int]메이저 버전\" , \"minor\" : \"[int]마이너 버전\" , \"micro\" : \"[int]마이크로 버전\" }, \"scheduleVersions\" : [ { \"currentVersion\" : { \"major\" : \"[int]메이저 버전\" , \"minor\" : \"[int]마이너 버전\" , \"micro\" : \"[int]마이크로 버전\" }, \"warningVersion\" : { \"major\" : \"[int]메이저 버전\" , \"minor\" : \"[int]마이너 버전\" , \"micro\" : \"[int]마이크로 버전\" }, \"errorVersion\" : { \"major\" : \"[int]메이저 버전\" , \"minor\" : \"[int]마이너 버전\" , \"micro\" : \"[int]마이크로 버전\" }, \"scheduleEventId\" : \"[string?]버전 체크를 활성화하는 GS2-Schedule 이벤트 GRN\" } ], \"needSignature\" : \"[bool]판정할 버전 값에 서명 검증이 필요한지 여부\" , \"signatureKeyId\" : \"[string]암호화 키 GRN\" , \"approveRequirement\" : \"[문자열 열거형]승인 필요 여부\" } ] } 타입 활성화 조건 필수 기본값 값 제한 설명 version string  2019-10-09 마스터 데이터 포맷 버전 versionModels List ~ 100 items 버전 모델 버전 모델에는 로그인은 허용하지만 버전 업그레이드가 가능함을 알리는 경고 버전과, 로그인을 허용하지 않는 에러 버전을 설정할 수 있습니다. 현재 버전을 클라이언트에 신고하도록 할 때, 서명 유무를 지정할 수 있습니다. 서명 있음을 선택한 경우, 클라이언트는 허위 버전을 신고할 수 없게 됩니다. 모델 VersionModel 버전 모델 버전 모델에는 로그인은 허용하지만 버전 업그레이드가 가능함을 알리는 경고 버전과, 로그인을 허용하지 않는 에러 버전을 설정할 수 있습니다. 현재 버전을 클라이언트에 신고하도록 할 때, 서명 유무를 지정할 수 있습니다. 서명 있음을 선택한 경우, 클라이언트는 허위 버전을 신고할 수 없게 됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 versionModelId string ※ ~ 1024자 버전 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ 서버가 자동으로 설정 name string  ~ 128자 버전 모델 이름 버전 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. scope 문자열 열거형 enum {   “passive”,   “active” }  판정에 사용할 버전 값의 종류 버전 체크에 사용할 버전 값을 얻는 방법을 결정합니다. “passive\"는 체크 시점에 클라이언트가 현재 버전을 신고하는 방식이며, “active\"는 사용자가 과거에 명시적으로 승인한 버전(이용약관 동의 등)을 사용하는 방식입니다. 정의 설명 passive 클라이언트에서 전송 active 과거 명시적으로 승인한 버전 type 문자열 열거형 enum {   “simple”,   “schedule” } “simple” 버전 체크 모드 버전 체크 방식을 선택합니다. “simple\"은 고정된 경고·에러 버전 임계값을 사용하며, “schedule\"은 GS2-Schedule의 이벤트를 이용하여 시기에 따라 다른 버전 임계값을 적용합니다. 정의 설명 simple 심플 schedule 시계열 전환 currentVersion Version {type} == “simple” and {scope} == “active” ※ 현재 버전 이 버전 모델의 최신 버전입니다. “simple” 모드의 “active” 스코프에서만 사용되며, 사용자가 버전 업데이트를 승인·확인할 때 현재 버전을 알립니다. ※ type이(가) “simple\"이고 scope이(가) “active” 이면 필수 warningVersion Version {type} == “simple” ※ 버전 업그레이드를 촉구하는 버전 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮은 경우에도 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 errorVersion Version {type} == “simple” ※ 버전 체크에서 에러로 판정되는 버전 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. ※ type이(가) “simple” 이면 필수 scheduleVersions List {type} == “schedule” 0 ~ 10 items 시계열로 전환되는 버전 체크 내용 목록 GS2-Schedule의 이벤트를 기준으로 서로 다른 시점에 유효해지는 버전 체크 설정 목록입니다. 업데이트를 필수로 만들기 전에 경고를 표시하는 등 단계적인 버전 강제가 가능해집니다. ※ type이(가) “schedule” 이면 활성화 needSignature bool {scope} == “passive” ※ 판정할 버전 값에 서명 검증이 필요한지 여부 활성화하면 클라이언트는 버전 신고와 함께 암호 서명을 제공해야 합니다. 이를 통해 클라이언트가 버전 체크를 회피하기 위해 허위 버전을 신고하는 것을 방지합니다. 스코프가 “passive\"인 경우에만 적용됩니다. ※ scope이(가) “passive” 이면 필수 signatureKeyId string {needSignature} ※ ~ 1024자 암호화 키 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ needSignature이(가) “true” 이면 필수 approveRequirement 문자열 열거형 enum {   “required”,   “optional” } {scope} == “active” “required” 승인 필요 여부 이 버전 모델에 대한 사용자 승인이 필수인지 임의인지를 제어합니다. “required\"인 경우, 사용자가 현재 버전을 승인하지 않으면 버전 체크가 실패합니다. “optional\"인 경우, 승인 상태와 관계없이 버전 체크가 통과합니다. 스코프가 “active\"인 경우에만 적용됩니다. 정의 설명 required 승인 필요 optional 임의 승인 ※ scope이(가) “active” 이면 활성화 Version 버전 3단계 계층(메이저, 마이너, 마이크로)으로 구성된 버전 번호를 나타냅니다. 버전 비교는 메이저, 마이너, 마이크로 순으로 계층적으로 수행됩니다. 버전 체크의 경고·에러 임계값 정의에 사용됩니다. 타입 활성화 조건 필수 기본값 값 제한 설명 major int  0 ~ 2147483646 메이저 버전 버전 비교에서 가장 우선순위가 높은 구성 요소입니다. 메이저 버전의 차이는 마이너 버전 및 마이크로 버전보다 우선합니다. minor int  0 ~ 2147483646 마이너 버전 버전 비교에서 두 번째로 우선순위가 높은 구성 요소입니다. 메이저 버전이 동일한 경우에만 비교됩니다. micro int  0 ~ 2147483646 마이크로 버전 버전 비교에서 가장 우선순위가 낮은 구성 요소입니다. 메이저 버전과 마이너 버전이 모두 동일한 경우에만 비교됩니다. ScheduleVersion 시계열로 전환되는 버전 GS2-Schedule의 이벤트로 제어되는 특정 기간 동안 유효해지는 버전 임계값(현재, 경고, 에러) 세트를 정의합니다. 여러 개의 스케줄 버전을 설정함으로써, 오래된 클라이언트를 차단하기 전에 사용자에게 경고하는 등 단계적인 버전 강제를 구현할 수 있습니다. 타입 활성화 조건 필수 기본값 값 제한 설명 currentVersion Version  현재 버전 이 스케줄 기간 동안 사용 가능한 최신 버전입니다. “active” 스코프에서 사용자가 업데이트를 승인할 때 현재 버전을 알리는 데 사용됩니다. warningVersion Version  버전 업그레이드를 촉구하는 버전 이 스케줄 기간 동안 업그레이드 알림을 표시하는 최소 버전 임계값입니다. 로그인은 허용되지만 사용자에게 업그레이드가 권장됩니다. errorVersion Version  버전 체크에서 에러로 판정되는 버전 이 스케줄 기간 동안 로그인을 허용하는 최소 버전 임계값입니다. 클라이언트의 버전이 이 값보다 낮으면 버전 체크가 에러로 판정되어 로그인이 차단됩니다. scheduleEventId string ~ 1024자 버전 체크를 활성화하는 GS2-Schedule 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN 이 버전 임계값 세트가 유효해지는 기간을 제어하는 GS2-Schedule의 이벤트를 지정합니다. 여기서 정의된 버전 체크 설정은 지정한 이벤트가 활성화되어 있는 기간에만 적용됩니다.","lang":"ko","section":"api_reference","summary":"마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스\n","title":"GS2-Version 마스터 데이터 레퍼런스","url":"/ko/api_reference/version/master_data/"},{"content":"릴리스 절차는 매우 단순합니다. 운영 환경용 GS2 계정·프로젝트에 대해, 개발 환경·검증 환경을 구축하기 위해 키워온 GS2-Deploy의 템플릿을 적용하기만 하면 됩니다. 애플리케이션의 호환성이 손상되는 파괴적인 변경이 가해지는 경우에는 GS2-Version + GS2-Gateway를 사용하여 플레이어를 강제로 내보내야 할 수도 있지만, 그 역시 API를 하나 호출하기만 하면 됩니다. 그 절차에 대해서는 여기 를 확인해 주세요.","lang":"ko","section":"overview","summary":"GS2를 이용한 게임의 릴리스 방법에 대해\n","title":"릴리스","url":"/ko/overview/workflow/release/"},{"content":"Game as a Service 를 실현하기 위해서는 데이터 분석이 중요합니다. “도대체 얼마나 많은 플레이어가 매일 플레이해 주고 있는가”, “플레이어는 게임의 어디에서 막히고 있는가”, “게임 내 리소스 공급량은 적절한가” 데이터는 많으면 많을수록, 다음에 플레이어를 기쁘게 하기 위해 어떤 조치를 취하는 것이 효과적인지 판단하는 정확도가 높아집니다. GS2 가 게임 특화 Backend as a Service 의 다수 접근 방식과 다르게, 사용자 데이터를 단순한 바이너리 스토리지에 보관하는 것이 아니라, 수고스러운 기능별 마이크로서비스를 준비하여, 마이크로서비스별로 데이터를 보관하고 있는 이유 중 하나는 데이터 분석을 위해서입니다. 게임 개발자는 GS2-Quest 를 사용해 게임 진행 관리를 하는 것만으로, GS2 가 데이터 분석을 실행하여 관리 콘솔을 통해 퀘스트의 도전 횟수나 클리어율을 분석해서 제공합니다. GS2 의 접속 로그는 실시간으로 원하시는 Google BigQuery 또는 Amazon Kinesis Data Firehose 로 전달할 수 있습니다. 전달된 접속 로그를 분석함으로써 원하는 데이터 분석이 가능합니다. 또한, GS2 는 Google BigQuery 에 축적된 데이터를 시각화하는 오픈소스 GS2-Insight 를 제공하고 있습니다. 이 오픈소스를 이용하면 관리 콘솔에서 확인하는 메트릭보다 상세한 메트릭을 확인하고, 플레이어의 행동을 타임라인으로 시각화할 수 있습니다.","lang":"ko","section":"overview","summary":"GS2 를 이용한 게임의 데이터 분석 방법에 대해\n","title":"분석","url":"/ko/overview/workflow/analytics/"},{"content":"Consume Action 소비 액션 Gs2AdReward:ConsumePointByUserId 사용자 ID를 지정하여 포인트 소비 지정된 사용자 ID로부터 지정된 수의 포인트를 차감하고, 갱신된 포인트 정보를 반환합니다. 요청된 소비량에 대해 포인트가 부족한 경우 오류가 반환됩니다. 네임스페이스의 소비 스크립트 설정에 GS2-Script가 설정되어 있는 경우, 포인트 차감 전에 스크립트가 실행되어 커스텀 검증이나 소비량 변경이 가능합니다. 포인트 차감 후, 네임스페이스 설정에서 변경 알림이 구성되어 있으면 알림이 전송됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. point long  1 ~ 9223372036854775805 소비할 포인트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2AdReward:ConsumePointByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"point\" : \"[long]소비할 포인트\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2AdReward:ConsumePointByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" point : \"[long]소비할 포인트\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"adReward\" ). consume.consume_point_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , point = \"[long]소비할 포인트\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2AdReward:AcquirePointByUserId 사용자 ID를 지정하여 포인트 획득 지정된 사용자 ID에 지정된 수의 포인트를 추가하고, 갱신된 포인트 정보를 반환합니다. 사용자의 포인트 레코드가 존재하지 않는 경우, 포인트 추가 전에 새로운 레코드가 자동으로 생성됩니다. 네임스페이스의 획득 스크립트 설정에 GS2-Script가 설정되어 있는 경우, 포인트 추가 전에 스크립트가 실행되어 커스텀 검증이나 획득량 변경이 가능합니다. 포인트 추가 후, 네임스페이스 설정에서 변경 알림이 구성되어 있으면 알림이 전송됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. point long  1 ~ 9223372036854775805 획득할 포인트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2AdReward:AcquirePointByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"point\" : \"[long]획득할 포인트\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2AdReward:AcquirePointByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" point : \"[long]획득할 포인트\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"adReward\" ). acquire.acquire_point_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , point = \"[long]획득할 포인트\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-AdReward 트랜잭션 액션","url":"/ko/api_reference/ad_reward/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Dictionary:VerifyEntryByUserId 사용자 ID를 지정하여 엔트리 검증 지정한 사용자가 특정 엔트리를 수집했는지 여부를 검증합니다. 검증 타입으로 조건을 지정합니다：‘have’는 사용자가 엔트리를 보유하고 있는지 확인하고, ‘havent’는 보유하고 있지 않은지 확인합니다. 검증에 실패한 경우, 오류가 반환됩니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. entryModelName string  ~ 128자 엔트리 모델 이름 엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “havent”,   “have” }  검증 종류 정의 설명 havent 지정한 엔트리를 보유하고 있지 않을 것 have 지정한 엔트리를 보유하고 있을 것 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Dictionary:VerifyEntryByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"entryModelName\" : \"[string]엔트리 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Dictionary:VerifyEntryByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" entryModelName : \"[string]엔트리 모델 이름\" verifyType : \"[string]검증 종류\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"dictionary\" ). verify.verify_entry_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , entryModelName = \"[string]엔트리 모델 이름\" , verifyType = \"[string]검증 종류\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Dictionary:DeleteEntriesByUserId 사용자 ID를 지정하여 엔트리 삭제 엔트리 모델 이름의 목록을 지정하여, 지정한 사용자의 도감에서 특정 엔트리를 삭제합니다. 일괄 작업으로 여러 엔트리를 한 번에 삭제할 수 있습니다. 반환되는 목록에는 실제로 삭제된 엔트리가 포함됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Dictionary:DeleteEntriesByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"entryModelNames\" : [ \"[string]엔트리 모델 이름\" ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Dictionary:DeleteEntriesByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" entryModelNames : - \"[string]엔트리 모델 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"dictionary\" ). consume.delete_entries_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , entryModelNames = { \"[string]엔트리 모델 이름\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Dictionary:AddEntriesByUserId 사용자 ID를 지정하여 엔트리 등록 지정한 사용자의 도감에 하나 이상의 엔트리를 등록합니다. 일괄 작업으로 여러 엔트리 모델 이름을 한 번에 지정할 수 있습니다. 이미 등록된 엔트리는 오류 없이 건너뜁니다. 반환되는 목록에는 새로 추가된 엔트리만 포함됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. entryModelNames List [] 0 ~ 100 items 엔트리 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Dictionary:AddEntriesByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"entryModelNames\" : [ \"[string]엔트리 모델 이름\" ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Dictionary:AddEntriesByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" entryModelNames : - \"[string]엔트리 모델 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"dictionary\" ). acquire.add_entries_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , entryModelNames = { \"[string]엔트리 모델 이름\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Dictionary 트랜잭션 액션","url":"/ko/api_reference/dictionary/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Distributor:IfExpressionByUserId 조건을 검증하고 소비 액션의 내용을 전환 검증 액션을 조건으로 평가하고, 결과에 따라 trueActions 또는 falseActions의 소비 액션 목록을 실행합니다. 이를 통해 트랜잭션 내에서 조건 분기가 가능해지며, 검증 결과에 따라 서로 다른 소비 액션을 실행할 수 있습니다. multiplyValueSpecifyingQuantity가 활성화된 경우, 검증에 사용되는 값도 지정된 수량만큼 곱해집니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. condition VerifyAction  조건 trueActions List 0 ~ 10 items 조건이 참일 때 실행되는 소비 액션 목록 falseActions List 0 ~ 10 items 조건이 거짓일 때 실행되는 소비 액션 목록 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Distributor:IfExpressionByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"condition\" : { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" }, \"trueActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"falseActions\" : [ { \"action\" : \"[string]소비 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Distributor:IfExpressionByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" condition : action : \"[string]검증 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" trueActions : - action : \"[string]소비 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" falseActions : - action : \"[string]소비 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"distributor\" ). verify.if_expression_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , condition = { action = \"[string]검증 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" }, trueActions = { { action = \"[string]소비 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } }, falseActions = { { action = \"[string]소비 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } }, multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Distributor:AndExpressionByUserId 여러 검증 액션을 실행하여 모두 참인지 판정 여러 검증 액션을 실행하고, 모두 참으로 평가된 경우에만 성공합니다(AND 논리). 검증 액션 중 하나라도 실패하면 전체 표현식이 실패합니다. 트랜잭션 실행 전에 모두 충족해야 하는 여러 전제 조건을 조합할 때 유용합니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. actions List 0 ~ 10 items 검증 액션 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Distributor:AndExpressionByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"actions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Distributor:AndExpressionByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" actions : - action : \"[string]검증 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"distributor\" ). verify.and_expression_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , actions = { { action = \"[string]검증 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Distributor:OrExpressionByUserId 여러 검증 액션을 실행하여 하나라도 참인지 판정 여러 검증 액션을 실행하고, 그중 하나라도 참으로 평가되면 성공합니다(OR 논리). 모든 검증 액션이 실패한 경우에만 표현식이 실패합니다. 그중 하나만 충족해도 되는 대체 조건을 정의할 때 유용합니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. actions List 0 ~ 10 items 검증 액션 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Distributor:OrExpressionByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"actions\" : [ { \"action\" : \"[string]검증 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Distributor:OrExpressionByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" actions : - action : \"[string]검증 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"distributor\" ). verify.or_expression_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , actions = { { action = \"[string]검증 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Distributor 트랜잭션 액션","url":"/ko/api_reference/distributor/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Enchant:VerifyRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터를 검증 지정된 사용자의 레어리티 파라미터 상태가 지정된 조건을 충족하는지 검증합니다. 3가지 검증 유형이 지원됩니다: ‘have’: 지정된 파라미터 값이 상태에 존재하는지 검증 ‘havent’: 지정된 파라미터 값이 상태에 존재하지 않는지 검증 ‘count’: 파라미터의 수가 지정된 수와 일치하는지 검증 다른 액션을 실행하기 전의 전제 조건 확인으로 사용할 수 있습니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. verifyType 문자열 열거형 enum {   “havent”,   “have”,   “count” }  검증 종류 정의 설명 havent 지정한 파라미터를 보유하고 있지 않을 것 have 지정한 파라미터를 보유하고 있을 것 count 보유하고 있는 파라미터의 수가 지정한 수와 같을 것 parameterValueName string {verifyType} in [“havent”, “have”] ※ ~ 64자 이름 이 추첨 엔트리의 식별자입니다. 레어리티 파라미터 모델의 값 풀 내에서 고유해야 합니다. 추첨되었을 때, 이 이름이 결과 레어리티 파라미터 값에 저장됩니다. ※ verifyType이(가) “havent”,“have\"이면 필수 parameterCount int {verifyType} == “count” ※ 0 ~ 10 검증할 파라미터의 수 ※ verifyType이(가) “count” 이면 필수 multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enchant:VerifyRarityParameterStatusByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"parameterName\" : \"[string]레어리티 파라미터 모델명\" , \"userId\" : \"[string]사용자ID\" , \"propertyId\" : \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" , \"verifyType\" : \"[string]검증 종류\" , \"parameterValueName\" : \"[string]이름\" , \"parameterCount\" : \"[int]검증할 파라미터의 수\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enchant:VerifyRarityParameterStatusByUserId request : namespaceName : \"[string]네임스페이스 이름\" parameterName : \"[string]레어리티 파라미터 모델명\" userId : \"[string]사용자ID\" propertyId : \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" verifyType : \"[string]검증 종류\" parameterValueName : \"[string]이름\" parameterCount : \"[int]검증할 파라미터의 수\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enchant\" ). verify.verify_rarity_parameter_status_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , parameterName = \"[string]레어리티 파라미터 모델명\" , userId = \"[string]사용자ID\" , propertyId = \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" , verifyType = \"[string]검증 종류\" , parameterValueName = \"[string]이름\" , parameterCount = \"[int]검증할 파라미터의 수\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Enchant:ReDrawBalanceParameterStatusByUserId 사용자 ID를 지정하여 밸런스 파라미터 재추첨 특정 프로퍼티의 밸런스 파라미터 값을 재추첨하고, 합계값을 파라미터 간에 재분배합니다. fixedParameterNames 에 파라미터 이름을 지정하면 특정 파라미터를 고정(잠금)하여 재추첨 대상에서 제외할 수 있습니다(최대 10개). 합계값 제약은 유지됩니다: 고정된 파라미터를 포함한 모든 파라미터 값의 합계는 항상 모델의 합계값과 같습니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. fixedParameterNames List [] 0 ~ 10 items 재추첨하지 않는 파라미터의 이름 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enchant:ReDrawBalanceParameterStatusByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"parameterName\" : \"[string]밸런스 파라미터 모델 이름\" , \"propertyId\" : \"[string]파라미터를 보유한 리소스의 프로퍼티 ID\" , \"fixedParameterNames\" : [ \"[string]재추첨하지 않을 파라미터의 이름\" ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enchant:ReDrawBalanceParameterStatusByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" parameterName : \"[string]밸런스 파라미터 모델 이름\" propertyId : \"[string]파라미터를 보유한 리소스의 프로퍼티 ID\" fixedParameterNames : - \"[string]재추첨하지 않을 파라미터의 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enchant\" ). acquire.re_draw_balance_parameter_status_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , parameterName = \"[string]밸런스 파라미터 모델 이름\" , propertyId = \"[string]파라미터를 보유한 리소스의 프로퍼티 ID\" , fixedParameterNames = { \"[string]재추첨하지 않을 파라미터의 이름\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Enchant:SetBalanceParameterStatusByUserId 사용자 ID를 지정하여 밸런스 파라미터에 임의의 값을 설정 통상적인 추첨/재추첨 메커니즘을 거치지 않고, 지정된 사용자의 특정 프로퍼티에 파라미터 값을 직접 설정합니다. 이는 임의의 파라미터 값을 할당할 수 있는 관리 작업입니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. parameterName string  ~ 128자 밸런스 파라미터 모델 이름 이 상태의 추첨 조건을 정의하는 밸런스 파라미터 모델의 이름입니다. 합계 값, 배분 방침, 사용 가능한 파라미터 슬롯을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터를 보유한 리소스의 프로퍼티 ID 이러한 밸런스 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기 또는 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. parameterValues List  1 ~ 10 items 밸런스 파라미터 값 리스트 추첨 처리 후 각 파라미터 슬롯에 할당된 구체적인 값입니다. 각 엔트리는 모델에서 정의된 파라미터 슬롯에 대응하며, 할당된 실제 수치를 보유합니다. 모든 값의 합계는 모델에서 지정된 합계 값과 같아집니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enchant:SetBalanceParameterStatusByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"parameterName\" : \"[string]밸런스 파라미터 모델 이름\" , \"propertyId\" : \"[string]파라미터를 보유한 리소스의 프로퍼티 ID\" , \"parameterValues\" : [ { \"name\" : \"[string]이름\" , \"value\" : \"[long]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enchant:SetBalanceParameterStatusByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" parameterName : \"[string]밸런스 파라미터 모델 이름\" propertyId : \"[string]파라미터를 보유한 리소스의 프로퍼티 ID\" parameterValues : - name : \"[string]이름\" value : \"[long]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enchant\" ). acquire.set_balance_parameter_status_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , parameterName = \"[string]밸런스 파라미터 모델 이름\" , propertyId = \"[string]파라미터를 보유한 리소스의 프로퍼티 ID\" , parameterValues = { { name = \"[string]이름\" , value = \"[long]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Enchant:ReDrawRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터를 재추첨 특정 프로퍼티의 레어리티 파라미터 값을 재추첨하고, 레어리티 가중치에 기반하여 무작위로 새 값을 할당합니다. fixedParameterNames 에 파라미터 이름을 지정하면 특정 파라미터를 고정(잠금)하여 재추첨 대상에서 제외할 수 있습니다(최대 10개). 고정된 파라미터는 현재 값을 유지하며, 고정되지 않은 파라미터만 재추첨됩니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. fixedParameterNames List 0 ~ 10 items 재추첨하지 않는 파라미터의 이름 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enchant:ReDrawRarityParameterStatusByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"parameterName\" : \"[string]레어리티 파라미터 모델명\" , \"propertyId\" : \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" , \"fixedParameterNames\" : [ \"[string]재추첨하지 않을 파라미터의 이름\" ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enchant:ReDrawRarityParameterStatusByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" parameterName : \"[string]레어리티 파라미터 모델명\" propertyId : \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" fixedParameterNames : - \"[string]재추첨하지 않을 파라미터의 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enchant\" ). acquire.re_draw_rarity_parameter_status_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , parameterName = \"[string]레어리티 파라미터 모델명\" , propertyId = \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" , fixedParameterNames = { \"[string]재추첨하지 않을 파라미터의 이름\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Enchant:AddRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터를 추가 레어리티 가중치에 기반하여 무작위로 값을 추첨하고, 기존 레어리티 파라미터 상태에 새 파라미터 슬롯을 추가합니다. count 는 추가할 파라미터 슬롯의 수(1~10)를 지정하며, 모델의 최대 파라미터 수가 상한이 됩니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. count int 1 1 ~ 10 추가할 파라미터의 수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enchant:AddRarityParameterStatusByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"parameterName\" : \"[string]레어리티 파라미터 모델명\" , \"propertyId\" : \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" , \"count\" : \"[int]추가할 파라미터의 수\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enchant:AddRarityParameterStatusByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" parameterName : \"[string]레어리티 파라미터 모델명\" propertyId : \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" count : \"[int]추가할 파라미터의 수\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enchant\" ). acquire.add_rarity_parameter_status_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , parameterName = \"[string]레어리티 파라미터 모델명\" , propertyId = \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" , count = \"[int]추가할 파라미터의 수\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Enchant:SetRarityParameterStatusByUserId 사용자 ID를 지정하여 레어리티 파라미터에 임의의 값을 설정 통상적인 추첨/재추첨 메커니즘을 거치지 않고, 지정된 사용자의 특정 프로퍼티에 파라미터 값을 직접 설정합니다. 이는 레어리티 가중치와 관계없이 임의의 파라미터 값을 할당할 수 있는 관리 작업입니다. 업데이트 후와 업데이트 전 파라미터 상태가 모두 반환됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. parameterName string  ~ 128자 레어리티 파라미터 모델명 이 상태의 추첨 조건을 정의하는 레어리티 파라미터 모델의 이름입니다. 최대 파라미터 수, 부여 수 추첨 가중치, 값 추첨 풀을 지정하는 모델을 참조합니다. propertyId string  ~ 1024자 파라미터의 보유 리소스의 프로퍼티 ID 이 레어리티 파라미터가 연결되어 있는 특정 게임 리소스(예: 무기나 장비 아이템)를 식별합니다. 일반적으로 GS2-Inventory의 아이템 등의 리소스를 프로퍼티 ID로 참조합니다. parameterValues List 0 ~ 10 items 레어리티 파라미터의 값 목록 부여된 각 슬롯에 대해 가중 추첨으로 선택된 구체적인 파라미터 값입니다. 엔트리 수는 부여 수 추첨으로 결정되며, 각 엔트리의 값은 값 모델 풀에서 선택됩니다. 최대 파라미터 수보다 적은 엔트리 수가 될 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enchant:SetRarityParameterStatusByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"parameterName\" : \"[string]레어리티 파라미터 모델명\" , \"propertyId\" : \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" , \"parameterValues\" : [ { \"name\" : \"[string]이름\" , \"resourceName\" : \"[string]리소스의 이름\" , \"resourceValue\" : \"[long]리소스의 값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enchant:SetRarityParameterStatusByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" parameterName : \"[string]레어리티 파라미터 모델명\" propertyId : \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" parameterValues : - name : \"[string]이름\" resourceName : \"[string]리소스의 이름\" resourceValue : \"[long]리소스의 값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enchant\" ). acquire.set_rarity_parameter_status_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , parameterName = \"[string]레어리티 파라미터 모델명\" , propertyId = \"[string]파라미터의 보유 리소스의 프로퍼티 ID\" , parameterValues = { { name = \"[string]이름\" , resourceName = \"[string]리소스의 이름\" , resourceValue = \"[long]리소스의 값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Enchant 트랜잭션 액션","url":"/ko/api_reference/enchant/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Enhance:DeleteProgressByUserId 사용자 ID를 지정하여 실행 중인 강화의 진행 정보를 삭제 지정된 사용자의 현재 진행 중인 강화의 진행 정보 레코드를 삭제합니다. 진행 중인 2단계 강화가 취소되며, 사전 계산된 경험치와 보너스 레이트는 폐기됩니다. Start 단계에서 이미 소비된 소재는 자동으로 반환되지 않습니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enhance:DeleteProgressByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enhance:DeleteProgressByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enhance\" ). consume.delete_progress_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Enhance:DirectEnhanceByUserId 사용자 ID를 지정하여 강화를 실행 강화 레이트 모델에 기반하여 지정된 소재를 소비해 대상 아이템 세트에 경험치를 부여합니다. 획득 경험치는 레이트 모델에서 정의된 경험치 계층에 따라 소재로부터 계산되며, 보너스 레이트는 설정된 보너스 레이트 확률 테이블에서 추첨됩니다. 결과에는 획득한 경험치량과 적용된 보너스 레이트가 포함됩니다. 소재의 소비와 경험치 획득을 실행하기 위한 트랜잭션이 발행됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List  1 ~ 10 items 강화 소재 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enhance:DirectEnhanceByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"rateName\" : \"[string]강화 레이트 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"targetItemSetId\" : \"[string]강화 대상 아이템 세트의 GRN\" , \"materials\" : [ { \"materialItemSetId\" : \"[string]강화 소재가 되는 아이템 세트의 GRN\" , \"count\" : \"[int]소비 수량\" } ], \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enhance:DirectEnhanceByUserId request : namespaceName : \"[string]네임스페이스 이름\" rateName : \"[string]강화 레이트 모델 이름\" userId : \"[string]사용자ID\" targetItemSetId : \"[string]강화 대상 아이템 세트의 GRN\" materials : - materialItemSetId : \"[string]강화 소재가 되는 아이템 세트의 GRN\" count : \"[int]소비 수량\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enhance\" ). acquire.direct_enhance_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , rateName = \"[string]강화 레이트 모델 이름\" , userId = \"[string]사용자ID\" , targetItemSetId = \"[string]강화 대상 아이템 세트의 GRN\" , materials = { { materialItemSetId = \"[string]강화 소재가 되는 아이템 세트의 GRN\" , count = \"[int]소비 수량\" } }, config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Enhance:UnleashByUserId 사용자ID를 지정하여 한계돌파를 실행 GS2-Grade에서 관리하는 그레이드를 올리는 강화 처리에서 사용됩니다. 그중에서도 동일 종류의 아이템을 소재로 소비하여 레벨 상한을 올리는 유형의 한계돌파에 사용됩니다. 지정된 소재를 소비하는 대신 한계돌파 대상 리소스의 그레이드를 1 올릴 수 있습니다. 소재가 되는 리소스가 경험치 등의 리소스를 가지고 있더라도, 그 리소스는 계승되지 않습니다. 계승이 필요한 경우에는 사전에 다른 리소스로 계승하기 위한 리소스로 변환해 두어야 합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 강화 레이트 모델 이름 강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. targetItemSetId string  ~ 1024자 한계돌파 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List  1 ~ 1000 items 한계돌파 소재 목록 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enhance:UnleashByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"rateName\" : \"[string]강화 레이트 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"targetItemSetId\" : \"[string]한계돌파 대상 아이템 세트의 GRN\" , \"materials\" : [ \"[string]소재\" ], \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enhance:UnleashByUserId request : namespaceName : \"[string]네임스페이스 이름\" rateName : \"[string]강화 레이트 모델 이름\" userId : \"[string]사용자ID\" targetItemSetId : \"[string]한계돌파 대상 아이템 세트의 GRN\" materials : - \"[string]소재\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enhance\" ). acquire.unleash_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , rateName = \"[string]강화 레이트 모델 이름\" , userId = \"[string]사용자ID\" , targetItemSetId = \"[string]한계돌파 대상 아이템 세트의 GRN\" , materials = { \"[string]소재\" }, config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Enhance:CreateProgressByUserId 사용자 ID를 지정하여 강화를 시작 2단계 강화 플로우를 위한 진행 정보 레코드를 작성합니다. 대상 아이템 세트와 소재를 레이트 모델에 대해 검증하고, 소재로부터 획득 경험치를 계산하며, 확률 테이블에서 보너스 레이트를 추첨합니다. 계산된 경험치와 보너스 레이트는 진행 정보 레코드에 저장되어 End API에서 강화 완료 시 사용됩니다. force가 true인 경우, 사용자의 기존 진행 정보는 폐기되고 대체됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. rateName string  ~ 128자 강화 레이트 모델 이름 이 강화 조작의 파라미터를 정의하는 강화 레이트 모델의 이름입니다. 대상 인벤토리, 소재 인벤토리, 경험치 계층, 보너스 레이트를 지정하는 모델을 참조합니다. targetItemSetId string  ~ 1024자 강화 대상 아이템 세트의 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN materials List 0 ~ 10 items 강화 소재 목록 force bool false 이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Enhance:CreateProgressByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"rateName\" : \"[string]강화 레이트 모델 이름\" , \"targetItemSetId\" : \"[string]강화 대상 아이템 세트의 GRN\" , \"materials\" : [ { \"materialItemSetId\" : \"[string]강화 소재가 되는 아이템 세트의 GRN\" , \"count\" : \"[int]소비 수량\" } ], \"force\" : \"[bool]이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Enhance:CreateProgressByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" rateName : \"[string]강화 레이트 모델 이름\" targetItemSetId : \"[string]강화 대상 아이템 세트의 GRN\" materials : - materialItemSetId : \"[string]강화 소재가 되는 아이템 세트의 GRN\" count : \"[int]소비 수량\" force : \"[bool]이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"enhance\" ). acquire.create_progress_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , rateName = \"[string]강화 레이트 모델 이름\" , targetItemSetId = \"[string]강화 대상 아이템 세트의 GRN\" , materials = { { materialItemSetId = \"[string]강화 소재가 되는 아이템 세트의 GRN\" , count = \"[int]소비 수량\" } }, force = \"[bool]이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Enhance 트랜잭션 액션","url":"/ko/api_reference/enhance/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Exchange:DeleteAwaitByUserId 사용자 ID를 지정하여 교환 대기 삭제 지정된 사용자의 교환 대기 레코드를 삭제합니다. 보류 중인 교환이 취소되며, 아직 취득하지 않은 보상은 포기됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Exchange:DeleteAwaitByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"awaitName\" : \"[string]교환 대기의 이름\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Exchange:DeleteAwaitByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" awaitName : \"[string]교환 대기의 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"exchange\" ). consume.delete_await_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , awaitName = \"[string]교환 대기의 이름\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Exchange:ExchangeByUserId 사용자 ID를 지정하여 교환을 실행 지정된 사용자에 대해, 지정된 교환 레이트 모델에 기반하여 리소스 교환을 실행합니다. 레이트 모델의 타이밍 타입을 검증합니다: ‘immediate’ 타이밍의 경우 네임스페이스에서 직접 교환이 유효해야 하며, ‘await’ 타이밍의 경우 대기 교환이 유효해야 합니다. 레이트 모델에서 정의된 소비·검증·획득 액션을 지정한 횟수만큼 실행하는 트랜잭션이 발행됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. count int  1 ~ 1073741821 교환 횟수 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Exchange:ExchangeByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"rateName\" : \"[string]교환 레이트 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"count\" : \"[int]교환 횟수\" , \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Exchange:ExchangeByUserId request : namespaceName : \"[string]네임스페이스 이름\" rateName : \"[string]교환 레이트 모델 이름\" userId : \"[string]사용자ID\" count : \"[int]교환 횟수\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"exchange\" ). acquire.exchange_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , rateName = \"[string]교환 레이트 모델 이름\" , userId = \"[string]사용자ID\" , count = \"[int]교환 횟수\" , config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Exchange:IncrementalExchangeByUserId 사용자 ID를 지정하여 코스트 상승형 교환 실행 지정된 사용자에 대해, 지정된 코스트 상승형 교환 레이트 모델을 기반으로, 실행 횟수에 따라 코스트가 단계적으로 상승하는 리소스 교환을 실행합니다. 소비 코스트는 모델의 계산 타입(선형 계산식 또는 GS2-Script)과 현재 교환 횟수를 기반으로 계산됩니다. 소비·획득 액션을 실행하는 트랜잭션이 발행됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rateName string  ~ 128자 코스트 상승형 교환 레이트 모델의 이름 코스트 상승형 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. count int  1 ~ 1073741821 교환 횟수 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Exchange:IncrementalExchangeByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"rateName\" : \"[string]코스트 상승형 교환 레이트 모델의 이름\" , \"userId\" : \"[string]사용자ID\" , \"count\" : \"[int]교환 횟수\" , \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Exchange:IncrementalExchangeByUserId request : namespaceName : \"[string]네임스페이스 이름\" rateName : \"[string]코스트 상승형 교환 레이트 모델의 이름\" userId : \"[string]사용자ID\" count : \"[int]교환 횟수\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"exchange\" ). acquire.incremental_exchange_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , rateName = \"[string]코스트 상승형 교환 레이트 모델의 이름\" , userId = \"[string]사용자ID\" , count = \"[int]교환 횟수\" , config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Exchange:CreateAwaitByUserId 사용자 ID를 지정하여 교환 대기를 작성 시간 대기형 교환의 새로운 교환 대기 레코드를 작성합니다. 지정된 레이트 모델의 타이밍 타입은 ‘await’이어야 하며, 그렇지 않은 경우 요청이 거부됩니다. 대기는 스킵 초수 0으로 시작되며, 레이트 모델에서 정의된 잠금 시간이 보상 획득까지의 사용자 대기 시간을 결정합니다. 작성 시 기본 설정값을 지정할 수 있으며, 획득 시 제공되는 설정값과 병합됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. rateName string  ~ 128자 교환 레이트 모델 이름 교환 레이트 모델 종류 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. count int 1 1 ~ 10000 교환 수 이 교환을 실행하는 횟수입니다. 여러 번의 교환을 하나의 대기로 묶을 수 있으며, 소비되는 코스트와 받는 보상이 모두 곱해집니다. config List [] 0 ~ 32 items 보상 획득 시 적용하는 기본 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Exchange:CreateAwaitByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"rateName\" : \"[string]교환 레이트 모델 이름\" , \"count\" : \"[int]교환 수\" , \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Exchange:CreateAwaitByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" rateName : \"[string]교환 레이트 모델 이름\" count : \"[int]교환 수\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"exchange\" ). acquire.create_await_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , rateName = \"[string]교환 레이트 모델 이름\" , count = \"[int]교환 수\" , config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Exchange:AcquireForceByUserId 교환 대기의 보상을 대기 시간 판정 없이 강제 취득 잠금 시간이 경과했는지 여부와 관계없이 교환 대기의 보상을 강제로 취득합니다. 일반적인 대기 시간 확인을 우회하여 즉시 보상을 취득할 수 있습니다. 제공된 설정값은 대기 작성 시 설정된 기본 설정값과 병합됩니다. 레이트 모델에서 정의된 획득 액션을 실행하는 트랜잭션이 발행됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Exchange:AcquireForceByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"awaitName\" : \"[string]교환 대기의 이름\" , \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Exchange:AcquireForceByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" awaitName : \"[string]교환 대기의 이름\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"exchange\" ). acquire.acquire_force_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , awaitName = \"[string]교환 대기의 이름\" , config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Exchange:SkipByUserId 사용자 ID를 지정하여 교환 대기를 스킵 교환 대기의 대기 시간을 가속하거나 스킵합니다. 4가지 스킵 타입을 지원합니다: ‘complete’는 남은 대기 시간을 전부 스킵하고, ‘minutes’는 지정한 분수를 스킵 초수에 더하며, ’totalRate’는 전체 잠금 시간의 비율만큼 스킵하고, ‘remainRate’는 남은 대기 시간의 비율만큼 스킵합니다. 스킵 초수는 합계 잠금 시간이 상한이 되며, 이를 초과할 수 없습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. awaitName string  UUID ~ 36자 교환 대기의 이름 교환 대기의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 교환 대기를 식별하는 데 사용됩니다. skipType 문자열 열거형 enum {   “complete”,   “minutes”,   “totalRate”,   “remainRate” } “complete” 스킵 방법 정의 설명 complete 완전히 스킵 minutes 시간을 지정하여 스킵(분) totalRate 전체 대기 시간의 비율을 지정하여 스킵 remainRate 남은 대기 시간의 비율을 지정하여 스킵 minutes int {skipType} == “minutes” 0 ~ 2147483646 스킵할 분수 ※ skipType이(가) “minutes” 이면 활성화 rate float {skipType} == “totalRate” or {skipType} == “remainRate” 0 ~ 1 스킵할 대기 시간의 비율 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Exchange:SkipByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"awaitName\" : \"[string]교환 대기의 이름\" , \"skipType\" : \"[string]스킵 방법\" , \"minutes\" : \"[int]스킵할 분수\" , \"rate\" : \"[float]스킵할 대기 시간의 비율\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Exchange:SkipByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" awaitName : \"[string]교환 대기의 이름\" skipType : \"[string]스킵 방법\" minutes : \"[int]스킵할 분수\" rate : \"[float]스킵할 대기 시간의 비율\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"exchange\" ). acquire.skip_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , awaitName = \"[string]교환 대기의 이름\" , skipType = \"[string]스킵 방법\" , minutes = \"[int]스킵할 분수\" , rate = \"[float]스킵할 대기 시간의 비율\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Exchange 트랜잭션 액션","url":"/ko/api_reference/exchange/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Experience:VerifyRankByUserId 사용자 ID를 지정하여 랭크를 검증 지정된 사용자의 현재 랭크가 지정된 값에 대한 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증 조건을 충족하지 않는 경우 오류(BadRequest)를 반환합니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 랭크가 지정값 미만일 것 lessEqual 랭크가 지정값 이하일 것 greater 랭크가 지정값 초과일 것 greaterEqual 랭크가 지정값 이상일 것 equal 랭크가 지정값과 일치할 것 notEqual 랭크가 지정값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankValue long 0 0 ~ 9223372036854775805 현재 랭크 랭크업 임계값 테이블을 사용하여 누적 경험치로부터 산출되는 랭크(레벨)입니다. 0부터 시작하며 경험치 임계값을 초과할 때마다 증가합니다. 현재 랭크 캡 값을 초과할 수 없습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:VerifyRankByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"rankValue\" : \"[long]현재 랭크\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:VerifyRankByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" verifyType : \"[string]검증 종류\" propertyId : \"[string]프로퍼티ID\" rankValue : \"[long]현재 랭크\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). verify.verify_rank_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , verifyType = \"[string]검증 종류\" , propertyId = \"[string]프로퍼티ID\" , rankValue = \"[long]현재 랭크\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Experience:VerifyRankCapByUserId 사용자 ID를 지정하여 랭크 캡을 검증 지정된 사용자의 현재 랭크 캡(버프 효과 포함)이 지정된 값에 대한 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증 조건을 충족하지 않는 경우 오류(BadRequest)를 반환합니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 랭크 캡이 지정값 미만일 것 lessEqual 랭크 캡이 지정값 이하일 것 greater 랭크 캡이 지정값 초과일 것 greaterEqual 랭크 캡이 지정값 이상일 것 equal 랭크 캡이 지정값과 일치할 것 notEqual 랭크 캡이 지정값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:VerifyRankCapByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"rankCapValue\" : \"[long]현재 랭크 캡\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:VerifyRankCapByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" verifyType : \"[string]검증 종류\" propertyId : \"[string]프로퍼티ID\" rankCapValue : \"[long]현재 랭크 캡\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). verify.verify_rank_cap_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , verifyType = \"[string]검증 종류\" , propertyId = \"[string]프로퍼티ID\" , rankCapValue = \"[long]현재 랭크 캡\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Experience:SubExperienceByUserId 사용자 ID를 지정하여 경험치를 감산 지정된 사용자의 상태에서 경험치를 감산합니다. 경험치는 0 미만으로 내려가지 않습니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 잃는 경험치 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:SubExperienceByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"experienceValue\" : \"[long]잃는 경험치\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:SubExperienceByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" propertyId : \"[string]프로퍼티ID\" experienceValue : \"[long]잃는 경험치\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). consume.sub_experience_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , propertyId = \"[string]프로퍼티ID\" , experienceValue = \"[long]잃는 경험치\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Experience:SubRankCapByUserId 사용자 ID를 지정하여 랭크 캡을 감산 지정된 사용자의 상태의 랭크 캡을 감산합니다. 랭크 캡은 0 미만으로 내려가지 않습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:SubRankCapByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"rankCapValue\" : \"[long]현재 랭크 캡\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:SubRankCapByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" propertyId : \"[string]프로퍼티ID\" rankCapValue : \"[long]현재 랭크 캡\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). consume.sub_rank_cap_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , propertyId = \"[string]프로퍼티ID\" , rankCapValue = \"[long]현재 랭크 캡\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Experience:AddExperienceByUserId 사용자 ID를 지정하여 경험치를 가산 지정된 사용자의 상태에 경험치를 가산합니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. truncateExperienceWhenRankUp이 true인 경우, 랭크업 시 임계값을 초과한 잉여 경험치는 절사됩니다. false(기본값)인 경우에는 다음 랭크로 이월됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 획득 경험치 truncateExperienceWhenRankUp bool? false 랭크업 시 남은 경험치를 절사할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:AddExperienceByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"experienceValue\" : \"[long]획득 경험치\" , \"truncateExperienceWhenRankUp\" : \"[bool]랭크업 시 남은 경험치를 절사할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:AddExperienceByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" propertyId : \"[string]프로퍼티ID\" experienceValue : \"[long]획득 경험치\" truncateExperienceWhenRankUp : \"[bool]랭크업 시 남은 경험치를 절사할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). acquire.add_experience_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , propertyId = \"[string]프로퍼티ID\" , experienceValue = \"[long]획득 경험치\" , truncateExperienceWhenRankUp = \"[bool]랭크업 시 남은 경험치를 절사할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Experience:SetExperienceByUserId 사용자 ID를 지정하여 경험치를 설정 지정된 사용자의 상태의 경험치를 지정한 값으로 직접 설정합니다. 갱신 전 상태를 ‘old’로 하여, 갱신 후 상태와 함께 반환합니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. experienceValue long 0 0 ~ 9223372036854775805 누적 획득 경험치 이 스테이터스가 축적한 총 경험치입니다. 현재 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 산출됩니다. 현재 랭크 캡에 대응하는 임계값을 초과하여 경험치를 획득할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:SetExperienceByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"experienceValue\" : \"[long]누적 획득 경험치\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:SetExperienceByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" propertyId : \"[string]프로퍼티ID\" experienceValue : \"[long]누적 획득 경험치\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). acquire.set_experience_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , propertyId = \"[string]프로퍼티ID\" , experienceValue = \"[long]누적 획득 경험치\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Experience:AddRankCapByUserId 사용자 ID를 지정하여 랭크 캡을 가산 지정된 사용자의 상태의 랭크 캡을 가산합니다. 랭크 캡은 경험치 모델에서 정의된 maxRankCap을 초과할 수 없습니다. 랭크 캡은 지정된 프로퍼티에서 사용자가 도달 가능한 최대 랭크를 결정합니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:AddRankCapByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"rankCapValue\" : \"[long]현재 랭크 캡\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:AddRankCapByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" propertyId : \"[string]프로퍼티ID\" rankCapValue : \"[long]현재 랭크 캡\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). acquire.add_rank_cap_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , propertyId = \"[string]프로퍼티ID\" , rankCapValue = \"[long]현재 랭크 캡\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Experience:SetRankCapByUserId 사용자 ID를 지정하여 랭크 캡을 설정 지정된 사용자의 상태의 랭크 캡 값을 지정한 값으로 직접 설정합니다. 갱신 전 상태를 ‘old’로 하여, 갱신 후 상태와 함께 반환합니다. 랭크 캡은 경험치 모델에서 정의된 maxRankCap으로 상한이 제한됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:SetRankCapByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"rankCapValue\" : \"[long]현재 랭크 캡\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:SetRankCapByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" propertyId : \"[string]프로퍼티ID\" rankCapValue : \"[long]현재 랭크 캡\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). acquire.set_rank_cap_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , propertyId = \"[string]프로퍼티ID\" , rankCapValue = \"[long]현재 랭크 캡\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Experience:MultiplyAcquireActionsByUserId 사용자 ID를 지정하여 경험치 대상 프로퍼티의 랭크에 따라 리소스를 가산 프로퍼티의 현재 랭크 값을 기반으로 지정된 rateName의 입수 액션 배율을 참조하고, 지정된 입수 액션을 해당 배율(baseRate와 조합)로 곱하여 그 결과 액션을 실행하는 트랜잭션을 시작합니다. 랭크에 기반한 보상 스케일링에 사용되며, 랭크가 높을수록 비례하여 더 많은 리소스를 획득할 수 있습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. experienceName string  ~ 128자 경험치 모델 이름 이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다. propertyId string  ~ 1024자 프로퍼티ID 사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다. rateName string  ~ 128자 보상 가산 테이블 이름 이 보상 가산 테이블의 고유 식별자입니다. 특정 입수 액션에 적용할 배율 테이블을 지정할 때 참조됩니다. acquireActions List [] 0 ~ 100 items 입수 액션 목록 baseRate float 1 0 ~ 1000000 기초 배율 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Experience:MultiplyAcquireActionsByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"experienceName\" : \"[string]경험치 모델 이름\" , \"propertyId\" : \"[string]프로퍼티ID\" , \"rateName\" : \"[string]보상 가산 테이블 이름\" , \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"baseRate\" : \"[float]기초 배율\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Experience:MultiplyAcquireActionsByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" experienceName : \"[string]경험치 모델 이름\" propertyId : \"[string]프로퍼티ID\" rateName : \"[string]보상 가산 테이블 이름\" acquireActions : - action : \"[string]입수 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" baseRate : \"[float]기초 배율\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"experience\" ). acquire.multiply_acquire_actions_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , experienceName = \"[string]경험치 모델 이름\" , propertyId = \"[string]프로퍼티ID\" , rateName = \"[string]보상 가산 테이블 이름\" , acquireActions = { { action = \"[string]입수 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } }, baseRate = \"[float]기초 배율\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Experience 트랜잭션 액션","url":"/ko/api_reference/experience/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Formation:SubMoldCapacityByUserId 사용자 ID를 지정하여 용량 크기 감산 지정된 사용자의 폼 저장 영역(몰드)의 용량을 감산합니다. 용량은 0 미만으로 내려가지 않습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Formation:SubMoldCapacityByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"moldModelName\" : \"[string]폼 저장 영역 모델의 이름\" , \"capacity\" : \"[int]현재 캐파시티\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Formation:SubMoldCapacityByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" moldModelName : \"[string]폼 저장 영역 모델의 이름\" capacity : \"[int]현재 캐파시티\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"formation\" ). consume.sub_mold_capacity_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , moldModelName = \"[string]폼 저장 영역 모델의 이름\" , capacity = \"[int]현재 캐파시티\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Formation:AddMoldCapacityByUserId 사용자 ID를 지정하여 용량 크기 가산 지정된 사용자의 폼 저장 영역(몰드)의 용량을 가산합니다. 용량은 몰드 모델에 정의된 maxCapacity를 초과할 수 없습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Formation:AddMoldCapacityByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"moldModelName\" : \"[string]폼 저장 영역 모델의 이름\" , \"capacity\" : \"[int]현재 캐파시티\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Formation:AddMoldCapacityByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" moldModelName : \"[string]폼 저장 영역 모델의 이름\" capacity : \"[int]현재 캐파시티\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"formation\" ). acquire.add_mold_capacity_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , moldModelName = \"[string]폼 저장 영역 모델의 이름\" , capacity = \"[int]현재 캐파시티\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Formation:SetMoldCapacityByUserId 사용자 ID를 지정하여 용량 크기 설정 지정된 사용자의 폼 저장 영역(몰드)의 용량을 지정한 값으로 직접 설정합니다. 갱신 전의 몰드를 ‘old’로, 갱신 후의 몰드와 함께 반환합니다. 용량은 몰드 모델에 정의된 maxCapacity로 상한이 제한됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. moldModelName string  ~ 128자 폼 저장 영역 모델의 이름 폼 저장 영역 모델 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Formation:SetMoldCapacityByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"moldModelName\" : \"[string]폼 저장 영역 모델의 이름\" , \"capacity\" : \"[int]현재 캐파시티\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Formation:SetMoldCapacityByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" moldModelName : \"[string]폼 저장 영역 모델의 이름\" capacity : \"[int]현재 캐파시티\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"formation\" ). acquire.set_mold_capacity_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , moldModelName = \"[string]폼 저장 영역 모델의 이름\" , capacity = \"[int]현재 캐파시티\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Formation:AcquireActionsToFormProperties 사용자 ID를 지정하여 폼의 프로퍼티에 획득 액션을 적용 폼의 슬롯 프로퍼티에 획득 액션을 적용하고, 실행할 트랜잭션을 시작합니다. 폼의 슬롯에 아이템이나 리소스를 부여하기 위해 사용되며, 커스터마이즈용 선택적 설정 파라미터를 이용할 수 있습니다. 트랜잭션을 반환합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. acquireAction AcquireAction  폼의 프로퍼티에 적용할 획득 액션 config List [] 0 ~ 1000 items 획득 액션에 적용하는 설정 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Formation:AcquireActionsToFormProperties\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"moldModelName\" : \"[string]폼 저장 영역 모델 이름\" , \"index\" : \"[int]폼의 인덱스\" , \"acquireAction\" : { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" }, \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Formation:AcquireActionsToFormProperties request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" moldModelName : \"[string]폼 저장 영역 모델 이름\" index : \"[int]폼의 인덱스\" acquireAction : action : \"[string]입수 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"formation\" ). acquire.acquire_actions_to_form_properties ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , moldModelName = \"[string]폼 저장 영역 모델 이름\" , index = \"[int]폼의 인덱스\" , acquireAction = { action = \"[string]입수 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" }, config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Formation:SetFormByUserId 사용자 ID를 지정하여 폼 설정 지정된 사용자의 폼의 슬롯 값을 업데이트합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. moldModelName string  ~ 128자 폼 저장 영역 모델 이름 index int  0 ~ 2147483646 폼의 인덱스 저장 영역 내에서 이 폼이 차지하는 저장 슬롯을 식별하는 0부터 시작하는 인덱스입니다. 최대 인덱스는 저장 영역의 현재 캐파시티에 의해 제한됩니다. 예를 들어 인덱스 0을 「파티 1」, 인덱스 1을 「파티 2」와 같은 식으로 사용할 수 있습니다. slots List  1 ~ 10 items 슬롯 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Formation:SetFormByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"moldModelName\" : \"[string]폼 저장 영역 모델 이름\" , \"index\" : \"[int]폼의 인덱스\" , \"slots\" : [ { \"name\" : \"[string]슬롯 모델명\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"metadata\" : \"[string]메타데이터\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Formation:SetFormByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" moldModelName : \"[string]폼 저장 영역 모델 이름\" index : \"[int]폼의 인덱스\" slots : - name : \"[string]슬롯 모델명\" propertyId : \"[string]프로퍼티 ID\" metadata : \"[string]메타데이터\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"formation\" ). acquire.set_form_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , moldModelName = \"[string]폼 저장 영역 모델 이름\" , index = \"[int]폼의 인덱스\" , slots = { { name = \"[string]슬롯 모델명\" , propertyId = \"[string]프로퍼티 ID\" , metadata = \"[string]메타데이터\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Formation:AcquireActionsToPropertyFormProperties 프로퍼티 폼의 프로퍼티에 획득 액션을 적용 프로퍼티 폼의 프로퍼티에 획득 액션을 적용하고 트랜잭션을 시작합니다. 프로퍼티 폼의 슬롯 값으로 설정되는 아이템이나 리소스를 부여하기 위해 사용됩니다. 획득 액션은 트랜잭션으로 실행되며, 그 결과 아이템이 폼의 슬롯 프로퍼티에 적용됩니다. 획득 액션의 동작을 커스터마이즈하기 위한 설정값을 전달할 수 있습니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. propertyFormModelName string  ~ 128자 프로퍼티 폼 모델 이름 propertyId string  ~ 1024자 프로퍼티 ID 이 프로퍼티 폼 인스턴스를 고유하게 식별하는 개발자 정의 식별자입니다. 일반적으로 이 폼이 설정하는 소유 리소스(예: GS2-Inventory의 아이템 세트)의 GRN을 설정합니다. 특정 장비에 스킬을 설정하는 등의 용도로 사용됩니다. acquireAction AcquireAction  프로퍼티 폼의 프로퍼티에 적용할 획득 액션 config List [] 0 ~ 1000 items 획득 액션에 적용하는 설정 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Formation:AcquireActionsToPropertyFormProperties\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"propertyFormModelName\" : \"[string]프로퍼티 폼 모델 이름\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"acquireAction\" : { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" }, \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Formation:AcquireActionsToPropertyFormProperties request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" propertyFormModelName : \"[string]프로퍼티 폼 모델 이름\" propertyId : \"[string]프로퍼티 ID\" acquireAction : action : \"[string]입수 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"formation\" ). acquire.acquire_actions_to_property_form_properties ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , propertyFormModelName = \"[string]프로퍼티 폼 모델 이름\" , propertyId = \"[string]프로퍼티 ID\" , acquireAction = { action = \"[string]입수 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" }, config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Formation 트랜잭션 액션","url":"/ko/api_reference/formation/stamp_sheet/"},{"content":"Acquire Action 입수 액션 Gs2Friend:UpdateProfileByUserId 사용자ID를 지정하여 프로필 갱신 지정된 사용자의 프로필을 3가지 서로 다른 공개 수준으로 갱신합니다(서버 사이드 조작): publicProfile: 모든 사용자에게 공개 followerProfile: 팔로워에게만 공개 friendProfile: 친구에게만 공개 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. publicProfile string ~ 1024자 공개되는 프로필 관계와 상관없이 모든 플레이어에게 표시되는 프로필 정보입니다. 일반적으로 표시 이름, 아바타, 기타 공개 가능한 정보에 사용됩니다. followerProfile string ~ 1024자 팔로워에게 공개되는 프로필 이 사용자를 팔로우하고 있는 플레이어에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보(게임플레이 통계나 상태 메시지 등)를 포함할 수 있습니다. friendProfile string ~ 1024자 친구에게 공개되는 프로필 상호 친구 관계가 성립된 플레이어에게만 표시되는 프로필 정보입니다. 가장 프라이빗한 프로필 수준으로, 연락처나 개인 메시지 등 개인 정보를 공유하기에 적합합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Friend:UpdateProfileByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"publicProfile\" : \"[string]공개되는 프로필\" , \"followerProfile\" : \"[string]팔로워에게 공개되는 프로필\" , \"friendProfile\" : \"[string]친구에게 공개되는 프로필\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Friend:UpdateProfileByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" publicProfile : \"[string]공개되는 프로필\" followerProfile : \"[string]팔로워에게 공개되는 프로필\" friendProfile : \"[string]친구에게 공개되는 프로필\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"friend\" ). acquire.update_profile_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , publicProfile = \"[string]공개되는 프로필\" , followerProfile = \"[string]팔로워에게 공개되는 프로필\" , friendProfile = \"[string]친구에게 공개되는 프로필\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Friend 트랜잭션 액션","url":"/ko/api_reference/friend/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Grade:VerifyGradeByUserId 사용자 ID를 지정하여 그레이드 검증 지정된 사용자의 그레이드 값이 지정된 조건을 만족하는지 검증합니다(서버 사이드 작업). 6가지 비교 연산자를 지원합니다: less(미만), lessEqual(이하), greater(초과), greaterEqual(이상), equal(일치), notEqual(불일치). 조건이 충족되지 않은 경우, 기대값과 실제 값을 포함한 설명적인 오류 메시지가 반환됩니다. multiplyValueSpecifyingQuantity가 true인 경우, 검증 임계값은 지정된 수량으로 곱해집니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 그레이드가 지정한 값 미만일 것 lessEqual 그레이드가 지정한 값 이하일 것 greater 그레이드가 지정한 값을 초과할 것 greaterEqual 그레이드가 지정한 값 이상일 것 equal 그레이드가 지정한 값과 일치할 것 notEqual 그레이드가 지정한 값과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 1 1 ~ 9223372036854775805 현재 그레이드 이 스테이터스의 현재 그레이드 값입니다. 연동되는 GS2-Experience 모델의 랭크 캡을 결정하기 위해 그레이드 모델의 그레이드 엔트리 배열의 인덱스로 사용됩니다. 이 값이 변경되면 관련된 경험치 스테이터스의 랭크 캡이 해당 그레이드 엔트리에서 정의된 값으로 자동 갱신됩니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Grade:VerifyGradeByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"gradeName\" : \"[string]그레이드 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"gradeValue\" : \"[long]현재 그레이드\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Grade:VerifyGradeByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" gradeName : \"[string]그레이드 모델 이름\" verifyType : \"[string]검증 종류\" propertyId : \"[string]프로퍼티 ID\" gradeValue : \"[long]현재 그레이드\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"grade\" ). verify.verify_grade_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , gradeName = \"[string]그레이드 모델 이름\" , verifyType = \"[string]검증 종류\" , propertyId = \"[string]프로퍼티 ID\" , gradeValue = \"[long]현재 그레이드\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Grade:VerifyGradeUpMaterialByUserId 사용자 ID를 지정하여 그레이드업에 사용하는 소재 검증 지정된 사용자의 지정된 프로퍼티의 그레이드업에 소재의 프로퍼티 ID가 유효한지 검증합니다(서버 사이드 작업). 검증은 그레이드 엔트리의 PropertyIdRegex와 GradeUpPropertyIdRegex로부터 정규표현식 패턴을 생성하고, 소재의 프로퍼티 ID가 이에 일치하는지 확인합니다. 2가지 검증 유형을 지원합니다: ‘match’(소재가 패턴에 일치해야 함)와 ’notMatch’(소재가 패턴에 일치하지 않아야 함). 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. verifyType 문자열 열거형 enum {   “match”,   “notMatch” }  검증 종류 정의 설명 match 조건과 일치할 것 notMatch 조건과 일치하지 않을 것 propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. materialPropertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Grade:VerifyGradeUpMaterialByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"gradeName\" : \"[string]그레이드 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"materialPropertyId\" : \"[string]프로퍼티 ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Grade:VerifyGradeUpMaterialByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" gradeName : \"[string]그레이드 모델 이름\" verifyType : \"[string]검증 종류\" propertyId : \"[string]프로퍼티 ID\" materialPropertyId : \"[string]프로퍼티 ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"grade\" ). verify.verify_grade_up_material_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , gradeName = \"[string]그레이드 모델 이름\" , verifyType = \"[string]검증 종류\" , propertyId = \"[string]프로퍼티 ID\" , materialPropertyId = \"[string]프로퍼티 ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Grade:SubGradeByUserId 사용자 ID를 지정하여 그레이드 감산 지정된 그레이드 모델과 프로퍼티에 대해, 지정된 사용자의 현재 그레이드에서 지정된 값을 감산합니다(서버 사이드 작업). 그레이드 값 갱신 후, 연결된 GS2-Experience 스테이터스에 랭크 캡이 자동으로 적용됩니다. 랭크 캡 값은 새로운 그레이드 레벨에 일치하는 그레이드 엔트리에 의해 결정됩니다. 갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 0 0 ~ 9223372036854775805 잃는 그레이드 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Grade:SubGradeByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"gradeName\" : \"[string]그레이드 모델 이름\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"gradeValue\" : \"[long]잃는 그레이드\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Grade:SubGradeByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" gradeName : \"[string]그레이드 모델 이름\" propertyId : \"[string]프로퍼티 ID\" gradeValue : \"[long]잃는 그레이드\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"grade\" ). consume.sub_grade_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , gradeName = \"[string]그레이드 모델 이름\" , propertyId = \"[string]프로퍼티 ID\" , gradeValue = \"[long]잃는 그레이드\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Grade:AddGradeByUserId 사용자 ID를 지정하여 그레이드 가산 지정된 그레이드 모델과 프로퍼티에 대해, 사용자의 현재 그레이드에 지정된 값을 가산합니다. 그레이드 값 갱신 후, 연결된 GS2-Experience 스테이터스에 랭크 캡이 자동으로 적용됩니다. 랭크 캡 값은 새로운 그레이드 레벨에 일치하는 그레이드 엔트리에 의해 결정됩니다. 갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. gradeValue long 0 0 ~ 9223372036854775805 획득 그레이드 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Grade:AddGradeByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"gradeName\" : \"[string]그레이드 모델 이름\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"gradeValue\" : \"[long]획득 그레이드\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Grade:AddGradeByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" gradeName : \"[string]그레이드 모델 이름\" propertyId : \"[string]프로퍼티 ID\" gradeValue : \"[long]획득 그레이드\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"grade\" ). acquire.add_grade_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , gradeName = \"[string]그레이드 모델 이름\" , propertyId = \"[string]프로퍼티 ID\" , gradeValue = \"[long]획득 그레이드\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Grade:ApplyRankCapByUserId 사용자 ID를 지정하여 GS2-Experience 스테이터스에 랭크 캡 적용 지정된 사용자의 현재 그레이드에 대응하는 랭크 캡을, 연결된 GS2-Experience 스테이터스에 적용합니다(서버 사이드 작업). 현재 그레이드 값에 일치하는 그레이드 엔트리를 참조하여 랭크 캡 값을 결정합니다. 그레이드가 외부에서 변경되어 Experience의 랭크 캡을 동기화해야 할 경우에 유용합니다. 갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Grade:ApplyRankCapByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"gradeName\" : \"[string]그레이드 모델 이름\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Grade:ApplyRankCapByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" gradeName : \"[string]그레이드 모델 이름\" propertyId : \"[string]프로퍼티 ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"grade\" ). acquire.apply_rank_cap_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , gradeName = \"[string]그레이드 모델 이름\" , propertyId = \"[string]프로퍼티 ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Grade:MultiplyAcquireActionsByUserId 그레이드에 기반한 레이트로 입수 액션을 곱셈 지정된 입수 액션의 수량을 사용자의 현재 그레이드에 기반한 레이트 승수로 곱합니다. 레이트 승수는 지정된 rateName과 현재 그레이드 값을 사용하여 그레이드 모델의 acquireActionRates에서 조회됩니다. 곱해진 입수 액션은 트랜잭션으로 실행되며, 그레이드에 기반한 보상 스케일링(예: 그레이드가 높을수록 더 많은 리소스를 획득)을 실현합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. gradeName string  ~ 128자 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. propertyId string  ~ 1024자 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. rateName string  ~ 128자 보상 가산 테이블 이름 그레이드 모델 내에서 이 배율 테이블을 고유하게 식별하는 이름입니다. 트랜잭션의 특정 입수 액션에 그레이드 기반 보상 스케일링을 적용할 때 참조됩니다. acquireActions List [] 0 ~ 100 items 입수 액션 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Grade:MultiplyAcquireActionsByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"gradeName\" : \"[string]그레이드 모델 이름\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"rateName\" : \"[string]보상 가산 테이블 이름\" , \"acquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Grade:MultiplyAcquireActionsByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" gradeName : \"[string]그레이드 모델 이름\" propertyId : \"[string]프로퍼티 ID\" rateName : \"[string]보상 가산 테이블 이름\" acquireActions : - action : \"[string]입수 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"grade\" ). acquire.multiply_acquire_actions_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , gradeName = \"[string]그레이드 모델 이름\" , propertyId = \"[string]프로퍼티 ID\" , rateName = \"[string]보상 가산 테이블 이름\" , acquireActions = { { action = \"[string]입수 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Grade 트랜잭션 액션","url":"/ko/api_reference/grade/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName 길드 이름을 지정하여 최대 참가 가능 인원수 검증 선택된 비교 연산자를 사용하여 지정된 길드의 currentMaximumMemberCount를 지정된 값과 비교 검증합니다(서버 사이드 조작). 지원되는 연산자: less, lessEqual, greater, greaterEqual, equal, notEqual. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 최대 참가 가능 인원수가 지정값 미만일 것 lessEqual 최대 참가 가능 인원수가 지정값 이하일 것 greater 최대 참가 가능 인원수가 지정값 초과일 것 greaterEqual 최대 참가 가능 인원수가 지정값 이상일 것 equal 최대 참가 가능 인원수가 지정값과 일치할 것 notEqual 최대 참가 가능 인원수가 지정값과 일치하지 않을 것 value int 1 ~ 2147483646 최대 참가 가능 인원수 multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"guildModelName\" : \"[string]길드 모델 이름\" , \"guildName\" : \"[string]길드명\" , \"verifyType\" : \"[string]검증 종류\" , \"value\" : \"[int]최대 참가 가능 인원수\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" } } action : Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName request : namespaceName : \"[string]네임스페이스 이름\" guildModelName : \"[string]길드 모델 이름\" guildName : \"[string]길드명\" verifyType : \"[string]검증 종류\" value : \"[int]최대 참가 가능 인원수\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" transaction.service ( \"guild\" ). verify.verify_current_maximum_member_count_by_guild_name ({ namespaceName = \"[string]네임스페이스 이름\" , guildModelName = \"[string]길드 모델 이름\" , guildName = \"[string]길드명\" , verifyType = \"[string]검증 종류\" , value = \"[int]최대 참가 가능 인원수\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , }) Gs2Guild:VerifyIncludeMemberByUserId 사용자 ID를 지정하여 길드 멤버에 사용자 ID가 포함되어 있는지 검증 지정된 사용자가 길드의 멤버인지 여부를 검증합니다(서버 사이드 조작). 2가지 검증 유형을 지원합니다: ‘include’와 ’notInclude’. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  UUID ~ 36자 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. verifyType 문자열 열거형 enum {   “include”,   “notInclude” }  검증 종류 정의 설명 include 길드 멤버에 지정한 유저가 포함되어 있을 것 notInclude 길드 멤버에 지정한 유저가 포함되지 않을 것 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Guild:VerifyIncludeMemberByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"guildModelName\" : \"[string]길드 모델 이름\" , \"guildName\" : \"[string]길드명\" , \"userId\" : \"[string]사용자ID\" , \"verifyType\" : \"[string]검증 종류\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Guild:VerifyIncludeMemberByUserId request : namespaceName : \"[string]네임스페이스 이름\" guildModelName : \"[string]길드 모델 이름\" guildName : \"[string]길드명\" userId : \"[string]사용자ID\" verifyType : \"[string]검증 종류\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"guild\" ). verify.verify_include_member_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , guildModelName = \"[string]길드 모델 이름\" , guildName = \"[string]길드명\" , userId = \"[string]사용자ID\" , verifyType = \"[string]검증 종류\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName 길드 이름을 지정하여 최대 참가 가능 인원 감소 지정된 길드의 currentMaximumMemberCount를 지정된 값만큼 감소시킵니다(서버 사이드 조작). 결과 값은 0 미만이 될 수 없습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 value int 1 ~ 2147483646 최대 인원수의 감소량 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"guildModelName\" : \"[string]길드 모델 이름\" , \"guildName\" : \"[string]길드명\" , \"value\" : \"[int]최대 인원수의 감소량\" } } action : Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName request : namespaceName : \"[string]네임스페이스 이름\" guildModelName : \"[string]길드 모델 이름\" guildName : \"[string]길드명\" value : \"[int]최대 인원수의 감소량\" transaction.service ( \"guild\" ). consume.decrease_maximum_current_maximum_member_count_by_guild_name ({ namespaceName = \"[string]네임스페이스 이름\" , guildModelName = \"[string]길드 모델 이름\" , guildName = \"[string]길드명\" , value = \"[int]최대 인원수의 감소량\" , }) Acquire Action 입수 액션 Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName 길드 이름을 지정하여 최대 참가 가능 인원 추가 길드의 currentMaximumMemberCount를 지정된 값만큼 증가시킵니다. 결과 값은 길드 모델에서 정의된 maximumMemberCount를 초과할 수 없습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 value int 1 ~ 2147483646 최대 인원수의 증가량 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"guildModelName\" : \"[string]길드 모델 이름\" , \"guildName\" : \"[string]길드명\" , \"value\" : \"[int]최대 인원수의 증가량\" } } action : Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName request : namespaceName : \"[string]네임스페이스 이름\" guildModelName : \"[string]길드 모델 이름\" guildName : \"[string]길드명\" value : \"[int]최대 인원수의 증가량\" transaction.service ( \"guild\" ). acquire.increase_maximum_current_maximum_member_count_by_guild_name ({ namespaceName = \"[string]네임스페이스 이름\" , guildModelName = \"[string]길드 모델 이름\" , guildName = \"[string]길드명\" , value = \"[int]최대 인원수의 증가량\" , }) Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName 길드 이름을 지정하여 최대 참가 가능 인원수 설정 길드의 currentMaximumMemberCount를 지정된 절대값으로 설정합니다. 증감 조작과 달리 차분을 적용하는 것이 아니라 값을 직접 설정합니다. 업데이트 후 길드와 업데이트 전 길드 상태를 모두 반환하여 호출자가 변경 사항을 추적할 수 있도록 합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. guildName string  ~ 128자 길드명 guildModelName string  ~ 128자 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. value int 1 ~ 2147483646 설정할 최대 인원수 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"guildName\" : \"[string]길드명\" , \"guildModelName\" : \"[string]길드 모델 이름\" , \"value\" : \"[int]설정할 최대 인원수\" } } action : Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName request : namespaceName : \"[string]네임스페이스 이름\" guildName : \"[string]길드명\" guildModelName : \"[string]길드 모델 이름\" value : \"[int]설정할 최대 인원수\" transaction.service ( \"guild\" ). acquire.set_maximum_current_maximum_member_count_by_guild_name ({ namespaceName = \"[string]네임스페이스 이름\" , guildName = \"[string]길드명\" , guildModelName = \"[string]길드 모델 이름\" , value = \"[int]설정할 최대 인원수\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Guild 트랜잭션 액션","url":"/ko/api_reference/guild/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Idle:DecreaseMaximumIdleMinutesByUserId 사용자 ID를 지정하여 최대 대기 시간을 감산 지정된 카테고리에서 사용자의 최대 대기 시간에서 지정된 분(分) 수를 감산합니다. 최대 대기 시간은 0 미만으로 내려갈 수 없습니다. 스테이터스가 아직 존재하지 않는 경우, 감산을 적용하기 전에 자동으로 생성됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. decreaseMinutes int 1 ~ 2147483646 최대 대기 시간 감소량(분) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Idle:DecreaseMaximumIdleMinutesByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"categoryName\" : \"[string]카테고리 모델 이름\" , \"decreaseMinutes\" : \"[int]최대 대기 시간 감소량(분)\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Idle:DecreaseMaximumIdleMinutesByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" categoryName : \"[string]카테고리 모델 이름\" decreaseMinutes : \"[int]최대 대기 시간 감소량(분)\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"idle\" ). consume.decrease_maximum_idle_minutes_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , categoryName = \"[string]카테고리 모델 이름\" , decreaseMinutes = \"[int]최대 대기 시간 감소량(분)\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Idle:IncreaseMaximumIdleMinutesByUserId 사용자 ID를 지정하여 최대 대기 시간을 가산 지정된 카테고리에서 사용자의 최대 대기 시간에 지정된 분(分) 수를 가산합니다. 최대 대기 시간은 방치 보상이 누적될 수 있는 시간의 상한을 결정합니다. 스테이터스가 아직 존재하지 않는 경우, 가산을 적용하기 전에 자동으로 생성됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. increaseMinutes int 1 ~ 2147483646 최대 대기 시간 증가량(분) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Idle:IncreaseMaximumIdleMinutesByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"categoryName\" : \"[string]카테고리 모델 이름\" , \"increaseMinutes\" : \"[int]최대 대기 시간 증가량(분)\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Idle:IncreaseMaximumIdleMinutesByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" categoryName : \"[string]카테고리 모델 이름\" increaseMinutes : \"[int]최대 대기 시간 증가량(분)\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"idle\" ). acquire.increase_maximum_idle_minutes_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , categoryName = \"[string]카테고리 모델 이름\" , increaseMinutes = \"[int]최대 대기 시간 증가량(분)\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Idle:SetMaximumIdleMinutesByUserId 사용자 ID를 지정하여 최대 대기 시간을 설정 지정된 카테고리에서 사용자의 최대 대기 시간을 지정된 절대값으로 설정합니다. 가산/감산 조작과 달리, 현재 최대 대기 시간을 직접 대체합니다. 갱신 후 스테이터스와 갱신 전 스테이터스를 모두 반환하므로, 호출한 측에서 변경 내용을 확인할 수 있습니다. 스테이터스가 아직 존재하지 않는 경우, 값을 적용하기 전에 자동으로 생성됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. maximumIdleMinutes int 1 ~ 2147483646 설정할 최대 대기 시간 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Idle:SetMaximumIdleMinutesByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"categoryName\" : \"[string]카테고리 모델 이름\" , \"maximumIdleMinutes\" : \"[int]설정할 최대 대기 시간\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Idle:SetMaximumIdleMinutesByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" categoryName : \"[string]카테고리 모델 이름\" maximumIdleMinutes : \"[int]설정할 최대 대기 시간\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"idle\" ). acquire.set_maximum_idle_minutes_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , categoryName = \"[string]카테고리 모델 이름\" , maximumIdleMinutes = \"[int]설정할 최대 대기 시간\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Idle:ReceiveByUserId 사용자 ID를 지정하여 보상 수령 지정된 사용자와 카테고리의 누적된 대기 시간을 기준으로 방치 보상을 수령합니다. 보상량은 경과한 대기 시간을 rewardIntervalMinutes로 나눈 값으로 계산되며, maximumIdleMinutes로 상한이 설정됩니다. receiveScript가 설정되어 있는 경우, 보상 지급 전에 실행되어 수령 조작을 변경하거나 거부할 수 있습니다. overrideAcquireActionsScriptId를 통해 입수 액션(배율 보정 적용 등)을 변경하는 것도 가능합니다. 수령 후, 대기 타이머는 현재 시각으로 리셋됩니다. 계산된 보상의 입수 액션을 포함하는 트랜잭션을 반환합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. categoryName string  ~ 128자 카테고리 모델 이름 이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다. config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Idle:ReceiveByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"categoryName\" : \"[string]카테고리 모델 이름\" , \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Idle:ReceiveByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" categoryName : \"[string]카테고리 모델 이름\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"idle\" ). acquire.receive_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , categoryName = \"[string]카테고리 모델 이름\" , config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Idle 트랜잭션 액션","url":"/ko/api_reference/idle/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Inbox:OpenMessageByUserId 사용자 ID를 지정하여 메시지를 개봉 완료로 표시 지정된 사용자의 수신함에 있는 지정된 메시지를 읽음(개봉 완료) 상태로 표시합니다. 이는 획득 액션을 실행하지 않고 isRead를 true로 설정하는 단순한 상태 전환입니다. 읽음 처리와 동시에 관련된 보상을 실행하려면 대신 Read API를 사용하십시오. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inbox:OpenMessageByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"messageName\" : \"[string]메시지 이름\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inbox:OpenMessageByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" messageName : \"[string]메시지 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inbox\" ). consume.open_message_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , messageName = \"[string]메시지 이름\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inbox:DeleteMessageByUserId 사용자 ID를 지정하여 메시지 삭제 지정된 사용자의 받은 편지함에서 메시지를 완전히 삭제합니다. 읽음 상태와 관계없이 메시지 레코드가 삭제됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. messageName string  UUID ~ 36자 메시지 이름 메시지의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inbox:DeleteMessageByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"messageName\" : \"[string]메시지 이름\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inbox:DeleteMessageByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" messageName : \"[string]메시지 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inbox\" ). consume.delete_message_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , messageName = \"[string]메시지 이름\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Inbox:SendMessageByUserId 사용자 ID를 지정하여 메시지 발신 지정된 사용자의 수신함에 새로운 메시지를 생성하여 전달합니다. 메시지에는 메타데이터(임의의 JSON 콘텐츠)와 readAcquireActions(메시지 개봉 시 부여되는 보상)를 포함할 수 있습니다. 메시지의 유효기간은 절대 타임스탬프(expiresAt) 또는 전달 시점부터의 상대적인 기간(expiresTimeSpan)으로 설정할 수 있습니다. expiresAt가 지정된 경우 expiresTimeSpan보다 우선 적용됩니다. 메시지는 읽지 않은 상태(isRead=false)로 시작됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. metadata string  ~ 4096자 메타데이터 메시지의 제목, 본문, 발신자 정보, 표시 파라미터 등을 포함하는 JSON 문자열 등, 메시지의 내용을 나타내는 임의의 데이터입니다. GS2는 이 값을 해석하지 않으며, 메시지 UI 렌더링을 위해 게임 클라이언트에 그대로 전달됩니다. 최대 4096자입니다. readAcquireActions List [] 0 ~ 100 items 개봉 시 입수 액션 사용자가 이 메시지를 개봉했을 때 실행되는 입수 액션 목록입니다. 아이템, 화폐, 리소스 등의 보상을 메시지에 첨부하기 위해 사용됩니다. 여러 액션을 조합하여 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 메시지당 최대 100개의 액션입니다. expiresAt long 유효기간 일시 UNIX 시간·밀리초 expiresTimeSpan TimeSpan 메시지를 수신한 시각(기준 시각)부터 메시지가 삭제될 때까지의 기간 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inbox:SendMessageByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"metadata\" : \"[string]메타데이터\" , \"readAcquireActions\" : [ { \"action\" : \"[string]입수 액션에서 실행할 액션의 종류\" , \"request\" : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } ], \"expiresAt\" : \"[long]유효기간 일시\" , \"expiresTimeSpan\" : { \"days\" : \"[int]일수\" , \"hours\" : \"[int]시간\" , \"minutes\" : \"[int]분\" }, \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inbox:SendMessageByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" metadata : \"[string]메타데이터\" readAcquireActions : - action : \"[string]입수 액션에서 실행할 액션의 종류\" request : \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" expiresAt : \"[long]유효기간 일시\" expiresTimeSpan : days : \"[int]일수\" hours : \"[int]시간\" minutes : \"[int]분\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inbox\" ). acquire.send_message_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , metadata = \"[string]메타데이터\" , readAcquireActions = { { action = \"[string]입수 액션에서 실행할 액션의 종류\" , request = \"[string]액션 실행 시 사용되는 요청의 JSON 문자열\" } }, expiresAt = \"[long]유효기간 일시\" , expiresTimeSpan = { days = \"[int]일수\" , hours = \"[int]시간\" , minutes = \"[int]분\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Inbox 트랜잭션 액션","url":"/ko/api_reference/inbox/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId 사용자 ID를 지정하여 인벤토리의 최대 용량을 검증 지정된 사용자의 현재 최대 인벤토리 용량이 지정된 조건을 만족하는지 검증합니다. 6개의 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 검증에는 버프 적용 후의 용량 값(GS2-Buff 의 활성 버프 효과를 반영)이 사용됩니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 현재 인벤토리의 최대 용량이 지정 값 미만일 것 lessEqual 현재 인벤토리의 최대 용량이 지정 값 이하일 것 greater 현재 인벤토리의 최대 용량이 지정 값 초과일 것 greaterEqual 현재 인벤토리의 최대 용량이 지정 값 이상일 것 equal 현재 인벤토리의 최대 용량이 지정 값과 일치할 것 notEqual 현재 인벤토리의 최대 용량이 지정 값과 일치하지 않을 것 currentInventoryMaxCapacity int  0 ~ 2147483646 현재 인벤토리의 최대 용량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"inventoryName\" : \"[string]인벤토리 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"currentInventoryMaxCapacity\" : \"[int]현재 인벤토리의 최대 용량\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" inventoryName : \"[string]인벤토리 모델 이름\" verifyType : \"[string]검증 종류\" currentInventoryMaxCapacity : \"[int]현재 인벤토리의 최대 용량\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). verify.verify_inventory_current_max_capacity_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , inventoryName = \"[string]인벤토리 모델 이름\" , verifyType = \"[string]검증 종류\" , currentInventoryMaxCapacity = \"[int]현재 인벤토리의 최대 용량\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:VerifyItemSetByUserId 사용자 ID를 지정하여 아이템 세트의 소지 수량 검증 지정된 사용자의 합계 아이템 수량이 지정된 조건을 만족하는지 검증합니다. 수량은 지정된 아이템 타입의 모든 아이템 세트를 합산하여 계산됩니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 count long  0 ~ 9223372036854775805 소지 수량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:VerifyItemSetByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"inventoryName\" : \"[string]인벤토리 모델 이름\" , \"itemName\" : \"[string]아이템 모델명\" , \"verifyType\" : \"[string]검증 종류\" , \"itemSetName\" : \"[string]아이템 세트를 식별하는 이름\" , \"count\" : \"[long]소지 수량\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:VerifyItemSetByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" inventoryName : \"[string]인벤토리 모델 이름\" itemName : \"[string]아이템 모델명\" verifyType : \"[string]검증 종류\" itemSetName : \"[string]아이템 세트를 식별하는 이름\" count : \"[long]소지 수량\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). verify.verify_item_set_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , inventoryName = \"[string]인벤토리 모델 이름\" , itemName = \"[string]아이템 모델명\" , verifyType = \"[string]검증 종류\" , itemSetName = \"[string]아이템 세트를 식별하는 이름\" , count = \"[long]소지 수량\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:VerifyReferenceOfByUserId 사용자 ID를 지정하여 아이템의 참조원을 검증 지정된 사용자의 아이템 세트 상의 참조원 상태를 검증합니다. 4개의 검증 타입을 지원: not_entry(참조원이 미등록), already_entry(참조원이 등록됨), empty(참조원이 0개), not_empty(참조원이 1개 이상 존재). 조건이 충족되지 않으면 오류가 반환됩니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. verifyType 문자열 열거형 enum {   “not_entry”,   “already_entry”,   “empty”,   “not_empty” }  검증 종류 정의 설명 not_entry 지정한 참조원이 아직 등록되어 있지 않을 것 already_entry 지정한 참조원이 이미 등록되어 있을 것 empty 참조원으로 등록되어 있는 요소가 0개일 것 not_empty 참조원으로 등록되어 있는 요소가 1개 이상일 것 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:VerifyReferenceOfByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]인벤토리 모델명\" , \"userId\" : \"[string]사용자ID\" , \"itemName\" : \"[string]아이템 모델명\" , \"itemSetName\" : \"[string]아이템 세트를 식별하는 이름\" , \"referenceOf\" : \"[string]참조원\" , \"verifyType\" : \"[string]검증 종류\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:VerifyReferenceOfByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]인벤토리 모델명\" userId : \"[string]사용자ID\" itemName : \"[string]아이템 모델명\" itemSetName : \"[string]아이템 세트를 식별하는 이름\" referenceOf : \"[string]참조원\" verifyType : \"[string]검증 종류\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). verify.verify_reference_of_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]인벤토리 모델명\" , userId = \"[string]사용자ID\" , itemName = \"[string]아이템 모델명\" , itemSetName = \"[string]아이템 세트를 식별하는 이름\" , referenceOf = \"[string]참조원\" , verifyType = \"[string]검증 종류\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:VerifySimpleItemByUserId 사용자 ID를 지정하여 심플 아이템 소지 수량 검증 지정된 사용자의 심플 아이템 수량이 지정된 조건을 만족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. itemName string  ~ 128자 심플 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 심플 아이템 모델의 이름입니다. 이 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 count long  0 ~ 9223372036854775805 소지 수량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:VerifySimpleItemByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"inventoryName\" : \"[string]심플 인벤토리 모델 이름\" , \"itemName\" : \"[string]심플 아이템 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"count\" : \"[long]소지 수량\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:VerifySimpleItemByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" inventoryName : \"[string]심플 인벤토리 모델 이름\" itemName : \"[string]심플 아이템 모델 이름\" verifyType : \"[string]검증 종류\" count : \"[long]소지 수량\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). verify.verify_simple_item_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , inventoryName = \"[string]심플 인벤토리 모델 이름\" , itemName = \"[string]심플 아이템 모델 이름\" , verifyType = \"[string]검증 종류\" , count = \"[long]소지 수량\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:VerifyBigItemByUserId 사용자 ID를 지정하여 거대 아이템의 소지 수량 검증 지정 사용자의 거대 아이템 수량이 지정된 조건을 충족하는지 검증합니다. 6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual. 비교는 문자열 기반 수량에 대해 임의 정밀도 연산으로 수행됩니다. 조건이 충족되지 않으면 오류가 반환되고, 충족되면 요청이 성공합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 거대 아이템 모델 이름 이 레코드에 저장된 아이템의 종류를 정의하는 거대 아이템 모델의 이름입니다. 이 거대 아이템 소지품이 어떤 아이템 정의에 대응하는지 식별하는 데 사용됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 소지 수량이 지정 값 미만일 것 lessEqual 소지 수량이 지정 값 이하일 것 greater 소지 수량이 지정 값 초과일 것 greaterEqual 소지 수량이 지정 값 이상일 것 equal 소지 수량이 지정 값과 일치할 것 notEqual 소지 수량이 지정 값과 일치하지 않을 것 count string  ~ 1024자 소지 수량 최대 1024자리까지의 정수값 문자열 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:VerifyBigItemByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"inventoryName\" : \"[string]거대 인벤토리 모델 이름\" , \"itemName\" : \"[string]거대 아이템 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"count\" : \"[string]소지 수량\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:VerifyBigItemByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" inventoryName : \"[string]거대 인벤토리 모델 이름\" itemName : \"[string]거대 아이템 모델 이름\" verifyType : \"[string]검증 종류\" count : \"[string]소지 수량\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). verify.verify_big_item_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , inventoryName = \"[string]거대 인벤토리 모델 이름\" , itemName = \"[string]거대 아이템 모델 이름\" , verifyType = \"[string]검증 종류\" , count = \"[string]소지 수량\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Inventory:ConsumeItemSetByUserId 사용자 ID를 지정하여 아이템 세트를 소비 지정된 사용자의 인벤토리 내 특정 아이템의 수량을 감소시킵니다. itemSetName을 지정하면 해당 특정 스택만 소비 대상이 됩니다. 지정하지 않으면 해당 아이템 타입의 모든 스택에서 소비됩니다. 아이템 세트의 수량이 0이 되면 자동으로 삭제됩니다. 충분한 아이템이 없는 경우 Insufficient 에러가 반환됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. consumeCount long  1 ~ 9223372036854775805 소비 수량 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:ConsumeItemSetByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]인벤토리 모델명\" , \"userId\" : \"[string]사용자ID\" , \"itemName\" : \"[string]아이템 모델명\" , \"consumeCount\" : \"[long]소비 수량\" , \"itemSetName\" : \"[string]아이템 세트를 식별하는 이름\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:ConsumeItemSetByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]인벤토리 모델명\" userId : \"[string]사용자ID\" itemName : \"[string]아이템 모델명\" consumeCount : \"[long]소비 수량\" itemSetName : \"[string]아이템 세트를 식별하는 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). consume.consume_item_set_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]인벤토리 모델명\" , userId = \"[string]사용자ID\" , itemName = \"[string]아이템 모델명\" , consumeCount = \"[long]소비 수량\" , itemSetName = \"[string]아이템 세트를 식별하는 이름\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:ConsumeSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 소비 소비 수량의 배치를 사용하여 지정된 사용자의 심플 인벤토리 내 아이템 수량을 감소시킵니다. 단일 원자적 작업으로 여러 아이템을 소비할 수 있습니다. 어느 하나의 아이템 수량이라도 부족한 경우, 작업 전체가 실패합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. consumeCounts List  1 ~ 100 items 심플 아이템의 소비 수량 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]심플 인벤토리 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"consumeCounts\" : [ { \"itemName\" : \"[string]심플 아이템 모델 이름\" , \"count\" : \"[long]소비 수량\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:ConsumeSimpleItemsByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]심플 인벤토리 모델 이름\" userId : \"[string]사용자ID\" consumeCounts : - itemName : \"[string]심플 아이템 모델 이름\" count : \"[long]소비 수량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). consume.consume_simple_items_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]심플 인벤토리 모델 이름\" , userId = \"[string]사용자ID\" , consumeCounts = { { itemName = \"[string]심플 아이템 모델 이름\" , count = \"[long]소비 수량\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:ConsumeBigItemByUserId 사용자 ID를 지정하여 거대 아이템 소비 임의 정밀도 연산을 사용하여 지정 사용자의 거대 아이템 수량에서 지정된 수량을 감산합니다. consumeCount는 최대 1024자리의 유효한 정수 문자열이어야 합니다. 현재 수량이 부족한 경우 Insufficient 오류가 반환되며, 감산은 이루어지지 않습니다. 네임스페이스 설정을 통해 거대 아이템 소비 시 커스텀 로직을 실행하는 GS2-Script를 설정할 수 있습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. consumeCount string  ~ 1024자 거대 아이템의 소비 수량 최대 1024자리까지의 정수값 문자열 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:ConsumeBigItemByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]거대 인벤토리 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"itemName\" : \"[string]거대 아이템 모델 이름\" , \"consumeCount\" : \"[string]거대 아이템의 소비 수량\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:ConsumeBigItemByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]거대 인벤토리 모델 이름\" userId : \"[string]사용자ID\" itemName : \"[string]거대 아이템 모델 이름\" consumeCount : \"[string]거대 아이템의 소비 수량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). consume.consume_big_item_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]거대 인벤토리 모델 이름\" , userId = \"[string]사용자ID\" , itemName = \"[string]거대 아이템 모델 이름\" , consumeCount = \"[string]거대 아이템의 소비 수량\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Inventory:AddCapacityByUserId 사용자 ID를 지정하여 인벤토리의 용량 크기를 가산 지정된 양만큼 사용자의 인벤토리 용량을 증가시킵니다. 결과 용량은 인벤토리 모델의 maxCapacity 를 초과할 수 없습니다. 인벤토리가 아직 존재하지 않는 경우, initialCapacity 로 자동 생성된 후 지정된 값이 가산됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. addCapacityValue int  1 ~ 2147483646 가산할 용량 크기 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:AddCapacityByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]인벤토리 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"addCapacityValue\" : \"[int]가산할 용량 크기\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:AddCapacityByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]인벤토리 모델 이름\" userId : \"[string]사용자ID\" addCapacityValue : \"[int]가산할 용량 크기\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.add_capacity_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]인벤토리 모델 이름\" , userId = \"[string]사용자ID\" , addCapacityValue = \"[int]가산할 용량 크기\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:SetCapacityByUserId 사용자 ID를 지정하여 인벤토리의 용량 크기를 설정 사용자의 인벤토리 용량을 지정된 절대값으로 설정합니다. 갱신 전후의 인벤토리 상태를 모두 반환하므로, 신구 용량 값을 비교할 수 있습니다. 새로운 용량 값은 인벤토리 모델의 maxCapacity 를 초과할 수 없습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 이 인벤토리의 구조와 용량 설정을 정의하는 인벤토리 모델의 이름입니다. 사용자의 인벤토리 인스턴스를 모델 정의에 연결하여 사용 가능한 아이템의 종류와 용량 제한을 결정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. newCapacityValue int  1 ~ 2147483646 인벤토리의 새로운 최대 용량 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:SetCapacityByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]인벤토리 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"newCapacityValue\" : \"[int]인벤토리의 새로운 최대 용량\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:SetCapacityByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]인벤토리 모델 이름\" userId : \"[string]사용자ID\" newCapacityValue : \"[int]인벤토리의 새로운 최대 용량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.set_capacity_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]인벤토리 모델 이름\" , userId = \"[string]사용자ID\" , newCapacityValue = \"[int]인벤토리의 새로운 최대 용량\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:AcquireItemSetByUserId 사용자 ID를 지정하여 아이템 세트 입수 사용자의 인벤토리에 아이템을 추가합니다. 기존 아이템 세트에 여유(스택 제한 미만)가 있는 경우 그곳에 추가되며, 그렇지 않은 경우 복수 스택이 허용되어 있으면 새로운 아이템 세트가 생성됩니다. 선택적으로 expiresAt을 지정하여 새로 생성되는 아이템 세트의 유효기간을 설정할 수 있습니다. 유효기간이 이미 지난 아이템은 빈 것으로 취급됩니다. createNewItemSet이 true인 경우, 기존 세트에 여유가 있어도 항상 새로운 아이템 세트가 생성됩니다. 합계 수량이 인벤토리 용량을 초과하는 경우 오버플로우 수량이 반환되며, 네임스페이스 설정에 따라 오버플로우분이 GS2-Inbox로 전송될 수 있습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. acquireCount long  1 ~ 9223372036854775805 입수하는 양 expiresAt long 0 유효기간 UNIX 시간·밀리초 createNewItemSet bool false 기존 아이템 세트에 여유가 있더라도 새로운 아이템 세트를 생성할지 여부 itemSetName string ~ 36자 아이템 세트를 식별하는 이름 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:AcquireItemSetByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]인벤토리 모델 이름\" , \"itemName\" : \"[string]아이템 모델명\" , \"userId\" : \"[string]사용자ID\" , \"acquireCount\" : \"[long]입수하는 양\" , \"expiresAt\" : \"[long]유효기간\" , \"createNewItemSet\" : \"[bool]기존 아이템 세트에 여유가 있더라도 새로운 아이템 세트를 생성할지 여부\" , \"itemSetName\" : \"[string]아이템 세트를 식별하는 이름\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:AcquireItemSetByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]인벤토리 모델 이름\" itemName : \"[string]아이템 모델명\" userId : \"[string]사용자ID\" acquireCount : \"[long]입수하는 양\" expiresAt : \"[long]유효기간\" createNewItemSet : \"[bool]기존 아이템 세트에 여유가 있더라도 새로운 아이템 세트를 생성할지 여부\" itemSetName : \"[string]아이템 세트를 식별하는 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.acquire_item_set_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]인벤토리 모델 이름\" , itemName = \"[string]아이템 모델명\" , userId = \"[string]사용자ID\" , acquireCount = \"[long]입수하는 양\" , expiresAt = \"[long]유효기간\" , createNewItemSet = \"[bool]기존 아이템 세트에 여유가 있더라도 새로운 아이템 세트를 생성할지 여부\" , itemSetName = \"[string]아이템 세트를 식별하는 이름\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:AcquireItemSetWithGradeByUserId 사용자 ID를 지정하여 GS2-Grade에 그레이드를 설정하면서 아이템 세트를 1개 입수 아이템을 1개 입수함과 동시에 GS2-Grade를 통해 그레이드 값을 설정합니다. 각 아이템이 서로 다른 그레이드 값을 가지는 품질/랭크 시스템(예: 스탯이 다른 장비)을 가진 아이템에 사용됩니다. 항상 새로운 아이템 세트가 생성되며(createNewItemSet의 동작), 아이템 입수 후 GS2-Grade의 SetGradeByUserId를 통해 그레이드가 설정됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델 이름 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. gradeModelId string  ~ 1024자 그레이드 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN gradeValue long  1 ~ 9223372036854775805 설정할 그레이드 값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:AcquireItemSetWithGradeByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]인벤토리 모델 이름\" , \"itemName\" : \"[string]아이템 모델명\" , \"userId\" : \"[string]사용자ID\" , \"gradeModelId\" : \"[string]그레이드 모델 GRN\" , \"gradeValue\" : \"[long]설정할 그레이드 값\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:AcquireItemSetWithGradeByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]인벤토리 모델 이름\" itemName : \"[string]아이템 모델명\" userId : \"[string]사용자ID\" gradeModelId : \"[string]그레이드 모델 GRN\" gradeValue : \"[long]설정할 그레이드 값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.acquire_item_set_with_grade_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]인벤토리 모델 이름\" , itemName = \"[string]아이템 모델명\" , userId = \"[string]사용자ID\" , gradeModelId = \"[string]그레이드 모델 GRN\" , gradeValue = \"[long]설정할 그레이드 값\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:AddReferenceOfByUserId 사용자 ID를 지정하여 아이템에 참조원을 추가 지정된 사용자의 지정된 아이템 세트에 참조원 문자열을 등록합니다. 참조원은 아이템 세트를 외부 엔티티(장비 슬롯이나 캐릭터 등)에 연관 짓습니다. 인벤토리 모델에서 protectReferencedItem 이 활성화된 경우, 참조원을 가진 아이템은 소비·삭제할 수 없게 되어, 장비 중인 아이템이 실수로 소비되는 것을 방지할 수 있습니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:AddReferenceOfByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]인벤토리 모델명\" , \"userId\" : \"[string]사용자ID\" , \"itemName\" : \"[string]아이템 모델명\" , \"itemSetName\" : \"[string]아이템 세트를 식별하는 이름\" , \"referenceOf\" : \"[string]참조원\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:AddReferenceOfByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]인벤토리 모델명\" userId : \"[string]사용자ID\" itemName : \"[string]아이템 모델명\" itemSetName : \"[string]아이템 세트를 식별하는 이름\" referenceOf : \"[string]참조원\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.add_reference_of_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]인벤토리 모델명\" , userId = \"[string]사용자ID\" , itemName = \"[string]아이템 모델명\" , itemSetName = \"[string]아이템 세트를 식별하는 이름\" , referenceOf = \"[string]참조원\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:DeleteReferenceOfByUserId 사용자 ID를 지정하여 아이템의 참조원을 삭제 지정된 사용자의 지정된 아이템 세트에서 특정 참조원 문자열을 삭제합니다. 삭제 후, protectReferencedItem 이 활성화되어 있고 다른 참조원이 남아있지 않은 경우, 아이템은 다시 소비·삭제가 가능해집니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 인벤토리 모델명 이 아이템 세트를 포함하는 인벤토리 모델의 이름입니다. itemName과 함께 사용되어 이 소지품이 어떤 인벤토리와 아이템 종류에 속하는지를 식별하는 데 사용됩니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. itemName string  ~ 128자 아이템 모델명 이 세트에 저장된 아이템의 종류를 정의하는 아이템 모델의 이름입니다. inventoryName과 조합하여 이 아이템 세트의 스택 상한과 다중 스택 동작을 결정합니다. itemSetName string  UUID ~ 36자 아이템 세트를 식별하는 이름 아이템 세트의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 아이템 세트를 식별하는 데 사용됩니다. referenceOf string  ~ 1024자 참조원 장비 슬롯이나 편성 바인드 등, 이 아이템 세트에 대한 외부 참조를 나타내는 문자열 식별자입니다. 인벤토리 모델에서 protectReferencedItem이 활성화된 경우, 참조원을 가진 아이템 세트는 소비하거나 삭제할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:DeleteReferenceOfByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]인벤토리 모델명\" , \"userId\" : \"[string]사용자ID\" , \"itemName\" : \"[string]아이템 모델명\" , \"itemSetName\" : \"[string]아이템 세트를 식별하는 이름\" , \"referenceOf\" : \"[string]참조원\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:DeleteReferenceOfByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]인벤토리 모델명\" userId : \"[string]사용자ID\" itemName : \"[string]아이템 모델명\" itemSetName : \"[string]아이템 세트를 식별하는 이름\" referenceOf : \"[string]참조원\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.delete_reference_of_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]인벤토리 모델명\" , userId = \"[string]사용자ID\" , itemName = \"[string]아이템 모델명\" , itemSetName = \"[string]아이템 세트를 식별하는 이름\" , referenceOf = \"[string]참조원\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:AcquireSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 입수 입수 수량의 배치를 사용하여 사용자의 심플 인벤토리에 아이템을 추가합니다. 단일 원자적 작업으로 여러 아이템을 입수할 수 있습니다. acquireCounts 배열로 각 아이템의 이름과 수량을 지정합니다. 일반적인 아이템 세트와 달리, 심플 아이템에는 용량 제한, 스택 제한, 유효기간이 없습니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. acquireCounts List  1 ~ 100 items 심플 아이템의 입수 수량 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]심플 인벤토리 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"acquireCounts\" : [ { \"itemName\" : \"[string]심플 아이템 모델 이름\" , \"count\" : \"[long]입수하는 양\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:AcquireSimpleItemsByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]심플 인벤토리 모델 이름\" userId : \"[string]사용자ID\" acquireCounts : - itemName : \"[string]심플 아이템 모델 이름\" count : \"[long]입수하는 양\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.acquire_simple_items_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]심플 인벤토리 모델 이름\" , userId = \"[string]사용자ID\" , acquireCounts = { { itemName = \"[string]심플 아이템 모델 이름\" , count = \"[long]입수하는 양\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:SetSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 설정 단일 원자적 작업으로 여러 심플 아이템의 절대 수량을 설정합니다. counts 배열로 각 아이템의 이름과 목표 수량을 지정합니다. 입수/소비가 상대적 연산인 것과 달리, 이 경우 현재 수량을 완전히 덮어씁니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 심플 인벤토리 모델 이름 심플 인벤토리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. counts List  1 ~ 100 items 심플 아이템의 소지 수량 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:SetSimpleItemsByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]심플 인벤토리 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"counts\" : [ { \"itemName\" : \"[string]심플 아이템 모델 이름\" , \"count\" : \"[long]소지 수량\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:SetSimpleItemsByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]심플 인벤토리 모델 이름\" userId : \"[string]사용자ID\" counts : - itemName : \"[string]심플 아이템 모델 이름\" count : \"[long]소지 수량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.set_simple_items_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]심플 인벤토리 모델 이름\" , userId = \"[string]사용자ID\" , counts = { { itemName = \"[string]심플 아이템 모델 이름\" , count = \"[long]소지 수량\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:AcquireBigItemByUserId 사용자 ID를 지정하여 거대 아이템 입수 임의 정밀도 연산을 사용하여 사용자의 거대 아이템 수량에 지정된 수량을 가산합니다. acquireCount는 최대 1024자리의 유효한 정수 문자열이어야 하며, 형식이 올바르지 않으면 오류가 발생합니다. 아이템이 아직 존재하지 않는 경우 자동으로 생성됩니다. 네임스페이스 설정을 통해 거대 아이템 입수 시 커스텀 로직을 실행하는 GS2-Script를 설정할 수 있습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. acquireCount string  ~ 1024자 거대 아이템의 입수 수량 최대 1024자리까지의 정수값 문자열 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:AcquireBigItemByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]거대 인벤토리 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"itemName\" : \"[string]거대 아이템 모델 이름\" , \"acquireCount\" : \"[string]거대 아이템의 입수 수량\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:AcquireBigItemByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]거대 인벤토리 모델 이름\" userId : \"[string]사용자ID\" itemName : \"[string]거대 아이템 모델 이름\" acquireCount : \"[string]거대 아이템의 입수 수량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.acquire_big_item_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]거대 인벤토리 모델 이름\" , userId = \"[string]사용자ID\" , itemName = \"[string]거대 아이템 모델 이름\" , acquireCount = \"[string]거대 아이템의 입수 수량\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Inventory:SetBigItemByUserId 사용자 ID를 지정하여 거대 아이템 설정 거대 아이템의 수량을 지정된 절대값으로 설정하여 현재 수량을 완전히 대체합니다. 수량은 최대 1024자리의 유효한 정수 문자열이어야 합니다. 아이템이 아직 존재하지 않는 경우 자동으로 생성됩니다. 입수·소비와 같은 상대적 연산과 달리, 정확한 값을 직접 설정합니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. inventoryName string  ~ 128자 거대 인벤토리 모델 이름 거대 인벤토리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. itemName string  ~ 128자 거대 아이템 모델 이름 거대 아이템 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. count string  ~ 1024자 거대 아이템의 수량 최대 1024자리까지의 정수값 문자열 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Inventory:SetBigItemByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"inventoryName\" : \"[string]거대 인벤토리 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"itemName\" : \"[string]거대 아이템 모델 이름\" , \"count\" : \"[string]거대 아이템의 수량\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Inventory:SetBigItemByUserId request : namespaceName : \"[string]네임스페이스 이름\" inventoryName : \"[string]거대 인벤토리 모델 이름\" userId : \"[string]사용자ID\" itemName : \"[string]거대 아이템 모델 이름\" count : \"[string]거대 아이템의 수량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"inventory\" ). acquire.set_big_item_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , inventoryName = \"[string]거대 인벤토리 모델 이름\" , userId = \"[string]사용자ID\" , itemName = \"[string]거대 아이템 모델 이름\" , count = \"[string]거대 아이템의 수량\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Inventory 트랜잭션 액션","url":"/ko/api_reference/inventory/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2JobQueue:DeleteJobByUserId 사용자 ID를 지정하여 잡 삭제 지정한 사용자의 잡 큐에서 특정 잡을 삭제합니다. 실행 상태와 관계없이 잡이 삭제됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. jobName string  UUID ~ 36자 잡 이름 잡의 고유한 이름을 보유합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 잡을 식별하는 데 사용됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2JobQueue:DeleteJobByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"jobName\" : \"[string]잡 이름\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2JobQueue:DeleteJobByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" jobName : \"[string]잡 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"jobQueue\" ). consume.delete_job_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , jobName = \"[string]잡 이름\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2JobQueue:PushByUserId 사용자 ID를 지정하여 잡 등록 사용자의 잡 큐에 하나 이상의 잡을 등록합니다(최대 10건). 각 잡에는 실행할 GS2-Script, 인수, 최대 재시도 횟수를 지정합니다. 네임스페이스에서 enableAutoRun이 활성화된 경우, 잡은 등록 후 즉시 비동기로 실행되며, 응답의 autoRun 플래그가 true가 됩니다. enableAutoRun이 비활성화되어 있으면 잡은 큐에 추가되고 Run API를 통해 수동으로 실행해야 하며, autoRun 플래그는 false가 됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. jobs List 0 ~ 10 items 추가할 잡 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2JobQueue:PushByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"jobs\" : [ { \"scriptId\" : \"[string]스크립트 GRN\" , \"args\" : \"[string]인수\" , \"maxTryCount\" : \"[int]최대 시도 횟수\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2JobQueue:PushByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" jobs : - scriptId : \"[string]스크립트 GRN\" args : \"[string]인수\" maxTryCount : \"[int]최대 시도 횟수\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"jobQueue\" ). acquire.push_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , jobs = { { scriptId = \"[string]스크립트 GRN\" , args = \"[string]인수\" , maxTryCount = \"[int]최대 시도 횟수\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-JobQueue 트랜잭션 액션","url":"/ko/api_reference/job_queue/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Limit:VerifyCounterByUserId 사용자 ID를 지정하여 카운터 값 검증 지정된 사용자의 카운터 값이 지정된 조건을 충족하는지 검증합니다. less, lessEqual, greater, greaterEqual, equal, notEqual의 6가지 비교 연산자를 지원합니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 카운터 값이 지정 값 미만일 것 lessEqual 카운터 값이 지정 값 이하일 것 greater 카운터 값이 지정 값을 초과할 것 greaterEqual 카운터 값이 지정 값 이상일 것 equal 카운터 값이 지정 값과 일치할 것 notEqual 카운터 값이 지정 값과 일치하지 않을 것 count int 0 0 ~ 2147483646 카운트 값 이 카운터의 현재 사용 횟수입니다. countUp 조작으로 증가하며, 이때 지정된 최대값과 비교됩니다. 사용 횟수 제한 모델의 리셋 시점에 도달하면 자동으로 0으로 리셋됩니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Limit:VerifyCounterByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"limitName\" : \"[string]사용 횟수 제한 모델 이름\" , \"counterName\" : \"[string]카운터 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"count\" : \"[int]카운트 값\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Limit:VerifyCounterByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" limitName : \"[string]사용 횟수 제한 모델 이름\" counterName : \"[string]카운터 이름\" verifyType : \"[string]검증 종류\" count : \"[int]카운트 값\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"limit\" ). verify.verify_counter_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , limitName = \"[string]사용 횟수 제한 모델 이름\" , counterName = \"[string]카운터 이름\" , verifyType = \"[string]검증 종류\" , count = \"[int]카운트 값\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Limit:CountUpByUserId 사용자 ID를 지정하여 카운트업 지정된 사용자의 카운터를 지정된 카운트업 값만큼 증가시킵니다. maxValue가 지정된 경우, 카운터는 해당 상한을 초과하지 않습니다. 작업이 최대값을 초과하는 경우 Overflow 오류가 반환됩니다. 카운터가 아직 존재하지 않는 경우, 자동으로 생성됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. countUpValue int 1 1 ~ 2147483646 카운트업할 양 maxValue int 1 ~ 2147483646 카운트업을 허용하는 최댓값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Limit:CountUpByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"limitName\" : \"[string]사용 횟수 제한 모델 이름\" , \"counterName\" : \"[string]카운터 이름\" , \"userId\" : \"[string]사용자ID\" , \"countUpValue\" : \"[int]카운트업할 양\" , \"maxValue\" : \"[int]카운트업을 허용하는 최댓값\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Limit:CountUpByUserId request : namespaceName : \"[string]네임스페이스 이름\" limitName : \"[string]사용 횟수 제한 모델 이름\" counterName : \"[string]카운터 이름\" userId : \"[string]사용자ID\" countUpValue : \"[int]카운트업할 양\" maxValue : \"[int]카운트업을 허용하는 최댓값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"limit\" ). consume.count_up_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , limitName = \"[string]사용 횟수 제한 모델 이름\" , counterName = \"[string]카운터 이름\" , userId = \"[string]사용자ID\" , countUpValue = \"[int]카운트업할 양\" , maxValue = \"[int]카운트업을 허용하는 최댓값\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Limit:CountDownByUserId 사용자 ID를 지정하여 카운트다운 지정된 사용자의 카운터를 지정된 카운트다운 값만큼 감소시킵니다. 카운터 값은 0 미만으로 내려가지 않습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. countDownValue int 1 1 ~ 2147483646 카운트다운할 양 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Limit:CountDownByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"limitName\" : \"[string]사용 횟수 제한 모델 이름\" , \"counterName\" : \"[string]카운터 이름\" , \"userId\" : \"[string]사용자ID\" , \"countDownValue\" : \"[int]카운트다운할 양\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Limit:CountDownByUserId request : namespaceName : \"[string]네임스페이스 이름\" limitName : \"[string]사용 횟수 제한 모델 이름\" counterName : \"[string]카운터 이름\" userId : \"[string]사용자ID\" countDownValue : \"[int]카운트다운할 양\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"limit\" ). acquire.count_down_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , limitName = \"[string]사용 횟수 제한 모델 이름\" , counterName = \"[string]카운터 이름\" , userId = \"[string]사용자ID\" , countDownValue = \"[int]카운트다운할 양\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Limit:DeleteCounterByUserId 사용자 ID를 지정하여 카운터 삭제 지정된 사용자의 카운터를 삭제하고 사용 횟수를 리셋합니다. 이를 통해 이 카운터에 대한 횟수 제한이 실질적으로 해제되어, 사용자는 다시 0부터 카운트를 시작할 수 있습니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. limitName string  ~ 128자 사용 횟수 제한 모델 이름 이 카운터가 속한 사용 횟수 제한 모델의 이름입니다. 이 카운터 값에 적용되는 리셋 일정(매일, 매주, 매월 등)을 결정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. counterName string  ~ 128자 카운터 이름 사용 횟수 제한 모델 내에서 이 카운터를 고유하게 식별하는 이름입니다. 동일한 사용 횟수 제한 모델을 서로 다른 이름의 여러 카운터로 공유할 수 있어, 개별 사용 횟수 제한 모델을 만들지 않고도 별도의 사용 횟수 추적(예: 퀘스트별 또는 상품별로 카운터 1개)이 가능합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Limit:DeleteCounterByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"limitName\" : \"[string]사용 횟수 제한 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"counterName\" : \"[string]카운터 이름\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Limit:DeleteCounterByUserId request : namespaceName : \"[string]네임스페이스 이름\" limitName : \"[string]사용 횟수 제한 모델 이름\" userId : \"[string]사용자ID\" counterName : \"[string]카운터 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"limit\" ). acquire.delete_counter_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , limitName = \"[string]사용 횟수 제한 모델 이름\" , userId = \"[string]사용자ID\" , counterName = \"[string]카운터 이름\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Limit 트랜잭션 액션","url":"/ko/api_reference/limit/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2LoginReward:MarkReceivedByUserId 사용자 ID를 지정하여 수령 완료 처리 지정된 사용자의 보너스 모델에서 특정 스텝을 수동으로 수령 완료로 표시합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. stepNumber int  0 ~ 100 스텝 번호 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2LoginReward:MarkReceivedByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"bonusModelName\" : \"[string]보너스 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"stepNumber\" : \"[int]스텝 번호\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2LoginReward:MarkReceivedByUserId request : namespaceName : \"[string]네임스페이스 이름\" bonusModelName : \"[string]보너스 모델 이름\" userId : \"[string]사용자ID\" stepNumber : \"[int]스텝 번호\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"loginReward\" ). consume.mark_received_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , bonusModelName = \"[string]보너스 모델 이름\" , userId = \"[string]사용자ID\" , stepNumber = \"[int]스텝 번호\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2LoginReward:DeleteReceiveStatusByUserId 사용자 ID를 지정하여 수령 상태 리셋 지정된 사용자의 보너스 모델의 수령 상태 데이터를 모두 삭제하여 보너스 진행 상황을 완전히 리셋합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2LoginReward:DeleteReceiveStatusByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"bonusModelName\" : \"[string]보너스 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2LoginReward:DeleteReceiveStatusByUserId request : namespaceName : \"[string]네임스페이스 이름\" bonusModelName : \"[string]보너스 모델 이름\" userId : \"[string]사용자ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"loginReward\" ). acquire.delete_receive_status_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , bonusModelName = \"[string]보너스 모델 이름\" , userId = \"[string]사용자ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2LoginReward:UnmarkReceivedByUserId 사용자 ID를 지정하여 미수령 처리 지정된 사용자의 보너스 모델에서 수령 완료로 표시된 스텝을 미수령 상태로 되돌립니다. 지정된 스텝이 수령 완료 상태가 아닌 경우, 오류가 반환됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. bonusModelName string  ~ 128자 보너스 모델 이름 이 수신 상태가 연결된 로그인 보너스 모델의 이름. 사용자의 수신 진행 상황을 특정 보너스 모델 정의와 연결하여, 어떤 보상 목록과 배포 규칙이 적용되는지를 결정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. stepNumber int  0 ~ 100 스텝 번호 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2LoginReward:UnmarkReceivedByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"bonusModelName\" : \"[string]보너스 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"stepNumber\" : \"[int]스텝 번호\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2LoginReward:UnmarkReceivedByUserId request : namespaceName : \"[string]네임스페이스 이름\" bonusModelName : \"[string]보너스 모델 이름\" userId : \"[string]사용자ID\" stepNumber : \"[int]스텝 번호\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"loginReward\" ). acquire.unmark_received_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , bonusModelName = \"[string]보너스 모델 이름\" , userId = \"[string]사용자ID\" , stepNumber = \"[int]스텝 번호\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-LoginReward 트랜잭션 액션","url":"/ko/api_reference/login_reward/stamp_sheet/"},{"content":"Acquire Action 입수 액션 Gs2Lottery:DrawByUserId 사용자 ID를 지정하여 추첨을 실행 추첨 모델의 설정에 따라 지정한 사용자의 추첨을 실행합니다. 추첨은 두 가지 방식을 지원합니다: 배출 확률 테이블 모드(사전에 정의된 확률 테이블 사용)와 스크립트 모드(GS2-Script로 경품을 결정). 박스 추첨 모드에서는 배출된 경품이 박스에서 삭제되어 다시 배출되지 않습니다. 박스가 비어 있는 경우 Empty 오류가 반환됩니다. 배출된 경품은 트랜잭션으로 발행됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 lotteryName string  ~ 128자 추첨 모델 이름 추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. count int  1 ~ 1000 추첨 횟수 config List [] 0 ~ 1000 items 트랜잭션의 플레이스홀더에 적용하는 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Lottery:DrawByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"lotteryName\" : \"[string]추첨 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"count\" : \"[int]추첨 횟수\" , \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Lottery:DrawByUserId request : namespaceName : \"[string]네임스페이스 이름\" lotteryName : \"[string]추첨 모델 이름\" userId : \"[string]사용자ID\" count : \"[int]추첨 횟수\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"lottery\" ). acquire.draw_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , lotteryName = \"[string]추첨 모델 이름\" , userId = \"[string]사용자ID\" , count = \"[int]추첨 횟수\" , config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Lottery:ResetBoxByUserId 사용자 ID를 지정하여 박스를 리셋 지정한 사용자의 박스를 초기 상태로 리셋하고, 배출된 모든 경품을 박스로 되돌립니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. prizeTableName string  ~ 128자 배출 확률 테이블 이름 userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Lottery:ResetBoxByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"prizeTableName\" : \"[string]배출 확률 테이블 이름\" , \"userId\" : \"[string]사용자ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Lottery:ResetBoxByUserId request : namespaceName : \"[string]네임스페이스 이름\" prizeTableName : \"[string]배출 확률 테이블 이름\" userId : \"[string]사용자ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"lottery\" ). acquire.reset_box_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , prizeTableName = \"[string]배출 확률 테이블 이름\" , userId = \"[string]사용자ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Lottery 트랜잭션 액션","url":"/ko/api_reference/lottery/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Matchmaking:VerifyIncludeParticipantByUserId 사용자 ID를 지정하여 영속 개더링에 사용자 ID가 포함되어 있는지 검증 지정된 사용자가 시즌 개더링에 참가하고 있는지 여부를 검증합니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. seasonName string  ~ 128자 시즌 모델 이름 시즌 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. season long  0 ~ 9223372036854775805 시즌 tier long  0 ~ 9223372036854775805 티어 비슷한 랭크의 플레이어를 그룹화하기 위한 티어 레벨입니다. SeasonModel에서 지정된 GS2-Experience 모델에서의 플레이어 랭크에 따라 결정됩니다. 플레이어는 동일한 티어의 플레이어와만 매칭되어 공평한 대전이 보장됩니다. seasonGatheringName string  UUID ~ 128자 시즌 게더링명 시즌 게더링 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. verifyType 문자열 열거형 enum {   “include”,   “notInclude” }  검증 종류 정의 설명 include 시즌 개더링에 지정한 사용자가 포함되어 있음 notInclude 시즌 개더링에 지정한 사용자가 포함되지 않음 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Matchmaking:VerifyIncludeParticipantByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"seasonName\" : \"[string]시즌 모델 이름\" , \"season\" : \"[long]시즌\" , \"tier\" : \"[long]티어\" , \"seasonGatheringName\" : \"[string]시즌 게더링명\" , \"userId\" : \"[string]사용자ID\" , \"verifyType\" : \"[string]검증 종류\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Matchmaking:VerifyIncludeParticipantByUserId request : namespaceName : \"[string]네임스페이스 이름\" seasonName : \"[string]시즌 모델 이름\" season : \"[long]시즌\" tier : \"[long]티어\" seasonGatheringName : \"[string]시즌 게더링명\" userId : \"[string]사용자ID\" verifyType : \"[string]검증 종류\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"matchmaking\" ). verify.verify_include_participant_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , seasonName = \"[string]시즌 모델 이름\" , season = \"[long]시즌\" , tier = \"[long]티어\" , seasonGatheringName = \"[string]시즌 게더링명\" , userId = \"[string]사용자ID\" , verifyType = \"[string]검증 종류\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Matchmaking 트랜잭션 액션","url":"/ko/api_reference/matchmaking/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Mission:VerifyCompleteByUserId 사용자 ID를 지정하여 미션 달성 상황 검증 지정된 사용자의 미션 태스크의 달성 상황 또는 수령 상황을 검증합니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. verifyType 문자열 열거형 enum {   “completed”,   “notCompleted”,   “received”,   “notReceived”,   “completedAndNotReceived” }  검증 종류 정의 설명 completed 조건이 달성 완료 상태임 notCompleted 조건이 미달성 상태임 received 보상이 수령 완료 상태임 notReceived 보상이 미수령 상태임 completedAndNotReceived 조건이 달성 완료 상태이고 보상이 미수령 상태임 missionTaskName string  ~ 128자 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:VerifyCompleteByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"missionGroupName\" : \"[string]미션 그룹명\" , \"userId\" : \"[string]사용자ID\" , \"verifyType\" : \"[string]검증 종류\" , \"missionTaskName\" : \"[string]미션 태스크 모델 이름\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:VerifyCompleteByUserId request : namespaceName : \"[string]네임스페이스 이름\" missionGroupName : \"[string]미션 그룹명\" userId : \"[string]사용자ID\" verifyType : \"[string]검증 종류\" missionTaskName : \"[string]미션 태스크 모델 이름\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). verify.verify_complete_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , missionGroupName = \"[string]미션 그룹명\" , userId = \"[string]사용자ID\" , verifyType = \"[string]검증 종류\" , missionTaskName = \"[string]미션 태스크 모델 이름\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Mission:VerifyCounterValueByUserId 사용자 ID를 지정하여 카운터 값 검증 지정된 사용자의 카운터의 스코프별 값이 지정된 조건을 충족하는지 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 카운터 값이 지정 값 미만임 lessEqual 카운터 값이 지정 값 이하임 greater 카운터 값이 지정 값 초과임 greaterEqual 카운터 값이 지정 값 이상임 equal 카운터 값이 지정 값과 일치함 notEqual 카운터 값이 지정 값과 일치하지 않음 scopeType 문자열 열거형 enum {   “resetTiming”,   “verifyAction” } “resetTiming” 스코프 종류 이 스코프 값이 리셋 타이밍 스케줄에 기반한 것인지, 검증 액션 조건에 기반한 것인지를 나타냅니다. 정의 설명 resetTiming 리셋 타이밍 verifyAction 검증 액션 resetType 문자열 열거형 enum {   “notReset”,   “daily”,   “weekly”,   “monthly”,   “days” } {scopeType} == “resetTiming” ※ 리셋 타이밍 이 스코프 값의 리셋 타이밍입니다. 카운터 값이 리셋될 때까지의 누적 기간을 결정합니다. scopeType이 “resetTiming\"인 경우에만 적용됩니다. 정의 설명 notReset 리셋 안 함 daily 매일 weekly 매주 monthly 매월 days 일정 일수마다 ※ scopeType이(가) “resetTiming” 이면 필수 conditionName string {scopeType} == “verifyAction” ※ ~ 128자 조건 이름 이 스코프 값이 대응하는 검증 액션 조건의 이름입니다. 이 값이 어느 조건 스코프에 속하는지 식별하는 데 사용됩니다. scopeType이 “verifyAction\"인 경우에만 적용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 value long 0 0 ~ 9223372036854775805 카운트 이 스코프의 누적 카운터 값입니다. 카운터가 증가하면 늘어나고 감소하면 줄어듭니다. 값은 최댓값으로 상한이 설정되며, 0 미만으로 내려가지 않습니다. multiplyValueSpecifyingQuantity bool false 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:VerifyCounterValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"counterName\" : \"[string]카운터 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"scopeType\" : \"[string]스코프 종류\" , \"resetType\" : \"[string]리셋 타이밍\" , \"conditionName\" : \"[string]조건 이름\" , \"value\" : \"[long]카운트\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:VerifyCounterValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" counterName : \"[string]카운터 모델 이름\" verifyType : \"[string]검증 종류\" scopeType : \"[string]스코프 종류\" resetType : \"[string]리셋 타이밍\" conditionName : \"[string]조건 이름\" value : \"[long]카운트\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). verify.verify_counter_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , counterName = \"[string]카운터 모델 이름\" , verifyType = \"[string]검증 종류\" , scopeType = \"[string]스코프 종류\" , resetType = \"[string]리셋 타이밍\" , conditionName = \"[string]조건 이름\" , value = \"[long]카운트\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Mission:ReceiveByUserId 미션 달성 보상 수령 지정된 사용자의 지정 미션 태스크를 수령 완료 상태로 표시합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. missionTaskName string  ~ 128자 태스크 이름 userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:ReceiveByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"missionGroupName\" : \"[string]미션 그룹명\" , \"missionTaskName\" : \"[string]태스크 이름\" , \"userId\" : \"[string]사용자ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:ReceiveByUserId request : namespaceName : \"[string]네임스페이스 이름\" missionGroupName : \"[string]미션 그룹명\" missionTaskName : \"[string]태스크 이름\" userId : \"[string]사용자ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). consume.receive_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , missionGroupName = \"[string]미션 그룹명\" , missionTaskName = \"[string]태스크 이름\" , userId = \"[string]사용자ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Mission:BatchReceiveByUserId 여러 미션 태스크의 달성 보상을 일괄로 수령 상태로 변경 동일한 미션 그룹 내 여러 미션 태스크를 일괄로 수령 완료 상태로 표시합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. missionTaskNames List  1 ~ 100 items 태스크 이름 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:BatchReceiveByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"missionGroupName\" : \"[string]미션 그룹명\" , \"userId\" : \"[string]사용자ID\" , \"missionTaskNames\" : [ \"[string]태스크 이름\" ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:BatchReceiveByUserId request : namespaceName : \"[string]네임스페이스 이름\" missionGroupName : \"[string]미션 그룹명\" userId : \"[string]사용자ID\" missionTaskNames : - \"[string]태스크 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). consume.batch_receive_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , missionGroupName = \"[string]미션 그룹명\" , userId = \"[string]사용자ID\" , missionTaskNames = { \"[string]태스크 이름\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Mission:DecreaseCounterByUserId 사용자 ID를 지정하여 카운터 감산 지정된 사용자의 카운터에서 지정한 값을 감산합니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. value long  1 ~ 9223372036854775805 감산할 값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:DecreaseCounterByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"counterName\" : \"[string]카운터 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"value\" : \"[long]감산할 값\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:DecreaseCounterByUserId request : namespaceName : \"[string]네임스페이스 이름\" counterName : \"[string]카운터 모델 이름\" userId : \"[string]사용자ID\" value : \"[long]감산할 값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). consume.decrease_counter_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , counterName = \"[string]카운터 모델 이름\" , userId = \"[string]사용자ID\" , value = \"[long]감산할 값\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Mission:ResetCounterByUserId 사용자 ID를 지정하여 카운터 리셋 지정된 사용자의 지정된 스코프의 카운터 값을 리셋합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. scopes List  1 ~ 20 items 스코프 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:ResetCounterByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"counterName\" : \"[string]카운터 모델 이름\" , \"scopes\" : [ { \"scopeType\" : \"[string]스코프 종류\" , \"resetType\" : \"[string]리셋 타이밍\" , \"conditionName\" : \"[string]조건 이름\" , \"value\" : \"[long]카운트\" , \"nextResetAt\" : \"[long]다음 리셋 타이밍\" , \"updatedAt\" : \"[long]최종 갱신일시\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:ResetCounterByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" counterName : \"[string]카운터 모델 이름\" scopes : - scopeType : \"[string]스코프 종류\" resetType : \"[string]리셋 타이밍\" conditionName : \"[string]조건 이름\" value : \"[long]카운트\" nextResetAt : \"[long]다음 리셋 타이밍\" updatedAt : \"[long]최종 갱신일시\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). consume.reset_counter_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , counterName = \"[string]카운터 모델 이름\" , scopes = { { scopeType = \"[string]스코프 종류\" , resetType = \"[string]리셋 타이밍\" , conditionName = \"[string]조건 이름\" , value = \"[long]카운트\" , nextResetAt = \"[long]다음 리셋 타이밍\" , updatedAt = \"[long]최종 갱신일시\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Mission:RevertReceiveByUserId 미션 달성 보상을 미수령 상태로 되돌리기 미션 태스크의 수령 상태를 미수령으로 되돌립니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. missionGroupName string  ~ 128자 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. missionTaskName string  ~ 128자 태스크 이름 userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:RevertReceiveByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"missionGroupName\" : \"[string]미션 그룹명\" , \"missionTaskName\" : \"[string]태스크 이름\" , \"userId\" : \"[string]사용자ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:RevertReceiveByUserId request : namespaceName : \"[string]네임스페이스 이름\" missionGroupName : \"[string]미션 그룹명\" missionTaskName : \"[string]태스크 이름\" userId : \"[string]사용자ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). acquire.revert_receive_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , missionGroupName = \"[string]미션 그룹명\" , missionTaskName = \"[string]태스크 이름\" , userId = \"[string]사용자ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Mission:IncreaseCounterByUserId 사용자 ID를 지정하여 카운터를 가산 지정된 사용자의 카운터에 지정한 값을 가산합니다. 가산 후, 이 카운터를 참조하는 모든 미션 태스크가 자동으로 재평가되며, 새롭게 달성된 미션은 changedCompletes 응답에서 반환됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. value long  1 ~ 9223372036854775805 가산할 값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:IncreaseCounterByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"counterName\" : \"[string]카운터 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"value\" : \"[long]가산할 값\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:IncreaseCounterByUserId request : namespaceName : \"[string]네임스페이스 이름\" counterName : \"[string]카운터 모델 이름\" userId : \"[string]사용자ID\" value : \"[long]가산할 값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). acquire.increase_counter_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , counterName = \"[string]카운터 모델 이름\" , userId = \"[string]사용자ID\" , value = \"[long]가산할 값\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Mission:SetCounterByUserId 사용자 ID를 지정하여 카운터를 설정 지정된 사용자의 카운터의 스코프 값을 직접 설정하여 기존 값을 대체합니다. 변경 전과 변경 후의 카운터 상태, 그리고 새롭게 달성된 미션이 changedCompletes 응답에서 반환됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. counterName string  ~ 128자 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. values List 0 ~ 20 items 설정할 값의 리스트 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Mission:SetCounterByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"counterName\" : \"[string]카운터 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"values\" : [ { \"scopeType\" : \"[string]스코프 종류\" , \"resetType\" : \"[string]리셋 타이밍\" , \"conditionName\" : \"[string]조건 이름\" , \"value\" : \"[long]카운트\" , \"nextResetAt\" : \"[long]다음 리셋 타이밍\" , \"updatedAt\" : \"[long]최종 갱신일시\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Mission:SetCounterByUserId request : namespaceName : \"[string]네임스페이스 이름\" counterName : \"[string]카운터 모델 이름\" userId : \"[string]사용자ID\" values : - scopeType : \"[string]스코프 종류\" resetType : \"[string]리셋 타이밍\" conditionName : \"[string]조건 이름\" value : \"[long]카운트\" nextResetAt : \"[long]다음 리셋 타이밍\" updatedAt : \"[long]최종 갱신일시\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"mission\" ). acquire.set_counter_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , counterName = \"[string]카운터 모델 이름\" , userId = \"[string]사용자ID\" , values = { { scopeType = \"[string]스코프 종류\" , resetType = \"[string]리셋 타이밍\" , conditionName = \"[string]조건 이름\" , value = \"[long]카운트\" , nextResetAt = \"[long]다음 리셋 타이밍\" , updatedAt = \"[long]최종 갱신일시\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Mission 트랜잭션 액션","url":"/ko/api_reference/mission/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Money:WithdrawByUserId 사용자 ID를 지정하여 지갑에서 잔액 소비 지정한 사용자의 지갑에서 지정한 양의 통화를 소비합니다. paidOnly가 false인 경우, 무료 통화가 먼저 소비되고 그다음 유료 통화가 소비됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. count int  1 ~ 2147483646 소비할 유료 통화 수량 paidOnly bool false 유료 통화만을 대상으로 할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Money:WithdrawByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"slot\" : \"[int]슬롯 번호\" , \"count\" : \"[int]소비할 유료 통화 수량\" , \"paidOnly\" : \"[bool]유료 통화만을 대상으로 할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Money:WithdrawByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" slot : \"[int]슬롯 번호\" count : \"[int]소비할 유료 통화 수량\" paidOnly : \"[bool]유료 통화만을 대상으로 할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"money\" ). consume.withdraw_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , slot = \"[int]슬롯 번호\" , count = \"[int]소비할 유료 통화 수량\" , paidOnly = \"[bool]유료 통화만을 대상으로 할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Money:RecordReceipt 영수증 기록 스토어 플랫폼(Apple App Store / Google Play)으로부터의 구매 영수증을 기록·검증합니다. 부정 방지를 위해 플랫폼 서버에 대해 영수증이 검증됩니다. 재전송 공격 방지를 위해 중복된 영수증은 거부됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. contentsId string  ~ 1024자 스토어 플랫폼에서 판매되는 콘텐츠 ID receipt string  ~ 524288자 영수증 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Money:RecordReceipt\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"contentsId\" : \"[string]스토어 플랫폼에서 판매되는 콘텐츠 ID\" , \"receipt\" : \"[string]영수증\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Money:RecordReceipt request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" contentsId : \"[string]스토어 플랫폼에서 판매되는 콘텐츠 ID\" receipt : \"[string]영수증\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"money\" ). consume.record_receipt ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , contentsId = \"[string]스토어 플랫폼에서 판매되는 콘텐츠 ID\" , receipt = \"[string]영수증\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Money:DepositByUserId 사용자 ID를 지정하여 지갑 잔액에 가산 지정한 사용자의 지갑에 지정한 양의 통화를 추가합니다. 가격이 0인 경우는 무료 통화로, 그 외의 경우는 유료 통화로 취급됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. slot int  0 ~ 100000000 슬롯 번호 플랫폼이나 컨텍스트별로 지갑 잔액을 분리하기 위한 식별자입니다. 슬롯을 달리하면 서로 다른 유료 통화 풀을 관리할 수 있습니다(예: iOS 구매는 슬롯 0, Android는 슬롯 1). 무료 통화는 네임스페이스의 shareFree 설정에 따라 모든 슬롯 간에 공유할 수도 있습니다. price float  0 ~ 100000.0 구매 가격 count int  1 ~ 2147483646 지급할 유료 통화 수량 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Money:DepositByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"slot\" : \"[int]슬롯 번호\" , \"price\" : \"[float]구매 가격\" , \"count\" : \"[int]지급할 유료 통화 수량\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Money:DepositByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" slot : \"[int]슬롯 번호\" price : \"[float]구매 가격\" count : \"[int]지급할 유료 통화 수량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"money\" ). acquire.deposit_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , slot = \"[int]슬롯 번호\" , price = \"[float]구매 가격\" , count = \"[int]지급할 유료 통화 수량\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Money:RevertRecordReceipt 사용자 ID를 지정하여 영수증 기록 삭제 트랜잭션 ID를 추출하여 해당하는 레코드를 삭제함으로써, 이전에 기록된 영수증을 취소합니다. 스토어 플랫폼으로부터의 환불이나 차지백 처리에 사용합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. receipt string  ~ 524288자 영수증 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Money:RevertRecordReceipt\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"receipt\" : \"[string]영수증\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Money:RevertRecordReceipt request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" receipt : \"[string]영수증\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"money\" ). acquire.revert_record_receipt ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , receipt = \"[string]영수증\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Money 트랜잭션 액션","url":"/ko/api_reference/money/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Money2:WithdrawByUserId 사용자 ID를 지정하여 지갑에서 잔액 소비 지정된 사용자의 지갑에서 지정된 양의 통화를 소비합니다. paidOnly가 false인 경우 무상 통화가 먼저 소비되고, 그다음 유상 통화가 소비됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). withdrawCount int  1 ~ 2147483646 소비할 유료 통화 수량 paidOnly bool false 유료 통화만을 대상으로 할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Money2:WithdrawByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"slot\" : \"[int]슬롯 번호\" , \"withdrawCount\" : \"[int]소비할 유료 통화 수량\" , \"paidOnly\" : \"[bool]유료 통화만을 대상으로 할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Money2:WithdrawByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" slot : \"[int]슬롯 번호\" withdrawCount : \"[int]소비할 유료 통화 수량\" paidOnly : \"[bool]유료 통화만을 대상으로 할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"money2\" ). consume.withdraw_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , slot = \"[int]슬롯 번호\" , withdrawCount = \"[int]소비할 유료 통화 수량\" , paidOnly = \"[bool]유료 통화만을 대상으로 할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Money2:VerifyReceiptByUserId 사용자 ID를 지정하여 영수증을 사용 완료 처리 지정된 사용자의 구매 영수증을 검증하고, 사용 완료로 기록합니다. 이벤트 로그가 기록되며, 네임스페이스에 설정된 영수증 검증 스크립트가 실행됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. contentName string  ~ 128자 스토어 콘텐츠 모델 이름 receipt Receipt  영수증 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Money2:VerifyReceiptByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"contentName\" : \"[string]스토어 콘텐츠 모델 이름\" , \"receipt\" : { \"Store\" : \"[string]스토어\" , \"TransactionID\" : \"[string]트랜잭션 ID\" , \"Payload\" : \"[string]페이로드\" }, \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Money2:VerifyReceiptByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" contentName : \"[string]스토어 콘텐츠 모델 이름\" receipt : Store : \"[string]스토어\" TransactionID : \"[string]트랜잭션 ID\" Payload : \"[string]페이로드\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"money2\" ). consume.verify_receipt_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , contentName = \"[string]스토어 콘텐츠 모델 이름\" , receipt = { store = \"[string]스토어\" , transactionID = \"[string]트랜잭션 ID\" , payload = \"[string]페이로드\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Money2:DepositByUserId 사용자 ID를 지정하여 지갑 잔액에 가산 지정된 사용자의 지갑에 지정된 입금 트랜잭션을 추가합니다. 각 입금 트랜잭션에 대해 이벤트 로그가 기록됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. slot int  0 ~ 100000000 슬롯 번호 지갑 슬롯을 식별합니다. 플랫폼 간 잔액 공유가 허용되지 않는 경우, 서로 다른 슬롯을 사용하여 플랫폼별로 통화를 나누어 관리할 수 있습니다(예: iOS용과 Android용). depositTransactions List  1 ~ 1000 items 입금 트랜잭션 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Money2:DepositByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"slot\" : \"[int]슬롯 번호\" , \"depositTransactions\" : [ { \"price\" : \"[double]구매 가격\" , \"currency\" : \"[string]통화 코드\" , \"count\" : \"[int]과금 통화 수량\" , \"depositedAt\" : \"[long]입금 일시\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Money2:DepositByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" slot : \"[int]슬롯 번호\" depositTransactions : - price : \"[double]구매 가격\" currency : \"[string]통화 코드\" count : \"[int]과금 통화 수량\" depositedAt : \"[long]입금 일시\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"money2\" ). acquire.deposit_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , slot = \"[int]슬롯 번호\" , depositTransactions = { { price = \"[double]구매 가격\" , currency = \"[string]통화 코드\" , count = \"[int]과금 통화 수량\" , depositedAt = \"[long]입금 일시\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Money2 트랜잭션 액션","url":"/ko/api_reference/money2/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Quest:DeleteProgressByUserId 사용자 ID를 지정하여 퀘스트 진행 상황 삭제 지정한 사용자의 현재 퀘스트 진행 상황을 삭제합니다. 진행 중인 퀘스트를 취소하고 새로운 퀘스트를 시작할 수 있게 합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Quest:DeleteProgressByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Quest:DeleteProgressByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"quest\" ). consume.delete_progress_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Quest:CreateProgressByUserId 사용자 ID를 지정하여 퀘스트 진행 상황 생성 퀘스트 모델을 참조하여 퀘스트 콘텐츠 추첨을 수행하고 퀘스트를 시작합니다. 이미 진행 중인 퀘스트가 있는 경우, force 플래그가 설정되어 있지 않으면 오류를 반환합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. questModelId string  ~ 1024자 시작할 퀘스트 모델 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN force bool false 이미 시작한 퀘스트가 있는 경우 이를 파기하고 시작할지 여부 config List [] 0 ~ 32 items 트랜잭션 변수에 적용할 설정값 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Quest:CreateProgressByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"questModelId\" : \"[string]시작할 퀘스트 모델 GRN\" , \"force\" : \"[bool]이미 시작한 퀘스트가 있는 경우 이를 파기하고 시작할지 여부\" , \"config\" : [ { \"key\" : \"[string]이름\" , \"value\" : \"[string]값\" } ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Quest:CreateProgressByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" questModelId : \"[string]시작할 퀘스트 모델 GRN\" force : \"[bool]이미 시작한 퀘스트가 있는 경우 이를 파기하고 시작할지 여부\" config : - key : \"[string]이름\" value : \"[string]값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"quest\" ). acquire.create_progress_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , questModelId = \"[string]시작할 퀘스트 모델 GRN\" , force = \"[bool]이미 시작한 퀘스트가 있는 경우 이를 파기하고 시작할지 여부\" , config = { { key = \"[string]이름\" , value = \"[string]값\" } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Quest 트랜잭션 액션","url":"/ko/api_reference/quest/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Ranking2:VerifyGlobalRankingScoreByUserId 사용자 ID를 지정하여 글로벌 랭킹의 스코어 검증 지정한 사용자의 글로벌 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Ranking2:VerifyGlobalRankingScoreByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"rankingName\" : \"[string]글로벌 랭킹 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"season\" : \"[long]시즌\" , \"score\" : \"[long]스코어\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Ranking2:VerifyGlobalRankingScoreByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" rankingName : \"[string]글로벌 랭킹 모델 이름\" verifyType : \"[string]검증 종류\" season : \"[long]시즌\" score : \"[long]스코어\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"ranking2\" ). verify.verify_global_ranking_score_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , rankingName = \"[string]글로벌 랭킹 모델 이름\" , verifyType = \"[string]검증 종류\" , season = \"[long]시즌\" , score = \"[long]스코어\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Ranking2:VerifyClusterRankingScoreByUserId 사용자 ID를 지정하여 클러스터 랭킹의 스코어 검증 지정한 사용자의 클러스터 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 이 클러스터 내에서 사용자가 등록한 스코어 값입니다. multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Ranking2:VerifyClusterRankingScoreByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"rankingName\" : \"[string]클러스터 랭킹 모델 이름\" , \"clusterName\" : \"[string]클러스터 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"season\" : \"[long]시즌\" , \"score\" : \"[long]스코어\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Ranking2:VerifyClusterRankingScoreByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" rankingName : \"[string]클러스터 랭킹 모델 이름\" clusterName : \"[string]클러스터 이름\" verifyType : \"[string]검증 종류\" season : \"[long]시즌\" score : \"[long]스코어\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"ranking2\" ). verify.verify_cluster_ranking_score_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , rankingName = \"[string]클러스터 랭킹 모델 이름\" , clusterName = \"[string]클러스터 이름\" , verifyType = \"[string]검증 종류\" , season = \"[long]시즌\" , score = \"[long]스코어\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Ranking2:VerifySubscribeRankingScoreByUserId 사용자 ID를 지정하여 구독 랭킹의 스코어를 검증 지정한 사용자의 구독 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. rankingName string  ~ 128자 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 스코어가 지정값 미만일 것 lessEqual 스코어가 지정값 이하일 것 greater 스코어가 지정값 초과일 것 greaterEqual 스코어가 지정값 이상일 것 equal 스코어가 지정값과 일치할 것 notEqual 스코어가 지정값과 일치하지 않을 것 season long 0 ~ 9223372036854775805 시즌 score long  0 ~ 9223372036854775805 스코어 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Ranking2:VerifySubscribeRankingScoreByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"rankingName\" : \"[string]구독 랭킹 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"season\" : \"[long]시즌\" , \"score\" : \"[long]스코어\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Ranking2:VerifySubscribeRankingScoreByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" rankingName : \"[string]구독 랭킹 모델 이름\" verifyType : \"[string]검증 종류\" season : \"[long]시즌\" score : \"[long]스코어\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"ranking2\" ). verify.verify_subscribe_ranking_score_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , rankingName = \"[string]구독 랭킹 모델 이름\" , verifyType = \"[string]검증 종류\" , season = \"[long]시즌\" , score = \"[long]스코어\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId 사용자 ID를 지정하여 글로벌 랭킹 보상 수령 이력 기록 지정한 사용자를 대신하여, 지정한 글로벌 랭킹의 보상 수령 이력을 기록합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"rankingName\" : \"[string]글로벌 랭킹 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"season\" : \"[long]시즌\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId request : namespaceName : \"[string]네임스페이스 이름\" rankingName : \"[string]글로벌 랭킹 모델 이름\" userId : \"[string]사용자ID\" season : \"[long]시즌\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"ranking2\" ). consume.create_global_ranking_received_reward_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , rankingName = \"[string]글로벌 랭킹 모델 이름\" , userId = \"[string]사용자ID\" , season = \"[long]시즌\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId 사용자 ID를 지정하여 클러스터 랭킹 보상 수령 이력 기록 지정한 사용자를 대신하여, 지정한 클러스터 랭킹 및 클러스터의 보상 수령 이력을 기록합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. rankingName string  ~ 128자 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. clusterName string  ~ 1024자 클러스터 이름 랭킹 보상을 수령한 클러스터의 이름입니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. season long 0 ~ 9223372036854775805 시즌 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"rankingName\" : \"[string]클러스터 랭킹 모델 이름\" , \"clusterName\" : \"[string]클러스터 이름\" , \"userId\" : \"[string]사용자ID\" , \"season\" : \"[long]시즌\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId request : namespaceName : \"[string]네임스페이스 이름\" rankingName : \"[string]클러스터 랭킹 모델 이름\" clusterName : \"[string]클러스터 이름\" userId : \"[string]사용자ID\" season : \"[long]시즌\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"ranking2\" ). consume.create_cluster_ranking_received_reward_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , rankingName = \"[string]클러스터 랭킹 모델 이름\" , clusterName = \"[string]클러스터 이름\" , userId = \"[string]사용자ID\" , season = \"[long]시즌\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Ranking2 트랜잭션 액션","url":"/ko/api_reference/ranking2/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Schedule:VerifyTriggerByUserId 사용자 ID를 지정하여 트리거가 당겨진 후 경과 시간 검증 지정한 사용자의 트리거 상태에 관한 조건을 검증합니다. verifyType은 ’notTriggerd’, ’elapsed’, ’notElapsed’를 설정할 수 있습니다. 검증 조건이 충족되지 않으면 오류를 반환합니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “notTriggerd”,   “elapsed”,   “notElapsed” }  검증 종류 정의 설명 notTriggerd 트리거가 당겨지지 않음 elapsed 지정한 시간이 경과함 notElapsed 지정한 시간이 경과하지 않음 elapsedMinutes int {verifyType} in [“elapsed”, “notElapsed”] ※ 0 ~ 2147483646 경과 시간(분) ※ verifyType이(가) “elapsed”,“notElapsed\"이면 필수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Schedule:VerifyTriggerByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"triggerName\" : \"[string]트리거 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"elapsedMinutes\" : \"[int]경과 시간(분)\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Schedule:VerifyTriggerByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" triggerName : \"[string]트리거 이름\" verifyType : \"[string]검증 종류\" elapsedMinutes : \"[int]경과 시간(분)\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"schedule\" ). verify.verify_trigger_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , triggerName = \"[string]트리거 이름\" , verifyType = \"[string]검증 종류\" , elapsedMinutes = \"[int]경과 시간(분)\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Schedule:VerifyEventByUserId 사용자 ID를 지정하여 이벤트 개최 기간인지 검증 지정한 사용자에 대해 지정된 이벤트가 현재 활성 스케줄 기간 내에 있는지 검증합니다. verifyType 은 ‘inSchedule’ 또는 ’notInSchedule’ 을 설정할 수 있습니다. 검증 조건이 충족되지 않으면 오류가 반환됩니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. eventName string  ~ 128자 이벤트 이름 이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다. verifyType 문자열 열거형 enum {   “inSchedule”,   “notInSchedule” }  검증 종류 정의 설명 inSchedule 이벤트의 개최 기간임 notInSchedule 이벤트의 개최 기간이 아님 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Schedule:VerifyEventByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"eventName\" : \"[string]이벤트 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Schedule:VerifyEventByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" eventName : \"[string]이벤트 이름\" verifyType : \"[string]검증 종류\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"schedule\" ). verify.verify_event_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , eventName = \"[string]이벤트 이름\" , verifyType = \"[string]검증 종류\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Schedule:DeleteTriggerByUserId 사용자 ID를 지정하여 트리거 삭제 지정한 사용자의 지정된 트리거를 삭제합니다. 트리거를 삭제하면 관련된 상대 스케줄 이벤트가 비활성화됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Schedule:DeleteTriggerByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"triggerName\" : \"[string]트리거 이름\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Schedule:DeleteTriggerByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" triggerName : \"[string]트리거 이름\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"schedule\" ). consume.delete_trigger_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , triggerName = \"[string]트리거 이름\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Schedule:TriggerByUserId 사용자 ID를 지정하여 트리거 실행 지정한 사용자의 트리거를 당깁니다. 트리거 전략에 따라 동작이 결정됩니다: ‘renew’는 새로운 TTL로 리셋, ’extend’는 기존 TTL을 연장, ‘drop’은 이미 당겨진 경우 무시, ‘repeatCycleEnd’/‘repeatCycleNextStart’/‘absoluteEnd’는 지정한 이벤트의 스케줄에 유효기간을 맞춥니다. 트리거를 당기면 관련된 상대 스케줄 이벤트가 활성화됩니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. triggerStrategy 문자열 열거형 enum {   “renew”,   “extend”,   “drop”,   “repeatCycleEnd”,   “repeatCycleNextStart”,   “absoluteEnd” }  트리거 실행 정책 정의 설명 renew 이미 트리거가 당겨진 경우 새로운 기간으로 다시 당기기 extend 이미 트리거가 당겨진 경우 기간 연장 drop 이미 트리거가 당겨진 경우 무시 repeatCycleEnd 지정한 이벤트의 반복 기간 종료 일시에 유효 기간이 만료되도록 트리거 당기기 repeatCycleNextStart 지정한 이벤트의 반복에서 다음 반복 시작 일시에 유효 기간이 만료되도록 트리거 당기기 absoluteEnd 지정한 이벤트의 종료 일시에 유효 기간이 만료되도록 트리거 당기기 ttl int {triggerStrategy} in [“renew”, “extend”, “drop”] ※ 0 ~ 2147483646 트리거 유효기간(초) ※ triggerStrategy이(가) “renew”,“extend”,“drop\"이면 필수 eventId string {triggerStrategy} in [“repeatCycleEnd”, “repeatCycleNextStart”, “absoluteEnd”] ※ ~ 1024자 이벤트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN ※ triggerStrategy이(가) “repeatCycleEnd”,“repeatCycleNextStart”,“absoluteEnd\"이면 필수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Schedule:TriggerByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"triggerName\" : \"[string]트리거 이름\" , \"userId\" : \"[string]사용자ID\" , \"triggerStrategy\" : \"[string]트리거 실행 정책\" , \"ttl\" : \"[int]트리거 유효기간(초)\" , \"eventId\" : \"[string]이벤트 GRN\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Schedule:TriggerByUserId request : namespaceName : \"[string]네임스페이스 이름\" triggerName : \"[string]트리거 이름\" userId : \"[string]사용자ID\" triggerStrategy : \"[string]트리거 실행 정책\" ttl : \"[int]트리거 유효기간(초)\" eventId : \"[string]이벤트 GRN\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"schedule\" ). acquire.trigger_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , triggerName = \"[string]트리거 이름\" , userId = \"[string]사용자ID\" , triggerStrategy = \"[string]트리거 실행 정책\" , ttl = \"[int]트리거 유효기간(초)\" , eventId = \"[string]이벤트 GRN\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Schedule:ExtendTriggerByUserId 사용자 ID를 지정하여 트리거 기간 연장 지정한 사용자의 기존 트리거 유효기간을 지정한 초만큼 연장합니다. 트리거가 존재하지 않는 경우, 지정한 연장 기간을 TTL로 하는 새로운 트리거가 생성됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. triggerName string  ~ 128자 트리거 이름 트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. extendSeconds int  0 ~ 2147483646 트리거를 연장하는 기간(초) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Schedule:ExtendTriggerByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"triggerName\" : \"[string]트리거 이름\" , \"userId\" : \"[string]사용자ID\" , \"extendSeconds\" : \"[int]트리거를 연장하는 기간(초)\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Schedule:ExtendTriggerByUserId request : namespaceName : \"[string]네임스페이스 이름\" triggerName : \"[string]트리거 이름\" userId : \"[string]사용자ID\" extendSeconds : \"[int]트리거를 연장하는 기간(초)\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"schedule\" ). acquire.extend_trigger_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , triggerName = \"[string]트리거 이름\" , userId = \"[string]사용자ID\" , extendSeconds = \"[int]트리거를 연장하는 기간(초)\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Schedule 트랜잭션 액션","url":"/ko/api_reference/schedule/stamp_sheet/"},{"content":"Acquire Action 입수 액션 Gs2Script:InvokeScript 스크립트 실행 지정된 Lua 스크립트를 제공된 JSON 인수로 동기적으로 실행합니다. 스테이터스 코드, 반환값, 트랜잭션 정보, 난수 상태, 실행 시간, 표준 출력을 포함한 실행 결과를 반환합니다. GS2 서비스 간 원자적 처리를 위한 트랜잭션 처리를 지원합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 scriptId string  ~ 1024자 스크립트 GS2가 다루는 모든 정보에 부여되는 고유한 리소스 이름\" \u003e GRN userId string ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. args string “{}” ~ 5242880자 스크립트에 전달되는 인수 (JSON 형식) randomStatus RandomStatus 난수 상태 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Script:InvokeScript\" , \"request\" : { \"scriptId\" : \"[string]스크립트 GRN\" , \"userId\" : \"[string]사용자ID\" , \"args\" : \"[string]스크립트에 전달되는 인수 (JSON 형식)\" , \"randomStatus\" : { \"seed\" : \"[long]난수 시드\" , \"used\" : [ { \"category\" : \"[long]카테고리\" , \"used\" : \"[long]사용 횟수\" } ] }, \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Script:InvokeScript request : scriptId : \"[string]스크립트 GRN\" userId : \"[string]사용자ID\" args : \"[string]스크립트에 전달되는 인수 (JSON 형식)\" randomStatus : seed : \"[long]난수 시드\" used : - category : \"[long]카테고리\" used : \"[long]사용 횟수\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"script\" ). acquire.invoke_script ({ scriptId = \"[string]스크립트 GRN\" , userId = \"[string]사용자ID\" , args = \"[string]스크립트에 전달되는 인수 (JSON 형식)\" , randomStatus = { seed = \"[long]난수 시드\" , used = { { category = \"[long]카테고리\" , used = \"[long]사용 횟수\" } } }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Script 트랜잭션 액션","url":"/ko/api_reference/script/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2SerialKey:VerifyCodeByUserId 사용자 ID를 지정하여 시리얼 코드의 유효성 확인 지정된 사용자의 시리얼 코드를 소비하지 않고 검증합니다. 특정 캠페인 모델 이름에 대한 검증을 지원하며, 코드가 active(미사용)인지 inactive(사용 완료)인지 확인할 수 있습니다. 수량 지정 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. campaignModelName string ~ 128자 캠페인 이름 이 시리얼 코드가 속한 캠페인 모델의 이름입니다. 캠페인 정보는 시리얼 코드 자체에 포함되어 있으므로 코드를 사용할 때는 네임스페이스만 지정하면 됩니다. verifyType 문자열 열거형 enum {   “active”,   “inactive” }  검증 타입 정의 설명 active 유효 inactive 비활성 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2SerialKey:VerifyCodeByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"code\" : \"[string]시리얼 코드\" , \"campaignModelName\" : \"[string]캠페인 이름\" , \"verifyType\" : \"[string]검증 타입\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2SerialKey:VerifyCodeByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" code : \"[string]시리얼 코드\" campaignModelName : \"[string]캠페인 이름\" verifyType : \"[string]검증 타입\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"serialKey\" ). verify.verify_code_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , code = \"[string]시리얼 코드\" , campaignModelName = \"[string]캠페인 이름\" , verifyType = \"[string]검증 타입\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2SerialKey:UseByUserId 사용자 ID를 지정하여 시리얼 코드 사용 처리 지정된 사용자에 의해 시리얼 코드를 사용 완료로 표시합니다. 코드가 존재하고 아직 사용되지 않았음을 검증합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2SerialKey:UseByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"code\" : \"[string]시리얼 코드\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2SerialKey:UseByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" code : \"[string]시리얼 코드\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"serialKey\" ). consume.use_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , code = \"[string]시리얼 코드\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2SerialKey:RevertUseByUserId 사용자 ID를 지정하여 시리얼 코드 미사용 처리 사용 완료된 시리얼 코드를 미사용 상태로 되돌립니다. 되돌리기 전에 코드가 현재 사용 완료 상태임을 검증합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. code string  ~ 48자 시리얼 코드 “XXXXX-XXXX-XXXXX-XXXX-XXXX” 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2SerialKey:RevertUseByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"code\" : \"[string]시리얼 코드\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2SerialKey:RevertUseByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" code : \"[string]시리얼 코드\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"serialKey\" ). acquire.revert_use_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , code = \"[string]시리얼 코드\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2SerialKey:IssueOnce 시리얼 코드 1건 발행 시리얼 코드를 1건 즉시 발행합니다. 코드는 AES 암호화와 base32 인코딩을 사용하여 XXXXX-XXXX-XXXXX-XXXX-XXXXX 형식으로 생성됩니다. 배치 발행 작업과 달리 동기적으로 코드를 생성하여 반환합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. campaignModelName string  ~ 128자 캠페인 모델 이름 metadata string ~ 2048자 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. Format: JSON YAML GS2-Script { \"action\" : \"Gs2SerialKey:IssueOnce\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"campaignModelName\" : \"[string]캠페인 모델 이름\" , \"metadata\" : \"[string]메타데이터\" } } action : Gs2SerialKey:IssueOnce request : namespaceName : \"[string]네임스페이스 이름\" campaignModelName : \"[string]캠페인 모델 이름\" metadata : \"[string]메타데이터\" transaction.service ( \"serialKey\" ). acquire.issue_once ({ namespaceName = \"[string]네임스페이스 이름\" , campaignModelName = \"[string]캠페인 모델 이름\" , metadata = \"[string]메타데이터\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-SerialKey 트랜잭션 액션","url":"/ko/api_reference/serial_key/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2Showcase:IncrementPurchaseCountByUserId 사용자 ID를 지정하여 구매 횟수 가산 지정된 사용자의 랜덤 진열대에 있는 특정 상품의 구매 횟수를 가산합니다. 로테이션 기간별 구매 제한을 추적하는 데 사용됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 displayItemName string  ~ 128자 상품 구매 횟수 이름 구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. count int  0 ~ 100 가산할 구매 횟수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Showcase:IncrementPurchaseCountByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"showcaseName\" : \"[string]랜덤 진열대 이름\" , \"displayItemName\" : \"[string]상품 구매 횟수 이름\" , \"userId\" : \"[string]사용자ID\" , \"count\" : \"[int]가산할 구매 횟수\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Showcase:IncrementPurchaseCountByUserId request : namespaceName : \"[string]네임스페이스 이름\" showcaseName : \"[string]랜덤 진열대 이름\" displayItemName : \"[string]상품 구매 횟수 이름\" userId : \"[string]사용자ID\" count : \"[int]가산할 구매 횟수\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"showcase\" ). consume.increment_purchase_count_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , showcaseName = \"[string]랜덤 진열대 이름\" , displayItemName = \"[string]상품 구매 횟수 이름\" , userId = \"[string]사용자ID\" , count = \"[int]가산할 구매 횟수\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Showcase:DecrementPurchaseCountByUserId 사용자 ID를 지정하여 구매 횟수 감산 랜덤 진열대의 특정 상품에 대한 구매 횟수를 감산합니다. 구매 취소나 구매 카운터 조정에 사용됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 displayItemName string  ~ 128자 상품 구매 횟수 이름 구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. count int  0 ~ 100 감산할 구매 횟수 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Showcase:DecrementPurchaseCountByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"showcaseName\" : \"[string]랜덤 진열대 이름\" , \"displayItemName\" : \"[string]상품 구매 횟수 이름\" , \"userId\" : \"[string]사용자ID\" , \"count\" : \"[int]감산할 구매 횟수\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Showcase:DecrementPurchaseCountByUserId request : namespaceName : \"[string]네임스페이스 이름\" showcaseName : \"[string]랜덤 진열대 이름\" displayItemName : \"[string]상품 구매 횟수 이름\" userId : \"[string]사용자ID\" count : \"[int]감산할 구매 횟수\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"showcase\" ). acquire.decrement_purchase_count_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , showcaseName = \"[string]랜덤 진열대 이름\" , displayItemName = \"[string]상품 구매 횟수 이름\" , userId = \"[string]사용자ID\" , count = \"[int]감산할 구매 횟수\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Showcase:ForceReDrawByUserId 사용자 ID를 지정하여 랜덤 진열대 내용을 재추첨 지정된 사용자의 랜덤 진열대 상품을 강제로 재추첨하여 현재 선택을 초기화하고 설정된 풀에서 새로운 랜덤 상품 선택을 트리거합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. showcaseName string  ~ 128자 랜덤 진열대 이름 userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Showcase:ForceReDrawByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"showcaseName\" : \"[string]랜덤 진열대 이름\" , \"userId\" : \"[string]사용자ID\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Showcase:ForceReDrawByUserId request : namespaceName : \"[string]네임스페이스 이름\" showcaseName : \"[string]랜덤 진열대 이름\" userId : \"[string]사용자ID\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"showcase\" ). acquire.force_re_draw_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , showcaseName = \"[string]랜덤 진열대 이름\" , userId = \"[string]사용자ID\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Showcase 트랜잭션 액션","url":"/ko/api_reference/showcase/stamp_sheet/"},{"content":"Consume Action 소비 액션 Gs2SkillTree:MarkRestrainByUserId 사용자 ID를 지정하여 노드의 해방 상태를 미해방화 지정된 노드가 구속 가능한지 검증한 후(의존하는 노드가 해방 상태가 아니어야 합니다), 미해방으로 마크합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2SkillTree:MarkRestrainByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"nodeModelNames\" : [ \"[string]노드 모델명\" ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2SkillTree:MarkRestrainByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" propertyId : \"[string]프로퍼티 ID\" nodeModelNames : - \"[string]노드 모델명\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"skillTree\" ). consume.mark_restrain_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , propertyId = \"[string]프로퍼티 ID\" , nodeModelNames = { \"[string]노드 모델명\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2SkillTree:MarkReleaseByUserId 사용자 ID를 지정하여 해방된 노드 기록 지정된 노드가 해방 가능한지 검증한 후(전제 노드가 이미 해방되어 있어야 합니다), 해방됨으로 마크합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. propertyId string  ~ 1024자 프로퍼티 ID 사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다. 동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다. 최대 1024자. nodeModelNames List  1 ~ 1000 items 노드 모델 이름 목록 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2SkillTree:MarkReleaseByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"propertyId\" : \"[string]프로퍼티 ID\" , \"nodeModelNames\" : [ \"[string]노드 모델명\" ], \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2SkillTree:MarkReleaseByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" propertyId : \"[string]프로퍼티 ID\" nodeModelNames : - \"[string]노드 모델명\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"skillTree\" ). acquire.mark_release_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , propertyId = \"[string]프로퍼티 ID\" , nodeModelNames = { \"[string]노드 모델명\" }, timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-SkillTree 트랜잭션 액션","url":"/ko/api_reference/skill_tree/stamp_sheet/"},{"content":"Verify Action 검증 액션 Gs2Stamina:VerifyStaminaValueByUserId 사용자 ID를 지정하여 스타미나 현재값을 검증 지정된 사용자의 현재 스타미나 값이 지정된 조건을 지정된 임계값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 현재값이 지정값 미만임 lessEqual 현재값이 지정값 이하임 greater 현재값이 지정값을 초과함 greaterEqual 현재값이 지정값 이상임 equal 현재값이 지정값과 일치함 notEqual 현재값이 지정값과 일치하지 않음 value int  0 ~ 2147483646 현재값 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:VerifyStaminaValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"value\" : \"[int]현재값\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:VerifyStaminaValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" staminaName : \"[string]스태미나 모델 이름\" verifyType : \"[string]검증 종류\" value : \"[int]현재값\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). verify.verify_stamina_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , staminaName = \"[string]스태미나 모델 이름\" , verifyType = \"[string]검증 종류\" , value = \"[int]현재값\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:VerifyStaminaMaxValueByUserId 사용자 ID를 지정하여 스태미나 최댓값 검증 지정된 사용자의 스태미나 최대 용량(버프에 의한 변경 포함)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 최댓값이 지정값 미만임 lessEqual 최댓값이 지정값 이하임 greater 최댓값이 지정값을 초과함 greaterEqual 최댓값이 지정값 이상임 equal 최댓값이 지정값과 일치함 notEqual 최댓값이 지정값과 일치하지 않음 value int  0 ~ 2147483646 최대값 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:VerifyStaminaMaxValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"value\" : \"[int]최대값\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:VerifyStaminaMaxValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" staminaName : \"[string]스태미나 모델 이름\" verifyType : \"[string]검증 종류\" value : \"[int]최대값\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). verify.verify_stamina_max_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , staminaName = \"[string]스태미나 모델 이름\" , verifyType = \"[string]검증 종류\" , value = \"[int]최대값\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId 사용자 ID를 지정하여 스태미나 회복 간격(분) 검증 지정된 사용자의 스태미나 회복 간격(분)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 회복 속도가 지정값 미만임 lessEqual 회복 속도가 지정값 이하임 greater 회복 속도가 지정값을 초과함 greaterEqual 회복 속도가 지정값 이상임 equal 회복 속도가 지정값과 일치함 notEqual 회복 속도가 지정값과 일치하지 않음 value int  0 ~ 2147483646 회복 속도 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"value\" : \"[int]회복 속도\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" staminaName : \"[string]스태미나 모델 이름\" verifyType : \"[string]검증 종류\" value : \"[int]회복 속도\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). verify.verify_stamina_recover_interval_minutes_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , staminaName = \"[string]스태미나 모델 이름\" , verifyType = \"[string]검증 종류\" , value = \"[int]회복 속도\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:VerifyStaminaRecoverValueByUserId 사용자 ID를 지정하여 스태미나 회복량 검증 지정된 사용자의 스태미나 회복량(버프에 의한 변경 포함)이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 회복량이 지정값 미만임 lessEqual 회복량이 지정값 이하임 greater 회복량이 지정값을 초과함 greaterEqual 회복량이 지정값 이상임 equal 회복량이 지정값과 일치함 notEqual 회복량이 지정값과 일치하지 않음 value int  0 ~ 2147483646 회복량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:VerifyStaminaRecoverValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"value\" : \"[int]회복량\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:VerifyStaminaRecoverValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" staminaName : \"[string]스태미나 모델 이름\" verifyType : \"[string]검증 종류\" value : \"[int]회복량\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). verify.verify_stamina_recover_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , staminaName = \"[string]스태미나 모델 이름\" , verifyType = \"[string]검증 종류\" , value = \"[int]회복량\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:VerifyStaminaOverflowValueByUserId 사용자 ID를 지정하여 스태미나 오버플로우량 검증 지정된 사용자의 스태미나 오버플로우량이 지정된 조건을 지정된 임곗값에 대해 충족하는지, 상태를 변경하지 않고 검증합니다. 수량 지정 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. verifyType 문자열 열거형 enum {   “less”,   “lessEqual”,   “greater”,   “greaterEqual”,   “equal”,   “notEqual” }  검증 종류 정의 설명 less 오버플로우량이 지정값 미만임 lessEqual 오버플로우량이 지정값 이하임 greater 오버플로우량이 지정값을 초과함 greaterEqual 오버플로우량이 지정값 이상임 equal 오버플로우량이 지정값과 일치함 notEqual 오버플로우량이 지정값과 일치하지 않음 value int  0 ~ 2147483646 오버플로우량 multiplyValueSpecifyingQuantity bool true 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:VerifyStaminaOverflowValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"verifyType\" : \"[string]검증 종류\" , \"value\" : \"[int]오버플로우량\" , \"multiplyValueSpecifyingQuantity\" : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:VerifyStaminaOverflowValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" staminaName : \"[string]스태미나 모델 이름\" verifyType : \"[string]검증 종류\" value : \"[int]오버플로우량\" multiplyValueSpecifyingQuantity : \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). verify.verify_stamina_overflow_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , staminaName = \"[string]스태미나 모델 이름\" , verifyType = \"[string]검증 종류\" , value = \"[int]오버플로우량\" , multiplyValueSpecifyingQuantity = \"[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Consume Action 소비 액션 Gs2Stamina:DecreaseMaxValueByUserId 사용자 ID를 지정하여 스타미나 최대값 감산 지정된 사용자의 스타미나 최대 용량을 지정된 양만큼 감소시킵니다. 스타미나 용량에 대한 디버프나 페널티 적용에 사용할 수 있습니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. decreaseValue int  0 ~ 2147483646 감산할 최대 스타미나 양 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:DecreaseMaxValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"decreaseValue\" : \"[int]감산할 최대 스타미나 양\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:DecreaseMaxValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" staminaName : \"[string]스태미나 모델 이름\" userId : \"[string]사용자ID\" decreaseValue : \"[int]감산할 최대 스타미나 양\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). consume.decrease_max_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , staminaName = \"[string]스태미나 모델 이름\" , userId = \"[string]사용자ID\" , decreaseValue = \"[int]감산할 최대 스타미나 양\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:ConsumeStaminaByUserId 사용자 ID를 지정하여 스타미나 소비 지정된 사용자의 현재 스타미나 값에서 지정된 양을 차감합니다. 현재 스타미나 값이 소비량보다 적은 경우 Insufficient 오류를 반환합니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. consumeValue int  1 ~ 2147483646 소비할 스타미나 양 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:ConsumeStaminaByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"consumeValue\" : \"[int]소비할 스타미나 양\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:ConsumeStaminaByUserId request : namespaceName : \"[string]네임스페이스 이름\" staminaName : \"[string]스태미나 모델 이름\" userId : \"[string]사용자ID\" consumeValue : \"[int]소비할 스타미나 양\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). consume.consume_stamina_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , staminaName = \"[string]스태미나 모델 이름\" , userId = \"[string]사용자ID\" , consumeValue = \"[int]소비할 스타미나 양\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Acquire Action 입수 액션 Gs2Stamina:RecoverStaminaByUserId 사용자 ID를 지정하여 스타미나 회복 지정된 양의 스타미나를 최대 용량까지 회복합니다. 회복으로 인해 값이 최대값을 초과하고 오버플로 모드가 활성화된 경우, 초과분은 오버플로 값으로 기록됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. recoverValue int  1 ~ 2147483646 스타미나의 회복량 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:RecoverStaminaByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"recoverValue\" : \"[int]스타미나의 회복량\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:RecoverStaminaByUserId request : namespaceName : \"[string]네임스페이스 이름\" staminaName : \"[string]스태미나 모델 이름\" userId : \"[string]사용자ID\" recoverValue : \"[int]스타미나의 회복량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). acquire.recover_stamina_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , staminaName = \"[string]스태미나 모델 이름\" , userId = \"[string]사용자ID\" , recoverValue = \"[int]스타미나의 회복량\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:RaiseMaxValueByUserId 사용자 ID를 지정하여 스타미나의 최대값을 가산 지정된 양만큼 스타미나의 최대 용량을 영구적으로 증가시킵니다. 레벨업 보상이나 아이템 효과 등 영구적인 스탯 상승에 사용됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 예 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. raiseValue int  0 ~ 2147483646 증가시킬 최대 스타미나 양 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:RaiseMaxValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"raiseValue\" : \"[int]증가시킬 최대 스타미나 양\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:RaiseMaxValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" staminaName : \"[string]스태미나 모델 이름\" userId : \"[string]사용자ID\" raiseValue : \"[int]증가시킬 최대 스타미나 양\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). acquire.raise_max_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , staminaName = \"[string]스태미나 모델 이름\" , userId = \"[string]사용자ID\" , raiseValue = \"[int]증가시킬 최대 스타미나 양\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:SetMaxValueByUserId 사용자 ID를 지정하여 스타미나의 최대값을 갱신 스타미나의 최대 용량을 지정된 값으로 설정합니다. 감사 목적으로 변경 전 스타미나 상태가 응답에 유지됩니다. 관리자에 의한 오버라이드나 특별 이벤트에서의 조정에 사용됩니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. maxValue int  1 ~ 2147483646 스태미나 최대값 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 MaxStaminaTable로 오버라이드되는 사용자별 스태미나 최대값입니다. 오버플로우가 비활성화된 경우 initialCapacity가 하한이 됩니다. 오버플로우가 활성화된 경우 maxCapacity가 상한이 됩니다. 자연 회복은 이 값에서 멈춥니다. timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:SetMaxValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"maxValue\" : \"[int]스태미나 최대값\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:SetMaxValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" staminaName : \"[string]스태미나 모델 이름\" userId : \"[string]사용자ID\" maxValue : \"[int]스태미나 최대값\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). acquire.set_max_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , staminaName = \"[string]스태미나 모델 이름\" , userId = \"[string]사용자ID\" , maxValue = \"[int]스태미나 최대값\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:SetRecoverIntervalByUserId 사용자 ID를 지정하여 스타미나 회복 간격(분)을 갱신 스타미나 회복 간격을 지정된 값(분)으로 설정합니다. 감사 목적으로 변경 전 스타미나 상태가 응답에 유지됩니다. 스타미나가 자동으로 회복되는 빈도를 제어합니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. recoverIntervalMinutes int  1 ~ 2147483646 스타미나 회복 간격(분) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:SetRecoverIntervalByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"recoverIntervalMinutes\" : \"[int]스타미나 회복 간격(분)\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:SetRecoverIntervalByUserId request : namespaceName : \"[string]네임스페이스 이름\" staminaName : \"[string]스태미나 모델 이름\" userId : \"[string]사용자ID\" recoverIntervalMinutes : \"[int]스타미나 회복 간격(분)\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). acquire.set_recover_interval_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , staminaName = \"[string]스태미나 모델 이름\" , userId = \"[string]사용자ID\" , recoverIntervalMinutes = \"[int]스타미나 회복 간격(분)\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , }) Gs2Stamina:SetRecoverValueByUserId 사용자 ID를 지정하여 스타미나의 회복량을 설정 스타미나의 회복량을 지정된 값으로 설정합니다. 감사 목적으로 변경 전 스타미나 상태가 응답에 유지됩니다. 회복 간격마다 회복되는 스타미나 양을 제어합니다. 수량 지정 가능한 액션: 예 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. staminaName string  ~ 128자 스태미나 모델 이름 이 스태미나 인스턴스의 회복 파라미터, 용량, 테이블 참조를 정의하는 StaminaModel의 이름입니다. 사용자별 스태미나 상태를 대응하는 모델 정의와 연결합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. recoverValue int  1 ~ 2147483646 스타미나의 회복량 timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2Stamina:SetRecoverValueByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"staminaName\" : \"[string]스태미나 모델 이름\" , \"userId\" : \"[string]사용자ID\" , \"recoverValue\" : \"[int]스타미나의 회복량\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2Stamina:SetRecoverValueByUserId request : namespaceName : \"[string]네임스페이스 이름\" staminaName : \"[string]스태미나 모델 이름\" userId : \"[string]사용자ID\" recoverValue : \"[int]스타미나의 회복량\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stamina\" ). acquire.set_recover_value_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , staminaName = \"[string]스태미나 모델 이름\" , userId = \"[string]사용자ID\" , recoverValue = \"[int]스타미나의 회복량\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-Stamina 트랜잭션 액션","url":"/ko/api_reference/stamina/stamp_sheet/"},{"content":"Acquire Action 입수 액션 Gs2StateMachine:StartStateMachineByUserId 사용자 ID를 지정하여 스테이트 머신 시작 최신 마스터 버전을 사용하여 지정한 사용자의 새로운 스테이트 머신 인스턴스를 시작합니다. 인자는 JSON으로 전달되어 스테이트 머신 변수로 파싱됩니다. 선택적으로 TTL(분 단위)을 설정할 수 있으며, 생략한 경우 스테이트 머신은 약 10년간 유효합니다. 수량 지정 가능한 액션: 아니오 반전 가능한 액션: 아니오 타입 활성화 조건 필수 기본값 값 제한 설명 namespaceName string  ~ 128자 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. userId string  ~ 128자 사용자ID #{userId} 로 설정하면 로그인 중인 사용자ID로 치환됩니다. args string “{}” ~ 4096자 스테이트 머신에 전달할 인자 ttl int 1 ~ 525600 유효 기간(분) timeOffsetToken string ~ 1024자 타임 오프셋 토큰 Format: JSON YAML GS2-Script { \"action\" : \"Gs2StateMachine:StartStateMachineByUserId\" , \"request\" : { \"namespaceName\" : \"[string]네임스페이스 이름\" , \"userId\" : \"[string]사용자ID\" , \"args\" : \"[string]스테이트 머신에 전달할 인자\" , \"ttl\" : \"[int]유효 기간(분)\" , \"timeOffsetToken\" : \"[string]타임 오프셋 토큰\" } } action : Gs2StateMachine:StartStateMachineByUserId request : namespaceName : \"[string]네임스페이스 이름\" userId : \"[string]사용자ID\" args : \"[string]스테이트 머신에 전달할 인자\" ttl : \"[int]유효 기간(분)\" timeOffsetToken : \"[string]타임 오프셋 토큰\" transaction.service ( \"stateMachine\" ). acquire.start_state_machine_by_user_id ({ namespaceName = \"[string]네임스페이스 이름\" , userId = \"[string]사용자ID\" , args = \"[string]스테이트 머신에 전달할 인자\" , ttl = \"[int]유효 기간(분)\" , timeOffsetToken = \"[string]타임 오프셋 토큰\" , })","lang":"ko","section":"api_reference","summary":"검증/소비/입수 각 트랜잭션 액션의 사양\n","title":"GS2-StateMachine 트랜잭션 액션","url":"/ko/api_reference/state_machine/stamp_sheet/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Exchange:RateModel 교환 레이트 모델 버프 적용 대상 필드 lockTime 타입 활성화 조건 필수 기본값 값 제한 설명 lockTime int {timingType} == “await” ※ 0 ~ 538214400 교환 실행부터 실제로 보상을 받을 수 있게 될 때까지의 대기 시간(분) timingType이 await 인 경우에만 적용됩니다. 교환이 시작된 후 플레이어가 보상을 받을 수 있게 되기까지 경과해야 하는 실시간 분수를 지정합니다. 대기 시간은 스킵 기능을 사용하여 단축할 수 있습니다. ※ timingType이(가) “await” 이면 필수 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Exchange:RateModel\" , \"targetFieldName\" : \"lockTime\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Exchange:Namespace 네임스페이스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:Namespace\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}\" } ] Gs2Exchange:RateModel 교환 레이트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:RateModel\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}:model:{rateName}\" } ] acquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 0 ~ 100 items 획득 액션 리스트 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 여러 개의 획득 액션을 지정하여 다양한 리소스 타입을 동시에 지급할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 획득 액션으로 실행됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Exchange:RateModel\" , \"targetFieldName\" : \"acquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Exchange:Namespace 네임스페이스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:Namespace\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}\" } ] Gs2Exchange:RateModel 교환 레이트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:RateModel\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}:model:{rateName}\" } ] verifyActions 타입 활성화 조건 필수 기본값 값 제한 설명 verifyActions List [] 0 ~ 10 items 검증 액션 리스트 교환이 실행되기 전에 모두 통과해야 하는 사전 조건 체크입니다. 검증 액션 중 하나라도 실패하면, 리소스를 소비하지 않고 교환이 중단됩니다. 레벨 요건이나 인벤토리 용량 등의 조건을 강제하기 위해 사용됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Exchange:RateModel\" , \"targetFieldName\" : \"verifyActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Exchange:Namespace 네임스페이스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:Namespace\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}\" } ] Gs2Exchange:RateModel 교환 레이트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:RateModel\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}:model:{rateName}\" } ] consumeActions 타입 활성화 조건 필수 기본값 값 제한 설명 consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 교환을 실행하기 위해 플레이어가 지불해야 하는 리소스(코스트)를 정의합니다. 여러 개의 소비 액션을 지정할 수 있어, 골드와 아이템을 모두 필요로 하는 것과 같은 복잡한 교환 코스트를 구현할 수 있습니다. 이러한 액션은 분산 트랜잭션 내의 소비 액션으로 실행됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Exchange:RateModel\" , \"targetFieldName\" : \"consumeActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Exchange:Namespace 네임스페이스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:Namespace\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}\" } ] Gs2Exchange:RateModel 교환 레이트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:RateModel\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}:model:{rateName}\" } ] Gs2Exchange:IncrementalRateModel 코스트 상승형 교환 레이트 모델 버프 적용 대상 필드 acquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 0 ~ 100 items 획득 액션 리스트 코스트 상승형 교환 완료 시 플레이어가 받는 리소스(보상)를 정의합니다. 보상은 교환 횟수와 관계없이 일정하며, 코스트만 교환마다 증가합니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Exchange:IncrementalRateModel\" , \"targetFieldName\" : \"acquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Exchange:Namespace 네임스페이스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:Namespace\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}\" } ] Gs2Exchange:IncrementalRateModel 코스트 상승형 교환 레이트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:IncrementalRateModel\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}:incremental:model:{rateName}\" } ] consumeAction 타입 활성화 조건 필수 기본값 값 제한 설명 consumeAction ConsumeAction  소비 액션 (수량/값은 자동으로 덮어써집니다) 교환 비용으로 소비되는 리소스의 종류를 정의합니다. 실제 수량은 교환 횟수와 계산 방식(선형, 거듭제곱, 스크립트)에 기반하여 동적으로 계산됩니다. 액션 종류와 대상 리소스만 지정하면 되며, 수량 필드는 자동으로 덮어써집니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Exchange:IncrementalRateModel\" , \"targetFieldName\" : \"consumeAction\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Exchange:Namespace 네임스페이스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:Namespace\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}\" } ] Gs2Exchange:IncrementalRateModel 코스트 상승형 교환 레이트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:IncrementalRateModel\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}:incremental:model:{rateName}\" } ] maximumExchangeCount 타입 활성화 조건 필수 기본값 값 제한 설명 maximumExchangeCount int 2147483646 0 ~ 2147483646 교환 횟수 상한 사용자가 이 코스트 상승형 교환을 실행할 수 있는 최대 횟수입니다. 교환 횟수가 이 상한에 도달하면, GS2-Limit에 의한 카운트 리셋까지 이후의 교환이 거부됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Exchange:IncrementalRateModel\" , \"targetFieldName\" : \"maximumExchangeCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Exchange:Namespace 네임스페이스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:Namespace\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}\" } ] Gs2Exchange:IncrementalRateModel 코스트 상승형 교환 레이트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Exchange:IncrementalRateModel\" , \"targetGrn\" : \"grn:gs2:any:any:exchange:{namespaceName}:incremental:model:{rateName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Exchange Buff 레퍼런스","url":"/ko/api_reference/exchange/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Experience:Status 스테이터스 버프 적용 대상 필드 rankCapValue 타입 활성화 조건 필수 기본값 값 제한 설명 rankCapValue long  0 ~ 9223372036854775805 현재 랭크 캡 이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Experience:Status\" , \"targetFieldName\" : \"rankCapValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Experience:ExperienceModel 경험치 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Experience:ExperienceModel\" , \"targetGrn\" : \"grn:gs2:any:any:experience:{namespaceName}:model:{experienceName}\" } ] Gs2Experience:Status 스테이터스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Experience:Status\" , \"targetGrn\" : \"grn:gs2:any:any:experience:{namespaceName}:user:any:experienceModel:{experienceName}:property:{propertyId}\" } ] Action 버프 적용 가능한 액션의 종류 Gs2Experience:AddExperienceByUserId 사용자 ID를 지정하여 경험치를 가산 지정된 사용자의 상태에 경험치를 가산합니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. truncateExperienceWhenRankUp이 true인 경우, 랭크업 시 임계값을 초과한 잉여 경험치는 절사됩니다. false(기본값)인 경우에는 다음 랭크로 이월됩니다. 버프 적용 대상 필드 experienceValue Status - 스테이터스 타입 활성화 조건 필수 기본값 값 제한 설명 experienceValue long 0 0 ~ 9223372036854775805 획득 경험치 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Experience:AddExperienceByUserId\" , \"targetFieldName\" : \"experienceValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Experience:ExperienceModel 경험치 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Experience:ExperienceModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:experience:{namespaceName}:model:{experienceName}\" } ] Gs2Experience:Status 스테이터스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Experience:Status\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:experience:{namespaceName}:user:{userId}:experienceModel:{experienceName}:property:{propertyId}\" } ] Gs2Experience:SubExperience 경험치를 감산 요청한 사용자의 상태에서 경험치를 감산합니다. 경험치는 0 미만으로 내려가지 않습니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. 버프 적용 대상 필드 experienceValue Status - 스테이터스 타입 활성화 조건 필수 기본값 값 제한 설명 experienceValue long 0 0 ~ 9223372036854775805 잃는 경험치 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Experience:SubExperience\" , \"targetFieldName\" : \"experienceValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Experience:ExperienceModel 경험치 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Experience:ExperienceModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:experience:{namespaceName}:model:{experienceName}\" } ] Gs2Experience:Status 스테이터스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Experience:Status\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:experience:{namespaceName}:user:{userId}:experienceModel:{experienceName}:property:{propertyId}\" } ] Gs2Experience:SubExperienceByUserId 사용자 ID를 지정하여 경험치를 감산 지정된 사용자의 상태에서 경험치를 감산합니다. 경험치는 0 미만으로 내려가지 않습니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다. 버프 적용 대상 필드 experienceValue Status - 스테이터스 타입 활성화 조건 필수 기본값 값 제한 설명 experienceValue long 0 0 ~ 9223372036854775805 잃는 경험치 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Experience:SubExperienceByUserId\" , \"targetFieldName\" : \"experienceValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Experience:ExperienceModel 경험치 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Experience:ExperienceModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:experience:{namespaceName}:model:{experienceName}\" } ] Gs2Experience:Status 스테이터스 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Experience:Status\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:experience:{namespaceName}:user:{userId}:experienceModel:{experienceName}:property:{propertyId}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Experience Buff 레퍼런스","url":"/ko/api_reference/experience/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Formation:Mold 폼 저장 영역 버프 적용 대상 필드 capacity 타입 활성화 조건 필수 기본값 값 제한 설명 capacity int  0 ~ 2147483646 현재 캐파시티 이 저장 영역에서 이 플레이어가 현재 이용할 수 있는 폼 저장 슬롯 수입니다. 초기값은 저장 영역 모델의 initialMaxCapacity로 설정되며, 캐파시티 증가 조작을 통해 maxCapacity까지 확장할 수 있습니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Formation:Mold\" , \"targetFieldName\" : \"capacity\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Formation:MoldModel 폼 저장 영역 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Formation:MoldModel\" , \"targetGrn\" : \"grn:gs2:any:any:formation:{namespaceName}:model:mold:{moldModelName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Formation Buff 레퍼런스","url":"/ko/api_reference/formation/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Idle:Status 스테이터스 버프 적용 대상 필드 maximumIdleMinutes 타입 활성화 조건 필수 기본값 값 제한 설명 maximumIdleMinutes int 0 0 ~ 2147483646 최대 방치 시간(분) 이 스테이터스가 축적할 수 있는 최대 방치 시간(분)입니다. 스테이터스 생성 시 카테고리 모델의 defaultMaximumIdleMinutes 로 초기화됩니다. 입수 액션을 통해 사용자별로 늘릴 수 있으며, 프리미엄 사용자나 이벤트 참가자가 더 많은 방치 보상을 축적할 수 있도록 합니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Idle:Status\" , \"targetFieldName\" : \"maximumIdleMinutes\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Idle:CategoryModel 카테고리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Idle:CategoryModel\" , \"targetGrn\" : \"grn:gs2:any:any:idle:{namespaceName}:model:{categoryName}\" } ] Gs2Idle:CategoryModel 카테고리 모델 버프 적용 대상 필드 acquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 0 ~ 100 items 입수 액션 리스트 이 보상 간격이 트리거될 때 함께 실행되는 입수 액션의 집합입니다. 여러 액션을 조합하여 하나의 방치 보상 주기에서 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 리스트당 최대 100개의 액션입니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Idle:CategoryModel\" , \"targetFieldName\" : \"acquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Idle:CategoryModel 카테고리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Idle:CategoryModel\" , \"targetGrn\" : \"grn:gs2:any:any:idle:{namespaceName}:model:{categoryName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Idle Buff 레퍼런스","url":"/ko/api_reference/idle/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Inventory:Inventory 인벤토리 버프 적용 대상 필드 currentInventoryMaxCapacity 타입 활성화 조건 필수 기본값 값 제한 설명 currentInventoryMaxCapacity int  1 ~ 2147483646 최대 용량 이 사용자가 사용할 수 있는 인벤토리 슬롯의 현재 최대 수입니다. 인벤토리 모델의 initialCapacity로 초기화되며, 입수 액션 또는 직접적인 API 호출을 통해 모델의 maxCapacity까지 확장할 수 있습니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Inventory:Inventory\" , \"targetFieldName\" : \"currentInventoryMaxCapacity\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:InventoryModel 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:InventoryModel\" , \"targetGrn\" : \"grn:gs2:any:any:inventory:{namespaceName}:model:{inventoryName}\" } ] Action 버프 적용 가능한 액션의 종류 Gs2Inventory:AcquireItemSetByUserId 사용자 ID를 지정하여 아이템 세트 입수 사용자의 인벤토리에 아이템을 추가합니다. 기존 아이템 세트에 여유(스택 제한 미만)가 있는 경우 그곳에 추가되며, 그렇지 않은 경우 복수 스택이 허용되어 있으면 새로운 아이템 세트가 생성됩니다. 선택적으로 expiresAt을 지정하여 새로 생성되는 아이템 세트의 유효기간을 설정할 수 있습니다. 유효기간이 이미 지난 아이템은 빈 것으로 취급됩니다. createNewItemSet이 true인 경우, 기존 세트에 여유가 있어도 항상 새로운 아이템 세트가 생성됩니다. 합계 수량이 인벤토리 용량을 초과하는 경우 오버플로우 수량이 반환되며, 네임스페이스 설정에 따라 오버플로우분이 GS2-Inbox로 전송될 수 있습니다. 버프 적용 대상 필드 acquireCount ItemSet - 아이템 세트 타입 활성화 조건 필수 기본값 값 제한 설명 acquireCount long  1 ~ 9223372036854775805 입수하는 양 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:AcquireItemSetByUserId\" , \"targetFieldName\" : \"acquireCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:InventoryModel 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:InventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:model:{inventoryName}\" } ] Gs2Inventory:ItemModel 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:ItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:model:{inventoryName}:item:{itemName}\" } ] Gs2Inventory:ConsumeItemSet 아이템 세트를 소비 요청 사용자의 인벤토리 내 지정된 아이템의 수량을 감소시킵니다. itemSetName을 지정하면 해당 특정 스택만 소비 대상이 됩니다. 지정하지 않으면 해당 아이템 타입의 모든 스택에서 소비됩니다. 아이템 세트의 수량이 0이 되면 자동으로 삭제됩니다. 요청된 양을 소비하기에 충분한 아이템이 없는 경우 Insufficient 에러가 반환됩니다. 버프 적용 대상 필드 consumeCount ItemSet - 아이템 세트 타입 활성화 조건 필수 기본값 값 제한 설명 consumeCount long  1 ~ 9223372036854775805 소비 수량 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:ConsumeItemSet\" , \"targetFieldName\" : \"consumeCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:InventoryModel 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:InventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:model:{inventoryName}\" } ] Gs2Inventory:ItemModel 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:ItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:model:{inventoryName}:item:{itemName}\" } ] Gs2Inventory:ConsumeItemSetByUserId 사용자 ID를 지정하여 아이템 세트를 소비 지정된 사용자의 인벤토리 내 특정 아이템의 수량을 감소시킵니다. itemSetName을 지정하면 해당 특정 스택만 소비 대상이 됩니다. 지정하지 않으면 해당 아이템 타입의 모든 스택에서 소비됩니다. 아이템 세트의 수량이 0이 되면 자동으로 삭제됩니다. 충분한 아이템이 없는 경우 Insufficient 에러가 반환됩니다. 버프 적용 대상 필드 consumeCount ItemSet - 아이템 세트 타입 활성화 조건 필수 기본값 값 제한 설명 consumeCount long  1 ~ 9223372036854775805 소비 수량 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:ConsumeItemSetByUserId\" , \"targetFieldName\" : \"consumeCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:InventoryModel 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:InventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:model:{inventoryName}\" } ] Gs2Inventory:ItemModel 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:ItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:model:{inventoryName}:item:{itemName}\" } ] Gs2Inventory:AcquireSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 입수 입수 수량의 배치를 사용하여 사용자의 심플 인벤토리에 아이템을 추가합니다. 단일 원자적 작업으로 여러 아이템을 입수할 수 있습니다. acquireCounts 배열로 각 아이템의 이름과 수량을 지정합니다. 일반적인 아이템 세트와 달리, 심플 아이템에는 용량 제한, 스택 제한, 유효기간이 없습니다. 버프 적용 대상 필드 acquireCounts SimpleItem - 심플 아이템 타입 활성화 조건 필수 기본값 값 제한 설명 acquireCounts List  1 ~ 100 items 심플 아이템의 입수 수량 리스트 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:AcquireSimpleItemsByUserId\" , \"targetFieldName\" : \"acquireCounts\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:SimpleInventoryModel 심플 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:SimpleInventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:simple:model:{inventoryName}\" } ] Gs2Inventory:SimpleItemModel 심플 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:SimpleItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:simple:model:{inventoryName}:item:{itemName}\" } ] Gs2Inventory:ConsumeSimpleItems 심플 아이템 소비 소비 수량의 배치를 사용하여 요청 사용자의 심플 인벤토리 내 아이템 수량을 감소시킵니다. 단일 원자적 작업으로 여러 아이템을 소비할 수 있습니다. 어느 하나의 아이템 수량이라도 부족한 경우, 작업 전체가 실패합니다. 지정된 아이템 중 하나라도 충분하지 않은 경우, Insufficient 오류가 반환됩니다. 버프 적용 대상 필드 consumeCounts SimpleItem - 심플 아이템 타입 활성화 조건 필수 기본값 값 제한 설명 consumeCounts List  1 ~ 100 items 심플 아이템의 소비 수량 리스트 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:ConsumeSimpleItems\" , \"targetFieldName\" : \"consumeCounts\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:SimpleInventoryModel 심플 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:SimpleInventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:simple:model:{inventoryName}\" } ] Gs2Inventory:SimpleItemModel 심플 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:SimpleItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:simple:model:{inventoryName}:item:{itemName}\" } ] Gs2Inventory:ConsumeSimpleItemsByUserId 사용자 ID를 지정하여 심플 아이템 소비 소비 수량의 배치를 사용하여 지정된 사용자의 심플 인벤토리 내 아이템 수량을 감소시킵니다. 단일 원자적 작업으로 여러 아이템을 소비할 수 있습니다. 어느 하나의 아이템 수량이라도 부족한 경우, 작업 전체가 실패합니다. 버프 적용 대상 필드 consumeCounts SimpleItem - 심플 아이템 타입 활성화 조건 필수 기본값 값 제한 설명 consumeCounts List  1 ~ 100 items 심플 아이템의 소비 수량 리스트 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:ConsumeSimpleItemsByUserId\" , \"targetFieldName\" : \"consumeCounts\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:SimpleInventoryModel 심플 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:SimpleInventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:simple:model:{inventoryName}\" } ] Gs2Inventory:SimpleItemModel 심플 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:SimpleItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:simple:model:{inventoryName}:item:{itemName}\" } ] Gs2Inventory:AcquireBigItemByUserId 사용자 ID를 지정하여 거대 아이템 입수 임의 정밀도 연산을 사용하여 사용자의 거대 아이템 수량에 지정된 수량을 가산합니다. acquireCount는 최대 1024자리의 유효한 정수 문자열이어야 하며, 형식이 올바르지 않으면 오류가 발생합니다. 아이템이 아직 존재하지 않는 경우 자동으로 생성됩니다. 네임스페이스 설정을 통해 거대 아이템 입수 시 커스텀 로직을 실행하는 GS2-Script를 설정할 수 있습니다. 버프 적용 대상 필드 acquireCount BigItem - 거대 아이템 타입 활성화 조건 필수 기본값 값 제한 설명 acquireCount string  ~ 1024자 거대 아이템의 입수 수량 최대 1024자리까지의 정수값 문자열 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:AcquireBigItemByUserId\" , \"targetFieldName\" : \"acquireCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:BigInventoryModel 거대 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:BigInventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:big:model:{inventoryName}\" } ] Gs2Inventory:BigItemModel 거대 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:BigItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:big:model:{inventoryName}:item:{itemName}\" } ] Gs2Inventory:ConsumeBigItem 거대 아이템 소비 임의 정밀도 연산을 사용하여 요청 사용자의 거대 아이템 수량에서 지정된 수량을 감산합니다. consumeCount는 최대 1024자리의 유효한 정수 문자열이어야 합니다. 현재 수량이 부족한 경우 Insufficient 오류가 반환되며, 감산은 이루어지지 않습니다. 네임스페이스 설정을 통해 거대 아이템 소비 시 커스텀 로직을 실행하는 GS2-Script를 설정할 수 있습니다. 버프 적용 대상 필드 consumeCount BigItem - 거대 아이템 타입 활성화 조건 필수 기본값 값 제한 설명 consumeCount string  ~ 1024자 거대 아이템의 소비 수량 최대 1024자리까지의 정수값 문자열 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:ConsumeBigItem\" , \"targetFieldName\" : \"consumeCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:BigInventoryModel 거대 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:BigInventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:big:model:{inventoryName}\" } ] Gs2Inventory:BigItemModel 거대 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:BigItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:big:model:{inventoryName}:item:{itemName}\" } ] Gs2Inventory:ConsumeBigItemByUserId 사용자 ID를 지정하여 거대 아이템 소비 임의 정밀도 연산을 사용하여 지정 사용자의 거대 아이템 수량에서 지정된 수량을 감산합니다. consumeCount는 최대 1024자리의 유효한 정수 문자열이어야 합니다. 현재 수량이 부족한 경우 Insufficient 오류가 반환되며, 감산은 이루어지지 않습니다. 네임스페이스 설정을 통해 거대 아이템 소비 시 커스텀 로직을 실행하는 GS2-Script를 설정할 수 있습니다. 버프 적용 대상 필드 consumeCount BigItem - 거대 아이템 타입 활성화 조건 필수 기본값 값 제한 설명 consumeCount string  ~ 1024자 거대 아이템의 소비 수량 최대 1024자리까지의 정수값 문자열 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Inventory:ConsumeBigItemByUserId\" , \"targetFieldName\" : \"consumeCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Inventory:BigInventoryModel 거대 인벤토리 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:BigInventoryModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:big:model:{inventoryName}\" } ] Gs2Inventory:BigItemModel 거대 아이템 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Inventory:BigItemModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:inventory:{namespaceName}:big:model:{inventoryName}:item:{itemName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Inventory Buff 레퍼런스","url":"/ko/api_reference/inventory/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Action 버프 적용 가능한 액션의 종류 Gs2Limit:CountUp 카운트업 요청한 사용자의 카운터를 지정된 카운트업 값만큼 증가시킵니다. maxValue가 지정된 경우, 카운터는 해당 상한을 초과하지 않습니다. 작업이 최대값을 초과하는 경우 Overflow 오류가 반환됩니다. 카운터가 아직 존재하지 않는 경우, 카운트 0으로 자동 생성된 후 증가합니다. 버프 적용 대상 필드 maxValue Counter - 사용 횟수 제한의 현재 값 타입 활성화 조건 필수 기본값 값 제한 설명 maxValue int 1 ~ 2147483646 카운트업을 허용하는 최댓값 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Limit:CountUp\" , \"targetFieldName\" : \"maxValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Limit:LimitModel 횟수 제한 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Limit:LimitModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:limit:{namespaceName}:limit:{limitName}\" } ] Gs2Limit:Counter 사용 횟수 제한의 현재 값 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Limit:Counter\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:limit:{namespaceName}:user:{userId}:limit:{limitName}:counter:{counterName}\" } ] Gs2Limit:CountUpByUserId 사용자 ID를 지정하여 카운트업 지정된 사용자의 카운터를 지정된 카운트업 값만큼 증가시킵니다. maxValue가 지정된 경우, 카운터는 해당 상한을 초과하지 않습니다. 작업이 최대값을 초과하는 경우 Overflow 오류가 반환됩니다. 카운터가 아직 존재하지 않는 경우, 자동으로 생성됩니다. 버프 적용 대상 필드 maxValue Counter - 사용 횟수 제한의 현재 값 타입 활성화 조건 필수 기본값 값 제한 설명 maxValue int 1 ~ 2147483646 카운트업을 허용하는 최댓값 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Limit:CountUpByUserId\" , \"targetFieldName\" : \"maxValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Limit:LimitModel 횟수 제한 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Limit:LimitModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:limit:{namespaceName}:limit:{limitName}\" } ] Gs2Limit:Counter 사용 횟수 제한의 현재 값 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Limit:Counter\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:limit:{namespaceName}:user:{userId}:limit:{limitName}:counter:{counterName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Limit Buff 레퍼런스","url":"/ko/api_reference/limit/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2LoginReward:BonusModel 로그인 보너스 모델 버프 적용 대상 필드 acquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List  1 ~ 10 items 입수 액션 목록 이 날짜의 보상으로 사용자에게 부여되는 리소스를 정의하는 입수 액션 목록. 각 액션은 입수 액션(아이템 추가, 화폐 부여 등)과 그 요청 파라미터를 지정합니다. 보상당 최소 1개, 최대 10개의 액션을 설정할 수 있습니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2LoginReward:BonusModel\" , \"targetFieldName\" : \"acquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2LoginReward:BonusModel 로그인 보너스 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2LoginReward:BonusModel\" , \"targetGrn\" : \"grn:gs2:any:any:loginReward:{namespaceName}:bonusModel:{bonusModelName}\" } ] missedReceiveReliefConsumeActions 타입 활성화 조건 필수 기본값 값 제한 설명 missedReceiveReliefConsumeActions List {missedReceiveRelief} == “enabled” [] 0 ~ 10 items 미수령 구제 소비 액션 목록 놓친 보너스를 구제하기 위해 사용자가 지불해야 하는 비용을 정의하는 소비 액션의 목록입니다. 예를 들어 게임 내 화폐나 아이템을 구제 비용으로 소비하도록 설정할 수 있습니다. 최대 10개까지 설정할 수 있습니다. missedReceiveRelief가 활성화된 경우에만 적용됩니다. ※ missedReceiveRelief이(가) “enabled” 이면 활성화 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2LoginReward:BonusModel\" , \"targetFieldName\" : \"missedReceiveReliefConsumeActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2LoginReward:BonusModel 로그인 보너스 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2LoginReward:BonusModel\" , \"targetGrn\" : \"grn:gs2:any:any:loginReward:{namespaceName}:bonusModel:{bonusModelName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-LoginReward Buff 레퍼런스","url":"/ko/api_reference/login_reward/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Mission:MissionTaskModel 미션 태스크 모델 버프 적용 대상 필드 completeAcquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 completeAcquireActions List [] 0 ~ 100 items 미션 달성 시 보상 플레이어가 미션 달성 보상을 받을 때 실행되는 입수 액션의 목록입니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Mission:MissionTaskModel\" , \"targetFieldName\" : \"completeAcquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Mission:MissionGroupModel 미션 그룹 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Mission:MissionGroupModel\" , \"targetGrn\" : \"grn:gs2:any:any:mission:{namespaceName}:group:{missionGroupName}\" } ] Gs2Mission:MissionTaskModel 미션 태스크 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Mission:MissionTaskModel\" , \"targetGrn\" : \"grn:gs2:any:any:mission:{namespaceName}:group:{missionGroupName}:missionTaskModel:{missionTaskName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Mission Buff 레퍼런스","url":"/ko/api_reference/mission/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Action 버프 적용 가능한 액션의 종류 Gs2Money:DepositByUserId 사용자 ID를 지정하여 지갑 잔액에 가산 지정한 사용자의 지갑에 지정한 양의 통화를 추가합니다. 가격이 0인 경우는 무료 통화로, 그 외의 경우는 유료 통화로 취급됩니다. 버프 적용 대상 필드 count Wallet - 지갑 타입 활성화 조건 필수 기본값 값 제한 설명 count int  1 ~ 2147483646 지급할 유료 통화 수량 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Money:DepositByUserId\" , \"targetFieldName\" : \"count\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Money:Wallet 지갑 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Money:Wallet\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:money:{namespaceName}:user:{userId}:wallet:{slot}\" } ] Gs2Money:Withdraw 지갑에서 잔액 소비 요청 사용자의 지갑에서 지정한 양의 통화를 소비합니다. paidOnly가 false인 경우, 무료 통화가 먼저 소비되고 그다음 유료 통화가 소비됩니다. paidOnly가 true인 경우, 유료 통화만 소비됩니다. 응답에는 소비한 통화의 가격이 포함됩니다. 버프 적용 대상 필드 count Wallet - 지갑 타입 활성화 조건 필수 기본값 값 제한 설명 count int  1 ~ 2147483646 소비할 유료 통화 수량 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Money:Withdraw\" , \"targetFieldName\" : \"count\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Money:Wallet 지갑 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Money:Wallet\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:money:{namespaceName}:user:{userId}:wallet:{slot}\" } ] Gs2Money:WithdrawByUserId 사용자 ID를 지정하여 지갑에서 잔액 소비 지정한 사용자의 지갑에서 지정한 양의 통화를 소비합니다. paidOnly가 false인 경우, 무료 통화가 먼저 소비되고 그다음 유료 통화가 소비됩니다. 버프 적용 대상 필드 count Wallet - 지갑 타입 활성화 조건 필수 기본값 값 제한 설명 count int  1 ~ 2147483646 소비할 유료 통화 수량 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Money:WithdrawByUserId\" , \"targetFieldName\" : \"count\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Money:Wallet 지갑 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Money:Wallet\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:money:{namespaceName}:user:{userId}:wallet:{slot}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Money Buff 레퍼런스","url":"/ko/api_reference/money/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Action 버프 적용 가능한 액션의 종류 Gs2Money2:DepositByUserId 사용자 ID를 지정하여 지갑 잔액에 가산 지정된 사용자의 지갑에 지정된 입금 트랜잭션을 추가합니다. 각 입금 트랜잭션에 대해 이벤트 로그가 기록됩니다. 버프 적용 대상 필드 count DepositTransaction - 입금 트랜잭션 타입 활성화 조건 필수 기본값 값 제한 설명 count int  0 ~ 2147483646 과금 통화 수량 이 입금에서의 가상 통화 단위 수입니다. 지갑에서 출금되면 감소합니다. 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Money2:DepositByUserId\" , \"targetFieldName\" : \"count\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Money2:Wallet 지갑 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Money2:Wallet\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:money2:{namespaceName}:user:{userId}:wallet:{slot}\" } ] Gs2Money2:Withdraw 지갑에서 잔액 소비 요청 사용자의 지갑에서 지정된 양의 통화를 소비합니다. paidOnly가 false인 경우 무상 통화가 먼저 소비되고, 그다음 유상 통화가 소비됩니다. paidOnly가 true인 경우 유상 통화만 소비됩니다. 버프 적용 대상 필드 withdrawCount Wallet - 지갑 타입 활성화 조건 필수 기본값 값 제한 설명 withdrawCount int  1 ~ 2147483646 소비할 유료 통화 수량 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Money2:Withdraw\" , \"targetFieldName\" : \"withdrawCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Money2:Wallet 지갑 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Money2:Wallet\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:money2:{namespaceName}:user:{userId}:wallet:{slot}\" } ] Gs2Money2:WithdrawByUserId 사용자 ID를 지정하여 지갑에서 잔액 소비 지정된 사용자의 지갑에서 지정된 양의 통화를 소비합니다. paidOnly가 false인 경우 무상 통화가 먼저 소비되고, 그다음 유상 통화가 소비됩니다. 버프 적용 대상 필드 withdrawCount Wallet - 지갑 타입 활성화 조건 필수 기본값 값 제한 설명 withdrawCount int  1 ~ 2147483646 소비할 유료 통화 수량 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Money2:WithdrawByUserId\" , \"targetFieldName\" : \"withdrawCount\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Money2:Wallet 지갑 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Money2:Wallet\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:money2:{namespaceName}:user:{userId}:wallet:{slot}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Money2 Buff 레퍼런스","url":"/ko/api_reference/money2/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Quest:QuestModel 퀘스트 모델 버프 적용 대상 필드 completeAcquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 completeAcquireActions List [] 0 ~ 10 items 클리어 보상 획득 액션 이 콘텐츠 배리에이션으로 퀘스트를 클리어했을 때 실행되는 획득 액션입니다. 플레이어가 퀘스트 클리어 시 받게 되는 실제 보상을 정의합니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetFieldName\" : \"completeAcquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Quest:QuestGroupModel 퀘스트 그룹 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestGroupModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}\" } ] Gs2Quest:QuestModel 퀘스트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}:quest:{questName}\" } ] firstCompleteAcquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 firstCompleteAcquireActions List [] 0 ~ 10 items 최초 클리어 보상 입수 액션 리스트 이 퀘스트를 처음 클리어했을 때만 실행되는 입수 액션의 리스트입니다. 일반 클리어 보상에 더해 지급되는 보너스 보상으로, 최초 클리어 보너스를 구현하는 데 사용합니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetFieldName\" : \"firstCompleteAcquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Quest:QuestGroupModel 퀘스트 그룹 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestGroupModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}\" } ] Gs2Quest:QuestModel 퀘스트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}:quest:{questName}\" } ] failedAcquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 failedAcquireActions List [] 0 ~ 100 items 실패 시 입수 액션 리스트 퀘스트 실패 시 실행되는 입수 액션입니다. 실패 시 위로 보상이나 퀘스트 참가 비용의 일부 반환 등에 사용합니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetFieldName\" : \"failedAcquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Quest:QuestGroupModel 퀘스트 그룹 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestGroupModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}\" } ] Gs2Quest:QuestModel 퀘스트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}:quest:{questName}\" } ] verifyActions 타입 활성화 조건 필수 기본값 값 제한 설명 verifyActions List [] 0 ~ 10 items 검증 액션 리스트 이 퀘스트를 시작하기 위한 전제 조건이 되는 검증 액션의 리스트입니다. 모든 검증 액션이 성공해야만 퀘스트를 시작할 수 있습니다. 레벨 확인이나 아이템 소지 등의 요건을 강제하는 데 사용합니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetFieldName\" : \"verifyActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Quest:QuestGroupModel 퀘스트 그룹 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestGroupModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}\" } ] Gs2Quest:QuestModel 퀘스트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}:quest:{questName}\" } ] consumeActions 타입 활성화 조건 필수 기본값 값 제한 설명 consumeActions List [] 0 ~ 10 items 소비 액션 리스트 이 퀘스트의 시작 비용으로 실행되는 소비 액션입니다. 스태미나나 통화 등의 비용이 퀘스트 시작 시 소비됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetFieldName\" : \"consumeActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Quest:QuestGroupModel 퀘스트 그룹 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestGroupModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}\" } ] Gs2Quest:QuestModel 퀘스트 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Quest:QuestModel\" , \"targetGrn\" : \"grn:gs2:any:any:quest:{namespaceName}:group:{questGroupName}:quest:{questName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Quest Buff 레퍼런스","url":"/ko/api_reference/quest/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Showcase:DisplayItem 진열 상품 버프 적용 대상 필드 acquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 1 ~ 100 items 획득 액션 리스트 구매 보상으로 리소스를 부여하는 액션입니다. 모든 소비 액션이 정상적으로 완료된 후에 실행됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Showcase:DisplayItem\" , \"targetFieldName\" : \"acquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Showcase:Showcase 진열대 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:Showcase\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:showcase:{showcaseName}\" } ] Gs2Showcase:DisplayItem 진열 상품 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:DisplayItem\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:showcase:{showcaseName}:displayItem:{displayItemId}\" } ] verifyActions 타입 활성화 조건 필수 기본값 값 제한 설명 verifyActions List [] 0 ~ 10 items 검증 액션 리스트 구매 전에 실행되는 전제 조건 체크입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 구매 자격 조건 체크에 사용할 수 있습니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Showcase:DisplayItem\" , \"targetFieldName\" : \"verifyActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Showcase:Showcase 진열대 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:Showcase\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:showcase:{showcaseName}\" } ] Gs2Showcase:DisplayItem 진열 상품 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:DisplayItem\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:showcase:{showcaseName}:displayItem:{displayItemId}\" } ] consumeActions 타입 활성화 조건 필수 기본값 값 제한 설명 consumeActions List [] 0 ~ 10 items 소비 액션 리스트 구매 대가로 리소스를 소비하는 액션입니다. 상품 그룹의 구매 횟수 제어를 위해 GS2-Limit의 CountUp 액션을 포함할 수 있습니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Showcase:DisplayItem\" , \"targetFieldName\" : \"consumeActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Showcase:Showcase 진열대 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:Showcase\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:showcase:{showcaseName}\" } ] Gs2Showcase:DisplayItem 진열 상품 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:DisplayItem\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:showcase:{showcaseName}:displayItem:{displayItemId}\" } ] Gs2Showcase:RandomDisplayItemModel 랜덤 진열대에 진열 가능한 상품 버프 적용 대상 필드 acquireActions 타입 활성화 조건 필수 기본값 값 제한 설명 acquireActions List [] 1 ~ 100 items 획득 액션 목록 이 랜덤 진열 상품의 구매 보상으로 리소스를 지급하는 액션입니다. 트랜잭션의 획득 액션으로 실행됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Showcase:RandomDisplayItemModel\" , \"targetFieldName\" : \"acquireActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Showcase:RandomShowcase 랜덤 진열대 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:RandomShowcase\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:random:showcase:{showcaseName}\" } ] Gs2Showcase:RandomDisplayItemModel 랜덤 진열대에 진열 가능한 상품 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:RandomDisplayItemModel\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:randomDisplayItem:{displayItemId}\" } ] verifyActions 타입 활성화 조건 필수 기본값 값 제한 설명 verifyActions List [] 0 ~ 10 items 검증 액션 목록 이 랜덤 진열 상품을 구매하기 전에 실행되는 전제 조건 확인입니다. 모든 검증 액션이 성공한 후에 소비·획득 액션이 처리됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Showcase:RandomDisplayItemModel\" , \"targetFieldName\" : \"verifyActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Showcase:RandomShowcase 랜덤 진열대 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:RandomShowcase\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:random:showcase:{showcaseName}\" } ] Gs2Showcase:RandomDisplayItemModel 랜덤 진열대에 진열 가능한 상품 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:RandomDisplayItemModel\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:randomDisplayItem:{displayItemId}\" } ] consumeActions 타입 활성화 조건 필수 기본값 값 제한 설명 consumeActions List [] 0 ~ 10 items 소비 액션 목록 이 랜덤 진열 상품의 구매 대가로 리소스를 소비하는 액션입니다. 트랜잭션의 소비 액션으로 실행됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Showcase:RandomDisplayItemModel\" , \"targetFieldName\" : \"consumeActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Showcase:RandomShowcase 랜덤 진열대 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:RandomShowcase\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:random:showcase:{showcaseName}\" } ] Gs2Showcase:RandomDisplayItemModel 랜덤 진열대에 진열 가능한 상품 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:RandomDisplayItemModel\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:randomDisplayItem:{displayItemId}\" } ] stock 타입 활성화 조건 필수 기본값 값 제한 설명 stock int  1 ~ 2147483646 재고 수 모든 로테이션을 통틀어 이 상품이 추첨될 수 있는 최대 횟수입니다. 재고가 0이 되면 이후 추첨에서 제외됩니다. 로테이션 추첨 시 상품이 선택되면 재고가 소비됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Showcase:RandomDisplayItemModel\" , \"targetFieldName\" : \"stock\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Showcase:RandomShowcase 랜덤 진열대 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:RandomShowcase\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:random:showcase:{showcaseName}\" } ] Gs2Showcase:RandomDisplayItemModel 랜덤 진열대에 진열 가능한 상품 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Showcase:RandomDisplayItemModel\" , \"targetGrn\" : \"grn:gs2:any:any:showcase:{namespaceName}:randomDisplayItem:{displayItemId}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Showcase Buff 레퍼런스","url":"/ko/api_reference/showcase/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2SkillTree:NodeModel 노드 모델 버프 적용 대상 필드 releaseVerifyActions 타입 활성화 조건 필수 기본값 값 제한 설명 releaseVerifyActions List [] 0 ~ 10 items 해방 검증 액션 목록 이 노드를 해방하기 전에 실행되어 조건이 충족되었는지 확인하는 검증 액션의 목록입니다. 예를 들어 플레이어가 특정 레벨에 도달했는지, 특정 아이템을 소지하고 있는지를 검증할 수 있습니다. 검증 액션 중 하나라도 실패하면 노드 해방이 거부됩니다. 최대 10개 액션. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2SkillTree:NodeModel\" , \"targetFieldName\" : \"releaseVerifyActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2SkillTree:NodeModel 노드 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2SkillTree:NodeModel\" , \"targetGrn\" : \"grn:gs2:any:any:skillTree:{namespaceName}:model:{nodeModelName}\" } ] releaseConsumeActions 타입 활성화 조건 필수 기본값 값 제한 설명 releaseConsumeActions List [] 1 ~ 10 items 해방 소비 액션 목록 이 노드를 해방할 때 실행되는 소비 액션의 목록으로, 해방 비용을 나타냅니다. 이 액션들은 반환 입수 액션 계산에도 사용됩니다. 노드를 구속할 때 각 소비 액션이 반환율에 따라 역산됩니다. 최소 1개의 소비 액션이 필요합니다. 최대 10개 액션. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2SkillTree:NodeModel\" , \"targetFieldName\" : \"releaseConsumeActions\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2SkillTree:NodeModel 노드 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2SkillTree:NodeModel\" , \"targetGrn\" : \"grn:gs2:any:any:skillTree:{namespaceName}:model:{nodeModelName}\" } ] restrainReturnRate 타입 활성화 조건 필수 기본값 값 제한 설명 restrainReturnRate float 1.0 0.0 ~ 1.0 반환율 이 노드를 구속(미해방 상태로 되돌림)했을 때 소비된 리소스가 반환되는 비율입니다. 1.0은 전액 반환, 0.5는 절반 반환, 0.0은 반환 없음을 의미합니다. 기본값은 1.0(전액 반환)입니다. 유효 범위: 0.0~1.0. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2SkillTree:NodeModel\" , \"targetFieldName\" : \"restrainReturnRate\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2SkillTree:NodeModel 노드 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2SkillTree:NodeModel\" , \"targetGrn\" : \"grn:gs2:any:any:skillTree:{namespaceName}:model:{nodeModelName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-SkillTree Buff 레퍼런스","url":"/ko/api_reference/skill_tree/buff/"},{"content":"Note 버프 엔트리 모델에 대한 자세한 내용은 BuffEntryModel 을 참조해 주세요. Models 버프 적용 가능한 모델의 종류 Gs2Stamina:Stamina 스태미나 버프 적용 대상 필드 maxValue 타입 활성화 조건 필수 기본값 값 제한 설명 maxValue int  1 ~ 2147483646 스태미나 최대값 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 MaxStaminaTable로 오버라이드되는 사용자별 스태미나 최대값입니다. 오버플로우가 비활성화된 경우 initialCapacity가 하한이 됩니다. 오버플로우가 활성화된 경우 maxCapacity가 상한이 됩니다. 자연 회복은 이 값에서 멈춥니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Stamina:Stamina\" , \"targetFieldName\" : \"maxValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Stamina:StaminaModel 스태미나 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Stamina:StaminaModel\" , \"targetGrn\" : \"grn:gs2:any:any:stamina:{namespaceName}:model:{staminaName}\" } ] recoverIntervalMinutes 타입 활성화 조건 필수 기본값 값 제한 설명 recoverIntervalMinutes int 1 ~ 2147483646 스태미나 회복 간격(분) StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 RecoverIntervalTable로 오버라이드되는 사용자별 회복 간격(분)입니다. 테이블이 설정되어 있지 않은 경우, 모델의 기본값인 recoverIntervalMinutes로 대체됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Stamina:Stamina\" , \"targetFieldName\" : \"recoverIntervalMinutes\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Stamina:StaminaModel 스태미나 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Stamina:StaminaModel\" , \"targetGrn\" : \"grn:gs2:any:any:stamina:{namespaceName}:model:{staminaName}\" } ] recoverValue 타입 활성화 조건 필수 기본값 값 제한 설명 recoverValue int 1 ~ 2147483646 스태미나 회복량 StaminaModel로부터 결정되며, 옵션으로 플레이어의 GS2-Experience 랭크에 따라 RecoverValueTable로 오버라이드되는 사용자별 틱당 회복량입니다. 테이블이 설정되어 있지 않은 경우, 모델의 기본값인 recoverValue로 대체됩니다. 마스터 데이터 작성 예 rate 에는 대상 필드에 대한 보정 배율을 지정합니다. JSON \"targetModel\" : { \"targetModelName\" : \"Gs2Stamina:Stamina\" , \"targetFieldName\" : \"recoverValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Stamina:StaminaModel 스태미나 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Stamina:StaminaModel\" , \"targetGrn\" : \"grn:gs2:any:any:stamina:{namespaceName}:model:{staminaName}\" } ] Action 버프 적용 가능한 액션의 종류 Gs2Stamina:ConsumeStamina 스타미나 소비 현재 스타미나 값에서 지정된 양을 차감합니다. 현재 스타미나 값이 소비량보다 적은 경우 Insufficient 오류를 반환합니다. 버프 적용 대상 필드 consumeValue Stamina - 스태미나 타입 활성화 조건 필수 기본값 값 제한 설명 consumeValue int  1 ~ 2147483646 소비할 스타미나 양 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Stamina:ConsumeStamina\" , \"targetFieldName\" : \"consumeValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Stamina:StaminaModel 스태미나 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Stamina:StaminaModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:stamina:{namespaceName}:model:{staminaName}\" } ] Gs2Stamina:ConsumeStaminaByUserId 사용자 ID를 지정하여 스타미나 소비 지정된 사용자의 현재 스타미나 값에서 지정된 양을 차감합니다. 현재 스타미나 값이 소비량보다 적은 경우 Insufficient 오류를 반환합니다. 버프 적용 대상 필드 consumeValue Stamina - 스태미나 타입 활성화 조건 필수 기본값 값 제한 설명 consumeValue int  1 ~ 2147483646 소비할 스타미나 양 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Stamina:ConsumeStaminaByUserId\" , \"targetFieldName\" : \"consumeValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Stamina:StaminaModel 스태미나 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Stamina:StaminaModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:stamina:{namespaceName}:model:{staminaName}\" } ] Gs2Stamina:RecoverStaminaByUserId 사용자 ID를 지정하여 스타미나 회복 지정된 양의 스타미나를 최대 용량까지 회복합니다. 회복으로 인해 값이 최대값을 초과하고 오버플로 모드가 활성화된 경우, 초과분은 오버플로 값으로 기록됩니다. 버프 적용 대상 필드 recoverValue Stamina - 스태미나 타입 활성화 조건 필수 기본값 값 제한 설명 recoverValue int  1 ~ 2147483646 스타미나의 회복량 마스터 데이터 작성 예 JSON \"targetAction\" : { \"targetActionName\" : \"Gs2Stamina:RecoverStaminaByUserId\" , \"targetFieldName\" : \"recoverValue\" , \"conditionGrns\" : [ ], \"rate\" : 1.0 } 버프 적용 조건 모델 Gs2Stamina:StaminaModel 스태미나 모델 마스터 데이터 작성 예 JSON \"conditionGrns\" : [ { \"targetModelName\" : \"Gs2Stamina:StaminaModel\" , \"targetGrn\" : \"grn:gs2:{region}:{ownerId}:stamina:{namespaceName}:model:{staminaName}\" } ]","lang":"ko","section":"api_reference","summary":"GS2-Buff로 버프를 적용할 때 지정하는, 파라미터 보정이 가능한 모델/액션 내 필드와 그 적용 범위 설정에 대해\n","title":"GS2-Stamina Buff 레퍼런스","url":"/ko/api_reference/stamina/buff/"},{"content":"마스터 데이터 업데이트 작업을 자동화함으로써 사람의 실수를 줄이고 개발 사이클을 빠르게 만들 수 있습니다. 자동화 흐름 일반적인 자동화 흐름은 다음과 같습니다. 데이터 작성 : Excel이나 Google 스프레드시트, CSV 등으로 마스터 데이터를 작성합니다. 변환 : 스프레드시트에서 GS2의 마스터 데이터 형식(JSON)으로 변환합니다. 커밋 : 변환 후의 JSON 또는 GS2-Deploy의 템플릿을 Git 저장소에 커밋합니다. 배포 : CI 도구(GitHub Actions, CircleCI 등)가 변경 사항을 감지하여 GS2에 반영합니다. 배포 자동화 GS2-Deploy를 사용하는 경우 GS2-Deploy의 템플릿에 마스터 데이터를 담아 둔 경우, CI에서 GS2-Deploy의 스택을 업데이트함으로써 반영할 수 있습니다. GitHub Actions 예시: jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: GS2 Deploy run: | # gs2-cli 등을 사용하여 스택을 업데이트 gs2-cli deploy update-stack --stack-name master-data --template-file template.yaml 관리 콘솔의 내보내기/가져오기를 사용하는 경우 각 마이크로서비스의 CurrentItemModelMaster 를 업데이트하는 API를 호출함으로써 JSON 파일의 내용을 반영할 수 있습니다. 권장 사항 검증 환경에서의 테스트 : 프로덕션 환경에 반영하기 전에, 반드시 검증용 프로젝트/네임스페이스에 배포하여 동작 확인을 진행하세요. 밸리데이션 : 배포 전에 스크립트 등으로 데이터의 정합성 체크(ID 중복 체크나 관련 리소스의 존재 체크)를 수행할 것을 강력히 권장합니다.","lang":"ko","section":"articles","summary":"GitHub Actions 등을 사용한 마스터 데이터 자동 업데이트\n","title":"마스터 데이터의 CI/CD","url":"/ko/articles/master_data/cicd/"},{"content":"GS2는 종량제 요금제를 채택하고 있기 때문에 게임 설계에 따라 이용 요금이 크게 달라질 수 있습니다. 이 섹션에서는 성능을 유지하면서 비용을 억제하기 위한 설계 포인트를 설명합니다. 1. API 호출 횟수 절감 GS2 요금에서 큰 비중을 차지하는 것이 API 요청 수입니다. SDK의 캐시 메커니즘 활용 GS2 SDK에는 캐시 메커니즘이 내장되어 있습니다. 동일한 데이터를 짧은 시간에 여러 번 가져올 경우, 서버에 요청을 보내지 않고 캐시에서 반환하도록 설계되어 있습니다. SDK 각 메서드의 Future 나 Async 버전을 사용할 때는 가능한 한 고수준 API(Domain 객체를 통한 접근)를 사용해 주세요. 한꺼번에 가져오기·갱신하기 예를 들어 여러 아이템의 소지 수량을 가져올 경우, 개별적으로 API를 호출하는 것이 아니라 인벤토리 전체를 한 번에 가져오는 편이 요청 수를 줄일 수 있습니다. 2. GS2-Deploy를 통한 적절한 리소스 관리 불필요한 네임스페이스나 리소스가 남아 있으면, 미미하더라도 스토리지 요금이나 관리 비용이 계속 발생하는 경우가 있습니다. 개발 환경이나 검증 환경은 필요 없어지면 GS2-Deploy의 스택을 삭제함으로써 관련 리소스를 일괄로 정리할 수 있습니다. 3. GS2-Script의 실행 효율 GS2-Script의 실행 요금은 실행 시간에 따라 변동됩니다. 효율적인 코드 : 반복문 내에서 불필요한 API 호출을 피하는 등, Lua 스크립트 자체의 효율을 높여 실행 시간을 단축해 주세요. 외부 통신 최소화 : http.get 등의 외부 통신은 실행 시간을 늘리는 요인이 됩니다. 또한 메모리 사용량은 요금에 직접 영향을 미치지는 않지만, 사용 가능한 메모리 용량에는 제한이 있다는 점에 유의해 주세요. 4. 로그와 분석 활용 각 마이크로서비스의 네임스페이스 설정에서 GS2-Log를 연동하면, 각 마이크로서비스의 액세스 로그(요청·응답 내용)를 수집할 수 있습니다. 이를 통해 특정 기능이 예상보다 많은 요청을 발생시키고 있지 않은지, 어떤 API가 비용 요인이 되고 있는지를 상세히 분석하여 최적화에 활용할 수 있습니다.","lang":"ko","section":"articles","summary":"GS2 이용 요금을 최적화하기 위한 설계 가이드\n","title":"비용 최적화","url":"/ko/articles/tech/cost/"},{"content":"","lang":"ko","section":"design_knowledge","summary":"여기에서는 Game Server Services와 직접적인 관련이 없는, 게임 디자인에 관한 지식을 정리합니다","title":"게임 디자인 지식","url":"/ko/design_knowledge/"},{"content":"성공을 거둔 타이틀이 당연하다는 듯이 실천하고 있는 노력에 대해 배워봅시다.","lang":"ko","section":"design_knowledge","summary":"과거의 성공 사례에서 배워봅시다","title":"성공에서 배우다","url":"/ko/design_knowledge/success/"},{"content":"배워야 할 것은 성공이 아니라 실패로부터입니다! 자신도 같은 실패를 저지르지 않으려면 어떻게 해야 할지 생각하면서 게임 디자인을 합시다.","lang":"ko","section":"design_knowledge","summary":"과거의 실패 사례를 바탕으로 무엇이 잘못되었는지, 어떻게 했어야 했는지 배워봅시다","title":"실패에서 배우다","url":"/ko/design_knowledge/fail/"},{"content":"","lang":"ko","section":"api_reference","summary":"","title":"API 레퍼런스","url":"/ko/api_reference/"},{"content":"마이크로서비스 소개 / GS2-Account","lang":"ko","section":"api_reference","summary":"계정 관리 기능\n","title":"GS2-Account API 레퍼런스","url":"/ko/api_reference/account/"},{"content":"마이크로서비스 소개 / GS2-AdReward","lang":"ko","section":"api_reference","summary":"광고 리워드 기능\n","title":"GS2-AdReward API 레퍼런스","url":"/ko/api_reference/ad_reward/"},{"content":"","lang":"ko","section":"api_reference","summary":"인증 기능\n","title":"GS2-Auth API 레퍼런스","url":"/ko/api_reference/auth/"},{"content":"마이크로서비스 소개 / GS2-Buff","lang":"ko","section":"api_reference","summary":"버프\n","title":"GS2-Buff API 레퍼런스","url":"/ko/api_reference/buff/"},{"content":"마이크로서비스 소개 / GS2-Chat","lang":"ko","section":"api_reference","summary":"텍스트 기반 채팅 기능\n","title":"GS2-Chat API 레퍼런스","url":"/ko/api_reference/chat/"},{"content":"마이크로서비스 소개 / GS2-Datastore","lang":"ko","section":"api_reference","summary":"바이너리 데이터 스토리지 기능\n","title":"GS2-Datastore API 레퍼런스","url":"/ko/api_reference/datastore/"},{"content":"마이크로서비스 소개 / GS2-Deploy","lang":"ko","section":"api_reference","summary":"마스터 데이터 CI/CD 기능\n","title":"GS2-Deploy API 레퍼런스","url":"/ko/api_reference/deploy/"},{"content":"마이크로서비스 소개 / GS2-Dictionary","lang":"ko","section":"api_reference","summary":"도감 기능\n","title":"GS2-Dictionary API 레퍼런스","url":"/ko/api_reference/dictionary/"},{"content":"마이크로서비스 소개 / GS2-Distributor","lang":"ko","section":"api_reference","summary":"트랜잭션 처리 기능\n","title":"GS2-Distributor API 레퍼런스","url":"/ko/api_reference/distributor/"},{"content":"마이크로서비스 소개 / GS2-Enchant","lang":"ko","section":"api_reference","summary":"인챈트·랜덤 파라미터 기능\n","title":"GS2-Enchant API 레퍼런스","url":"/ko/api_reference/enchant/"},{"content":"마이크로서비스 소개 / GS2-Enhance","lang":"ko","section":"api_reference","summary":"강화 기능\n","title":"GS2-Enhance API 레퍼런스","url":"/ko/api_reference/enhance/"},{"content":"마이크로서비스 소개 / GS2-Exchange","lang":"ko","section":"api_reference","summary":"게임 내 리소스 교환 기능\n","title":"GS2-Exchange API 레퍼런스","url":"/ko/api_reference/exchange/"},{"content":"마이크로서비스 소개 / GS2-Experience","lang":"ko","section":"api_reference","summary":"경험치·랭크 기능\n","title":"GS2-Experience API 레퍼런스","url":"/ko/api_reference/experience/"},{"content":"마이크로서비스 소개 / GS2-Formation","lang":"ko","section":"api_reference","summary":"파티·장비 편성 기능\n","title":"GS2-Formation API 레퍼런스","url":"/ko/api_reference/formation/"},{"content":"마이크로서비스 소개 / GS2-Freeze Tip GS2-Freeze는 게임에서 이용하는 GS2 API 버전을 고정하고, 임의의 시점에 버전을 업데이트할 수 있는 구조를 제공합니다. 이 기능은 엔터프라이즈 전용 기능으로, 널리 제공되는 기능이 아닙니다. 자세한 내용은 지원팀에 문의해 주세요.","lang":"ko","section":"api_reference","summary":"GS2 마이크로서비스의 버전을 고정하는 엔터프라이즈용 기능\n","title":"GS2-Freeze API 레퍼런스","url":"/ko/api_reference/freeze/"},{"content":"마이크로서비스 소개 / GS2-Friend","lang":"ko","section":"api_reference","summary":"친구·팔로우 기능\n","title":"GS2-Friend API 레퍼런스","url":"/ko/api_reference/friend/"},{"content":"마이크로서비스 소개 / GS2-Gateway","lang":"ko","section":"api_reference","summary":"WebSocket 알림 기능\n","title":"GS2-Gateway API 레퍼런스","url":"/ko/api_reference/gateway/"},{"content":"마이크로서비스 소개 / GS2-Grade","lang":"ko","section":"api_reference","summary":"그레이드·희귀도 기능\n","title":"GS2-Grade API 레퍼런스","url":"/ko/api_reference/grade/"},{"content":"마이크로서비스 소개 / GS2-Guard","lang":"ko","section":"api_reference","summary":"치트 방지·WAF·차단 정책 기능\n","title":"GS2-Guard API 레퍼런스","url":"/ko/api_reference/guard/"},{"content":"마이크로서비스 소개 / GS2-Guild","lang":"ko","section":"api_reference","summary":"길드 기능\n","title":"GS2-Guild API 레퍼런스","url":"/ko/api_reference/guild/"},{"content":"마이크로서비스 소개 / GS2-Identifier","lang":"ko","section":"api_reference","summary":"크리덴셜 관리 기능\n","title":"GS2-Identifier API 레퍼런스","url":"/ko/api_reference/identifier/"},{"content":"마이크로서비스 소개 / GS2-Idle","lang":"ko","section":"api_reference","summary":"방치 보상 기능\n","title":"GS2-Idle API 레퍼런스","url":"/ko/api_reference/idle/"},{"content":"마이크로서비스 소개 / GS2-Inbox","lang":"ko","section":"api_reference","summary":"선물 상자 기능\n","title":"GS2-Inbox API 레퍼런스","url":"/ko/api_reference/inbox/"},{"content":"마이크로서비스 소개 / GS2-Inventory","lang":"ko","section":"api_reference","summary":"소지품 관리 기능\n","title":"GS2-Inventory API 레퍼런스","url":"/ko/api_reference/inventory/"},{"content":"마이크로서비스 소개 / GS2-JobQueue","lang":"ko","section":"api_reference","summary":"비동기 잡 큐\n","title":"GS2-JobQueue API 레퍼런스","url":"/ko/api_reference/job_queue/"},{"content":"마이크로서비스 소개 / GS2-Key","lang":"ko","section":"api_reference","summary":"암호화 키 관리 기능\n","title":"GS2-Key API 레퍼런스","url":"/ko/api_reference/key/"},{"content":"마이크로서비스 소개 / GS2-Limit","lang":"ko","section":"api_reference","summary":"횟수 제한 기능\n","title":"GS2-Limit API 레퍼런스","url":"/ko/api_reference/limit/"},{"content":"마이크로서비스 소개 / GS2-Lock","lang":"ko","section":"api_reference","summary":"분산 배타 제어 기능\n","title":"GS2-Lock API 레퍼런스","url":"/ko/api_reference/lock/"},{"content":"마이크로서비스 소개 / GS2-Log","lang":"ko","section":"api_reference","summary":"API 접근 로그 및 분석 기능\n","title":"GS2-Log API 레퍼런스","url":"/ko/api_reference/log/"},{"content":"마이크로서비스 소개 / GS2-LoginReward","lang":"ko","section":"api_reference","summary":"로그인 보너스 기능\n","title":"GS2-LoginReward API 레퍼런스","url":"/ko/api_reference/login_reward/"},{"content":"마이크로서비스 소개 / GS2-Lottery","lang":"ko","section":"api_reference","summary":"추첨 처리 기능\n","title":"GS2-Lottery API 레퍼런스","url":"/ko/api_reference/lottery/"},{"content":"마이크로서비스 소개 / GS2-Matchmaking","lang":"ko","section":"api_reference","summary":"매치메이킹 기능\n","title":"GS2-Matchmaking API 레퍼런스","url":"/ko/api_reference/matchmaking/"},{"content":"","lang":"ko","section":"api_reference","summary":"대규모 3D 공간에서의 효율적인 플레이어 위치 동기화 기능\n","title":"GS2-MegaField API 레퍼런스","url":"/ko/api_reference/mega_field/"},{"content":"마이크로서비스 소개 / GS2-Mission","lang":"ko","section":"api_reference","summary":"미션·실적 기능\n","title":"GS2-Mission API 레퍼런스","url":"/ko/api_reference/mission/"},{"content":"마이크로서비스 소개 / GS2-Money Warning GS2-Money2가 릴리스되었습니다. 특별한 이유가 없는 한 새로 이용하실 경우 GS2-Money2 를 이용해 주세요.","lang":"ko","section":"api_reference","summary":"유료 통화 관리 기능\n","title":"GS2-Money API 레퍼런스","url":"/ko/api_reference/money/"},{"content":"마이크로서비스 소개 / GS2-Money2 Tip GS2-Money2는 이름 그대로 버전 2에 해당하는 마이크로서비스입니다. 이전 버전에 관한 문서는 GS2-Money 를 참조해 주세요.","lang":"ko","section":"api_reference","summary":"과금 통화 관리 기능\n","title":"GS2-Money2 API 레퍼런스","url":"/ko/api_reference/money2/"},{"content":"마이크로서비스 소개 / GS2-News","lang":"ko","section":"api_reference","summary":"공지 배포 기능\n","title":"GS2-News API 레퍼런스","url":"/ko/api_reference/news/"},{"content":"마이크로서비스 소개 / GS2-Quest","lang":"ko","section":"api_reference","summary":"진행 상황 관리 기능\n","title":"GS2-Quest API 레퍼런스","url":"/ko/api_reference/quest/"},{"content":"마이크로서비스 소개 / GS2-Ranking Warning GS2-Ranking2가 릴리스되었습니다. 특별한 이유가 없는 한 새로 이용하실 경우 GS2-Ranking2 를 이용해 주세요.","lang":"ko","section":"api_reference","summary":"랭킹 기능\n","title":"GS2-Ranking API 레퍼런스","url":"/ko/api_reference/ranking/"},{"content":"마이크로서비스 소개 / GS2-Ranking2 Tip GS2-Ranking2는 이름 그대로 버전 2에 해당하는 마이크로서비스입니다. 이전 버전에 관한 문서는 GS2-Ranking 를 참조해 주세요.","lang":"ko","section":"api_reference","summary":"랭킹 기능\n","title":"GS2-Ranking2 API 레퍼런스","url":"/ko/api_reference/ranking2/"},{"content":"마이크로서비스 소개 / GS2-Realtime","lang":"ko","section":"api_reference","summary":"실시간 통신 기능\n","title":"GS2-Realtime API 레퍼런스","url":"/ko/api_reference/realtime/"},{"content":"마이크로서비스 소개 / GS2-Schedule","lang":"ko","section":"api_reference","summary":"이벤트 스케줄 기능\n","title":"GS2-Schedule API 레퍼런스","url":"/ko/api_reference/schedule/"},{"content":"마이크로서비스 소개 / GS2-Script","lang":"ko","section":"api_reference","summary":"Lua 스크립트 실행 환경\n","title":"GS2-Script API 레퍼런스","url":"/ko/api_reference/script/"},{"content":"마이크로서비스 소개 / GS2-SeasonRating","lang":"ko","section":"api_reference","summary":"시즌 레이팅 기능\n","title":"GS2-SeasonRating API 레퍼런스","url":"/ko/api_reference/season_rating/"},{"content":"마이크로서비스 소개 / GS2-SerialKey","lang":"ko","section":"api_reference","summary":"시리얼 코드 기능\n","title":"GS2-SerialKey API 레퍼런스","url":"/ko/api_reference/serial_key/"},{"content":"마이크로서비스 소개 / GS2-Showcase","lang":"ko","section":"api_reference","summary":"상품 판매 기능\n","title":"GS2-Showcase API 레퍼런스","url":"/ko/api_reference/showcase/"},{"content":"마이크로서비스 소개 / GS2-SkillTree","lang":"ko","section":"api_reference","summary":"스킬 트리 기능\n","title":"GS2-SkillTree API 레퍼런스","url":"/ko/api_reference/skill_tree/"},{"content":"마이크로서비스 소개 / GS2-Stamina","lang":"ko","section":"api_reference","summary":"스타미나 기능\n","title":"GS2-Stamina API 레퍼런스","url":"/ko/api_reference/stamina/"},{"content":"마이크로서비스 소개 / GS2-StateMachine","lang":"ko","section":"api_reference","summary":"스테이트 머신 관리 기능\n","title":"GS2-StateMachine API 레퍼런스","url":"/ko/api_reference/state_machine/"},{"content":"마이크로서비스 소개 / GS2-Version","lang":"ko","section":"api_reference","summary":"버전 체크 기능\n","title":"GS2-Version API 레퍼런스","url":"/ko/api_reference/version/"},{"content":"GSL은 가독성과 표현력이 뛰어난 스테이트 머신 정의 언어이지만, IDE의 입력 지원이나 학습 비용의 관점에서는 뛰어나다고 하기 어려운 측면이 있습니다. 다양한 프로그래밍 언어를 사용하여 GSL을 정의하는 방법으로 CDK를 이용할 수 있습니다. CDK 상세 정보 스테이트 머신 정의 시작 스테이트 머신 정의를 시작하려면 다음 구문을 사용합니다. Language: Java PHP Python TypeScript C# class TestStateMachine extends io . gs2 . cdk . stateMachine . integration . StateMachineDefinition { public TestStateMachine () { // 여기에 스테이트 정의를 기술 } } class TestStateMachine extends \\Gs2Cdk\\StateMachine\\Integration\\StateMachineDefinition { public function __construct () { parent :: __construct (); // 여기에 스테이트 정의를 기술 } } class TestStateMachine ( gs2_cdk . state_machine . StateMachineDefinition ): def __init__ ( self ): # 여기에 스테이트 정의를 기술 class TestStateMachine extends StateMachineDefinition { constructor () { super (); // 여기에 스테이트 정의를 기술 } } public class TestStateMachine : Gs2Cdk . Gs2StateMachine . Integration . StateMachineDefinition { public TestStateMachine () { // 여기에 스테이트 정의를 기술 } } 스테이트 머신 정의 Language: Java PHP Python TypeScript C# stateMachine ( \"MainStateMachine\" , // 스테이트 머신의 이름 new IVariable [] { new IntType ( \"turn\" ) } // 스테이트 머신이 받는 파라미터 ) . entryPoint ( task1 . getName ()) // 스테이트 머신의 첫 번째 스테이트 이름 . task ( task1 , task2 , error // 스테이트의 종류 ); $this -\u003e stateMachine ( \"MainStateMachine\" , // 스테이트 머신의 이름 [ new IntType ( \"turn\" ), ] // 스테이트 머신이 받는 파라미터 ) -\u003e entryPoint ( $task1 -\u003e getName ()) // 스테이트 머신의 첫 번째 스테이트 이름 -\u003e task ( $task1 , $task2 , $error // 스테이트의 종류 ); self . state_machine ( name = \"MainStateMachine\" , # 스테이트 머신의 이름 variables = [ self . int_type ( \"turn\" ), ], # 스테이트 머신이 받는 파라미터 ) . entry_point ( task_name = task1 . name , # 스테이트 머신의 첫 번째 스테이트 이름 ) . task ( task1 , task2 , error , # 스테이트의 종류 ) this . stateMachine ( \"MainStateMachine\" , // 스테이트 머신의 이름 [ this . intType ( \"turn\" ), ] // 스테이트 머신이 받는 파라미터 ) . entryPoint ( task1 . name ) // 스테이트 머신의 첫 번째 스테이트 이름 . task ( task1 , task2 , error // 스테이트의 종류 ) StateMachine ( \"MainStateMachine\" , // 스테이트 머신의 이름 new IVariable [] { IntType ( \"turn\" ) } // 스테이트 머신이 받는 파라미터 ) . EntryPoint ( task1 . Name ) // 스테이트 머신의 첫 번째 스테이트 이름 . Task ( task1 , task2 , error // 스테이트의 종류 ); 스테이트 정의 Task Language: Java PHP Python TypeScript C# var task1 = scriptTask ( \"Task1\" , // 스테이트 이름 new IVariable [ 0 ] , // 스테이트가 받는 파라미터 목록 \"\"\" result = 'Pass' \"\"\" // 스테이트로 전환되었을 때 실행할 Lua 스크립트 ) . result ( \"Pass\" , // 스크립트가 발행하는 결과(Pass) new HashMap \u003c\u003e (), // 다음 스테이트에 전달할 파라미터 task2 . getName () // Pass가 발행된 경우 전환할 스테이트 이름 ) . result ( \"Error\" , // 스크립트가 발행하는 결과(Error) Map . of ( new StringType ( \"reason\" ), // 다음 스테이트에 전달할 파라미터의 이름과 타입 \"reason\" // 파라미터에 전달할 Lua 변수명 ), error . getName () // Error가 발행된 경우 전환할 스테이트 이름 ); $task1 = $this -\u003e scriptTask ( \"Task1\" , // 스테이트 이름 [], // 스테이트가 받는 파라미터 목록 \"result = 'Pass'\" // 스테이트로 전환되었을 때 실행할 Lua 스크립트 ) -\u003e result ( \"Pass\" , // 스크립트가 발행하는 결과(Pass) [], // 다음 스테이트에 전달할 파라미터 $task2 -\u003e getName () // Pass가 발행된 경우 전환할 스테이트 이름 ) -\u003e result ( \"Error\" , // 스크립트가 발행하는 결과(Error) [ [ new StringType ( 'reason' ), // 다음 스테이트에 전달할 파라미터의 이름과 타입 'reason' // 파라미터에 전달할 Lua 변수명 ], ], $error -\u003e getName () // Error가 발행된 경우 전환할 스테이트 이름 ); task1 = self . script_task ( name = \"Task1\" , # 스테이트 이름 arguments = [], # 스테이트가 받는 파라미터 목록 script = \"\"\" result = 'Pass' \"\"\" , # 스테이트로 전환되었을 때 실행할 Lua 스크립트 ) . result ( result_name = \"Pass\" , # 스크립트가 발행하는 결과(Pass) emit_event_argument_variable_names = {}, # 다음 스테이트에 전달할 파라미터 next_task_name = task2 . name , # Pass가 발행된 경우 전환할 스테이트 이름 ) . result ( result_name = \"Error\" , # 스크립트가 발행하는 결과(Error) emit_event_argument_variable_names = { self . string_type ( \"reason\" ): # 다음 스테이트에 전달할 파라미터의 이름과 타입 \"reason\" , # 파라미터에 전달할 Lua 변수명 }, next_task_name = error . name , # Error가 발행된 경우 전환할 스테이트 이름 ) let task1 = this . scriptTask ( \"Task1\" , // 스테이트 이름 [], // 스테이트가 받는 파라미터 목록 ` result = 'Pass' ` // 스테이트로 전환되었을 때 실행할 Lua 스크립트 ) . result ( \"Pass\" , // 스크립트가 발행하는 결과(Pass) new Map (), // 다음 스테이트에 전달할 파라미터 task2 . getName () // Pass가 발행된 경우 전환할 스테이트 이름 ) . result ( \"Error\" , // 스크립트가 발행하는 결과(Error) new Map ([ [ new StringType ( \"reason\" ), // 다음 스테이트에 전달할 파라미터의 이름과 타입 \"reason\" // 파라미터에 전달할 Lua 변수명 ] ]), error . getName () // Error가 발행된 경우 전환할 스테이트 이름 ); var task1 = ScriptTask ( \"Task1\" , // 스테이트 이름 new IVariable [ 0 ], // 스테이트가 받는 파라미터 목록 @\" result = 'Pass' \" // 스테이트로 전환되었을 때 실행할 Lua 스크립트 ) . Result ( \"Pass\" , // 스크립트가 발행하는 결과(Pass) new Dictionary IVariable , string \u003e(), // 다음 스테이트에 전달할 파라미터 task2 . Name // Pass가 발행된 경우 전환할 스테이트 이름 ) . Result ( \"Error\" , // 스크립트가 발행하는 결과(Error) new Dictionary IVariable , string \u003e { { new StringType ( \"reason\" ), // 다음 스테이트에 전달할 파라미터의 이름과 타입 \"reason\" // 파라미터에 전달할 Lua 변수명 } }, error . Name // Error가 발행된 경우 전환할 스테이트 이름 ); SubStateMachineTask Language: Java PHP Python TypeScript C# var task3 = subStateMachineTask ( \"ChoiceSkill\" , // 스테이트 이름 \"ChoiceSkill\" , // 전환할 서브 스테이트 머신 이름 new InParam [] { this . inParam ( this . intType ( \"turn\" ), // 현재 실행 중인 스테이트 머신의 상태 변수 이름 this . intType ( \"turn\" ) // 서브 스테이트 머신의 첫 번째 스테이트에 파라미터로 전달할 인수 이름 ) }, new OutParam [] { this . outParam ( this . intType ( \"choiceSkill\" ), // 서브 스테이트 머신으로부터 결과로 받는 상태 변수 이름 this . intType ( \"choiceSkill\" ) // 서브 스테이트 머신에서 돌아온 후의 스테이트에 파라미터로 전달할 인수 이름 ) }, \"InGame\" // 서브 스테이트 머신에서 돌아온 후 전환할 스테이트 이름 ) $task3 = $this -\u003e subStateMachineTask ( \"ChoiceSkill\" , // 스테이트 이름 \"ChoiceSkill\" , // 전환할 서브 스테이트 머신 이름 [ $this -\u003e inParam ( $this -\u003e intType ( \"turn\" ), // 현재 실행 중인 스테이트 머신의 상태 변수 이름 $this -\u003e intType ( \"turn\" ) // 서브 스테이트 머신의 첫 번째 스테이트에 파라미터로 전달할 인수 이름 ) ], [ $this -\u003e outParam ( $this -\u003e intType ( \"choiceSkill\" ), // 서브 스테이트 머신으로부터 결과로 받는 상태 변수 이름 $this -\u003e intType ( \"choiceSkill\" ) // 서브 스테이트 머신에서 돌아온 후의 스테이트에 파라미터로 전달할 인수 이름 ) ], \"InGame\" // 서브 스테이트 머신에서 돌아온 후 전환할 스테이트 이름 ) task3 = self . sub_state_machine_task ( name = 'ChoiceSkill' , # 스테이트 이름 sub_state_machine_name = \"ChoiceSkill\" , # 전환할 서브 스테이트 머신 이름 in_params = [ self . in_param ( self . int_type ( \"turn\" ), # 현재 실행 중인 스테이트 머신의 상태 변수 이름 self . int_type ( \"turn\" ) # 서브 스테이트 머신의 첫 번째 스테이트에 파라미터로 전달할 인수 이름 ), ], out_params = [ self . out_param ( self . int_type ( \"choiceSkill\" ), # 서브 스테이트 머신으로부터 결과로 받는 상태 변수 이름 self . int_type ( \"choiceSkill\" ) # 서브 스테이트 머신에서 돌아온 후의 스테이트에 파라미터로 전달할 인수 이름 ), ], next_task_name = \"InGame\" , # 서브 스테이트 머신에서 돌아온 후 전환할 스테이트 이름 ) let task3 = this . subStateMachineTask ( \"ChoiceSkill\" , // 스테이트 이름 \"ChoiceSkill\" , // 전환할 서브 스테이트 머신 이름 [ this . inParam ( this . intType ( \"turn\" ), // 현재 실행 중인 스테이트 머신의 상태 변수 이름 this . intType ( \"turn\" ) // 서브 스테이트 머신의 첫 번째 스테이트에 파라미터로 전달할 인수 이름 ), ], [ this . outParam ( this . intType ( \"choiceSkill\" ), // 서브 스테이트 머신으로부터 결과로 받는 상태 변수 이름 this . intType ( \"choiceSkill\" ) // 서브 스테이트 머신에서 돌아온 후의 스테이트에 파라미터로 전달할 인수 이름 ), ], \"InGame\" // 서브 스테이트 머신에서 돌아온 후 전환할 스테이트 이름 ) var task3 = SubStateMachineTask ( \"ChoiceSkill\" , // 스테이트 이름 \"ChoiceSkill\" , // 전환할 서브 스테이트 머신 이름 new InParam [] { InParam ( IntType ( \"turn\" ), // 현재 실행 중인 스테이트 머신의 상태 변수 이름 IntType ( \"turn\" ) // 서브 스테이트 머신의 첫 번째 스테이트에 파라미터로 전달할 인수 이름 ) }, new OutParam [] { OutParam ( IntType ( \"choiceSkill\" ), // 서브 스테이트 머신으로부터 결과로 받는 상태 변수 이름 IntType ( \"choiceSkill\" ) // 서브 스테이트 머신에서 돌아온 후의 스테이트에 파라미터로 전달할 인수 이름 ) }, \"InGame\" // 서브 스테이트 머신에서 돌아온 후 전환할 스테이트 이름 ) WaitTask Language: Java PHP Python TypeScript C# var task4 = this . waitTask ( \"WaitChoiceSkill\" // 스테이트 이름 ). result ( \"ChoiceSkill\" , // 대기할 이벤트의 이름 new HashMap \u003c\u003e () {{ // 대기할 이벤트의 파라미터 put ( stringType ( \"skill\" ), // 전환 대상 스테이트에 전달할 파라미터의 타입과 이름 \"skill\" // 이벤트에서 받는 파라미터의 이름 ); }}, \"ChoiceSkill\" // 이 이벤트를 받았을 때 전환할 스테이트 이름 ). result ( \"ReLotterySkill\" , // 대기할 이벤트의 이름 new HashMap \u003c\u003e (), // 대기할 이벤트의 파라미터 \"ReLotterySkill\" // 이 이벤트를 받았을 때 전환할 스테이트 이름 ) $task4 = $this -\u003e waitTask ( \"WaitChoiceSkill\" // 스테이트 이름 ) -\u003e result ( \"ChoiceSkill\" , // 대기할 이벤트의 이름 [ // 대기할 이벤트의 파라미터 [ $this -\u003e stringType ( \"skill\" ), // 전환 대상 스테이트에 전달할 파라미터의 타입과 이름 \"skill\" // 이벤트에서 받는 파라미터의 이름 ] ], \"ChoiceSkill\" // 이 이벤트를 받았을 때 전환할 스테이트 이름 ) -\u003e result ( \"ReLotterySkill\" , // 대기할 이벤트의 이름 [], // 대기할 이벤트의 파라미터 \"ReLotterySkill\" // 이 이벤트를 받았을 때 전환할 스테이트 이름 ) task4 = self . wait_task ( name = \"WaitChoiceSkill\" , # 스테이트 이름 ) . result ( result_name = \"ChoiceSkill\" , # 대기할 이벤트의 이름 emit_event_argument_variable_names = { # 대기할 이벤트의 파라미터 self . string_type ( \"skill\" ): # 전환 대상 스테이트에 전달할 파라미터의 타입과 이름 \"skill\" , # 이벤트에서 받는 파라미터의 이름 }, next_task_name = \"ChoiceSkill\" , # 이 이벤트를 받았을 때 전환할 스테이트 이름 ) . result ( result_name = \"ReLotterySkill\" , # 대기할 이벤트의 이름 emit_event_argument_variable_names = { # 대기할 이벤트의 파라미터 }, next_task_name = \"ReLotterySkill\" , # 이 이벤트를 받았을 때 전환할 스테이트 이름 ) let task4 = this . waitTask ( \"WaitChoiceSkill\" // 스테이트 이름 ). result ( \"ChoiceSkill\" , // 대기할 이벤트의 이름 new Map IVariable , string \u003e() // 대기할 이벤트의 파라미터 . set ( this . stringType ( \"skill\" ), // 전환 대상 스테이트에 전달할 파라미터의 타입과 이름 \"skill\" // 이벤트에서 받는 파라미터의 이름 ), \"ChoiceSkill\" // 이 이벤트를 받았을 때 전환할 스테이트 이름 ). result ( \"ReLotterySkill\" , // 대기할 이벤트의 이름 new Map IVariable , string \u003e(), // 대기할 이벤트의 파라미터 \"ReLotterySkill\" // 이 이벤트를 받았을 때 전환할 스테이트 이름 ) var task4 = this . WaitTask ( \"WaitChoiceSkill\" // 스테이트 이름 ). Result ( \"ChoiceSkill\" , // 대기할 이벤트의 이름 new Dictionary IVariable , string \u003e{{ // 대기할 이벤트의 파라미터 StringType ( \"skill\" ), // 전환 대상 스테이트에 전달할 파라미터의 타입과 이름 \"skill\" // 이벤트에서 받는 파라미터의 이름 }}, \"ChoiceSkill\" // 이 이벤트를 받았을 때 전환할 스테이트 이름 ). Result ( \"ReLotterySkill\" , // 대기할 이벤트의 이름 new Dictionary IVariable , string \u003e(), // 대기할 이벤트의 파라미터 \"ReLotterySkill\" // 이 이벤트를 받았을 때 전환할 스테이트 이름 ) PassTask Language: Java PHP Python TypeScript C# var task2 = passTask ( \"Task2\" // 스테이트 이름 ); $task2 = $this -\u003e passTask ( \"Task2\" // 스테이트 이름 ); task2 = self . pass_task ( name = \"Task2\" # 스테이트 이름 ) let task2 = this . passTask ( \"Task2\" // 스테이트 이름 ); var task2 = PassTask ( \"Task2\" // 스테이트 이름 ); ErrorTask Language: Java PHP Python TypeScript C# var error = errorTask ( \"Error\" // 스테이트 이름 ); $error = $this -\u003e errorTask ( \"Error\" // 스테이트 이름 ); error = self . error_task ( name = \"Error\" # 스테이트 이름 ) let error = this . errorTask ( \"Error\" // 스테이트 이름 ); var error = ErrorTask ( \"Error\" // 스테이트 이름 ); 스택에 등록 Language: Java PHP Python TypeScript C# new io . gs2 . cdk . stateMachine . model . Namespace ( this , // Stack 객체 \"state-machine-0001\" // GS2-StateMachine의 네임스페이스 이름 ). stateMachine ( new io . gs2 . cdk . script . model . Namespace ( this , // Stack 객체 \"script-0001\" // GS2-Script의 네임스페이스 이름 ), new TestStateMachine () // StateMachineDefinition 객체 ); ( new \\Gs2Cdk\\StateMachine\\Model\\Namespace_ ( $this , // Stack 객체 \"state-machine-0001\" // GS2-StateMachine의 네임스페이스 이름 )) -\u003e stateMachine ( new \\Gs2Cdk\\Script\\Model\\Namespace_ ( $this , // Stack 객체 \"script-0001\" // GS2-Script의 네임스페이스 이름 ), new TestStateMachine () // StateMachineDefinition 객체 ); gs2_cdk . state_machine . Namespace ( self , # Stack 객체 name = 'state-machine-0001' , # GS2-StateMachine의 네임스페이스 이름 ) . state_machine ( script_namespace = gs2_cdk . script . Namespace ( self , # Stack 객체 name = 'script-0001' , # GS2-Script의 네임스페이스 이름 ), definition = TestStateMachine (), # StateMachineDefinition 객체 ) new StateMachineNamespace ( this , // Stack 객체 \"state-machine-0001\" // GS2-StateMachine의 네임스페이스 이름 ). stateMachine ( new ScriptNamespace ( this , // Stack 객체 \"script-0001\" // GS2-Script의 네임스페이스 이름 ), new TestStateMachine () // StateMachineDefinition 객체 ); new Gs2Cdk . Gs2StateMachine . Model . Namespace ( this , // Stack 객체 \"state-machine-0001\" // GS2-StateMachine의 네임스페이스 이름 ). StateMachine ( Gs2Cdk . Gs2Script . Model . Namespace ( this , // Stack 객체 \"script-0001\" // GS2-Script의 네임스페이스 이름 ), new TestStateMachine () // StateMachineDefinition 객체 ); 전체 샘플 Language: Java PHP Python TypeScript C# class TestStateMachine extends StateMachineDefinition { public TestStateMachine () { ErrorTask error = errorTask ( \"Error\" ); PassTask task2 = passTask ( \"Task2\" ); Task task1 = scriptTask ( \"Task1\" , new IVariable [ 0 ] , \"\"\" result = 'Pass' \"\"\" ) . result ( \"Pass\" , new HashMap \u003c\u003e (), task2 . getName ()) . result ( \"Error\" , Map . of ( new StringType ( \"reason\" ), \"reason\" ), error . getName ()); stateMachine ( \"MainStateMachine\" , new IVariable [] { new IntType ( \"turn\" )} ) . entryPoint ( task1 . getName ()) . task ( task1 , task2 , error ); } } class TestStateMachineStack extends Stack { public TestStateMachineStack () { super (); new io . gs2 . cdk . stateMachine . model . Namespace ( this , \"state-machine-0001\" ) . stateMachine ( new io . gs2 . cdk . script . model . Namespace ( this , \"script-0001\" ), new TestStateMachine () ); } } class TestStateMachine extends StateMachineDefinition { public function __construct () { parent :: __construct (); $error = $this -\u003e errorTask ( \"Error\" ); $task2 = $this -\u003e passTask ( \"Task2\" ); $task1 = $this -\u003e scriptTask ( \"Task1\" , [], \"result = 'Pass'\" ) -\u003e result ( \"Pass\" , [], $task2 -\u003e getName ()) -\u003e result ( \"Error\" , [[ new StringType ( 'reason' ), 'reason' ]], $error -\u003e getName ()); $this -\u003e stateMachine ( \"MainStateMachine\" , [ new IntType ( \"turn\" )] ) -\u003e entryPoint ( $task1 -\u003e getName ()) -\u003e task ( $task1 , $task2 , $error ); } } class TestStateMachineStack extends Stack { public function __construct () { parent :: __construct (); ( new \\Gs2Cdk\\StateMachine\\Model\\Namespace_ ( $this , \"state-machine-0001\" )) -\u003e stateMachine ( new \\Gs2Cdk\\Script\\Model\\Namespace_ ( $this , \"script-0001\" ), new TestStateMachine () ); } } class TestStateMachine ( gs2_cdk . state_machine . StateMachineDefinition ): def __init__ ( self ): task2 = self . pass_task ( \"Task2\" ) error = self . error_task ( \"Error\" ) task1 = self . script_task ( name = \"Task1\" , arguments = [], script = \"\"\" result = 'Pass' \"\"\" , ) . result ( result_name = \"Pass\" , emit_event_argument_variable_names = {}, next_task_name = task2 . name , ) . result ( result_name = \"Error\" , emit_event_argument_variable_names = { self . string_type ( \"reason\" ): \"reason\" , }, next_task_name = error . name , ) self . state_machine ( name = \"MainStateMachine\" , variables = [ self . int_type ( \"turn\" ), ], ) . entry_point ( task_name = task1 . name , ) . task ( task1 , task2 , error , ) class TestStateMachineStack ( gs2_cdk . Stack ): def __init__ ( self ): super () . __init__ () gs2_cdk . state_machine . Namespace ( self , name = 'state-machine-0001' , ) . state_machine ( script_namespace = gs2_cdk . script . Namespace ( self , name = 'script-0001' , ), definition = TestStateMachine (), ) class TestStateMachine extends StateMachineDefinition { constructor () { super (); let error = this . errorTask ( \"Error\" ); let task2 = this . passTask ( \"Task2\" ); let task1 = this . scriptTask ( \"Task1\" , [], ` result = 'Pass' ` ) . result ( \"Pass\" , new Map (), task2 . getName ()) . result ( \"Error\" , new Map ([[ new StringType ( \"reason\" ), \"reason\" ]]), error . getName ()); this . stateMachine ( \"MainStateMachine\" , [ new IntType ( \"turn\" )] ) . entryPoint ( task1 . getName ()) . task ( task1 , task2 , error ); } } class TestStateMachineStack extends Stack { constructor () { super (); new StateMachineNamespace ( this , \"state-machine-0001\" ). stateMachine ( new ScriptNamespace ( this , \"script-0001\" ), new TestStateMachine () ); } } public class TestStateMachine : StateMachineDefinition { public TestStateMachine () { var error = ErrorTask ( \"Error\" ); var task2 = PassTask ( \"Task2\" ); Task task1 = ScriptTask ( \"Task1\" , new IVariable [ 0 ], @\" result = 'Pass' \" ) . Result ( \"Pass\" , new Dictionary IVariable , string \u003e(), task2 . Name ) . Result ( \"Error\" , new Dictionary IVariable , string \u003e { { new StringType ( \"reason\" ), \"reason\" } }, error . Name ); StateMachine ( \"MainStateMachine\" , new IVariable [] { IntType ( \"turn\" ) } ) . EntryPoint ( task1 . Name ) . Task ( task1 , task2 , error ); } } public class TestStateMachineStack : Stack { public TestStateMachineStack () { new Gs2Cdk . Gs2StateMachine . Model . Namespace ( this , \"state-machine-0001\" ) . StateMachine ( new Gs2Cdk . Gs2Script . Model . Namespace ( this , \"script-0001\" ), new TestStateMachine () ); } }","lang":"ko","section":"api_reference","summary":"GS2 States Language를 CDK로 정의하기 위한 확장 구문에 대하여","title":"GS2 States Language 정의 확장","url":"/ko/api_reference/state_machine/deploy/extention/"},{"content":"가챠 연출은 화려하게 하고 싶습니다. 그러나 그 과정에서 거짓말을 하면 법률에 의해 제재를 받을 위험이 있습니다. 어떤 게임에서는 가챠 연출로 상자 안에서 아이템을 꺼내는 연출을 하고 있었는데, 연출 중 상자 안 아이템의 표시와 실제 배출 확률 사이에 큰 괴리가 있었습니다. 연출상의 겉모습으로는 레어 아이템이 많이 들어 있어, 마치 레어 아이템을 쉽게 얻을 수 있을 것처럼 보였습니다. 이는 일본의 경품표시법에서 정한 우량오인, 즉 실제 성능 이상으로 상품을 좋게 보이려는 행위에 해당하는 것 아니냐는 논란이 일었습니다. 결국 이 사례에서 실제로 법률에 저촉되는지에 대한 결론은 나오지 않았지만, 적어도 위험이 있다는 점은 틀림없습니다. 연출을 제작할 때는 꼭 주의하시기 바랍니다.","lang":"ko","section":"design_knowledge","summary":"가챠 연출의 설계에 대해","title":"가챠 연출","url":"/ko/design_knowledge/fail/gacha_effect/"},{"content":"육성에 사용하는 소재나 게임 내 통화 같은 자원에 대해, 플레이어가 얼마나 많은 수량을 보유하고 있는지, 획득량과 소비량의 균형은 어떤지와 같은 정보를 모니터링합시다. 자원의 획득량·소비량 균형이 플러스(+)인 경우에는 해당 자원을 소비하는 콘텐츠를 고려해야 합니다. 자원의 획득량·소비량 균형이 팽팽하게 맞서 있다면, 해당 자원을 배출하는 콘텐츠를 고려해야 합니다. 다만, 자원을 희소한 것으로 설계하여 게임 밸런스를 잡고 있는 경우에는 의도한 대로 배출량을 그대로 유지하는 것이 바람직합니다. 이러한 자원은 매월 개최하는 이벤트의 플레이 보상으로 배출함으로써, 플레이어의 동기부여를 장기간 유지하는 요소로 활용할 수 있을 것입니다.","lang":"ko","section":"design_knowledge","summary":"게임 내에서 유통되는 자원량을 파악하여 게임 내 경제가 정상적인 상태를 유지하도록 합시다","title":"게임 내에서 유통되는 자원량을 파악하기","url":"/ko/design_knowledge/success/understand_amount_of_resources/"},{"content":"한 게임은 플레이어 만족도가 높지 않아 어찌할 바를 모르고 있었습니다. 그래서 개편을 검토하기 시작합니다. 그리고 그 결과로 메인 게임을 완전히 새로운 것으로 변경한다는 결단이 내려졌습니다. 몇 달 후, 새로운 메인 게임이 도입된 대규모 업데이트가 시행되었습니다. 하지만 해당 버전으로 업데이트한 플레이어들은 격노했습니다. “업데이트 전 게임이 더 재미있었다” 실제로 그런지는 차치하더라도, 업데이트 후에 웬만큼 좋아지지 않은 이상 이런 목소리가 나오는 것은 피할 수 없는 상황일 것입니다. 곁에서 지켜보는 제3자의 입장에서는 그 결단 자체가 “그렇게는 안 될 텐데” 싶은 인상이지만, 개편을 하더라도 좀 더 작은 단계로 나누어 진행하는 편이 나을 것 같습니다.","lang":"ko","section":"design_knowledge","summary":"과도한 개편에 대해","title":"과도한 개편","url":"/ko/design_knowledge/fail/too_much_leverage/"},{"content":"장기간에 걸쳐 플레이어가 플레이하도록 하기 위해서는, 단기적으로는 너무 많이 플레이하게 하지 않는 편이 좋습니다. 무제한으로 플레이할 수 있게 되면, 장시간 플레이하는 플레이어와 단시간 플레이하는 플레이어의 격차가 벌어질 뿐만 아니라, 장시간 플레이하는 플레이어의 “콘텐츠 부족을 어떻게든 해결해 달라” 는 목소리와, 단시간 플레이하는 플레이어의 “콘텐츠 부족 이외의 요청” 이라는 두 가지 목소리에 귀를 기울여야 하는 상황이 발생합니다. 개발자가 대응해야 할 과제를 좁히는 편이, 더 많은 플레이어를 만족시키는 개발에 리소스를 집중할 수 있습니다. 장기간 플레이하지 못하도록 일반적으로 사용되는 방법이 “스태미나” 입니다. 스태미나는 게임 내 리소스 중 하나로, 돈을 지불하지 않아도 실제 시간의 경과에 따라 회복되는 리소스입니다. 게임을 플레이하기 위해 이 리소스를 소비하도록 함으로써, 시간당 플레이 횟수를 제한할 수 있습니다. 또 하나의 접근 방식은, 얼마든지 플레이할 수는 있지만 입수 가능한 자원의 총량에 상한을 두는 방법입니다. 두 방법 모두 플레이어가 획득할 수 있는 시간당 자원량을 개발자가 컨트롤할 수 있도록 함으로써, 플레이어 간의 격차를 줄이고 있습니다. 전자가 더 우수한 점은, “아직 더 플레이하고 싶다” 는 마음을 남긴 채 게임을 종료하게 함으로써, 다시 게임을 실행해 줄 가능성을 높일 수 있다는 점입니다. 장기 운영형 게임의 요령으로는, 매일 획득할 수 있는 스태미나를 모두 다 쓰는 데 필요한 시간을 최대한 짧게 하는 것입니다. 하루에 1시간 플레이하는 라이프사이클보다, 하루에 15분 플레이하는 라이프사이클이 플레이어에게 주는 부담이 작아, 계속 플레이해 줄 확률을 높이게 되기 때문입니다.","lang":"ko","section":"design_knowledge","summary":"장기간 플레이하게 하기 위해, 단기간에 너무 많이 플레이하게 하지 않는다","title":"너무 많이 플레이하게 하지 않는다","url":"/ko/design_knowledge/success/dont_play_too_much/"},{"content":"이벤트에서는 많은 플레이어에게 서프라이즈를 전달하여, 지금까지 플레이하지 않던 플레이어에게도 플레이할 계기를 만들어 주거나, 한 번 이탈한 플레이어를 다시 불러오고 싶습니다. 이벤트를 기획하는 과정에서 너무 화려한 경품으로 실패한 사례에 대한 이야기입니다. 게임 내에서 로또를 실시하여 당첨자에게는 10만 엔에 상당하는 과금 통화가 지급되는 것이었습니다. 이 이벤트는 많은 플레이어에게 서프라이즈를 전달하여 매우 좋은 이벤트로 보였습니다. 그러나 당첨 번호 발표일에 이변이 발생했습니다. 로또에 당첨되지 못한 플레이어들로부터 「의욕이 사라졌다」 「격차가 생긴다」와 같은 실망의 목소리가 터져 나온 것입니다. 이러한 목소리는 소셜 네트워크를 통해 커져 수습할 수 없게 되었습니다. 결국 운영 측은 전원이 3등에 당첨된 것으로 하여 사태를 해결하려 했지만, 오히려 더 큰 혼란을 초래하는 결과가 되었습니다. 이 건에 대해서는 무엇이 정답인지 저도 알 수 없습니다. 화려한 경품을 준비할 때는 기댓값 조절도 함께 이루어져야 한다는 것이 교훈이라는 점만은 틀림없어 보입니다.","lang":"ko","section":"design_knowledge","summary":"너무 화려한 이벤트 보상의 위험성에 대해","title":"이벤트 보상","url":"/ko/design_knowledge/fail/too_gorgeous_prizes/"},{"content":"플레이어의 리텐션율을 높이는 방안으로 효과적인 것이 로그인 보너스입니다. 매일 로그인하기만 해도 게임 내 아이템을 받을 수 있다면, 플레이어는 일단 게임을 켜보려는 마음이 들 확률이 높아집니다. 그런 로그인 보너스에서 흔히 저지르는 실수를 소개합니다. 매일 로그인해 주셔서 감사합니다 예를 들어 1월의 로그인 보너스를 준비할 때 「31일 동안 로그인하면 10연차 가챠 티켓을 증정!」 이라는 기획을 하고 싶다고 합시다. 매일 빠짐없이 로그인해 주는 플레이어를 격려하고 싶은 마음은 매우 이해가 가지만, 사실 이는 좋지 않은 방법입니다. 왜냐하면 기간 중 단 한 번이라도 로그인하지 못한 플레이어가 「이제 됐다」며 그 이후로 한 번도 로그인해 주지 않게 될 가능성이 있기 때문입니다. 리텐션을 높이려는 목적의 로그인 보너스에서 오히려 플레이어의 리텐션을 해쳐서는 본말이 전도됩니다. 연속 로그인으로 큰 보상을 주고자 할 때는 20일째 정도로 설정하고, 나머지 10일은 무난한 아이템으로 해두는 것을 권장합니다.","lang":"ko","section":"design_knowledge","summary":"로그인 보너스의 설계에 대해","title":"로그인 보너스","url":"/ko/design_knowledge/fail/login_rewards/"},{"content":"루틴을 만들어내기 위해 매일 변화를 가져오는 구조를 마련하는 것도 중요하지만, 1년간 게임을 계속 즐기게 하려면 매주의 변화도 중요합니다. 그렇다고 해도 1주일 이상의 주기를 설정하는 게임도 존재합니다. 개발 리소스에 맞추어 무리 없이 변화를 가져올 수 있는 빈도가 어느 정도인지를 고려한 후 게임을 설계하는 것도 중요합니다. 하지만 작더라도 좋으니 2주에 한 번은 반드시 변화를 가져오도록 합시다. 게임 내에 조금이라도 변화가 있다는 것은 매일 플레이하는 플레이어에게 중요합니다. 일반적으로 이루어지는 변화의 예를 들어 보겠습니다. 신규 캐릭터 추가 신규 시나리오/퀘스트 추가 기간 한정 시나리오/퀘스트 추가 방향성으로는 두 가지가 있으며, 1과 2는 게임 전체의 업데이트입니다. 3은 지금만 즐길 수 있는 콘텐츠를 준비함으로써 계절감 있는 콘텐츠를 제공하거나, 다른 작품과의 콜라보레이션 시나리오로 신규 플레이어의 흥미를 끌 수 있습니다. 이들 전부를 매주 진행할 필요는 없으며, 1주일씩 어긋나게 하여 3주마다 신규 캐릭터가 추가되는 것과 같은 주기로 만드는 것이 현실적입니다.","lang":"ko","section":"design_knowledge","summary":"매주 게임 내에 무언가 변화를 가져오도록 합시다","title":"매주 변화를 가져오라","url":"/ko/design_knowledge/success/bring_change_game_every_week/"},{"content":"출시 시점에 게임이 흥행하고 있는 것처럼 연출하기 위해, 거래처에 의뢰하여 대량의 게임 내 결제를 진행하게 한 부정행위가 있었습니다. 이를 통해 게임은 매출 랭킹에서 상위에 랭크인했고, 이를 본 플레이어가 새롭게 유입되는 흐름을 노린 거래였습니다. 이러한 거래는 외부에서는 알 수 없지만, 내부 고발로 인해 밝혀졌습니다. 그러나 기업이 공개한 정보에 따르면 부정하게 매출을 조작한 금액은 결코 적지 않았지만, 랭킹 결과를 좌우할 만큼 큰 금액은 아니었던 것으로 보입니다. 본 건에 대해 그러한 결론이 나왔다는 이야기는 나오지 않았지만, 분식회계로도 볼 수 있는 행위이므로 절대 따라 하지 않도록 합시다.","lang":"ko","section":"design_knowledge","summary":"매출 랭킹의 의도적인 조작에 대하여","title":"매출 랭킹 조작","url":"/ko/design_knowledge/fail/chart_manipulation/"},{"content":"매일 특정 시각(예를 들어 오후 7시~오후 8시)에 단 한 번만 도전할 수 있는 퀘스트를 준비합니다. 이 퀘스트의 보상은 매력적인 것으로 설정해야 합니다. 모바일 푸시 알림을 결합하여, 플레이어에게 “지금 게임을 플레이하면 이득이다\"라고 알리는 것도 효과적입니다.","lang":"ko","section":"design_knowledge","summary":"매일 특정 시각에만 도전할 수 있는 퀘스트","title":"시간 한정 퀘스트","url":"/ko/design_knowledge/success/time_limited_quest/"},{"content":"육성에 사용하는 소재를 수집하기 위해 반복 플레이를 요구하는 유형의 게임에서는 게임 내 리소스의 배출량 관리가 중요합니다. 경험치·게임 내 통화와 같은 다양한 콘텐츠에서 지급될 수 있는 리소스의 배출량을 결정할 때는 특히 신중하게 검토해야 합니다. 플레이어는 영리하기 때문에, 특정 콘텐츠에서 효율적으로 리소스를 수집할 수 있다는 것을 알게 되면 그 행동을 반복합니다. 그리고 이는 게임 내 경제를 파괴하거나 게임 밸런스를 붕괴시키는 결과로 이어집니다. 이를 바로잡기 위해 리소스 배출량을 하향 조정하는 조치를 취하면, 너프로 인해 플레이어의 원성을 피할 수 없게 됩니다. 이러한 게임을 디자인할 때, 플레이 횟수에 제한이 없어 플레이어의 시간이 허락하는 한 계속 플레이할 수 있는 콘텐츠는 시간당 리소스 배출량을 사전에 정해 두어야 합니다. 게임 내 통화는 어떤 방식으로 플레이하더라도 “1000G/시간\"만 지급된다고 정해 버리면, 콘텐츠 플레이 시간으로 이 숫자를 나누어 콘텐츠가 배출해야 할 적정량을 결정할 수 있습니다. 스태미나가 있는 경우에는 “1000G / 1시간당 스태미나 회복량\"을 스태미나 1 소비당 얻을 수 있는 리소스 획득량으로 정하고, 콘텐츠가 소비하는 스태미나양으로부터 배출해야 할 리소스의 적정량을 결정할 수 있습니다. 이 사고방식을 확장하면 “하루에 한 번만 도전할 수 있지만 24시간분의 리소스를 획득할 수 있다\"는 것과 같은 콘셉트로 콘텐츠를 마련함으로써, 짧은 시간만 플레이할 수 있는 플레이어의 리소스 획득량을 끌어올리는 콘텐츠를 준비할 수 있습니다. 마지막으로, “720시간(1개월간) 플레이함으로써 캐릭터를 성장시킬 수 있게 하고 싶다\"는 콘셉트라면, “시간당 리소스 배출량 * 720\"의 리소스를 필요로 하는 성장 요소를 마련하면 되는 것입니다.","lang":"ko","section":"design_knowledge","summary":"시간당 리소스 배출량을 정함으로써 콘텐츠를 공평하게 다룹시다","title":"시간당 리소스 배출량 정하기","url":"/ko/design_knowledge/success/determine_resource_emissions_per_hour/"},{"content":"게임 내에서는 “원정\"이라는 이름으로 구현되는 경우가 많은 기능입니다. 퀘스트 공략에 게임 내에서의 성공 여부가 아니라, 현실 시간의 경과를 기다림으로써 보상을 얻는 요소입니다. “퀘스트를 시작한 지 12시간이 지나면 보상을 받을 수 있다\"와 같은 구조로 만들면, 플레이어는 아침과 저녁, 혹은 하루에 한 번 로그인하는 플레이 사이클을 형성할 수 있습니다. 원정에 캐릭터를 내보내는 데 필요한 노력도 적기 때문에, 매일 플레이하도록 유도하기 쉬운 사양입니다.","lang":"ko","section":"design_knowledge","summary":"다시 로그인하도록 유도하기 위해 시간의 경과를 요구한다","title":"시간의 경과를 요구한다","url":"/ko/design_knowledge/success/require_passage_of_time/"},{"content":"매일 플레이하게 하려면, 오늘이 아니라 내일 플레이하는 것에 의미를 부여하는 것이 효과적인 수단입니다. “요일 퀘스트” 라는 것이 알기 쉬운 예일 것입니다. 월요일은 “바람 속성 육성 소재” 화요일은 “불 속성 육성 소재” 수요일은 “물 속성 육성 소재” 목요일은 “땅 속성 육성 소재” 금요일은 “게임 내 통화” 토요일은 “어둠 속성 육성 소재” 일요일은 “빛 속성 육성 소재” 와 같이, 각 요일에만 플레이 가능한 퀘스트를 마련하고, 그 퀘스트의 보상으로 특정 속성의 캐릭터를 육성하기 위한 소재를 제공하는 방법이 있습니다. 이를 통해 플레이어는 “불 속성 캐릭터를 육성하고 싶은데 소재가 없고, 오늘은 월요일이다” 라는 상황이 되면, 다음 날 로그인해 줄 가능성을 높일 수 있습니다.","lang":"ko","section":"design_knowledge","summary":"매일 플레이하는 동기를 유지하기 위해, 요일에 특징을 갖게 한다","title":"요일에 특징을 부여한다","url":"/ko/design_knowledge/success/make_days_of_week_uniqueness/"},{"content":"게임 개발자가 크게 신경 쓰지 않고 법무에 맡겨버리기 쉬운 이용약관의 내용에서 실패한 사례 소개입니다. 어느 게임에서는 이용약관에서 수집하는 개인정보의 내용이 기이한 것이었습니다. 어째서인지 수집 정보에 “은행 계좌\"나 “마이넘버(일본의 사회보장번호)” 등이 열거되어 있었던 것입니다. 게다가 이 게임의 개발사가 해외 개발자였기 때문에 “스파이 활동이 아니냐\"는 식으로 소셜 네트워크에서 확산되어 버렸습니다. 그 후 다른 “앱의 내용을 그대로 가져다 썼다\"는 설명과 함께 현실적인 내용으로 수정되었지만, 이러한 문제는 애초에 일어나지 않는 것이 바람직함은 두말할 나위가 없습니다. 게임의 내용으로 논란이 되는 것이라면 몰라도, 이용약관의 문구로 논란이 되는 것은 몇 년에 걸쳐 게임을 만들어 온 개발자에게 더할 나위 없이 불행한 일이라고 저는 생각합니다.","lang":"ko","section":"design_knowledge","summary":"이용약관 내용에 대해","title":"이용약관","url":"/ko/design_knowledge/fail/collection_of_personal_information/"},{"content":"게임에는 다양한 요소를 담게 되지만, 그다지 활용되지 않는 기능이나 콘텐츠가 반드시 생겨납니다. 이러한 콘텐츠는 방치하지 말고 개선합시다. 콘텐츠가 인기 없는 이유는 다음과 같이 분류할 수 있습니다. 재미가 없다 보상이 매력적이지 않다 시간이 너무 많이 걸린다 재미가 없다 재미없는 콘텐츠는 과감하게 버리는 것도 중요합니다. 그러한 콘텐츠를 유지하는 비용을 다른 기능으로 돌리는 판단도 필요합니다. 보상이 매력적이지 않다 콘텐츠 자체는 나쁘지 않지만, 보상에 매력이 없어서 플레이되지 않는 것도 흔한 패턴입니다. 내용에 손을 대려면 상당한 인적 리소스가 필요합니다. 우선 실행하기 쉬운 방법으로서, 콘텐츠에서 얻을 수 있는 보상을 매력적으로 만들어 플레이어가 해당 콘텐츠를 접할 기회를 늘려보는 것이 좋습니다. 시간이 너무 많이 걸린다 내용도 나쁘지 않고 보상도 나쁘지 않게 설정했는데도 인기가 없는 콘텐츠가 있다면, 그 콘텐츠를 플레이하는 데 필요한 시간에 대해 생각해봅시다. 콘텐츠를 플레이하는 데 필요한 시간이나 조작 횟수가 많은 경우, 콘텐츠의 플레이 스타일을 재검토해야 할 수도 있습니다. 더 짧은 시간에 즐길 수 있도록 하거나, 플레이 시간은 그대로 두고 오토플레이 기능을 추가하여 조작 횟수를 줄임으로써 플레이어가 접하게 될 수도 있습니다.","lang":"ko","section":"design_knowledge","summary":"인기 없는 콘텐츠를 파악하고 개선합시다","title":"인기 없는 콘텐츠를 개선한다","url":"/ko/design_knowledge/success/improve_unpopular_content/"},{"content":"게임을 장기적으로 운영해 나가다 보면 더 강력한 적을 계속 추가하게 됩니다. 어떤 게임에서는 1사이클에 1시간 정도 걸리는 게임플레이를 통해 캐릭터를 육성하고, 그 육성 결과의 캐릭터를 사용하여 다른 플레이어와 경쟁하는 게임 모드를 즐길 수 있는 사양을 채택하고 있었습니다. 캐릭터 육성 파트에 새로운 모드를 추가하여, 그쪽에서 육성함으로써 기존과는 다른 파라미터 밸런스를 가진 캐릭터를 육성할 수 있도록 했습니다. 추가된 모드에서는 5개 있는 파라미터 중 하나가 기존보다 30% 높은 캐릭터를 육성할 수 있도록 했습니다. 플레이어는 이 내용을 보고 필사적으로 이 모드의 공략법을 모색합니다. 새로운 모드에서의 육성을 효율화하는 아이템도 추가되었기 때문에, 플레이어는 가챠로 그 아이템을 입수하여 새로운 모드에 도전했습니다. 이윽고 새로운 모드에서 최대 파라미터의 캐릭터 육성에 성공한 플레이어가 등장하여 이렇게 말했습니다. “수치만큼 강하지 않다” 이 이면에는 개발자의 갈등이 있었습니다. 기존에 육성해 둔 캐릭터를 전부 과거의 것으로 만들어버리는 것은 과거 플레이어들의 노력을 부정하는 것이 될 수 있기 때문입니다. 그래서 머리를 짜낸 개발자는 수치상으로는 30% 커지지만, 실제 계산식에서는 상한 인상분에 대해서는 1/8밖에 영향을 주지 않도록 했습니다. 이를 통해 과거에 육성한 캐릭터와의 차이를 줄이려고 한 것입니다. 하지만 이는 플레이어에게 간파당하여 “30% 강하게 성장시킨 셈이었는데, 실제로는 3.75%밖에 강해지지 않았다\"는 비판을 받게 됩니다. 결국 1/8이라는 수치를 1/2로 바꿈으로써 사태를 수습했지만, 개발자는 이번에도 좋은 뜻으로 인플레이션 억제 계산식을 도입했을 것임에도 그것이 역효과를 낸 패턴입니다. 새 모드가 플레이어에게 주는 인상은 약해지겠지만, 차라리 파라미터 상승량을 30%가 아니라 3.75%라고 솔직하게 표기하는 편이 나았을지도 모릅니다.","lang":"ko","section":"design_knowledge","summary":"인플레이션 억제 사양에 대해","title":"인플레이션 억제","url":"/ko/design_knowledge/fail/inflation_control/"},{"content":"사례 어느 게임은 500만 다운로드를 넘는 성과를 올렸으며, 플레이어들의 평가도 매우 높은 게임이었습니다. 그러나 그렇게 인기 있던 게임이 갑자기 서비스를 종료하게 되었습니다. 이유는 메타게임 설계가 좋지 않아, 플레이어가 돈을 지불하지 않아도 게임을 충분히 즐길 수 있었기 때문이었습니다. 그로 인해 플레이어 수의 증가에 비례하여 매출은 오르지 않았고, 개발·운영팀과 서비스 제공을 위한 인프라 비용을 유지할 수 없었습니다. 돌아보기 이 사례에서는 플레이어 객단가를 높일 수 있었다면 서비스를 계속할 수 있었을지도 모르지만, 나름대로 노력했음에도 결과가 따라주지 않아 서비스 종료에 이른 것으로 보는 것이 타당할 것입니다. 그렇다면 왜 객단가를 높일 수 없었는지 돌아보겠습니다. 메타게임의 기능 부전 이 게임에는 메타게임이 존재하기는 했지만, 메타게임에서 육성한 성과가 메인 게임 공략을 유리하게 만드는 기능이 제대로 작동하지 않고 있었습니다. 즉, 메타게임은 있지만 그곳에서 육성하는 의미가 별로 없었던 것입니다. 그러다 보니 플레이어는 육성은 할 수 있으니 꾸준히 육성은 하지만, 서둘러 육성하고 싶다는 동기는 없어 시간 단축 과금이 사용되지 않았습니다. 저연령층을 지나치게 타겟팅함 이 게임은 저연령층에게 인기가 높았으며, 미성년 플레이어가 60%를 차지했습니다. 특히 14세 미만 플레이어가 많아 전체의 1/3을 차지하고 있었습니다. 저연령층 플레이어가 돈을 지불해 줄 것을 기대하기는 어려우며, 필연적으로 ARPU는 낮아집니다. 이것이 플레이어는 늘어나 인프라 비용은 무겁게 짓누르지만 매출은 오르지 않는 좋지 않은 상황을 만들어낸 것으로 보입니다.","lang":"ko","section":"design_knowledge","summary":"플레이어 1인당 매출이 낮은 문제에 대하여","title":"저ARPU","url":"/ko/design_knowledge/fail/arpu_too_low/"},{"content":"게임 출시 1주년이나 100일, 또는 2.5주년(!?)처럼 축하할 수 있는 타이밍이 있다면 적극적으로 축하합시다. 이 타이밍에는 “특별한 로그인 보너스 준비하기”, “매일 10회 가챠를 무료로 뽑기”, “퀘스트 진행에 필요한 스태미나 절반으로 줄이기”, “경험치 획득량 2배로 늘리기” 등 다양한 시도를 진행합니다. 푸짐하게 베풂으로써 “아, 그 게임이 출시한 지 1년이 지났구나. 결국 처음 3개월밖에 안 했지만, 지금 다시 시작하면 이득인 것 같으니 다시 해볼까\"라며 플레이어를 다시 불러들이는 효과가 있습니다. 사랑받는 게임이라면, 플레이어도 응원하는 마음으로 평소보다 더 많은 돈을 지불해 줄 것도 기대할 수 있습니다.","lang":"ko","section":"design_knowledge","summary":"주년 기념 이벤트는 성대하게","title":"주년 기념 이벤트","url":"/ko/design_knowledge/success/anniversary_event/"},{"content":"가챠는 아무리 돈을 지불해도 실제로 캐릭터를 얻을 수 있을지 알 수 없는 구조라서 나쁘다. 저도 그렇게 생각하던 시절이 있었습니다. 하지만 그것을 완전히 뒤집는 실패 사례를 소개하겠습니다. 어느 게임에서는 신규 캐릭터를 1,000엔에 판매하기로 했습니다. 가챠는 1회 300엔이 일반적인 요금이므로, 3회 조금 넘는 금액으로 확실하게 캐릭터를 손에 넣을 수 있다는 것은 파격적이라고 생각합니다. 그러나 이 시도는 무과금 플레이어들의 마음에 들지 않았습니다. 무과금 플레이어는 이벤트 보상 등으로 얻는 게임 내 재화를 사용해 가챠를 뽑아 새로운 캐릭터를 손에 넣습니다. 즉, 이러한 플레이어들은 절대로 이 캐릭터를 입수할 수 없는 것입니다. “돈을 내지 않았으니 그럴 수도 있지\"라는 운영 측의 심정도 이해는 됩니다. 하지만 무과금 플레이어가 게임 플레이어의 90%를 차지한다는 사실도 잊지 말아야 합니다. 캐릭터를 직접 판매할 경우에는, 이와 함께 다른 수단으로도 무과금 플레이어가 입수할 수 있도록 하는 편이 무난해 보입니다.","lang":"ko","section":"design_knowledge","summary":"캐릭터의 직접 구매에 대하여","title":"캐릭터 구매","url":"/ko/design_knowledge/fail/purchase_character/"},{"content":"사례 한 스마트폰용 게임은 가정용 게임기용 게임을 이식하여 만들기로 했습니다. 가정용 게임에 수록된 미니게임을 메인 콘텐츠로 삼고, 추가 콘텐츠로 미니게임을 판매하는 형태로 출시되었습니다. 가정용 게임에는 50개가 넘는 미니게임이 있었지만, 출시 시점에는 그중 5종류가 선별되었고, 그중 2개를 무료로 플레이할 수 있게 했습니다. 미니게임은 1종류당 500엔 상당의 게임 내 화폐로 판매됩니다. 그러나 출시 직후부터 서버 장애가 계속되어, 플레이어에게 사과의 의미로 100엔 분의 게임 내 화폐를 배포하는 일이 반복되었습니다. 그리고 다섯 번째 장애가 발생했을 때, 개발자는 중대한 결단을 내려야 하는 상황에 몰립니다. 여기서 100엔 분의 과금 통화를 배포해 버리면 “3개밖에 없는 추가 콘텐츠 중 하나를 무상으로 얻는 플레이어가 대량으로 발생해 버린다\"는 문제가 있었습니다. 사과의 금액을 낮추려 해도 과금 통화의 단위가 100엔=1개였기 때문에 낮추기도 어려웠습니다. 그래서 개발자는 장애에 대한 사과를 그만두고, 마치 아무 일도 없었던 것처럼 행동했습니다. 장애가 진정될 무렵에는 플레이어들이 떠나갔고, 남아 있던 플레이어들도 초기에 구현된 미니게임 이후로 추가되지 않는 것에 싫증을 느껴 떠나갔습니다. 돌아보기 자, 이번 사례의 문제는 여러 가지가 있어 보입니다. 메타게임에 대한 이해 부족 먼저 메타게임을 제대로 이해하지 못했다는 점입니다. 메인 게임을 분할 판매하는 것이라면 운영형 게임의 형태를 취할 필요가 없습니다. 메인 콘텐츠 추가에는 시간이 걸린다 콘텐츠 추가=메인 게임 추가가 되어, 콘텐츠 추가에 시간과 비용이 지나치게 많이 듭니다. 결과적으로 한 달에 여러 번 게임 내에 변화를 주고 싶은 운영형 게임임에도 불구하고, 콘텐츠 추가에 한 달 이상 걸리기 때문에 변화를 일으킬 수 없었습니다. 매일 할 일이 없다 메인 게임을 강화하기 위해 매일 꾸준히 플레이하는 게임 사이클을 마련하지 않았기 때문에, 메인 게임에 싫증나면 게임은 끝입니다. 정작 중요한 메인 게임도 미니게임이기 때문에, 이래서는 플레이어가 일주일만 버텨줘도 다행일 것입니다. 말 그대로 양동이에 구멍이 뚫려 있는 상태입니다. 이대로 프로모션을 해서 플레이어를 모아도 미래가 없습니다. 과금 통화 단위 설정 그 밖에도 과금 통화의 단위를 정하는 방식도 좋지 않았던 것으로 보입니다. 일반적으로 1엔=1통화 또는 2엔=1통화로 설정하는 것을, 100엔=1통화로 설정해 버림으로써 플레이어에게 사과의 의미로 과금 통화를 배포하는 비즈니스적 판단을 더욱 어렵게 만들어 버렸습니다. 과금액 상한이 설정되어 있다 500엔짜리 콘텐츠가 3종류라면 1500엔이 한 명의 플레이어로부터 얻을 수 있는 매출의 상한입니다. 게임 플레이어 중 과금해주는 플레이어의 비율을 5%로 잡고, 평균 1.5개의 추가 콘텐츠를 구매해준다고 가정해 봅시다. 그러면 1만 명이 플레이해준다고 할 때, 과금해주는 사람은 500명, 평균 750엔 분의 콘텐츠를 구매해준다고 하면 월간 매출은 350만 엔이 됩니다. 추가 콘텐츠를 개발하기 위한 개발팀을 유지하는 데 월 1000만 엔이 필요하다면, 매달 3만 명이 새롭게 플레이해줄 필요가 있습니다. 신규로 3만 명의 플레이어를 확보하려면 그에 걸맞은 홍보를 해야 하므로, 이 게임은 출시하기도 전에 수익을 내지 못할 것이 뻔히 보입니다.","lang":"ko","section":"design_knowledge","summary":"콘텐츠 부족으로 인한 문제에 대해","title":"콘텐츠 부족","url":"/ko/design_knowledge/fail/lack_of_content/"}]